{"version":3,"sources":["webpack://MG/webpack/bootstrap","webpack://MG/./src/map/enums.js","webpack://MG/./node_modules/core-js/modules/_export.js","webpack://MG/./src/geometry/Point.js","webpack://MG/./src/geometry/LatLng.js","webpack://MG/./src/core/Util.js","webpack://MG/./src/geometry/crs/CRS.EPSG3395.js","webpack://MG/./src/geometry/projection/Projection.LonLat.js","webpack://MG/./src/geometry/projection/Projection.Mercator.js","webpack://MG/./src/geometry/crs/CRS.EPSG4326.js","webpack://MG/./src/geometry/crs/CRS.Simple.js","webpack://MG/./src/geometry/crs/index.js","webpack://MG/./src/geometry/simplify.js","webpack://MG/./src/geometry/QuadTree.js","webpack://MG/./src/geometry/index.js","webpack://MG/./src/core/Handler.js","webpack://MG/./src/core/index.js","webpack://MG/./src/geometry/Envelope.js","webpack://MG/./node_modules/core-js/modules/_an-object.js","webpack://MG/./src/core/Browser.js","webpack://MG/./node_modules/core-js/modules/_global.js","webpack://MG/./src/geometry/Bounds.js","webpack://MG/./node_modules/core-js/modules/_fails.js","webpack://MG/./src/geometries/geopoint.js","webpack://MG/./src/geometries/geolinestring.js","webpack://MG/./src/geometries/geolinearring.js","webpack://MG/./src/geometries/geopolygon.js","webpack://MG/./src/geometries/geomultipoint.js","webpack://MG/./src/geometries/geomultilinestring.js","webpack://MG/./src/geometries/geomultipolygon.js","webpack://MG/./src/geometries/geometrycollection.js","webpack://MG/./src/geometries/WktReader.js","webpack://MG/./src/geometries/index.js","webpack://MG/./node_modules/core-js/modules/_is-object.js","webpack://MG/./src/layer/tilesource.js","webpack://MG/./src/drawing/mapprimitive.js","webpack://MG/./src/geometry/LatLngBounds.js","webpack://MG/./node_modules/core-js/modules/_wks.js","webpack://MG/./src/geometries/geometry.js","webpack://MG/./node_modules/core-js/modules/_to-length.js","webpack://MG/./node_modules/core-js/modules/_descriptors.js","webpack://MG/./node_modules/core-js/modules/_object-dp.js","webpack://MG/./src/geometry/rectangle.js","webpack://MG/./node_modules/core-js/modules/_to-object.js","webpack://MG/./node_modules/core-js/modules/_a-function.js","webpack://MG/./src/drawing/viewport.js","webpack://MG/./node_modules/axios/index.js","webpack://MG/./node_modules/core-js/modules/_hide.js","webpack://MG/./node_modules/core-js/modules/_redefine.js","webpack://MG/./node_modules/core-js/modules/_string-html.js","webpack://MG/./node_modules/axios/lib/utils.js","webpack://MG/./src/geometries/coordinate.js","webpack://MG/./src/layer/tile.js","webpack://MG/./node_modules/core-js/modules/_has.js","webpack://MG/./node_modules/core-js/modules/_to-iobject.js","webpack://MG/./node_modules/core-js/modules/_object-gopd.js","webpack://MG/./node_modules/core-js/modules/_object-gpo.js","webpack://MG/./src/geometry/crs/CRS.js","webpack://MG/./node_modules/core-js/modules/_core.js","webpack://MG/./node_modules/core-js/modules/_ctx.js","webpack://MG/./node_modules/core-js/modules/_cof.js","webpack://MG/./node_modules/core-js/modules/_to-integer.js","webpack://MG/./node_modules/core-js/modules/_strict-method.js","webpack://MG/./src/geometry/Transformation.js","webpack://MG/./src/geometry/crs/CRS.Earth.js","webpack://MG/./node_modules/core-js/modules/_to-primitive.js","webpack://MG/./node_modules/core-js/modules/_defined.js","webpack://MG/./node_modules/core-js/modules/_object-sap.js","webpack://MG/./node_modules/core-js/modules/_array-methods.js","webpack://MG/./node_modules/core-js/modules/_typed-array.js","webpack://MG/./node_modules/core-js/modules/_metadata.js","webpack://MG/./node_modules/core-js/modules/_library.js","webpack://MG/./node_modules/core-js/modules/_meta.js","webpack://MG/./node_modules/core-js/modules/_add-to-unscopables.js","webpack://MG/./src/drawing/Colour.js","webpack://MG/./src/core/Events.js","webpack://MG/./node_modules/core-js/modules/_property-desc.js","webpack://MG/./node_modules/core-js/modules/_uid.js","webpack://MG/./node_modules/core-js/modules/_object-keys.js","webpack://MG/./node_modules/core-js/modules/_to-absolute-index.js","webpack://MG/./node_modules/core-js/modules/_object-create.js","webpack://MG/./node_modules/core-js/modules/_object-gopn.js","webpack://MG/./node_modules/core-js/modules/_set-species.js","webpack://MG/./node_modules/core-js/modules/_an-instance.js","webpack://MG/./node_modules/core-js/modules/_for-of.js","webpack://MG/./node_modules/core-js/modules/_redefine-all.js","webpack://MG/./node_modules/core-js/modules/_validate-collection.js","webpack://MG/./node_modules/core-js/modules/_set-to-string-tag.js","webpack://MG/./node_modules/core-js/modules/_classof.js","webpack://MG/./node_modules/core-js/modules/_string-trim.js","webpack://MG/./node_modules/core-js/modules/_iterators.js","webpack://MG/./src/core/Class.js","webpack://MG/./node_modules/cancelable-promise/dist/CancelablePromise.js","webpack://MG/./node_modules/core-js/modules/_shared.js","webpack://MG/./node_modules/core-js/modules/_iobject.js","webpack://MG/./node_modules/core-js/modules/_object-pie.js","webpack://MG/./node_modules/core-js/modules/_flags.js","webpack://MG/./node_modules/core-js/modules/_species-constructor.js","webpack://MG/./src/geometry/projection/Projection.SphericalMercator.js","webpack://MG/./src/geometry/crs/CRS.EPSG3857.js","webpack://MG/./node_modules/core-js/modules/_array-includes.js","webpack://MG/./node_modules/core-js/modules/_object-gops.js","webpack://MG/./node_modules/core-js/modules/_is-array.js","webpack://MG/./node_modules/core-js/modules/_string-at.js","webpack://MG/./node_modules/core-js/modules/_is-regexp.js","webpack://MG/./node_modules/core-js/modules/_iter-detect.js","webpack://MG/./node_modules/core-js/modules/_regexp-exec-abstract.js","webpack://MG/./node_modules/core-js/modules/_fix-re-wks.js","webpack://MG/./node_modules/core-js/modules/_user-agent.js","webpack://MG/./node_modules/core-js/modules/_collection.js","webpack://MG/./node_modules/core-js/modules/_typed.js","webpack://MG/./node_modules/core-js/modules/_object-forced-pam.js","webpack://MG/./node_modules/core-js/modules/_set-collection-of.js","webpack://MG/./node_modules/core-js/modules/_set-collection-from.js","webpack://MG/(webpack)/buildin/global.js","webpack://MG/./node_modules/core-js/modules/_dom-create.js","webpack://MG/./node_modules/core-js/modules/_wks-define.js","webpack://MG/./node_modules/core-js/modules/_shared-key.js","webpack://MG/./node_modules/core-js/modules/_enum-bug-keys.js","webpack://MG/./node_modules/core-js/modules/_html.js","webpack://MG/./node_modules/core-js/modules/_set-proto.js","webpack://MG/./node_modules/core-js/modules/_string-ws.js","webpack://MG/./node_modules/core-js/modules/_inherit-if-required.js","webpack://MG/./node_modules/core-js/modules/_string-repeat.js","webpack://MG/./node_modules/core-js/modules/_math-sign.js","webpack://MG/./node_modules/core-js/modules/_math-expm1.js","webpack://MG/./node_modules/core-js/modules/_iter-define.js","webpack://MG/./node_modules/core-js/modules/_iter-create.js","webpack://MG/./node_modules/core-js/modules/_string-context.js","webpack://MG/./node_modules/core-js/modules/_fails-is-regexp.js","webpack://MG/./node_modules/core-js/modules/_is-array-iter.js","webpack://MG/./node_modules/core-js/modules/_create-property.js","webpack://MG/./node_modules/core-js/modules/core.get-iterator-method.js","webpack://MG/./node_modules/core-js/modules/_array-species-create.js","webpack://MG/./node_modules/core-js/modules/_array-fill.js","webpack://MG/./node_modules/core-js/modules/es6.array.iterator.js","webpack://MG/./node_modules/core-js/modules/_regexp-exec.js","webpack://MG/./node_modules/core-js/modules/_advance-string-index.js","webpack://MG/./node_modules/core-js/modules/_task.js","webpack://MG/./node_modules/core-js/modules/_microtask.js","webpack://MG/./node_modules/core-js/modules/_new-promise-capability.js","webpack://MG/./node_modules/core-js/modules/_typed-buffer.js","webpack://MG/./node_modules/babel-polyfill/lib/index.js","webpack://MG/./node_modules/core-js/modules/_ie8-dom-define.js","webpack://MG/./node_modules/core-js/modules/_wks-ext.js","webpack://MG/./node_modules/core-js/modules/_object-keys-internal.js","webpack://MG/./node_modules/core-js/modules/_object-dps.js","webpack://MG/./node_modules/core-js/modules/_object-gopn-ext.js","webpack://MG/./node_modules/core-js/modules/_object-assign.js","webpack://MG/./node_modules/core-js/modules/_same-value.js","webpack://MG/./node_modules/core-js/modules/_bind.js","webpack://MG/./node_modules/core-js/modules/_invoke.js","webpack://MG/./node_modules/core-js/modules/_parse-int.js","webpack://MG/./node_modules/core-js/modules/_parse-float.js","webpack://MG/./node_modules/core-js/modules/_a-number-value.js","webpack://MG/./node_modules/core-js/modules/_is-integer.js","webpack://MG/./node_modules/core-js/modules/_math-log1p.js","webpack://MG/./node_modules/core-js/modules/_math-fround.js","webpack://MG/./node_modules/core-js/modules/_iter-call.js","webpack://MG/./node_modules/core-js/modules/_array-reduce.js","webpack://MG/./node_modules/core-js/modules/_array-copy-within.js","webpack://MG/./node_modules/core-js/modules/_iter-step.js","webpack://MG/./node_modules/core-js/modules/es6.regexp.exec.js","webpack://MG/./node_modules/core-js/modules/es6.regexp.flags.js","webpack://MG/./node_modules/core-js/modules/_perform.js","webpack://MG/./node_modules/core-js/modules/_promise-resolve.js","webpack://MG/./node_modules/core-js/modules/es6.map.js","webpack://MG/./node_modules/core-js/modules/_collection-strong.js","webpack://MG/./node_modules/core-js/modules/es6.set.js","webpack://MG/./node_modules/core-js/modules/es6.weak-map.js","webpack://MG/./node_modules/core-js/modules/_collection-weak.js","webpack://MG/./node_modules/core-js/modules/_to-index.js","webpack://MG/./node_modules/core-js/modules/_own-keys.js","webpack://MG/./node_modules/core-js/modules/_flatten-into-array.js","webpack://MG/./node_modules/core-js/modules/_string-pad.js","webpack://MG/./node_modules/core-js/modules/_object-to-array.js","webpack://MG/./node_modules/core-js/modules/_collection-to-json.js","webpack://MG/./node_modules/core-js/modules/_array-from-iterable.js","webpack://MG/./node_modules/core-js/modules/_math-scale.js","webpack://MG/./node_modules/axios/lib/helpers/bind.js","webpack://MG/./node_modules/axios/lib/helpers/buildURL.js","webpack://MG/./node_modules/axios/lib/cancel/isCancel.js","webpack://MG/./node_modules/axios/lib/defaults.js","webpack://MG/./node_modules/axios/lib/adapters/xhr.js","webpack://MG/./node_modules/axios/lib/core/createError.js","webpack://MG/./node_modules/axios/lib/core/mergeConfig.js","webpack://MG/./node_modules/axios/lib/cancel/Cancel.js","webpack://MG/./node_modules/core-js/shim.js","webpack://MG/./node_modules/core-js/modules/es6.symbol.js","webpack://MG/./node_modules/core-js/modules/_function-to-string.js","webpack://MG/./node_modules/core-js/modules/_enum-keys.js","webpack://MG/./node_modules/core-js/modules/es6.object.create.js","webpack://MG/./node_modules/core-js/modules/es6.object.define-property.js","webpack://MG/./node_modules/core-js/modules/es6.object.define-properties.js","webpack://MG/./node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","webpack://MG/./node_modules/core-js/modules/es6.object.get-prototype-of.js","webpack://MG/./node_modules/core-js/modules/es6.object.keys.js","webpack://MG/./node_modules/core-js/modules/es6.object.get-own-property-names.js","webpack://MG/./node_modules/core-js/modules/es6.object.freeze.js","webpack://MG/./node_modules/core-js/modules/es6.object.seal.js","webpack://MG/./node_modules/core-js/modules/es6.object.prevent-extensions.js","webpack://MG/./node_modules/core-js/modules/es6.object.is-frozen.js","webpack://MG/./node_modules/core-js/modules/es6.object.is-sealed.js","webpack://MG/./node_modules/core-js/modules/es6.object.is-extensible.js","webpack://MG/./node_modules/core-js/modules/es6.object.assign.js","webpack://MG/./node_modules/core-js/modules/es6.object.is.js","webpack://MG/./node_modules/core-js/modules/es6.object.set-prototype-of.js","webpack://MG/./node_modules/core-js/modules/es6.object.to-string.js","webpack://MG/./node_modules/core-js/modules/es6.function.bind.js","webpack://MG/./node_modules/core-js/modules/es6.function.name.js","webpack://MG/./node_modules/core-js/modules/es6.function.has-instance.js","webpack://MG/./node_modules/core-js/modules/es6.parse-int.js","webpack://MG/./node_modules/core-js/modules/es6.parse-float.js","webpack://MG/./node_modules/core-js/modules/es6.number.constructor.js","webpack://MG/./node_modules/core-js/modules/es6.number.to-fixed.js","webpack://MG/./node_modules/core-js/modules/es6.number.to-precision.js","webpack://MG/./node_modules/core-js/modules/es6.number.epsilon.js","webpack://MG/./node_modules/core-js/modules/es6.number.is-finite.js","webpack://MG/./node_modules/core-js/modules/es6.number.is-integer.js","webpack://MG/./node_modules/core-js/modules/es6.number.is-nan.js","webpack://MG/./node_modules/core-js/modules/es6.number.is-safe-integer.js","webpack://MG/./node_modules/core-js/modules/es6.number.max-safe-integer.js","webpack://MG/./node_modules/core-js/modules/es6.number.min-safe-integer.js","webpack://MG/./node_modules/core-js/modules/es6.number.parse-float.js","webpack://MG/./node_modules/core-js/modules/es6.number.parse-int.js","webpack://MG/./node_modules/core-js/modules/es6.math.acosh.js","webpack://MG/./node_modules/core-js/modules/es6.math.asinh.js","webpack://MG/./node_modules/core-js/modules/es6.math.atanh.js","webpack://MG/./node_modules/core-js/modules/es6.math.cbrt.js","webpack://MG/./node_modules/core-js/modules/es6.math.clz32.js","webpack://MG/./node_modules/core-js/modules/es6.math.cosh.js","webpack://MG/./node_modules/core-js/modules/es6.math.expm1.js","webpack://MG/./node_modules/core-js/modules/es6.math.fround.js","webpack://MG/./node_modules/core-js/modules/es6.math.hypot.js","webpack://MG/./node_modules/core-js/modules/es6.math.imul.js","webpack://MG/./node_modules/core-js/modules/es6.math.log10.js","webpack://MG/./node_modules/core-js/modules/es6.math.log1p.js","webpack://MG/./node_modules/core-js/modules/es6.math.log2.js","webpack://MG/./node_modules/core-js/modules/es6.math.sign.js","webpack://MG/./node_modules/core-js/modules/es6.math.sinh.js","webpack://MG/./node_modules/core-js/modules/es6.math.tanh.js","webpack://MG/./node_modules/core-js/modules/es6.math.trunc.js","webpack://MG/./node_modules/core-js/modules/es6.string.from-code-point.js","webpack://MG/./node_modules/core-js/modules/es6.string.raw.js","webpack://MG/./node_modules/core-js/modules/es6.string.trim.js","webpack://MG/./node_modules/core-js/modules/es6.string.iterator.js","webpack://MG/./node_modules/core-js/modules/es6.string.code-point-at.js","webpack://MG/./node_modules/core-js/modules/es6.string.ends-with.js","webpack://MG/./node_modules/core-js/modules/es6.string.includes.js","webpack://MG/./node_modules/core-js/modules/es6.string.repeat.js","webpack://MG/./node_modules/core-js/modules/es6.string.starts-with.js","webpack://MG/./node_modules/core-js/modules/es6.string.anchor.js","webpack://MG/./node_modules/core-js/modules/es6.string.big.js","webpack://MG/./node_modules/core-js/modules/es6.string.blink.js","webpack://MG/./node_modules/core-js/modules/es6.string.bold.js","webpack://MG/./node_modules/core-js/modules/es6.string.fixed.js","webpack://MG/./node_modules/core-js/modules/es6.string.fontcolor.js","webpack://MG/./node_modules/core-js/modules/es6.string.fontsize.js","webpack://MG/./node_modules/core-js/modules/es6.string.italics.js","webpack://MG/./node_modules/core-js/modules/es6.string.link.js","webpack://MG/./node_modules/core-js/modules/es6.string.small.js","webpack://MG/./node_modules/core-js/modules/es6.string.strike.js","webpack://MG/./node_modules/core-js/modules/es6.string.sub.js","webpack://MG/./node_modules/core-js/modules/es6.string.sup.js","webpack://MG/./node_modules/core-js/modules/es6.date.now.js","webpack://MG/./node_modules/core-js/modules/es6.date.to-json.js","webpack://MG/./node_modules/core-js/modules/es6.date.to-iso-string.js","webpack://MG/./node_modules/core-js/modules/_date-to-iso-string.js","webpack://MG/./node_modules/core-js/modules/es6.date.to-string.js","webpack://MG/./node_modules/core-js/modules/es6.date.to-primitive.js","webpack://MG/./node_modules/core-js/modules/_date-to-primitive.js","webpack://MG/./node_modules/core-js/modules/es6.array.is-array.js","webpack://MG/./node_modules/core-js/modules/es6.array.from.js","webpack://MG/./node_modules/core-js/modules/es6.array.of.js","webpack://MG/./node_modules/core-js/modules/es6.array.join.js","webpack://MG/./node_modules/core-js/modules/es6.array.slice.js","webpack://MG/./node_modules/core-js/modules/es6.array.sort.js","webpack://MG/./node_modules/core-js/modules/es6.array.for-each.js","webpack://MG/./node_modules/core-js/modules/_array-species-constructor.js","webpack://MG/./node_modules/core-js/modules/es6.array.map.js","webpack://MG/./node_modules/core-js/modules/es6.array.filter.js","webpack://MG/./node_modules/core-js/modules/es6.array.some.js","webpack://MG/./node_modules/core-js/modules/es6.array.every.js","webpack://MG/./node_modules/core-js/modules/es6.array.reduce.js","webpack://MG/./node_modules/core-js/modules/es6.array.reduce-right.js","webpack://MG/./node_modules/core-js/modules/es6.array.index-of.js","webpack://MG/./node_modules/core-js/modules/es6.array.last-index-of.js","webpack://MG/./node_modules/core-js/modules/es6.array.copy-within.js","webpack://MG/./node_modules/core-js/modules/es6.array.fill.js","webpack://MG/./node_modules/core-js/modules/es6.array.find.js","webpack://MG/./node_modules/core-js/modules/es6.array.find-index.js","webpack://MG/./node_modules/core-js/modules/es6.array.species.js","webpack://MG/./node_modules/core-js/modules/es6.regexp.constructor.js","webpack://MG/./node_modules/core-js/modules/es6.regexp.to-string.js","webpack://MG/./node_modules/core-js/modules/es6.regexp.match.js","webpack://MG/./node_modules/core-js/modules/es6.regexp.replace.js","webpack://MG/./node_modules/core-js/modules/es6.regexp.search.js","webpack://MG/./node_modules/core-js/modules/es6.regexp.split.js","webpack://MG/./node_modules/core-js/modules/es6.promise.js","webpack://MG/./node_modules/core-js/modules/es6.weak-set.js","webpack://MG/./node_modules/core-js/modules/es6.typed.array-buffer.js","webpack://MG/./node_modules/core-js/modules/es6.typed.data-view.js","webpack://MG/./node_modules/core-js/modules/es6.typed.int8-array.js","webpack://MG/./node_modules/core-js/modules/es6.typed.uint8-array.js","webpack://MG/./node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","webpack://MG/./node_modules/core-js/modules/es6.typed.int16-array.js","webpack://MG/./node_modules/core-js/modules/es6.typed.uint16-array.js","webpack://MG/./node_modules/core-js/modules/es6.typed.int32-array.js","webpack://MG/./node_modules/core-js/modules/es6.typed.uint32-array.js","webpack://MG/./node_modules/core-js/modules/es6.typed.float32-array.js","webpack://MG/./node_modules/core-js/modules/es6.typed.float64-array.js","webpack://MG/./node_modules/core-js/modules/es6.reflect.apply.js","webpack://MG/./node_modules/core-js/modules/es6.reflect.construct.js","webpack://MG/./node_modules/core-js/modules/es6.reflect.define-property.js","webpack://MG/./node_modules/core-js/modules/es6.reflect.delete-property.js","webpack://MG/./node_modules/core-js/modules/es6.reflect.enumerate.js","webpack://MG/./node_modules/core-js/modules/es6.reflect.get.js","webpack://MG/./node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","webpack://MG/./node_modules/core-js/modules/es6.reflect.get-prototype-of.js","webpack://MG/./node_modules/core-js/modules/es6.reflect.has.js","webpack://MG/./node_modules/core-js/modules/es6.reflect.is-extensible.js","webpack://MG/./node_modules/core-js/modules/es6.reflect.own-keys.js","webpack://MG/./node_modules/core-js/modules/es6.reflect.prevent-extensions.js","webpack://MG/./node_modules/core-js/modules/es6.reflect.set.js","webpack://MG/./node_modules/core-js/modules/es6.reflect.set-prototype-of.js","webpack://MG/./node_modules/core-js/modules/es7.array.includes.js","webpack://MG/./node_modules/core-js/modules/es7.array.flat-map.js","webpack://MG/./node_modules/core-js/modules/es7.array.flatten.js","webpack://MG/./node_modules/core-js/modules/es7.string.at.js","webpack://MG/./node_modules/core-js/modules/es7.string.pad-start.js","webpack://MG/./node_modules/core-js/modules/es7.string.pad-end.js","webpack://MG/./node_modules/core-js/modules/es7.string.trim-left.js","webpack://MG/./node_modules/core-js/modules/es7.string.trim-right.js","webpack://MG/./node_modules/core-js/modules/es7.string.match-all.js","webpack://MG/./node_modules/core-js/modules/es7.symbol.async-iterator.js","webpack://MG/./node_modules/core-js/modules/es7.symbol.observable.js","webpack://MG/./node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","webpack://MG/./node_modules/core-js/modules/es7.object.values.js","webpack://MG/./node_modules/core-js/modules/es7.object.entries.js","webpack://MG/./node_modules/core-js/modules/es7.object.define-getter.js","webpack://MG/./node_modules/core-js/modules/es7.object.define-setter.js","webpack://MG/./node_modules/core-js/modules/es7.object.lookup-getter.js","webpack://MG/./node_modules/core-js/modules/es7.object.lookup-setter.js","webpack://MG/./node_modules/core-js/modules/es7.map.to-json.js","webpack://MG/./node_modules/core-js/modules/es7.set.to-json.js","webpack://MG/./node_modules/core-js/modules/es7.map.of.js","webpack://MG/./node_modules/core-js/modules/es7.set.of.js","webpack://MG/./node_modules/core-js/modules/es7.weak-map.of.js","webpack://MG/./node_modules/core-js/modules/es7.weak-set.of.js","webpack://MG/./node_modules/core-js/modules/es7.map.from.js","webpack://MG/./node_modules/core-js/modules/es7.set.from.js","webpack://MG/./node_modules/core-js/modules/es7.weak-map.from.js","webpack://MG/./node_modules/core-js/modules/es7.weak-set.from.js","webpack://MG/./node_modules/core-js/modules/es7.global.js","webpack://MG/./node_modules/core-js/modules/es7.system.global.js","webpack://MG/./node_modules/core-js/modules/es7.error.is-error.js","webpack://MG/./node_modules/core-js/modules/es7.math.clamp.js","webpack://MG/./node_modules/core-js/modules/es7.math.deg-per-rad.js","webpack://MG/./node_modules/core-js/modules/es7.math.degrees.js","webpack://MG/./node_modules/core-js/modules/es7.math.fscale.js","webpack://MG/./node_modules/core-js/modules/es7.math.iaddh.js","webpack://MG/./node_modules/core-js/modules/es7.math.isubh.js","webpack://MG/./node_modules/core-js/modules/es7.math.imulh.js","webpack://MG/./node_modules/core-js/modules/es7.math.rad-per-deg.js","webpack://MG/./node_modules/core-js/modules/es7.math.radians.js","webpack://MG/./node_modules/core-js/modules/es7.math.scale.js","webpack://MG/./node_modules/core-js/modules/es7.math.umulh.js","webpack://MG/./node_modules/core-js/modules/es7.math.signbit.js","webpack://MG/./node_modules/core-js/modules/es7.promise.finally.js","webpack://MG/./node_modules/core-js/modules/es7.promise.try.js","webpack://MG/./node_modules/core-js/modules/es7.reflect.define-metadata.js","webpack://MG/./node_modules/core-js/modules/es7.reflect.delete-metadata.js","webpack://MG/./node_modules/core-js/modules/es7.reflect.get-metadata.js","webpack://MG/./node_modules/core-js/modules/es7.reflect.get-metadata-keys.js","webpack://MG/./node_modules/core-js/modules/es7.reflect.get-own-metadata.js","webpack://MG/./node_modules/core-js/modules/es7.reflect.get-own-metadata-keys.js","webpack://MG/./node_modules/core-js/modules/es7.reflect.has-metadata.js","webpack://MG/./node_modules/core-js/modules/es7.reflect.has-own-metadata.js","webpack://MG/./node_modules/core-js/modules/es7.reflect.metadata.js","webpack://MG/./node_modules/core-js/modules/es7.asap.js","webpack://MG/./node_modules/core-js/modules/es7.observable.js","webpack://MG/./node_modules/core-js/modules/web.timers.js","webpack://MG/./node_modules/core-js/modules/web.immediate.js","webpack://MG/./node_modules/core-js/modules/web.dom.iterable.js","webpack://MG/./node_modules/regenerator-runtime/runtime.js","webpack://MG/./node_modules/core-js/fn/regexp/escape.js","webpack://MG/./node_modules/core-js/modules/core.regexp.escape.js","webpack://MG/./node_modules/core-js/modules/_replacer.js","webpack://MG/./node_modules/buffer/index.js","webpack://MG/./node_modules/base64-js/index.js","webpack://MG/./node_modules/ieee754/index.js","webpack://MG/./node_modules/isarray/index.js","webpack://MG/./node_modules/axios/lib/axios.js","webpack://MG/./node_modules/axios/lib/core/Axios.js","webpack://MG/./node_modules/axios/lib/core/InterceptorManager.js","webpack://MG/./node_modules/axios/lib/core/dispatchRequest.js","webpack://MG/./node_modules/axios/lib/core/transformData.js","webpack://MG/./node_modules/process/browser.js","webpack://MG/./node_modules/axios/lib/helpers/normalizeHeaderName.js","webpack://MG/./node_modules/axios/lib/core/settle.js","webpack://MG/./node_modules/axios/lib/core/enhanceError.js","webpack://MG/./node_modules/axios/lib/core/buildFullPath.js","webpack://MG/./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack://MG/./node_modules/axios/lib/helpers/combineURLs.js","webpack://MG/./node_modules/axios/lib/helpers/parseHeaders.js","webpack://MG/./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack://MG/./node_modules/axios/lib/helpers/cookies.js","webpack://MG/./node_modules/axios/lib/cancel/CancelToken.js","webpack://MG/./node_modules/axios/lib/helpers/spread.js","webpack://MG/./src/layer/featureutil.js","webpack://MG/./src/layer/feature.js","webpack://MG/./src/drawing/mgshape.js","webpack://MG/./src/drawing/mgpoint.js","webpack://MG/./src/drawing/Stroke.js","webpack://MG/./src/drawing/mgline.js","webpack://MG/./src/drawing/mgellipse.js","webpack://MG/./src/api/tinyqueue.js","webpack://MG/./src/drawing/polylabel.js","webpack://MG/./src/drawing/mgpolygon.js","webpack://MG/./src/drawing/tileviewport.js","webpack://MG/./src/drawing/mgmultipoint.js","webpack://MG/./src/drawing/mgmultiline.js","webpack://MG/./src/drawing/mgmultipolygon.js","webpack://MG/./src/drawing/mgshapefactory.js","webpack://MG/./src/drawing/mggeometrycollection.js","webpack://MG/./src/drawing/Fill.js","webpack://MG/./src/api/features.js","webpack://MG/./src/api/restapi.js","webpack://MG/./src/drawing/Symbol.js","webpack://MG/./src/drawing/Label.js","webpack://MG/./src/dom/DomEvent.Pointer.js","webpack://MG/./src/dom/DomEvent.DoubleTap.js","webpack://MG/./src/dom/DomUtil.js","webpack://MG/./src/dom/DomEvent.js","webpack://MG/./src/drawing/Hover.js","webpack://MG/./src/drawing/markup.js","webpack://MG/./src/drawing/pointmarkup.js","webpack://MG/./src/drawing/linemarkup.js","webpack://MG/./src/drawing/polygonmarkup.js","webpack://MG/./src/map/canvas.js","webpack://MG/./src/map/event.js","webpack://MG/./node_modules/tslib/tslib.es6.js","webpack://MG/./node_modules/rxjs/_esm5/internal/util/isFunction.js","webpack://MG/./node_modules/rxjs/_esm5/internal/config.js","webpack://MG/./node_modules/rxjs/_esm5/internal/util/hostReportError.js","webpack://MG/./node_modules/rxjs/_esm5/internal/Observer.js","webpack://MG/./node_modules/rxjs/_esm5/internal/util/isArray.js","webpack://MG/./node_modules/rxjs/_esm5/internal/util/isObject.js","webpack://MG/./node_modules/rxjs/_esm5/internal/util/UnsubscriptionError.js","webpack://MG/./node_modules/rxjs/_esm5/internal/Subscription.js","webpack://MG/./node_modules/rxjs/_esm5/internal/symbol/rxSubscriber.js","webpack://MG/./node_modules/rxjs/_esm5/internal/Subscriber.js","webpack://MG/./node_modules/rxjs/_esm5/internal/symbol/observable.js","webpack://MG/./node_modules/rxjs/_esm5/internal/util/identity.js","webpack://MG/./node_modules/rxjs/_esm5/internal/util/pipe.js","webpack://MG/./node_modules/rxjs/_esm5/internal/Observable.js","webpack://MG/./node_modules/rxjs/_esm5/internal/util/toSubscriber.js","webpack://MG/./node_modules/rxjs/_esm5/internal/util/canReportError.js","webpack://MG/./node_modules/rxjs/_esm5/internal/util/ObjectUnsubscribedError.js","webpack://MG/./node_modules/rxjs/_esm5/internal/SubjectSubscription.js","webpack://MG/./node_modules/rxjs/_esm5/internal/Subject.js","webpack://MG/./node_modules/rxjs/_esm5/internal/BehaviorSubject.js","webpack://MG/./src/layer/layer.js","webpack://MG/./src/layer/imageLayer.js","webpack://MG/./src/layer/OpenStreetMapTileSource.js","webpack://MG/./src/layer/EsriTileSource.js","webpack://MG/./src/layer/GoogleTileSource.js","webpack://MG/./src/layer/WMTSTileSource.js","webpack://MG/./src/layer/tileLayer.js","webpack://MG/./src/layer/featureLayer.js","webpack://MG/./src/layer/geocoderLayer.js","webpack://MG/./src/layer/wmsLayer.js","webpack://MG/./src/layer/OSMInternationalMapTileSource.js","webpack://MG/./src/layer/measurement.js","webpack://MG/./src/layer/geometryeditor.js","webpack://MG/./src/layer/reprojectedTileLayer.js","webpack://MG/./node_modules/rxjs/_esm5/internal/operators/map.js","webpack://MG/./node_modules/rxjs/_esm5/internal/observable/fromEvent.js","webpack://MG/./src/map/map.js","webpack://MG/./node_modules/rxjs/_esm5/internal/scheduler/Action.js","webpack://MG/./node_modules/rxjs/_esm5/internal/scheduler/AsyncAction.js","webpack://MG/./node_modules/rxjs/_esm5/internal/Scheduler.js","webpack://MG/./node_modules/rxjs/_esm5/internal/scheduler/async.js","webpack://MG/./node_modules/rxjs/_esm5/internal/scheduler/AsyncScheduler.js","webpack://MG/./node_modules/rxjs/_esm5/internal/observable/interval.js","webpack://MG/./node_modules/rxjs/_esm5/internal/util/isNumeric.js","webpack://MG/./node_modules/rxjs/_esm5/internal/symbol/iterator.js","webpack://MG/./node_modules/rxjs/_esm5/internal/util/subscribeTo.js","webpack://MG/./node_modules/rxjs/_esm5/internal/util/subscribeToObservable.js","webpack://MG/./node_modules/rxjs/_esm5/internal/util/isArrayLike.js","webpack://MG/./node_modules/rxjs/_esm5/internal/util/subscribeToArray.js","webpack://MG/./node_modules/rxjs/_esm5/internal/util/isPromise.js","webpack://MG/./node_modules/rxjs/_esm5/internal/util/subscribeToPromise.js","webpack://MG/./node_modules/rxjs/_esm5/internal/util/subscribeToIterable.js","webpack://MG/./node_modules/rxjs/_esm5/internal/innerSubscribe.js","webpack://MG/./node_modules/rxjs/_esm5/internal/operators/debounce.js","webpack://MG/./src/map/zoomcontrol.js","webpack://MG/./src/map/layercontrol.js","webpack://MG/./src/export.js","webpack://MG/./src/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","MapEnums","DatasetTypes","Tile","Raster","Feature","Geometry","Geocoder","DatasourceTypes","OpenStreetMap","GoogleStreetMap","GenericTileService","LegacyMapsTileService","NearMap","WMTS","WMS","Spatialite","SqlServer","PostGIS","Oracle","EsriFileGeodatabase","EsriRestService","WFS","EsriShapeFile","MapinfoTabFile","DBF","CSV","SymbolTypes","SolidShape","OutlineShape","Character","Glyph","UnitTypes","Inches","Feet","Miles","Meters","Kilometers","Degrees","Pixels","SpatialFieldTypes","Text","Short","Integer","Long","Float","Double","Boolean","DateTime","Date","Time","Guid","Binary","Decimal","ForeignKey","Document","Picture","Options","Option","Folder","File","URL","MultilineText","RichText","Icon","Email","Phone","User","UserGroup","Contact","Project","Entity","LinkedEntity","Communication","StepResponse","AssociatedContact","Unknown","LabelPositions","AboveLeft","AboveCentre","AboveRight","MiddleLeft","MiddleCentre","MiddleRight","BelowLeft","BelowCentre","BelowRight","StrokeTypes","Solid","DashStyle","DashPattern","Pattern","FillTypes","Hatch","Gradient","LinearGradient","Shapes","Circle","Cross","DiagonalCross","Diamond","Marker","Pin","Square","Star","TriangleUp","TriangleDown","DashStyles","Dash","Dot","DashDot","DashDotDot","HatchStyles","Horizontal","Vertical","ForwardDiagonal","BackwardDiagonal","Percent05","Percent10","Percent20","Percent25","Percent30","Percent40","Percent50","Percent60","Percent70","Percent75","Percent80","Percent90","LightDownwardDiagonal","LightUpwardDiagonal","DarkDownwardDiagonal","DarkUpwardDiagonal","WideDownwardDiagonal","WideUpwardDiagonal","LightVertical","LightHorizontal","NarrowVertical","NarrowHorizontal","DarkVertical","DarkHorizontal","DashedDownwardDiagonal","DashedUpwardDiagonal","DashedHorizontal","DashedVertical","SmallConfetti","LargeConfetti","ZigZag","Wave","DiagonalBrick","HorizontalBrick","Weave","Plaid","Divot","DottedGrid","DottedDiamond","Shingle","Trellis","Sphere","SmallGrid","SmallCheckerBoard","LargeCheckerBoard","OutlinedDiamond","SolidDiamond","None","DashTypes","EndCaps","Butt","Round","LineJoins","Bevel","Miter","Placements","ClipStates","ClipLeft","ClipMiddle","OutClipRightineShape","ImageStates","Initial","Loading","Loaded","Failed","GeometryTypes","NONE","POINT","LINESTRING","LINEARRING","POLYGON","MULTIPOINT","MULTILINESTRING","MULTIPOLYGON","GEOMETRYCOLLECTION","PromptTypes","REPLACE_EXISTING_GEOMETRY","MINIMUM_REQUIRED_POINTS_POLYGON","MINIMUM_REQUIRED_POINTS_LINESTRING","ContextTypes","ShowAllFeatures","ShowOnlyRelatedFeatures","ShowOtherFeatures","Primary","MapOptionTypes","MAPACTIVITY","GEOMETRY","CONTROL","LinkedAssociatedContact","OutstandingActions","ProcedureStatus","CommunicationStatistics","LinkedAssociatedContactStatistics","LinkedEntityStatistics","ProjectCommunication","SourceEvents","AngularShowMap","AngularLayerSearch","AngularContextLayerSearch","AngularContextRelatedLayerSearch","AngularZoomToFeature","AngularZoomToLayer","AngularLayerVisibility","AngularMapDivSizeChange","AngularRestoreHistory","ShowThematics","ResizeHeight","SetView","Zoom","ZoomDragging","PanDragging","ZoomByContextOrder","DeleteFeatures","global","core","hide","redefine","ctx","$export","type","source","own","out","exp","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","S","IS_PROTO","P","IS_BIND","B","target","expProto","undefined","Function","U","W","R","Point","x","y","round","this","Math","trunc","v","floor","ceil","toPoint","isArray","clone","add","point","_add","subtract","_subtract","divideBy","num","_divideBy","multiplyBy","_multiplyBy","scaleBy","unscaleBy","_round","_floor","_ceil","_trunc","distanceTo","sqrt","equals","contains","abs","toString","formatNum","LatLng","lat","lng","alt","isNaN","Error","obj","maxMargin","toLatLng","max","precision","Util","other","Earth","distance","wrapLatLng","sizeInMeters","latAccuracy","lngAccuracy","cos","PI","toLatLngBounds","a","b","length","lon","freeze","extend","dest","j","len","src","arguments","proto","fn","slice","Array","apply","args","concat","lastId","stamp","_leaflet_id","throttle","time","context","lock","wrapperFn","later","setTimeout","wrapNum","range","includeMax","min","falseFn","digits","pow","trim","str","replace","splitWords","split","setOptions","options","getParamString","existingUrl","uppercase","params","push","encodeURIComponent","toUpperCase","indexOf","join","templateRe","template","data","array","el","emptyImageUrl","getPrefixed","window","lastTime","timeoutDefer","timeToCall","requestFn","requestAnimationFrame","cancelFn","cancelAnimationFrame","id","clearTimeout","requestAnimFrame","immediate","cancelAnimFrame","array_equals","every","index","getArrayDimensions","arr","dim","reduce","result","current","findIndex","item","scaleToZoomLevel","scale","scales","zoom","Number","zoomLevelToScale","scaleFromLatLngZoom","latLng","mergeOptions","options1","options2","LonLat","project","latlng","unproject","bounds","Bounds","Mercator","R_MINOR","tmp","e","con","sin","ts","tan","log","phi","atan","dphi","EPSG3395","code","projection","transformation","toTransformation","EPSG4326","Simple","CRS","LN2","latlng1","latlng2","dx","dy","infinite","EPSG3857","EPSG900913","Node","feature","next","Next","QuadTree","_bounds","_node","_count","_topLeft","_topRight","_bottomLeft","_bottomRight","rcFeature","depth","child","MaxTreeDepth","Width","Height","xMid","MinX","MaxX","yMid","MinY","MaxY","topLeft","toEnvelopeFromRect","topRight","bottomLeft","bottomRight","insertFeature","x1","y1","x2","y2","Envelope","features","extents","node","intersects","getIntersectingFeatures","Intersects","hasIntersectingFeatures","_enabled","addHooks","removeHooks","Class","addTo","map","addHandler","_minX","_maxX","_minY","_maxY","sw","ne","latlngs","sw2","ne2","_southWest","_northEast","Coordinate","Y","X","LatLngBounds","bufferRatio","heightBuffer","widthBuffer","SouthWest","NorthEast","latIntersects","lngIntersects","latOverlaps","lngOverlaps","West","South","East","North","isObject","it","TypeError","style","document","documentElement","ie","ielt9","addEventListener","edge","navigator","webkit","userAgentContains","android","android23","webkitVer","parseInt","exec","userAgent","androidStock","opera","chrome","gecko","safari","phantom","opera12","win","platform","ie3d","webkit3d","WebKitCSSMatrix","gecko3d","any3d","L_DISABLE_3D","mobile","orientation","mobileWebkit","mobileWebkit3d","msPointer","PointerEvent","MSPointerEvent","pointer","touch","L_NO_TOUCH","DocumentTouch","mobileOpera","mobileGecko","retina","devicePixelRatio","screen","deviceXDPI","logicalXDPI","passiveEvents","supportsPassiveOption","opts","removeEventListener","canvas","createElement","getContext","toLowerCase","self","__g","points","toBounds","getCenter","getBottomLeft","getTopRight","getTopLeft","getBottomRight","getSize","min2","max2","xIntersects","yIntersects","overlaps","xOverlaps","yOverlaps","isValid","GeoPoint","coordinate","viewport","worldToClient","opacity","symbol","fill","pt","offsetX","NormalSymbol","width","offsetY","height","drawSymbol","globalCompositeOperation","HoverSymbol","SelectedSymbol","shape","hitTest","Client","calculateBounds","GeoLineString","coordinates","_coordinates","MapPrimitive","ClipLineStringRect","stroke","drawLine","testPoint","start","end","isPointOnSegment","A","d1","d2","lineDistance","Coordinates","GeoLinearRing","count","vertex1","vertex2","west","GeoPolygon","exteriorRing","interiorRings","exteriorPoints","interiorPoints","drawPolygon","isInside","isInsideTheHole","interior","isVisible","bIntersects","centroid","geometries","NumPoints","forEach","element","GeoMultiPoint","geopoints","geopoint","draw","numPoints","isEmpty","IsEmpty","geometry","GeoMultiLineString","linestrings","linestring","GeoMultiPolygon","polygons","polygon","GeometryCollection","addGeometry","WktReader","wktTypes","position","Read","geometryType","MatchType","dimension","MatchDimension","CreateGeometry","ReadGeometry","defaultType","defaultDimension","types","MatchTypeOrDefault","ReadPoint","ReadLineString","ReadPolygon","ReadMultiPoint","ReadMultiLineString","ReadMultiPolygon","ReadGeometryCollection","Dimension","ExpectGroupStart","MatchCoordinate","ExpectGroupEnd","lineString","MatchCoordinates","IsMatch","InteriorRings","multiPoint","multiLineString","Geometries","multiPolygon","geometryCollection","Match","dimensionMatch","DimensionTypes","Xy","Xyz","Xym","Xyzm","console","coordinateValue","Peek","parseFloat","startsWithBracket","IsWhiteSpace","tokens","SkipWhitespaces","tokenPosition","foundToken","peekValue","substr","subValue","match","Regex","TileSource","pendingTiles","dctTiles","unused","cReferences","longitudeResolutions","NumberOfResolutions","latitudeResolutions","googleResolutions","pixels","ImageSize","LatLongExtents","GoogleExtents","dispose","Clear","resolution","resultDistance","MAX_VALUE","level","col","row","sKey","tile","addReference","Dereferenced","filter","ImageState","LoadStates","renderTile","now","dereference","keys","MaxCachedTiles","sort","Name","Sort","latLongMinX","latLongMinY","latLongMaxX","latLongMaxY","boundsObj","longitude1","normalise","latitude1","minX","minY","longitude2","latitude2","maxX","maxY","googleBounds","latlongBounds","tilePoint","subdomains","AddReference","longitude","latitude","LabelPoint","angle","ClipLine","LineObj","size","numpoints","line","from","MgMapPrimitive","clipLine","rect","slope","check1","check2","Left","Right","CLIP_CHECK","ClipRight","Top","Bottom","lines","flush","deltax","deltay","xin","xout","yin","yout","tinx","tiny","toutx","touty","tin1","tin2","tout","pts","NEARZERO","MS_NINT","rcExtents","suggestedAngle","labelPoint","bContains","GetPolylineLabelPoint","TryGetPolygonCenterOfGravity","PolygonContains","hi_y","lo_y","point1","point2","nfound","xintersect","skip","NUM_SCANLINES","max_len","k","EDGE_CHECK","min_length","segment_length","pt2","theta","max_segment_length","segment_index","pt1","bFound","MS_RAD_TO_DEG","asin","dfTestX","dfTestY","iNumCrossings","iPoint","top","left","right","bottom","Rectangle","sx","sy","area","tsx","tsy","cent_weight_x","cent_weight_y","total_len","minx","icx","maxy","icy","x0","INFINITY","MS_SUCCESS","MS_FAILED","MS_SHAPE_LINE","MS_SHAPE_POLYGON","MS_DEG_TO_RAD","corner1","corner2","pad","getSouthWest","getNorthEast","getNorthWest","getNorth","getWest","getSouthEast","getSouth","getEast","toBBoxString","store","uid","USE_SYMBOL","p1","p2","hypot","rcBounds","toInteger","anObject","IE8_DOM_DEFINE","toPrimitive","dP","f","O","Attributes","w","h","isLTRB","Rect","expandToContain","restrictTo","setRect","copyFrom","xscl","yscl","translate","intersect","setBounds","scalar","xAdj","yAdj","diff","fromLTRB","defined","Viewport","client","world","cellsize","_client","_world","_cellsize","_scale","offScreenCanvas","tileSource","World","Cellsize","envelope","createDesc","has","SRC","$toString","TPL","inspectSource","val","safe","isFunction","String","fails","quot","createHTML","string","tag","attribute","NAME","test","isUndefined","isArrayBuffer","isBuffer","constructor","isFormData","FormData","isArrayBufferView","ArrayBuffer","isView","buffer","isString","isNumber","isDate","isFile","isBlob","isStream","pipe","isURLSearchParams","URLSearchParams","isStandardBrowserEnv","product","merge","assignValue","deepMerge","thisArg","z","NullOrdinate","Z","tolerance","EqualsWithTolerance","Equals2D","dz","GetHashCode","dec","NaN","initialise","image","Level","Col","Row","googleTileSize","getGoogleTileSize","GoogleMinX","GoogleMaxX","GoogleMaxY","GoogleMinY","GoogleBounds","LatLongBounds","transformExtentsToLatLong","imageUrl","getTileUrl","references","sWidth","sHeight","dWidth","dHeight","srcRect","dstRect","imageState","prevAlpha","globalAlpha","drawImage","localeCompare","__this","Promise","resolve","reject","Image","err","_layer","credentials","Buffer","headers","btoa","fetch","then","res","blob","createObjectURL","IObject","pIE","toIObject","gOPD","getOwnPropertyDescriptor","toObject","IE_PROTO","ObjectProto","getPrototypeOf","latLngToPoint","projectedPoint","_transform","pointToLatLng","untransformedPoint","untransform","getProjectedBounds","transform","wrapLng","wrapLat","wrapLatLngBounds","center","newCenter","latShift","lngShift","newSw","newNe","version","__e","aFunction","that","method","arg","Transformation","_a","_b","_c","_d","rad","lat1","lat2","sinDLat","sinDLon","atan2","valueOf","KEY","toLength","asc","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","$this","callbackfn","LIBRARY","$typed","$buffer","anInstance","propertyDesc","redefineAll","toIndex","toAbsoluteIndex","classof","isArrayIter","gOPN","getIterFn","wks","createArrayMethod","createArrayIncludes","speciesConstructor","ArrayIterators","Iterators","$iterDetect","setSpecies","arrayFill","arrayCopyWithin","$DP","$GOPD","RangeError","Uint8Array","ArrayProto","$ArrayBuffer","$DataView","DataView","arrayForEach","arrayFilter","arraySome","arrayEvery","arrayFind","arrayFindIndex","arrayIncludes","arrayIndexOf","arrayValues","values","arrayKeys","arrayEntries","entries","arrayLastIndexOf","lastIndexOf","arrayReduce","arrayReduceRight","reduceRight","arrayJoin","arraySort","arraySlice","arrayToString","arrayToLocaleString","toLocaleString","ITERATOR","TAG","TYPED_CONSTRUCTOR","DEF_CONSTRUCTOR","ALL_CONSTRUCTORS","CONSTR","TYPED_ARRAY","TYPED","VIEW","$map","allocate","LITTLE_ENDIAN","Uint16Array","FORCED_SET","set","toOffset","BYTES","offset","validate","C","speciesFromList","list","fromList","addGetter","internal","$from","step","iterator","aLen","mapfn","mapping","iterFn","done","$of","TO_LOCALE_BUG","$toLocaleString","copyWithin","find","predicate","searchElement","includes","separator","reverse","middle","some","comparefn","subarray","begin","$begin","byteOffset","BYTES_PER_ELEMENT","$slice","$set","arrayLike","$iterators","isTAIndex","$getDesc","$setDesc","desc","configurable","writable","$TypedArrayPrototype$","wrapper","CLAMPED","GETTER","SETTER","TypedArray","Base","TAC","FORCED","ABV","TypedArrayPrototype","addElement","setter","$offset","$length","byteLength","klass","$len","iter","$nativeIterator","CORRECT_ITER_NAME","$iterator","of","Map","shared","getOrCreateMetadataMap","targetKey","targetMetadata","keyMetadata","MetadataKey","metadataMap","MetadataValue","_","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","meta","NEED","fastKey","getWeak","onFreeze","UNSCOPABLES","Colour","RGBA","XYZA","HSVA","LABA","LAST_COLOURSPACE","fromString","colourString","CssColours","g","toHex","clr","convertTo","converters","colour","hueDiff","WHITE","convert_HSVA_RGBA","hi","q","convert_RGBA_HSVA","convert_XYZA_LABA","convert_LABA_XYZA","fy","fx","fz","XYZ","convert_RGBA_XYZA","rgb","temp","convert_XYZA_RGBA","xyz","convert_SAME","convert_RGBA_LABA","convert_XYZA_HSVA","Events","_on","_off","_events","typeListeners","newListener","listeners","_firingCount","splice","propagate","listens","event","sourceTarget","_propagateEvent","_eventParents","once","handler","off","on","fire","layer","propagatedFrom","clearAllEventListeners","addOneTimeEventListener","fireEvent","hasEventListeners","bitmap","px","random","$keys","enumBugKeys","dPs","Empty","createDict","iframeDocument","iframe","display","appendChild","contentWindow","open","write","lt","close","Properties","hiddenKeys","getOwnPropertyNames","DESCRIPTORS","SPECIES","Constructor","forbiddenField","BREAK","RETURN","iterable","_t","def","stat","cof","ARG","T","tryGet","callee","spaces","space","ltrim","RegExp","rtrim","exporter","ALIAS","FORCE","props","NewClass","initialize","callInitHooks","parentProto","__super__","statics","L","Mixin","warn","stack","checkDeprecatedMixinEvents","_initHooks","_initHooksCalled","include","addInitHook","init","globalThis","_exports","createCallback","onResult","isCanceled","thenFunc","onSuccess","onError","cancelable","catchFunc","catch","finallyFunc","onFinally","finally","cancelFunc","promise","cancel","CancelablePromise","executor","default","all","allSettled","race","_default","copyright","propertyIsEnumerable","ignoreCase","multiline","unicode","sticky","D","SphericalMercator","MAX_LATITUDE","IS_INCLUDES","fromIndex","getOwnPropertySymbols","TO_STRING","pos","charCodeAt","charAt","MATCH","isRegExp","SAFE_CLOSING","riter","skipClosing","builtinExec","regexpExec","REPLACE_SUPPORTS_NAMED_GROUPS","re","groups","SPLIT_WORKS_WITH_OVERWRITTEN_EXEC","originalExec","SYMBOL","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","nativeRegExpMethod","fns","nativeMethod","regexp","arg2","forceStringMethod","strfn","rxfn","forOf","setToStringTag","inheritIfRequired","methods","common","IS_WEAK","ADDER","fixMethod","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","clear","getConstructor","setStrong","Typed","TypedArrayConstructors","K","__defineSetter__","COLLECTION","cb","mapFn","nextItem","is","wksExt","$Symbol","check","setPrototypeOf","buggy","__proto__","Infinity","sign","$expm1","expm1","$iterCreate","BUGGY","returnThis","DEFAULT","IS_SET","IteratorPrototype","getMethod","kind","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","descriptor","searchString","$defineProperty","getIteratorMethod","original","endPos","addToUnscopables","iterated","_i","_k","Arguments","re1","re2","regexpFlags","nativeExec","nativeReplace","patchedExec","UPDATES_LAST_INDEX_WRONG","NPCG_INCLUDED","lastIndex","reCopy","at","defer","channel","port","invoke","html","cel","process","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","queue","run","listener","nextTick","port2","port1","onmessage","postMessage","importScripts","removeChild","macrotask","Observer","MutationObserver","WebKitMutationObserver","isNode","head","last","notify","parent","domain","exit","enter","standalone","toggle","createTextNode","observe","characterData","task","PromiseCapability","$$resolve","$$reject","PROTOTYPE","WRONG_INDEX","BaseBuffer","$BUFFER","$LENGTH","$OFFSET","packIEEE754","mLen","nBytes","eLen","eMax","eBias","rt","unpackIEEE754","nBits","unpackI32","bytes","packI8","packI16","packI32","packF64","packF32","view","isLittleEndian","intIndex","pack","conversion","ArrayBufferProto","$setInt8","setInt8","getInt8","setUint8","bufferLength","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","_babelPolyfill","DEFINE_PROPERTY","define","padStart","padEnd","names","getKeys","defineProperties","windowNames","getWindowNames","gOPS","$assign","assign","getSymbols","isEnum","factories","construct","partArgs","bound","un","$parseInt","$trim","ws","hex","radix","$parseFloat","msg","isFinite","log1p","EPSILON","EPSILON32","MAX32","MIN32","fround","$abs","$sign","ret","memo","isRight","to","inc","forced","flags","newPromiseCapability","promiseCapability","strong","entry","getEntry","$iterDefine","SIZE","_f","_l","prev","InternalMap","each","weak","NATIVE_WEAK_MAP","IS_IE11","ActiveXObject","uncaughtFrozenStore","ufstore","$WeakMap","$has","UncaughtFrozenStore","findUncaughtFrozen","number","Reflect","ownKeys","IS_CONCAT_SPREADABLE","flattenIntoArray","sourceLen","mapper","spreadable","targetIndex","sourceIndex","repeat","maxLength","fillString","stringLength","fillStr","intMaxLength","fillLen","stringFiller","isEntries","inLow","inHigh","outLow","outHigh","utils","encode","url","paramsSerializer","serializedParams","parts","toISOString","JSON","stringify","hashmarkIndex","__CANCEL__","normalizeHeaderName","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","adapter","defaults","XMLHttpRequest","transformRequest","transformResponse","parse","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","validateStatus","status","settle","buildURL","buildFullPath","parseHeaders","isURLSameOrigin","createError","config","requestData","requestHeaders","request","auth","username","password","Authorization","fullPath","baseURL","onreadystatechange","readyState","responseURL","responseHeaders","getAllResponseHeaders","response","responseType","responseText","statusText","onabort","onerror","ontimeout","timeoutErrorMessage","cookies","xsrfValue","withCredentials","read","setRequestHeader","onDownloadProgress","onUploadProgress","upload","cancelToken","abort","send","enhanceError","message","error","config1","config2","valueFromConfig2Keys","mergeDeepPropertiesKeys","defaultToConfig2Keys","prop","axiosKeys","otherKeys","Cancel","$fails","wksDefine","enumKeys","_create","gOPNExt","$GOPS","$JSON","_stringify","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","USE_NATIVE","QObject","findChild","setSymbolDesc","protoDesc","wrap","sym","isSymbol","$defineProperties","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","es6Symbols","wellKnownSymbols","keyFor","useSetter","useSimple","FAILS_ON_PRIMITIVES","replacer","$replacer","symbols","$getPrototypeOf","$freeze","$seal","$preventExtensions","$isFrozen","$isSealed","$isExtensible","FProto","nameRE","HAS_INSTANCE","FunctionProto","$Number","BROKEN_COF","TRIM","toNumber","argument","third","maxCode","first","aNumberValue","$toFixed","toFixed","ERROR","multiply","c2","divide","numToString","acc","fractionDigits","$toPrecision","toPrecision","_isFinite","isInteger","isSafeInteger","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","$acosh","acosh","$asinh","asinh","$atanh","atanh","cbrt","clz32","LOG2E","cosh","value1","value2","div","sum","larg","$imul","imul","xn","yn","xl","yl","log10","LOG10E","log2","sinh","tanh","fromCharCode","$fromCodePoint","fromCodePoint","raw","callSite","tpl","$at","codePointAt","$endsWith","endsWith","endPosition","search","$startsWith","startsWith","color","getTime","toJSON","pv","$toISOString","lz","getUTCFullYear","getUTCMilliseconds","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","DateProto","hint","createProperty","upTo","cloned","$sort","$forEach","STRICT","$filter","$some","$every","$reduce","$indexOf","NEGATIVE_ZERO","$find","$flags","$RegExp","CORRECT_NEW","tiRE","piRE","fiU","proxy","advanceStringIndex","regExpExec","$match","maybeCallNative","rx","fullUnicode","matchStr","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","REPLACE","$replace","searchValue","replaceValue","functionalReplace","results","accumulatedResult","nextSourcePosition","matched","captures","namedCaptures","replacerArgs","replacement","getSubstitution","tailPos","ch","capture","sameValue","SEARCH","$search","previousLastIndex","callRegExpExec","$min","$push","SUPPORTS_Y","SPLIT","$split","internalSplit","limit","lastLength","output","lastLastIndex","splitLimit","separatorCopy","splitter","unicodeMatching","lim","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","microtask","newPromiseCapabilityModule","perform","promiseResolve","versions","v8","$Promise","empty","FakePromise","PromiseRejectionEvent","isThenable","isReject","_n","chain","_v","ok","_s","reaction","exited","fail","_h","onHandleUnhandled","onUnhandled","unhandled","isUnhandled","emit","onunhandledrejection","reason","onrejectionhandled","$reject","_w","$resolve","onFulfilled","onRejected","capability","remaining","$index","alreadyCalled","$isView","fin","viewS","viewT","rApply","fApply","thisArgument","argumentsList","rConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","propertyKey","attributes","deleteProperty","Enumerate","enumerate","receiver","getProto","V","existingDescriptor","ownDesc","setProto","$includes","arraySpeciesCreate","flatMap","flatten","depthArg","$pad","WEBKIT_BUG","getFlags","RegExpProto","$RegExpStringIterator","_r","matchAll","getOwnPropertyDescriptors","getDesc","$values","__defineGetter__","__lookupGetter__","__lookupSetter__","isError","clamp","lower","upper","DEG_PER_RAD","RAD_PER_DEG","degrees","radians","fscale","iaddh","y0","$x0","$y0","isubh","imulh","u","$u","$v","u0","v0","u1","v1","umulh","signbit","metadata","toMetaKey","ordinaryDefineOwnMetadata","defineMetadata","metadataKey","metadataValue","deleteMetadata","ordinaryHasOwnMetadata","ordinaryGetOwnMetadata","ordinaryGetMetadata","getMetadata","Set","ordinaryOwnMetadataKeys","ordinaryMetadataKeys","oKeys","pKeys","getMetadataKeys","getOwnMetadata","getOwnMetadataKeys","ordinaryHasMetadata","hasMetadata","hasOwnMetadata","$metadata","asap","OBSERVABLE","cleanupSubscription","subscription","cleanup","subscriptionClosed","_o","closeSubscription","Subscription","observer","subscriber","SubscriptionObserver","unsubscribe","complete","$Observable","subscribe","observable","items","Observable","MSIE","boundArgs","setInterval","$task","TO_STRING_TAG","ArrayValues","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","collections","explicit","Collection","Op","hasOwn","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","inModule","runtime","regeneratorRuntime","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","NativeIteratorPrototype","Gp","GeneratorFunctionPrototype","Generator","GeneratorFunction","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","__await","defineIteratorMethods","AsyncIterator","async","innerFn","outerFn","tryLocsList","pop","Context","reset","skipTempReset","sent","_sent","delegate","tryEntries","resetTryEntry","stop","rootRecord","completion","rval","dispatchException","exception","handle","loc","caught","record","tryLoc","hasCatch","hasFinally","catchLoc","finallyLoc","abrupt","finallyEntry","afterLoc","finish","thrown","delegateYield","resultName","nextLoc","protoGenerator","generator","_invoke","state","doneResult","delegateResult","maybeInvokeDelegate","tryCatch","makeInvokeMethod","unwrapped","previousPromise","callInvokeWithMethodAndArg","return","info","pushTryEntry","locs","iteratorMethod","escape","$re","regExp","part","base64","ieee754","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","encodingOrOffset","allocUnsafe","fromArrayLike","fromArrayBuffer","encoding","isEncoding","actual","checked","copy","fromObject","assertSize","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","dir","indexSize","arrLength","valLength","buf","readUInt16BE","foundIndex","found","hexWrite","strLen","parsed","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","units","lo","utf16leToBytes","fromByteArray","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","MAX_ARGUMENTS_LENGTH","decodeCodePointsArray","SlowBuffer","alloc","INSPECT_MAX_BYTES","foo","typedArraySupport","poolSize","_augment","species","allocUnsafeSlow","_isBuffer","compare","swap16","swap32","swap64","inspect","thisStart","thisEnd","thisCopy","targetCopy","_arr","checkOffset","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","leadSurrogate","toByteArray","stringtrim","base64clean","dst","b64","lens","getLens","validLen","placeHoldersLen","Arr","_byteLength","curByte","revLookup","uint8","extraBytes","len2","encodeChunk","lookup","isLE","Axios","mergeConfig","createInstance","defaultConfig","axios","instanceConfig","CancelToken","isCancel","promises","spread","InterceptorManager","dispatchRequest","interceptors","interceptor","unshift","fulfilled","rejected","shift","getUri","handlers","use","eject","transformData","throwIfCancellationRequested","throwIfRequested","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","marker","runClearTimeout","Item","noop","title","browser","env","argv","addListener","removeListener","removeAllListeners","prependListener","prependOnceListener","binding","cwd","chdir","umask","normalizedName","isAxiosError","description","fileName","lineNumber","columnNumber","isAbsoluteURL","combineURLs","requestedURL","relativeURL","ignoreDuplicateOf","originURL","msie","urlParsingNode","resolveURL","href","setAttribute","protocol","host","hash","hostname","pathname","location","requestURL","expires","path","secure","cookie","toGMTString","decodeURIComponent","remove","resolvePromise","token","callback","featureLayer","columns","sWkt","featureName","wktColumn","thematicIndex","_geometry","_shape","_values","_featureName","hovering","selected","tracking","dctValues","parseWKT","MgShapeFactory","createShape","force","sType","GeometryType","isAlreadyTracked","tracked","removeFromTracked","isFeatureAlreadySelected","removeItemFromSelection","Hover","Points","labelStyle","getFormattedLabel","MgShape","_feature","labelText","_labelStyle","_points","Selected","drawSelected","properties","bMatch","MgPoint","ThematicIndex","Thematics","PointStyle","pointStyle","drawText","LabelStyle","sLabel","labelRotation","Rotation","newX","newY","textAlign","Placement","FontSize","halfwidth","halfheight","getRectExtents","pointInRect","_x","_y","Stroke","lineStyle","getStrokeType","Type","dashPattern","getLineDashStyle","pattern","lineDashStyle","strings","trackingColour","trackingWidth","trackingStyle","PatternId","PatternHeight","trackingStroke","hoverColour","hoverWidth","selectedColour","selectedWidth","hoverStyle","selectedStyle","hoverStroke","selectedStroke","svg","sanitized","baseUrl","accessToken","debugMode","objJSON","onload","Types","lineCap","endCap","MgLine","LineStyle","CalculateExtents","textWidth","getTextWidth","halfLabelHeight","halfLabelWidth","angleInRadians","tangent","perpendicular","ptUpperLeft","ptLowerLeft","ptUpperRight","ptLowerRight","isMouseOver","ptMouse","TinyQueue","defaultCompare","_down","_up","halfLength","bestChild","Cell","PolyLabel","pointToPolygonDist","SQRT2","debug","cellSize","degeneratePoleOfInaccessibility","cellQueue","compareMax","bestCell","getCentroidCell","bboxCell","numProbes","cell","poleOfInaccessibility","inside","minDistSq","ring","getSegDistSq","py","MgPolygon","PolygonStyle","Fill","localFill","hoverPattern","hoverFill","selectedFill","trackingFill","Length","GetPolygonLabelPoint","TileViewport","getNearestLevel","offScreenContext","createOffscreenCanvas","maxColumns","normalisedMinX","normalisedMaxY","transformExtentsFromLatLong","firstCol","firstRow","lastCol","lastRow","cCols","cRows","tiles","nCol","nRow","getTile","dereferenceTile","dims","bIsLoaded","MgCanvas","createHiDPICanvas","compositeOperation","xWrap","dstTop","dstLeft","dstRight","dstBottom","heightRatio","widthRatio","rcClient","srcTop","srcLeft","srcRight","srcBottom","render","IsInRange","firstTile","lastTile","canRender","refreshView","MgMultiPoint","drawPoint","MgMultiLine","_lines","NumGeometries","GetGeometryN","MgMultiPolygon","_polygons","MgGeometryCollection","_geometries","_shapes","_geopoints","polygonStroke","polygonFill","lineStroke","pointSymbol","drawHover","fillStyle","getFillType","hatchStyle","hatchImg","FillType","setHatchStyle","HatchStyle","patternId","patternHeight","patternSpacing","PatternSpacing","sanitisedSVG","FDiagonal","BDiagonal","DoubleDiagonal","Circles","require","RestAPI","_baseUrl","_accessToken","layerId","FEATURES2","FEATURES","queryParams","sortField","extentsFilter","extentsProjection","mapProjection","geometryField","AccessToken","datasetId","thematics","taskId","BaseUrl","post","sContextFilter","sLayerFilter","sUserFilter","contextType","isIdentitySearch","contextFilterDatasource","jStyle","getShapeType","Shape","getSymbolType","symbolId","SymbolId","normalSymbol","hoverSymbol","encodeURI","HoverOutlineWidth","HoverColour","selectedSymbol","SelectedOutlineWidth","SelectedColour","Label","hexColour","fontName","FontName","fontSize","Position","placement","getPlacement","rotation","minScale","NEGATIVE_INFINITY","maxScale","MaxScale","POSITIVE_INFINITY","highlight","Highlight","labelFormat","getLabelFormat","label","Id","Comparisons","comparison","Rhs","Lhs","formattedLabel","LabelFormat","toReplace","POINTER_DOWN","Browser","POINTER_MOVE","POINTER_UP","POINTER_CANCEL","TAG_WHITE_LIST","_pointers","_pointerDocListener","_pointersCount","addPointerListener","onDown","pointerType","MSPOINTER_TYPE_MOUSE","tagName","DomEvent","_handlePointer","_globalPointerDown","_globalPointerMove","_globalPointerUp","_addPointerStart","onMove","buttons","_addPointerMove","onUp","_addPointerEnd","pointerId","touches","changedTouches","_touchstart","_touchend","_pre","addDoubleTapListener","doubleTap","delay","onTouchStart","delta","onTouchEnd","cancelBubble","newTouch","button","passive","removeDoubleTapListener","touchstart","touchend","dblclick","disableTextSelection","enableTextSelection","_userSelect","_outlineElement","_outlineStyle","TRANSFORM","testProp","TRANSITION","TRANSITION_END","getElementById","getStyle","currentStyle","defaultView","css","getComputedStyle","className","container","parentNode","firstChild","toFront","lastChild","toBack","insertBefore","hasClass","classList","getClass","addClass","classes","setClass","removeClass","baseVal","correspondingElement","setOpacity","filterName","filters","Enabled","Opacity","_setOpacityIE","setTransform","setPosition","_leaflet_pos","getPosition","userSelectProperty","disableImageDrag","enableImageDrag","preventOutline","tabIndex","restoreOutline","outline","getSizedParentNode","offsetWidth","offsetHeight","body","getScale","getBoundingClientRect","boundingClientRect","addOne","eventsKey","removeOne","originalHandler","isExternalTarget","timeStamp","originalEvent","elapsed","lastClick","_simulatedClick","_simulated","filterClick","attachEvent","removePointerListener","detachEvent","stopPropagation","_stopped","events","skipEvents","skipped","disableClickPropagation","fakeStop","preventDefault","returnValue","related","relatedTarget","HoverText","text","fontStyle","expressionColumn","FontStyle","IsExpression","span","margin","padding","fontFamily","fontWeight","fonStyle","innerHTML","HoverParagraph","hoverTexts","hoverText","column","hoverFormat","formattedLine","font","measureText","fillText","toHTML","xml","isSimple","pixelRatio","PIXEL_RATIO","paragraphs","expressionColumns","parseHoverXml","xmlDoc","DOMParser","parseFromString","loadXML","tags","getElementsByTagName","paragraph","nodeName","getAttribute","childNodes","nodeValue","addHoverText","toolTipDiv","createToolTiDiv","visibility","naturalWidth","naturalHeight","encodedXml","Dataset","longestWidth","emptyParagraphs","drawRoundRectangle","backgroundColor","border","borderRadius","zIndex","outlineStyle","webkitUserSelect","msUserSelect","userSelect","oncontextmenu","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","MarkupPoint","clientPoint","worldCoordinate","isStartPoint","ClientPoint","WorldCoordinate","IsStartPoint","Markup","editor","linePoints","isGeometryComplete","selectedForEditing","isHovered","insertionPoint","indexToInsertAt","foundPoint","Radius","topLeftPoint","bottomRightPoint","markupBounds","worldTopLeft","pointToWorldCoordinate","worldBottomRight","selectionWorldBounds","addTag","newPoint","worldPoint","promptType","cbDisplayPrompt","prompt","getExistingPoint","RadiusOfEarthInMetres","PointMarkup","renderPoint","addPoint","LineMarkup","existingPoint","indexToInsert","isPointOnLine","insertPoint","onDisplayPrompt","removePoint","lastPoint","contextLayer","renderLine","sWKT","PolygonMarkup","firstPoint","renderPolygon","_canvas","_div","_map","_ctx","_offScreenCanvas","_offScreenCtx","_selectionCanvas","_selectionCtx","xOffset","yOffset","_global","_pan","isPanning","transparentFill","ctxParam","alpha","fillColour","SymbolType","lineWidth","ShapeType","drawCircleShape","drawSquareShape","drawStarShape","drawDiamondShape","drawTriangleShape","save","rotate","highlightText","restore","highlightColour","strokeColor","textAboveSegment","centreX","centreY","clearStyles","fillRect","strokeWidth","dashStyle","setLineDash","strokeStyle","beginPath","nLastPoint","moveTo","lineTo","createPattern","StrokeType","drawPatternLine","drawSolidLine","isHole","closePath","_fillPolygon","fillColor","dashedLine","_drawFillable","radius","tl","tr","br","bl","defaultRadius","side","quadraticCurveTo","centerX","centerY","arc","clearRect","clearOffscreen","drawCanvasPanning","drawCanvas","drawRectangle","strokeColour","cx","cy","isUp","getTriangleUpPoints","getTriangleDownPoints","drawPolygonShape","spikes","outerRadius","innerRadius","rot","newWidth","newHeight","resizeCanvas","ratio","imageSmoothingEnabled","MgEvent","extendStatics","__extends","__","_enable_super_gross_mode_that_will_cause_bad_things","hostReportError","closed","useDeprecatedSynchronousErrorHandling","UnsubscriptionError","UnsubscriptionErrorImpl","errors","_parentOrParents","_subscriptions","_ctorUnsubscribe","_unsubscribe","flattenUnsubscriptionErrors","teardown","EMPTY","subscriptions","subscriptionIndex","errs","rxSubscriber","_super","Subscriber","destinationOrNext","_this","syncErrorValue","syncErrorThrown","syncErrorThrowable","isStopped","destination","_next","_error","_complete","_unsubscribeAndRecycle","SafeSubscriber","_parentSubscriber","observerOrNext","_context","__tryOrSetError","__tryOrUnsub","wrappedComplete","identity","pipeFromArray","input","_isScalar","_subscribe","lift","operator","sink","nextOrObserver","toSubscriber","_trySubscribe","closed_1","canReportError","promiseCtor","getPromiseCtor","operations","toPromise","ObjectUnsubscribedError","ObjectUnsubscribedErrorImpl","SubjectSubscription","subject","observers","subscriberIndex","SubjectSubscriber","Subject","hasError","thrownError","asObservable","AnonymousSubject","BehaviorSubject","_value","getValue","MgLayer","_id","defaultOptions","visible","Visible","isDebouncing","addLayer","ContextFilter","Filter","onAdd","offscreenCanvas","sourceEvent","rcMap","newExtents","DatasetType","Projection","MinScale","RenderOrderIndex","show","_viewport","currentExtents","onExtentsChanged","_options","_defaultOptions","minZoom","maxZoom","getWCLayerOptions","FixedQueue","fixedSize","trimTail","removeAll","RasterInfo","Center","MgImageLayer","_image","fixedQueue","rasters","previousRaster","raster","renderRaster","halfWidth","halfHeight","worldToClientRect","rasterInfo","loadImage","imageRect","_levels","_tiles","disposableViewPort","scaleChanged","getRasterInfo","parentOptions","layerOptions","errorImageUrl","crossOrigin","OpenStreetMapTileSource","domains","EsriTileSource","GoogleTileSource","serverNum","sec1","sec2","substring","WMTSTileSource","tileMatrix","MgTileLayer","debouncePromise","isLayerReady","debounced","promiseAll","aSpiral","rows","cols","direction","_tileSource","getTiles","tilePromises","spiralize","Datasource","Url","Key","setLayer","_addZoomLimit","DomUtil","_container","_tileZoom","_setAutoZIndex","_updateOpacity","_updateZIndex","_loading","_update","tileSize","errorTileUrl","MgFeatureLayer","quadTree","quadTrees","_features","_visibleItems","searchFeaturesPromise","customStyles","hasThematics","hasStyle","hoverTemplate","currentBounds","isGeocoder","worker","backgroundLayer","BackgroundLayer","createDefaultStyles","Symbology","createCustomStyles","processSearchColumns","checkContextualType","loadedExtents","ContextLayer","clearItems","ContextualType","isLayerReadyToDebounce","workerPromise","callFeatureQuery","guid","uuidv4","callRestApiFeatureQuery","changeLoadingStatus","loading","newFeatures","Results","Ids","FeatureNames","geometryFieldId","Worker","visibleFeatures","WORKER_DIR","setWorldToClient","HasQueryFields","terminate","getVisibleFeatures","payload","CheckVisibility","CellSize","crypto","getRandomValues","drawTracked","isNewScale","getFeatures","loadFeatures","isLoaded","le","setRestApiFeatureQueryParams","mapOptionType","searchFeatures","customParams","kGeometryReducer","defaultFeatureQueryParams","featureQuery","overwriteFeatures","isContextualType","pendingSelectionIds","setSelection","userFilter","zoomToBounds","UserFilter","innerPromise","resize","geometryEditor","onGeometryChanged","zoomToGeometryBounds","renderOrderIndex","coordinatesQuery","zoomToFeature","ItemId","WKT","ids","isInitial","clearSelection","idsFound","mapSelectedItems","sId","matches","FeatureName","setInitialExtents","zoomToGeometry","sFeatureIds","searchAndZoomToFeatures","dctIds","featureInfos","hasSelectedItems","featureInfo","LayerId","FeatureId","HoverLayout","InfoLayout","Line","Polygon","BackgroundColour","GeometryFieldId","otherColumns","hover","ExpressionColumns","IdentityField","jIdField","addThematicFieldsToColumns","Fields","pos2","customFieldId","symbology","polygonStrokeStyle","polygonFillStyle","loadSymbols","hoverOutlineWidth","selectedOutlineWidth","setHoverAndSelectedStyles","loadPattern","TrackingColour","trackingOutlineWidth","TrackingOutlineWidth","setTrackingStyle","loadHoverPatten","TrackingFillColour","setTrackingStyles","HoverFillColour","setHoverStyles","SelectedFillColour","setSelectedStyles","polygonStyle","customStyle","_pendingSelectionIds","canClick","EnabledThematics","ContextFilterDatasource","MgGeocoderLayer","geocoder","MgWmsLayer","getMapUrl","layers","styles","crs","format","bbox","wmsBlob","_readErrorFromBlob","handleError","imgUrl","webkitURL","reader","FileReader","readAsText","MeasurementPoint","DistanceInMetresFromPreviousPoint","Measurement","viewPort","selectedPoint","selectedPointIndex","measureToolDistanceUnits","measureToolAreaUnits","measurementRec","circleStroke","blackFill","measurementPoint","distanceInMetres","previousPoint","nextPoint","measureTool","MeasureToolDistanceUnits","MeasureToolAreaUnits","totalDistance","getDistanceString","calculateArea","getAreaString","areaUnit","invalidate","distanceUnit","drawExtraEllipse","previousClientPoint","drawTextOverLineSegment","distanceUnits","feet","areaInMetresSquared","areaUnits","convertToRadian","getLastPoint","tuple","drawDetailsBox","GeometryEditor","originalGeometryType","overwritePromptDisplayed","getContextLayer","selectedMarkup","markupsWithinSelectionRectangle","markupType","markups","hitItems","activeMarkup","markup","addPoints","addWorldCoordinate","toWKT","nCompleted","withinBounds","markupId","startPoint","handleMouseDoubleClick","markupIds","unselectMarkupAndDelete","clearSelectedMarkup","inDrawMode","mouseClickHandled","handleMouseClick","selectMarkup","canAddMarkup","addMarkup","displayOverwritePrompt","canShowTooltip","handleMouseMove","selectedMarkups","pointColour","isHovering","isSelected","cbGeometryEdit","wkt","bAddMarkup","MgReprojectedTileLayer","_transformPromise","_tranformPromiseParams","json","sTranformedExtents","jTranformedExtents","fetchReprojectedTiles","_tileUrls","parameters","tileUrls","_tileColumnCount","_tileRowCount","upperLeft","_upperLeft","lowerRight","_lowerRight","viewportClient","toStringBase64","imageBlob","paramsJson","sourceProjection","targetProjection","transformViewportUrl","iCol","iRow","MapOperator","MapSubscriber","fromEvent","eventName","resultSelector","setupSubscription","sourceObj","isEventTarget","source_1","isJQueryStyleEventEmitter","source_2","isNodeStyleEventEmitter","source_3","DragStates","PanStart","ZoomStart","SelectStart","SelectDragging","MeasurePanStart","MeasurePanDragging","GeometryEditPanStart","GeometryEditPanDragging","MgMap","zoomTimer","panTimer","_zoom","mouseDown","doMouseUpBound","doMouseMoveBound","homeCenter","homeScale","trackingMode","TrackingOnByDefault","createCanvas","Extents","xScale","DPI","getInchesPerUnit","yScale","LocationAndScale","Scale","Units","_initContainer","_initLayout","hoverItem","mouseX","mouseY","selectedFeatures","trackingFeatures","_initEvents","enableTooltip","mouseClicks","timerid","measureDistanceMode","geometryEditMode","measurement","handleContextmenu","_ongoingRefreshView","_pendingZoomByContextOrder","_initialExtentsDone","anyLoadingExtents$","_dctLayers","MS_DD","clientWidth","clientHeight","ptDragStart","ptDragCurrent","ptSelectionStart","ptSelectionEnd","dragState","Capture","_handlers","_layers","_zoomBoundLayers","_sizeChanged","repaintLayers","triggerCallback","calculateOffset","calculateExtents","shiftKeyDown","ctrlKeyDown","featureHoveredEvent","featureSingleClickedEvent","featureDoubleClickedEvent","featureSelectedEvent","_canvasId","onMouseMove","onMouseUp","enableDocumentLevelMouseMove","onMouseDown","onMouseWheel","onMouseLeave","onMouseDoubleClick","initTooltipContainer","getOffset","horizontal","offsetParent","offsetLeft","offsetTop","scrollHeight","getScrollParent","_contextLayer","fullRefresh","hitItem","hitItemLayer","removeTooltip","drawCanvasSelection","__canvas","clearAll","drawSelection","loadingStatus","newLoadingExtents","clearCanvas","layerName","vi","Tracking","renderTracked","renderSelection","_size","_getTopLeftPoint","_checkIfLoaded","_pixelOrigin","pane","_panes","toZoom","fromZoom","getPixelOrigin","_getMapPanePos","layerPoint","containerPointToLayerPoint","layerPointToLatLng","layerPointToContainerPoint","latLngToLayerPoint","clientX","clientY","clientLeft","clientTop","mouseEventToContainerPoint","mouseEventToLayerPoint","_getBoundsCenterZoom","setView","fitBounds","pan","targetCenter","targetZoom","animate","_stop","startZoom","w0","w1","getZoomScale","rho","rho2","sq","r0","duration","_moveStart","noMoveStart","frame","easeOut","_flyToFrame","_move","getScaleZoom","flyTo","_moveEnd","maxBounds","_panInsideMaxBounds","_loaded","oldZoom","getZoom","setZoom","_enforcingBounds","_limitCenter","panTo","paddingTL","paddingTopLeft","paddingBR","paddingBottomRight","pixelCenter","pixelPoint","pixelBounds","getPixelBounds","halfPixelBounds","paddedBounds","_limitZoom","zoomSnap","_locateOptions","watch","_handleGeolocationError","onResponse","_handleGeolocationResponse","_locationWatchId","geolocation","watchPosition","getCurrentPosition","clearWatch","targets","isHover","srcElement","dragging","_targets","_draggableMoved","synth","_fireDOMEvent","_findEventTargets","isMarker","getLatLng","_radius","containerPoint","latLngToContainerPoint","_mouseEvents","bubblingMouseEvents","enabled","moved","boxZoom","_getNewPixelOrigin","viewHalf","latLngBounds","pendingSetExtentsParam","findNewExtents","skipRefreshView","extentsPercent","zoomedInScale","overscan","newW","newH","ptStart","ptEnd","cbZoom","cancelRequest","_panAnim","panInsideBounds","_getCenterLayerPoint","centerPoint","viewBounds","_getBoundsOffset","newBounds","pxBounds","projectedMaxBounds","minOffset","maxOffset","_rebound","snap","newCellsize","excludeContextLayer","halfClientWidth","halfClientHeight","boundingRectOffsetX","boundingRectOffsetY","cbUpdateExtents","updateExtents","_center","mapZoom","halfSize","center_lat","ipu","MS_METERS","MS_KILOMETERS","MS_MILES","MS_INCHES","MS_FEET","InchesPerUnit","xMouseOffset","yMouseOffset","which","ctrlKey","shiftKey","setDistanceType","MeasureTool","handleMouseDown","cursor","isLeftButtonPressed","handleMouseDragging","mouseMoveCallback","toElement","onMouseSingleClick","handleMouseUp","hitLayers","isDownloading","getHitItem","cbSelectFeatures","addToSelectedMarkup","layerSelection","getIntersections","selectMarkupsWithinBounds","latLng1","latLng2","drawCroppedCanvas","mouseWheelCallback","hasScrollParent","scrollLeft","scrollTop","deleteMarkup","cbDoubleClick","WheelEvent","deltaY","zoomIn","zoomOut","previousItem","needsRedraw","canHover","showTooltip","evt","showDivStyle","hideDivStyle","toolTip","menu","liStyle","paddingTop","paddingBottom","doZoomToFeatures","onZoomToFeatures","contextMenuContainer","createStyle","contextMenu","listStyle","_createMenuItem","onMoreInformation","onDisableMeasurement","onEnableMeasurement","onSearchFeatures","onInitGeometry","onDrawPointSelected","onDrawLineSelected","onDrawPolygonSelected","onDeleteMarkup","onDeleteAllMarkups","allMarkups","allFeatures","getHitItems","cbContextMenu","visibleItems","getHitItemsFeatureInfo","overMeasureBox","measureBoxHitTest","allInspAreaFeatures","createContextMenu","borderStyle","borderWidth","borderColor","hideContextMenu","getMilliseconds","enable","initialiseGeometryEditor","endEditMode","setGeometryEditorType","deleteSelectedMarkups","isActiveMarkupValid","activeMarkupId","saveInCompleteMarkup","styleSheet","cssText","dataset","contextLayers","ContextOrder","xBuffer","yBuffer","ZoomToScale","getWCMapOptions","_layersMinZoom","_minZoom","fadeAnimation","_fadeAnimation","_layersMaxZoom","_maxZoom","_pendingSetExtentsParam","MS_PIXELS","AsyncAction","scheduler","work","pending","schedule","recycleAsyncId","requestAsyncId","clearInterval","execute","_execute","errored","errorValue","actions","Action","Scheduler","SchedulerAction","AsyncScheduler","active","scheduled","action","interval","period","dispatch","getSymbolIterator","subscribeTo","obs","isPromise","SimpleInnerSubscriber","notifyNext","notifyError","notifyComplete","SimpleOuterSubscriber","innerValue","debounce","durationSelector","DebounceOperator","DebounceSubscriber","hasValue","_tryNext","emitValue","durationSubscription","innerSubscriber","innerSubscribe","createMap","generatedMap","dctMaps","createObject","deleteMap","createTileLayer","createImageLayer","createFeatureLayer","createGeocoderLayer","createWmsLayer","createEnvelope"],"mappings":"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,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ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","file":"mipela-mapcontrol.1.0.292.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/dist/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 394);\n","export default class MapEnums {\r\n}\r\n\r\nMapEnums.DatasetTypes = {\r\n Tile : 0,\r\n Raster : 1,\r\n Feature : 2,\r\n Geometry : 3,\r\n Geocoder : 4,\r\n}\r\n\r\n\r\nMapEnums.DatasourceTypes = {\r\n // imagery types\r\n OpenStreetMap : 0,\r\n GoogleStreetMap : 1,\r\n GenericTileService : 2,\r\n LegacyMapsTileService : 3,\r\n NearMap : 4,\r\n Raster : 5,\r\n WMTS : 6,\r\n WMS : 7,\r\n\r\n // feature types\r\n Spatialite : 8,\r\n SqlServer : 9,\r\n PostGIS : 10,\r\n Oracle : 11,\r\n\r\n EsriFileGeodatabase : 12,\r\n\r\n EsriRestService : 13,\r\n WFS : 14,\r\n\r\n EsriShapeFile : 15,\r\n MapinfoTabFile : 16,\r\n DBF : 17,\r\n CSV : 18\r\n}\r\n\r\nMapEnums.SymbolTypes = {\r\n SolidShape : 0,\r\n OutlineShape : 1,\r\n Character : 2,\r\n Glyph : 3\r\n}\r\n\r\nMapEnums.UnitTypes = {\r\n Inches : 0,\r\n Feet : 1,\r\n Miles : 2,\r\n Meters : 3,\r\n Kilometers : 4,\r\n Degrees : 5,\r\n Pixels : 6\r\n}\r\n \r\nMapEnums.SpatialFieldTypes = {\r\n Text : 0,\r\n Short : 1,\r\n Integer : 2,\r\n Long : 3,\r\n Float : 4,\r\n Double : 5,\r\n Boolean : 6,\r\n DateTime : 7,\r\n Date : 8,\r\n Time : 9,\r\n Guid : 10,\r\n Binary : 11,\r\n Geometry : 12,\r\n Decimal : 13,\r\n\r\n // These are content types\r\n\r\n ForeignKey : 14,\r\n Document : 15,\r\n Picture : 16,\r\n Options : 17,\r\n Option : 18,\r\n Folder : 19,\r\n File : 20,\r\n URL : 21,\r\n MultilineText : 22,\r\n RichText : 23,\r\n Icon : 24,\r\n Email : 25,\r\n Phone : 26,\r\n\r\n User : 27,\r\n UserGroup : 28,\r\n Contact : 29,\r\n Project : 30,\r\n Entity : 31,\r\n LinkedEntity : 32,\r\n Communication : 33,\r\n StepResponse : 34,\r\n AssociatedContact : 35,\r\n\r\n Unknown : 36\r\n}\r\n\r\nMapEnums.LabelPositions = {\r\n AboveLeft : 0,\r\n AboveCentre : 1,\r\n AboveRight : 2,\r\n\r\n MiddleLeft : 3,\r\n MiddleCentre : 4,\r\n MiddleRight : 5,\r\n\r\n BelowLeft : 6,\r\n BelowCentre : 7,\r\n BelowRight : 8,\r\n}\r\n\r\nMapEnums.StrokeTypes = {\r\n Solid : 0,\r\n DashStyle : 1,\r\n DashPattern : 2,\r\n Pattern : 3\r\n}\r\n\r\nMapEnums.FillTypes = {\r\n Solid : 0,\r\n Hatch : 1,\r\n Pattern : 2,\r\n Gradient : 3,\r\n LinearGradient : 4\r\n}\r\n\r\nMapEnums.Shapes = {\r\n Circle : 0,\r\n Cross : 1,\r\n DiagonalCross : 2,\r\n Diamond : 3,\r\n Marker : 4,\r\n Pin : 5,\r\n Square : 6,\r\n Star : 7,\r\n TriangleUp : 8,\r\n TriangleDown : 9,\r\n}\r\n\r\n\r\nMapEnums.DashStyles = {\r\n Dash : 0,\r\n Dot : 1,\r\n DashDot : 2,\r\n DashDotDot : 3,\r\n}\r\n\r\nMapEnums.HatchStyles = {\r\n Horizontal : 0,\r\n Vertical : 1,\r\n\r\n ForwardDiagonal : 2,\r\n BackwardDiagonal : 3,\r\n\r\n Cross : 4,\r\n DiagonalCross : 5,\r\n\r\n Percent05 : 6,\r\n Percent10 : 7,\r\n Percent20 : 8,\r\n Percent25 : 9,\r\n Percent30 : 10,\r\n Percent40 : 11,\r\n Percent50 : 12,\r\n Percent60 : 13,\r\n Percent70 : 14,\r\n Percent75 : 15,\r\n Percent80 : 16,\r\n Percent90 : 17,\r\n LightDownwardDiagonal : 18,\r\n LightUpwardDiagonal : 19,\r\n DarkDownwardDiagonal : 20,\r\n DarkUpwardDiagonal : 21,\r\n WideDownwardDiagonal : 22,\r\n WideUpwardDiagonal : 23,\r\n LightVertical : 24,\r\n LightHorizontal : 25,\r\n NarrowVertical : 26,\r\n NarrowHorizontal : 27,\r\n DarkVertical : 28,\r\n DarkHorizontal : 29,\r\n DashedDownwardDiagonal : 30,\r\n DashedUpwardDiagonal : 31,\r\n DashedHorizontal : 32,\r\n DashedVertical : 33,\r\n SmallConfetti : 34,\r\n LargeConfetti : 35,\r\n ZigZag : 36,\r\n Wave : 37,\r\n DiagonalBrick : 38,\r\n HorizontalBrick : 39,\r\n Weave : 40,\r\n Plaid : 41,\r\n Divot : 42,\r\n DottedGrid : 43,\r\n DottedDiamond : 44,\r\n Shingle : 45,\r\n Trellis : 46,\r\n Sphere : 47,\r\n SmallGrid : 48,\r\n SmallCheckerBoard : 49,\r\n LargeCheckerBoard : 50,\r\n OutlinedDiamond : 51,\r\n SolidDiamond : 52\r\n}\r\n\r\nMapEnums.FillTypes = {\r\n None : 0,\r\n Solid : 1,\r\n Hatch : 2,\r\n Pattern : 3,\r\n Gradient : 4,\r\n LinearGradient : 5 \r\n}\r\n\r\nMapEnums.HatchStyles = {\r\n None : 0,\r\n Horizontal : 1,\r\n Vertical : 2,\r\n ForwardDiagonal : 3,\r\n BackwardDiagonal : 4,\r\n Cross : 5,\r\n DiagonalCross : 6,\r\n}\r\n\r\nMapEnums.StrokeTypes = {\r\n None : 0,\r\n Solid : 1,\r\n DashStyle : 2,\r\n DashPattern : 3,\r\n Pattern : 4\r\n}\r\n\r\nMapEnums.DashTypes = {\r\n Solid : 0,\r\n Dash : 1,\r\n Dot : 2,\r\n DashDot : 3,\r\n DashDotDot : 4\r\n}\r\n \r\nMapEnums.EndCaps = {\r\n Butt : 0,\r\n Round : 1,\r\n Square : 2\r\n}\r\n\r\nMapEnums.LineJoins = {\r\n Bevel : 0,\r\n Round : 1,\r\n Miter : 2\r\n}\r\n\r\nMapEnums.SymbolTypes = {\r\n None : -1,\r\n SolidShape : 0,\r\n OutlineShape : 1,\r\n Character : 2,\r\n Glyph : 0\r\n}\r\n\r\nMapEnums.Shapes = {\r\n None : -1,\r\n Circle : 0,\r\n Cross : 1,\r\n DiagonalCross : 2,\r\n Diamond : 3,\r\n Marker : 4,\r\n Pin : 5,\r\n Square : 6,\r\n Star : 7,\r\n TriangleUp : 8,\r\n TriangleDown : 9,\r\n}\r\n\r\nMapEnums.Placements = {\r\n Unknown : -1,\r\n AboveLeft : 0,\r\n AboveCentre : 1,\r\n AboveRight : 2,\r\n\r\n MiddleLeft : 3,\r\n MiddleCentre : 4,\r\n MiddleRight : 5,\r\n\r\n BelowLeft : 6,\r\n BelowCentre : 7,\r\n BelowRight : 8,\r\n}\r\n\r\nMapEnums.ClipStates = {\r\n ClipLeft : 0,\r\n ClipMiddle : 1,\r\n OutClipRightineShape : 2\r\n}\r\n \r\nMapEnums.ImageStates = {\r\n Initial : 0,\r\n Loading : 1,\r\n Loaded : 2,\r\n Failed : 3,\r\n}\r\n\r\nMapEnums.GeometryTypes = {\r\n NONE : -1,\r\n POINT : 0,\r\n LINESTRING : 1,\r\n LINEARRING : 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\r\nMapEnums.PromptTypes = {\r\n REPLACE_EXISTING_GEOMETRY : 0,\r\n MINIMUM_REQUIRED_POINTS_POLYGON : 1, \r\n MINIMUM_REQUIRED_POINTS_LINESTRING : 2, \r\n}\r\n\r\nMapEnums.ContextTypes = {\r\n None : -1,\r\n ShowAllFeatures : 0,\r\n ShowOnlyRelatedFeatures : 1,\r\n ShowOtherFeatures : 2,\r\n Primary: 3\r\n}\r\n\r\nMapEnums.MapOptionTypes = {\r\n MAPACTIVITY : 0,\r\n GEOMETRY : 1,\r\n CONTROL : 2\r\n}\r\n\r\nMapEnums.DatasourceTypes = {\r\n None : -1,\r\n LinkedEntity : 0,\r\n LinkedAssociatedContact : 1,\r\n Communication : 2,\r\n OutstandingActions : 3,\r\n ProcedureStatus : 4,\r\n StepResponse : 5,\r\n CommunicationStatistics : 6,\r\n LinkedAssociatedContactStatistics : 7,\r\n LinkedEntityStatistics : 8, \r\n Project : 9, \r\n Entity : 10, \r\n Contact : 11,\r\n AssociatedContact : 12,\r\n ProjectCommunication : 13,\r\n User : 14,\r\n UserGroup : 15,\r\n Document : 16\r\n}\r\n\r\nMapEnums.SourceEvents = { \r\n AngularShowMap: 0,\r\n AngularLayerSearch: 1,\r\n AngularContextLayerSearch: 2, \r\n AngularContextRelatedLayerSearch: 3, \r\n AngularZoomToFeature: 4,\r\n AngularZoomToLayer: 5,\r\n AngularLayerVisibility: 6,\r\n AngularMapDivSizeChange: 7,\r\n AngularRestoreHistory: 8,\r\n\r\n //map.js \r\n ShowThematics: 9,\r\n ResizeHeight: 10,\r\n SetView: 11,\r\n Zoom: 12,\r\n ZoomDragging: 13,\r\n PanDragging: 14,\r\n ZoomByContextOrder: 15,\r\n DeleteFeatures: 16\r\n}","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","import {isArray, formatNum} from '../core/Util';\r\n\r\n/*\r\n * @class Point\r\n * @aka L.Point\r\n *\r\n * Represents a point with `x` and `y` coordinates in pixels.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var point = L.point(200, 300);\r\n * ```\r\n *\r\n * All Leaflet methods and options that accept `Point` objects also accept them in a simple Array form (unless noted otherwise), so these lines are equivalent:\r\n *\r\n * ```js\r\n * map.panBy([200, 300]);\r\n * map.panBy(L.point(200, 300));\r\n * ```\r\n *\r\n * Note that `Point` does not inherit from Leafet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport class Point {\r\n\tconstructor(x, y, round) {\r\n\t // @property x: Number; The `x` coordinate of the point\r\n\t this.x = (round ? Math.trunc(x) : x);\r\n\t // @property y: Number; The `y` coordinate of the point\r\n\t this.y = (round ? Math.trunc(y) : y);\r\n\t}\r\n}\r\n\r\nvar trunc = Math.trunc || function (v) {\r\n\treturn v > 0 ? Math.floor(v) : Math.ceil(v);\r\n};\r\n\r\nPoint.prototype = {\r\n\r\n\t// @method clone(): Point\r\n\t// Returns a copy of the current point.\r\n\tclone: function () {\r\n\t\treturn new Point(this.x, this.y);\r\n\t},\r\n\r\n\t// @method add(otherPoint: Point): Point\r\n\t// Returns the result of addition of the current and the given points.\r\n\tadd: function (point) {\r\n\t\t// non-destructive, returns a new point\r\n\t\treturn this.clone()._add(toPoint(point));\r\n\t},\r\n\r\n\t_add: function (point) {\r\n\t\t// destructive, used directly for performance in situations where it's safe to modify existing point\r\n\t\tthis.x += point.x;\r\n\t\tthis.y += point.y;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method subtract(otherPoint: Point): Point\r\n\t// Returns the result of subtraction of the given point from the current.\r\n\tsubtract: function (point) {\r\n\t\treturn this.clone()._subtract(toPoint(point));\r\n\t},\r\n\r\n\t_subtract: function (point) {\r\n\t\tthis.x -= point.x;\r\n\t\tthis.y -= point.y;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method divideBy(num: Number): Point\r\n\t// Returns the result of division of the current point by the given number.\r\n\tdivideBy: function (num) {\r\n\t\treturn this.clone()._divideBy(num);\r\n\t},\r\n\r\n\t_divideBy: function (num) {\r\n\t\tthis.x /= num;\r\n\t\tthis.y /= num;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method multiplyBy(num: Number): Point\r\n\t// Returns the result of multiplication of the current point by the given number.\r\n\tmultiplyBy: function (num) {\r\n\t\treturn this.clone()._multiplyBy(num);\r\n\t},\r\n\r\n\t_multiplyBy: function (num) {\r\n\t\tthis.x *= num;\r\n\t\tthis.y *= num;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method scaleBy(scale: Point): Point\r\n\t// Multiply each coordinate of the current point by each coordinate of\r\n\t// `scale`. In linear algebra terms, multiply the point by the\r\n\t// [scaling matrix](https://en.wikipedia.org/wiki/Scaling_%28geometry%29#Matrix_representation)\r\n\t// defined by `scale`.\r\n\tscaleBy: function (point) {\r\n\t\treturn new Point(this.x * point.x, this.y * point.y);\r\n\t},\r\n\r\n\t// @method unscaleBy(scale: Point): Point\r\n\t// Inverse of `scaleBy`. Divide each coordinate of the current point by\r\n\t// each coordinate of `scale`.\r\n\tunscaleBy: function (point) {\r\n\t\treturn new Point(this.x / point.x, this.y / point.y);\r\n\t},\r\n\r\n\t// @method round(): Point\r\n\t// Returns a copy of the current point with rounded coordinates.\r\n\tround: function () {\r\n\t\treturn this.clone()._round();\r\n\t},\r\n\r\n\t_round: function () {\r\n\t\tthis.x = Math.trunc(this.x);\r\n\t\tthis.y = Math.trunc(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method floor(): Point\r\n\t// Returns a copy of the current point with floored coordinates (rounded down).\r\n\tfloor: function () {\r\n\t\treturn this.clone()._floor();\r\n\t},\r\n\r\n\t_floor: function () {\r\n\t\tthis.x = Math.floor(this.x);\r\n\t\tthis.y = Math.floor(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method ceil(): Point\r\n\t// Returns a copy of the current point with ceiled coordinates (rounded up).\r\n\tceil: function () {\r\n\t\treturn this.clone()._ceil();\r\n\t},\r\n\r\n\t_ceil: function () {\r\n\t\tthis.x = Math.ceil(this.x);\r\n\t\tthis.y = Math.ceil(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method trunc(): Point\r\n\t// Returns a copy of the current point with truncated coordinates (rounded towards zero).\r\n\ttrunc: function () {\r\n\t\treturn this.clone()._trunc();\r\n\t},\r\n\r\n\t_trunc: function () {\r\n\t\tthis.x = trunc(this.x);\r\n\t\tthis.y = trunc(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method distanceTo(otherPoint: Point): Number\r\n\t// Returns the cartesian distance between the current and the given points.\r\n\tdistanceTo: function (point) {\r\n\t\tpoint = toPoint(point);\r\n\r\n\t\tvar x = point.x - this.x,\r\n\t\t y = point.y - this.y;\r\n\r\n\t\treturn Math.sqrt(x * x + y * y);\r\n\t},\r\n\r\n\t// @method equals(otherPoint: Point): Boolean\r\n\t// Returns `true` if the given point has the same coordinates.\r\n\tequals: function (point) {\r\n\t\tpoint = toPoint(point);\r\n\r\n\t\treturn point.x === this.x &&\r\n\t\t point.y === this.y;\r\n\t},\r\n\r\n\t// @method contains(otherPoint: Point): Boolean\r\n\t// Returns `true` if both coordinates of the given point are less than the corresponding current point coordinates (in absolute values).\r\n\tcontains: function (point) {\r\n\t\tpoint = toPoint(point);\r\n\r\n\t\treturn Math.abs(point.x) <= Math.abs(this.x) &&\r\n\t\t Math.abs(point.y) <= Math.abs(this.y);\r\n\t},\r\n\r\n\t// @method toString(): String\r\n\t// Returns a string representation of the point for debugging purposes.\r\n\ttoString: function () {\r\n\t\treturn 'Point(' +\r\n\t\t formatNum(this.x) + ', ' +\r\n\t\t formatNum(this.y) + ')';\r\n\t}\r\n};\r\n\r\n// @factory L.point(x: Number, y: Number, round?: Boolean)\r\n// Creates a Point object with the given `x` and `y` coordinates. If optional `round` is set to true, rounds the `x` and `y` values.\r\n\r\n// @alternative\r\n// @factory L.point(coords: Number[])\r\n// Expects an array of the form `[x, y]` instead.\r\n\r\n// @alternative\r\n// @factory L.point(coords: Object)\r\n// Expects a plain object of the form `{x: Number, y: Number}` instead.\r\nexport function toPoint(x, y, round) {\r\n\tif (x instanceof Point) {\r\n\t\treturn x;\r\n\t}\r\n\tif (isArray(x)) {\r\n\t\treturn new Point(x[0], x[1]);\r\n\t}\r\n\tif (x === undefined || x === null) {\r\n\t\treturn x;\r\n\t}\r\n\tif (typeof x === 'object' && 'x' in x && 'y' in x) {\r\n\t\treturn new Point(x.x, x.y);\r\n\t}\r\n\treturn new Point(x, y, round);\r\n}\r\n","import * as Util from '../core/Util';\r\nimport {Earth} from './crs/CRS.Earth';\r\nimport {toLatLngBounds} from './LatLngBounds';\r\n\r\n/* @class LatLng\r\n * @aka L.LatLng\r\n *\r\n * Represents a geographical point with a certain latitude and longitude.\r\n *\r\n * @example\r\n *\r\n * ```\r\n * var latlng = L.latLng(50.5, 30.5);\r\n * ```\r\n *\r\n * All Leaflet methods that accept LatLng objects also accept them in a simple Array form and simple object form (unless noted otherwise), so these lines are equivalent:\r\n *\r\n * ```\r\n * map.panTo([50, 30]);\r\n * map.panTo({lon: 30, lat: 50});\r\n * map.panTo({lat: 50, lng: 30});\r\n * map.panTo(L.latLng(50, 30));\r\n * ```\r\n *\r\n */\r\n\r\nexport class LatLng {\r\n\tconstructor(lat, lng, alt) {\r\n\t\tif (isNaN(lat) || isNaN(lng)) {\r\n\t\t\tthrow new Error('Invalid LatLng object: (' + lat + ', ' + lng + ')');\r\n\t\t}\r\n\r\n\t\t// @property lat: Number\r\n\t\t// Latitude in degrees\r\n\t\tthis.lat = +lat;\r\n\r\n\t\t// @property lng: Number\r\n\t\t// Longitude in degrees\r\n\t\tthis.lng = +lng;\r\n\r\n\t\t// @property alt: Number\r\n\t\t// Altitude in meters (optional)\r\n\t\tif (alt !== undefined) {\r\n\t\t\tthis.alt = +alt;\r\n\t\t}\r\n\t}\r\n\r\n\t// @method equals(otherLatLng: LatLng, maxMargin?: Number): Boolean\r\n\t// Returns `true` if the given `LatLng` point is at the same position (within a small margin of error). The margin of error can be overridden by setting `maxMargin` to a small number.\r\n\tequals(obj, maxMargin) {\r\n\t\tif (!obj) { return false; }\r\n\r\n\t\tobj = toLatLng(obj);\r\n\r\n\t\tvar margin = Math.max(\r\n\t\t Math.abs(this.lat - obj.lat),\r\n\t\t Math.abs(this.lng - obj.lng));\r\n\r\n\t\treturn margin <= (maxMargin === undefined ? 1.0E-9 : maxMargin);\r\n\t}\r\n\r\n\t// @method toString(): String\r\n\t// Returns a string representation of the point (for debugging purposes).\r\n\ttoString(precision) {\r\n\t\treturn 'LatLng(' +\r\n\t\t Util.formatNum(this.lat, precision) + ', ' +\r\n\t\t Util.formatNum(this.lng, precision) + ')';\r\n\t}\r\n\r\n\t// @method distanceTo(otherLatLng: LatLng): Number\r\n\t// Returns the distance (in meters) to the given `LatLng` calculated using the [Spherical Law of Cosines](https://en.wikipedia.org/wiki/Spherical_law_of_cosines).\r\n\tdistanceTo(other) {\r\n\t\treturn Earth.distance(this, toLatLng(other));\r\n\t}\r\n\r\n\t// @method wrap(): LatLng\r\n\t// Returns a new `LatLng` object with the longitude wrapped so it's always between -180 and +180 degrees.\r\n\twrap() {\r\n\t\treturn Earth.wrapLatLng(this);\r\n\t}\r\n\r\n\t// @method toBounds(sizeInMeters: Number): LatLngBounds\r\n\t// Returns a new `LatLngBounds` object in which each boundary is `sizeInMeters/2` meters apart from the `LatLng`.\r\n\ttoBounds(sizeInMeters) {\r\n\t\tvar latAccuracy = 180 * sizeInMeters / 40075017,\r\n\t\t lngAccuracy = latAccuracy / Math.cos((Math.PI / 180) * this.lat);\r\n\r\n\t\treturn toLatLngBounds(\r\n\t\t [this.lat - latAccuracy, this.lng - lngAccuracy],\r\n\t\t [this.lat + latAccuracy, this.lng + lngAccuracy]);\r\n\t}\r\n\r\n\tclone() {\r\n\t\treturn new LatLng(this.lat, this.lng, this.alt);\r\n\t}\r\n\r\n\tget X() {\r\n\t\treturn this.lng;\r\n\t}\r\n\r\n\tset X(value) {\r\n\t\tthis.lng = value;\r\n\t}\r\n\r\n\tget Y() {\r\n\t\treturn this.lat;\r\n\t}\r\n\r\n\tset Y(value) {\r\n\t\tthis.lat = value;\r\n\t}\r\n\r\n\tget Z() {\r\n\t\treturn this.alt;\r\n\t}\r\n\r\n\tset Z(value) {\r\n\t\tthis.alt = value;\r\n\t}\r\n}\r\n\r\n\r\n\r\n// @factory L.latLng(latitude: Number, longitude: Number, altitude?: Number): LatLng\r\n// Creates an object representing a geographical point with the given latitude and longitude (and optionally altitude).\r\n\r\n// @alternative\r\n// @factory L.latLng(coords: Array): LatLng\r\n// Expects an array of the form `[Number, Number]` or `[Number, Number, Number]` instead.\r\n\r\n// @alternative\r\n// @factory L.latLng(coords: Object): LatLng\r\n// Expects an plain object of the form `{lat: Number, lng: Number}` or `{lat: Number, lng: Number, alt: Number}` instead.\r\n\r\nexport function toLatLng(a, b, c) {\r\n\tif (a instanceof LatLng) {\r\n\t\treturn a;\r\n\t}\r\n\tif (Util.isArray(a) && typeof a[0] !== 'object') {\r\n\t\tif (a.length === 3) {\r\n\t\t\treturn new LatLng(a[0], a[1], a[2]);\r\n\t\t}\r\n\t\tif (a.length === 2) {\r\n\t\t\treturn new LatLng(a[0], a[1]);\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\tif (a === undefined || a === null) {\r\n\t\treturn a;\r\n\t}\r\n\tif (typeof a === 'object' && 'lat' in a) {\r\n\t\treturn new LatLng(a.lat, 'lng' in a ? a.lng : a.lon, a.alt);\r\n\t}\r\n\tif (b === undefined) {\r\n\t\treturn null;\r\n\t}\r\n\treturn new LatLng(a, b, c);\r\n}\r\n","/*\r\n * @namespace Util\r\n *\r\n * Various utility functions, used by Leaflet internally.\r\n */\r\n\r\n import {LatLng} from '../geometry/LatLng';\r\n\r\nexport var freeze = Object.freeze;\r\nObject.freeze = function (obj) { return obj; };\r\n\r\n// @function extend(dest: Object, src?: Object): Object\r\n// Merges the properties of the `src` object (or multiple objects) into `dest` object and returns the latter. Has an `L.extend` shortcut.\r\nexport function extend(dest) {\r\n\tvar i, j, len, src;\r\n\r\n\tfor (j = 1, len = arguments.length; j < len; j++) {\r\n\t\tsrc = arguments[j];\r\n\t\tfor (i in src) {\r\n\t\t\tdest[i] = src[i];\r\n\t\t}\r\n\t}\r\n\treturn dest;\r\n}\r\n\r\n// @function create(proto: Object, properties?: Object): Object\r\n// Compatibility polyfill for [Object.create](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/create)\r\nexport var create = Object.create || (function () {\r\n\tfunction F() {}\r\n\treturn function (proto) {\r\n\t\tF.prototype = proto;\r\n\t\treturn new F();\r\n\t};\r\n})();\r\n\r\n// @function bind(fn: Function, …): Function\r\n// Returns a new function bound to the arguments passed, like [Function.prototype.bind](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).\r\n// Has a `L.bind()` shortcut.\r\nexport function bind(fn, obj) {\r\n\tvar slice = Array.prototype.slice;\r\n\r\n\tif (fn.bind) {\r\n\t\treturn fn.bind.apply(fn, slice.call(arguments, 1));\r\n\t}\r\n\r\n\tvar args = slice.call(arguments, 2);\r\n\r\n\treturn function () {\r\n\t\treturn fn.apply(obj, args.length ? args.concat(slice.call(arguments)) : arguments);\r\n\t};\r\n}\r\n\r\n// @property lastId: Number\r\n// Last unique ID used by [`stamp()`](#util-stamp)\r\nexport var lastId = 0;\r\n\r\n// @function stamp(obj: Object): Number\r\n// Returns the unique ID of an object, assigning it one if it doesn't have it.\r\nexport function stamp(obj) {\r\n\t/*eslint-disable */\r\n\tobj._leaflet_id = obj._leaflet_id || ++lastId;\r\n\treturn obj._leaflet_id;\r\n\t/* eslint-enable */\r\n}\r\n\r\n// @function throttle(fn: Function, time: Number, context: Object): Function\r\n// Returns a function which executes function `fn` with the given scope `context`\r\n// (so that the `this` keyword refers to `context` inside `fn`'s code). The function\r\n// `fn` will be called no more than one time per given amount of `time`. The arguments\r\n// received by the bound function will be any arguments passed when binding the\r\n// function, followed by any arguments passed when invoking the bound function.\r\n// Has an `L.throttle` shortcut.\r\nexport function throttle(fn, time, context) {\r\n\tvar lock, args, wrapperFn, later;\r\n\r\n\tlater = function () {\r\n\t\t// reset lock and call if queued\r\n\t\tlock = false;\r\n\t\tif (args) {\r\n\t\t\twrapperFn.apply(context, args);\r\n\t\t\targs = false;\r\n\t\t}\r\n\t};\r\n\r\n\twrapperFn = function () {\r\n\t\tif (lock) {\r\n\t\t\t// called too soon, queue to call later\r\n\t\t\targs = arguments;\r\n\r\n\t\t} else {\r\n\t\t\t// call and lock until later\r\n\t\t\tfn.apply(context, arguments);\r\n\t\t\tsetTimeout(later, time);\r\n\t\t\tlock = true;\r\n\t\t}\r\n\t};\r\n\r\n\treturn wrapperFn;\r\n}\r\n\r\n// @function wrapNum(num: Number, range: Number[], includeMax?: Boolean): Number\r\n// Returns the number `num` modulo `range` in such a way so it lies within\r\n// `range[0]` and `range[1]`. The returned value will be always smaller than\r\n// `range[1]` unless `includeMax` is set to `true`.\r\nexport function wrapNum(x, range, includeMax) {\r\n\tvar max = range[1],\r\n\t min = range[0],\r\n\t d = max - min;\r\n\treturn x === max && includeMax ? x : ((x - min) % d + d) % d + min;\r\n}\r\n\r\n// @function falseFn(): Function\r\n// Returns a function which always returns `false`.\r\nexport function falseFn() { return false; }\r\n\r\n// @function formatNum(num: Number, digits?: Number): Number\r\n// Returns the number `num` rounded to `digits` decimals, or to 6 decimals by default.\r\nexport function formatNum(num, digits) {\r\n\tvar pow = Math.pow(10, (digits === undefined ? 6 : digits));\r\n\treturn Math.round(num * pow) / pow;\r\n}\r\n\r\n// @function trim(str: String): String\r\n// Compatibility polyfill for [String.prototype.trim](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim)\r\nexport function trim(str) {\r\n\treturn str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\r\n}\r\n\r\n// @function splitWords(str: String): String[]\r\n// Trims and splits the string on whitespace and returns the array of parts.\r\nexport function splitWords(str) {\r\n\treturn trim(str).split(/\\s+/);\r\n}\r\n\r\n// @function setOptions(obj: Object, options: Object): Object\r\n// Merges the given properties to the `options` of the `obj` object, returning the resulting options. See `Class options`. Has an `L.setOptions` shortcut.\r\nexport function setOptions(obj, options) {\r\n\tif (!obj.options) {\r\n\t\tobj.options = obj.options ? create(obj.options) : {};\r\n\t}\r\n\tfor (var i in options) {\r\n\t\tobj.options[i] = options[i];\r\n\t}\r\n\treturn obj.options;\r\n}\r\n\r\n// @function getParamString(obj: Object, existingUrl?: String, uppercase?: Boolean): String\r\n// Converts an object into a parameter URL string, e.g. `{a: \"foo\", b: \"bar\"}`\r\n// translates to `'?a=foo&b=bar'`. If `existingUrl` is set, the parameters will\r\n// be appended at the end. If `uppercase` is `true`, the parameter names will\r\n// be uppercased (e.g. `'?A=foo&B=bar'`)\r\nexport function getParamString(obj, existingUrl, uppercase) {\r\n\tvar params = [];\r\n\tfor (var i in obj) {\r\n\t\tparams.push(encodeURIComponent(uppercase ? i.toUpperCase() : i) + '=' + encodeURIComponent(obj[i]));\r\n\t}\r\n\treturn ((!existingUrl || existingUrl.indexOf('?') === -1) ? '?' : '&') + params.join('&');\r\n}\r\n\r\nvar templateRe = /\\{ *([\\w_-]+) *\\}/g;\r\n\r\n// @function template(str: String, data: Object): String\r\n// Simple templating facility, accepts a template string of the form `'Hello {a}, {b}'`\r\n// and a data object like `{a: 'foo', b: 'bar'}`, returns evaluated string\r\n// `('Hello foo, bar')`. You can also specify functions instead of strings for\r\n// data values — they will be evaluated passing `data` as an argument.\r\nexport function template(str, data) {\r\n\treturn str.replace(templateRe, function (str, key) {\r\n\t\tvar value = data[key];\r\n\r\n\t\tif (value === undefined) {\r\n\t\t\tthrow new Error('No value provided for variable ' + str);\r\n\r\n\t\t} else if (typeof value === 'function') {\r\n\t\t\tvalue = value(data);\r\n\t\t}\r\n\t\treturn value;\r\n\t});\r\n}\r\n\r\n// @function isArray(obj): Boolean\r\n// Compatibility polyfill for [Array.isArray](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray)\r\nexport var isArray = Array.isArray || function (obj) {\r\n\treturn (Object.prototype.toString.call(obj) === '[object Array]');\r\n};\r\n\r\n// @function indexOf(array: Array, el: Object): Number\r\n// Compatibility polyfill for [Array.prototype.indexOf](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf)\r\nexport function indexOf(array, el) {\r\n\tfor (var i = 0; i < array.length; i++) {\r\n\t\tif (array[i] === el) { return i; }\r\n\t}\r\n\treturn -1;\r\n}\r\n\r\n// @property emptyImageUrl: String\r\n// Data URI string containing a base64-encoded empty GIF image.\r\n// Used as a hack to free memory from unused images on WebKit-powered\r\n// mobile devices (by setting image `src` to this string).\r\nexport var emptyImageUrl = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';\r\n\r\n// inspired by http://paulirish.com/2011/requestanimationframe-for-smart-animating/\r\n\r\nfunction getPrefixed(name) {\r\n\treturn window['webkit' + name] || window['moz' + name] || window['ms' + name];\r\n}\r\n\r\nvar lastTime = 0;\r\n\r\n// fallback for IE 7-8\r\nfunction timeoutDefer(fn) {\r\n\tvar time = +new Date(),\r\n\t timeToCall = Math.max(0, 16 - (time - lastTime));\r\n\r\n\tlastTime = time + timeToCall;\r\n\treturn window.setTimeout(fn, timeToCall);\r\n}\r\n\r\nexport var requestFn = window.requestAnimationFrame || getPrefixed('RequestAnimationFrame') || timeoutDefer;\r\nexport var cancelFn = window.cancelAnimationFrame || getPrefixed('CancelAnimationFrame') ||\r\n\t\tgetPrefixed('CancelRequestAnimationFrame') || function (id) { window.clearTimeout(id); };\r\n\r\n// @function requestAnimFrame(fn: Function, context?: Object, immediate?: Boolean): Number\r\n// Schedules `fn` to be executed when the browser repaints. `fn` is bound to\r\n// `context` if given. When `immediate` is set, `fn` is called immediately if\r\n// the browser doesn't have native support for\r\n// [`window.requestAnimationFrame`](https://developer.mozilla.org/docs/Web/API/window/requestAnimationFrame),\r\n// otherwise it's delayed. Returns a request ID that can be used to cancel the request.\r\nexport function requestAnimFrame(fn, context, immediate) {\r\n\tif (immediate && requestFn === timeoutDefer) {\r\n\t\tfn.call(context);\r\n\t} else {\r\n\t\treturn requestFn.call(window, bind(fn, context));\r\n\t}\r\n}\r\n\r\n// @function cancelAnimFrame(id: Number): undefined\r\n// Cancels a previous `requestAnimFrame`. See also [window.cancelAnimationFrame](https://developer.mozilla.org/docs/Web/API/window/cancelAnimationFrame).\r\nexport function cancelAnimFrame(id) {\r\n\tif (id) {\r\n\t\tcancelFn.call(window, id);\r\n\t}\r\n}\r\n\r\nexport function array_equals(a, b)\r\n{\r\n return a.length === b.length && a.every(function(value, index) {\r\n return value === b[index];\r\n });\r\n}\r\n\r\nexport function getArrayDimensions(arr)\r\n{\r\n if (/*!(arr instanceof Array) || */!arr.length) {\r\n return []; // current array has no dimension\r\n }\r\n var dim = arr.reduce(function(result, current) {\r\n // check each element of arr against the first element\r\n // to make sure it has the same dimensions\r\n return array_equals(result, getArrayDimensions(current)) ? result : false;\r\n }, getArrayDimensions(arr[0]));\r\n\r\n // dim is either false or an array\r\n return dim && [arr.length].concat(dim);\r\n}\r\n\r\nexport function findIndex(array, item) {\r\n\treturn array.findIndex( x => item.equals(x));\r\n}\r\nexport function scaleToZoomLevel(scale) {\r\n\tconst scales = [\r\n\t\t591657550.500000,\r\n\t\t295828775.300000,\r\n\t\t147914387.600000,\r\n\t\t73957193.820000,\r\n\t\t36978596.910000,\r\n\t\t18489298.450000,\r\n\t\t9244649.227000,\r\n\t\t4622324.614000,\r\n\t\t2311162.307000,\r\n\t\t1155581.153000,\r\n\t\t577790.576700,\r\n\t\t288895.288400,\r\n\t\t144447.644200,\r\n\t\t72223.822090,\r\n\t\t36111.911040,\r\n\t\t18055.955520,\r\n\t\t9027.977761,\r\n\t\t4513.988880,\r\n\t\t2256.994440,\r\n\t\t1128.497220,\r\n\t\t564.24861,\r\n\t\t282.124305];\r\n\r\n\t/* From ESRI\r\n\t22 : ‭282.124305‬\r\n\t21 : ‭564.24861‬\r\n\t20 : 1128.497220\r\n\t19 : 2256.994440\r\n\t18 : 4513.988880\r\n\t17 : 9027.977761\r\n\t16 : 18055.955520\r\n\t15 : 36111.911040\r\n\t14 : 72223.822090\r\n\t13 : 144447.644200\r\n\t12 : 288895.288400\r\n\t11 : 577790.576700\r\n\t10 : 1155581.153000\r\n\t9 : 2311162.307000\r\n\t8 : 4622324.614000\r\n\t7 : 9244649.227000\r\n\t6 : 18489298.450000\r\n\t5 : 36978596.910000\r\n\t4 : 73957193.820000\r\n\t3 : 147914387.600000\r\n\t2 : 295828775.300000\r\n\t1 : 591657550.500000\r\n\t*/\r\n\r\n\tvar zoom = scales.length;\r\n\tfor (var i = scales.length - 1; i >= 0; i--) {\r\n\t\tif (scales[i] > scale) {\r\n\t\t\tzoom = Number(i + 1);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\treturn zoom;\r\n}\r\n\r\nexport function zoomLevelToScale(zoom) {\r\n\tconst scales = [\r\n\t\t591657550.500000,\r\n\t\t295828775.300000,\r\n\t\t147914387.600000,\r\n\t\t73957193.820000,\r\n\t\t36978596.910000,\r\n\t\t18489298.450000,\r\n\t\t9244649.227000,\r\n\t\t4622324.614000,\r\n\t\t2311162.307000,\r\n\t\t1155581.153000,\r\n\t\t577790.576700,\r\n\t\t288895.288400,\r\n\t\t144447.644200,\r\n\t\t72223.822090,\r\n\t\t36111.911040,\r\n\t\t18055.955520,\r\n\t\t9027.977761,\r\n\t\t4513.988880,\r\n\t\t2256.994440,\r\n\t\t1128.497220];\r\n\r\n if (zoom < 1) {\r\n return 591657550.500000;\r\n\t}\r\n else if (zoom > 20) {\r\n\t\treturn 1128.497220;\r\n\t}\r\n\telse {\r\n\t\treturn scales[zoom-1];\r\n\t}\r\n\t\r\n}\r\n\r\nexport function scaleFromLatLngZoom(latLng, zoom) {\r\n\t//return 156543.03392 * Math.cos(latLng.lat * Math.PI / 180) / Math.pow(2, zoom)\r\n return 591657550.500000 / Math.pow(2, zoom-1);\r\n}\r\n\r\nexport function mergeOptions(options1, options2) {\r\n\tlet options = {};\r\n\t\r\n\tfor (let i in options1) {\r\n\t\toptions[i] = options1[i];\r\n\t}\r\n\t\r\n\tfor (let i in options2) {\r\n\t\toptions[i] = options2[i];\r\n\t}\r\n\r\n\treturn options;\r\n}","import {Earth} from './CRS.Earth';\r\nimport {Mercator} from '../projection/Projection.Mercator';\r\nimport {toTransformation} from '../../geometry/Transformation';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.EPSG3395\r\n *\r\n * Rarely used by some commercial tile providers. Uses Elliptical Mercator projection.\r\n */\r\nexport var EPSG3395 = Util.extend({}, Earth, {\r\n\tcode: 'EPSG:3395',\r\n\tprojection: Mercator,\r\n\r\n\ttransformation: (function () {\r\n\t\tvar scale = 0.5 / (Math.PI * Mercator.R);\r\n\t\treturn toTransformation(scale, 0.5, -scale, 0.5);\r\n\t}())\r\n});\r\n","import {LatLng} from '../LatLng';\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {Point} from '../../geometry/Point';\r\n\r\n/*\r\n * @namespace Projection\r\n * @section\r\n * Leaflet comes with a set of already defined Projections out of the box:\r\n *\r\n * @projection L.Projection.LonLat\r\n *\r\n * Equirectangular, or Plate Carree projection — the most simple projection,\r\n * mostly used by GIS enthusiasts. Directly maps `x` as longitude, and `y` as\r\n * latitude. Also suitable for flat worlds, e.g. game maps. Used by the\r\n * `EPSG:4326` and `Simple` CRS.\r\n */\r\n\r\nexport var LonLat = {\r\n\tproject: function (latlng) {\r\n\t\treturn new Point(latlng.lng, latlng.lat);\r\n\t},\r\n\r\n\tunproject: function (point) {\r\n\t\treturn new LatLng(point.y, point.x);\r\n\t},\r\n\r\n\tbounds: new Bounds([-180, -90], [180, 90])\r\n};\r\n","import {LatLng} from '../LatLng';\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {Point} from '../../geometry/Point';\r\n\r\n/*\r\n * @namespace Projection\r\n * @projection L.Projection.Mercator\r\n *\r\n * Elliptical Mercator projection — more complex than Spherical Mercator. Assumes that Earth is an ellipsoid. Used by the EPSG:3395 CRS.\r\n */\r\n\r\nexport var Mercator = {\r\n\tR: 6378137,\r\n\tR_MINOR: 6356752.314245179,\r\n\r\n\tbounds: new Bounds([-20037508.34279, -15496570.73972], [20037508.34279, 18764656.23138]),\r\n\r\n\tproject: function (latlng) {\r\n\t\tvar d = Math.PI / 180,\r\n\t\t r = this.R,\r\n\t\t y = latlng.lat * d,\r\n\t\t tmp = this.R_MINOR / r,\r\n\t\t e = Math.sqrt(1 - tmp * tmp),\r\n\t\t con = e * Math.sin(y);\r\n\r\n\t\tvar ts = Math.tan(Math.PI / 4 - y / 2) / Math.pow((1 - con) / (1 + con), e / 2);\r\n\t\ty = -r * Math.log(Math.max(ts, 1E-10));\r\n\r\n\t\treturn new Point(latlng.lng * d * r, y);\r\n\t},\r\n\r\n\tunproject: function (point) {\r\n\t\tvar d = 180 / Math.PI,\r\n\t\t r = this.R,\r\n\t\t tmp = this.R_MINOR / r,\r\n\t\t e = Math.sqrt(1 - tmp * tmp),\r\n\t\t ts = Math.exp(-point.y / r),\r\n\t\t phi = Math.PI / 2 - 2 * Math.atan(ts);\r\n\r\n\t\tfor (var i = 0, dphi = 0.1, con; i < 15 && Math.abs(dphi) > 1e-7; i++) {\r\n\t\t\tcon = e * Math.sin(phi);\r\n\t\t\tcon = Math.pow((1 - con) / (1 + con), e / 2);\r\n\t\t\tdphi = Math.PI / 2 - 2 * Math.atan(ts * con) - phi;\r\n\t\t\tphi += dphi;\r\n\t\t}\r\n\r\n\t\treturn new LatLng(phi * d, point.x * d / r);\r\n\t}\r\n};\r\n","import {Earth} from './CRS.Earth';\r\nimport {LonLat} from '../projection/Projection.LonLat';\r\nimport {toTransformation} from '../../geometry/Transformation';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.EPSG4326\r\n *\r\n * A common CRS among GIS enthusiasts. Uses simple Equirectangular projection.\r\n *\r\n * Leaflet 1.0.x complies with the [TMS coordinate scheme for EPSG:4326](https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification#global-geodetic),\r\n * which is a breaking change from 0.7.x behaviour. If you are using a `TileLayer`\r\n * with this CRS, ensure that there are two 256x256 pixel tiles covering the\r\n * whole earth at zoom level zero, and that the tile coordinate origin is (-180,+90),\r\n * or (-180,-90) for `TileLayer`s with [the `tms` option](#tilelayer-tms) set.\r\n */\r\n\r\nexport var EPSG4326 = Util.extend({}, Earth, {\r\n\tcode: 'EPSG:4326',\r\n\tprojection: LonLat,\r\n\ttransformation: toTransformation(1 / 180, 1, -1 / 180, 0.5)\r\n});\r\n","import {CRS} from './CRS';\nimport {LonLat} from '../projection/Projection.LonLat';\nimport {toTransformation} from '../../geometry/Transformation';\nimport * as Util from '../../core/Util';\n\n/*\n * @namespace CRS\n * @crs L.CRS.Simple\n *\n * A simple CRS that maps longitude and latitude into `x` and `y` directly.\n * May be used for maps of flat surfaces (e.g. game maps). Note that the `y`\n * axis should still be inverted (going from bottom to top). `distance()` returns\n * simple euclidean distance.\n */\n\nexport var Simple = Util.extend({}, CRS, {\n\tprojection: LonLat,\n\ttransformation: toTransformation(1, 0, -1, 0),\n\n\tscale: function (zoom) {\n\t\treturn Math.pow(2, zoom);\n\t},\n\n\tzoom: function (scale) {\n\t\treturn Math.log(scale) / Math.LN2;\n\t},\n\n\tdistance: function (latlng1, latlng2) {\n\t\tvar dx = latlng2.lng - latlng1.lng,\n\t\t dy = latlng2.lat - latlng1.lat;\n\n\t\treturn Math.sqrt(dx * dx + dy * dy);\n\t},\n\n\tinfinite: true\n});\n","import {CRS} from './CRS';\nimport {Earth} from './CRS.Earth';\nimport {EPSG3395} from './CRS.EPSG3395';\nimport {EPSG3857, EPSG900913} from './CRS.EPSG3857';\nimport {EPSG4326} from './CRS.EPSG4326';\nimport {Simple} from './CRS.Simple';\n\nCRS.Earth = Earth;\nCRS.EPSG3395 = EPSG3395;\nCRS.EPSG3857 = EPSG3857;\nCRS.EPSG900913 = EPSG900913;\nCRS.EPSG4326 = EPSG4326;\nCRS.Simple = Simple;\n\nexport {CRS};\n","// to suit your point format, run search/replace for '.x' and '.y';\r\n// for 3D version, see 3d branch (configurability would draw significant performance overhead)\r\n\r\nexport class Simplify {\r\n // square distance between 2 points\r\n static getSqDist(p1, p2) {\r\n\r\n var dx = p1.x - p2.x,\r\n dy = p1.y - p2.y;\r\n\r\n return dx * dx + dy * dy;\r\n }\r\n\r\n // square distance from a point to a segment\r\n static getSqSegDist(p, p1, p2) {\r\n\r\n var x = p1.x,\r\n y = p1.y,\r\n dx = p2.x - x,\r\n dy = p2.y - y;\r\n\r\n if (dx !== 0 || dy !== 0) {\r\n\r\n var t = ((p.x - x) * dx + (p.y - y) * dy) / (dx * dx + dy * dy);\r\n\r\n if (t > 1) {\r\n x = p2.x;\r\n y = p2.y;\r\n\r\n } else if (t > 0) {\r\n x += dx * t;\r\n y += dy * t;\r\n }\r\n }\r\n\r\n dx = p.x - x;\r\n dy = p.y - y;\r\n\r\n return dx * dx + dy * dy;\r\n }\r\n // rest of the code doesn't care about point format\r\n\r\n // basic distance-based simplification\r\n static simplifyRadialDist(points, sqTolerance) {\r\n\r\n var prevPoint = points.x,\r\n newPoints = [prevPoint],\r\n point;\r\n\r\n for (var i = 1, len = points.length; i < len; i++) {\r\n point = points[i];\r\n\r\n if (Simplify.getSqDist(point, prevPoint) > sqTolerance) {\r\n newPoints.push(point);\r\n prevPoint = point;\r\n }\r\n }\r\n\r\n if (prevPoint !== point) newPoints.push(point);\r\n\r\n return newPoints;\r\n }\r\n\r\n static simplifyDPStep(points, first, last, sqTolerance, simplified) {\r\n var maxSqDist = sqTolerance,\r\n index;\r\n\r\n for (var i = first + 1; i < last; i++) {\r\n var sqDist = Simplify.getSqSegDist(points[i], points[first], points[last]);\r\n\r\n if (sqDist > maxSqDist) {\r\n index = i;\r\n maxSqDist = sqDist;\r\n }\r\n }\r\n\r\n if (maxSqDist > sqTolerance) {\r\n if (index - first > 1) Simplify.simplifyDPStep(points, first, index, sqTolerance, simplified);\r\n simplified.push(points[index]);\r\n if (last - index > 1) Simplify.simplifyDPStep(points, index, last, sqTolerance, simplified);\r\n }\r\n }\r\n\r\n // simplification using Ramer-Douglas-Peucker algorithm\r\n static simplifyDouglasPeucker(points, sqTolerance) {\r\n var last = points.length - 1;\r\n\r\n var simplified = [points.x];\r\n Simplify.simplifyDPStep(points, 0, last, sqTolerance, simplified);\r\n simplified.push(points[last]);\r\n\r\n return simplified;\r\n }\r\n\r\n // both algorithms combined for awesome performance\r\n static simplify(points, tolerance, highestQuality) {\r\n\r\n if (points.length <= 2) return points;\r\n\r\n var sqTolerance = tolerance !== undefined ? tolerance * tolerance : 1;\r\n\r\n points = highestQuality ? points : Simplify.simplifyRadialDist(points, sqTolerance);\r\n points = Simplify.simplifyDouglasPeucker(points, sqTolerance);\r\n\r\n return points;\r\n }\r\n}","import {Bounds, toBounds} from './Bounds';\r\nimport {LatLng} from './LatLng';\r\nimport {Envelope} from './Envelope';\r\n\r\n\r\nexport class Node {\r\n constructor(feature, bounds, next) {\r\n this.Feature = feature;\r\n this.Bounds = bounds;\r\n this.Next = next;\r\n }\r\n}\r\n\r\nexport class QuadTree\r\n{\r\n constructor(bounds)\r\n {\r\n this._bounds = bounds;\r\n this._node = null;\r\n this._count = 0;\r\n\r\n this._topLeft = null;\r\n this._topRight = null;\r\n this._bottomLeft = null;\r\n this._bottomRight = null;\r\n }\r\n \r\n clear()\r\n {\r\n this._node = null;\r\n this._count = 0;\r\n\r\n this._topLeft = null;\r\n this._topRight = null;\r\n this._bottomLeft = null;\r\n this._bottomRight = null;\r\n }\r\n\r\n // @region Properties\r\n get Bounds() {\r\n return this._bounds; \r\n }\r\n\r\n get Node() {\r\n return this._node; \r\n }\r\n\r\n get Count() {\r\n return this._count; \r\n }\r\n // @endregion Properties\r\n\r\n // @region Methods \r\n /// \r\n /// Insert the given node.\r\n /// \r\n /// The wrapped node.\r\n /// The bounds of that node.\r\n /// The priority of that node.\r\n /// The recursive depth of this call, to avoid stack overflows.\r\n /// The quadrant that ultimately holds the node. \r\n insertFeature(feature, rcFeature, depth)\r\n {\r\n var child = null;\r\n\r\n // Only drill down the tree for positive sized bounds, otherwise we could drill forever.\r\n // Todo: We can remove this restriction if we choose to only split quads when \"full\".\r\n if (depth <= QuadTree.MaxTreeDepth && (rcFeature.Width > 0 || rcFeature.Height > 0))\r\n {\r\n let xMid = (this._bounds.MinX + this._bounds.MaxX) / 2.0;\r\n let yMid = (this._bounds.MinY + this._bounds.MaxY) / 2.0;\r\n\r\n let topLeft = this.toEnvelopeFromRect(this._bounds.MinX, this._bounds.MinY, xMid, yMid);\r\n let topRight = this.toEnvelopeFromRect(xMid, this._bounds.MinY, this._bounds.MaxX, yMid);\r\n let bottomLeft = this.toEnvelopeFromRect(this._bounds.MinX, yMid, xMid, this._bounds.MaxY);\r\n let bottomRight = this.toEnvelopeFromRect(xMid, yMid, this._bounds.MaxX, this._bounds.MaxY);\r\n\r\n // See if any child quadrants completely contain this node.\r\n if (topLeft.contains(rcFeature))\r\n {\r\n if (this._topLeft == null)\r\n this._topLeft = new QuadTree(topLeft);\r\n\r\n child = this._topLeft;\r\n }\r\n else if (topRight.contains(rcFeature))\r\n {\r\n if (this._topRight == null)\r\n this._topRight = new QuadTree(topRight);\r\n\r\n child = this._topRight;\r\n }\r\n else if (bottomLeft.contains(rcFeature))\r\n {\r\n if (this._bottomLeft == null)\r\n this._bottomLeft = new QuadTree(bottomLeft);\r\n\r\n child = this._bottomLeft;\r\n }\r\n else if (bottomRight.contains(rcFeature))\r\n {\r\n if (this._bottomRight == null)\r\n this._bottomRight = new QuadTree(bottomRight);\r\n\r\n child = this._bottomRight;\r\n }\r\n }\r\n\r\n if (child != null)\r\n child.insertFeature(feature, rcFeature, depth + 1);\r\n else\r\n this._node = new Node(feature, rcFeature, this._node);\r\n\r\n this._count++;\r\n }\r\n\r\n toBoundsFromRect(x1, y1, x2, y2) {\r\n return new Bounds(new LatLng(y1, x1), new LatLng(y2, x2))\r\n }\r\n\r\n toEnvelopeFromRect(x1, y1, x2, y2) {\r\n return new Envelope(x1, y1, x2, y2);\r\n }\r\n /// \r\n /// Returns all nodes in this quadrant that intersect the given bounds.\r\n /// The nodes are returned in order of descending priority.\r\n /// \r\n /// The bounds that intersects the nodes you want returned.\r\n /// A lazy list of nodes along with the new potential of this quadrant.\r\n getIntersectingFeatures(features, extents)\r\n {\r\n // add our features first\r\n var node = this._node;\r\n\r\n while (node != null) {\r\n if (node.Bounds.intersects(extents))\r\n features.push(node.Feature);\r\n\r\n node = node.Next;\r\n }\r\n\r\n // add features from the quadrants\r\n\r\n if (this._topLeft != null && this._topLeft.Bounds.intersects(extents))\r\n this._topLeft.getIntersectingFeatures(features, extents);\r\n\r\n if (this._topRight != null && this._topRight.Bounds.intersects(extents))\r\n this._topRight.getIntersectingFeatures(features, extents);\r\n\r\n if (this._bottomLeft != null && this._bottomLeft.Bounds.intersects(extents))\r\n this._bottomLeft.getIntersectingFeatures(features, extents);\r\n\r\n if (this._bottomRight != null && this._bottomRight.Bounds.intersects(extents))\r\n this._bottomRight.getIntersectingFeatures(features, extents);\r\n }\r\n\r\n /// \r\n /// Return true if there are any nodes in this QuadTree that intersect the given bounds.\r\n /// \r\n /// The bounds to test\r\n /// true if this quadrant or its subquadrants has nodes intersecting the bounds; otherwise, false.\r\n hasIntersectingFeatures(extents) {\r\n // check our nodes first\r\n var node = this._node;\r\n\r\n while (node != null) {\r\n if (node.Bounds.Intersects(extents))\r\n return true;\r\n\r\n node = node.Next;\r\n }\r\n \r\n // now check our quadrants\r\n if (this._topLeft != null && this._topLeft.Bounds.intersects(extents) && this._topLeft.hasIntersectingFeatures(extents))\r\n return true;\r\n\r\n if (this._topRight != null && this._topRight.Bounds.intersects(extents) && this._topRight.hasIntersectingFeatures(extents))\r\n return true;\r\n\r\n if (this._bottomLeft != null && this._bottomLeft.Bounds.intersects(extents) && this._bottomLeft.hasIntersectingFeatures(extents))\r\n return true;\r\n\r\n if (this._bottomRight != null && this._bottomRight.Bounds.intersects(extents) && this._bottomRight.hasIntersectingFeatures(extents))\r\n return true;\r\n\r\n return false;\r\n }\r\n\r\n // @endregion\r\n}\r\n\r\nQuadTree.MaxTreeDepth = 50;\r\n","export {LatLng, toLatLng as latLng} from './LatLng';\r\nexport {LatLngBounds, toLatLngBounds as latLngBounds} from './LatLngBounds';\r\n\r\nimport * as Projection from './projection/index';\r\nexport {Projection};\r\n\r\nexport * from './crs/index';\r\n\r\nexport {Point, toPoint as point} from './Point';\r\nexport {Bounds, toBounds as bounds} from './Bounds';\r\nexport {Transformation, toTransformation as transformation} from './Transformation';\r\n\r\nimport * as LineUtil from './LineUtil';\r\nexport {LineUtil};\r\n\r\nimport * as PolyUtil from './PolyUtil';\r\nexport {PolyUtil};\r\n\r\nexport * from './Envelope';\r\nexport * from './simplify';\r\nexport * from './rectangle';\r\nexport * from './QuadTree';","import {Class} from './Class';\n\n/*\n\tL.Handler is a base class for handler classes that are used internally to inject\n\tinteraction features like dragging to classes like Map and Marker.\n*/\n\n// @class Handler\n// @aka L.Handler\n// Abstract class for map interaction handlers\n\nexport class Handler extends Class {\n\tconstructor () {\n\t\tsuper();\n\t}\n\n\t// @method enable(): this\n\t// Enables the handler\n\tenable() {\n\t\tif (this._enabled) { return this; }\n\n\t\tthis._enabled = true;\n\t\tthis.addHooks();\n\t\treturn this;\n\t}\n\n\t// @method disable(): this\n\t// Disables the handler\n\tdisable() {\n\t\tif (!this._enabled) { return this; }\n\n\t\tthis._enabled = false;\n\t\tthis.removeHooks();\n\t\treturn this;\n\t}\n\n\t// @method enabled(): Boolean\n\t// Returns `true` if the handler is enabled\n\tenabled() {\n\t\treturn !!this._enabled;\n\t}\n\n\t// @section Extension methods\n\t// Classes inheriting from `Handler` must implement the two following methods:\n\t// @method addHooks()\n\t// Called when the handler is enabled, should add event hooks.\n\t// @method removeHooks()\n\t// Called when the handler is disabled, should remove the event hooks added previously.\n}\n\n// @section There is static function which can be called without instantiating L.Handler:\n// @function addTo(map: Map, name: String): this\n// Adds a new Handler to the given map with the given name.\nHandler.addTo = function (map, name) {\n\tmap.addHandler(name, this);\n\treturn this;\n};\n","import * as Browser from './Browser';\nexport {Browser};\n\nexport {Handler} from './Handler';\n\nimport * as Util from './Util';\nexport {Util};\nexport {extend, bind, stamp, setOptions} from './Util';\n\nimport * as Events from './Events';\nexport {Events};\n\n\nimport * as Class from './Class';\nexport {Class};\n","import {LatLng, toLatLng} from './LatLng';\r\nimport {toLatLngBounds, LatLngBounds} from './LatLngBounds'\r\nimport { Coordinate } from '../geometries';\r\n/*\r\n* var corner1 = L.latLng(40.712, -74.227),\r\n * corner2 = L.latLng(40.774, -74.125),\r\n * bounds = L.latLngBounds(corner1, corner2);\r\n * Caution: if the area crosses the antimeridian (often confused with the International Date Line), you must specify corners _outside_ the [-180, 180] degrees longitude range.\r\n *\r\n * Note that `LatLngBounds` does not inherit from Leafet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport class Envelope {\r\n constructor(x1, x2, y1, y2) {\r\n\t\tif (x1 < x2) {\r\n\t\t\tthis._minX = x1;\r\n\t\t\tthis._maxX = x2;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis._minX = x2;\r\n\t\t\tthis._maxX = x1;\r\n\t\t}\r\n\r\n\t\tif (y1 < y2) {\r\n\t\t\tthis._minY = y1;\r\n\t\t\tthis._maxY = y2;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis._minY = y2;\r\n\t\t\tthis._maxY = y1;\r\n\t\t}\r\n\r\n const sw = new LatLng(this._maxY, this._minX);\r\n const ne = new LatLng(this._minY, this._maxX);\r\n\r\n if (!sw) { return; }\r\n\r\n var latlngs = ne ? [sw, ne] : sw;\r\n\r\n for (var i = 0, len = latlngs.length; i < len; i++) {\r\n this.extend(latlngs[i]);\r\n }\r\n }\r\n\r\n\t// @method extend(latlng: LatLng): this\r\n\t// Extend the bounds to contain the given point\r\n\r\n\t// @alternative\r\n\t// @method extend(otherBounds: LatLngBounds): this\r\n\t// Extend the bounds to contain the given bounds\r\n\textend(obj) {\r\n\t\tvar sw = this._southWest,\r\n\t\t ne = this._northEast,\r\n\t\t sw2, ne2;\r\n\r\n\t\tif (obj instanceof Coordinate) {\r\n\t\t\tsw2 = new LatLng(obj.Y, obj.X);\r\n\t\t\tne2 = sw2;\r\n\t\t}\r\n\t\tif (obj instanceof LatLng) {\r\n\t\t\tsw2 = obj;\r\n\t\t\tne2 = obj;\r\n\t\t} \r\n\t\telse if (obj instanceof LatLngBounds) {\r\n\t\t\tsw2 = obj._southWest;\r\n\t\t\tne2 = obj._northEast;\r\n\r\n\t\t\tif (!sw2 || !ne2) { return this; }\r\n\t\t} \r\n\t\telse if (obj instanceof Envelope) {\r\n\t\t\tsw2 = obj._southWest;\r\n\t\t\tne2 = obj._northEast;\r\n\r\n\t\t\tif (!sw2 || !ne2) { return this; }\t\r\n\t\t} \r\n\t\telse {\r\n\t\t\treturn obj ? this.extend(toLatLng(obj) || toLatLngBounds(obj)) : this;\r\n\t\t}\r\n\r\n\t\tif (!sw && !ne) {\r\n\t\t\tthis._southWest = new LatLng(sw2.lat, sw2.lng);\r\n\t\t\tthis._northEast = new LatLng(ne2.lat, ne2.lng);\r\n\t\t} \r\n\t\telse {\r\n\t\t\tsw.lat = Math.min(sw2.lat, sw.lat);\r\n\t\t\tsw.lng = Math.min(sw2.lng, sw.lng);\r\n\t\t\tne.lat = Math.max(ne2.lat, ne.lat);\r\n\t\t\tne.lng = Math.max(ne2.lng, ne.lng);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t// @method pad(bufferRatio: Number): LatLngBounds\r\n\t// Returns bounds created by extending or retracting the current bounds by a given ratio in each direction.\r\n\t// For example, a ratio of 0.5 extends the bounds by 50% in each direction.\r\n\t// Negative values will retract the bounds.\r\n\tpad(bufferRatio) {\r\n\t\tvar sw = this._southWest,\r\n\t\t ne = this._northEast,\r\n\t\t heightBuffer = Math.abs(sw.lat - ne.lat) * bufferRatio,\r\n\t\t widthBuffer = Math.abs(sw.lng - ne.lng) * bufferRatio;\r\n\r\n\t\treturn new LatLngBounds(\r\n\t\t new LatLng(sw.lat - heightBuffer, sw.lng - widthBuffer),\r\n\t\t new LatLng(ne.lat + heightBuffer, ne.lng + widthBuffer));\r\n\t}\r\n\r\n\t// @method getCenter(): LatLng\r\n\t// Returns the center point of the bounds.\r\n\tget Center() {\r\n\t\treturn new LatLng(\r\n\t\t (this._southWest.lat + this._northEast.lat) / 2,\r\n\t\t (this._southWest.lng + this._northEast.lng) / 2);\r\n\t}\r\n\r\n\t// @method SouthWest: LatLng\r\n\t// Returns the south-west point of the bounds.\r\n\tget SouthWest() {\r\n\t\treturn this._southWest;\r\n\t}\r\n\r\n\t// @method NorthEast: LatLng\r\n\t// Returns the north-east point of the bounds.\r\n\tget NorthEast() {\r\n\t\treturn this._northEast;\r\n\t}\r\n\r\n\t// @method getNorthWest(): LatLng\r\n\t// Returns the north-west point of the bounds.\r\n\tget NorthWest() {\r\n\t\treturn new LatLng(this.North, this.West);\r\n\t}\r\n\r\n\t// @method getSouthEast(): LatLng\r\n\t// Returns the south-east point of the bounds.\r\n\tget SouthEast() {\r\n\t\treturn new LatLng(this.South, this.East);\r\n\t}\r\n\r\n\t// @method getWest(): Number\r\n\t// Returns the west longitude of the bounds\r\n\tget West() {\r\n\t\treturn this._southWest.lng;\r\n\t}\r\n\r\n\t// @method getSouth(): Number\r\n\t// Returns the south latitude of the bounds\r\n\tget South() {\r\n\t\treturn this._southWest.lat;\r\n\t}\r\n\r\n\t// @method getEast(): Number\r\n\t// Returns the east longitude of the bounds\r\n\tget East() {\r\n\t\treturn this._northEast.lng;\r\n\t}\r\n\r\n\t// @method getNorth(): Number\r\n\t// Returns the north latitude of the bounds\r\n\tget North() {\r\n\t\treturn this._northEast.lat;\r\n\t}\r\n\r\n\t// @method contains(otherBounds: LatLngBounds): Boolean\r\n\t// Returns `true` if the rectangle contains the given one.\r\n\r\n\t// @alternative\r\n\t// @method contains (latlng: LatLng): Boolean\r\n\t// Returns `true` if the rectangle contains the given point.\r\n\tcontains(obj) { // (LatLngBounds) or (LatLng) -> Boolean\r\n\t\tif (typeof obj[0] === 'number' || obj instanceof LatLng || 'lat' in obj) {\r\n\t\t\tobj = toLatLng(obj);\r\n\t\t} \r\n\t\telse if (!(obj instanceof Envelope)) {\r\n\t\t\tobj = toLatLngBounds(obj);\r\n\t\t}\r\n\r\n\t\tvar sw = this._southWest,\r\n\t\t ne = this._northEast,\r\n\t\t sw2, ne2;\r\n\r\n\t\tif (obj instanceof LatLngBounds) {\r\n\t\t\tsw2 = obj.SouthWest;\r\n\t\t\tne2 = obj.NorthEast;\r\n\t\t}\r\n\t\telse if (obj instanceof Envelope) {\r\n\t\t\tsw2 = obj._southWest;\r\n\t\t\tne2 = obj._northEast;\r\n\t\t} \r\n\t\telse {\r\n\t\t\tsw2 = ne2 = obj;\r\n\t\t}\r\n\r\n\t\treturn (sw2.lat >= sw.lat) && (ne2.lat <= ne.lat) &&\r\n\t\t (sw2.lng >= sw.lng) && (ne2.lng <= ne.lng);\r\n\t}\r\n\r\n\t// @method intersects(otherBounds: LatLngBounds): Boolean\r\n\t// Returns `true` if the rectangle intersects the given bounds. Two bounds intersect if they have at least one point in common.\r\n\tintersects(bounds) {\r\n\t\t//bounds = toLatLngBounds(bounds);\r\n\r\n\t\tvar sw = this._southWest,\r\n\t\t ne = this._northEast,\r\n\t\t sw2 = bounds.SouthWest,\r\n\t\t ne2 = bounds.NorthEast,\r\n\r\n\t\t latIntersects = (ne2.lat >= sw.lat) && (sw2.lat <= ne.lat),\r\n\t\t lngIntersects = (ne2.lng >= sw.lng) && (sw2.lng <= ne.lng);\r\n\r\n\t\treturn latIntersects && lngIntersects;\r\n\t}\r\n\r\n\t// @method overlaps(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle overlaps the given bounds. Two bounds overlap if their intersection is an area.\r\n\toverlaps(bounds) {\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tvar sw = this._southWest,\r\n\t\t ne = this._northEast,\r\n\t\t sw2 = bounds.SouthWest,\r\n\t\t ne2 = bounds.NorthEast,\r\n\r\n\t\t latOverlaps = (ne2.lat > sw.lat) && (sw2.lat < ne.lat),\r\n\t\t lngOverlaps = (ne2.lng > sw.lng) && (sw2.lng < ne.lng);\r\n\r\n\t\treturn latOverlaps && lngOverlaps;\r\n\t}\r\n\r\n\t// @method toBBoxString(): String\r\n\t// Returns a string with bounding box coordinates in a 'southwest_lng,southwest_lat,northeast_lng,northeast_lat' format. Useful for sending requests to web services that return geo data.\r\n\ttoBBoxString() {\r\n\t\treturn [this.West, this.South, this.East, this.North].join(',');\r\n\t}\r\n\r\n\t// @method equals(otherBounds: LatLngBounds, maxMargin?: Number): Boolean\r\n\t// Returns `true` if the rectangle is equivalent (within a small margin of error) to the given bounds. The margin of error can be overridden by setting `maxMargin` to a small number.\r\n\tequals(bounds, maxMargin) {\r\n\t\tif (!bounds) { return false; }\r\n\r\n\t\tif (!(bounds instanceof Envelope))\r\n\t\t bounds = toLatLngBounds(bounds);\r\n\r\n\t\treturn this._southWest.equals(bounds.SouthWest, maxMargin) &&\r\n\t\t this._northEast.equals(bounds.NorthEast, maxMargin);\r\n\t}\r\n\r\n\t// @method isValid(): Boolean\r\n\t// Returns `true` if the bounds are properly initialized.\r\n\tget isValid() {\r\n\t\treturn !!(this._southWest && this._northEast);\r\n\t}\r\n\r\n\t// @method MinX(): Number\r\n\t// Returns the leftmost part of the bounding box.\r\n\tget MinX() {\r\n\t\treturn this._minX;\r\n\t}\r\n\r\n\tset MinX(value) {\r\n\t\tthis._minX = value;\r\n\t}\r\n\t// @method MinX(): Number\r\n\t// Returns the rightmost part of the bounding box.\r\n\tget MaxX() {\r\n\t\treturn this._maxX;\r\n\t}\r\n\r\n\tset MaxX(value) {\r\n\t\tthis._maxX = value;\r\n\t}\r\n\t// @method MinY(): Number\r\n\t// Returns the upper right of the bounding box.\r\n\tget MinY() {\r\n\t\treturn this._minY;\r\n\t}\r\n\r\n\tset MinY(value) {\r\n\t\tthis._minY = value;\r\n\t}\r\n\r\n\t// @method MaxY(): Number\r\n\t// Returns the bottom right of the bounding box.\r\n\tget MaxY() {\r\n\t\treturn this._maxY;\r\n\t}\r\n\r\n\tset MaxY(value) {\r\n\t\tthis._maxY = value;\r\n\t}\r\n\r\n\tget Width() {\r\n\t\treturn this._maxX - this._minX;\r\n\t}\r\n\r\n\tget Height() {\r\n\t\treturn this._maxY - this._minY;\r\n\t}\r\n}","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","import * as Util from './Util';\r\n\r\n/*\r\n * @namespace Browser\r\n * @aka L.Browser\r\n *\r\n * A namespace with static properties for browser/feature detection used by Leaflet internally.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * if (L.Browser.ielt9) {\r\n * alert('Upgrade your browser, dude!');\r\n * }\r\n * ```\r\n */\r\n\r\nvar style = document.documentElement.style;\r\n\r\n// @property ie: Boolean; `true` for all Internet Explorer versions (not Edge).\r\nexport var ie = 'ActiveXObject' in window;\r\n\r\n// @property ielt9: Boolean; `true` for Internet Explorer versions less than 9.\r\nexport var ielt9 = ie && !document.addEventListener;\r\n\r\n// @property edge: Boolean; `true` for the Edge web browser.\r\nexport var edge = 'msLaunchUri' in navigator && !('documentMode' in document);\r\n\r\n// @property webkit: Boolean;\r\n// `true` for webkit-based browsers like Chrome and Safari (including mobile versions).\r\nexport var webkit = userAgentContains('webkit');\r\n\r\n// @property android: Boolean\r\n// `true` for any browser running on an Android platform.\r\nexport var android = userAgentContains('android');\r\n\r\n// @property android23: Boolean; `true` for browsers running on Android 2 or Android 3.\r\nexport var android23 = userAgentContains('android 2') || userAgentContains('android 3');\r\n\r\n/* See https://stackoverflow.com/a/17961266 for details on detecting stock Android */\r\nvar webkitVer = parseInt(/WebKit\\/([0-9]+)|$/.exec(navigator.userAgent)[1], 10); // also matches AppleWebKit\r\n// @property androidStock: Boolean; `true` for the Android stock browser (i.e. not Chrome)\r\nexport var androidStock = android && userAgentContains('Google') && webkitVer < 537 && !('AudioNode' in window);\r\n\r\n// @property opera: Boolean; `true` for the Opera browser\r\nexport var opera = !!window.opera;\r\n\r\n// @property chrome: Boolean; `true` for the Chrome browser.\r\nexport var chrome = userAgentContains('chrome');\r\n\r\n// @property gecko: Boolean; `true` for gecko-based browsers like Firefox.\r\nexport var gecko = userAgentContains('gecko') && !webkit && !opera && !ie;\r\n\r\n// @property safari: Boolean; `true` for the Safari browser.\r\nexport var safari = !chrome && userAgentContains('safari');\r\n\r\nexport var phantom = userAgentContains('phantom');\r\n\r\n// @property opera12: Boolean\r\n// `true` for the Opera browser supporting CSS transforms (version 12 or later).\r\nexport var opera12 = 'OTransition' in style;\r\n\r\n// @property win: Boolean; `true` when the browser is running in a Windows platform\r\nexport var win = navigator.platform.indexOf('Win') === 0;\r\n\r\n// @property ie3d: Boolean; `true` for all Internet Explorer versions supporting CSS transforms.\r\nexport var ie3d = ie && ('transition' in style);\r\n\r\n// @property webkit3d: Boolean; `true` for webkit-based browsers supporting CSS transforms.\r\nexport var webkit3d = ('WebKitCSSMatrix' in window) && ('m11' in new window.WebKitCSSMatrix()) && !android23;\r\n\r\n// @property gecko3d: Boolean; `true` for gecko-based browsers supporting CSS transforms.\r\nexport var gecko3d = 'MozPerspective' in style;\r\n\r\n// @property any3d: Boolean\r\n// `true` for all browsers supporting CSS transforms.\r\nexport var any3d = !window.L_DISABLE_3D && (ie3d || webkit3d || gecko3d) && !opera12 && !phantom;\r\n\r\n// @property mobile: Boolean; `true` for all browsers running in a mobile device.\r\nexport var mobile = typeof orientation !== 'undefined' || userAgentContains('mobile');\r\n\r\n// @property mobileWebkit: Boolean; `true` for all webkit-based browsers in a mobile device.\r\nexport var mobileWebkit = mobile && webkit;\r\n\r\n// @property mobileWebkit3d: Boolean\r\n// `true` for all webkit-based browsers in a mobile device supporting CSS transforms.\r\nexport var mobileWebkit3d = mobile && webkit3d;\r\n\r\n// @property msPointer: Boolean\r\n// `true` for browsers implementing the Microsoft touch events model (notably IE10).\r\nexport var msPointer = !window.PointerEvent && window.MSPointerEvent;\r\n\r\n// @property pointer: Boolean\r\n// `true` for all browsers supporting [pointer events](https://msdn.microsoft.com/en-us/library/dn433244%28v=vs.85%29.aspx).\r\nexport var pointer = !!(window.PointerEvent || msPointer);\r\n\r\n// @property touch: Boolean\r\n// `true` for all browsers supporting [touch events](https://developer.mozilla.org/docs/Web/API/Touch_events).\r\n// This does not necessarily mean that the browser is running in a computer with\r\n// a touchscreen, it only means that the browser is capable of understanding\r\n// touch events.\r\nexport var touch = !window.L_NO_TOUCH && (pointer || 'ontouchstart' in window ||\r\n\t\t(window.DocumentTouch && document instanceof window.DocumentTouch));\r\n\r\n// @property mobileOpera: Boolean; `true` for the Opera browser in a mobile device.\r\nexport var mobileOpera = mobile && opera;\r\n\r\n// @property mobileGecko: Boolean\r\n// `true` for gecko-based browsers running in a mobile device.\r\nexport var mobileGecko = mobile && gecko;\r\n\r\n// @property retina: Boolean\r\n// `true` for browsers on a high-resolution \"retina\" screen or on any screen when browser's display zoom is more than 100%.\r\nexport var retina = (window.devicePixelRatio || (window.screen.deviceXDPI / window.screen.logicalXDPI)) > 1;\r\n\r\n// @property passiveEvents: Boolean\r\n// `true` for browsers that support passive events.\r\nexport var passiveEvents = (function () {\r\n\tvar supportsPassiveOption = false;\r\n\ttry {\r\n\t\tvar opts = Object.defineProperty({}, 'passive', {\r\n\t\t\tget: function () {\r\n\t\t\t\tsupportsPassiveOption = true;\r\n\t\t\t}\r\n\t\t});\r\n\t\twindow.addEventListener('testPassiveEventSupport', Util.falseFn, opts);\r\n\t\twindow.removeEventListener('testPassiveEventSupport', Util.falseFn, opts);\r\n\t} catch (e) {\r\n\t\t// Errors can safely be ignored since this is only a browser support test.\r\n\t}\r\n\treturn supportsPassiveOption;\r\n});\r\n\r\n// @property canvas: Boolean\r\n// `true` when the browser supports [``](https://developer.mozilla.org/docs/Web/API/Canvas_API).\r\nexport var canvas = (function () {\r\n\treturn !!document.createElement('canvas').getContext;\r\n}());\r\n\r\n// @property svg: Boolean\r\n// `true` when the browser supports [SVG](https://developer.mozilla.org/docs/Web/SVG).\r\n// export var svg = !!(document.createElementNS && svgCreate('svg').createSVGRect);\r\n\r\n// @property vml: Boolean\r\n// `true` if the browser supports [VML](https://en.wikipedia.org/wiki/Vector_Markup_Language).\r\n// \r\n// export var vml = !svg && (function () {\r\n// \ttry {\r\n// \t\tvar div = document.createElement('div');\r\n// \t\tdiv.innerHTML = '';\r\n// \r\n// \t\tvar shape = div.firstChild;\r\n// \t\tshape.style.behavior = 'url(#default#VML)';\r\n// \r\n// \t\treturn shape && (typeof shape.adj === 'object');\r\n// \r\n// \t} catch (e) {\r\n// \t\treturn false;\r\n// \t}\r\n// }());\r\n\r\nfunction userAgentContains(str) {\r\n\treturn navigator.userAgent.toLowerCase().indexOf(str) >= 0;\r\n}\r\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","import {Point, toPoint} from './Point';\r\n\r\n/*\r\n * @class Bounds\r\n * @aka L.Bounds\r\n *\r\n * Represents a rectangular area in pixel coordinates.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var p1 = L.point(10, 10),\r\n * p2 = L.point(40, 60),\r\n * bounds = L.bounds(p1, p2);\r\n * ```\r\n *\r\n * All Leaflet methods that accept `Bounds` objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:\r\n *\r\n * ```js\r\n * otherBounds.intersects([[10, 10], [40, 60]]);\r\n * ```\r\n *\r\n * Note that `Bounds` does not inherit from Leafet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport class Bounds {\r\n constructor(a, b) {\r\n\t if (!a) { return; }\r\n\r\n\t var points = b ? [a, b] : a;\r\n\r\n\t for (var i = 0, len = points.length; i < len; i++) {\r\n\t\t this.extend(points[i]);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nBounds.prototype = {\r\n\t// @method extend(point: Point): this\r\n\t// Extends the bounds to contain the given point.\r\n\textend: function (point) { // (Point)\r\n\t\tpoint = toPoint(point);\r\n\r\n\t\t// @property min: Point\r\n\t\t// The top left corner of the rectangle.\r\n\t\t// @property max: Point\r\n\t\t// The bottom right corner of the rectangle.\r\n\t\tif (!this.min && !this.max) {\r\n\t\t\tthis.min = point.clone();\r\n\t\t\tthis.max = point.clone();\r\n\t\t} else {\r\n\t\t\tthis.min.x = Math.min(point.x, this.min.x);\r\n\t\t\tthis.max.x = Math.max(point.x, this.max.x);\r\n\t\t\tthis.min.y = Math.min(point.y, this.min.y);\r\n\t\t\tthis.max.y = Math.max(point.y, this.max.y);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getCenter(round?: Boolean): Point\r\n\t// Returns the center point of the bounds.\r\n\tgetCenter: function (round) {\r\n\t\treturn new Point(\r\n\t\t (this.min.x + this.max.x) / 2,\r\n\t\t (this.min.y + this.max.y) / 2, round);\r\n\t},\r\n\r\n\t// @method getBottomLeft(): Point\r\n\t// Returns the bottom-left point of the bounds.\r\n\tgetBottomLeft: function () {\r\n\t\treturn new Point(this.min.x, this.max.y);\r\n\t},\r\n\r\n\t// @method getTopRight(): Point\r\n\t// Returns the top-right point of the bounds.\r\n\tgetTopRight: function () { // -> Point\r\n\t\treturn new Point(this.max.x, this.min.y);\r\n\t},\r\n\r\n\t// @method getTopLeft(): Point\r\n\t// Returns the top-left point of the bounds (i.e. [`this.min`](#bounds-min)).\r\n\tgetTopLeft: function () {\r\n\t\treturn this.min; // left, top\r\n\t},\r\n\r\n\t// @method getBottomRight(): Point\r\n\t// Returns the bottom-right point of the bounds (i.e. [`this.max`](#bounds-max)).\r\n\tgetBottomRight: function () {\r\n\t\treturn this.max; // right, bottom\r\n\t},\r\n\r\n\t// @method getSize(): Point\r\n\t// Returns the size of the given bounds\r\n\tgetSize: function () {\r\n\t\treturn this.max.subtract(this.min);\r\n\t},\r\n\r\n\t// @method contains(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle contains the given one.\r\n\t// @alternative\r\n\t// @method contains(point: Point): Boolean\r\n\t// Returns `true` if the rectangle contains the given point.\r\n\tcontains: function (obj) {\r\n\t\tvar min, max;\r\n\r\n\t\tif (typeof obj[0] === 'number' || obj.x != null || obj instanceof Point) {\r\n\t\t\tobj = toPoint(obj);\r\n\t\t} else {\r\n\t\t\tobj = toBounds(obj);\r\n\t\t}\r\n\r\n\t\tif (obj instanceof Bounds) {\r\n\t\t\tmin = obj.min;\r\n\t\t\tmax = obj.max;\r\n\t\t} else {\r\n\t\t\tmin = max = obj;\r\n\t\t}\r\n\r\n\t\treturn (min.x >= this.min.x) &&\r\n\t\t (max.x <= this.max.x) &&\r\n\t\t (min.y >= this.min.y) &&\r\n\t\t (max.y <= this.max.y);\r\n\t},\r\n\r\n\t// @method intersects(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle intersects the given bounds. Two bounds\r\n\t// intersect if they have at least one point in common.\r\n\tintersects: function (bounds) { // (Bounds) -> Boolean\r\n\t\tbounds = toBounds(bounds);\r\n\r\n\t\tvar min = this.min,\r\n\t\t max = this.max,\r\n\t\t min2 = bounds.min,\r\n\t\t max2 = bounds.max,\r\n\t\t xIntersects = (max2.x >= min.x) && (min2.x <= max.x),\r\n\t\t yIntersects = (max2.y >= min.y) && (min2.y <= max.y);\r\n\r\n\t\treturn xIntersects && yIntersects;\r\n\t},\r\n\r\n\t// @method overlaps(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle overlaps the given bounds. Two bounds\r\n\t// overlap if their intersection is an area.\r\n\toverlaps: function (bounds) { // (Bounds) -> Boolean\r\n\t\tbounds = toBounds(bounds);\r\n\r\n\t\tvar min = this.min,\r\n\t\t max = this.max,\r\n\t\t min2 = bounds.min,\r\n\t\t max2 = bounds.max,\r\n\t\t xOverlaps = (max2.x > min.x) && (min2.x < max.x),\r\n\t\t yOverlaps = (max2.y > min.y) && (min2.y < max.y);\r\n\r\n\t\treturn xOverlaps && yOverlaps;\r\n\t},\r\n\r\n\tisValid: function () {\r\n\t\treturn !!(this.min && this.max);\r\n\t},\r\n\r\n\tget MinX() {\r\n\t\treturn this.min.x;\r\n\t},\r\n\r\n\tget MinY() {\r\n\t\treturn this.min.y;\r\n\t},\r\n\r\n\tget MaxX() {\r\n\t\treturn this.max.x;\r\n\t},\r\n\r\n\tget MaxY() {\r\n\t\treturn this.max.y;\r\n\t},\r\n\r\n\tget Width() {\r\n\t\treturn this.max.x - this.min.x;\r\n\t},\r\n\r\n\tget Height() {\r\n\t\treturn this.max.y - this.min.y;\r\n\t},\r\n\r\n\tset MinX(value) {\r\n\t\tthis.min.x = value;\r\n\t},\r\n\r\n\tset MinY(value) {\r\n\t\treturn this.min.y = value;\r\n\t},\r\n\r\n\tset MaxX(value) {\r\n\t\tthis.max.x = value;\r\n\t},\r\n\r\n\tset MaxY(value) {\r\n\t\tthis.max.y = value;\r\n\t}\r\n};\r\n\r\n\r\n// @factory L.bounds(corner1: Point, corner2: Point)\r\n// Creates a Bounds object from two corners coordinate pairs.\r\n// @alternative\r\n// @factory L.bounds(points: Point[])\r\n// Creates a Bounds object from the given array of points.\r\nexport function toBounds(a, b) {\r\n\tif (!a || a instanceof Bounds) {\r\n\t\treturn a;\r\n\t}\r\n\treturn new Bounds(a, b);\r\n}\r\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","import {centroid} from './centroid';\r\nimport {Geometry} from './geometry';\r\nimport { Point } from '../geometry';\r\nimport MapEnums from '../map/enums';\r\n\r\nexport class GeoPoint extends Geometry {\r\n constructor(coordinate) {\r\n super([coordinate]);\r\n this.point = coordinate; \r\n this.points = [];\r\n }\r\n\r\n get GeometryType() { \r\n return MapEnums.GeometryTypes.POINT;\r\n }\r\n\r\n get Coordinate() { \r\n return this.point; \r\n }\r\n\r\n \r\n get NumPoints() { \r\n return this.point != null ? 1 : 0; \r\n }\r\n\r\n get NumGeometries() { \r\n return 1; \r\n }\r\n\r\n GetGeometryN(n) {\r\n return this;\r\n }\r\n \r\n get IsEmpty() { this.point != null ? false : true; }\r\n\r\n get Bounds() {\r\n if (this._bounds == null)\r\n this._bounds = this.calculateBounds([this.point]);\r\n\r\n return this._bounds; \r\n }\r\n\r\n set Bounds(value) {\r\n this._bounds = value;\r\n }\r\n \r\n worldToClient(viewport) {\r\n this.points = [];\r\n this.points.push(viewport.worldToClient(this.point.X, this.point.Y)); \r\n \r\n return this.points;\r\n }\r\n\r\n setWorldToClient(viewport, points) { \r\n this.points = points; \r\n }\r\n \r\n draw(canvas, opacity, symbol, fill, context) { \r\n \r\n if (this.points.length > 0) {\r\n let pt = this.points[0];\r\n\r\n let offsetX = symbol.NormalSymbol.width / 2;\r\n let offsetY = symbol.NormalSymbol.height / 2;\r\n canvas.drawSymbol(symbol.NormalSymbol, pt.x - offsetX, pt.y - offsetY, context);\r\n //this.drawText(new Point(pt.x - offsetX, pt.y - offsetY), canvas, offsetX, offsetY, context);\r\n } \r\n }\r\n\r\n drawHover(canvas, opacity, symbol, fill, context) {\r\n context.globalCompositeOperation = 'source-over';\r\n\r\n if (this.points.length > 0) {\r\n let pt = this.points[0];\r\n\r\n let offsetX = symbol.NormalSymbol.width / 2;\r\n let offsetY = symbol.NormalSymbol.height / 2;\r\n canvas.drawSymbol(symbol.HoverSymbol, pt.x - symbol.HoverSymbol.width / 2, pt.y - symbol.HoverSymbol.height / 2, context);\r\n //this.drawText(new Point(pt.x - offsetX, pt.y - offsetY), canvas, offsetX, offsetY, context);\r\n }\r\n } \r\n\r\n drawSelected(canvas, opacity, symbol, fill, context) {\r\n context.globalCompositeOperation = 'source-over';\r\n\r\n if (this.points.length > 0) {\r\n let pt = this.points[0];\r\n\r\n let offsetX = symbol.NormalSymbol.width / 2;\r\n let offsetY = symbol.NormalSymbol.height / 2;\r\n canvas.drawSymbol(symbol.SelectedSymbol, pt.x - symbol.SelectedSymbol.width / 2, pt.y - symbol.SelectedSymbol.height / 2, context);\r\n //this.drawText(new Point(pt.x - offsetX, pt.y - offsetY), canvas, offsetX, offsetY, context);\r\n }\r\n }\r\n\r\n hitTest(x, y, shape) {\r\n if (shape != null) {\r\n return shape.hitTest(x, y);\r\n }\r\n else {\r\n if (this.points.length > 0) {\r\n var a = this.points[0].x - x;\r\n var b = this.points[0].y - y;\r\n var c = Math.sqrt( a*a + b*b );\r\n\r\n return c <= 16 ? true : false;\r\n }\r\n else\r\n return false;\r\n }\r\n }\r\n\r\n isVisible(viewport) {\r\n if (this.points.length > 0) {\r\n return viewport.Client.contains(this.points[0]); \r\n }\r\n else\r\n return false; \r\n }\r\n\r\n intersects(bounds) {\r\n if (this.points.length > 0) {\r\n return bounds.contains( this.points[0]); \r\n }\r\n else\r\n return false; \r\n }\r\n}","import {centroid} from './centroid';\r\nimport {Geometry} from './geometry';\r\nimport { Point } from '../geometry';\r\nimport {MapPrimitive} from '../drawing/mapprimitive';\r\nimport MapEnums from '../map/enums';\r\n\r\nexport class GeoLineString extends Geometry {\r\n constructor(coordinates) {\r\n super(coordinates);\r\n this.points = [];\r\n }\r\n\r\n get GeometryType() { \r\n return MapEnums.GeometryTypes.LINESTRING;\r\n }\r\n\r\n get Coordinate() { \r\n return this._coordinates.length > 0 ? this._coordinates[0] : null; \r\n }\r\n\r\n \r\n get NumPoints() { \r\n return this._coordinates.length; \r\n }\r\n\r\n get NumGeometries() { \r\n return 1; \r\n }\r\n\r\n GetGeometryN(n) {\r\n return this;\r\n }\r\n \r\n get IsEmpty() { this.points.length > 0 ? false : true; }\r\n\r\n get Bounds() {\r\n if (this._bounds == null)\r\n this._bounds = this.calculateBounds(this.Coordinates);\r\n\r\n return this._bounds; \r\n }\r\n\r\n set Bounds(value) {\r\n this._bounds = value;\r\n }\r\n \r\n worldToClient(viewport) {\r\n this.points = [];\r\n for (var i = 0; i < this._coordinates.length; i++) {\r\n let pt = this._coordinates[i]; \r\n this.points.push(viewport.worldToClient(pt.X, pt.Y)); \r\n } \r\n \r\n this.points = MapPrimitive.ClipLineStringRect(this.points, viewport.Client);\r\n return this.points;\r\n } \r\n\r\n setWorldToClient(viewport, points) { \r\n //this.points = MapPrimitive.ClipLineStringRect(points, viewport.Client); \r\n this.points = points;\r\n }\r\n\r\n draw(canvas, opacity, stroke, fill, context) {\r\n if (this.points && this.points.length > 0) {\r\n canvas.drawLine(this.points, stroke, opacity, context); \r\n }\r\n } \r\n\r\n hitTest(x, y) {\r\n if (this.points != null) {\r\n let testPoint = new Point(x,y);\r\n for (var i = 0; i < this.points.length-1; i++) {\r\n let start = this.points[i]; \r\n let end = this.points[i+1];\r\n\r\n if (this.isPointOnSegment(testPoint, start, end))\r\n return true;\r\n }\r\n } \r\n\r\n return false;\r\n }\r\n\r\n isPointOnSegment(point, A, B) {\r\n let d1 = this.distance(point, A);\r\n let d2 = this.distance(point, B);\r\n let lineDistance = this.distance(A, B);\r\n let buffer = 2; // 2 pixels\r\n\r\n if ( d1+d2 >= lineDistance-buffer && d1+d2 <= lineDistance+buffer )\r\n return true; // point is on the line.\r\n\r\n return false;\r\n }\r\n\r\n isVisible(viewport) {\r\n if (this.points.length > 0) {\r\n for (let i = 0; i < this.points.length; i++) {\r\n if (viewport.Client.contains(this.points[i]))\r\n return true;\r\n } \r\n }\r\n else\r\n return false; \r\n }\r\n\r\n intersects(bounds) {\r\n if (this.points.length > 0) {\r\n for (let i = 0; i < this.points.length; i++) {\r\n if (bounds.contains(this.points[i]))\r\n return true;\r\n } \r\n }\r\n else\r\n return false; \r\n }\r\n}","import {centroid} from './centroid';\r\nimport {Geometry, DimensionTypes} from './geometry';\r\nimport { GeoLineString } from './geolinestring';\r\nimport {MapPrimitive} from '../drawing/mapprimitive';\r\nimport MapEnums from '../map/enums';\r\n\r\nexport class GeoLinearRing extends Geometry {\r\n constructor(coordinates) {\r\n super(coordinates);\r\n this.points = [];\r\n }\r\n\r\n get GeometryType() { \r\n return MapEnums.GeometryTypes.LINEARRING;\r\n }\r\n\r\n get Coordinate() { \r\n return this._coordinates.length > 0 ? this._coordinates[0] : null; \r\n }\r\n\r\n \r\n get NumPoints() { \r\n return this._coordinates.length; \r\n }\r\n\r\n get NumGeometries() { \r\n return 1; \r\n }\r\n\r\n GetGeometryN(n) {\r\n return this;\r\n }\r\n \r\n get IsEmpty() { this.points.length > 0 ? false : true; }\r\n\r\n get Bounds() {\r\n if (this._bounds == null)\r\n this._bounds = this.calculateBounds(this.Coordinates);\r\n\r\n return this._bounds; \r\n }\r\n \r\n set Bounds(value) {\r\n this._bounds = value;\r\n }\r\n \r\n worldToClient(viewport) {\r\n this.points = [];\r\n for (var i = 0; i < this._coordinates.length; i++) {\r\n var pt = this._coordinates[i]; \r\n this.points.push(viewport.worldToClient(pt.X, pt.Y)); \r\n } \r\n \r\n this.points = MapPrimitive.ClipLineStringRect(this.points, viewport.Client);\r\n return this.points;\r\n } \r\n \r\n setWorldToClient(viewport, points) { \r\n //this.points = MapPrimitive.ClipLineStringRect(points, viewport.Client); \r\n this.points = points; \r\n }\r\n\r\n draw(canvas, opacity, stroke, fill, context) {\r\n canvas.drawLine(this.points, stroke, opacity, context); \r\n }\r\n\r\n //https://rosettacode.org/wiki/Ray-casting_algorithm \r\n /**\r\n * @return {boolean} true if (lng, lat) is in bounds\r\n */\r\n hitTest(x, y) {\r\n \r\n var count = 0;\r\n if (this.points != null) {\r\n for (var b = 0; b < this.points.length; b++) {\r\n var vertex1 = this.points[b];\r\n var vertex2 = this.points[(b + 1) % this.points.length];\r\n if (this.west(vertex1, vertex2, x, y))\r\n ++count;\r\n }\r\n }\r\n return count % 2 == 0 ? false : true; \r\n }\r\n\r\n //https://rosettacode.org/wiki/Ray-casting_algorithm \r\n /**\r\n * @return {boolean} true if (x,y) is west of the line segment connecting A and B\r\n */\r\n west(A, B, x, y) {\r\n if (A.y <= B.y) {\r\n if (y <= A.y || y > B.y || x >= A.x && x >= B.x) {\r\n return false;\r\n } \r\n else if (x < A.x && x < B.x) {\r\n return true;\r\n } \r\n else {\r\n return (y - A.y) / (x - A.x) > (B.y - A.y) / (B.x - A.x);\r\n }\r\n } \r\n else {\r\n return this.west(B, A, x, y);\r\n }\r\n }\r\n\r\n isVisible(viewport) {\r\n if (this.points.length > 0) {\r\n for (let i = 0; i < this.points.length; i++) {\r\n if (viewport.Client.contains(this.points[i]))\r\n return true;\r\n } \r\n }\r\n else\r\n return false; \r\n }\r\n\r\n intersects(bounds) {\r\n if (this.points != null && this.points.length > 0) {\r\n for (let i = 0; i < this.points.length; i++) {\r\n if (bounds.contains(this.points[i]))\r\n return true;\r\n } \r\n }\r\n else\r\n return false; \r\n }\r\n}","import {Geometry} from './geometry';\r\nimport { toPoint } from '../geometry/Point';\r\nimport MapEnums from '../map/enums';\r\n\r\nexport class GeoPolygon extends Geometry {\r\n constructor(exteriorRing, interiorRings) {\r\n super([]);\r\n this.interiorRings = [];\r\n this.exteriorRing = null;\r\n\r\n if (exteriorRing != undefined)\r\n this.exteriorRing = exteriorRing;\r\n\r\n if (interiorRings != undefined)\r\n this.interiorRings = interiorRings; \r\n }\r\n\r\n get InteriorRings() { \r\n return this.interiorRings; \r\n }\r\n\r\n get ExteriorRing() { \r\n return this.exteriorRing; \r\n }\r\n\r\n get GeometryType() { \r\n return MapEnums.GeometryTypes.POLYGON;\r\n }\r\n\r\n get Coordinate() { \r\n return this.exteriorRing != null ? this.exteriorRing.Coordinate : null; \r\n }\r\n\r\n get Coordinates() { \r\n return this.exteriorRing != null ? this.exteriorRing.Coordinates : null; \r\n }\r\n \r\n get NumPoints() { \r\n let exteriorPoints = this.exteriorRing.NumPoints();\r\n var interiorPoints = 0;\r\n this.interiorRings.forEach(element => {\r\n interiorPoints += element.NumPoints();\r\n });\r\n return exteriorPoints + interiorPoints; \r\n }\r\n\r\n get NumGeometries() { \r\n return 1; \r\n }\r\n\r\n GetGeometryN(n) {\r\n return this;\r\n }\r\n \r\n get IsEmpty() { this.exteriorRing != null ? false : true; }\r\n\r\n get Bounds() {\r\n if (this._bounds == null && this.exteriorRing != null)\r\n this._bounds = this.calculateBounds(this.exteriorRing.Coordinates);\r\n\r\n return this._bounds; \r\n }\r\n \r\n set Bounds(value) {\r\n this._bounds = value;\r\n }\r\n \r\n worldToClient(viewport) {\r\n this.points = [];\r\n\r\n if (this.exteriorRing) {\r\n var exteriorPoints = this.exteriorRing.worldToClient(viewport);\r\n this.points.push(exteriorPoints); \r\n }\r\n\r\n for (var i = 0; i < this.interiorRings.length; i++) {\r\n var interiorPoints = this.interiorRings[i].worldToClient(viewport); \r\n this.points.push(interiorPoints); \r\n } \r\n \r\n return this.points;\r\n }\r\n\r\n setWorldToClient(viewport, points) { \r\n\r\n if (points != null) {\r\n if (this.exteriorRing && points.length > 0) {\r\n this.exteriorRing.points = points[0];\r\n }\r\n\r\n for (var j = 0; j < this.interiorRings.length; j++) {\r\n this.interiorRings[j].points = points[j+1]; \r\n }\r\n this.points = points;\r\n }\r\n else {\r\n this.exteriorRing.points = [];\r\n this.points = [];\r\n } \r\n }\r\n\r\n draw(canvas, opacity, stroke, fill, context) {\r\n // first array of points is the exterior ring\r\n if (this.exteriorRing) {\r\n canvas.drawPolygon(this.exteriorRing.points, stroke, fill, opacity, context); \r\n }\r\n\r\n for (var i = 0; i < this.interiorRings.length; i++) {\r\n canvas.drawPolygon(this.interiorRings[i].points, stroke, fill, opacity, context, true);\r\n }\r\n \r\n /*\r\n if (this.points.length > 0) {\r\n canvas.drawPolygon(this.points[0], stroke, fill, opacity, context);\r\n \r\n if (this.points.length > 1) {\r\n for (var i = 1; i < this.points.length; i++) {\r\n // need to fill the holes with transparent color\r\n canvas.drawPolygon(this.points[i], stroke, fill, opacity, context, true);\r\n }\r\n } \r\n }\r\n */\r\n } \r\n\r\n hitTest(x, y) {\r\n var isInside = false;\r\n var isInsideTheHole = false;\r\n // test first if point (x,y) is inside the holes \r\n if (this.interiorRings != null) {\r\n for (var i = 0; i < this.interiorRings.length; i++) {\r\n let interior = this.interiorRings[i];\r\n if (interior != null && (isInsideTheHole = interior.hitTest(x, y)) == true)\r\n break; \r\n } \r\n }\r\n\r\n // If point is inside the holes\r\n if (!isInsideTheHole && this.exteriorRing != null) {\r\n isInside = this.exteriorRing.hitTest(x, y);\r\n }\r\n \r\n return isInside; \r\n }\r\n \r\n isVisible(viewport) {\r\n var isVisible = false;\r\n\r\n for (var i = 0; i < this.interiorRings.length; i++) {\r\n var interiorRing = this.interiorRings[i]; \r\n if ((isVisible = interiorRing.isVisible(viewport)))\r\n break;\r\n }\r\n\r\n if (!isVisible && this.exteriorRing) {\r\n isVisible = this.exteriorRing.isVisible(viewport);\r\n }\r\n \r\n return isVisible;\r\n }\r\n\r\n intersects(bounds) {\r\n var bIntersects = false;\r\n\r\n for (var i = 0; i < this.interiorRings.length; i++) {\r\n var interiorRing = this.interiorRings[i]; \r\n if ((bIntersects = interiorRing.intersects(bounds)))\r\n break;\r\n }\r\n\r\n if (!bIntersects && this.exteriorRing) {\r\n bIntersects = this.exteriorRing.intersects(bounds);\r\n }\r\n \r\n return bIntersects;\r\n }\r\n\r\n centroid() {\r\n if (this.exteriorRing) {\r\n return this.exteriorRing.centroid();\r\n }\r\n else {\r\n return toPoint(0,0);\r\n }\r\n }\r\n \r\n addGeometry(geometries) {\r\n if (this.exteriorRing != undefined)\r\n geometries.push(this.exteriorRing);\r\n\r\n if (this.interiorRings != undefined) {\r\n for (let i =0; i < this.interiorRings.length; i++) {\r\n geometries.push(this.interiorRings[i]);\r\n }\r\n }\r\n }\r\n}","import {centroid} from './centroid';\r\nimport {Geometry} from './geometry';\r\nimport MapEnums from '../map/enums';\r\n\r\nexport class GeoMultiPoint extends Geometry {\r\n constructor(points) {\r\n super([]);\r\n this.geopoints = points != null ? points : []; \r\n }\r\n\r\n get Geometries() {\r\n return this.geopoints;\r\n }\r\n\r\n get GeometryType() { \r\n return MapEnums.GeometryTypes.MULTIPOINT;\r\n }\r\n\r\n get Coordinate() { \r\n return this.points.length > 0 ? this.points[0] : null; \r\n }\r\n \r\n get NumPoints() { \r\n var numPoints = 0;\r\n this.geopoints.forEach(element => {\r\n numPoints += element.NumPoints();\r\n });\r\n\r\n return numPoints;\r\n }\r\n\r\n get NumGeometries() { \r\n return this.geopoints.length; \r\n }\r\n\r\n GetGeometryN(n) {\r\n return n < this.geopoints.length ? this.geopoints[n] : null;\r\n }\r\n \r\n get IsEmpty() {\r\n var isEmpty = true;\r\n\r\n for (var i = 0; i < this.geopoints.length; i++) {\r\n isEmpty = this.geopoints[i].IsEmpty; \r\n if (!isEmpty)\r\n break;\r\n }\r\n\r\n return isEmpty;\r\n }\r\n\r\n get Bounds() {\r\n if (this._bounds == null) {\r\n \r\n for (var i = 0; i < this.geopoints.length; i++) {\r\n let geometry = this.geopoints[i];\r\n if (geometry.Coordinate == null)\r\n continue;\r\n \r\n if (this._bounds ==null)\r\n this._bounds = this.calculateBounds([geometry.Coordinate]);\r\n else\r\n this._bounds.extend(this.calculateBounds([geometry.Coordinate])); \r\n }\r\n \r\n }\r\n return this._bounds; \r\n }\r\n\r\n set Bounds(value) {\r\n this._bounds = value;\r\n }\r\n \r\n worldToClient(viewport) {\r\n this.points = [];\r\n for (var i = 0; i < this.geopoints.length; i++) {\r\n var geopoint = this.geopoints[i]; \r\n this.points.push(viewport.worldToClient(geopoint.X, geopoint.Y));\r\n } \r\n \r\n return this.points;\r\n }\r\n\r\n setWorldToClient(viewport, points) { \r\n this.points = points; \r\n }\r\n \r\n draw(canvas, opacity, stroke, fill, context) {\r\n for (var i = 0; i < this.geopoints.length; i++) {\r\n let geopoint = this.geopoints[i]; \r\n geopoint.draw(canvas, opacity, stroke, fill, context);\r\n }\r\n \r\n }\r\n\r\n hitTest(x, y) {\r\n var isInside = false;\r\n for (var i = 0; i < this.geopoints.length; i++) {\r\n if ((isInside = this.geopoints[i].hitTest(x,y)) == true)\r\n break;\r\n }\r\n\r\n return isInside; \r\n }\r\n\r\n isVisible(viewport) {\r\n for (var i = 0; i < this.geopoints.length; i++) {\r\n let geopoint = this.geopoints[i];\r\n if (geopoint.isVisible(viewport))\r\n return true; \r\n }\r\n \r\n return false; \r\n }\r\n\r\n intersects(bounds) {\r\n for (var i = 0; i < this.geopoints.length; i++) {\r\n let geopoint = this.geopoints[i];\r\n if (geopoint.intersects(bounds))\r\n return true; \r\n }\r\n \r\n return false; \r\n }\r\n\r\n addGeometry(geometries) {\r\n for (let i = 0; i < this.geopoints.length; i++) {\r\n geometries.push(this.geopoints[i]);\r\n }\r\n }\r\n}","import {centroid} from './centroid';\r\nimport {Geometry} from './geometry';\r\nimport MapEnums from '../map/enums';\r\n\r\nexport class GeoMultiLineString extends Geometry {\r\n constructor(linestrings) {\r\n super([]);\r\n this.linestrings = linestrings != null ? linestrings : []; \r\n }\r\n\r\n get Geometries() {\r\n return this.linestrings;\r\n }\r\n\r\n get GeometryType() { \r\n return MapEnums.GeometryTypes.MULTILINESTRING;\r\n }\r\n\r\n get Coordinate() { \r\n return this.linestrings.length > 0 ? this.linestrings[0] : null; \r\n }\r\n \r\n get NumPoints() { \r\n var numPoints = 0;\r\n this.linestrings.forEach(element => {\r\n numPoints += element.NumPoints();\r\n });\r\n\r\n return numPoints;\r\n }\r\n\r\n get NumGeometries() { \r\n return this.linestrings.length; \r\n }\r\n\r\n GetGeometryN(n) {\r\n return n < this.linestrings.length ? this.linestrings[n] : null;\r\n }\r\n \r\n get IsEmpty() {\r\n var isEmpty = true;\r\n\r\n for (var i = 0; i < this.linestrings.length; i++) {\r\n isEmpty = this.linestrings[i].IsEmpty; \r\n if (!isEmpty)\r\n break;\r\n }\r\n\r\n return isEmpty;\r\n }\r\n\r\n get Bounds() {\r\n if (this._bounds == null) {\r\n \r\n for (var i = 0; i < this.linestrings.length; i++) {\r\n let geometry = this.linestrings[i];\r\n \r\n if (this._bounds ==null)\r\n this._bounds = this.calculateBounds(geometry.Coordinates);\r\n else\r\n this._bounds.extend(this.calculateBounds(geometry.Coordinates)); \r\n }\r\n \r\n }\r\n return this._bounds; \r\n }\r\n\r\n set Bounds(value) {\r\n this._bounds = value;\r\n }\r\n \r\n worldToClient(viewport) {\r\n this.points = [];\r\n\r\n for (var i = 0; i < this.linestrings.length; i++) {\r\n let linestring = this.linestrings[i]; \r\n this.points.push(linestring.worldToClient(viewport));\r\n }\r\n \r\n return this.points;\r\n /*\r\n this.points = [];\r\n for (var i = 0; i < this.linestrings.length; i++) {\r\n var linestring = this.linestrings[i]; \r\n this.points.push(linestring.worldToClient(viewport)); \r\n } \r\n \r\n return this.points;\r\n */\r\n }\r\n\r\n setWorldToClient(viewport, points) { \r\n this.points = points; \r\n }\r\n\r\n draw(canvas, opacity, stroke, fill, context) {\r\n for (var i = 0; i < this.linestrings.length; i++) {\r\n let linestring = this.linestrings[i]; \r\n linestring.draw(canvas, opacity, stroke, fill, context);\r\n } \r\n } \r\n\r\n hitTest(x, y) {\r\n var isInside = false;\r\n for (var i = 0; i < this.linestrings.length; i++) {\r\n if ((isInside = this.linestrings[i].hitTest(x,y)) == true)\r\n break;\r\n }\r\n\r\n return isInside; \r\n }\r\n\r\n isVisible(viewport) {\r\n for (var i = 0; i < this.linestrings.length; i++) {\r\n let linestring = this.linestrings[i];\r\n if (linestring.isVisible(viewport))\r\n return true; \r\n }\r\n \r\n return false; \r\n }\r\n\r\n intersects(bounds) {\r\n for (var i = 0; i < this.linestrings.length; i++) {\r\n let linestring = this.linestrings[i];\r\n if (linestring.intersects(bounds))\r\n return true; \r\n }\r\n \r\n return false; \r\n }\r\n\r\n addGeometry(geometries) {\r\n for (let i = 0; i < this.linestrings.length; i++) {\r\n geometries.push(this.linestrings[i]);\r\n }\r\n }\r\n}","import {centroid} from './centroid';\r\nimport {Geometry} from './geometry';\r\nimport MapEnums from '../map/enums';\r\n\r\nexport class GeoMultiPolygon extends Geometry {\r\n constructor(polygons) {\r\n super([]);\r\n this.polygons = polygons != null ? polygons : []; \r\n }\r\n\r\n get Geometries() {\r\n return this.polygons;\r\n }\r\n\r\n get GeometryType() { \r\n return MapEnums.GeometryTypes.MULTIPOLYGON;\r\n }\r\n\r\n get Coordinate() { \r\n return this.polygons.length > 0 ? this.polygons[0] : null; \r\n }\r\n \r\n get NumPoints() { \r\n var numPoints = 0;\r\n this.polygons.forEach(element => {\r\n numPoints += element.NumPoints();\r\n });\r\n\r\n return numPoints;\r\n }\r\n\r\n get NumGeometries() { \r\n return this.polygons.length; \r\n }\r\n\r\n GetGeometryN(n) {\r\n return n < this.polygons.length ? this.polygons[n] : null;\r\n }\r\n \r\n get IsEmpty() {\r\n var isEmpty = true;\r\n\r\n for (var i = 0; i < this.polygons.length; i++) {\r\n isEmpty = this.polygons[i].IsEmpty; \r\n if (!isEmpty)\r\n break;\r\n }\r\n\r\n return isEmpty;\r\n }\r\n\r\n get Bounds() {\r\n if (this._bounds == null) {\r\n \r\n for (var i = 0; i < this.polygons.length; i++) {\r\n let geometry = this.polygons[i];\r\n if (geometry.exteriorRing == null)\r\n continue;\r\n \r\n if (this._bounds ==null)\r\n this._bounds = this.calculateBounds(geometry.exteriorRing.Coordinates);\r\n else\r\n this._bounds.extend(this.calculateBounds(geometry.exteriorRing.Coordinates)); \r\n }\r\n \r\n }\r\n return this._bounds; \r\n }\r\n\r\n set Bounds(value) {\r\n this._bounds = value;\r\n }\r\n \r\n worldToClient(viewport) {\r\n this.points = [];\r\n\r\n for (var i = 0; i < this.polygons.length; i++) {\r\n let polygon = this.polygons[i]; \r\n this.points.push(polygon.worldToClient(viewport));\r\n }\r\n \r\n return this.points;\r\n /*\r\n this.points = [];\r\n\r\n for (var i = 0; i < this.polygons.length; i++) {\r\n let polygon = this.polygons[i];\r\n let polyPoints = [];\r\n\r\n if (polygon.exteriorRing) {\r\n polyPoints.push(polygon.exteriorRing.worldToClient(viewport));\r\n }\r\n \r\n for (var j = 0; j < polygon.interiorRings.length; j++) {\r\n var interiorRing = polygon.interiorRings[j]; \r\n polyPoints.push(interiorRing.worldToClient(viewport)); \r\n } \r\n\r\n this.points.push(polyPoints);\r\n }\r\n \r\n return this.points;\r\n */\r\n }\r\n\r\n setWorldToClient(viewport, points) { \r\n \r\n for (var i = 0; i < this.polygons.length; i++) {\r\n let polygon = this.polygons[i];\r\n \r\n if (polygon.exteriorRing) {\r\n polygon.exteriorRing.points = points[i] != null ? points[i][0] : [];\r\n }\r\n \r\n for (var j = 0; j < polygon.interiorRings.length; j++) {\r\n polygon.interiorRings[j].points = points[i][j+1]; \r\n } \r\n }\r\n\r\n this.points = points; \r\n }\r\n\r\n draw(canvas, opacity, stroke, fill, context) {\r\n for (var i = 0; i < this.polygons.length; i++) {\r\n let polygon = this.polygons[i]; \r\n polygon.draw(canvas, opacity, stroke, fill, context);\r\n }\r\n \r\n }\r\n\r\n hitTest(x, y) {\r\n var isInside = false;\r\n for (var i = 0; i < this.polygons.length; i++) {\r\n if ((isInside = this.polygons[i].hitTest(x,y)) == true)\r\n break;\r\n }\r\n\r\n return isInside; \r\n }\r\n\r\n isVisible(viewport) {\r\n for (var i = 0; i < this.polygons.length; i++) {\r\n let polygon = this.polygons[i];\r\n if (polygon.isVisible(viewport))\r\n return true; \r\n }\r\n \r\n return false; \r\n }\r\n\r\n intersects(bounds) {\r\n for (var i = 0; i < this.polygons.length; i++) {\r\n let polygon = this.polygons[i];\r\n if (polygon.intersects(bounds))\r\n return true; \r\n }\r\n \r\n return false; \r\n }\r\n\r\n addGeometry(geometries) {\r\n for (let i = 0; i < this.polygons.length; i++) {\r\n geometries.push(this.polygons[i]);\r\n }\r\n }\r\n}","import {centroid} from './centroid';\r\nimport {Geometry} from './geometry';\r\nimport { GeoPolygon } from './geopolygon';\r\nimport MapEnums from '../map/enums';\r\n\r\nexport class GeometryCollection extends Geometry {\r\n constructor(geometries) {\r\n super([]);\r\n this.geometries = geometries != null ? geometries : []; \r\n }\r\n\r\n get GeometryType() { \r\n return MapEnums.GeometryTypes.GEOMETRYCOLLECTION;\r\n }\r\n\r\n get Coordinate() { \r\n return this.geometries.length > 0 ? this.geometries[0] : null; \r\n }\r\n \r\n get NumPoints() { \r\n var numPoints = 0;\r\n this.geometries.forEach(element => {\r\n numPoints += element.NumPoints();\r\n });\r\n\r\n return numPoints;\r\n }\r\n\r\n get NumGeometries() { \r\n return this.geometries.length; \r\n }\r\n\r\n get Geometries() {\r\n return this.geometries;\r\n }\r\n\r\n GetGeometryN(n) {\r\n return n < this.geometries.length ? this.geometries[n] : null;\r\n }\r\n \r\n get IsEmpty() {\r\n var isEmpty = true;\r\n\r\n for (var i = 0; i < this.geometries.length; i++) {\r\n isEmpty = this.geometries[i].IsEmpty; \r\n if (!isEmpty)\r\n break;\r\n }\r\n\r\n return isEmpty;\r\n }\r\n\r\n worldToClient(viewport) {\r\n this.points = [];\r\n\r\n for (var i = 0; i < this.geometries.length; i++) {\r\n let geometry = this.geometries[i]; \r\n this.points.push(geometry.worldToClient(viewport));\r\n }\r\n \r\n return this.points;\r\n }\r\n\r\n setWorldToClient(viewport, points) { \r\n this.points = points; \r\n }\r\n \r\n get Bounds() {\r\n if (this._bounds == null) {\r\n \r\n for (var i = 0; i < this.geometries.length; i++) {\r\n let geometry = this.geometries[i];\r\n \r\n if (this._bounds ==null)\r\n this._bounds = geometry.Bounds;\r\n else\r\n this._bounds.extend(geometry.Bounds); \r\n }\r\n \r\n }\r\n return this._bounds; \r\n }\r\n\r\n set Bounds(value) {\r\n this._bounds = value;\r\n }\r\n \r\n draw(canvas, opacity, stroke, fill, context) {\r\n for (var i = 0; i < this.geometries.length; i++) {\r\n let geometry = this.geometries[i]; \r\n geometry.draw(canvas, opacity, stroke, fill, context);\r\n }\r\n \r\n }\r\n\r\n hitTest(x, y) {\r\n for (var i = 0; i < this.geometries.length; i++) {\r\n let geometry = this.geometries[i];\r\n if (geometry.hitTest(x,y)) {\r\n return true; \r\n }\r\n }\r\n\r\n return false; \r\n }\r\n\r\n isVisible(viewport) {\r\n for (var i = 0; i < this.geometries.length; i++) {\r\n let geometry = this.geometries[i];\r\n if (geometry.isVisible(viewport))\r\n return true; \r\n }\r\n \r\n return false; \r\n }\r\n\r\n intersects(bounds) {\r\n for (var i = 0; i < this.geometries.length; i++) {\r\n let geometry = this.geometries[i];\r\n if (geometry.intersects(bounds))\r\n return true; \r\n }\r\n \r\n return false; \r\n }\r\n\r\n addGeometry(geometries) {\r\n for (let i = 0; i < this.geometries.length; i++) {\r\n this.geometries[i].addGeometry(geometries)\r\n }\r\n }\r\n}","import {Geometry, DimensionTypes} from './geometry';\r\nimport {GeoPoint, GeoLineString, GeoLinearRing, GeoPolygon, GeoMultiPoint, GeoMultiLineString, GeoMultiPolygon, GeometryCollection} from './index';\r\nimport {Coordinate} from './coordinate';\r\n\r\n\r\nexport class WktReader\r\n{\r\n constructor(value)\r\n {\r\n this.wktTypes = ['POINT', 'LINESTRING', 'LINEARRING', 'POLYGON', 'MULTIPOINT', 'MULTILINESTRING', 'MULTIPOLYGON', 'GEOMETRYCOLLECTION'];\r\n this.value = value;\r\n this.position = 0; \r\n this.geometry = undefined;\r\n this.length = this.value.length;\r\n }\r\n\r\n static parseWKT(value) {\r\n let reader = new WktReader(value);\r\n return reader.Read();\r\n }\r\n \r\n\r\n Read()\r\n {\r\n var geometryType = this.MatchType();\r\n var dimension = this.MatchDimension();\r\n\r\n var geometry = this.CreateGeometry(geometryType, dimension);\r\n\r\n if (this.IsEmpty())\r\n return geometry;\r\n\r\n return this.ReadGeometry(geometryType, dimension);\r\n }\r\n\r\n ReadType(defaultType, defaultDimension, types) {\r\n var geometryType = this.MatchTypeOrDefault(defaultType, types);\r\n var dimension = this.MatchDimension(defaultDimension);\r\n\r\n var geometry = this.CreateGeometry(geometryType, dimension);\r\n\r\n if (this.IsEmpty())\r\n return geometry;\r\n\r\n return this.Read(geometryType, dimension);\r\n }\r\n\r\n ReadGeometry(geometryType, dimension) {\r\n switch (geometryType)\r\n {\r\n case 'POINT': return this.ReadPoint(dimension);\r\n case 'LINESTRING': return this.ReadLineString(dimension);\r\n case 'POLYGON': return this.ReadPolygon(dimension);\r\n case 'MULTIPOINT': return this.ReadMultiPoint(dimension);\r\n case 'MULTILINESTRING': return this.ReadMultiLineString(dimension);\r\n case 'MULTIPOLYGON': return this.ReadMultiPolygon(dimension);\r\n case 'GEOMETRYCOLLECTION': return this.ReadGeometryCollection(dimension);\r\n default: throw new (geometryType);\r\n }\r\n }\r\n\r\n CreateGeometry(geometryType, dimension)\r\n {\r\n var geometry = null;\r\n\r\n switch (geometryType)\r\n {\r\n case 'POINT': geometry = new GeoPoint(); break;\r\n case 'LINESTRING': geometry = new GeoLineString(); break;\r\n case 'POLYGON': geometry = new GeoPolygon(); break;\r\n case 'MULTIPOINT': geometry = new GeoMultiPoint(); break;\r\n case 'MULTILINESTRING': geometry = new GeoMultiLineString(); break;\r\n case 'MULTIPOLYGON': geometry = new GeoMultiPolygon(); break;\r\n case 'GEOMETRYCOLLECTION': geometry = new GeometryCollection(); break;\r\n default: throw new Error(geometryType);\r\n }\r\n\r\n geometry.Dimension = dimension;\r\n return geometry;\r\n }\r\n\r\n ReadPoint(dimension)\r\n {\r\n this.ExpectGroupStart();\r\n var point = new GeoPoint(this.MatchCoordinate(dimension));\r\n point.Dimension = dimension;\r\n this.ExpectGroupEnd();\r\n\r\n return point;\r\n }\r\n\r\n ReadLineString(dimension)\r\n {\r\n this.ExpectGroupStart();\r\n var lineString = new GeoLineString(this.MatchCoordinates(dimension));\r\n lineString.Dimension = dimension;\r\n this.ExpectGroupEnd();\r\n\r\n return lineString;\r\n }\r\n\r\n ReadPolygon(dimension)\r\n {\r\n this.ExpectGroupStart();\r\n\r\n this.ExpectGroupStart();\r\n var polygon = new GeoPolygon(new GeoLinearRing(this.MatchCoordinates(dimension)));\r\n polygon.Dimension = dimension;\r\n this.ExpectGroupEnd();\r\n\r\n while (this.IsMatch(\",\"))\r\n {\r\n this.ExpectGroupStart();\r\n polygon.InteriorRings.push(new GeoLinearRing(this.MatchCoordinates(dimension)));\r\n this.ExpectGroupEnd();\r\n }\r\n\r\n this.ExpectGroupEnd();\r\n return polygon;\r\n }\r\n\r\n ReadMultiPoint(dimension)\r\n {\r\n this.ExpectGroupStart();\r\n var multiPoint = new GeoMultiPoint(this.MatchCoordinates(dimension));\r\n multiPoint.Dimension = dimension;\r\n this.ExpectGroupEnd();\r\n\r\n return multiPoint;\r\n }\r\n\r\n ReadMultiLineString(dimension)\r\n {\r\n var multiLineString = new GeoMultiLineString();\r\n multiLineString.Dimension = dimension;\r\n\r\n this.ExpectGroupStart();\r\n\r\n do {\r\n multiLineString.Geometries.push(this.ReadLineString(dimension));\r\n } while (this.IsMatch(\",\"));\r\n\r\n this.ExpectGroupEnd();\r\n\r\n return multiLineString;\r\n }\r\n\r\n ReadMultiPolygon(dimension)\r\n {\r\n var multiPolygon = new GeoMultiPolygon();\r\n multiPolygon.Dimension = dimension;\r\n\r\n this.ExpectGroupStart();\r\n\r\n do {\r\n var geometry = this.CreateGeometry('POLYGON', dimension);\r\n\r\n if (this.IsEmpty())\r\n multiPolygon.Geometries.push(geometry);\r\n else \r\n multiPolygon.Geometries.push(this.ReadPolygon(dimension));\r\n } while (this.IsMatch(\",\"));\r\n\r\n this.ExpectGroupEnd();\r\n\r\n return multiPolygon;\r\n }\r\n\r\n ReadGeometryCollection(dimension)\r\n {\r\n var geometryCollection = new GeometryCollection();\r\n geometryCollection.Dimension = dimension;\r\n\r\n this.ExpectGroupStart();\r\n\r\n do {\r\n geometryCollection.Geometries.push(this.Read());\r\n } while (this.IsMatch(\",\"));\r\n\r\n this.ExpectGroupEnd();\r\n\r\n return geometryCollection;\r\n }\r\n \r\n MatchType() {\r\n var geometryType = this.Match(this.wktTypes);\r\n\r\n if (geometryType == null)\r\n throw new Error(\"Expected geometry type\");\r\n\r\n return geometryType;\r\n }\r\n\r\n MatchTypeOrDefault(defaultType, types) {\r\n var geometryType = this.Match(types);\r\n\r\n if (geometryType == null)\r\n return defaultType;\r\n\r\n return geometryType;\r\n }\r\n\r\n MatchDimension(defaultDimension) {\r\n let dimensionMatch = this.Match([\"ZM\", \"Z\", \"M\"]);\r\n\r\n if (dimensionMatch == null)\r\n return defaultDimension != null ? defaultDimension : DimensionTypes.Xy;\r\n\r\n switch (dimensionMatch)\r\n {\r\n case \"Z\": return DimensionTypes.Xyz;\r\n case \"M\": return DimensionTypes.Xym;\r\n case \"ZM\": return DimensionTypes.Xyzm;\r\n default: throw new Error(dimensionMatch);\r\n }\r\n }\r\n\r\n ExpectGroupStart() {\r\n if (!this.IsMatch(\"(\")) {\r\n console.log(this.value);\r\n throw new Error(\"Expected group start\");\r\n }\r\n }\r\n\r\n ExpectGroupEnd() {\r\n if (!this.IsMatch(\")\"))\r\n throw new Error(\"Expected group end\");\r\n }\r\n\r\n MatchCoordinate(dimension) {\r\n var coordinateValue = this.Peek([',', ')']);\r\n\r\n if (coordinateValue == undefined)\r\n throw new Error(\"Expected coordinates\");\r\n\r\n var coordinates = coordinateValue.split(' ');\r\n\r\n switch (coordinates.length)\r\n {\r\n case 2: return new Coordinate(parseFloat(coordinates[0]), parseFloat(coordinates[1]));\r\n case 3: return new Coordinate(parseFloat(coordinates[0]), parseFloat(coordinates[1]), parseFloat(coordinates[2])); \r\n case 4: dimension = Dimension.Xyzm; return new Coordinate(parseFloat(coordinates[0]), parseFloat(coordinates[1]), parseFloat(coordinates[2]));\r\n default: throw new Error(\"Expected coordinates\");\r\n }\r\n }\r\n\r\n MatchCoordinates(dimension) {\r\n var coordinates = [];\r\n\r\n do {\r\n var startsWithBracket = this.IsMatch(\"(\");\r\n coordinates.push(this.MatchCoordinate(dimension));\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\n IsEmpty() {\r\n return this.IsMatch([\"EMPTY\"]);\r\n }\r\n\r\n SkipWhitespaces() { \r\n while (this.position < this.value.length && this.IsWhiteSpace(this.value[this.position]))\r\n this.position++;\r\n }\r\n\r\n IsWhiteSpace(c) {\r\n return c == ' ' || c == '\\n' || c == '\\n';\r\n }\r\n \r\n Match(tokens) {\r\n this.SkipWhitespaces();\r\n\r\n for (var i = 0; i < tokens.length; i++) {\r\n if (this.value.indexOf(tokens[i], this.position) == this.position)\r\n {\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\n Peek(tokens) {\r\n this.SkipWhitespaces();\r\n\r\n let tokenPosition = this.position;\r\n var foundToken = false;\r\n\r\n do {\r\n for (let i = 0; i < tokens.length; i++)\r\n {\r\n if (tokenPosition + 1 < this.value.length && this.value[tokenPosition + 1] == tokens[i]) {\r\n foundToken = true;\r\n break;\r\n }\r\n }\r\n\r\n tokenPosition++;\r\n } while (!foundToken && tokenPosition < this.value.length);\r\n\r\n var peekValue = this.value.substr(this.position, tokenPosition - this.position);\r\n this.position = tokenPosition;\r\n return peekValue;\r\n }\r\n\r\n MatchRegex(tokens) {\r\n this.SkipWhitespaces();\r\n\r\n var subValue = this.value.substr(this.position);\r\n\r\n for (let i = 0; i < tokens.length; i++) {\r\n let match = Regex.Match(subValue, tokens[i]);\r\n\r\n if (match != null) {\r\n this.position += match.length;\r\n return match;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n IsMatch(tokens) {\r\n this.SkipWhitespaces();\r\n\r\n for (let i = 0; i < tokens.length; i++) {\r\n if (this.position + tokens[i].length <= this.value.length && this.value.substr(this.position, tokens[i].length) == tokens[i]) {\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\n","export * from './centroid';\r\nexport * from './coordinate';\r\nexport * from './geometry';\r\nexport * from './geopoint';\r\nexport * from './geolinestring';\r\nexport * from './geolinearring';\r\nexport * from './geopolygon';\r\nexport * from './geomultipoint';\r\nexport * from './geomultilinestring';\r\nexport * from './geomultipolygon';\r\nexport * from './geometrycollection';\r\nexport * from './WktReader';\r\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","\r\nimport {Tile, LoadStates} from './tile';\r\nimport {Envelope} from '../geometry/Envelope';\r\nimport {Bounds, Point} from '../geometry/index';\r\nimport { Util } from '../core';\r\n\r\nconst MaxCachedTiles = 100;\r\n \r\nexport class TileSource{\r\n // @section Constructors \r\n constructor(map){\r\n this.map = map;\r\n this.pendingTiles = [];\r\n this.dctTiles = new Object();\r\n this.unused = [];\r\n this.cReferences = 0;\r\n this.longitudeResolutions = new Array(this.NumberOfResolutions);\r\n this.latitudeResolutions = new Array(this.NumberOfResolutions);\r\n this.googleResolutions = new Array(this.NumberOfResolutions);\r\n\r\n for (let index = 0, pixels = this.ImageSize; index < this.NumberOfResolutions; index++)\r\n {\r\n this.longitudeResolutions[index] = TileSource.LatLongExtents.Width / pixels;\r\n this.latitudeResolutions[index] = TileSource.LatLongExtents.Height / pixels;\r\n this.googleResolutions[index] = TileSource.GoogleExtents.Width / pixels;\r\n pixels *= 2;\r\n }\r\n }\r\n\r\n addReference() {\r\n this.cReferences++;\r\n }\r\n\r\n removeReference() {\r\n this.cReferences--;\r\n\r\n if (this.cReferences == 0)\r\n this.dispose();\r\n }\r\n\r\n dispose() {\r\n this.pendingTiles.Clear();\r\n\r\n //foreach (KeyValuePair kvp in dctTiles)\r\n // kvp.Value.Dispose();\r\n\r\n this.dctTiles.Clear();\r\n }\r\n\r\n \r\n // sections Constants\r\n\r\n // @section Events\r\n\r\n // @section Static Properties\r\n /*\r\n static OpenStreetMapsTileSource OpenStreetMapsInstance\r\n {\r\n get\r\n {\r\n if (openStreetMapsInstance == null)\r\n {\r\n openStreetMapsInstance = new OpenStreetMapsTileSource();\r\n openStreetMapsInstance.AddReference();\r\n }\r\n\r\n return openStreetMapsInstance;\r\n }\r\n }\r\n\r\n public static GoogleStreetMapsTileSource GoogleStreetMapsInstance\r\n {\r\n get\r\n {\r\n if (googleStreetMapsInstance == null)\r\n {\r\n googleStreetMapsInstance = new GoogleStreetMapsTileSource();\r\n googleStreetMapsInstance.AddReference();\r\n }\r\n\r\n return googleStreetMapsInstance;\r\n }\r\n }\r\n */\r\n \r\n // @section Properties\r\n\r\n get ImageExtension() {\r\n return \".png\";\r\n }\r\n\r\n get ImageSize() { \r\n return 256;\r\n }\r\n\r\n get NumberOfResolutions() {\r\n return 20;\r\n }\r\n\r\n // @section Methods\r\n getNearestLevel(resolution) {\r\n var result = 0;\r\n\r\n //smaller than smallest\r\n if (this.longitudeResolutions[this.longitudeResolutions.length - 1] > resolution)\r\n result = this.longitudeResolutions.length - 1;\r\n //bigger than biggest\r\n else if (this.longitudeResolutions[0] < resolution)\r\n result = 0;\r\n else\r\n {\r\n var resultDistance = Number.MAX_VALUE;\r\n\r\n for (let i = 0; i < this.longitudeResolutions.length; i++)\r\n {\r\n var distance = Math.abs(this.longitudeResolutions[i] - resolution);\r\n if (distance < resultDistance)\r\n {\r\n result = i;\r\n resultDistance = distance;\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getLatLongResolution(level) {\r\n return this.longitudeResolutions[level];\r\n }\r\n\r\n getGoogleResolution(level) {\r\n return this.googleResolutions[level];\r\n }\r\n\r\n getLongitudeTileSize(level){\r\n return this.longitudeResolutions[level] * this.ImageSize;\r\n }\r\n\r\n getLatitudeTileSize(level) {\r\n return this.latitudeResolutions[level] * this.ImageSize;\r\n }\r\n\r\n getGoogleTileSize(level) {\r\n return this.googleResolutions[level] * this.ImageSize;\r\n }\r\n\r\n getTile(level, col, row, viewport) {\r\n var sKey = `${level}:${col},${row}`;\r\n var tile = this.dctTiles[sKey];\r\n var nPos = 0;\r\n\r\n if (tile == undefined) {\r\n tile = new Tile(level, col, row, this, viewport);\r\n this.dctTiles[sKey] = tile;\r\n }\r\n else if (tile.addReference() == 1) {\r\n // clear the dereferenced time\r\n tile.Dereferenced = 0;\r\n this.unused = this.unused.filter(item => item != tile); \r\n } \r\n\r\n\r\n if (tile.ImageState == LoadStates.Initial)\r\n tile.ImageState = LoadStates.Loading;\r\n else if (tile.ImageState == LoadStates.Loaded) {\r\n viewport.renderTile(tile);\r\n }\r\n\r\n return tile;\r\n } \r\n\r\n dereferenceTile(tile, now) {\r\n var nPos = -1;\r\n\r\n if (tile.dereference() == 0)\r\n {\r\n // give the tile an dereferenced time\r\n tile.Dereferenced = now;\r\n\r\n // insert the tile into the unused list\r\n if ((nPos = Util.findIndex(this.unused, tile)) < 0)\r\n this.unused.push(tile);\r\n //this.unused.Insert(~nPos, tile);\r\n }\r\n }\r\n\r\n cleanup() {\r\n // if our total tile count is greater than our cache limit, then we should look at freeing some\r\n if (this.dctTiles.keys > this.MaxCachedTiles && this.unused.length > 0)\r\n {\r\n // sort by dereferenced value\r\n this.unused.sort((x, y) => y.Dereferenced > x.Dereferenced);\r\n\r\n while (this.dctTiles.keys.length > this.MaxCachedTiles && unused.length > 0) {\r\n var tile = this.unused[this.unused.length - 1];\r\n\r\n tile.dispose();\r\n delete this.dctTiles[tile.Name];\r\n this.unused = this.unused.slice(this.unused.length - 1);\r\n }\r\n\r\n // sort again by name\r\n unused.Sort();\r\n }\r\n }\r\n \r\n transformExtentsFromLatLong(latLongMinX, latLongMinY, latLongMaxX, latLongMaxY, boundsObj) {\r\n var longitude1 = this.normalise(latLongMinX, TileSource.LatLongExtents.MinX, TileSource.LatLongExtents.MaxX);\r\n var latitude1 = this.normalise(latLongMinY, TileSource.LatLongExtents.MinY, TileSource.LatLongExtents.MaxY);\r\n\r\n boundsObj.minX = longitude1 * 20037508.34 / 180.0;\r\n boundsObj.minY = Math.log(Math.tan((90.0 + latitude1) * Math.PI / 360.0)) / (Math.PI / 180.0);\r\n boundsObj.minY = boundsObj.minY * 20037508.34 / 180.0;\r\n\r\n var longitude2 = this.normalise(latLongMaxX, TileSource.LatLongExtents.MinX, TileSource.LatLongExtents.MaxX);\r\n var latitude2 = this.normalise(latLongMaxY, TileSource.LatLongExtents.MinY, TileSource.LatLongExtents.MaxY);\r\n\r\n boundsObj.maxX = longitude2 * 20037508.34 / 180.0;\r\n boundsObj.maxY = Math.log(Math.tan((90.0 + latitude2) * Math.PI / 360.0)) / (Math.PI / 180.0);\r\n boundsObj.maxY = boundsObj.maxY * 20037508.34 / 180.0;\r\n }\r\n\r\n transformExtentsToLatLong(googleBounds, latlongBounds) {\r\n latlongBounds.MinX = (googleBounds.MinX / 20037508.34) * 180.0;\r\n latlongBounds.MinY = (googleBounds.MinY / 20037508.34) * 180.0;\r\n latlongBounds.MinY = 180.0 / Math.PI * (2.0 * Math.atan(Math.exp(latlongBounds.MinY * Math.PI / 180.0)) - Math.PI / 2.0);\r\n \r\n latlongBounds.MaxX = (googleBounds.MaxX / 20037508.34) * 180.0;\r\n latlongBounds.MaxY = (googleBounds.MaxY / 20037508.34) * 180.0;\r\n latlongBounds.MaxY = 180.0 / Math.PI * (2.0 * Math.atan(Math.exp(latlongBounds.MaxY * Math.PI / 180.0)) - Math.PI / 2.0);\r\n }\r\n\r\n _getSubdomain(tilePoint) {\r\n\t\tvar index = Math.abs(tilePoint.x + tilePoint.y) % this.options.subdomains.length;\r\n\t\treturn this.options.subdomains[index];\r\n }\r\n \r\n // @section Tile Loading Methods\r\n loadTile(level, col, row) {\r\n\r\n }\r\n\r\n getTileUrl(level, col, row) {\r\n }\r\n\r\n createTile(level, col, row) {\r\n var sKey = `${level}:${col},${row}`;\r\n var tile = this.dctTiles[sKey];\r\n var nPos = 0;\r\n\r\n if (tile == undefined) {\r\n tile = new Tile(level, col, row, this);\r\n this.dctTiles[sKey] = tile;\r\n }\r\n else if (tile.AddReference() == 1)\r\n {\r\n // clear the dereferenced time\r\n tile.Dereferenced = 0;\r\n this.unused = this.unused.filter(item => item != tile); \r\n } \r\n\r\n return tile;\r\n }\r\n \r\n // @section Helper Methods\r\n transformPointFromLatLong(longitude, latitude, x, y) {\r\n longitude = this.normalise(longitude, TileSource.LatLongExtents.MinX, TileSource.LatLongExtents.MaxX);\r\n latitude = this.normalise(latitude, TileSource.LatLongExtents.MinY, TileSource.LatLongExtents.MaxY);\r\n\r\n x = longitude * 20037508.34 / 180;\r\n y = Math.log(Math.tan((90 + latitude) * Math.PI / 360)) / (Math.PI / 180);\r\n y = y * 20037508.34 / 180;\r\n }\r\n\r\n transformPointToLatLong(x, y, longitude, latitude) {\r\n longitude = (x / 20037508.34) * 180;\r\n latitude = (y / 20037508.34) * 180;\r\n latitude = 180 / Math.PI * (2 * Math.atan(Math.exp(latitude * Math.PI / 180)) - Math.PI / 2);\r\n }\r\n\r\n render(canvas) {\r\n \r\n }\r\n\r\n normalise(value, min, max) {\r\n if (value < min) {\r\n var range = max - min;\r\n do {\r\n value += range;\r\n } while (value < min);\r\n }\r\n else if (value > max)\r\n {\r\n var range = max - min;\r\n\r\n do {\r\n value -= range;\r\n } while (value > max);\r\n }\r\n\r\n return value;\r\n }\r\n}\r\n\r\n // @section Static Fields\r\n TileSource.LatLongExtents = new Envelope(-180.0, 180.0,-90.0, 90.0); \r\n TileSource.GoogleExtents = new Envelope(-20037508.34, 20037508.34, -20037508.34, 20037508.34);\r\n \r\n","import MapEnums from '../map/enums';\r\nimport {Point} from '../geometry/Point';\r\nimport {Rectangle} from '../geometry/rectangle';\r\nimport {Bounds} from '../geometry/Bounds';\r\n\r\nexport class LabelPoint {\r\n constructor() {\r\n this.pt = null;\r\n this.angle = 0;\r\n this.length = 0;\r\n }\r\n}\r\n\r\nexport class ClipLine {\r\n constructor() {\r\n this.x1 = 0;\r\n this.x2 = 0;\r\n this.y1 = 0;\r\n this.y2 = 0;\r\n }\r\n}\r\n\r\nexport class LineObj {\r\n constructor(size = 0) {\r\n this.numpoints = 0;\r\n this.points = new Array(size);\r\n\r\n if (size > 0) {\r\n for(let i = 0; i < size; i++)\r\n this.points[i] = new Point();\r\n }\r\n }\r\n \r\n flush() {\r\n const line = Array.from(this.points);\r\n\r\n this.numpoints = 0;\r\n return line;\r\n }\r\n\r\n reset() {\r\n this.numpoints = 0; \r\n }\r\n}\r\n\r\nexport class MgMapPrimitive { \r\n constructor() {\r\n }\r\n\r\n // #region Clipping Methods\r\n /*\r\n ** Private implementation of the Sutherland-Cohen algorithm. Inspired by\r\n ** \"Getting Graphic: Programming Fundamentals in C and C++\" by Mark Finlay\r\n ** and John Petritis. (pages 179-182)\r\n */\r\n ClipLine(clipLine, rect)\r\n {\r\n var x, y;\r\n var slope;\r\n var check1, check2;\r\n\r\n if (clipLine.x1 < rect.Left && clipLine.x2 < rect.Left)\r\n return false;\r\n if (clipLine.x1 > rect.Right && clipLine.x2 > rect.Right)\r\n return false;\r\n\r\n check1 = this.CLIP_CHECK(rect.Left, clipLine.x1, rect.Right);\r\n check2 = this.CLIP_CHECK(rect.Left, clipLine.x2, rect.Right);\r\n if (check1 == MapEnums.ClipStates.ClipLeft || check2 == MapEnums.ClipStates.ClipLeft)\r\n {\r\n slope = (clipLine.y2 - clipLine.y1) / (clipLine.x2 - clipLine.x1);\r\n y = clipLine.y1 + (rect.Left - clipLine.x1) * slope;\r\n if (check1 == MapEnums.ClipStates.ClipLeft)\r\n {\r\n clipLine.x1 = rect.Left;\r\n clipLine.y1 = y;\r\n }\r\n else\r\n {\r\n clipLine.x2 = rect.Left;\r\n clipLine.y2 = y;\r\n }\r\n }\r\n\r\n if (check1 == MapEnums.ClipStates.ClipRight || check2 == MapEnums.ClipStates.ClipRight)\r\n {\r\n slope = (clipLine.y2 - clipLine.y1) / (clipLine.x2 - clipLine.x1);\r\n y = clipLine.y1 + (rect.Right - clipLine.x1) * slope;\r\n if (check1 == MapEnums.ClipStates.ClipRight)\r\n {\r\n clipLine.x1 = rect.Right;\r\n clipLine.y1 = y;\r\n }\r\n else\r\n {\r\n clipLine.x2 = rect.Right;\r\n clipLine.y2 = y;\r\n }\r\n }\r\n\r\n if (clipLine.y1 < rect.Top && clipLine.y2 < rect.Top)\r\n return false;\r\n if (clipLine.y1 > rect.Bottom && clipLine.y2 > rect.Bottom)\r\n return false;\r\n\r\n check1 = this.CLIP_CHECK(rect.Top, clipLine.y1, rect.Bottom);\r\n check2 = this.CLIP_CHECK(rect.Top, clipLine.y2, rect.Bottom);\r\n if (check1 == MapEnums.ClipStates.ClipLeft || check2 == MapEnums.ClipStates.ClipLeft)\r\n {\r\n slope = (clipLine.x2 - clipLine.x1) / (clipLine.y2 - clipLine.y1);\r\n x = clipLine.x1 + (rect.Top - clipLine.y1) * slope;\r\n if (check1 == MapEnums.ClipStates.ClipLeft)\r\n {\r\n clipLine.x1 = x;\r\n clipLine.y1 = rect.Top;\r\n }\r\n else\r\n {\r\n clipLine.x2 = x;\r\n clipLine.y2 = rect.Top;\r\n }\r\n }\r\n\r\n if (check1 == MapEnums.ClipStates.ClipRight || check2 == MapEnums.ClipStates.ClipRight)\r\n {\r\n slope = (clipLine.x2 - clipLine.x1) / (clipLine.y2 - clipLine.y1);\r\n x = clipLine.x1 + (rect.Bottom - clipLine.y1) * slope;\r\n if (check1 == MapEnums.ClipStates.ClipRight)\r\n {\r\n clipLine.x1 = x;\r\n clipLine.y1 = rect.Bottom;\r\n }\r\n else\r\n {\r\n clipLine.x2 = x;\r\n clipLine.y2 = rect.Bottom;\r\n }\r\n }\r\n\r\n return true;\r\n } \r\n \r\n //\r\n // Routine for clipping a polyline, stored in a shapeObj struct, to a\r\n // rectangle. Uses clipLine() function to create a new shapeObj. \r\n //\r\n ClipLineStringRect(points, rect) {\r\n var lines = [];\r\n\r\n if (points.length > 0)\r\n {\r\n var line = new LineObj(points.length);\r\n var clipLine = new ClipLine();\r\n var j;\r\n\r\n clipLine.x1 = points[0].x;\r\n clipLine.y1 = points[0].y;\r\n\r\n for (j = 1; j < points.length; j++)\r\n {\r\n clipLine.x2 = points[j].x;\r\n clipLine.y2 = points[j].y;\r\n\r\n if (this.ClipLine(clipLine, rect) == true)\r\n {\r\n if (line.numpoints == 0)\r\n { // first segment, add both points \r\n\r\n line.points[0].x = clipLine.x1;\r\n line.points[0].y = clipLine.y1;\r\n line.points[1].x = clipLine.x2;\r\n line.points[1].y = clipLine.y2;\r\n\r\n line.numpoints = 2;\r\n }\r\n else\r\n { // add just the last point \r\n\r\n line.points[line.numpoints].x = clipLine.x2;\r\n line.points[line.numpoints].y = clipLine.y2;\r\n\r\n line.numpoints++;\r\n }\r\n\r\n if ((clipLine.x2 != points[j].x) || (clipLine.y2 != points[j].y))\r\n {\r\n if (line.numpoints > 0)\r\n Array.prototype.push.apply(lines, line.flush());\r\n }\r\n }\r\n\r\n clipLine.x1 = points[j].x;\r\n clipLine.y1 = points[j].y;\r\n }\r\n\r\n if (line.numpoints > 0)\r\n Array.prototype.push.apply(lines, line.flush());\r\n }\r\n\r\n return lines;\r\n } \r\n\r\n //\r\n // Slightly modified version of the Liang-Barsky polygon clipping algorithm\r\n //\r\n ClipPolygonRect(points, rect) {\r\n if (points.length > 0)\r\n {\r\n var pts = [];\r\n\r\n var numpoints = points.length;\r\n var line = new LineObj(numpoints + 2);\r\n var deltax, deltay, xin, xout, yin, yout;\r\n var tinx, tiny, toutx, touty, tin1, tin2, tout;\r\n var x1, y1, x2, y2;\r\n var i, j;\r\n\r\n for (i = 0; i < numpoints - 1; i++) {\r\n\r\n x1 = points[i].x;\r\n y1 = points[i].y;\r\n x2 = points[i + 1].x;\r\n y2 = points[i + 1].y;\r\n\r\n deltax = x2 - x1;\r\n if (deltax == 0)\r\n { // bump off of the vertical \r\n deltax = (x1 > rect.Left ? -MgMapPrimitive.NEARZERO : MgMapPrimitive.NEARZERO);\r\n }\r\n deltay = y2 - y1;\r\n if (deltay == 0)\r\n { // bump off of the horizontal \r\n deltay = (y1 > rect.Top ? -MgMapPrimitive.NEARZERO : MgMapPrimitive.NEARZERO);\r\n }\r\n\r\n if (deltax > 0)\r\n { // points to right \r\n xin = rect.Left;\r\n xout = rect.Right;\r\n }\r\n else\r\n {\r\n xin = rect.Right;\r\n xout = rect.Left;\r\n }\r\n if (deltay > 0)\r\n { // points up \r\n yin = rect.Top;\r\n yout = rect.Bottom;\r\n }\r\n else\r\n {\r\n yin = rect.Bottom;\r\n yout = rect.Top;\r\n }\r\n\r\n tinx = (xin - x1) / deltax;\r\n tiny = (yin - y1) / deltay;\r\n\r\n if (tinx < tiny)\r\n { // hits x first \r\n tin1 = tinx;\r\n tin2 = tiny;\r\n }\r\n else\r\n { // hits y first \r\n tin1 = tiny;\r\n tin2 = tinx;\r\n }\r\n\r\n if (1 >= tin1)\r\n {\r\n if (0 < tin1)\r\n {\r\n line.points[line.numpoints].x = xin;\r\n line.points[line.numpoints].y = yin;\r\n line.numpoints++;\r\n }\r\n if (1 >= tin2)\r\n {\r\n toutx = (xout - x1) / deltax;\r\n touty = (yout - y1) / deltay;\r\n\r\n tout = (toutx < touty) ? toutx : touty;\r\n\r\n if (0 < tin2 || 0 < tout)\r\n {\r\n line.points.length = line.points.length + 1;\r\n\r\n if (tin2 <= tout)\r\n {\r\n if (0 < tin2)\r\n {\r\n if (tinx > tiny)\r\n {\r\n line.points[line.numpoints].x = xin;\r\n line.points[line.numpoints].y = y1 + tinx * deltay;\r\n line.numpoints++;\r\n }\r\n else\r\n {\r\n line.points[line.numpoints].x = x1 + tiny * deltax;\r\n line.points[line.numpoints].y = yin;\r\n line.numpoints++;\r\n }\r\n }\r\n if (1 > tout)\r\n {\r\n if (toutx < touty)\r\n {\r\n line.points[line.numpoints].x = xout;\r\n line.points[line.numpoints].y = y1 + toutx * deltay;\r\n line.numpoints++;\r\n }\r\n else\r\n {\r\n line.points[line.numpoints].x = x1 + touty * deltax;\r\n line.points[line.numpoints].y = yout;\r\n line.numpoints++;\r\n }\r\n }\r\n else\r\n {\r\n line.points[line.numpoints].x = x2;\r\n line.points[line.numpoints].y = y2;\r\n line.numpoints++;\r\n }\r\n }\r\n else\r\n {\r\n if (tinx > tiny)\r\n {\r\n line.points[line.numpoints].x = xin;\r\n line.points[line.numpoints].y = yout;\r\n line.numpoints++;\r\n }\r\n else\r\n {\r\n line.points[line.numpoints].x = xout;\r\n line.points[line.numpoints].y = yin;\r\n line.numpoints++;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (line.numpoints > 0)\r\n {\r\n line.points.length = line.points.length + 1;\r\n line.points[line.numpoints].x = line.points[0].x; // force closure \r\n line.points[line.numpoints].y = line.points[0].y;\r\n line.numpoints++;\r\n\r\n //msAddLine(&tmp, &line);\r\n for (i = 0; i < line.numpoints; i++)\r\n pts.push(line.points[i]);\r\n\r\n }\r\n points = pts;\r\n }\r\n\r\n return points;\r\n }\r\n \r\n \r\n /*\r\n ** Not a generic intersection test, we KNOW the lines aren't parallel or coincident. To be used with the next\r\n ** buffering code only. See code in mapsearch.c for a boolean test for intersection.\r\n */\r\n generateLineIntersection(a, b, c, d)\r\n {\r\n var p = new Coordinate();\r\n var r;\r\n var denominator, numerator;\r\n\r\n if (b.X == c.X && b.Y == c.Y)\r\n return b;\r\n\r\n numerator = ((a.Y - c.Y) * (d.X - c.X) - (a.X - c.X) * (d.Y - c.Y));\r\n denominator = ((b.X - a.X) * (d.Y - c.Y) - (b.Y - a.Y) * (d.X - c.X));\r\n\r\n r = numerator / denominator;\r\n\r\n p.X = MgMapPrimitive.MS_NINT(a.X + r * (b.X - a.X));\r\n p.Y = MgMapPrimitive.MS_NINT(a.Y + r * (b.Y - a.Y));\r\n\r\n return p;\r\n }\r\n // #endregion Clipping\r\n\r\n //region Labelling Methods\r\n GetPolygonLabelPoint(rcExtents, pts, suggestedAngle, labelPoint) {\r\n var bContains = false;\r\n var i, j, k;\r\n\r\n if (suggestedAngle != null)\r\n labelPoint.angle = suggestedAngle;\r\n else if (!this.GetPolylineLabelPoint(pts, 0.0, suggestedAngle, labelPoint))\r\n labelPoint.angle = 0.0;\r\n\r\n labelPoint.pt = this.TryGetPolygonCenterOfGravity(pts);\r\n bContains = this.PolygonContains(pts, labelPoint.pt);\r\n\r\n if (!bContains)\r\n {\r\n /* do it the hard way - scanline */\r\n var xintersect = new Array(pts.length);\r\n var skip = (rcExtents.Bottom - rcExtents.Top) / MgMapPrimitive.NUM_SCANLINES;\r\n var x, y, hi_y, lo_y, slope, len, max_len = 0;\r\n var point1, point2;\r\n var nfound;\r\n\r\n for (let k = 1; k <= MgMapPrimitive.NUM_SCANLINES; k++)\r\n {\r\n /* sample the shape in the y direction */\r\n\r\n y = rcExtents.Bottom - k * skip;\r\n\r\n /* need to find a y that won't intersect any vertices exactly */\r\n hi_y = y - 1; /* first initializing lo_y, hi_y to be any 2 pnts on either side of lp.y */\r\n lo_y = y + 1;\r\n\r\n for (i = 0; i < pts.length; i++)\r\n {\r\n if ((lo_y < y) && (hi_y >= y))\r\n break; /* already initialized */\r\n\r\n if (pts[i].y < y)\r\n lo_y = pts[i].y;\r\n if (pts[i].y >= y)\r\n hi_y = pts[i].y;\r\n }\r\n\r\n for (i = 0; i < pts.length; i++)\r\n {\r\n if ((pts[i].y < y) && ((y - pts[i].y) < (y - lo_y)))\r\n lo_y = pts[i].y;\r\n if ((pts[i].y >= y) && ((pts[i].y - y) < (hi_y - y)))\r\n hi_y = pts[i].y;\r\n }\r\n\r\n if (lo_y == hi_y)\r\n {\r\n break;\r\n }\r\n else\r\n y = (hi_y + lo_y) / 2.0;\r\n\r\n nfound = 0;\r\n point1 = pts[pts.length - 1];\r\n for (i = 0; i < pts.length; i++)\r\n {\r\n point2 = pts[i];\r\n\r\n if (this.EDGE_CHECK(point1.y, y, point2.y) == MapEnums.ClipStates.ClipMiddle)\r\n {\r\n if (point1.y == point2.y)\r\n continue; /* ignore horizontal edges */\r\n else\r\n slope = (point2.x - point1.x) / (point2.y - point1.y);\r\n\r\n x = point1.x + (y - point1.y) * slope;\r\n xintersect[nfound++] = x;\r\n } /* End of checking this edge */\r\n\r\n point1 = point2; /* Go on to next edge */\r\n }\r\n\r\n /* First, sort the intersections */\r\n if (nfound > 1)\r\n xintersect.sort(function(a, b){return a - b});\r\n\r\n /* Great, now find longest span */\r\n for (i = 0; i < nfound; i += 2)\r\n {\r\n len = Math.abs(xintersect[i] - xintersect[i + 1]);\r\n if (len > max_len)\r\n {\r\n max_len = len;\r\n labelPoint.pt = new Point(((xintersect[i] + xintersect[i + 1]) / 2), y);\r\n }\r\n }\r\n }\r\n\r\n bContains = (max_len > 0);\r\n }\r\n\r\n return bContains;\r\n }\r\n\r\n GetPolylineLabelPoint(pts, min_length, suggestedAngle, labelPoint) { \r\n var segment_length, max_segment_length = 0;\r\n var i, segment_index = 0;\r\n var pt2, pt1 = pts[0];\r\n var bFound = false;\r\n var theta;\r\n\r\n for (i = 1; i < pts.length; i++)\r\n {\r\n pt2 = pts[i];\r\n\r\n segment_length = Math.sqrt((Math.pow((pt1.x - pt2.x), 2.0) + Math.pow((pt1.y - pt2.y), 2.0)));\r\n\r\n if (segment_length > max_segment_length)\r\n {\r\n max_segment_length = segment_length;\r\n segment_index = i;\r\n }\r\n\r\n pt1 = pt2;\r\n }\r\n\r\n if (segment_index == 0)\r\n {\r\n // must have a degenerate line, skip it\r\n labelPoint.pt = null;\r\n labelPoint.length = 0.0;\r\n labelPoint.angle = 0.0;\r\n }\r\n else if (max_segment_length < min_length)\r\n {\r\n // too short to label\r\n labelPoint.pt = null;\r\n labelPoint.length = 0.0;\r\n labelPoint.angle = 0.0;\r\n }\r\n else\r\n {\r\n /* ok, now we know which line and which segment within that line */\r\n pt1 = pts[segment_index - 1];\r\n pt2 = pts[segment_index];\r\n\r\n labelPoint.pt = new Point((pt2.x + pt1.x) / 2, (pt2.y + pt1.y) / 2);\r\n labelPoint.length = max_segment_length;\r\n\r\n if (suggestedAngle != null)\r\n labelPoint.angle = suggestedAngle;\r\n else\r\n {\r\n theta = MgMapPrimitive.MS_RAD_TO_DEG * Math.asin(Math.abs(pt2.x - pt1.x) / Math.sqrt((Math.pow((pt2.x - pt1.x), 2.0) + Math.pow((pt2.y - pt1.y), 2.0))));\r\n\r\n if (pt1.x < pt2.x)\r\n {\r\n /* i.e. to the left */\r\n if (pt1.y > pt2.y) /* i.e. below */\r\n labelPoint.angle = -(90.0 - theta);\r\n else\r\n labelPoint.angle = (90.0 - theta);\r\n }\r\n else\r\n {\r\n if (pt1.y > pt2.y) /* i.e. below */\r\n labelPoint.angle = (90.0 - theta);\r\n else\r\n labelPoint.angle = -(90.0 - theta);\r\n }\r\n }\r\n\r\n bFound = true;\r\n }\r\n\r\n return bFound;\r\n }\r\n\r\n PolygonContains(pts, pt) {\r\n var bContains = false;\r\n\r\n if (pts.length < 3)\r\n bContains = false;\r\n else if (pts.findIndex(o => o.x == pt.x && o.y == pt.y))\r\n bContains = true;\r\n else\r\n {\r\n var dfTestX = pt.x;\r\n var dfTestY = pt.y;\r\n var x1, x2 = pts[0].x - dfTestX;\r\n var y1, y2 = pts[0].y - dfTestY;\r\n var dfIntersection;\r\n\r\n // For every point p in ring,\r\n // test if ray starting from given point crosses segment (p - 1, p)\r\n var iNumCrossings = 0;\r\n\r\n for (let iPoint = 1; iPoint < pts.length; iPoint++)\r\n {\r\n x1 = pts[iPoint].x - dfTestX;\r\n y1 = pts[iPoint].y - dfTestY;\r\n\r\n if ((y1 > 0 && y2 <= 0) || (y2 > 0 && y1 <= 0))\r\n {\r\n // Check if ray intersects with segment of the ring\r\n dfIntersection = (x1 * y2 - x2 * y1) / (y2 - y1);\r\n if (0.0 < dfIntersection)\r\n {\r\n // Count intersections\r\n iNumCrossings++;\r\n }\r\n }\r\n\r\n x2 = x1;\r\n y2 = y1;\r\n }\r\n\r\n // If iNumCrossings number is even, given point is outside the ring,\r\n // when the crossings number is odd, the point is inside the ring.\r\n bContains = ((iNumCrossings % 2) == 1);\r\n }\r\n\r\n return bContains;\r\n }\r\n\r\n CalculateExtents(pts) {\r\n var rcExtents;\r\n\r\n if (pts != null && pts.length > 0)\r\n {\r\n var top = pts[0].y;\r\n var left = pts[0].x;\r\n var right = left;\r\n var bottom = top;\r\n\r\n for (let index = 1; index < pts.length; index++)\r\n {\r\n let pt = pts[index];\r\n\r\n if (pt.x < left)\r\n left = pt.x;\r\n else if (pt.x > right)\r\n right = pt.x;\r\n\r\n if (pt.y < top)\r\n top = pt.y;\r\n else if (pt.y > bottom)\r\n bottom = pt.y;\r\n }\r\n\r\n rcExtents = new Rectangle(left, top, right, bottom, true);\r\n }\r\n else\r\n rcExtents = new Rectangle();\r\n\r\n return rcExtents;\r\n }\r\n\r\n CalculateBounds(pts) {\r\n var bounds;\r\n\r\n if (pts != null && pts.length > 0)\r\n {\r\n var top = pts[0].y;\r\n var left = pts[0].x;\r\n var right = left;\r\n var bottom = top;\r\n\r\n for (let index = 1; index < pts.length; index++)\r\n {\r\n let pt = pts[index];\r\n\r\n if (pt.x < left)\r\n left = pt.x;\r\n else if (pt.x > right)\r\n right = pt.x;\r\n\r\n if (pt.y < top)\r\n top = pt.y;\r\n else if (pt.y > bottom)\r\n bottom = pt.y;\r\n }\r\n\r\n bounds = new Bounds(new Point(left, top), new Point(right, bottom));\r\n }\r\n else\r\n bounds = new Bounds();\r\n\r\n return bounds;\r\n }\r\n /*\r\n ** Computes the center of gravity for a polygon based on it's largest outer ring only.\r\n */\r\n TryGetPolygonCenterOfGravity(pts) {\r\n var ptCentre = null;\r\n var sx = 0, sy = 0, tsx = 0, tsy = 0, s = 0; /* sums */\r\n var pt2, pt1 = pts[0];\r\n var a, area = 0;\r\n\r\n for (let i = 1; i < pts.length; i++) {\r\n pt2 = pts[i];\r\n\r\n a = pt1.x * pt2.y - pt2.x * pt1.y;\r\n s += a;\r\n tsx += (pt1.x + pt2.x) * a;\r\n tsy += (pt1.y + pt2.y) * a;\r\n\r\n pt1 = pt2;\r\n }\r\n\r\n area = Math.abs(s / 2);\r\n\r\n sx = s > 0 ? tsx : -tsx;\r\n sy = s > 0 ? tsy : -tsy;\r\n\r\n ptCentre = new Point((sx / (6 * area)), (sy / (6 * area)));\r\n\r\n return ptCentre;\r\n }\r\n\r\n TryGetPolygonCentroid(pts) {\r\n var ptCentre = null;\r\n var cent_weight_x = 0.0, cent_weight_y = 0.0;\r\n var len, total_len = 0;\r\n var pt2, pt1 = pts[0];\r\n\r\n for (let i = 1; i < pts.length; i++) {\r\n pt2 = pts[i];\r\n\r\n len = Math.sqrt((Math.pow((pt1.x - pt2.x), 2.0) + Math.pow((pt1.y - pt2.y), 2.0)));\r\n cent_weight_x += len * ((pt1.x + pt2.x) / 2);\r\n cent_weight_y += len * ((pt1.y + pt2.y) / 2);\r\n total_len += len;\r\n\r\n pt1 = pt2;\r\n }\r\n\r\n ptCentre = new Point((cent_weight_x / total_len), (cent_weight_y / total_len));\r\n\r\n return ptCentre;\r\n }\r\n\r\n \r\n ROUND(a) {\r\n return ((a) + 0.5);\r\n }\r\n \r\n MS_NINT(x) {\r\n return (x >= 0.0 ? (x + .5) : (x - .5));\r\n }\r\n\r\n MS_MAP2IMAGE_X_IC_DBL(x, minx, icx) {\r\n return ((x - minx) * icx);\r\n }\r\n\r\n MS_MAP2IMAGE_Y_IC_DBL(y, maxy, icy) {\r\n return ((maxy - y) * icy);\r\n }\r\n\r\n CLIP_CHECK(min, a, max) {\r\n return a < min ? MapEnums.ClipStates.ClipLeft : a > max ? MapEnums.ClipStates.ClipRight : MapEnums.ClipStates.ClipMiddle;\r\n }\r\n \r\n EDGE_CHECK(x0, x, x1) {\r\n return x < Math.min(x0, x1) ? MapEnums.ClipStates.ClipLeft : x > Math.max(x0, x1) ? MapEnums.ClipStates.ClipRight : MapEnums.ClipStates.ClipMiddle;\r\n }\r\n\r\n FindRegion(x, y, rect) {\r\n var code = 0;\r\n\r\n if (x < rect.Left)\r\n code |= 8; //left\r\n else if (x >= rect.Right)\r\n code |= 4; //right\r\n\r\n if (y= rect.Bottom)\r\n code |= 2; //bottom\r\n\r\n return code;\r\n } \r\n}\r\n\r\n\r\nMgMapPrimitive.INFINITY = (1.0e+30);\r\nMgMapPrimitive.NEARZERO = (1.0e-30); /* 1/INFINITY */\r\n\r\nMgMapPrimitive.MS_SUCCESS = 1;\r\nMgMapPrimitive.MS_FAILED = -1;\r\n\r\nMgMapPrimitive.MS_SHAPE_LINE = 1;\r\nMgMapPrimitive.MS_SHAPE_POLYGON = 2;\r\n\r\nMgMapPrimitive.NUM_SCANLINES = 5;\r\n\r\nMgMapPrimitive.MS_RAD_TO_DEG = 57.295779513082321;\r\nMgMapPrimitive.MS_DEG_TO_RAD = 0.017453292519943296;\r\n\r\nexport let MapPrimitive = new MgMapPrimitive();\r\n","import {LatLng, toLatLng} from './LatLng';\r\n\r\n/*\r\n * @class LatLngBounds\r\n * @aka L.LatLngBounds\r\n *\r\n * Represents a rectangular geographical area on a map.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var corner1 = L.latLng(40.712, -74.227),\r\n * corner2 = L.latLng(40.774, -74.125),\r\n * bounds = L.latLngBounds(corner1, corner2);\r\n * ```\r\n *\r\n * All Leaflet methods that accept LatLngBounds objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:\r\n *\r\n * ```js\r\n * map.fitBounds([\r\n * \t[40.712, -74.227],\r\n * \t[40.774, -74.125]\r\n * ]);\r\n * ```\r\n *\r\n * Caution: if the area crosses the antimeridian (often confused with the International Date Line), you must specify corners _outside_ the [-180, 180] degrees longitude range.\r\n *\r\n * Note that `LatLngBounds` does not inherit from Leafet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function LatLngBounds(corner1, corner2) { // (LatLng, LatLng) or (LatLng[])\r\n\tif (!corner1) { return; }\r\n\r\n\tvar latlngs = corner2 ? [corner1, corner2] : corner1;\r\n\r\n\tfor (var i = 0, len = latlngs.length; i < len; i++) {\r\n\t\tthis.extend(latlngs[i]);\r\n\t}\r\n}\r\n\r\nLatLngBounds.prototype = {\r\n\r\n\t// @method extend(latlng: LatLng): this\r\n\t// Extend the bounds to contain the given point\r\n\r\n\t// @alternative\r\n\t// @method extend(otherBounds: LatLngBounds): this\r\n\t// Extend the bounds to contain the given bounds\r\n\textend: function (obj) {\r\n\t\tvar sw = this._southWest,\r\n\t\t ne = this._northEast,\r\n\t\t sw2, ne2;\r\n\r\n\t\tif (obj instanceof LatLng) {\r\n\t\t\tsw2 = obj;\r\n\t\t\tne2 = obj;\r\n\r\n\t\t} else if (obj instanceof LatLngBounds) {\r\n\t\t\tsw2 = obj._southWest;\r\n\t\t\tne2 = obj._northEast;\r\n\r\n\t\t\tif (!sw2 || !ne2) { return this; }\r\n\r\n\t\t} else {\r\n\t\t\treturn obj ? this.extend(toLatLng(obj) || toLatLngBounds(obj)) : this;\r\n\t\t}\r\n\r\n\t\tif (!sw && !ne) {\r\n\t\t\tthis._southWest = new LatLng(sw2.lat, sw2.lng);\r\n\t\t\tthis._northEast = new LatLng(ne2.lat, ne2.lng);\r\n\t\t} \r\n\t\telse {\r\n\t\t\tsw.lat = Math.min(sw2.lat, sw.lat);\r\n\t\t\tsw.lng = Math.min(sw2.lng, sw.lng);\r\n\t\t\tne.lat = Math.max(ne2.lat, ne.lat);\r\n\t\t\tne.lng = Math.max(ne2.lng, ne.lng);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method pad(bufferRatio: Number): LatLngBounds\r\n\t// Returns bounds created by extending or retracting the current bounds by a given ratio in each direction.\r\n\t// For example, a ratio of 0.5 extends the bounds by 50% in each direction.\r\n\t// Negative values will retract the bounds.\r\n\tpad: function (bufferRatio) {\r\n\t\tvar sw = this._southWest,\r\n\t\t ne = this._northEast,\r\n\t\t heightBuffer = Math.abs(sw.lat - ne.lat) * bufferRatio,\r\n\t\t widthBuffer = Math.abs(sw.lng - ne.lng) * bufferRatio;\r\n\r\n\t\treturn new LatLngBounds(\r\n\t\t new LatLng(sw.lat - heightBuffer, sw.lng - widthBuffer),\r\n\t\t new LatLng(ne.lat + heightBuffer, ne.lng + widthBuffer));\r\n\t},\r\n\r\n\t// @method getCenter(): LatLng\r\n\t// Returns the center point of the bounds.\r\n\tgetCenter: function () {\r\n\t\treturn new LatLng(\r\n\t\t (this._southWest.lat + this._northEast.lat) / 2,\r\n\t\t (this._southWest.lng + this._northEast.lng) / 2);\r\n\t},\r\n\r\n\t// @method getSouthWest(): LatLng\r\n\t// Returns the south-west point of the bounds.\r\n\tgetSouthWest: function () {\r\n\t\treturn this._southWest;\r\n\t},\r\n\r\n\t// @method getNorthEast(): LatLng\r\n\t// Returns the north-east point of the bounds.\r\n\tgetNorthEast: function () {\r\n\t\treturn this._northEast;\r\n\t},\r\n\r\n\t// @method getNorthWest(): LatLng\r\n\t// Returns the north-west point of the bounds.\r\n\tgetNorthWest: function () {\r\n\t\treturn new LatLng(this.getNorth(), this.getWest());\r\n\t},\r\n\r\n\t// @method getSouthEast(): LatLng\r\n\t// Returns the south-east point of the bounds.\r\n\tgetSouthEast: function () {\r\n\t\treturn new LatLng(this.getSouth(), this.getEast());\r\n\t},\r\n\r\n\t// @method getWest(): Number\r\n\t// Returns the west longitude of the bounds\r\n\tgetWest: function () {\r\n\t\treturn this._southWest.lng;\r\n\t},\r\n\r\n\t// @method getSouth(): Number\r\n\t// Returns the south latitude of the bounds\r\n\tgetSouth: function () {\r\n\t\treturn this._southWest.lat;\r\n\t},\r\n\r\n\t// @method getEast(): Number\r\n\t// Returns the east longitude of the bounds\r\n\tgetEast: function () {\r\n\t\treturn this._northEast.lng;\r\n\t},\r\n\r\n\t// @method getNorth(): Number\r\n\t// Returns the north latitude of the bounds\r\n\tgetNorth: function () {\r\n\t\treturn this._northEast.lat;\r\n\t},\r\n\r\n\t// @method contains(otherBounds: LatLngBounds): Boolean\r\n\t// Returns `true` if the rectangle contains the given one.\r\n\r\n\t// @alternative\r\n\t// @method contains (latlng: LatLng): Boolean\r\n\t// Returns `true` if the rectangle contains the given point.\r\n\tcontains: function (obj) { // (LatLngBounds) or (LatLng) -> Boolean\r\n\t\tif (typeof obj[0] === 'number' || obj instanceof LatLng || 'lat' in obj) {\r\n\t\t\tobj = toLatLng(obj);\r\n\t\t} else {\r\n\t\t\tobj = toLatLngBounds(obj);\r\n\t\t}\r\n\r\n\t\tvar sw = this._southWest,\r\n\t\t ne = this._northEast,\r\n\t\t sw2, ne2;\r\n\r\n\t\tif (obj instanceof LatLngBounds) {\r\n\t\t\tsw2 = obj.getSouthWest();\r\n\t\t\tne2 = obj.getNorthEast();\r\n\t\t} else {\r\n\t\t\tsw2 = ne2 = obj;\r\n\t\t}\r\n\r\n\t\treturn (sw2.lat >= sw.lat) && (ne2.lat <= ne.lat) &&\r\n\t\t (sw2.lng >= sw.lng) && (ne2.lng <= ne.lng);\r\n\t},\r\n\r\n\t// @method intersects(otherBounds: LatLngBounds): Boolean\r\n\t// Returns `true` if the rectangle intersects the given bounds. Two bounds intersect if they have at least one point in common.\r\n\tintersects: function (bounds) {\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tvar sw = this._southWest,\r\n\t\t ne = this._northEast,\r\n\t\t sw2 = bounds.getSouthWest(),\r\n\t\t ne2 = bounds.getNorthEast(),\r\n\r\n\t\t latIntersects = (ne2.lat >= sw.lat) && (sw2.lat <= ne.lat),\r\n\t\t lngIntersects = (ne2.lng >= sw.lng) && (sw2.lng <= ne.lng);\r\n\r\n\t\treturn latIntersects && lngIntersects;\r\n\t},\r\n\r\n\t// @method overlaps(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle overlaps the given bounds. Two bounds overlap if their intersection is an area.\r\n\toverlaps: function (bounds) {\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tvar sw = this._southWest,\r\n\t\t ne = this._northEast,\r\n\t\t sw2 = bounds.getSouthWest(),\r\n\t\t ne2 = bounds.getNorthEast(),\r\n\r\n\t\t latOverlaps = (ne2.lat > sw.lat) && (sw2.lat < ne.lat),\r\n\t\t lngOverlaps = (ne2.lng > sw.lng) && (sw2.lng < ne.lng);\r\n\r\n\t\treturn latOverlaps && lngOverlaps;\r\n\t},\r\n\r\n\t// @method toBBoxString(): String\r\n\t// Returns a string with bounding box coordinates in a 'southwest_lng,southwest_lat,northeast_lng,northeast_lat' format. Useful for sending requests to web services that return geo data.\r\n\ttoBBoxString: function () {\r\n\t\treturn [this.getWest(), this.getSouth(), this.getEast(), this.getNorth()].join(',');\r\n\t},\r\n\r\n\t// @method equals(otherBounds: LatLngBounds, maxMargin?: Number): Boolean\r\n\t// Returns `true` if the rectangle is equivalent (within a small margin of error) to the given bounds. The margin of error can be overridden by setting `maxMargin` to a small number.\r\n\tequals: function (bounds, maxMargin) {\r\n\t\tif (!bounds) { return false; }\r\n\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\treturn this._southWest.equals(bounds.getSouthWest(), maxMargin) &&\r\n\t\t this._northEast.equals(bounds.getNorthEast(), maxMargin);\r\n\t},\r\n\r\n\t// @method isValid(): Boolean\r\n\t// Returns `true` if the bounds are properly initialized.\r\n\tisValid: function () {\r\n\t\treturn !!(this._southWest && this._northEast);\r\n\t},\r\n\r\n\t// @method MinX(): Number\r\n\t// Returns the leftmost part of the bounding box.\r\n\tget MinX() {\r\n\t\treturn this._southWest.lng;\r\n\t},\r\n\t// @method MinX(): Number\r\n\t// Returns the rightmost part of the bounding box.\r\n\tget MaxX() {\r\n\t\treturn this._northEast.lng;\r\n\t},\r\n\t// @method MinY(): Number\r\n\t// Returns the upper right of the bounding box.\r\n\tget MinY() {\r\n\t\treturn this._northEast.lat;\r\n\t},\r\n\t// @method MaxY(): Number\r\n\t// Returns the bottom right of the bounding box.\r\n\tget MaxY() {\r\n\t\treturn this._southWest.lat;\r\n\t},\r\n\r\n\tget Width() {\r\n\t\treturn Math.abs(this.MaxX - this.MinX);\r\n\t},\r\n\r\n\tget Height() {\r\n\t\treturn Math.abs(this.MaxY - this.MinY);\r\n\t}\r\n};\r\n\r\n// TODO International date line?\r\n\r\n// @factory L.latLngBounds(corner1: LatLng, corner2: LatLng)\r\n// Creates a `LatLngBounds` object by defining two diagonally opposite corners of the rectangle.\r\n\r\n// @alternative\r\n// @factory L.latLngBounds(latlngs: LatLng[])\r\n// Creates a `LatLngBounds` object defined by the geographical points it contains. Very useful for zooming the map to fit a particular set of locations with [`fitBounds`](#map-fitbounds).\r\nexport function toLatLngBounds(a, b) {\r\n\tif (a instanceof LatLngBounds) {\r\n\t\treturn a;\r\n\t}\r\n\treturn new LatLngBounds(a, b);\r\n}\r\n\r\nexport function fromBoundingBox(minX, minY, maxX, maxY) {\r\n\tconst a = new LatLng(minX, maxY);\r\n\tconst b = new LatLng(maxX, minY);\r\n\treturn new LatLngBounds(a, b);\r\n}\r\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","import {Centroid} from './centroid';\r\nimport {Coordinate} from './coordinate';\r\nimport {Envelope, Point, Bounds} from '../geometry/index';\r\n\r\nexport const DimensionTypes = \r\nObject.freeze({\r\n Xyz : Symbol(\"Xyz\"),\r\n Xym : Symbol(\"Xym\"),\r\n Xyzm : Symbol(\"Xyzm\")\r\n});\r\n\r\nexport class Geometry\r\n{\r\n constructor(coordinates) {\r\n this._coordinates = coordinates != undefined ? coordinates : [];\r\n this._bounds = null;\r\n }\r\n \r\n /// \r\n /// Converts geometry coordinates to client coordinates\r\n /// \r\n worldToClient(viewport) { \r\n throw new Error(\"Implement GeometryType method\"); \r\n }\r\n\r\n setWorldToClient(viewport, points) { \r\n throw new Error(\"Implement GeometryType method\"); \r\n }\r\n \r\n /// \r\n /// Gets the geometry type\r\n /// Virtual method, MUST be implemented by deriving class\r\n /// \r\n get GeometryType() { \r\n throw new Error(\"Implement GeometryType method\");\r\n }\r\n\r\n /// \r\n /// Returns a vertex of this Geometry\r\n /// (usually, but not necessarily, the first one).\r\n /// \r\n get Coordinate() { \r\n return null; \r\n }\r\n\r\n /// \r\n /// Returns an array containing the values of all the vertices for \r\n /// this geometry.\r\n /// \r\n /// \r\n get Coordinates() { \r\n return this._coordinates; \r\n }\r\n \r\n /// \r\n /// Returns the count of this Geometrys vertices. The Geometry\r\n /// s contained by composite Geometrys must be\r\n /// Geometry's; that is, they must implement NumPoints.\r\n /// \r\n /// The number of vertices in this Geometry.\r\n get NumPoints() { \r\n return 0; \r\n }\r\n\r\n /// \r\n /// Returns the number of Geometryes in a GeometryCollection,\r\n /// or 1, if the geometry is not a collection.\r\n /// \r\n get NumGeometries() { \r\n return 1; \r\n }\r\n\r\n /// \r\n /// Returns an element Geometry from a GeometryCollection,\r\n /// or this, if the geometry is not a collection.\r\n /// \r\n /// The index of the geometry element.\r\n /// The n'th geometry contained in this geometry.\r\n GetGeometryN(n) {\r\n return this;\r\n }\r\n \r\n get Bounds() {\r\n throw new Error(\"Implement Geometry:Bounds method\");\r\n }\r\n\r\n hitTest(x, y, shape) {\r\n return false;\r\n }\r\n\r\n distance(p1, p2) { \r\n return Math.hypot(p2.x - p1.x, p2.y - p1.y);\r\n }\r\n\r\n draw(canvas, opacity, stroke, fill, context) { \r\n }\r\n\r\n isVisible(viewport) {\r\n return true;\r\n }\r\n\r\n intersects(bounds) {\r\n return false;\r\n }\r\n \r\n\r\n calculateBounds(pts) {\r\n var rcBounds;\r\n \r\n if (pts != null && pts.length > 0) {\r\n /*\r\n if (pts.length >=2 )\r\n rcBounds = new Bounds(pts[0], pts[1]);\r\n else \r\n rcBounds = new Bounds(pts[0], pts[0]);\r\n\r\n for (let index = 2; index < pts.length; index++) {\r\n let pt = pts[index];\r\n rcBounds.extend(pt);\r\n }\r\n */\r\n var top = pts[0].Y;\r\n var left = pts[0].X;\r\n var right = left;\r\n var bottom = top;\r\n\r\n for (let index = 1; index < pts.length; index++) {\r\n let pt = pts[index];\r\n\r\n if (pt.X < left)\r\n left = pt.X;\r\n else if (pt.X > right)\r\n right = pt.X;\r\n\r\n if (pt.Y < top)\r\n top = pt.Y;\r\n else if (pt.Y > bottom)\r\n bottom = pt.Y;\r\n }\r\n \r\n rcBounds = new Envelope( left, right, top, bottom); \r\n }\r\n else\r\n rcBounds = new Envelope();\r\n\r\n return rcBounds;\r\n }\r\n\r\n addGeometry(geometries) {\r\n geometries.push(this);\r\n }\r\n}\r\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","export class Rectangle {\r\n constructor(x, y, w, h, isLTRB) {\r\n this.left = x;\r\n this.top = y;\r\n if (isLTRB != undefined && isLTRB == true) {\r\n this.right = w;\r\n this.bottom = h;\r\n }\r\n else {\r\n this.right = x + w;\r\n this.bottom = y + h;\r\n }\r\n\r\n }\r\n\r\n \r\n get x() { return this.left; }\r\n get y() { return this.top; }\r\n get width() { return this.right - this.left; }\r\n get height() { return this.bottom - this.top; }\r\n set x(v) {\r\n let diff = this.left - v;\r\n this.left = v;\r\n this.right -= diff;\r\n }\r\n\r\n set y(v) {\r\n let diff = this.top - v;\r\n this.top = v;\r\n this.bottom -= diff;\r\n }\r\n\r\n set width(v) { this.right = this.left + v; }\r\n set height(v) { this.bottom = this.top + v; }\r\n\r\n isEmpty() {\r\n return this.left >= this.right || this.top >= this.bottom;\r\n }\r\n\r\n setRect(x, y, w, h) {\r\n this.left = x;\r\n this.top = y;\r\n this.right = x+w;\r\n this.bottom = y+h;\r\n\r\n return this;\r\n }\r\n\r\n setBounds(l, t, r, b) {\r\n this.top = t;\r\n this.left = l;\r\n this.bottom = b;\r\n this.right = r;\r\n\r\n return this;\r\n }\r\n\r\n equals(other) {\r\n return other != null &&\r\n (this.isEmpty() && other.isEmpty() ||\r\n this.top == other.top &&\r\n this.left == other.left &&\r\n this.bottom == other.bottom &&\r\n this.right == other.right);\r\n }\r\n\r\n clone() {\r\n return new Rect(this.left, this.top, this.right - this.left, this.bottom - this.top);\r\n }\r\n\r\n center() {\r\n if (this.isEmpty())\r\n throw \"Empty rectangles do not have centers\";\r\n return new Point(this.left + (this.right - this.left) / 2,\r\n this.top + (this.bottom - this.top) / 2);\r\n }\r\n\r\n copyFrom(other) {\r\n this.top = other.top;\r\n this.left = other.left;\r\n this.bottom = other.bottom;\r\n this.right = other.right;\r\n\r\n return this;\r\n }\r\n\r\n translate(x, y) {\r\n this.left += x;\r\n this.right += x;\r\n this.top += y;\r\n this.bottom += y;\r\n\r\n return this;\r\n }\r\n\r\n toString() {\r\n return \"[\" + this.x + \",\" + this.y + \",\" + this.width + \",\" + this.height + \"]\";\r\n }\r\n\r\n /** return a new rect that is the union of that one and this one */\r\n union(other) {\r\n return this.clone().expandToContain(other);\r\n }\r\n\r\n contains(other) {\r\n if (other.isEmpty()) return true;\r\n if (this.isEmpty()) return false;\r\n\r\n return (other.left >= this.left &&\r\n other.right <= this.right &&\r\n other.top >= this.top &&\r\n other.bottom <= this.bottom);\r\n }\r\n\r\n pointInRect(x, y) {\r\n return (x >= this.left && x <= this.right) && (y >= this.top && y <= this.bottom);\r\n }\r\n intersect(other) {\r\n return this.clone().restrictTo(other);\r\n }\r\n\r\n intersects(other) {\r\n if (this.isEmpty() || other.isEmpty())\r\n return false;\r\n\r\n let x1 = Math.max(this.left, other.left);\r\n let x2 = Math.min(this.right, other.right);\r\n let y1 = Math.max(this.top, other.top);\r\n let y2 = Math.min(this.bottom, other.bottom);\r\n return x1 < x2 && y1 < y2;\r\n }\r\n\r\n /** Restrict area of this rectangle to the intersection of both rectangles. */\r\n restrictTo(other) {\r\n if (this.isEmpty() || other.isEmpty())\r\n return this.setRect(0, 0, 0, 0);\r\n\r\n let x1 = Math.max(this.left, other.left);\r\n let x2 = Math.min(this.right, other.right);\r\n let y1 = Math.max(this.top, other.top);\r\n let y2 = Math.min(this.bottom, other.bottom);\r\n // If width or height is 0, the intersection was empty.\r\n return this.setRect(x1, y1, Math.max(0, x2 - x1), Math.max(0, y2 - y1));\r\n }\r\n\r\n /** Expand this rectangle to the union of both rectangles. */\r\n expandToContain(other) {\r\n if (this.isEmpty()) return this.copyFrom(other);\r\n if (other.isEmpty()) return this;\r\n\r\n let l = Math.min(this.left, other.left);\r\n let r = Math.max(this.right, other.right);\r\n let t = Math.min(this.top, other.top);\r\n let b = Math.max(this.bottom, other.bottom);\r\n return this.setRect(l, t, r-l, b-t);\r\n }\r\n\r\n /**\r\n * Expands to the smallest rectangle that contains original rectangle and is bounded\r\n * by lines with integer coefficients.\r\n */\r\n expandToIntegers() {\r\n this.left = Math.floor(this.left);\r\n this.top = Math.floor(this.top);\r\n this.right = Math.ceil(this.right);\r\n this.bottom = Math.ceil(this.bottom);\r\n return this;\r\n }\r\n\r\n scale(xscl, yscl) {\r\n this.left *= xscl;\r\n this.right *= xscl;\r\n this.top *= yscl;\r\n this.bottom *= yscl;\r\n return this;\r\n }\r\n\r\n map(f) {\r\n this.left = f.call(this, this.left);\r\n this.top = f.call(this, this.top);\r\n this.right = f.call(this, this.right);\r\n this.bottom = f.call(this, this.bottom);\r\n return this;\r\n }\r\n\r\n /** Ensure this rectangle is inside the other, if possible. Preserves w, h. */\r\n translateInside(other) {\r\n let offsetX = 0;\r\n if (this.left <= other.left)\r\n offsetX = other.left - this.left;\r\n else if (this.right > other.right)\r\n offsetX = other.right - this.right;\r\n\r\n let offsetY = 0;\r\n if (this.top <= other.top)\r\n offsetY = other.top - this.top;\r\n else if (this.bottom > other.bottom)\r\n offsetY = other.bottom - this.bottom;\r\n\r\n return this.translate(offsetX, offsetY);\r\n }\r\n\r\n /** Subtract other area from this. Returns array of rects whose union is this-other. */\r\n subtract(other) {\r\n let r = new Rect(0, 0, 0, 0);\r\n let result = [];\r\n other = other.intersect(this);\r\n if (other.isEmpty())\r\n return [this.clone()];\r\n\r\n // left strip\r\n r.setBounds(this.left, this.top, other.left, this.bottom);\r\n if (!r.isEmpty())\r\n result.push(r.clone());\r\n // inside strip\r\n r.setBounds(other.left, this.top, other.right, other.top);\r\n if (!r.isEmpty())\r\n result.push(r.clone());\r\n r.setBounds(other.left, other.bottom, other.right, this.bottom);\r\n if (!r.isEmpty())\r\n result.push(r.clone());\r\n // right strip\r\n r.setBounds(other.right, this.top, this.right, this.bottom);\r\n if (!r.isEmpty())\r\n result.push(r.clone());\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Blends two rectangles together.\r\n * @param rect Rectangle to blend this one with\r\n * @param scalar Ratio from 0 (returns a clone of this rect) to 1 (clone of rect).\r\n * @return New blended rectangle.\r\n */\r\n blend(rect, scalar) {\r\n return new Rect(\r\n this.left + (rect.left - this.left ) * scalar,\r\n this.top + (rect.top - this.top ) * scalar,\r\n this.width + (rect.width - this.width ) * scalar,\r\n this.height + (rect.height - this.height) * scalar);\r\n }\r\n\r\n /**\r\n * Grows or shrinks the rectangle while keeping the center point.\r\n * Accepts single multipler, or separate for both axes.\r\n */\r\n inflate(xscl, yscl) {\r\n let xAdj = (this.width * xscl - this.width) / 2;\r\n let s = (arguments.length > 1) ? yscl : xscl;\r\n let yAdj = (this.height * s - this.height) / 2;\r\n this.left -= xAdj;\r\n this.right += xAdj;\r\n this.top -= yAdj;\r\n this.bottom += yAdj;\r\n return this;\r\n }\r\n}\r\n\r\n \r\n// @factory L.bounds(corner1: Point, corner2: Point)\r\n// Creates a Bounds object from two corners coordinate pairs.\r\n// @alternative\r\n// @factory L.bounds(points: Point[])\r\n// Creates a Bounds object from the given array of points.\r\nexport function fromRect(r) {\r\n return new Rectangle(r.left, r.top, r.right - r.left, r.bottom - r.top);\r\n}\r\n\r\nexport function fromLTRB(l, t, r, b) {\r\n return new Rectangle(l, t, r, b, true);\r\n}\r\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","import {Envelope} from '../geometry/Envelope';\nimport {Point} from '../geometry/Point';\nimport {LatLng} from '../geometry/LatLng';\nimport {Rectangle} from '../geometry/rectangle';\n\nexport class Viewport\n {\n constructor(client, world, cellsize, scale)\n {\n this._client = client;\n this._world = world;\n this._cellsize = cellsize;\n this._scale = scale;\n this.offScreenCanvas = undefined;\n\n }\n\n // @section Getters / Setters\n get Client() { return this._client; }\n get Cellsize() { return this._cellsize; }\n get World() { return this._world; }\n get Scale() { return this._scale; }\n\n get done (){ return false; }\n get geometryChanged (){ return true; }\n\n dispose(tileSource, now) {\n }\n \n worldToClient(point) {\n return new Point(Math.trunc((point.X - this.World.MinX) / this.Cellsize), Math.trunc((this.World.MaxY - point.Y) / this.Cellsize));\n }\n\n worldToClient(x, y) {\n return new Point(Math.trunc((x - this.World.MinX) / this.Cellsize), Math.trunc((this.World.MaxY - y) / this.Cellsize));\n }\n\n worldToClientRect(envelope)\n {\n return new Rectangle(this.Client.MinX + Math.floor((envelope.MinX - this.World.MinX) / this.Cellsize), \n this.Client.MinY + Math.floor((this.World.MaxY - envelope.MaxY) / this.Cellsize), \n this.Client.MinX + Math.ceil((envelope.MaxX - this.World.MinX) / this.Cellsize), \n this.Client.MinY + Math.ceil((this.World.MaxY - envelope.MinY) / this.Cellsize), true);\n }\n\n pointToWorldCoordinate(point) { \n //return new Coordinate((point.X * this.Cellsize) + this.World.MinX, this.World.MaxY - ((point.Y - this.Client.Top) * this.Cellsize)); \n return new LatLng(this.World.MaxY - ((point.y - this.Client.MinY) * this.Cellsize), (point.x * this.Cellsize) + this.World.MinX); \n }\n\n pointToCoordinate(point) { \n return new Coordinate(this.World.MaxY - ((point.y - this.Client.MinY) * this.Cellsize), (point.x * this.Cellsize) + this.World.MinX); \n }\n /*\n Polygon GetClipBox(strokeWidth)\n {\n return new Polygon(new LinearRing(new Coordinate[] { new Coordinate(World.MinX - strokeWidth, World.MinY - strokeWidth), new Coordinate(World.MaxX + strokeWidth, World.MinY - strokeWidth), new Coordinate(World.MaxX + strokeWidth, World.MaxY + strokeWidth), new Coordinate(World.MinX - strokeWidth, World.MaxY + strokeWidth), new Coordinate(World.MinX - strokeWidth, World.MinY - strokeWidth) }));\n }\n */\n \n /*\n RectangleF WorldToClient(Envelope envelope)\n {\n return RectangleF.FromLTRB(Math.Floor((envelope.MinX - World.MinX) / Cellsize), Math.Floor((World.MaxY - envelope.MaxY) / Cellsize), Math.Ceiling((envelope.MaxX - World.MinX) / Cellsize), Math.Ceiling((World.MaxY - envelope.MinY) / Cellsize));\n }\n */\n }","module.exports = require('./lib/axios');","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar $toString = require('./_function-to-string');\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","var $export = require('./_export');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function (string, tag, attribute, value) {\n var S = String(defined(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '"') + '\"';\n return p1 + '>' + S + '';\n};\nmodule.exports = function (NAME, exec) {\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function () {\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Function equal to merge with the difference being that no reference\n * to original objects is kept.\n *\n * @see merge\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction deepMerge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = deepMerge(result[key], val);\n } else if (typeof val === 'object') {\n result[key] = deepMerge({}, val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n deepMerge: deepMerge,\n extend: extend,\n trim: trim\n};\n","/// \r\n/// A lightweight class used to store coordinates on the 2-dimensional Cartesian plane.\r\n/// \r\n/// It is distinct from , which is a subclass of .\r\n/// Unlike objects of type (which contain additional\r\n/// information such as an envelope, a precision model, and spatial reference\r\n/// system information), a Coordinate only contains ordinate values\r\n/// and propertied.\r\n/// \r\n/// \r\n/// Coordinates are two-dimensional points, with an additional Z-ordinate. \r\n/// If an Z-ordinate value is not specified or not defined,\r\n/// constructed coordinates have a Z-ordinate of NaN\r\n/// (which is also the value of ).\r\n/// \r\n/// \r\n/// \r\n/// Apart from the basic accessor functions, NTS supports\r\n/// only specific operations involving the Z-ordinate.\r\n/// \r\nexport class Coordinate {\r\n ///\r\n /// The value used to indicate a null or missing ordinate value.\r\n /// In particular, used for the value of ordinates for dimensions\r\n /// greater than the defined dimension of a coordinate.\r\n ///\r\n \r\n /// \r\n /// Constructs a Coordinate at (x,y,z).\r\n /// \r\n /// X value.\r\n /// Y value.\r\n /// Z value.\r\n constructor(x, y, z)\r\n {\r\n this.X = x != undefined ? x : Coordinate.NullOrdinate;\r\n this.Y = y != undefined ? y : Coordinate.NullOrdinate;\r\n this.Z = z != undefined ? z : Coordinate.NullOrdinate;\r\n }\r\n\r\n clone(c) {\r\n this.X = c.X;\r\n this.Y = c.Y;\r\n this.Z = c.Z; \r\n } \r\n\r\n get CoordinateValue() {\r\n return this; \r\n }\r\n\r\n /// \r\n /// Returns whether the planar projections of the two Coordinates are equal.\r\n ///\r\n /// Coordinate with which to do the 2D comparison.\r\n /// \r\n /// true if the x- and y-coordinates are equal;\r\n /// the Z coordinates do not have to be equal.\r\n /// \r\n Equals2D(other) {\r\n return this.X == other.X && this.Y == other.Y;\r\n }\r\n\r\n /// \r\n /// Tests if another coordinate has the same value for X and Y, within a tolerance.\r\n /// \r\n /// A .\r\n /// The tolerance value.\r\n /// true if the X and Y ordinates are within the given tolerance.\r\n /// The Z ordinate is ignored.\r\n Equals2DWithTolerance(c, tolerance) {\r\n if (!this.EqualsWithTolerance(this.X, c.X, tolerance))\r\n return false;\r\n if (!this.EqualsWithTolerance(this.Y, c.Y, tolerance))\r\n return false;\r\n return true;\r\n }\r\n\r\n EqualsWithTolerance(x1, x2, tolerance)\r\n {\r\n return Math.abs(x1 - x2) <= tolerance;\r\n }\r\n\r\n /// \r\n /// Returns true if other has the same values for the x and y ordinates.\r\n /// Since Coordinates are 2.5D, this routine ignores the z value when making the comparison.\r\n /// \r\n /// Coordinate with which to do the comparison.\r\n /// true if other is a Coordinate with the same values for the x and y ordinates.\r\n Equals(other) {\r\n if (other == undefined)\r\n return false;\r\n\r\n if (other instanceof Coordinate)\r\n return this.Equals2D(other);\r\n else\r\n return false; \r\n }\r\n \r\n /// \r\n /// Compares this object with the specified object for order.\r\n /// Since Coordinates are 2.5D, this routine ignores the z value when making the comparison.\r\n /// Returns\r\n /// -1 : this.x lowerthan other.x || ((this.x == other.x) AND (this.y lowerthan other.y))\r\n /// 0 : this.x == other.x AND this.y = other.y\r\n /// 1 : this.x greaterthan other.x || ((this.x == other.x) AND (this.y greaterthan other.y))\r\n /// \r\n /// Coordinate with which this Coordinate is being compared.\r\n /// \r\n /// A negative integer, zero, or a positive integer as this Coordinate\r\n /// is less than, equal to, or greater than the specified Coordinate.\r\n /// \r\n CompareTo(other)\r\n {\r\n if (other instanceof Coordinate) {\r\n if (this.X < other.X)\r\n return -1;\r\n if (this.X > other.X)\r\n return 1;\r\n if (this.Y < other.Y)\r\n return -1;\r\n return this.Y > other.Y ? 1 : 0;\r\n }\r\n\r\n return false;\r\n }\r\n \r\n /// \r\n /// Returns true if \r\n /// has the same values for X, Y and Z.\r\n /// \r\n /// A with which to do the 3D comparison.\r\n /// \r\n /// true if is a \r\n /// with the same values for X, Y and Z.\r\n /// \r\n Equals3D(other) {\r\n return (this.X == other.X) && (this.Y == other.Y) && ((this.Z == other.Z) || (isNaN(this.Z) && isNaN(other.Z)));\r\n }\r\n\r\n /// \r\n /// Tests if another coordinate has the same value for Z, within a tolerance.\r\n /// \r\n /// A .\r\n /// The tolerance value.\r\n /// true if the Z ordinates are within the given tolerance.\r\n EqualInZ(c, tolerance) {\r\n return this.EqualsWithTolerance(this.Z, c.Z, tolerance);\r\n }\r\n\r\n /// \r\n /// Returns a string of the form (x,y,z) .\r\n /// \r\n /// string of the form (x,y,z)\r\n ToString() {\r\n return `(${this.X}, ${this.Y}, ${this.Z})`;\r\n //return \"(\" + X.ToString(\"R\", NumberFormatInfo.InvariantInfo) + \", \" +\r\n // Y.ToString(\"R\", NumberFormatInfo.InvariantInfo) + \", \" +\r\n // Z.ToString(\"R\", NumberFormatInfo.InvariantInfo) + \")\";\r\n }\r\n\r\n /// \r\n /// Create a new object as copy of this instance.\r\n /// \r\n /// \r\n Copy() {\r\n return new Coordinate(this.X, this.Y, this.Z);\r\n }\r\n\r\n /// \r\n /// Computes the 2-dimensional Euclidean distance to another location.\r\n /// \r\n /// A with which to do the distance comparison.\r\n /// the 2-dimensional Euclidean distance between the locations.\r\n /// The Z-ordinate is ignored.\r\n Distance(c) {\r\n var dx = this.X - c.X;\r\n var dy = this.Y - c.Y;\r\n return Math.sqrt(dx * dx + dy * dy);\r\n }\r\n\r\n /// \r\n /// Computes the 3-dimensional Euclidean distance to another location.\r\n /// \r\n /// A with which to do the distance comparison.\r\n /// the 3-dimensional Euclidean distance between the locations.\r\n Distance3D(c) {\r\n var dx = this.X - c.X;\r\n var dy = this.Y - c.Y;\r\n var dz = this.Z - c.Z;\r\n return Math.sqrt(dx * dx + dy * dy + dz * dz);\r\n }\r\n\r\n /// \r\n /// Gets a hashcode for this coordinate.\r\n /// \r\n /// A hashcode for this coordinate.\r\n GetHashCode() {\r\n var result = 17;\r\n // ReSharper disable NonReadonlyFieldInGetHashCode\r\n result = 37 * result + GetHashCode(X);\r\n result = 37 * result + GetHashCode(Y);\r\n // ReSharper restore NonReadonlyFieldInGetHashCode\r\n return result;\r\n }\r\n\r\n /// \r\n /// Computes a hash code for a double value, using the algorithm from\r\n /// Joshua Bloch's book Effective Java\"\r\n /// \r\n /// A hashcode for the double value\r\n static GetHashCode(value)\r\n {\r\n // GetHashCode\r\n // This was implemented as follows, but that's actually equivalent:\r\n /*\r\n var f = BitConverter.DoubleToInt64Bits(value);\r\n return (int)(f ^ (f >> 32));\r\n */\r\n var f = (value >>> 0);\r\n return (f ^ (f >> 32)).toString(2)\r\n }\r\n\r\n dec2bin(dec){\r\n return (dec >>> 0).toString(2);\r\n } \r\n}\r\n\r\nCoordinate.NullOrdinate = NaN;\r\n","\nimport {TileSource} from './tilesource';\nimport {Bounds, Point} from '../geometry/index';\nimport {Rectangle, fromLTRB, fromRect} from '../geometry/rectangle';\nimport Axios from \"axios\";\nimport {Viewport} from '../drawing/viewport';\n\nexport const LoadStates = Object.freeze({\n Initial : Symbol(\"initial\"),\n Loading : Symbol(\"loading\"),\n Loaded : Symbol(\"loaded\"),\n Failed : Symbol(\"failed\")\n});\n\nexport class Tile {\n constructor(level, col, row, tileSource, viewport) {\n this.initialise();\n \n this.rect = undefined;\n this.canvas = undefined;\n this.viewport = viewport;\n\n this.tileSource = tileSource;\n this.image = null;\n this.Name = `${level}:${col},${row}`;\n this.Level = level;\n this.Col = col;\n this.Row = row;\n\n var googleTileSize = tileSource.getGoogleTileSize(level);\n var GoogleMinX = TileSource.GoogleExtents.MinX + (col * googleTileSize);\n var GoogleMaxX = GoogleMinX + googleTileSize;\n\n var GoogleMaxY = TileSource.GoogleExtents.MaxY - (row * googleTileSize);\n var GoogleMinY = GoogleMaxY - googleTileSize;\n\n this.GoogleBounds = new Bounds(new Point(GoogleMinX, GoogleMinY), new Point(GoogleMaxX, GoogleMaxY));\n this.LatLongBounds = new Bounds(new Point(0, 0), new Point(0, 0));\n \n this.tileSource.transformExtentsToLatLong(this.GoogleBounds,this.LatLongBounds);\n this.imageUrl = this.tileSource.getTileUrl(this.Level, this.Col, this.Row);\n this.references = 1;\n }\n \n \n render(context, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight, ) {\n \n let srcRect = fromLTRB(sx, sy, sWidth, sHeight);\n let dstRect = fromLTRB(dx, dy, dWidth, dHeight);\n \n if (this.imageState == LoadStates.Loaded) { \n let prevAlpha = context.globalAlpha;\n if(this.viewport.opacity != null) { \n context.globalAlpha = this.viewport.opacity;\n }\n\n context.drawImage(\n this.image, \n srcRect.left, \n srcRect.top, \n srcRect.width,\n srcRect.height,\n dstRect.left, \n dstRect.top, \n dstRect.width,\n dstRect.height,\n ); \n\n //Restore Alpha\n context.globalAlpha = prevAlpha;\n }\n }\n\n dispose() {\n this.imageState = LoadStates.Initial;\n this.Dereferenced = 0;\n this.references = 0;\n this.image = null;\n }\n\n initialise() {\n this.Name = '';\n this.Level = 0;\n this.Col = 0;\n this.Row = 0;\n\n this.Dereferenced = 0;\n this.references = 0;\n\n this.imageState = LoadStates.Initial;\n this.image = null; \n }\n\n // @section Properties\n get Image() {\n return this.image; \n }\n\n set Image(value) {\n if (this.imageState == LoadStates.Loading) {\n this.imageState = LoadStates.Loaded;\n this.image = value;\n }\n else {\n value = null;\n }\n }\n\n get ImageState() {\n return this.imageState; \n }\n\n set ImageState(value) { \n this.imageState = value; \n }\n\n get IsReferenced() {\n return (this.references > 0); \n }\n\n get GoogleMinX() {\n return this.GoogleBounds.MinX;\n }\n\n get GoogleMinY() {\n return this.GoogleBounds.MinY;\n }\n\n get GoogleMaxX() {\n return this.GoogleBounds.MaxX;\n }\n\n get GoogleMaxY() {\n return this.GoogleBounds.MaxY;\n }\n\n get LatLongMinX() {\n return this.LatLongBounds.MinX;\n }\n\n get LatLongMinY() {\n return this.LatLongBounds.MinY;\n }\n\n get LatLongMaxX() {\n return this.LatLongBounds.MaxX;\n }\n\n get LatLongMaxY() {\n return this.LatLongBounds.MaxY;\n }\n\n // @section Methods\n addReference() {\n return ++this.references;\n }\n\n dereference() {\n return --this.references;\n }\n\n // @section Object Methods\n compareTo(other) {\n return this.Name.localeCompare(other.Name);\n }\n\n\tequals(other) {\n return this.Name.localeCompare(other.Name);\n }\n\n toString() {\n return this.Name;\n }\n\n loadImage(src) {\n let __this = this;\n return new Promise((resolve, reject) => {\n if (__this.ImageState == LoadStates.Loaded) {\n __this.viewport.renderTile(__this);\n resolve(__this);\n }\n else {\n __this.image = new Image();\n __this.ImageState = LoadStates.Loading; \n __this.image.addEventListener(\"load\", () => {\n __this.ImageState = LoadStates.Loaded;\n __this.viewport.renderTile(__this);\n resolve(__this);\n });\n\n __this.image.addEventListener(\"error\", err => {\n __this.ImageState = LoadStates.Failed;\n resolve(__this);\n });\n\n // only WMTS has _layer field\n if (this.tileSource._layer != null){\n\n\n var credentials = Buffer.from(\"hmcdonald:Mipela2021\", \"ascii\");\n\n let options = {\n headers: {\n \"Authorization\": \"Basic \" + window.btoa(credentials)\n }\n }\n\n // gotta add auth headers to it...\n fetch(src, options)\n .then(res => res.blob())\n .then(blob => {\n __this.image.src = URL.createObjectURL(blob);\n })\n } else {\n __this.image.src = src;\n\n }\n\n }\n });\n }; \n}","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {LatLng} from '../LatLng';\r\nimport {LatLngBounds} from '../LatLngBounds';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.Base\r\n * Object that defines coordinate reference systems for projecting\r\n * geographical points into pixel (screen) coordinates and back (and to\r\n * coordinates in other units for [WMS](https://en.wikipedia.org/wiki/Web_Map_Service) services). See\r\n * [spatial reference system](http://en.wikipedia.org/wiki/Coordinate_reference_system).\r\n *\r\n * Leaflet defines the most usual CRSs by default. If you want to use a\r\n * CRS not defined by default, take a look at the\r\n * [Proj4Leaflet](https://github.com/kartena/Proj4Leaflet) plugin.\r\n *\r\n * Note that the CRS instances do not inherit from Leafet's `Class` object,\r\n * and can't be instantiated. Also, new classes can't inherit from them,\r\n * and methods can't be added to them with the `include` function.\r\n */\r\n\r\nexport var CRS = {\r\n\t// @method latLngToPoint(latlng: LatLng, zoom: Number): Point\r\n\t// Projects geographical coordinates into pixel coordinates for a given zoom.\r\n\tlatLngToPoint: function (latlng, zoom) {\r\n\t\tvar projectedPoint = this.projection.project(latlng),\r\n\t\t scale = this.scale(zoom);\r\n\r\n\t\treturn this.transformation._transform(projectedPoint, scale);\r\n\t},\r\n\r\n\t// @method pointToLatLng(point: Point, zoom: Number): LatLng\r\n\t// The inverse of `latLngToPoint`. Projects pixel coordinates on a given\r\n\t// zoom into geographical coordinates.\r\n\tpointToLatLng: function (point, zoom) {\r\n\t\tvar scale = this.scale(zoom),\r\n\t\t untransformedPoint = this.transformation.untransform(point, scale);\r\n\r\n\t\treturn this.projection.unproject(untransformedPoint);\r\n\t},\r\n\r\n\t// @method project(latlng: LatLng): Point\r\n\t// Projects geographical coordinates into coordinates in units accepted for\r\n\t// this CRS (e.g. meters for EPSG:3857, for passing it to WMS services).\r\n\tproject: function (latlng) {\r\n\t\treturn this.projection.project(latlng);\r\n\t},\r\n\r\n\t// @method unproject(point: Point): LatLng\r\n\t// Given a projected coordinate returns the corresponding LatLng.\r\n\t// The inverse of `project`.\r\n\tunproject: function (point) {\r\n\t\treturn this.projection.unproject(point);\r\n\t},\r\n\r\n\t// @method scale(zoom: Number): Number\r\n\t// Returns the scale used when transforming projected coordinates into\r\n\t// pixel coordinates for a particular zoom. For example, it returns\r\n\t// `256 * 2^zoom` for Mercator-based CRS.\r\n\tscale: function (zoom) {\r\n\t\treturn 256 * Math.pow(2, zoom);\r\n\t},\r\n\r\n\t// @method zoom(scale: Number): Number\r\n\t// Inverse of `scale()`, returns the zoom level corresponding to a scale\r\n\t// factor of `scale`.\r\n\tzoom: function (scale) {\r\n\t\treturn Math.log(scale / 256) / Math.LN2;\r\n\t},\r\n\r\n\t// @method getProjectedBounds(zoom: Number): Bounds\r\n\t// Returns the projection's bounds scaled and transformed for the provided `zoom`.\r\n\tgetProjectedBounds: function (zoom) {\r\n\t\tif (this.infinite) { return null; }\r\n\r\n\t\tvar b = this.projection.bounds,\r\n\t\t s = this.scale(zoom),\r\n\t\t min = this.transformation.transform(b.min, s),\r\n\t\t max = this.transformation.transform(b.max, s);\r\n\r\n\t\treturn new Bounds(min, max);\r\n\t},\r\n\r\n\t// @method distance(latlng1: LatLng, latlng2: LatLng): Number\r\n\t// Returns the distance between two geographical coordinates.\r\n\r\n\t// @property code: String\r\n\t// Standard code name of the CRS passed into WMS services (e.g. `'EPSG:3857'`)\r\n\t//\r\n\t// @property wrapLng: Number[]\r\n\t// An array of two numbers defining whether the longitude (horizontal) coordinate\r\n\t// axis wraps around a given range and how. Defaults to `[-180, 180]` in most\r\n\t// geographical CRSs. If `undefined`, the longitude axis does not wrap around.\r\n\t//\r\n\t// @property wrapLat: Number[]\r\n\t// Like `wrapLng`, but for the latitude (vertical) axis.\r\n\r\n\t// wrapLng: [min, max],\r\n\t// wrapLat: [min, max],\r\n\r\n\t// @property infinite: Boolean\r\n\t// If true, the coordinate space will be unbounded (infinite in both axes)\r\n\tinfinite: false,\r\n\r\n\t// @method wrapLatLng(latlng: LatLng): LatLng\r\n\t// Returns a `LatLng` where lat and lng has been wrapped according to the\r\n\t// CRS's `wrapLat` and `wrapLng` properties, if they are outside the CRS's bounds.\r\n\twrapLatLng: function (latlng) {\r\n\t\tvar lng = this.wrapLng ? Util.wrapNum(latlng.lng, this.wrapLng, true) : latlng.lng,\r\n\t\t lat = this.wrapLat ? Util.wrapNum(latlng.lat, this.wrapLat, true) : latlng.lat,\r\n\t\t alt = latlng.alt;\r\n\r\n\t\treturn new LatLng(lat, lng, alt);\r\n\t},\r\n\r\n\t// @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds\r\n\t// Returns a `LatLngBounds` with the same size as the given one, ensuring\r\n\t// that its center is within the CRS's bounds.\r\n\t// Only accepts actual `L.LatLngBounds` instances, not arrays.\r\n\twrapLatLngBounds: function (bounds) {\r\n\t\tvar center = bounds.getCenter(),\r\n\t\t newCenter = this.wrapLatLng(center),\r\n\t\t latShift = center.lat - newCenter.lat,\r\n\t\t lngShift = center.lng - newCenter.lng;\r\n\r\n\t\tif (latShift === 0 && lngShift === 0) {\r\n\t\t\treturn bounds;\r\n\t\t}\r\n\r\n\t\tvar sw = bounds.getSouthWest(),\r\n\t\t ne = bounds.getNorthEast(),\r\n\t\t newSw = new LatLng(sw.lat - latShift, sw.lng - lngShift),\r\n\t\t newNe = new LatLng(ne.lat - latShift, ne.lng - lngShift);\r\n\r\n\t\treturn new LatLngBounds(newSw, newNe);\r\n\t}\r\n};\r\n","var core = module.exports = { version: '2.6.11' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","'use strict';\nvar fails = require('./_fails');\n\nmodule.exports = function (method, arg) {\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call\n arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\n });\n};\n","import {Point} from './Point';\r\nimport * as Util from '../core/Util';\r\n\r\n/*\r\n * @class Transformation\r\n * @aka L.Transformation\r\n *\r\n * Represents an affine transformation: a set of coefficients `a`, `b`, `c`, `d`\r\n * for transforming a point of a form `(x, y)` into `(a*x + b, c*y + d)` and doing\r\n * the reverse. Used by Leaflet in its projections code.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var transformation = L.transformation(2, 5, -1, 10),\r\n * \tp = L.point(1, 2),\r\n * \tp2 = transformation.transform(p), // L.point(7, 8)\r\n * \tp3 = transformation.untransform(p2); // L.point(1, 2)\r\n * ```\r\n */\r\n\r\n\r\n// factory new L.Transformation(a: Number, b: Number, c: Number, d: Number)\r\n// Creates a `Transformation` object with the given coefficients.\r\nexport function Transformation(a, b, c, d) {\r\n\tif (Util.isArray(a)) {\r\n\t\t// use array properties\r\n\t\tthis._a = a[0];\r\n\t\tthis._b = a[1];\r\n\t\tthis._c = a[2];\r\n\t\tthis._d = a[3];\r\n\t\treturn;\r\n\t}\r\n\tthis._a = a;\r\n\tthis._b = b;\r\n\tthis._c = c;\r\n\tthis._d = d;\r\n}\r\n\r\nTransformation.prototype = {\r\n\t// @method transform(point: Point, scale?: Number): Point\r\n\t// Returns a transformed point, optionally multiplied by the given scale.\r\n\t// Only accepts actual `L.Point` instances, not arrays.\r\n\ttransform: function (point, scale) { // (Point, Number) -> Point\r\n\t\treturn this._transform(point.clone(), scale);\r\n\t},\r\n\r\n\t// destructive transform (faster)\r\n\t_transform: function (point, scale) {\r\n\t\tscale = scale || 1;\r\n\t\tpoint.x = scale * (this._a * point.x + this._b);\r\n\t\tpoint.y = scale * (this._c * point.y + this._d);\r\n\t\treturn point;\r\n\t},\r\n\r\n\t// @method untransform(point: Point, scale?: Number): Point\r\n\t// Returns the reverse transformation of the given point, optionally divided\r\n\t// by the given scale. Only accepts actual `L.Point` instances, not arrays.\r\n\tuntransform: function (point, scale) {\r\n\t\tscale = scale || 1;\r\n\t\treturn new Point(\r\n\t\t (point.x / scale - this._b) / this._a,\r\n\t\t (point.y / scale - this._d) / this._c);\r\n\t}\r\n};\r\n\r\n// factory L.transformation(a: Number, b: Number, c: Number, d: Number)\r\n\r\n// @factory L.transformation(a: Number, b: Number, c: Number, d: Number)\r\n// Instantiates a Transformation object with the given coefficients.\r\n\r\n// @alternative\r\n// @factory L.transformation(coefficients: Array): Transformation\r\n// Expects an coefficients array of the form\r\n// `[a: Number, b: Number, c: Number, d: Number]`.\r\n\r\nexport function toTransformation(a, b, c, d) {\r\n\treturn new Transformation(a, b, c, d);\r\n}\r\n","import {CRS} from './CRS';\nimport * as Util from '../../core/Util';\n\n/*\n * @namespace CRS\n * @crs L.CRS.Earth\n *\n * Serves as the base for CRS that are global such that they cover the earth.\n * Can only be used as the base for other CRS and cannot be used directly,\n * since it does not have a `code`, `projection` or `transformation`. `distance()` returns\n * meters.\n */\n\nexport var Earth = Util.extend({}, CRS, {\n\twrapLng: [-180, 180],\n\n\t// Mean Earth Radius, as recommended for use by\n\t// the International Union of Geodesy and Geophysics,\n\t// see http://rosettacode.org/wiki/Haversine_formula\n\tR: 6371000,\n\n\t// distance between two geographical points using spherical law of cosines approximation\n\tdistance: function (latlng1, latlng2) {\n\t\tvar rad = Math.PI / 180,\n\t\t lat1 = latlng1.lat * rad,\n\t\t lat2 = latlng2.lat * rad,\n\t\t sinDLat = Math.sin((latlng2.lat - latlng1.lat) * rad / 2),\n\t\t sinDLon = Math.sin((latlng2.lng - latlng1.lng) * rad / 2),\n\t\t a = sinDLat * sinDLat + Math.cos(lat1) * Math.cos(lat2) * sinDLon * sinDLon,\n\t\t c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n\t\treturn this.R * c;\n\t}\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","var Map = require('./es6.map');\nvar $export = require('./_export');\nvar shared = require('./_shared')('metadata');\nvar store = shared.store || (shared.store = new (require('./es6.weak-map'))());\n\nvar getOrCreateMetadataMap = function (target, targetKey, create) {\n var targetMetadata = store.get(target);\n if (!targetMetadata) {\n if (!create) return undefined;\n store.set(target, targetMetadata = new Map());\n }\n var keyMetadata = targetMetadata.get(targetKey);\n if (!keyMetadata) {\n if (!create) return undefined;\n targetMetadata.set(targetKey, keyMetadata = new Map());\n } return keyMetadata;\n};\nvar ordinaryHasOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? false : metadataMap.has(MetadataKey);\n};\nvar ordinaryGetOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);\n};\nvar ordinaryDefineOwnMetadata = function (MetadataKey, MetadataValue, O, P) {\n getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);\n};\nvar ordinaryOwnMetadataKeys = function (target, targetKey) {\n var metadataMap = getOrCreateMetadataMap(target, targetKey, false);\n var keys = [];\n if (metadataMap) metadataMap.forEach(function (_, key) { keys.push(key); });\n return keys;\n};\nvar toMetaKey = function (it) {\n return it === undefined || typeof it == 'symbol' ? it : String(it);\n};\nvar exp = function (O) {\n $export($export.S, 'Reflect', O);\n};\n\nmodule.exports = {\n store: store,\n map: getOrCreateMetadataMap,\n has: ordinaryHasOwnMetadata,\n get: ordinaryGetOwnMetadata,\n set: ordinaryDefineOwnMetadata,\n keys: ordinaryOwnMetadataKeys,\n key: toMetaKey,\n exp: exp\n};\n","module.exports = false;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","/**\r\n The Colour object allows conversion of colours between strings and several\r\n other colour spaces.\r\n The colour has two public members. It's type is the type of colour space. Its\r\n values are an array of numbers specifying the colour coordinates. These\r\n coordinates depend on the type of colour space used.\r\n @constructor\r\n @param {number} type\r\n @param {Array.} values\r\n */ \r\nfunction Colour(type, values)\r\n{\r\n this.type = type;\r\n this.values = values;\r\n\r\n if ( this.values.length < 4 ) {\r\n throw \"Bad value\";\r\n }\r\n}\r\n\r\n// Here is an enumeration of colour spaces.\r\n\r\n// RGBA. All components are in the range 0..1\r\nColour.RGBA = 0;\r\n\r\n// CIE XYZ, with added alpha value.\r\nColour.XYZA = 1;\r\n\r\n// Hue/Saturation/Value. Hue is in the range 0...360 and the others are 0...1\r\nColour.HSVA = 2;\r\n\r\n// CIE LAB 1976 colour space, with added alpha component.\r\nColour.LABA = 3;\r\n\r\nColour.LAST_COLOURSPACE = 3;\r\n\r\n/**\r\n Creates an RGBA colour object from the given string. If the string is not\r\n valid, a default colour of magenta is used. Valid strings are one of the\r\n following:\r\n 1. A standard CSS colour name (eg. \"Blue\"). The case does not matter.\r\n 2. A CSS hex string with 6 digits. Eg. #80ff00\r\n 3. An rgba value. Eg. rgba( 128, 255, 0, 1.0 ). Note the last component must\r\n be in the range 0..1 and the others are in the range 0..255.\r\n @param {string} colourString\r\n @return {Colour}\r\n */ \r\nColour.fromString = function( colourString )\r\n{\r\n if ( colourString.toLowerCase() in Colour.CssColours ) {\r\n colourString = Colour.CssColours[colourString.toLowerCase()];\r\n }\r\n\r\n var hex6 = /\\#([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])/i;\r\n var rgbStr = /rgba\\( *([0-9]+) *, *([0-9]+) *, *([0-9]+) *, *([0-9\\.]+) *\\)/;\r\n var r, g, b,a;\r\n\r\n var m = hex6.exec( colourString );\r\n if ( m !== null ) {\r\n r = parseInt( m[1], 16 ) / 255;\r\n g = parseInt( m[2], 16 ) / 255;\r\n b = parseInt( m[3], 16 ) / 255;\r\n a = 1.0;\r\n } else {\r\n m = rgbStr.exec( colourString );\r\n if ( m !== null ) {\r\n r = parseFloat(m[1])/255;\r\n g = parseFloat(m[2])/255;\r\n b = parseFloat(m[3])/255;\r\n a = parseFloat(m[4]);\r\n } else {\r\n // default colour\r\n r = 1.0;\r\n g = 0.0;\r\n b = 1.0;\r\n a = 1.0;\r\n }\r\n }\r\n\r\n return new Colour( Colour.RGBA, [r, g, b, a] );\r\n};\r\n\r\nColour.prototype = {\r\n\r\n /**\r\n Converts the colour to a string. The string is formatted such that it can\r\n be used to set the fillStyle or strokeStyle of an HTML5 Canvas 2d context.\r\n @return {string}\r\n */ \r\n toString: function()\r\n {\r\n function toHex(val)\r\n {\r\n val = Math.round( val * 255 );\r\n if ( val < 16 ) {\r\n return \"0\" + val.toString(16);\r\n } else {\r\n return val.toString(16);\r\n }\r\n }\r\n\r\n var clr = this.convertTo( Colour.RGBA );\r\n\r\n if ( clr.values[3] === 1.0 ) {\r\n return \"#\" + \r\n toHex( clr.values[0] ) +\r\n toHex( clr.values[1] ) +\r\n toHex( clr.values[2] );\r\n } else {\r\n return \"rgba(\" + \r\n Math.round(clr.values[0]*255) + \",\" +\r\n Math.round(clr.values[1]*255) + \",\" +\r\n Math.round(clr.values[2]*255) + \",\" +\r\n clr.values[3] + \")\";\r\n }\r\n },\r\n\r\n /**\r\n Returns a new colour object, converting to the given colour space.\r\n @param {number} type\r\n @return {Colour}\r\n */ \r\n convertTo: function( type )\r\n {\r\n return Colour.converters[this.type][type](this);\r\n },\r\n\r\n /**\r\n Returns the distance between this colour and another, using the colour\r\n space of this colour. If the other colour is another colour space, it is\r\n converted before the calculation is done.\r\n */\r\n distanceTo: function( colour )\r\n {\r\n if ( colour.type != this.type ) {\r\n colour = colour.convertTo( this.type );\r\n }\r\n\r\n if ( this.type == Colour.HSVA ) {\r\n // Hue goes from 0 to 360, unlike other colour schemes, so it needs\r\n // to be scaled relative to the other values. It must also wrap\r\n // around.\r\n\r\n var a = this.values[0], b = colour.values[0];\r\n if ( a > b ) {\r\n hueDiff = Math.min( a - b, b - a + 360 );\r\n } else {\r\n hueDiff = Math.min( b - a, a - b + 360 );\r\n }\r\n\r\n hueDiff /= 360;\r\n\r\n return Math.pow( \r\n hueDiff * hueDiff + \r\n ( this.values[1] - colour.values[1] ) *\r\n ( this.values[1] - colour.values[1] ) +\r\n ( this.values[2] - colour.values[2] ) *\r\n ( this.values[2] - colour.values[2] ), 0.5 );\r\n\r\n } else {\r\n return Math.pow( \r\n ( this.values[0] - colour.values[0] ) *\r\n ( this.values[0] - colour.values[0] ) +\r\n ( this.values[1] - colour.values[1] ) *\r\n ( this.values[1] - colour.values[1] ) +\r\n ( this.values[2] - colour.values[2] ) *\r\n ( this.values[2] - colour.values[2] ), 0.5 );\r\n }\r\n }\r\n\r\n};\r\n\r\n(function(){\r\n\r\n var WHITE = {X: 0.9505, Y: 1.0000, Z: 1.0890};\r\n\r\n /**\r\n @param {Colour} clr\r\n @return {Colour}\r\n */ \r\n function convert_HSVA_RGBA( clr )\r\n {\r\n var h = clr.values[0];\r\n var s = clr.values[1];\r\n var v = clr.values[2];\r\n if ( h < 0 ) { h += 360; }\r\n var hi = Math.floor( h / 60 ) % 6;\r\n var f = h / 60 - Math.floor( h / 60 );\r\n var p = v * (1 - s);\r\n var q = v * (1 - f * s);\r\n var t = v * (1 - ( 1 - f ) * s );\r\n var r, g, b;\r\n switch( hi ) {\r\n case 0: \r\n r = v;\r\n g = t;\r\n b = p;\r\n break;\r\n case 1: \r\n r = q;\r\n g = v;\r\n b = p;\r\n break;\r\n case 2: \r\n r = p;\r\n g = v;\r\n b = t;\r\n break;\r\n case 3: \r\n r = p;\r\n g = q;\r\n b = v;\r\n break;\r\n case 4: \r\n r = t;\r\n g = p;\r\n b = v;\r\n break;\r\n case 5: \r\n r = v;\r\n g = p;\r\n b = q;\r\n break;\r\n }\r\n\r\n return new Colour( Colour.RGBA, [ r, g, b, clr.values[3] ] );\r\n }\r\n\r\n /**\r\n @param {Colour} clr\r\n @return {Colour}\r\n */ \r\n function convert_RGBA_HSVA( clr )\r\n {\r\n var h, s, v;\r\n var r = clr.values[0];\r\n var g = clr.values[1];\r\n var b = clr.values[2];\r\n var max = Math.max( r, g, b );\r\n var min = Math.min( r, g, b );\r\n if ( max === min ) {\r\n h = 0;\r\n } else if ( max === r ) {\r\n h = ( 60 * (g - b) / ( max - min ) + 360 ) % 360;\r\n } else if ( max === g ) {\r\n h = 60 * ( b - r ) / ( max - min ) + 120;\r\n } else if ( max === b ) {\r\n h = 60 * ( r - g ) / ( max - min ) + 240;\r\n }\r\n\r\n if ( max === 0 ) {\r\n s = 0;\r\n } else {\r\n s = 1 - min / max;\r\n }\r\n\r\n v = max;\r\n\r\n return new Colour( Colour.HSVA, [ h, s, v, clr.values[3] ] );\r\n }\r\n\r\n /**\r\n @param {Colour} clr\r\n @return {Colour}\r\n */ \r\n function convert_XYZA_LABA( clr ) \r\n {\r\n function f(t) \r\n {\r\n if ( t > ( 6.0 / 29.0 ) * ( 6.0 / 29.0 ) * (6.0 / 29.0 ) ) {\r\n return Math.pow( t, 1.0 / 3.0 );\r\n } else {\r\n return ( 1.0 / 3.0 ) * \r\n ( ( 29.0 / 6.0 ) * ( 29.0 / 6.0 ) ) * \r\n t +\r\n 4.0 / 29.0;\r\n }\r\n }\r\n\r\n var X = f( clr.values[0] / WHITE.X );\r\n var Y = f( clr.values[1] / WHITE.Y );\r\n var Z = f( clr.values[2] / WHITE.Z );\r\n\r\n return new Colour( Colour.LABA, \r\n [116 * Y - 16,\r\n 500 * ( X - Y ),\r\n 200 * ( Y - Z ),\r\n clr.values[3] ] );\r\n }\r\n\r\n /**\r\n @param {Colour} clr\r\n @return {Colour}\r\n */ \r\n function convert_LABA_XYZA( clr )\r\n {\r\n var fy = ( clr.values[0] + 16 ) / 116;\r\n var fx = fy + clr.values[1] / 500;\r\n var fz = fy - clr.values[2] / 200;\r\n\r\n var squiggle = 6.0 / 29;\r\n var X, Y, Z;\r\n\r\n if ( fy > squiggle ) {\r\n Y = WHITE.Y * fy * fy * fy;\r\n } else {\r\n Y = ( fy - 16.0 / 116 ) * 3 * squiggle * squiggle * WHITE.Y;\r\n }\r\n\r\n if ( fx > squiggle ) {\r\n X = WHITE.X * fx * fx * fx;\r\n } else {\r\n X = ( fx - 16.0 / 116 ) * 3 * squiggle * squiggle * WHITE.X;\r\n }\r\n\r\n if ( fz > squiggle ) {\r\n Z = WHITE.Z * fz * fz * fz;\r\n } else {\r\n Z = ( fz - 16.0 / 116 ) * 3 * squiggle * squiggle * WHITE.z;\r\n }\r\n\r\n return new Colour( Colour.XYZ, [X, Y, Z, clr.values[3]] );\r\n }\r\n\r\n /**\r\n @param {Colour} rgb\r\n @return {Colour}\r\n */ \r\n function convert_RGBA_XYZA( rgb )\r\n {\r\n var temp = [];\r\n\r\n for ( var i = 0; i < 3; i++ ) {\r\n if ( rgb.values[i] <= 0.04045 ) {\r\n temp[i] = rgb.values[i] / 12.92;\r\n } else {\r\n temp[i] = Math.pow( (rgb.values[i]+0.055)/1.055, 2.4 );\r\n }\r\n }\r\n\r\n return new Colour( Colour.XYZA, [\r\n 0.4124*temp[0]+0.3576*temp[1]+0.1805*temp[2],\r\n 0.2126*temp[0]+0.7152*temp[1]+0.0722*temp[2],\r\n 0.0193*temp[0]+0.1192*temp[1]+0.9505*temp[2],\r\n rgb.values[3] ] );\r\n }\r\n\r\n /**\r\n @param {Colour} xyz\r\n @return {Colour}\r\n */ \r\n function convert_XYZA_RGBA( xyz )\r\n {\r\n var temp = [];\r\n var values = [];\r\n\r\n temp[0] = 3.2410 * xyz.X - 1.5374 * xyz.Y - 0.4986 * xyz.Z;\r\n temp[1] = -0.9692 * xyz.X + 1.8760 * xyz.Y + 0.0416 * xyz.Z;\r\n temp[2] = 0.0556 * xyz.X - 0.2040 * xyz.Y + 1.0570 * xyz.Z;\r\n\r\n for ( var i = 0; i < 3; i++ ) {\r\n if ( temp[i] <= 0.0031308 ) {\r\n values[i] = 12.92 * temp[i];\r\n } else {\r\n values[i] = 1.055 * Math.pow( temp[i], 1.0 / 2.4 ) - 0.055;\r\n }\r\n }\r\n\r\n values[3] = xyz.values[3];\r\n\r\n return new Colour( Colour.RGBA, values );\r\n }\r\n\r\n /**\r\n @param {Colour} clr\r\n @return {Colour}\r\n */ \r\n function convert_SAME( clr )\r\n {\r\n return new Colour( clr.type, clr.values.concat() );\r\n }\r\n\r\n /**\r\n @param {Colour} clr\r\n @return {Colour}\r\n */ \r\n function convert_RGBA_LABA( clr )\r\n {\r\n return convert_XYZA_LABA( \r\n convert_RGBA_XYZA( clr ) );\r\n }\r\n\r\n /**\r\n @param {Colour} clr\r\n @return {Colour}\r\n */ \r\n function convert_LABA_RGBA( clr )\r\n {\r\n return convert_XYZA_RGBA( \r\n convert_LABA_XYZA( clr ) );\r\n }\r\n\r\n /**\r\n @param {Colour} clr\r\n @return {Colour}\r\n */ \r\n function convert_XYZA_HSVA( clr )\r\n {\r\n return convert_RGBA_HSVA( \r\n convert_XYZA_RGBA( clr ) );\r\n }\r\n\r\n /**\r\n @param {Colour} clr\r\n @return {Colour}\r\n */ \r\n function convert_HSVA_XYZA( clr )\r\n {\r\n return convert_RGBA_XYZA( \r\n convert_HSVA_RGBA( clr ) );\r\n }\r\n\r\n /**\r\n @param {Colour} clr\r\n @return {Colour}\r\n */ \r\n function convert_HSVA_LABA( clr )\r\n {\r\n return convert_RGBA_LABA( \r\n convert_HSVA_RGBA( clr ) );\r\n }\r\n\r\n /**\r\n @param {Colour} clr\r\n @return {Colour}\r\n */ \r\n function convert_LABA_HSVA( clr )\r\n {\r\n return convert_XYZA_HSVA( \r\n convert_LABA_XYZA( clr ) );\r\n }\r\n\r\n Colour.converters = [\r\n [ convert_SAME,\r\n convert_RGBA_XYZA,\r\n convert_RGBA_HSVA,\r\n convert_RGBA_LABA ],\r\n\r\n [ convert_XYZA_RGBA,\r\n convert_SAME,\r\n convert_XYZA_HSVA,\r\n convert_XYZA_LABA ],\r\n\r\n [ convert_HSVA_RGBA,\r\n convert_HSVA_XYZA,\r\n convert_SAME,\r\n convert_HSVA_LABA ],\r\n\r\n [ convert_LABA_RGBA,\r\n convert_LABA_XYZA,\r\n convert_LABA_HSVA,\r\n convert_SAME ]\r\n ];\r\n}());\r\n\r\nColour.CssColours = {\r\n \"aliceblue\": \"#f0f8ff\",\r\n \"antiquewhite\": \"#faebd7\",\r\n \"aqua\": \"#00ffff\",\r\n \"aquamarine\": \"#7fffd4\",\r\n \"azure\": \"#f0ffff\",\r\n \"beige\": \"#f5f5dc\",\r\n \"bisque\": \"#ffe4c4\",\r\n \"black\": \"#000000\",\r\n \"blanchedalmond\": \"#ffebcd\",\r\n \"blue\": \"#0000ff\",\r\n \"blueviolet\": \"#8a2be2\",\r\n \"brown\": \"#a52a2a\",\r\n \"burlywood\": \"#deb887\",\r\n \"cadetblue\": \"#5f9ea0\",\r\n \"chartreuse\": \"#7fff00\",\r\n \"chocolate\": \"#d2691e\",\r\n \"coral\": \"#ff7f50\",\r\n \"cornflowerblue\": \"#6495ed\",\r\n \"cornsilk\": \"#fff8dc\",\r\n \"crimson\": \"#dc143c\",\r\n \"cyan\": \"#00ffff\",\r\n \"darkblue\": \"#00008b\",\r\n \"darkcyan\": \"#008b8b\",\r\n \"darkgoldenrod\": \"#b8860b\",\r\n \"darkgray\": \"#a9a9a9\",\r\n \"darkgreen\": \"#006400\",\r\n \"darkkhaki\": \"#bdb76b\",\r\n \"darkmagenta\": \"#8b008b\",\r\n \"darkolivegreen\": \"#556b2f\",\r\n \"darkorange\": \"#ff8c00\",\r\n \"darkorchid\": \"#9932cc\",\r\n \"darkred\": \"#8b0000\",\r\n \"darksalmon\": \"#e9967a\",\r\n \"darkseagreen\": \"#8fbc8f\",\r\n \"darkslateblue\": \"#483d8b\",\r\n \"darkslategray\": \"#2f4f4f\",\r\n \"darkturquoise\": \"#00ced1\",\r\n \"darkviolet\": \"#9400d3\",\r\n \"deeppink\": \"#ff1493\",\r\n \"deepskyblue\": \"#00bfff\",\r\n \"dimgray\": \"#696969\",\r\n \"dodgerblue\": \"#1e90ff\",\r\n \"firebrick\": \"#b22222\",\r\n \"floralwhite\": \"#fffaf0\",\r\n \"forestgreen\": \"#228b22\",\r\n \"fuchsia\": \"#ff00ff\",\r\n \"gainsboro\": \"#dcdcdc\",\r\n \"ghostwhite\": \"#f8f8ff\",\r\n \"gold\": \"#ffd700\",\r\n \"goldenrod\": \"#daa520\",\r\n \"gray\": \"#808080\",\r\n \"green\": \"#008000\",\r\n \"greenyellow\": \"#adff2f\",\r\n \"honeydew\": \"#f0fff0\",\r\n \"hotpink\": \"#ff69b4\",\r\n \"indianred\": \"#cd5c5c\",\r\n \"indigo\": \"#4b0082\",\r\n \"ivory\": \"#fffff0\",\r\n \"khaki\": \"#f0e68c\",\r\n \"lavender\": \"#e6e6fa\",\r\n \"lavenderblush\": \"#fff0f5\",\r\n \"lawngreen\": \"#7cfc00\",\r\n \"lemonchiffon\": \"#fffacd\",\r\n \"lightblue\": \"#add8e6\",\r\n \"lightcoral\": \"#f08080\",\r\n \"lightcyan\": \"#e0ffff\",\r\n \"lightgoldenrodyellow\": \"#fafad2\",\r\n \"lightgreen\": \"#90ee90\",\r\n \"lightgrey\": \"#d3d3d3\",\r\n \"lightpink\": \"#ffb6c1\",\r\n \"lightsalmon\": \"#ffa07a\",\r\n \"lightseagreen\": \"#20b2aa\",\r\n \"lightskyblue\": \"#87cefa\",\r\n \"lightslategray\": \"#778899\",\r\n \"lightsteelblue\": \"#b0c4de\",\r\n \"lightyellow\": \"#ffffe0\",\r\n \"lime\": \"#00ff00\",\r\n \"limegreen\": \"#32cd32\",\r\n \"linen\": \"#faf0e6\",\r\n \"magenta\": \"#ff00ff\",\r\n \"maroon\": \"#800000\",\r\n \"mediumaquamarine\": \"#66cdaa\",\r\n \"mediumblue\": \"#0000cd\",\r\n \"mediumorchid\": \"#ba55d3\",\r\n \"mediumpurple\": \"#9370d8\",\r\n \"mediumseagreen\": \"#3cb371\",\r\n \"mediumslateblue\": \"#7b68ee\",\r\n \"mediumspringgreen\": \"#00fa9a\",\r\n \"mediumturquoise\": \"#48d1cc\",\r\n \"mediumvioletred\": \"#c71585\",\r\n \"midnightblue\": \"#191970\",\r\n \"mintcream\": \"#f5fffa\",\r\n \"mistyrose\": \"#ffe4e1\",\r\n \"moccasin\": \"#ffe4b5\",\r\n \"navajowhite\": \"#ffdead\",\r\n \"navy\": \"#000080\",\r\n \"oldlace\": \"#fdf5e6\",\r\n \"olive\": \"#808000\",\r\n \"olivedrab\": \"#6b8e23\",\r\n \"orange\": \"#ffa500\",\r\n \"orangered\": \"#ff4500\",\r\n \"orchid\": \"#da70d6\",\r\n \"palegoldenrod\": \"#eee8aa\",\r\n \"palegreen\": \"#98fb98\",\r\n \"paleturquoise\": \"#afeeee\",\r\n \"palevioletred\": \"#d87093\",\r\n \"papayawhip\": \"#ffefd5\",\r\n \"peachpuff\": \"#ffdab9\",\r\n \"peru\": \"#cd853f\",\r\n \"pink\": \"#ffc0cb\",\r\n \"plum\": \"#dda0dd\",\r\n \"powderblue\": \"#b0e0e6\",\r\n \"purple\": \"#800080\",\r\n \"red\": \"#ff0000\",\r\n \"rosybrown\": \"#bc8f8f\",\r\n \"royalblue\": \"#4169e1\",\r\n \"saddlebrown\": \"#8b4513\",\r\n \"salmon\": \"#fa8072\",\r\n \"sandybrown\": \"#f4a460\",\r\n \"seagreen\": \"#2e8b57\",\r\n \"seashell\": \"#fff5ee\",\r\n \"sienna\": \"#a0522d\",\r\n \"silver\": \"#c0c0c0\",\r\n \"skyblue\": \"#87ceeb\",\r\n \"slateblue\": \"#6a5acd\",\r\n \"slategray\": \"#708090\",\r\n \"snow\": \"#fffafa\",\r\n \"springgreen\": \"#00ff7f\",\r\n \"steelblue\": \"#4682b4\",\r\n \"tan\": \"#d2b48c\",\r\n \"teal\": \"#008080\",\r\n \"thistle\": \"#d8bfd8\",\r\n \"tomato\": \"#ff6347\",\r\n \"turquoise\": \"#40e0d0\",\r\n \"violet\": \"#ee82ee\",\r\n \"wheat\": \"#f5deb3\",\r\n \"white\": \"#ffffff\",\r\n \"whitesmoke\": \"#f5f5f5\",\r\n \"yellow\": \"#ffff00\",\r\n \"yellowgreen\": \"#9acd32\",\r\n \"none\": \"#ffffff00\"\r\n};\r\n\r\nmodule.exports = Colour;","import * as Util from './Util';\r\nimport {Class} from './Class';\r\n/*\r\n * @class Evented\r\n * @aka L.Evented\r\n * @inherits Class\r\n *\r\n * A set of methods shared between event-powered classes (like `Map` and `Marker`). Generally, events allow you to execute some function when something happens with an object (e.g. the user clicks on the map, causing the map to fire `'click'` event).\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * map.on('click', function(e) {\r\n * \talert(e.latlng);\r\n * } );\r\n * ```\r\n *\r\n * Leaflet deals with event listeners by reference, so if you want to add a listener and then remove it, define it as a function:\r\n *\r\n * ```js\r\n * function onClick(e) { ... }\r\n *\r\n * map.on('click', onClick);\r\n * map.off('click', onClick);\r\n * ```\r\n */\r\n\r\nexport class Events {\r\n\tconstructor() {\r\n\t\t\r\n\t}\r\n\t/* @method on(type: String, fn: Function, context?: Object): this\r\n\t * Adds a listener function (`fn`) to a particular event type of the object. You can optionally specify the context of the listener (object the this keyword will point to). You can also pass several space-separated types (e.g. `'click dblclick'`).\r\n\t *\r\n\t * @alternative\r\n\t * @method on(eventMap: Object): this\r\n\t * Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\n\t */\r\n\ton(types, fn, context) {\r\n\r\n\t\t// types can be a map of types/handlers\r\n\t\tif (typeof types === 'object') {\r\n\t\t\tfor (var type in types) {\r\n\t\t\t\t// we don't process space-separated events here for performance;\r\n\t\t\t\t// it's a hot path since Layer uses the on(obj) syntax\r\n\t\t\t\tthis._on(type, types[type], fn);\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\t// types can be a string of space-separated words\r\n\t\t\ttypes = Util.splitWords(types);\r\n\r\n\t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\t\tthis._on(types[i], fn, context);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/* @method off(type: String, fn?: Function, context?: Object): this\r\n\t * Removes a previously added listener function. If no function is specified, it will remove all the listeners of that particular event from the object. Note that if you passed a custom context to `on`, you must pass the same context to `off` in order to remove the listener.\r\n\t *\r\n\t * @alternative\r\n\t * @method off(eventMap: Object): this\r\n\t * Removes a set of type/listener pairs.\r\n\t *\r\n\t * @alternative\r\n\t * @method off: this\r\n\t * Removes all listeners to all events on the object. This includes implicitly attached events.\r\n\t */\r\n\toff(types, fn, context) {\r\n\r\n\t\tif (!types) {\r\n\t\t\t// clear all listeners if called without arguments\r\n\t\t\tdelete this._events;\r\n\r\n\t\t} else if (typeof types === 'object') {\r\n\t\t\tfor (var type in types) {\r\n\t\t\t\tthis._off(type, types[type], fn);\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\ttypes = Util.splitWords(types);\r\n\r\n\t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\t\tthis._off(types[i], fn, context);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t// attach listener (without syntactic sugar now)\r\n\t_on(type, fn, context) {\r\n\t\tthis._events = this._events || {};\r\n\r\n\t\t/* get/init listeners for type */\r\n\t\tvar typeListeners = this._events[type];\r\n\t\tif (!typeListeners) {\r\n\t\t\ttypeListeners = [];\r\n\t\t\tthis._events[type] = typeListeners;\r\n\t\t}\r\n\r\n\t\tif (context === this) {\r\n\t\t\t// Less memory footprint.\r\n\t\t\tcontext = undefined;\r\n\t\t}\r\n\t\tvar newListener = {fn: fn, ctx: context},\r\n\t\t listeners = typeListeners;\r\n\r\n\t\t// check if fn already there\r\n\t\tfor (var i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\tif (listeners[i].fn === fn && listeners[i].ctx === context) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlisteners.push(newListener);\r\n\t}\r\n\r\n\t_off(type, fn, context) {\r\n\t\tvar listeners,\r\n\t\t i,\r\n\t\t len;\r\n\r\n\t\tif (!this._events) { return; }\r\n\r\n\t\tlisteners = this._events[type];\r\n\r\n\t\tif (!listeners) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!fn) {\r\n\t\t\t// Set all removed listeners to noop so they are not called if remove happens in fire\r\n\t\t\tfor (i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\t\tlisteners[i].fn = Util.falseFn;\r\n\t\t\t}\r\n\t\t\t// clear all listeners for a type if function isn't specified\r\n\t\t\tdelete this._events[type];\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (context === this) {\r\n\t\t\tcontext = undefined;\r\n\t\t}\r\n\r\n\t\tif (listeners) {\r\n\r\n\t\t\t// find fn and remove it\r\n\t\t\tfor (i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\t\tvar l = listeners[i];\r\n\t\t\t\tif (l.ctx !== context) { continue; }\r\n\t\t\t\tif (l.fn === fn) {\r\n\r\n\t\t\t\t\t// set the removed listener to noop so that's not called if remove happens in fire\r\n\t\t\t\t\tl.fn = Util.falseFn;\r\n\r\n\t\t\t\t\tif (this._firingCount) {\r\n\t\t\t\t\t\t/* copy array in case events are being fired */\r\n\t\t\t\t\t\tthis._events[type] = listeners = listeners.slice();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlisteners.splice(i, 1);\r\n\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// @method fire(type: String, data?: Object, propagate?: Boolean): this\r\n\t// Fires an event of the specified type. You can optionally provide an data\r\n\t// object — the first argument of the listener function will contain its\r\n\t// properties. The event can optionally be propagated to event parents.\r\n\tfire(type, data, propagate) {\r\n\t\tif (!this.listens(type, propagate)) { return this; }\r\n\r\n\t\tvar event = Util.extend({}, data, {\r\n\t\t\ttype: type,\r\n\t\t\ttarget: this,\r\n\t\t\tsourceTarget: data && data.sourceTarget || this\r\n\t\t});\r\n\r\n\t\tif (this._events) {\r\n\t\t\tvar listeners = this._events[type];\r\n\r\n\t\t\tif (listeners) {\r\n\t\t\t\tthis._firingCount = (this._firingCount + 1) || 1;\r\n\t\t\t\tfor (var i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\t\t\tvar l = listeners[i];\r\n\t\t\t\t\tl.fn.call(l.ctx || this, event);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._firingCount--;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (propagate) {\r\n\t\t\t// propagate the event to parents (set with addEventParent)\r\n\t\t\tthis._propagateEvent(event);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t// @method listens(type: String): Boolean\r\n\t// Returns `true` if a particular event type has any listeners attached to it.\r\n\tlistens(type, propagate) {\r\n\t\tvar listeners = this._events && this._events[type];\r\n\t\tif (listeners && listeners.length) { return true; }\r\n\r\n\t\tif (propagate) {\r\n\t\t\t// also check parents for listeners if event propagates\r\n\t\t\tfor (var id in this._eventParents) {\r\n\t\t\t\tif (this._eventParents[id].listens(type, propagate)) { return true; }\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\t// @method once(…): this\r\n\t// Behaves as [`on(…)`](#evented-on), except the listener will only get fired once and then removed.\r\n\tonce(types, fn, context) {\r\n\r\n\t\tif (typeof types === 'object') {\r\n\t\t\tfor (var type in types) {\r\n\t\t\t\tthis.once(type, types[type], fn);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tvar handler = Util.bind(function () {\r\n\t\t\tthis\r\n\t\t\t .off(types, fn, context)\r\n\t\t\t .off(types, handler, context);\r\n\t\t}, this);\r\n\r\n\t\t// add a listener that's executed once and removed after that\r\n\t\treturn this\r\n\t\t .on(types, fn, context)\r\n\t\t .on(types, handler, context);\r\n\t}\r\n\r\n\t// @method addEventParent(obj: Evented): this\r\n\t// Adds an event parent - an `Evented` that will receive propagated events\r\n\taddEventParent(obj) {\r\n\t\tthis._eventParents = this._eventParents || {};\r\n\t\tthis._eventParents[Util.stamp(obj)] = obj;\r\n\t\treturn this;\r\n\t}\r\n\r\n\t// @method removeEventParent(obj: Evented): this\r\n\t// Removes an event parent, so it will stop receiving propagated events\r\n\tremoveEventParent(obj) {\r\n\t\tif (this._eventParents) {\r\n\t\t\tdelete this._eventParents[Util.stamp(obj)];\r\n\t\t}\r\n\t\treturn this;\r\n\t}\r\n\r\n\t_propagateEvent(e) {\r\n\t\tfor (var id in this._eventParents) {\r\n\t\t\tthis._eventParents[id].fire(e.type, Util.extend({\r\n\t\t\t\tlayer: e.target,\r\n\t\t\t\tpropagatedFrom: e.target\r\n\t\t\t}, e), true);\r\n\t\t}\r\n\t}\r\n}\r\n\r\n// aliases; we should ditch those eventually\r\n\r\n// @method addEventListener(…): this\r\n// Alias to [`on(…)`](#evented-on)\r\nEvents.addEventListener = Events.on;\r\n\r\n// @method removeEventListener(…): this\r\n// Alias to [`off(…)`](#evented-off)\r\n\r\n// @method clearAllEventListeners(…): this\r\n// Alias to [`off()`](#evented-off)\r\nEvents.removeEventListener = Events.clearAllEventListeners = Events.off;\r\n\r\n// @method addOneTimeEventListener(…): this\r\n// Alias to [`once(…)`](#evented-once)\r\nEvents.addOneTimeEventListener = Events.once;\r\n\r\n// @method fireEvent(…): this\r\n// Alias to [`fire(…)`](#evented-fire)\r\nEvents.fireEvent = Events.fire;\r\n\r\n// @method hasEventListeners(…): Boolean\r\n// Alias to [`listens(…)`](#evented-listens)\r\nEvents.hasEventListeners = Events.listens;\r\n\r\nexport var Evented = Class.extend(Events);\r\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n","module.exports = {};\n","import * as Util from './Util';\r\n\r\n// @class Class\r\n// @aka L.Class\r\n\r\n// @section\r\n// @uninheritable\r\n\r\n// Thanks to John Resig and Dean Edwards for inspiration!\r\n\r\nexport class Class {}\r\n\r\nClass.extend = function (props) {\r\n\r\n\t// @function extend(props: Object): Function\r\n\t// [Extends the current class](#class-inheritance) given the properties to be included.\r\n\t// Returns a Javascript function that is a class constructor (to be called with `new`).\r\n\tvar NewClass = function () {\r\n\r\n\t\t// call the constructor\r\n\t\tif (this.initialize) {\r\n\t\t\tthis.initialize.apply(this, arguments);\r\n\t\t}\r\n\r\n\t\t// call all constructor hooks\r\n\t\tthis.callInitHooks();\r\n\t};\r\n\r\n\tvar parentProto = NewClass.__super__ = this.prototype;\r\n\r\n\tvar proto = Util.create(parentProto);\r\n\tproto.constructor = NewClass;\r\n\r\n\tNewClass.prototype = proto;\r\n\r\n\t// inherit parent's statics\r\n\tfor (var i in this) {\r\n\t\tif (this.hasOwnProperty(i) && i !== 'prototype' && i !== '__super__') {\r\n\t\t\tNewClass[i] = this[i];\r\n\t\t}\r\n\t}\r\n\r\n\t// mix static properties into the class\r\n\tif (props.statics) {\r\n\t\tUtil.extend(NewClass, props.statics);\r\n\t\tdelete props.statics;\r\n\t}\r\n\r\n\t// mix includes into the prototype\r\n\tif (props.includes) {\r\n\t\tcheckDeprecatedMixinEvents(props.includes);\r\n\t\tUtil.extend.apply(null, [proto].concat(props.includes));\r\n\t\tdelete props.includes;\r\n\t}\r\n\r\n\t// merge options\r\n\tif (proto.options) {\r\n\t\tprops.options = Util.extend(Util.create(proto.options), props.options);\r\n\t}\r\n\r\n\t// mix given properties into the prototype\r\n\tUtil.extend(proto, props);\r\n\r\n\tproto._initHooks = [];\r\n\r\n\t// add method for calling all hooks\r\n\tproto.callInitHooks = function () {\r\n\r\n\t\tif (this._initHooksCalled) { return; }\r\n\r\n\t\tif (parentProto.callInitHooks) {\r\n\t\t\tparentProto.callInitHooks.call(this);\r\n\t\t}\r\n\r\n\t\tthis._initHooksCalled = true;\r\n\r\n\t\tfor (var i = 0, len = proto._initHooks.length; i < len; i++) {\r\n\t\t\tproto._initHooks[i].call(this);\r\n\t\t}\r\n\t};\r\n\r\n\treturn NewClass;\r\n};\r\n\r\n\r\n// @function include(properties: Object): this\r\n// [Includes a mixin](#class-includes) into the current class.\r\nClass.include = function (props) {\r\n\tUtil.extend(this.prototype, props);\r\n\treturn this;\r\n};\r\n\r\n// @function mergeOptions(options: Object): this\r\n// [Merges `options`](#class-options) into the defaults of the class.\r\nClass.mergeOptions = function (options) {\r\n\tUtil.extend(this.prototype.options, options);\r\n\treturn this;\r\n};\r\n\r\n// @function addInitHook(fn: Function): this\r\n// Adds a [constructor hook](#class-constructor-hooks) to the class.\r\nClass.addInitHook = function (fn) { // (Function) || (String, args...)\r\n\tvar args = Array.prototype.slice.call(arguments, 1);\r\n\r\n\tvar init = typeof fn === 'function' ? fn : function () {\r\n\t\tthis[fn].apply(this, args);\r\n\t};\r\n\r\n\tthis.prototype._initHooks = this.prototype._initHooks || [];\r\n\tthis.prototype._initHooks.push(init);\r\n\treturn this;\r\n};\r\n\r\nfunction checkDeprecatedMixinEvents(includes) {\r\n\tif (typeof L === 'undefined' || !L || !L.Mixin) { return; }\r\n\r\n\tincludes = Util.isArray(includes) ? includes : [includes];\r\n\r\n\tfor (var i = 0; i < includes.length; i++) {\r\n\t\tif (includes[i] === L.Mixin.Events) {\r\n\t\t\tconsole.warn('Deprecated include of L.Mixin.Events: ' +\r\n\t\t\t\t'this property will be removed in future releases, ' +\r\n\t\t\t\t'please inherit from L.Evented instead.', new Error().stack);\r\n\t\t}\r\n\t}\r\n}\r\n","(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define([\"exports\"], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(exports);\n } else {\n var mod = {\n exports: {}\n };\n factory(mod.exports);\n global.CancelablePromise = mod.exports;\n }\n})(typeof globalThis !== \"undefined\" ? globalThis : typeof self !== \"undefined\" ? self : this, function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.cancelable = cancelable;\n _exports.CancelablePromise = CancelablePromise;\n _exports.default = void 0;\n\n function createCallback(onResult, options) {\n if (onResult) {\n return function (arg) {\n if (!options.isCanceled) {\n return onResult(arg);\n }\n\n return arg;\n };\n }\n }\n\n function thenFunc(options, onSuccess, onError) {\n return cancelable(this.then(createCallback(onSuccess, options), createCallback(onError, options)), options);\n }\n\n function catchFunc(options, onError) {\n return cancelable(this.catch(createCallback(onError, options)), options);\n }\n\n function finallyFunc(options, onFinally) {\n return cancelable(this.finally(onFinally), options);\n }\n\n function cancelFunc(options) {\n options.isCanceled = true;\n }\n\n function isCanceled(options) {\n return options.isCanceled;\n }\n\n function cancelable(promise) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n isCanceled: false\n };\n return {\n then: thenFunc.bind(promise, options),\n catch: catchFunc.bind(promise, options),\n finally: finallyFunc.bind(promise, options),\n cancel: cancelFunc.bind(promise, options),\n isCanceled: isCanceled.bind(promise, options)\n };\n }\n\n function CancelablePromise(executor) {\n return cancelable(new Promise(executor));\n }\n\n CancelablePromise.all = function (iterable) {\n return cancelable(Promise.all(iterable));\n };\n\n CancelablePromise.allSettled = function (iterable) {\n return cancelable(Promise.allSettled(iterable));\n };\n\n CancelablePromise.race = function (iterable) {\n return cancelable(Promise.race(iterable));\n };\n\n CancelablePromise.resolve = function (value) {\n return cancelable(Promise.resolve(value));\n };\n\n CancelablePromise.reject = function (value) {\n return cancelable(Promise.reject(value));\n };\n\n var _default = CancelablePromise;\n _exports.default = _default;\n});","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","exports.f = {}.propertyIsEnumerable;\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","import {LatLng} from '../LatLng';\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {Point} from '../../geometry/Point';\r\n\r\n/*\r\n * @namespace Projection\r\n * @projection L.Projection.SphericalMercator\r\n *\r\n * Spherical Mercator projection — the most common projection for online maps,\r\n * used by almost all free and commercial tile providers. Assumes that Earth is\r\n * a sphere. Used by the `EPSG:3857` CRS.\r\n */\r\n\r\nvar earthRadius = 6378137;\r\n\r\nexport var SphericalMercator = {\r\n\r\n\tR: earthRadius,\r\n\tMAX_LATITUDE: 85.0511287798,\r\n\r\n\tproject: function (latlng) {\r\n\t\tvar d = Math.PI / 180,\r\n\t\t max = this.MAX_LATITUDE,\r\n\t\t lat = Math.max(Math.min(max, latlng.lat), -max),\r\n\t\t sin = Math.sin(lat * d);\r\n\r\n\t\treturn new Point(\r\n\t\t\tthis.R * latlng.lng * d,\r\n\t\t\tthis.R * Math.log((1 + sin) / (1 - sin)) / 2);\r\n\t},\r\n\r\n\tunproject: function (point) {\r\n\t\tvar d = 180 / Math.PI;\r\n\r\n\t\treturn new LatLng(\r\n\t\t\t(2 * Math.atan(Math.exp(point.y / this.R)) - (Math.PI / 2)) * d,\r\n\t\t\tpoint.x * d / this.R);\r\n\t},\r\n\r\n\tbounds: (function () {\r\n\t\tvar d = earthRadius * Math.PI;\r\n\t\treturn new Bounds([-d, -d], [d, d]);\r\n\t})()\r\n};\r\n","import {Earth} from './CRS.Earth';\r\nimport {SphericalMercator} from '../projection/Projection.SphericalMercator';\r\nimport {toTransformation} from '../../geometry/Transformation';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.EPSG3857\r\n *\r\n * The most common CRS for online maps, used by almost all free and commercial\r\n * tile providers. Uses Spherical Mercator projection. Set in by default in\r\n * Map's `crs` option.\r\n */\r\n\r\nexport var EPSG3857 = Util.extend({}, Earth, {\r\n\tcode: 'EPSG:3857',\r\n\tprojection: SphericalMercator,\r\n\r\n\ttransformation: (function () {\r\n\t\tvar scale = 0.5 / (Math.PI * SphericalMercator.R);\r\n\t\treturn toTransformation(scale, 0.5, -scale, 0.5);\r\n\t}())\r\n});\r\n\r\nexport var EPSG900913 = Util.extend({}, EPSG3857, {\r\n\tcode: 'EPSG:900913'\r\n});\r\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","exports.f = Object.getOwnPropertySymbols;\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","'use strict';\n\nvar classof = require('./_classof');\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n return builtinExec.call(R, S);\n};\n","'use strict';\nrequire('./es6.regexp.exec');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\nvar regexpExec = require('./_regexp-exec');\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n re.exec = function () { execCalled = true; return null; };\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n }\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(\n defined,\n SYMBOL,\n ''[KEY],\n function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }\n );\n var strfn = fns[0];\n var rxfn = fns[1];\n\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","'use strict';\n// Forced replacement prototype accessors methods\nmodule.exports = require('./_library') || !require('./_fails')(function () {\n var K = Math.random();\n // In FF throws only define methods\n // eslint-disable-next-line no-undef, no-useless-call\n __defineSetter__.call(null, K, function () { /* empty */ });\n delete require('./_global')[K];\n});\n","'use strict';\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = require('./_export');\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { of: function of() {\n var length = arguments.length;\n var A = new Array(length);\n while (length--) A[length] = arguments[length];\n return new this(A);\n } });\n};\n","'use strict';\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar ctx = require('./_ctx');\nvar forOf = require('./_for-of');\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {\n var mapFn = arguments[1];\n var mapping, A, n, cb;\n aFunction(this);\n mapping = mapFn !== undefined;\n if (mapping) aFunction(mapFn);\n if (source == undefined) return new this();\n A = [];\n if (mapping) {\n n = 0;\n cb = ctx(mapFn, arguments[2], 2);\n forOf(source, false, function (nextItem) {\n A.push(cb(nextItem, n++));\n });\n } else {\n forOf(source, false, A.push, A);\n }\n return new this(A);\n } });\n};\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","'use strict';\n\nvar regexpFlags = require('./_flags');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar at = require('./_string-at')(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? at(S, index).length : 1);\n};\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","\"use strict\";\n\nrequire(\"core-js/shim\");\n\nrequire(\"regenerator-runtime/runtime\");\n\nrequire(\"core-js/fn/regexp/escape\");\n\nif (global._babelPolyfill) {\n throw new Error(\"only one instance of babel-polyfill is allowed\");\n}\nglobal._babelPolyfill = true;\n\nvar DEFINE_PROPERTY = \"defineProperty\";\nfunction define(O, key, value) {\n O[key] || Object[DEFINE_PROPERTY](O, key, {\n writable: true,\n configurable: true,\n value: value\n });\n}\n\ndefine(String.prototype, \"padLeft\", \"\".padStart);\ndefine(String.prototype, \"padRight\", \"\".padEnd);\n\n\"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill\".split(\",\").forEach(function (key) {\n [][key] && define(Array, key, Function.call.bind([][key]));\n});","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","exports.f = require('./_wks');\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","var $parseInt = require('./_global').parseInt;\nvar $trim = require('./_string-trim').trim;\nvar ws = require('./_string-ws');\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n","var $parseFloat = require('./_global').parseFloat;\nvar $trim = require('./_string-trim').trim;\n\nmodule.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n","var cof = require('./_cof');\nmodule.exports = function (it, msg) {\n if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n return +it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar toLength = require('./_to-length');\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IObject(O);\n var length = toLength(O.length);\n var index = isRight ? length - 1 : 0;\n var i = isRight ? -1 : 1;\n if (aLen < 2) for (;;) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (isRight ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar regexpExec = require('./_regexp-exec');\nrequire('./_export')({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","'use strict';\nvar global = require('./_global');\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar validate = require('./_validate-collection');\nvar NATIVE_WEAK_MAP = require('./_validate-collection');\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar isArray = require('./_is-array');\nvar isObject = require('./_is-object');\nvar toLength = require('./_to-length');\nvar ctx = require('./_ctx');\nvar IS_CONCAT_SPREADABLE = require('./_wks')('isConcatSpreadable');\n\nfunction flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? ctx(mapper, thisArg, 3) : false;\n var element, spreadable;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n spreadable = false;\n if (isObject(element)) {\n spreadable = element[IS_CONCAT_SPREADABLE];\n spreadable = spreadable !== undefined ? !!spreadable : isArray(element);\n }\n\n if (spreadable && depth > 0) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1fffffffffffff) throw TypeError();\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n}\n\nmodule.exports = flattenIntoArray;\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar classof = require('./_classof');\nvar from = require('./_array-from-iterable');\nmodule.exports = function (NAME) {\n return function toJSON() {\n if (classof(this) != NAME) throw TypeError(NAME + \"#toJSON isn't generic\");\n return from(this);\n };\n};\n","var forOf = require('./_for-of');\n\nmodule.exports = function (iter, ITERATOR) {\n var result = [];\n forOf(iter, false, result.push, result, ITERATOR);\n return result;\n};\n","// https://rwaldron.github.io/proposal-math-extensions/\nmodule.exports = Math.scale || function scale(x, inLow, inHigh, outLow, outHigh) {\n if (\n arguments.length === 0\n // eslint-disable-next-line no-self-compare\n || x != x\n // eslint-disable-next-line no-self-compare\n || inLow != inLow\n // eslint-disable-next-line no-self-compare\n || inHigh != inHigh\n // eslint-disable-next-line no-self-compare\n || outLow != outLow\n // eslint-disable-next-line no-self-compare\n || outHigh != outHigh\n ) return NaN;\n if (x === Infinity || x === -Infinity) return x;\n return (x - inLow) * (outHigh - outLow) / (inHigh - inLow) + outLow;\n};\n","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n }\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(createError(timeoutErrorMessage, config, 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (requestData === undefined) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n var valueFromConfig2Keys = ['url', 'method', 'params', 'data'];\n var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy'];\n var defaultToConfig2Keys = [\n 'baseURL', 'url', 'transformRequest', 'transformResponse', 'paramsSerializer',\n 'timeout', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',\n 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress',\n 'maxContentLength', 'validateStatus', 'maxRedirects', 'httpAgent',\n 'httpsAgent', 'cancelToken', 'socketPath'\n ];\n\n utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n }\n });\n\n utils.forEach(mergeDeepPropertiesKeys, function mergeDeepProperties(prop) {\n if (utils.isObject(config2[prop])) {\n config[prop] = utils.deepMerge(config1[prop], config2[prop]);\n } else if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (utils.isObject(config1[prop])) {\n config[prop] = utils.deepMerge(config1[prop]);\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n\n utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n\n var axiosKeys = valueFromConfig2Keys\n .concat(mergeDeepPropertiesKeys)\n .concat(defaultToConfig2Keys);\n\n var otherKeys = Object\n .keys(config2)\n .filter(function filterAxiosKeys(key) {\n return axiosKeys.indexOf(key) === -1;\n });\n\n utils.forEach(otherKeys, function otherKeysDefaultToConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n\n return config;\n};\n","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","require('./modules/es6.symbol');\nrequire('./modules/es6.object.create');\nrequire('./modules/es6.object.define-property');\nrequire('./modules/es6.object.define-properties');\nrequire('./modules/es6.object.get-own-property-descriptor');\nrequire('./modules/es6.object.get-prototype-of');\nrequire('./modules/es6.object.keys');\nrequire('./modules/es6.object.get-own-property-names');\nrequire('./modules/es6.object.freeze');\nrequire('./modules/es6.object.seal');\nrequire('./modules/es6.object.prevent-extensions');\nrequire('./modules/es6.object.is-frozen');\nrequire('./modules/es6.object.is-sealed');\nrequire('./modules/es6.object.is-extensible');\nrequire('./modules/es6.object.assign');\nrequire('./modules/es6.object.is');\nrequire('./modules/es6.object.set-prototype-of');\nrequire('./modules/es6.object.to-string');\nrequire('./modules/es6.function.bind');\nrequire('./modules/es6.function.name');\nrequire('./modules/es6.function.has-instance');\nrequire('./modules/es6.parse-int');\nrequire('./modules/es6.parse-float');\nrequire('./modules/es6.number.constructor');\nrequire('./modules/es6.number.to-fixed');\nrequire('./modules/es6.number.to-precision');\nrequire('./modules/es6.number.epsilon');\nrequire('./modules/es6.number.is-finite');\nrequire('./modules/es6.number.is-integer');\nrequire('./modules/es6.number.is-nan');\nrequire('./modules/es6.number.is-safe-integer');\nrequire('./modules/es6.number.max-safe-integer');\nrequire('./modules/es6.number.min-safe-integer');\nrequire('./modules/es6.number.parse-float');\nrequire('./modules/es6.number.parse-int');\nrequire('./modules/es6.math.acosh');\nrequire('./modules/es6.math.asinh');\nrequire('./modules/es6.math.atanh');\nrequire('./modules/es6.math.cbrt');\nrequire('./modules/es6.math.clz32');\nrequire('./modules/es6.math.cosh');\nrequire('./modules/es6.math.expm1');\nrequire('./modules/es6.math.fround');\nrequire('./modules/es6.math.hypot');\nrequire('./modules/es6.math.imul');\nrequire('./modules/es6.math.log10');\nrequire('./modules/es6.math.log1p');\nrequire('./modules/es6.math.log2');\nrequire('./modules/es6.math.sign');\nrequire('./modules/es6.math.sinh');\nrequire('./modules/es6.math.tanh');\nrequire('./modules/es6.math.trunc');\nrequire('./modules/es6.string.from-code-point');\nrequire('./modules/es6.string.raw');\nrequire('./modules/es6.string.trim');\nrequire('./modules/es6.string.iterator');\nrequire('./modules/es6.string.code-point-at');\nrequire('./modules/es6.string.ends-with');\nrequire('./modules/es6.string.includes');\nrequire('./modules/es6.string.repeat');\nrequire('./modules/es6.string.starts-with');\nrequire('./modules/es6.string.anchor');\nrequire('./modules/es6.string.big');\nrequire('./modules/es6.string.blink');\nrequire('./modules/es6.string.bold');\nrequire('./modules/es6.string.fixed');\nrequire('./modules/es6.string.fontcolor');\nrequire('./modules/es6.string.fontsize');\nrequire('./modules/es6.string.italics');\nrequire('./modules/es6.string.link');\nrequire('./modules/es6.string.small');\nrequire('./modules/es6.string.strike');\nrequire('./modules/es6.string.sub');\nrequire('./modules/es6.string.sup');\nrequire('./modules/es6.date.now');\nrequire('./modules/es6.date.to-json');\nrequire('./modules/es6.date.to-iso-string');\nrequire('./modules/es6.date.to-string');\nrequire('./modules/es6.date.to-primitive');\nrequire('./modules/es6.array.is-array');\nrequire('./modules/es6.array.from');\nrequire('./modules/es6.array.of');\nrequire('./modules/es6.array.join');\nrequire('./modules/es6.array.slice');\nrequire('./modules/es6.array.sort');\nrequire('./modules/es6.array.for-each');\nrequire('./modules/es6.array.map');\nrequire('./modules/es6.array.filter');\nrequire('./modules/es6.array.some');\nrequire('./modules/es6.array.every');\nrequire('./modules/es6.array.reduce');\nrequire('./modules/es6.array.reduce-right');\nrequire('./modules/es6.array.index-of');\nrequire('./modules/es6.array.last-index-of');\nrequire('./modules/es6.array.copy-within');\nrequire('./modules/es6.array.fill');\nrequire('./modules/es6.array.find');\nrequire('./modules/es6.array.find-index');\nrequire('./modules/es6.array.species');\nrequire('./modules/es6.array.iterator');\nrequire('./modules/es6.regexp.constructor');\nrequire('./modules/es6.regexp.exec');\nrequire('./modules/es6.regexp.to-string');\nrequire('./modules/es6.regexp.flags');\nrequire('./modules/es6.regexp.match');\nrequire('./modules/es6.regexp.replace');\nrequire('./modules/es6.regexp.search');\nrequire('./modules/es6.regexp.split');\nrequire('./modules/es6.promise');\nrequire('./modules/es6.map');\nrequire('./modules/es6.set');\nrequire('./modules/es6.weak-map');\nrequire('./modules/es6.weak-set');\nrequire('./modules/es6.typed.array-buffer');\nrequire('./modules/es6.typed.data-view');\nrequire('./modules/es6.typed.int8-array');\nrequire('./modules/es6.typed.uint8-array');\nrequire('./modules/es6.typed.uint8-clamped-array');\nrequire('./modules/es6.typed.int16-array');\nrequire('./modules/es6.typed.uint16-array');\nrequire('./modules/es6.typed.int32-array');\nrequire('./modules/es6.typed.uint32-array');\nrequire('./modules/es6.typed.float32-array');\nrequire('./modules/es6.typed.float64-array');\nrequire('./modules/es6.reflect.apply');\nrequire('./modules/es6.reflect.construct');\nrequire('./modules/es6.reflect.define-property');\nrequire('./modules/es6.reflect.delete-property');\nrequire('./modules/es6.reflect.enumerate');\nrequire('./modules/es6.reflect.get');\nrequire('./modules/es6.reflect.get-own-property-descriptor');\nrequire('./modules/es6.reflect.get-prototype-of');\nrequire('./modules/es6.reflect.has');\nrequire('./modules/es6.reflect.is-extensible');\nrequire('./modules/es6.reflect.own-keys');\nrequire('./modules/es6.reflect.prevent-extensions');\nrequire('./modules/es6.reflect.set');\nrequire('./modules/es6.reflect.set-prototype-of');\nrequire('./modules/es7.array.includes');\nrequire('./modules/es7.array.flat-map');\nrequire('./modules/es7.array.flatten');\nrequire('./modules/es7.string.at');\nrequire('./modules/es7.string.pad-start');\nrequire('./modules/es7.string.pad-end');\nrequire('./modules/es7.string.trim-left');\nrequire('./modules/es7.string.trim-right');\nrequire('./modules/es7.string.match-all');\nrequire('./modules/es7.symbol.async-iterator');\nrequire('./modules/es7.symbol.observable');\nrequire('./modules/es7.object.get-own-property-descriptors');\nrequire('./modules/es7.object.values');\nrequire('./modules/es7.object.entries');\nrequire('./modules/es7.object.define-getter');\nrequire('./modules/es7.object.define-setter');\nrequire('./modules/es7.object.lookup-getter');\nrequire('./modules/es7.object.lookup-setter');\nrequire('./modules/es7.map.to-json');\nrequire('./modules/es7.set.to-json');\nrequire('./modules/es7.map.of');\nrequire('./modules/es7.set.of');\nrequire('./modules/es7.weak-map.of');\nrequire('./modules/es7.weak-set.of');\nrequire('./modules/es7.map.from');\nrequire('./modules/es7.set.from');\nrequire('./modules/es7.weak-map.from');\nrequire('./modules/es7.weak-set.from');\nrequire('./modules/es7.global');\nrequire('./modules/es7.system.global');\nrequire('./modules/es7.error.is-error');\nrequire('./modules/es7.math.clamp');\nrequire('./modules/es7.math.deg-per-rad');\nrequire('./modules/es7.math.degrees');\nrequire('./modules/es7.math.fscale');\nrequire('./modules/es7.math.iaddh');\nrequire('./modules/es7.math.isubh');\nrequire('./modules/es7.math.imulh');\nrequire('./modules/es7.math.rad-per-deg');\nrequire('./modules/es7.math.radians');\nrequire('./modules/es7.math.scale');\nrequire('./modules/es7.math.umulh');\nrequire('./modules/es7.math.signbit');\nrequire('./modules/es7.promise.finally');\nrequire('./modules/es7.promise.try');\nrequire('./modules/es7.reflect.define-metadata');\nrequire('./modules/es7.reflect.delete-metadata');\nrequire('./modules/es7.reflect.get-metadata');\nrequire('./modules/es7.reflect.get-metadata-keys');\nrequire('./modules/es7.reflect.get-own-metadata');\nrequire('./modules/es7.reflect.get-own-metadata-keys');\nrequire('./modules/es7.reflect.has-metadata');\nrequire('./modules/es7.reflect.has-own-metadata');\nrequire('./modules/es7.reflect.metadata');\nrequire('./modules/es7.asap');\nrequire('./modules/es7.observable');\nrequire('./modules/web.timers');\nrequire('./modules/web.immediate');\nrequire('./modules/web.dom.iterable');\nmodule.exports = require('./modules/_core');\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","module.exports = require('./_shared')('native-function-to-string', Function.toString);\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n","var $export = require('./_export');\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperties: require('./_object-dps') });\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });\n","'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = require('./_classof');\nvar test = {};\ntest[require('./_wks')('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n require('./_redefine')(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n","// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = require('./_export');\n\n$export($export.P, 'Function', { bind: require('./_bind') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","'use strict';\nvar isObject = require('./_is-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar HAS_INSTANCE = require('./_wks')('hasInstance');\nvar FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif (!(HAS_INSTANCE in FunctionProto)) require('./_object-dp').f(FunctionProto, HAS_INSTANCE, { value: function (O) {\n if (typeof this != 'function' || !isObject(O)) return false;\n if (!isObject(this.prototype)) return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while (O = getPrototypeOf(O)) if (this.prototype === O) return true;\n return false;\n} });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n","'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = require('./_descriptors') ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n require('./_redefine')(global, NUMBER, $Number);\n}\n","'use strict';\nvar $export = require('./_export');\nvar toInteger = require('./_to-integer');\nvar aNumberValue = require('./_a-number-value');\nvar repeat = require('./_string-repeat');\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n var i = -1;\n var c2 = c;\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function (n) {\n var i = 6;\n var c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function () {\n var i = 6;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !require('./_fails')(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR);\n // eslint-disable-next-line no-self-compare\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = f;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $fails = require('./_fails');\nvar aNumberValue = require('./_a-number-value');\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","'use strict';\n// 21.1.3.25 String.prototype.trim()\nrequire('./_string-trim')('trim', function ($trim) {\n return function trim() {\n return $trim(this, 3);\n };\n});\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","'use strict';\n// B.2.3.2 String.prototype.anchor(name)\nrequire('./_string-html')('anchor', function (createHTML) {\n return function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n };\n});\n","'use strict';\n// B.2.3.3 String.prototype.big()\nrequire('./_string-html')('big', function (createHTML) {\n return function big() {\n return createHTML(this, 'big', '', '');\n };\n});\n","'use strict';\n// B.2.3.4 String.prototype.blink()\nrequire('./_string-html')('blink', function (createHTML) {\n return function blink() {\n return createHTML(this, 'blink', '', '');\n };\n});\n","'use strict';\n// B.2.3.5 String.prototype.bold()\nrequire('./_string-html')('bold', function (createHTML) {\n return function bold() {\n return createHTML(this, 'b', '', '');\n };\n});\n","'use strict';\n// B.2.3.6 String.prototype.fixed()\nrequire('./_string-html')('fixed', function (createHTML) {\n return function fixed() {\n return createHTML(this, 'tt', '', '');\n };\n});\n","'use strict';\n// B.2.3.7 String.prototype.fontcolor(color)\nrequire('./_string-html')('fontcolor', function (createHTML) {\n return function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\n };\n});\n","'use strict';\n// B.2.3.8 String.prototype.fontsize(size)\nrequire('./_string-html')('fontsize', function (createHTML) {\n return function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n };\n});\n","'use strict';\n// B.2.3.9 String.prototype.italics()\nrequire('./_string-html')('italics', function (createHTML) {\n return function italics() {\n return createHTML(this, 'i', '', '');\n };\n});\n","'use strict';\n// B.2.3.10 String.prototype.link(url)\nrequire('./_string-html')('link', function (createHTML) {\n return function link(url) {\n return createHTML(this, 'a', 'href', url);\n };\n});\n","'use strict';\n// B.2.3.11 String.prototype.small()\nrequire('./_string-html')('small', function (createHTML) {\n return function small() {\n return createHTML(this, 'small', '', '');\n };\n});\n","'use strict';\n// B.2.3.12 String.prototype.strike()\nrequire('./_string-html')('strike', function (createHTML) {\n return function strike() {\n return createHTML(this, 'strike', '', '');\n };\n});\n","'use strict';\n// B.2.3.13 String.prototype.sub()\nrequire('./_string-html')('sub', function (createHTML) {\n return function sub() {\n return createHTML(this, 'sub', '', '');\n };\n});\n","'use strict';\n// B.2.3.14 String.prototype.sup()\nrequire('./_string-html')('sup', function (createHTML) {\n return function sup() {\n return createHTML(this, 'sup', '', '');\n };\n});\n","// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = require('./_export');\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\n\n$export($export.P + $export.F * require('./_fails')(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n}), 'Date', {\n // eslint-disable-next-line no-unused-vars\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n","// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = require('./_export');\nvar toISOString = require('./_date-to-iso-string');\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n toISOString: toISOString\n});\n","'use strict';\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = require('./_fails');\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function (num) {\n return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\nmodule.exports = (fails(function () {\n return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n $toISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var d = this;\n var y = d.getUTCFullYear();\n var m = d.getUTCMilliseconds();\n var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;\n","var DateProto = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar $toString = DateProto[TO_STRING];\nvar getTime = DateProto.getTime;\nif (new Date(NaN) + '' != INVALID_DATE) {\n require('./_redefine')(DateProto, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}\n","var TO_PRIMITIVE = require('./_wks')('toPrimitive');\nvar proto = Date.prototype;\n\nif (!(TO_PRIMITIVE in proto)) require('./_hide')(proto, TO_PRIMITIVE, require('./_date-to-primitive'));\n","'use strict';\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\nvar NUMBER = 'number';\n\nmodule.exports = function (hint) {\n if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');\n return toPrimitive(anObject(this), hint != NUMBER);\n};\n","// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = require('./_export');\n\n$export($export.S, 'Array', { isArray: require('./_is-array') });\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","'use strict';\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (require('./_iobject') != Object || !require('./_strict-method')(arrayJoin)), 'Array', {\n join: function join(separator) {\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar html = require('./_html');\nvar cof = require('./_cof');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * require('./_fails')(function () {\n if (html) arraySlice.call(html);\n}), 'Array', {\n slice: function slice(begin, end) {\n var len = toLength(this.length);\n var klass = cof(this);\n end = end === undefined ? len : end;\n if (klass == 'Array') return arraySlice.call(this, begin, end);\n var start = toAbsoluteIndex(begin, len);\n var upTo = toAbsoluteIndex(end, len);\n var size = toLength(upTo - start);\n var cloned = new Array(size);\n var i = 0;\n for (; i < size; i++) cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar fails = require('./_fails');\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n // IE8-\n test.sort(undefined);\n}) || !fails(function () {\n // V8 bug\n test.sort(null);\n // Old WebKit\n}) || !require('./_strict-method')($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? $sort.call(toObject(this))\n : $sort.call(toObject(this), aFunction(comparefn));\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $forEach = require('./_array-methods')(0);\nvar STRICT = require('./_strict-method')([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments[1]);\n }\n});\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","'use strict';\nvar $export = require('./_export');\nvar $map = require('./_array-methods')(1);\n\n$export($export.P + $export.F * !require('./_strict-method')([].map, true), 'Array', {\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $filter = require('./_array-methods')(2);\n\n$export($export.P + $export.F * !require('./_strict-method')([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $some = require('./_array-methods')(3);\n\n$export($export.P + $export.F * !require('./_strict-method')([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $every = require('./_array-methods')(4);\n\n$export($export.P + $export.F * !require('./_strict-method')([].every, true), 'Array', {\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduce, true), 'Array', {\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduceRight, true), 'Array', {\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $indexOf = require('./_array-includes')(false);\nvar $native = [].indexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? $native.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n var O = toIObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;\n return -1;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","require('./_set-species')('Array');\n","var global = require('./_global');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar dP = require('./_object-dp').f;\nvar gOPN = require('./_object-gopn').f;\nvar isRegExp = require('./_is-regexp');\nvar $flags = require('./_flags');\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function () {\n re2[require('./_wks')('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n require('./_redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./_set-species')('RegExp');\n","'use strict';\nrequire('./es6.regexp.flags');\nvar anObject = require('./_an-object');\nvar $flags = require('./_flags');\nvar DESCRIPTORS = require('./_descriptors');\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (require('./_fails')(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative($match, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n if (!rx.global) return regExpExec(rx, S);\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar sameValue = require('./_same-value');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative($search, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n","'use strict';\n\nvar isRegExp = require('./_is-regexp');\nvar anObject = require('./_an-object');\nvar speciesConstructor = require('./_species-constructor');\nvar advanceStringIndex = require('./_advance-string-index');\nvar toLength = require('./_to-length');\nvar callRegExpExec = require('./_regexp-exec-abstract');\nvar regexpExec = require('./_regexp-exec');\nvar fails = require('./_fails');\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return $split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy[LAST_INDEX];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n };\n } else {\n internalSplit = $split;\n }\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = defined(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n});\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var fin = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < fin) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","var $export = require('./_export');\n$export($export.G + $export.W + $export.F * !require('./_typed').ABV, {\n DataView: require('./_typed-buffer').DataView\n});\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","'use strict';\n// 26.1.5 Reflect.enumerate(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar Enumerate = function (iterated) {\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = []; // keys\n var key;\n for (key in iterated) keys.push(key);\n};\nrequire('./_iter-create')(Enumerate, 'Object', function () {\n var that = this;\n var keys = that._k;\n var key;\n do {\n if (that._i >= keys.length) return { value: undefined, done: true };\n } while (!((key = keys[that._i++]) in that._t));\n return { value: key, done: false };\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target) {\n return new Enumerate(target);\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap\nvar $export = require('./_export');\nvar flattenIntoArray = require('./_flatten-into-array');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar aFunction = require('./_a-function');\nvar arraySpeciesCreate = require('./_array-species-create');\n\n$export($export.P, 'Array', {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen, A;\n aFunction(callbackfn);\n sourceLen = toLength(O.length);\n A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);\n return A;\n }\n});\n\nrequire('./_add-to-unscopables')('flatMap');\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatten\nvar $export = require('./_export');\nvar flattenIntoArray = require('./_flatten-into-array');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar arraySpeciesCreate = require('./_array-species-create');\n\n$export($export.P, 'Array', {\n flatten: function flatten(/* depthArg = 1 */) {\n var depthArg = arguments[0];\n var O = toObject(this);\n var sourceLen = toLength(O.length);\n var A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toInteger(depthArg));\n return A;\n }\n});\n\nrequire('./_add-to-unscopables')('flatten');\n","'use strict';\n// https://github.com/mathiasbynens/String.prototype.at\nvar $export = require('./_export');\nvar $at = require('./_string-at')(true);\n\n$export($export.P, 'String', {\n at: function at(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimLeft', function ($trim) {\n return function trimLeft() {\n return $trim(this, 1);\n };\n}, 'trimStart');\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimRight', function ($trim) {\n return function trimRight() {\n return $trim(this, 2);\n };\n}, 'trimEnd');\n","'use strict';\n// https://tc39.github.io/String.prototype.matchAll/\nvar $export = require('./_export');\nvar defined = require('./_defined');\nvar toLength = require('./_to-length');\nvar isRegExp = require('./_is-regexp');\nvar getFlags = require('./_flags');\nvar RegExpProto = RegExp.prototype;\n\nvar $RegExpStringIterator = function (regexp, string) {\n this._r = regexp;\n this._s = string;\n};\n\nrequire('./_iter-create')($RegExpStringIterator, 'RegExp String', function next() {\n var match = this._r.exec(this._s);\n return { value: match, done: match === null };\n});\n\n$export($export.P, 'String', {\n matchAll: function matchAll(regexp) {\n defined(this);\n if (!isRegExp(regexp)) throw TypeError(regexp + ' is not a regexp!');\n var S = String(this);\n var flags = 'flags' in RegExpProto ? String(regexp.flags) : getFlags.call(regexp);\n var rx = new RegExp(regexp.source, ~flags.indexOf('g') ? flags : 'g' + flags);\n rx.lastIndex = toLength(regexp.lastIndex);\n return new $RegExpStringIterator(rx, S);\n }\n});\n","require('./_wks-define')('asyncIterator');\n","require('./_wks-define')('observable');\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar aFunction = require('./_a-function');\nvar $defineProperty = require('./_object-dp');\n\n// B.2.2.2 Object.prototype.__defineGetter__(P, getter)\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\n __defineGetter__: function __defineGetter__(P, getter) {\n $defineProperty.f(toObject(this), P, { get: aFunction(getter), enumerable: true, configurable: true });\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar aFunction = require('./_a-function');\nvar $defineProperty = require('./_object-dp');\n\n// B.2.2.3 Object.prototype.__defineSetter__(P, setter)\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\n __defineSetter__: function __defineSetter__(P, setter) {\n $defineProperty.f(toObject(this), P, { set: aFunction(setter), enumerable: true, configurable: true });\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\nvar getPrototypeOf = require('./_object-gpo');\nvar getOwnPropertyDescriptor = require('./_object-gopd').f;\n\n// B.2.2.4 Object.prototype.__lookupGetter__(P)\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\n __lookupGetter__: function __lookupGetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.get;\n } while (O = getPrototypeOf(O));\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\nvar getPrototypeOf = require('./_object-gpo');\nvar getOwnPropertyDescriptor = require('./_object-gopd').f;\n\n// B.2.2.5 Object.prototype.__lookupSetter__(P)\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\n __lookupSetter__: function __lookupSetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.set;\n } while (O = getPrototypeOf(O));\n }\n});\n","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = require('./_export');\n\n$export($export.P + $export.R, 'Map', { toJSON: require('./_collection-to-json')('Map') });\n","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = require('./_export');\n\n$export($export.P + $export.R, 'Set', { toJSON: require('./_collection-to-json')('Set') });\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-map.of\nrequire('./_set-collection-of')('Map');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of\nrequire('./_set-collection-of')('Set');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.of\nrequire('./_set-collection-of')('WeakMap');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.of\nrequire('./_set-collection-of')('WeakSet');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-map.from\nrequire('./_set-collection-from')('Map');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from\nrequire('./_set-collection-from')('Set');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.from\nrequire('./_set-collection-from')('WeakMap');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.from\nrequire('./_set-collection-from')('WeakSet');\n","// https://github.com/tc39/proposal-global\nvar $export = require('./_export');\n\n$export($export.G, { global: require('./_global') });\n","// https://github.com/tc39/proposal-global\nvar $export = require('./_export');\n\n$export($export.S, 'System', { global: require('./_global') });\n","// https://github.com/ljharb/proposal-is-error\nvar $export = require('./_export');\nvar cof = require('./_cof');\n\n$export($export.S, 'Error', {\n isError: function isError(it) {\n return cof(it) === 'Error';\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clamp: function clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { DEG_PER_RAD: Math.PI / 180 });\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\nvar RAD_PER_DEG = 180 / Math.PI;\n\n$export($export.S, 'Math', {\n degrees: function degrees(radians) {\n return radians * RAD_PER_DEG;\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\nvar scale = require('./_math-scale');\nvar fround = require('./_math-fround');\n\n$export($export.S, 'Math', {\n fscale: function fscale(x, inLow, inHigh, outLow, outHigh) {\n return fround(scale(x, inLow, inHigh, outLow, outHigh));\n }\n});\n","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n iaddh: function iaddh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0;\n }\n});\n","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n isubh: function isubh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0;\n }\n});\n","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n imulh: function imulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >> 16;\n var v1 = $v >> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16);\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { RAD_PER_DEG: 180 / Math.PI });\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\nvar DEG_PER_RAD = Math.PI / 180;\n\n$export($export.S, 'Math', {\n radians: function radians(degrees) {\n return degrees * DEG_PER_RAD;\n }\n});\n","// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { scale: require('./_math-scale') });\n","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n umulh: function umulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >>> 16;\n var v1 = $v >>> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16);\n }\n});\n","// http://jfbastien.github.io/papers/Math.signbit.html\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { signbit: function signbit(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) != x ? x : x == 0 ? 1 / x == Infinity : x > 0;\n} });\n","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n","'use strict';\n// https://github.com/tc39/proposal-promise-try\nvar $export = require('./_export');\nvar newPromiseCapability = require('./_new-promise-capability');\nvar perform = require('./_perform');\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapability.f(this);\n var result = perform(callbackfn);\n (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n return promiseCapability.promise;\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar toMetaKey = metadata.key;\nvar ordinaryDefineOwnMetadata = metadata.set;\n\nmetadata.exp({ defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey) {\n ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar toMetaKey = metadata.key;\nvar getOrCreateMetadataMap = metadata.map;\nvar store = metadata.store;\n\nmetadata.exp({ deleteMetadata: function deleteMetadata(metadataKey, target /* , targetKey */) {\n var targetKey = arguments.length < 3 ? undefined : toMetaKey(arguments[2]);\n var metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false);\n if (metadataMap === undefined || !metadataMap['delete'](metadataKey)) return false;\n if (metadataMap.size) return true;\n var targetMetadata = store.get(target);\n targetMetadata['delete'](targetKey);\n return !!targetMetadata.size || store['delete'](target);\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nvar ordinaryGetMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return ordinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;\n};\n\nmetadata.exp({ getMetadata: function getMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var Set = require('./es6.set');\nvar from = require('./_array-from-iterable');\nvar metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nvar ordinaryMetadataKeys = function (O, P) {\n var oKeys = ordinaryOwnMetadataKeys(O, P);\n var parent = getPrototypeOf(O);\n if (parent === null) return oKeys;\n var pKeys = ordinaryMetadataKeys(parent, P);\n return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys;\n};\n\nmetadata.exp({ getMetadataKeys: function getMetadataKeys(target /* , targetKey */) {\n return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadata: function getOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadataKeys: function getOwnMetadataKeys(target /* , targetKey */) {\n return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nvar ordinaryHasMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return true;\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;\n};\n\nmetadata.exp({ hasMetadata: function hasMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ hasOwnMetadata: function hasOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n","var $metadata = require('./_metadata');\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar toMetaKey = $metadata.key;\nvar ordinaryDefineOwnMetadata = $metadata.set;\n\n$metadata.exp({ metadata: function metadata(metadataKey, metadataValue) {\n return function decorator(target, targetKey) {\n ordinaryDefineOwnMetadata(\n metadataKey, metadataValue,\n (targetKey !== undefined ? anObject : aFunction)(target),\n toMetaKey(targetKey)\n );\n };\n} });\n","// https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask\nvar $export = require('./_export');\nvar microtask = require('./_microtask')();\nvar process = require('./_global').process;\nvar isNode = require('./_cof')(process) == 'process';\n\n$export($export.G, {\n asap: function asap(fn) {\n var domain = isNode && process.domain;\n microtask(domain ? domain.bind(fn) : fn);\n }\n});\n","'use strict';\n// https://github.com/zenparsing/es-observable\nvar $export = require('./_export');\nvar global = require('./_global');\nvar core = require('./_core');\nvar microtask = require('./_microtask')();\nvar OBSERVABLE = require('./_wks')('observable');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar anInstance = require('./_an-instance');\nvar redefineAll = require('./_redefine-all');\nvar hide = require('./_hide');\nvar forOf = require('./_for-of');\nvar RETURN = forOf.RETURN;\n\nvar getMethod = function (fn) {\n return fn == null ? undefined : aFunction(fn);\n};\n\nvar cleanupSubscription = function (subscription) {\n var cleanup = subscription._c;\n if (cleanup) {\n subscription._c = undefined;\n cleanup();\n }\n};\n\nvar subscriptionClosed = function (subscription) {\n return subscription._o === undefined;\n};\n\nvar closeSubscription = function (subscription) {\n if (!subscriptionClosed(subscription)) {\n subscription._o = undefined;\n cleanupSubscription(subscription);\n }\n};\n\nvar Subscription = function (observer, subscriber) {\n anObject(observer);\n this._c = undefined;\n this._o = observer;\n observer = new SubscriptionObserver(this);\n try {\n var cleanup = subscriber(observer);\n var subscription = cleanup;\n if (cleanup != null) {\n if (typeof cleanup.unsubscribe === 'function') cleanup = function () { subscription.unsubscribe(); };\n else aFunction(cleanup);\n this._c = cleanup;\n }\n } catch (e) {\n observer.error(e);\n return;\n } if (subscriptionClosed(this)) cleanupSubscription(this);\n};\n\nSubscription.prototype = redefineAll({}, {\n unsubscribe: function unsubscribe() { closeSubscription(this); }\n});\n\nvar SubscriptionObserver = function (subscription) {\n this._s = subscription;\n};\n\nSubscriptionObserver.prototype = redefineAll({}, {\n next: function next(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n try {\n var m = getMethod(observer.next);\n if (m) return m.call(observer, value);\n } catch (e) {\n try {\n closeSubscription(subscription);\n } finally {\n throw e;\n }\n }\n }\n },\n error: function error(value) {\n var subscription = this._s;\n if (subscriptionClosed(subscription)) throw value;\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.error);\n if (!m) throw value;\n value = m.call(observer, value);\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n },\n complete: function complete(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.complete);\n value = m ? m.call(observer, value) : undefined;\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n }\n }\n});\n\nvar $Observable = function Observable(subscriber) {\n anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber);\n};\n\nredefineAll($Observable.prototype, {\n subscribe: function subscribe(observer) {\n return new Subscription(observer, this._f);\n },\n forEach: function forEach(fn) {\n var that = this;\n return new (core.Promise || global.Promise)(function (resolve, reject) {\n aFunction(fn);\n var subscription = that.subscribe({\n next: function (value) {\n try {\n return fn(value);\n } catch (e) {\n reject(e);\n subscription.unsubscribe();\n }\n },\n error: reject,\n complete: resolve\n });\n });\n }\n});\n\nredefineAll($Observable, {\n from: function from(x) {\n var C = typeof this === 'function' ? this : $Observable;\n var method = getMethod(anObject(x)[OBSERVABLE]);\n if (method) {\n var observable = anObject(method.call(x));\n return observable.constructor === C ? observable : new C(function (observer) {\n return observable.subscribe(observer);\n });\n }\n return new C(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n try {\n if (forOf(x, false, function (it) {\n observer.next(it);\n if (done) return RETURN;\n }) === RETURN) return;\n } catch (e) {\n if (done) throw e;\n observer.error(e);\n return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n },\n of: function of() {\n for (var i = 0, l = arguments.length, items = new Array(l); i < l;) items[i] = arguments[i++];\n return new (typeof this === 'function' ? this : $Observable)(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n for (var j = 0; j < items.length; ++j) {\n observer.next(items[j]);\n if (done) return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n }\n});\n\nhide($Observable.prototype, OBSERVABLE, function () { return this; });\n\n$export($export.G, { Observable: $Observable });\n\nrequire('./_set-species')('Observable');\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","require('../../modules/core.regexp.escape');\nmodule.exports = require('../../modules/_core').RegExp.escape;\n","// https://github.com/benjamingr/RexExp.escape\nvar $export = require('./_export');\nvar $re = require('./_replacer')(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n$export($export.S, 'RegExp', { escape: function escape(it) { return $re(it); } });\n","module.exports = function (regExp, replace) {\n var replacer = replace === Object(replace) ? function (part) {\n return replace[part];\n } : replace;\n return function (it) {\n return String(it).replace(regExp, replacer);\n };\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\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object 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 * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\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 if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\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(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, 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 interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, 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(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\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(null, 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(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.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 that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().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)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var 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 (!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 var 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 var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\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 (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var 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 case undefined:\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) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var 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 coersion 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// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var 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 var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var 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 var length = this.length | 0\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.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 var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\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 var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var 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 (isNaN(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 (Buffer.TYPED_ARRAY_SUPPORT &&\n 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 var indexSize = 1\n var arrLength = arr.length\n var 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 var i\n if (dir) {\n var 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 var found = true\n for (var 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 var 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 // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(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 latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, 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 // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var 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 var 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 return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(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 var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var 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\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var 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 var res = ''\n var 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 var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; 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 var 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 var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\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 = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\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 var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\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 = function readUInt32BE (offset, noAssert) {\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.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var 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 var i = byteLength\n var mul = 1\n var 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 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 if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\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 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.readFloatLE = function readFloatLE (offset, noAssert) {\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 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 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 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 = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var 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 = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var 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 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\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 if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\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 if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\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 if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\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 if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var 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 var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var 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 (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\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 if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\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 if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\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 if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\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 if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\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 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 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 (!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('sourceStart out of bounds')\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 var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\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 (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\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 } else if (typeof val === 'number') {\n val = val & 255\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 var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).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 stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var 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 var byteArray = []\n for (var 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 var c, hi, lo\n var byteArray = []\n for (var 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 for (var 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\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","'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(\n uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n ))\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","exports.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","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n return createInstance(mergeConfig(axios.defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = arguments[1] || {};\n config.url = arguments[0];\n } else {\n config = config || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData(\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData(\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code\n };\n };\n return error;\n};\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","export class FeatureUtil {\r\n\r\n static getPosByColumnName(columns, column) {\r\n return columns.findIndex(x => x == column);\r\n }\r\n\r\n static getStringByColumnName(values, columns, column) {\r\n let pos = this.getPosByColumnName(columns, column);\r\n if (pos != -1) {\r\n return values[pos];\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n static getIntByColumnName(values, columns, column) {\r\n let pos = this.getPosByColumnName(columns, column);\r\n if (pos != -1) {\r\n return parseInt(values[pos]);\r\n }\r\n\r\n return NaN;\r\n }\r\n\r\n static getNumericByColumnName(values, columns, column) {\r\n let pos = this.getPosByColumnName(columns, column);\r\n if (pos != -1) {\r\n return parseNumber(values[pos]);\r\n }\r\n\r\n return NaN;\r\n }\r\n\r\n static getBooleanByColumnName(values, columns, column) {\r\n let pos = this.getPosByColumnName(columns, column);\r\n if (pos != -1) {\r\n let value = values[pos].toLowerCase();\r\n return (value == 'true' || value == 't' || value == '1');\r\n }\r\n \r\n return undefined;\r\n }\r\n \r\n static getStringByPos(values, pos) {\r\n if (pos != -1) {\r\n return values[pos];\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n static getIntByPos(values, pos) {\r\n if (pos != -1) {\r\n return parseInt(values[pos]);\r\n }\r\n\r\n return NaN;\r\n }\r\n\r\n static getNumericByPos(values, pos) {\r\n if (pos != -1) {\r\n return parseNumber(values[pos]);\r\n }\r\n\r\n return NaN;\r\n }\r\n\r\n static getBooleanByPos(values, pos) {\r\n if (pos != -1) {\r\n let value = values[pos].toLowerCase();\r\n return (value == 'true' || value == 't' || value == '1');\r\n }\r\n \r\n return undefined;\r\n }\r\n\r\n}","import {MgShapeFactory} from '../drawing/index';\r\nimport {FeatureUtil} from './featureutil';\r\nimport {WktReader, Geometry} from '../geometries/index';\r\nimport MapEnums from '../map/enums';\r\n\r\nexport class Feature {\r\n constructor(featureLayer, columns, values, sWkt, id, featureName, wktColumn, thematicIndex) {\r\n this.featureLayer = featureLayer;\r\n this._geometry = undefined;\r\n this._shape = undefined;\r\n this._values = [];\r\n this._featureName = featureName;\r\n this.id = id;\r\n this.thematicIndex = thematicIndex;\r\n this.hovering = false;\r\n this.selected = false;\r\n this.tracking = false;\r\n this.dctValues = {};\r\n\r\n if (values != undefined) {\r\n for (let i = 0; i < values.length; i++) {\r\n if (columns[i] == wktColumn) {\r\n this._values.push({});\r\n }\r\n else {\r\n this._values.push(values[i]);\r\n this.dctValues[columns[i]] = values[i]; \r\n }\r\n }\r\n }\r\n \r\n if (sWkt != null && sWkt.length > 0) {\r\n this._geometry = WktReader.parseWKT(sWkt);\r\n this._shape = MgShapeFactory.createShape(this);\r\n }\r\n else {\r\n this._shape = null;\r\n }\r\n }\r\n \r\n get ThematicIndex() {\r\n return this.thematicIndex;\r\n }\r\n\r\n get Id() {\r\n return this.id;\r\n }\r\n\r\n get Shape() {\r\n return this._shape;\r\n }\r\n\r\n get Values() {\r\n return this._values;\r\n }\r\n\r\n get Geometry() {\r\n return this._geometry;\r\n }\r\n\r\n get GeometryType() {\r\n var sType = 'none';\r\n\r\n switch(this.Geometry.GeometryType) {\r\n case MapEnums.GeometryTypes.POINT:\r\n sType = 'POINT';\r\n break;\r\n \r\n case MapEnums.GeometryTypes.LINESTRING:\r\n sType = 'LINESTRING';\r\n break;\r\n\r\n case MapEnums.GeometryTypes.POLYGON:\r\n sType = 'POLYGON';\r\n break;\r\n \r\n case MapEnums.GeometryTypes.MULTIPOINT:\r\n sType = 'MULTIPOINT';\r\n break;\r\n \r\n case MapEnums.GeometryTypes.MULTILINESTRING:\r\n sType = 'MULTILINESTRING';\r\n break;\r\n \r\n case MapEnums.GeometryTypes.MULTIPOLYGON:\r\n sType = 'MULTIPOLYGON';\r\n break;\r\n \r\n case MapEnums.GeometryTypes.GEOMETRYCOLLECTION:\r\n sType = 'GEOMETRYCOLLECTION';\r\n break;\r\n \r\n }\r\n\r\n return sType;\r\n }\r\n\r\n get Coordinates() {\r\n return this._geometry.Coordinates;\r\n }\r\n\r\n worldToClient(viewport, force) {\r\n if (this._shape != undefined) {\r\n this._shape.worldToClient(viewport, force);\r\n }\r\n }\r\n\r\n hitTest(x, y) {\r\n if (this.Geometry != null && this.Geometry.hitTest(x,y, this._shape)) {\r\n //console.log(`hitTest(${x}, ${y}) featureid: ${this.id} , type: ${this.Geometry.GeometryType.toString()}, hover: ${this.hovering}`); \r\n return true; \r\n } \r\n\r\n return false;\r\n } \r\n\r\n isVisible(viewport) {\r\n if (this.Geometry != null && this.Geometry.isVisible(viewport)) {\r\n return true; \r\n }\r\n\r\n return false;\r\n }\r\n\r\n intersects(bounds) {\r\n if (this.Geometry != null && this.Geometry.intersects(bounds)) {\r\n return true; \r\n }\r\n\r\n return false;\r\n } \r\n\r\n get Tracking(){\r\n return this.tracking;\r\n }\r\n\r\n get Selected() {\r\n return this.selected;\r\n }\r\n\r\n get Hover() {\r\n return this.featureLayer.Hover;\r\n }\r\n\r\n get Id() {\r\n return this.id != undefined ? this.id : '';\r\n }\r\n \r\n set Tracking(value){\r\n this.tracking = true;\r\n if (value == true){\r\n if (!this.featureLayer.isAlreadyTracked(this.id))\r\n this.featureLayer.tracked.push(this);\r\n } else {\r\n this.featureLayer.removeFromTracked(this);\r\n }\r\n }\r\n \r\n set Selected(value) {\r\n this.selected = value;\r\n if (value == true) {\r\n if(!this.featureLayer.isFeatureAlreadySelected(this.id))\r\n this.featureLayer.selected.push(this);\r\n }\r\n else {\r\n this.featureLayer.removeItemFromSelection(this);\r\n }\r\n }\r\n\r\n get FirstPoint() {\r\n if (this._shape != null && this._shape.Points != null && this._shape.Points.length > 0)\r\n return this._shape.Points[0];\r\n \r\n return null;\r\n }\r\n\r\n get FeatureName() {\r\n if (this.featureLayer.labelStyle != null) {\r\n return this.featureLayer.labelStyle.getFormattedLabel(this);\r\n }\r\n \r\n\r\n return this._featureName;\r\n }\r\n}","import {Feature} from '../layer/feature';\r\nimport {Geometry} from '../geometries/geometry';\r\n\r\nexport class MgShape { \r\n\r\n //#region -- CONSTRUCTORS\r\n constructor(feature) { \r\n this._feature = feature;\r\n this._geometry = feature.Geometry;\r\n\r\n this.labelText = null;\r\n this._labelStyle = feature.featureLayer.labelStyle;\r\n if (this._labelStyle != null)\r\n this.labelText = this._labelStyle.getFormattedLabel(feature);\r\n \r\n this._points = [];\r\n } \r\n //#endregion\r\n \r\n //#region -- GETTERS and SETTERS\r\n \r\n //#endregion\r\n \r\n //#region -- VIRTUALS\r\n /**\r\n * @param {MgCanvas} canvas\r\n * @param {string} strokeColor\r\n * @param {string} fillColor\r\n * @virtual\r\n */\r\n draw(canvas, opacity, context) {\r\n throw new Error(\"Implement draw method\");\r\n }\r\n \r\n drawHover(canvas, opacity, context) {\r\n throw new Error(\"Implement draw method\");\r\n }\r\n\r\n drawSelected(canvas, opacity, context) {\r\n throw new Error(\"Implement draw method\");\r\n }\r\n\r\n render(canvas, opacity, context) {\r\n if (this._feature != null && this._feature.Selected == true)\r\n this.drawSelected(canvas, opacity, context); \r\n else\r\n this.draw(canvas, opacity, context);\r\n }\r\n /**\r\n * @param {Viewport} viewport\r\n * @virtual\r\n */\r\n worldToClient(viewport, force) {\r\n if (this._points == null || this._points.length <= 0 || force == true)\r\n this._points = this.Feature.Geometry.worldToClient(viewport); \r\n }\r\n //#endregion\r\n\r\n //#region -- PROPERTIES\r\n get Feature() {\r\n return this._feature;\r\n }\r\n\r\n get Points() {\r\n return this._points;\r\n }\r\n\r\n get Geometry() {\r\n return this._geometry;\r\n }\r\n\r\n get LabelStyle() {\r\n return this._labelStyle;\r\n }\r\n\r\n get LabelText() {\r\n return this.labelText;\r\n }\r\n \r\n //#endregion\r\n\r\n //#region -- METHODS\r\n /**\r\n * @param {MgShape} x\r\n * @returns boolean \r\n */\r\n compare(x){ \r\n if(this === x)\r\n return true;\r\n\r\n const properties = Object.getOwnPropertyNames(this); \r\n \r\n let bMatch = true;\r\n for(let p of properties) {\r\n if(this[p] != x[p]) {\r\n bMatch = false;\r\n break;\r\n }\r\n }\r\n return bMatch;\r\n } \r\n\r\n hitTest(x, y) {\r\n return false;\r\n }\r\n\r\n intersects(bounds) {\r\n if (this.Geometry)\r\n return this.Geometry.intersects(bounds);\r\n\r\n return false;\r\n }\r\n \r\n getRectExtents() {\r\n return null;\r\n }\r\n //#endregion \r\n}","import {MgShape} from './mgshape';\r\nimport MapEnums from '../map/enums';\r\nimport {Rectangle, Point} from '../geometry/index';\r\n\r\nexport class MgPoint extends MgShape {\r\n \r\n //#region -- CONSTRUCTORS\r\n /**\r\n * @param {Feature} feature\r\n * @param {Wkt} wkt\r\n */\r\n constructor(feature) { \r\n super(feature);\r\n\r\n this.symbol = null;\r\n this.fill = null;\r\n if (feature.ThematicIndex > -1) {\r\n this.symbol = feature.featureLayer.Thematics[feature.ThematicIndex].PointStyle;\r\n }\r\n else if (feature.featureLayer.pointStyle != null) {\r\n this.symbol = feature.featureLayer.pointStyle; \r\n }\r\n } \r\n //#endregion\r\n \r\n //#region -- STATIC METHODS\r\n /**\r\n * @param {number} x\r\n * @param {number} y\r\n */\r\n static createObject(x, y) { \r\n return new MgPoint(x, y); \r\n } \r\n //#endregion \r\n \r\n //#region -- GETTERS and SETTERS \r\n /**\r\n * @returns number\r\n */ \r\n get x() { \r\n return this._x;\r\n }\r\n \r\n /**\r\n * @returns number\r\n */ \r\n get y() {\r\n return this._y;\r\n }\r\n //#endregion \r\n\r\n //#region -- OVERRIDES\r\n /**\r\n * @param {MgCanvas} canvas\r\n * @param {string} strokeColor\r\n * @param {string} fillColor\r\n * @override\r\n */\r\n draw(canvas, opacity, context) { \r\n \r\n if (this._points.length > 0) {\r\n let pt = this._points[0];\r\n\r\n let offsetX = this.symbol.NormalSymbol.width / 2;\r\n let offsetY = this.symbol.NormalSymbol.height / 2;\r\n canvas.drawSymbol(this.symbol.NormalSymbol, pt.x - offsetX, pt.y - offsetY, context);\r\n this.drawText(new Point(pt.x - offsetX, pt.y - offsetY), canvas, offsetX, offsetY, context);\r\n }\r\n }\r\n\r\n drawHover(canvas, opacity, context) {\r\n context.globalCompositeOperation = 'source-over';\r\n\r\n if (this._points.length > 0) {\r\n let pt = this._points[0];\r\n\r\n let offsetX = this.symbol.NormalSymbol.width / 2;\r\n let offsetY = this.symbol.NormalSymbol.height / 2;\r\n canvas.drawSymbol(this.symbol.HoverSymbol, pt.x - this.symbol.HoverSymbol.width / 2, pt.y - this.symbol.HoverSymbol.height / 2, context);\r\n this.drawText(new Point(pt.x - offsetX, pt.y - offsetY), canvas, offsetX, offsetY, context);\r\n }\r\n } \r\n\r\n drawSelected(canvas, opacity, context) {\r\n context.globalCompositeOperation = 'source-over';\r\n\r\n if (this._points.length > 0) {\r\n let pt = this._points[0];\r\n\r\n let offsetX = this.symbol.NormalSymbol.width / 2;\r\n let offsetY = this.symbol.NormalSymbol.height / 2;\r\n canvas.drawSymbol(this.symbol.SelectedSymbol, pt.x - this.symbol.SelectedSymbol.width / 2, pt.y - this.symbol.SelectedSymbol.height / 2, context);\r\n this.drawText(new Point(pt.x - offsetX, pt.y - offsetY), canvas, offsetX, offsetY, context);\r\n }\r\n }\r\n\r\n drawText(pt, canvas, offsetX, offsetY, context) {\r\n if (this.LabelStyle != null && this.LabelStyle.isVisible(this.Feature.featureLayer.map.scale)) {\r\n\r\n var sLabel = this.labelText;\r\n var labelRotation = this.LabelStyle.Rotation != null && this.LabelStyle.Rotation.length > 0 ? parseInt(this.LabelStyle.Rotation) : undefined;\r\n \r\n let newX = pt.x;\r\n let newY = pt.y;\r\n let textAlign = 'start';\r\n\r\n switch (this.LabelStyle.Placement)\r\n {\r\n case MapEnums.Placements.AboveLeft:\r\n newX = pt.x - this.symbol.Width/2;\r\n newY = pt.y - this.symbol.Height/2;\r\n textAlign = 'right';\r\n break;\r\n case MapEnums.Placements.AboveCentre:\r\n newY = pt.y - this.symbol.Height/2;\r\n textAlign = 'left';\r\n break;\r\n case MapEnums.Placements.AboveRight:\r\n newX = pt.x + this.symbol.Width /2;\r\n newY = pt.y - this.symbol.Height/2;\r\n textAlign = 'left';\r\n\r\n break;\r\n case MapEnums.Placements.MiddleLeft:\r\n newX = pt.x - this.symbol.Width/2;\r\n newY = pt.y + offsetY;\r\n textAlign = 'right';\r\n break;\r\n case MapEnums.Placements.MiddleCentre:\r\n textAlign = 'center';\r\n break;\r\n case MapEnums.Placements.MiddleRight:\r\n newX = pt.x + this.symbol.Width;\r\n newY = pt.y + this.symbol.Height/2;\r\n textAlign = 'left';\r\n break;\r\n\r\n case MapEnums.Placements.BelowLeft:\r\n newX = pt.x - this.symbol.Width/2;\r\n newY = pt.y + this.symbol.Height;\r\n textAlign = 'right';\r\n break;\r\n\r\n case MapEnums.Placements.BelowCentre:\r\n newY = pt.y + this.symbol.Height + this.LabelStyle.FontSize;\r\n textAlign = 'center';\r\n break; \r\n\r\n case MapEnums.Placements.BelowRight:\r\n newX = pt.x + this.symbol.Width/2;\r\n newY = pt.y + this.symbol.Height;\r\n textAlign = 'left';\r\n break;\r\n } \r\n\r\n if (sLabel != null) {\r\n canvas.drawText(sLabel, Math.trunc(newX), Math.trunc(newY)+2, labelRotation, this.LabelStyle, textAlign, context); \r\n }\r\n }\r\n }\r\n\r\n getRectExtents() {\r\n if (this._points.length > 0) {\r\n let pt = this._points[0];\r\n\r\n let halfwidth = this.symbol.NormalSymbol.width / 2;\r\n let halfheight = this.symbol.NormalSymbol.height / 2;\r\n \r\n return new Rectangle(pt.x - halfwidth, pt.y - halfheight, pt.x + halfwidth, pt.y + halfheight, true);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n hitTest(x, y) {\r\n this.worldToClient(this._feature.featureLayer.Viewport);\r\n \r\n let extents = this.getRectExtents();\r\n if (extents != null && extents.pointInRect(x, y))\r\n return true;\r\n\r\n return false;\r\n }\r\n //#endregion\r\n}","import * as Colour from './Colour';\r\nimport MapEnums from '../map/enums';\r\n\r\nexport class Stroke {\r\n // @region Constructors\r\n\r\n constructor(lineStyle) {\r\n this.style = lineStyle;\r\n this.colour = lineStyle.Colour != undefined ? Colour.fromString(lineStyle.Colour) : 'black';\r\n this.width = lineStyle.Width;\r\n this.type = this.getStrokeType(lineStyle.Type); \r\n\r\n this.dashPattern = this.getLineDashStyle(lineStyle); \r\n this.pattern = null;\r\n \r\n /*\r\n if (lineStyle.Type == 'Pattern') {\r\n this.patternId = lineStyle.PatternId;\r\n this.patternHeight = lineStyle.PatternHeight; \r\n this.pattern = new Image();\r\n \r\n let img = this.pattern;\r\n this.pattern.onload = function () {\r\n img.width = lineStyle.PatternHeight;\r\n img.height = lineStyle.PatternHeight;\r\n };\r\n\r\n this.pattern.src = \"data:image/svg+xml;charset=utf8, \" + this.sanitisedSVG(lineStyle.Pattern); \r\n } \r\n */ \r\n }\r\n\r\n //clone(other) {\r\n // return new Stroke(other.colour, other.opacity, other.width, other.type, other.endCap, other.lineJoin);\r\n //}\r\n\r\n getStrokeType(sType) {\r\n if (sType == undefined)\r\n return MapEnums.StrokeTypes.None;\r\n else if (sType == 'Solid')\r\n return MapEnums.StrokeTypes.Solid;\r\n else if (sType == 'DashStyle')\r\n return MapEnums.StrokeTypes.DashStyle;\r\n else if (sType == 'DashPattern')\r\n return MapEnums.StrokeTypes.DashPattern; \r\n else if (sType == 'Pattern')\r\n return MapEnums.StrokeTypes.Pattern;\r\n }\r\n \r\n getLineDashStyle(lineStyle) {\r\n //\r\n // Solid = 0,\r\n // Dash = 1,\r\n // Dot = 2,\r\n // DashDot = 3,\r\n // DashDotDot = 4,\r\n var lineDashStyle = []; // If its solid, just set the array to empty\r\n\r\n if (lineStyle.Type == 'DashStyle') {\r\n if (lineStyle.DashStyle == 'Dash')\r\n lineDashStyle = [4,3];\r\n else if (lineStyle.DashStyle == 'Dot')\r\n lineDashStyle = [2,2];\r\n else if (lineStyle.DashStyle == 'DashDot')\r\n lineDashStyle = [4, 3, 2, 3];\r\n else if (lineStyle.DashStyle == 'DashDotDot')\r\n lineDashStyle = [4, 3, 2, 3, 3, 2];\r\n }\r\n else if (lineStyle.Type == 'DashPattern') {\r\n //lineDashStyle.push.apply(arrayNum, lineStyle.DashPattern.split(\",\").map(Number));\r\n var strings = lineStyle.DashPattern.split(\",\");\r\n for (let i=0; i < strings.length; i++)\r\n lineDashStyle.push( + strings[i] );\r\n } \r\n \r\n\r\n return lineDashStyle;\r\n }\r\n\r\n setTrackingStyle(lineStyle, trackingColour, trackingWidth){\r\n var trackingStyle = {\r\n 'Colour' : trackingColour,\r\n 'Width' : this.width * trackingWidth,\r\n 'Type' : lineStyle.Type,\r\n 'DashStyle': lineStyle.DashStyle,\r\n 'DashPattern': lineStyle.DashPattern,\r\n 'Pattern' : lineStyle.Pattern,\r\n 'PatternId' : lineStyle.PatternId,\r\n 'PatternHeight' : lineStyle.PatternHeight,\r\n };\r\n\r\n this.trackingStroke = new Stroke(trackingStyle);\r\n\r\n }\r\n \r\n setHoverAndSelectedStyles(lineStyle, hoverColour, hoverWidth, selectedColour, selectedWidth) {\r\n var hoverStyle = {\r\n 'Colour' : hoverColour,\r\n 'Width' : this.width * hoverWidth,\r\n 'Type' : lineStyle.Type,\r\n 'DashStyle': lineStyle.DashStyle,\r\n 'DashPattern': lineStyle.DashPattern,\r\n 'Pattern' : lineStyle.Pattern,\r\n 'PatternId' : lineStyle.PatternId,\r\n 'PatternHeight' : lineStyle.PatternHeight,\r\n };\r\n\r\n\r\n var selectedStyle = {\r\n 'Colour' : selectedColour,\r\n 'Width' : this.width * selectedWidth,\r\n 'Type' : lineStyle.Type,\r\n 'DashStyle': lineStyle.DashStyle,\r\n 'DashPattern': lineStyle.DashPattern,\r\n 'Pattern' : lineStyle.Pattern,\r\n 'PatternId' : lineStyle.PatternId,\r\n 'PatternHeight' : lineStyle.PatternHeight,\r\n };\r\n\r\n this.hoverStroke = new Stroke(hoverStyle);\r\n this.selectedStroke = new Stroke(selectedStyle);\r\n }\r\n\r\n sanitisedSVG(svg) {\r\n var sanitized = svg.replace(/\\/g,'%3E') //for >\r\n sanitized = sanitized.replace(/\\#/g,'%23') //for #\r\n \r\n return sanitized;\r\n }\r\n // @region Properties \r\n get IsEmpty() {\r\n return (type == Types.None || width == 0.0 || opacity == 0 || colour == \"none\");\r\n }\r\n \r\n get LineCap() {\r\n var lineCap = \"\";\r\n\r\n switch (this.endCap)\r\n {\r\n case MapEnums.EndCaps.Butt:\r\n lineCap = \"butt\";\r\n break;\r\n case MapEnums.EndCaps.Round:\r\n lineCap = \"round\";\r\n break;\r\n case MapEnums.EndCaps.Square:\r\n lineCap = \"square\";\r\n break;\r\n default:\r\n lineCap = \"square\";\r\n break;\r\n }\r\n\r\n return lineCap; \r\n } \r\n\r\n get Colour() {\r\n return this.colour;\r\n }\r\n \r\n get Width() {\r\n return this.width;\r\n }\r\n\r\n get DashPattern() {\r\n return this.dashPattern;\r\n }\r\n\r\n get Pattern() {\r\n return this.pattern;\r\n }\r\n\r\n get StrokeType() {\r\n return this.type;\r\n }\r\n\r\n loadPattern(baseUrl, accessToken, debugMode = false) {\r\n if (this.type == MapEnums.StrokeTypes.Pattern) {\r\n let base64 = window.btoa(debugMode ? JSON.stringify(this.style) : JSON.stringify(this.style.objJSON));\r\n let imageUrl = `${baseUrl}\\GenerateStrokePattern?token=${accessToken}&jStyle=${base64}&size=24`;\r\n \r\n this.pattern = new Image();\r\n let __this = this;\r\n\r\n this.pattern.onload = function () {\r\n __this.pattern.width = __this.style.PatternHeight;\r\n __this.pattern.height = __this.style.PatternHeight;\r\n };\r\n\r\n this.pattern.src = imageUrl; \r\n }\r\n }\r\n}\r\n//Stroke.None = new Stroke(Colour.CssColours.none,0,0,StrokeTypes.None);\r\n//Stroke.Default = new Stroke(Colour.CssColours.Black,100,2, StrokeTypes.Solid);\r\n\r\n","import {MgShape} from './mgshape';\r\nimport { MgPoint } from './mgpoint';\r\nimport { Stroke} from '../drawing/Stroke';\r\nimport {MapPrimitive, LabelPoint} from './mapprimitive';\r\nimport {Point} from '../geometry/index';\r\n\r\nexport class MgLine extends MgShape {\r\n \r\n\r\n //#region -- CONSTRUCTORS\r\n /**\r\n * @param {number[[]]} points\r\n */\r\n constructor(feature) { \r\n super(feature);\r\n\r\n this.stroke = null;\r\n \r\n if (feature.ThematicIndex > -1) {\r\n this.stroke = feature.featureLayer.Thematics[feature.ThematicIndex].LineStyle;\r\n }\r\n else if (feature.featureLayer.LineStyle != null) {\r\n this.stroke = feature.featureLayer.LineStyle; \r\n } \r\n } \r\n //#endregion\r\n \r\n //#region -- STATIC METHODS\r\n /**\r\n * @param {number[[]]} points\r\n */\r\n static createObject(points) { \r\n return new MgLine(points); \r\n } \r\n //#endregion\r\n\r\n \r\n //#region -- OVERRIDES\r\n /**\r\n * @param {MgCanvas} canvas\r\n * @param {string} strokeColor\r\n * @param {string} fillColor\r\n * @override\r\n */ \r\n draw(canvas, opacity, context) {\r\n if (this.stroke != null) {\r\n this.drawLine(canvas, opacity, this.stroke, context);\r\n } \r\n }\r\n\r\n drawHover(canvas, opacity, context) {\r\n context.globalCompositeOperation = 'source-over';\r\n \r\n if (this.stroke != null) {\r\n this.drawLine(canvas, opacity, this.stroke.hoverStroke, context);\r\n } \r\n }\r\n\r\n drawSelected(canvas, opacity, context) {\r\n context.globalCompositeOperation = 'source-over';\r\n if (this.stroke != null) {\r\n this.drawLine(canvas, opacity, this.stroke.selectedStroke, context);\r\n } \r\n }\r\n\r\n drawLine(canvas, opacity, stroke, context) {\r\n canvas.drawLine(this._points, stroke, opacity, context); \r\n this.drawText(this._points, canvas, context); \r\n }\r\n \r\n getRectExtents() {\r\n return MapPrimitive.CalculateExtents(this._points); \r\n }\r\n \r\n drawText(pts, canvas, context) {\r\n const DEG_TO_RAD = 0.017453292519943296;\r\n if (this.LabelStyle != null && this.LabelStyle.isVisible(this.Feature.featureLayer.map.scale)) {\r\n if (true) { //this.labelPoint == null || canvas.xOffset == null || canvas.yOffset == null ) { \r\n this.labelPoint = new LabelPoint();\r\n let rcExtents = MapPrimitive.CalculateExtents(pts);\r\n var sLabel = this.labelText;\r\n var labelRotation = this.LabelStyle.Rotation != null && this.LabelStyle.Rotation.length > 0 ? parseInt(this.LabelStyle.Rotation) : undefined;\r\n \r\n var pt = null;\r\n if (pts == null)\r\n sLabel = null;\r\n else if (MapPrimitive.GetPolylineLabelPoint(pts, 0, labelRotation, this.labelPoint)) {\r\n labelRotation = this.labelPoint.angle;\r\n pt = this.labelPoint.pt;\r\n }\r\n else\r\n sLabel = null;\r\n \r\n if (sLabel != null && sLabel.length > 0 && pt != null) {\r\n let textWidth = canvas.getTextWidth(sLabel);\r\n let halfLabelHeight = this.LabelStyle.FontSize / 2 + 2;\r\n let halfLabelWidth = textWidth / 2;\r\n\r\n let angleInRadians = DEG_TO_RAD * labelRotation;\r\n let cos = Math.cos(angleInRadians);\r\n let sin = Math.sin(angleInRadians);\r\n\r\n var tangent = {\r\n \"Width\": (cos * halfLabelWidth), \r\n \"Height\": (sin * halfLabelWidth)\r\n }\r\n var perpendicular = {\r\n \"Width\": sin * halfLabelHeight,\r\n \"Height\": cos * halfLabelHeight\r\n }\r\n\r\n let ptUpperLeft = new Point(pt.x - tangent.Width + perpendicular.Width, pt.y - perpendicular.Height - tangent.Height);\r\n let ptLowerLeft = new Point(pt.x - tangent.Width - perpendicular.Width, pt.y + perpendicular.Height - tangent.Height);\r\n\r\n let ptUpperRight = new Point(pt.x + tangent.Width + perpendicular.Width, pt.y - perpendicular.Height + tangent.Height);\r\n let ptLowerRight = new Point(pt.x + tangent.Width - perpendicular.Width, pt.y + perpendicular.Height + tangent.Height);\r\n\r\n // basic test. Note: We should be doing line intersection like mapserv\r\n if (this.isMouseOver(rcExtents, pts, ptUpperLeft) && this.isMouseOver(rcExtents, pts, ptUpperRight) && \r\n this.isMouseOver(rcExtents, pts, ptLowerRight) && this.isMouseOver(rcExtents, pts, ptLowerLeft)) {\r\n canvas.drawText(sLabel, Math.trunc(pt.x), Math.trunc(pt.y), labelRotation, this.LabelStyle, 'center', context) \r\n }\r\n else {\r\n this.labelPoint = null; \r\n }\r\n } \r\n }\r\n }\r\n }\r\n\r\n isMouseOver(rcExtents, points, ptMouse) {\r\n var bFound = false;\r\n\r\n if (rcExtents.pointInRect(ptMouse.x, ptMouse.y)) {\r\n bFound = MapPrimitive.PolygonContains(points, ptMouse); \r\n }\r\n\r\n return bFound;\r\n }\r\n //#endregion \r\n \r\n}","import {MgShape} from './mgshape';\r\n\r\nexport class MgEllipse extends MgShape {\r\n \r\n //#region -- CONSTRUCTORS\r\n constructor() {\r\n super();\r\n } \r\n //#endregion\r\n\r\n //#region -- STATIC METHODS\r\n static createObject() { \r\n return new MgEllipse(); \r\n } \r\n //#endregion\r\n \r\n //#region -- OVERRIDES \r\n /**\r\n * @param {MgCanvas} canvas\r\n * @param {string} strokeColor\r\n * @param {string} fillColor\r\n * @override\r\n */\r\n draw(canvas, strokeColor, fillColor) {\r\n }\r\n //#endregion\r\n}","export class TinyQueue {\r\n constructor(data = [], compare = defaultCompare) {\r\n this.data = data;\r\n this.length = this.data.length;\r\n this.compare = compare;\r\n\r\n if (this.length > 0) {\r\n for (let i = (this.length >> 1) - 1; i >= 0; i--) this._down(i);\r\n }\r\n }\r\n\r\n push(item) {\r\n this.data.push(item);\r\n this._up(this.length++);\r\n }\r\n\r\n pop() {\r\n if (this.length === 0) return undefined;\r\n\r\n const top = this.data[0];\r\n const bottom = this.data.pop();\r\n\r\n if (--this.length > 0) {\r\n this.data[0] = bottom;\r\n this._down(0);\r\n }\r\n\r\n return top;\r\n }\r\n\r\n peek() {\r\n return this.data[0];\r\n }\r\n\r\n _up(pos) {\r\n const {data, compare} = this;\r\n const item = data[pos];\r\n\r\n while (pos > 0) {\r\n const parent = (pos - 1) >> 1;\r\n const current = data[parent];\r\n if (compare(item, current) >= 0) break;\r\n data[pos] = current;\r\n pos = parent;\r\n }\r\n\r\n data[pos] = item;\r\n }\r\n\r\n _down(pos) {\r\n const {data, compare} = this;\r\n const halfLength = this.length >> 1;\r\n const item = data[pos];\r\n\r\n while (pos < halfLength) {\r\n let bestChild = (pos << 1) + 1; // initially it is the left child\r\n const right = bestChild + 1;\r\n\r\n if (right < this.length && compare(data[right], data[bestChild]) < 0) {\r\n bestChild = right;\r\n }\r\n if (compare(data[bestChild], item) >= 0) break;\r\n\r\n data[pos] = data[bestChild];\r\n pos = bestChild;\r\n }\r\n\r\n data[pos] = item;\r\n }\r\n}\r\n\r\nfunction defaultCompare(a, b) {\r\n return a < b ? -1 : a > b ? 1 : 0;\r\n}","import MapEnums from '../map/enums';\r\nimport {Point} from '../geometry/Point';\r\nimport {Rectangle} from '../geometry/rectangle';\r\nimport {TinyQueue} from '../api/tinyqueue';\r\n\r\nexport class Cell {\r\n constructor(x, y, h, polygon) {\r\n this.x = x; // cell center x\r\n this.y = y; // cell center y\r\n this.h = h; // half the cell size\r\n this.d = PolyLabel.pointToPolygonDist(x, y, polygon); // distance from cell center to polygon\r\n this.max = this.d + this.h * Math.SQRT2; // max distance to polygon within a cell\r\n }\r\n}\r\n\r\nexport class MgPolyLabel { \r\n constructor() {\r\n }\r\n\r\n GetPolygonLabelPoint(polygon, precision, debug) {\r\n precision = precision || 1.0;\r\n\r\n // find the bounding box of the outer ring\r\n var minX, minY, maxX, maxY;\r\n for (var i = 0; i < polygon[0].length; i++) {\r\n var p = polygon[0][i];\r\n if (!i || p.x < minX) minX = p.x;\r\n if (!i || p.y < minY) minY = p.y;\r\n if (!i || p.x > maxX) maxX = p.x;\r\n if (!i || p.y > maxY) maxY = p.y;\r\n /*\r\n if (!i || pt.x < minX) minX = pt.x;\r\n if (!i || pt.y < minY) minY = pt.y;\r\n if (!i || pt.x > maxX) maxX = pt.x;\r\n if (!i || pt.y > maxY) maxY = pt.y;\r\n */\r\n }\r\n\r\n var width = maxX - minX;\r\n var height = maxY - minY;\r\n var cellSize = Math.min(width, height);\r\n var h = cellSize / 2;\r\n\r\n if (cellSize === 0) {\r\n var degeneratePoleOfInaccessibility = [minX, minY];\r\n degeneratePoleOfInaccessibility.distance = 0;\r\n return degeneratePoleOfInaccessibility;\r\n }\r\n\r\n // a priority queue of cells in order of their \"potential\" (max distance to polygon)\r\n var cellQueue = new TinyQueue(undefined, this.compareMax);\r\n\r\n // cover polygon with initial cells\r\n for (var x = minX; x < maxX; x += cellSize) {\r\n for (var y = minY; y < maxY; y += cellSize) {\r\n cellQueue.push(new Cell(x + h, y + h, h, polygon));\r\n }\r\n }\r\n\r\n // take centroid as the first best guess\r\n var bestCell = this.getCentroidCell(polygon);\r\n\r\n // special case for rectangular polygons\r\n var bboxCell = new Cell(minX + width / 2, minY + height / 2, 0, polygon);\r\n if (bboxCell.d > bestCell.d) bestCell = bboxCell;\r\n\r\n var numProbes = cellQueue.length;\r\n\r\n while (cellQueue.length) {\r\n // pick the most promising cell from the queue\r\n var cell = cellQueue.pop();\r\n\r\n // update the best cell if we found a better one\r\n if (cell.d > bestCell.d) {\r\n bestCell = cell;\r\n if (debug) console.log('found best %d after %d probes', Math.round(1e4 * cell.d) / 1e4, numProbes);\r\n }\r\n\r\n // do not drill down further if there's no chance of a better solution\r\n if (cell.max - bestCell.d <= precision) continue;\r\n\r\n // split the cell into four cells\r\n h = cell.h / 2;\r\n cellQueue.push(new Cell(cell.x - h, cell.y - h, h, polygon));\r\n cellQueue.push(new Cell(cell.x + h, cell.y - h, h, polygon));\r\n cellQueue.push(new Cell(cell.x - h, cell.y + h, h, polygon));\r\n cellQueue.push(new Cell(cell.x + h, cell.y + h, h, polygon));\r\n numProbes += 4;\r\n }\r\n\r\n if (debug) {\r\n console.log('num probes: ' + numProbes);\r\n console.log('best distance: ' + bestCell.d);\r\n }\r\n\r\n var poleOfInaccessibility = [bestCell.x, bestCell.y];\r\n poleOfInaccessibility.distance = bestCell.d;\r\n return poleOfInaccessibility;\r\n }\r\n\r\n compareMax(a, b) {\r\n return b.max - a.max;\r\n }\r\n \r\n // signed distance from point to polygon outline (negative if point is outside)\r\n pointToPolygonDist(x, y, polygon) {\r\n var inside = false;\r\n var minDistSq = Infinity;\r\n\r\n for (var k = 0; k < polygon.length; k++) {\r\n var ring = polygon[k];\r\n\r\n for (var i = 0, len = ring.length, j = len - 1; i < len; j = i++) {\r\n var a = ring[i];\r\n var b = ring[j];\r\n\r\n if ((a.y > y !== b.y > y) &&\r\n (x < (b.x - a.x) * (y - a.y) / (b.y - a.y) + a.x)) inside = !inside;\r\n\r\n minDistSq = Math.min(minDistSq, this.getSegDistSq(x, y, a, b));\r\n }\r\n }\r\n\r\n return minDistSq === 0 ? 0 : (inside ? 1 : -1) * Math.sqrt(minDistSq);\r\n }\r\n\r\n // get polygon centroid\r\n getCentroidCell(polygon) {\r\n var area = 0;\r\n var x = 0;\r\n var y = 0;\r\n var points = polygon[0];\r\n\r\n for (var i = 0, len = points.length, j = len - 1; i < len; j = i++) {\r\n var a = points[i];\r\n var b = points[j];\r\n var f = a.x * b.y - b.x * a.y;\r\n x += (a.x + b.x) * f;\r\n y += (a.y + b.y) * f;\r\n area += f * 3;\r\n }\r\n if (area === 0) return new Cell(points[0][0], points[0][1], 0, polygon);\r\n return new Cell(x / area, y / area, 0, polygon);\r\n }\r\n\r\n // get squared distance from a point to a segment\r\n getSegDistSq(px, py, a, b) {\r\n\r\n var x = a.x;\r\n var y = a.y;\r\n var dx = b.x - x;\r\n var dy = b.y - y;\r\n\r\n if (dx !== 0 || dy !== 0) {\r\n\r\n var t = ((px - x) * dx + (py - y) * dy) / (dx * dx + dy * dy);\r\n\r\n if (t > 1) {\r\n x = b.x;\r\n y = b.y;\r\n\r\n } else if (t > 0) {\r\n x += dx * t;\r\n y += dy * t;\r\n }\r\n }\r\n\r\n dx = px - x;\r\n dy = py - y;\r\n\r\n return dx * dx + dy * dy;\r\n }\r\n}\r\n\r\nexport let PolyLabel = new MgPolyLabel();","import {MgShape} from './mgshape';\r\nimport { MgPoint } from './mgpoint';\r\nimport { GeoPolygon } from '../geometries';\r\nimport {MapPrimitive, LabelPoint} from './mapprimitive';\r\nimport {PolyLabel} from './polylabel';\r\nimport {Rectangle, Point} from '../geometry/index';\r\n\r\nexport class MgPolygon extends MgShape {\r\n \r\n //#region -- CONSTRUCTORS\r\n /**\r\n * @param {number[[]]} points\r\n */\r\n constructor(feature) { \r\n super(feature);\r\n this.exteriorPoints = [];\r\n this.interiorPoints = [[]]; \r\n\r\n this.stroke = null;\r\n this.fill = null;\r\n this.labelPoint = null;\r\n\r\n if (feature.ThematicIndex > -1) {\r\n this.stroke = feature.featureLayer.Thematics[feature.ThematicIndex].PolygonStyle.Stroke;\r\n this.fill = feature.featureLayer.Thematics[feature.ThematicIndex].PolygonStyle.Fill; \r\n }\r\n else if (feature.featureLayer.PolygonStyle != null) {\r\n this.stroke = feature.featureLayer.PolygonStyle.Stroke;\r\n this.fill = feature.featureLayer.PolygonStyle.Fill; \r\n }\r\n \r\n } \r\n //#endregion\r\n\r\n //#region -- STATIC METHODS\r\n /**\r\n * @param {number[[]]} points\r\n * @returns MgPolygon\r\n */\r\n static createObject(points) { \r\n return new MgPolygon(points); \r\n } \r\n //#endregion \r\n\r\n //#region -- OVERRIDES\r\n /**\r\n * @param {MgCanvas} canvas\r\n * @param {string} strokeColor\r\n * @param {string} fillColor \r\n * @override\r\n */\r\n draw(canvas, opacity, context) {\r\n if (this.stroke != null || this.fill != null) {\r\n for (let i = 0; i < this._points.length; i++) {\r\n canvas.drawPolygon(this._points[i], this.stroke, this.fill, opacity, context);\r\n\r\n // exterior points\r\n if (i == 0) {\r\n this.drawText(this._points[i], canvas, context); \r\n }\r\n } \r\n }\r\n } \r\n\r\n drawHover(canvas, opacity, context) {\r\n context.globalCompositeOperation = 'source-over';\r\n\r\n let localFill = this.fill;\r\n\r\n if (this.fill && this.fill.style && this.fill.style.Type === \"Hatch\" && this.fill.hoverPattern) {\r\n localFill = Object.assign({}, this.fill, {pattern: this.fill.hoverPattern});\r\n }\r\n\r\n let hoverFill = (localFill && localFill.hoverFill) ? localFill.hoverFill: null;\r\n \r\n if (this.stroke != null || this.fill != null) {\r\n for (let i = 0; i < this._points.length; i++) {\r\n\r\n canvas.drawPolygon(this._points[i], this.stroke.hoverStroke, hoverFill, opacity, context);\r\n\r\n // exterior points\r\n if (i == 0) {\r\n this.drawText(this._points[i], canvas, context); \r\n }\r\n }\r\n }\r\n } \r\n\r\n drawSelected(canvas, opacity, context) {\r\n context.globalCompositeOperation = 'source-over';\r\n\r\n let selectedFill = (this.fill && this.fill.selectedFill) ? this.fill.selectedFill: null;\r\n \r\n if (this.stroke != null || this.fill != null) {\r\n for (let i = 0; i < this._points.length; i++) {\r\n canvas.drawPolygon(this._points[i], this.stroke.selectedStroke, selectedFill, opacity, context);\r\n\r\n // exterior points\r\n if (i == 0) {\r\n this.drawText(this._points[i], canvas, context); \r\n }\r\n }\r\n }\r\n } \r\n\r\n drawTracked(canvas, opacity, context) {\r\n context.globalCompositeOperation = 'source-over';\r\n\r\n let trackingFill = (this.fill && this.fill.trackingFill) ? this.fill.trackingFill: null;\r\n \r\n if (this.stroke != null || this.fill != null) {\r\n for (let i = 0; i < this._points.length; i++) {\r\n canvas.drawPolygon(this._points[i], this.stroke.trackingStroke, trackingFill, opacity, context);\r\n\r\n // exterior points\r\n if (i == 0) {\r\n this.drawText(this._points[i], canvas, context); \r\n }\r\n }\r\n }\r\n } \r\n\r\n drawPolygon(points, canvas, opacity, stroke, fill, context) {\r\n for (let i = 0; i < points.length; i++) {\r\n canvas.drawPolygon(points[i], stroke, i == 0 ? fill : null, opacity, context);\r\n\r\n // exterior points\r\n if (i == 0) { \r\n this.drawText(points[i], canvas); \r\n }\r\n } \r\n }\r\n\r\n drawText(pts, canvas, context) {\r\n const DEG_TO_RAD = 0.017453292519943296;\r\n if (this.LabelStyle != null && this.LabelStyle.isVisible(this.Feature.featureLayer.map.scale)) {\r\n if (true) { //this.labelPoint == null || canvas.xOffset == null || canvas.yOffset == null ) {\r\n /*\r\n var labelRotation = this.LabelStyle.Rotation != null && this.LabelStyle.Rotation.length > 0 ? parseInt(this.LabelStyle.Rotation) : undefined;\r\n\r\n const message = {\r\n Label : this.labelText,\r\n TextWidth : canvas.getTextWidth(this.labelText),\r\n FontSize : this.LabelStyle.FontSize,\r\n Points : pts,\r\n SuggestedAngle : labelRotation\r\n }\r\n\r\n this._feature.featureLayer.mpWorker.postMessage(message);\r\n */\r\n this.labelPoint = new LabelPoint();\r\n let rcExtents = MapPrimitive.CalculateExtents(pts);\r\n var sLabel = this.labelText;\r\n var labelRotation = this.LabelStyle.Rotation != null && this.LabelStyle.Rotation.length > 0 ? parseInt(this.LabelStyle.Rotation) : undefined;\r\n \r\n var pt = null;\r\n if (pts == null || pts.Length < 3)\r\n sLabel = null;\r\n else if (MapPrimitive.GetPolygonLabelPoint(rcExtents, pts, labelRotation, this.labelPoint)) {\r\n labelRotation = this.labelPoint.angle;\r\n pt = this.labelPoint.pt;\r\n }\r\n else\r\n sLabel = null;\r\n \r\n if (sLabel != null && sLabel.length > 0 && pt != null) {\r\n let textWidth = canvas.getTextWidth(sLabel);\r\n let halfLabelHeight = this.LabelStyle.FontSize / 2 + 2;\r\n let halfLabelWidth = textWidth / 2;\r\n\r\n let angleInRadians = DEG_TO_RAD * labelRotation;\r\n let cos = Math.cos(angleInRadians);\r\n let sin = Math.sin(angleInRadians);\r\n\r\n var tangent = {\r\n \"Width\": (cos * halfLabelWidth), \r\n \"Height\": (sin * halfLabelWidth)\r\n }\r\n var perpendicular = {\r\n \"Width\": sin * halfLabelHeight,\r\n \"Height\": cos * halfLabelHeight\r\n }\r\n\r\n let ptUpperLeft = new Point(pt.x - tangent.Width + perpendicular.Width, pt.y - perpendicular.Height - tangent.Height);\r\n let ptLowerLeft = new Point(pt.x - tangent.Width - perpendicular.Width, pt.y + perpendicular.Height - tangent.Height);\r\n\r\n let ptUpperRight = new Point(pt.x + tangent.Width + perpendicular.Width, pt.y - perpendicular.Height + tangent.Height);\r\n let ptLowerRight = new Point(pt.x + tangent.Width - perpendicular.Width, pt.y + perpendicular.Height + tangent.Height);\r\n\r\n // basic test. Note: We should be doing line intersection like mapserv\r\n if (this.isMouseOver(rcExtents, pts, ptUpperLeft) && this.isMouseOver(rcExtents, pts, ptUpperRight) && \r\n this.isMouseOver(rcExtents, pts, ptLowerRight) && this.isMouseOver(rcExtents, pts, ptLowerLeft)) {\r\n canvas.drawText(sLabel, Math.trunc(pt.x), Math.trunc(pt.y), labelRotation, this.LabelStyle, 'center', context) \r\n }\r\n else {\r\n this.labelPoint = null;\r\n //let dist = PolyLabel.pointToPolygonDist(pt.x, pt.y, this._points);\r\n //if (dist > -1 && rcExtents.width > textWidth*2) {\r\n // canvas.drawText(sLabel, Math.trunc(pt.x), Math.trunc(pt.y), labelRotation, this.LabelStyle) \r\n //}\r\n }\r\n } \r\n }\r\n else if (this.labelText.length > 0) {\r\n let x = Math.trunc(this.labelPoint.pt.x) + canvas.xOffset; \r\n let y = Math.trunc(this.labelPoint.pt.y) + canvas.yOffset; \r\n if (x > 0 && y > 0) {\r\n canvas.drawText(this.labelText, x, y, this.labelPoint.angle, this.LabelStyle, context) \r\n }\r\n }\r\n \r\n }\r\n }\r\n\r\n drawTextCallback(pts, canvas, context) {\r\n\r\n }\r\n isMouseOver(rcExtents, points, ptMouse) {\r\n var bFound = false;\r\n\r\n if (rcExtents.pointInRect(ptMouse.x, ptMouse.y)) {\r\n bFound = MapPrimitive.PolygonContains(points, ptMouse);\r\n /* \r\n if (this._points.length > 1) {\r\n for (let index = 1; bFound && index < this._points.length; index++)\r\n bFound = !MapPrimitive.PolygonContains(this._points[index], ptMouse);\r\n }\r\n */\r\n }\r\n\r\n return bFound;\r\n }\r\n\r\n getRectExtents() {\r\n if (this._points != null && this._points.length > 0) {\r\n return MapPrimitive.CalculateExtents(this._points[0]);\r\n }\r\n\r\n return null;\r\n }\r\n //#endregion \r\n}","import {Viewport} from './viewport';\r\nimport {Util} from '../core/index';\r\nimport {TileSource} from '../layer/tilesource';\r\nimport {Tile, LoadStates} from '../layer/tile';\r\nimport {MapEnums} from '../map/enums';\r\nimport {MgCanvas} from '../map/canvas';\r\n\r\nexport class TileViewport extends Viewport\r\n{\r\n // @section Constructors\r\n\r\n constructor(view, world, Cellsize, scale, tileSource, canvas, opacity){\r\n super(view, world, Cellsize, scale)\r\n \r\n this.initialise();\r\n this.canvas = canvas;\r\n this.tileSource = tileSource;\r\n this.level = tileSource.getNearestLevel(Cellsize);\r\n this.googleTileSize = tileSource.getGoogleTileSize(this.level);\r\n this.offScreenCanvas = undefined;\r\n this.offScreenContext = undefined;\r\n this.opacity = opacity != null ? opacity : 1.0;\r\n\r\n this.createOffscreenCanvas(canvas);\r\n\r\n this.maxColumns = 1;\r\n for (let index = 1; index <= this.level; index++)\r\n this.maxColumns = this.maxColumns << 1;\r\n\r\n var boundsObj = {\r\n minX : 0,\r\n minY : 0,\r\n maxX : 0,\r\n maxY : 0\r\n };\r\n\r\n this.normalisedMinX = this.tileSource.normalise(world.MinX, TileSource.LatLongExtents.MinX, TileSource.LatLongExtents.MaxX);\r\n this.normalisedMaxY = this.tileSource.normalise(world.MaxY, TileSource.LatLongExtents.MinY, TileSource.LatLongExtents.MaxY);\r\n tileSource.transformExtentsFromLatLong(world.MinX, world.MinY, world.MaxX, world.MaxY, boundsObj);\r\n\r\n this.firstCol = Math.floor((boundsObj.minX - TileSource.GoogleExtents.MinX) / this.googleTileSize);\r\n this.firstRow = Math.floor((TileSource.GoogleExtents.MaxY - boundsObj.maxY) / this.googleTileSize);\r\n this.lastCol = Math.floor((boundsObj.maxX - TileSource.GoogleExtents.MinX) / this.googleTileSize);\r\n this.lastRow = Math.floor((TileSource.GoogleExtents.MaxY - boundsObj.minY) / this.googleTileSize);\r\n\r\n this.cCols = (this.lastCol >= this.firstCol) ? (this.lastCol - this.firstCol + 1) : (this.maxColumns - this.firstCol + this.lastCol + 1);\r\n this.cRows = (this.lastRow >= this.firstRow) ? (this.lastRow - this.firstRow + 1) : (this.maxColumns - this.firstRow + this.lastRow + 1);\r\n this.tiles = [this.cCols];\r\n \r\n var col = this.firstCol; \r\n var i = 0;\r\n for (var nCol = 0; nCol < this.cCols; nCol++) {\r\n this.tiles[nCol] = [this.cRows];\r\n var row = this.firstRow;\r\n\r\n for (var nRow = 0; nRow < this.cRows; nRow++) {\r\n this.tiles[nCol][nRow] = this.tileSource.getTile(this.level, col, row, this);\r\n i++;\r\n // need to do wrapping\r\n if (++row == this.maxColumns)\r\n row = 0;\r\n }\r\n\r\n // need to do wrapping\r\n if (++col == this.maxColumns)\r\n col = 0;\r\n }\r\n }\r\n\r\n // @section Fields\r\n\r\n initialise() {\r\n \r\n this.level = -1;\r\n this.firstCol = -1;\r\n this.firstRow = -1;\r\n this.lastCol = -1;\r\n this.lastRow = -1;\r\n this.maxColumns = -1;\r\n this.normalisedMinX = 0.0\r\n this.normalisedMaxY = 0.0;\r\n\r\n this.tiles = [];\r\n }\r\n\r\n dispose(tileSource, now) {\r\n for (let nCol = 0; nCol < this.cCols; nCol++) {\r\n for (let nRow = 0; nRow < this.cRows; nRow++) {\r\n tileSource.dereferenceTile(this.tiles[nCol][nRow], now);\r\n }\r\n }\r\n }\r\n\r\n // @section Methods\r\n\r\n isLoaded() {\r\n var dims = Util.getArrayDimensions(this.tiles);\r\n var cCols = dims[0];\r\n var cRows = dims[1];\r\n bIsLoaded = true;\r\n\r\n for (var nCol = 0; bIsLoaded && nCol < cCols; nCol++) {\r\n for (var nRow = 0; bIsLoaded && nRow < cRows; nRow++)\r\n bIsLoaded = tiles[nCol][nRow].Image != null;\r\n }\r\n\r\n return bIsLoaded;\r\n }\r\n\r\n /* TODO\r\n RenderFull(TileSource tileSource, out Geometries.RectObj srcExtents) {\r\n int x, nCol, cCols = tiles.GetLength(0);\r\n int y, nRow, cRows = tiles.GetLength(1);\r\n Tile upperLeft = tiles[0, 0], lowerRight = tiles[cCols - 1, cRows - 1];\r\n Bitmap bitmap = new Bitmap(cCols * tileSource.ImageSize, cRows * tileSource.ImageSize, tilePixelFormat);\r\n\r\n using (Graphics g = Graphics.FromImage(bitmap))\r\n {\r\n for (x = 0, nCol = 0; nCol < cCols; nCol++)\r\n {\r\n for (y = 0, nRow = 0; nRow < cRows; nRow++)\r\n {\r\n Image image = tiles[nCol, nRow].Image;\r\n\r\n if (image != null)\r\n g.DrawImage(image, new Rectangle(x, y, tileSource.ImageSize, tileSource.ImageSize), 0, 0, tileSource.ImageSize, tileSource.ImageSize, GraphicsUnit.Pixel);\r\n\r\n y += tileSource.ImageSize;\r\n }\r\n\r\n x += tileSource.ImageSize;\r\n }\r\n }\r\n\r\n srcExtents = new Geometries.RectObj(upperLeft.LatLongMinX, lowerRight.LatLongMinY, lowerRight.LatLongMaxX, upperLeft.LatLongMaxY);\r\n\r\n return bitmap;\r\n }\r\n\r\n public Bitmap RenderScaled(PixelFormat tilePixelFormat, TileSource tileSource, int opacity, out Geometries.RectObj srcExtents)\r\n {\r\n Bitmap bitmap = new Bitmap(Client.Width, Client.Height, tilePixelFormat);\r\n\r\n using (Graphics g = Graphics.FromImage(bitmap))\r\n Render(g, tileSource, opacity);\r\n\r\n srcExtents = new Geometries.RectObj(World.MinX, World.MinY, World.MaxX, World.MaxY);\r\n\r\n return bitmap;\r\n }\r\n */\r\n\r\n createOffscreenCanvas(canvas) {\r\n if (!this.offScreenCanvas) {\r\n this.offScreenCanvas = MgCanvas.createHiDPICanvas(canvas.canvas.width, canvas.canvas.height, 1, true);\r\n this.offScreenContext = this.offScreenCanvas.getContext('2d');\r\n }\r\n else {\r\n //this.offScreenContext.clearRect(0, 0, this.offScreenCanvas.width, this.offScreenCanvas.height);\r\n }\r\n }\r\n\r\n render(canvas, force, context, compositeOperation) { \r\n if (force) {\r\n var xWrap = 0.0;\r\n \r\n for (var nCol = 0, col = this.firstCol; nCol < this.cCols; nCol++) {\r\n for (var nRow = 0, row = this.firstRow; nRow < this.cRows; nRow++) {\r\n var tile = this.tiles[nCol][nRow];\r\n \r\n if (tile.image == null || tile.ImageState != LoadStates.Loaded)\r\n continue;\r\n\r\n var image = tile.image;\r\n var dstTop = Math.trunc((this.normalisedMaxY - tile.LatLongBounds.MaxY) / this.Cellsize) + this.Client.MinY;\r\n var dstLeft = Math.trunc((xWrap + tile.LatLongBounds.MinX - this.normalisedMinX) / this.Cellsize) + this.Client.MinX;\r\n var dstRight = Math.trunc((xWrap + tile.LatLongBounds.MaxX - this.normalisedMinX) / this.Cellsize) + this.Client.MinX;\r\n var dstBottom = Math.trunc((this.normalisedMaxY - tile.LatLongBounds.MinY) / this.Cellsize) + this.Client.MinY;\r\n\r\n var heightRatio = image.height / (dstBottom - dstTop);\r\n var widthRatio = image.width / (dstRight - dstLeft);\r\n\r\n var rcClient = this.Client;\r\n\r\n var srcTop = 0;\r\n var srcLeft = 0;\r\n var srcRight = image.width;\r\n var srcBottom = image.height;\r\n \r\n if (dstLeft < rcClient.MinX)\r\n {\r\n srcLeft += (rcClient.MinX - dstLeft) * widthRatio;\r\n dstLeft = rcClient.MinX;\r\n }\r\n\r\n if (dstTop < rcClient.MinY)\r\n {\r\n srcTop += (rcClient.MinY - dstTop) * heightRatio;\r\n dstTop = rcClient.MinY;\r\n }\r\n\r\n if (dstRight > rcClient.MaxX)\r\n {\r\n srcRight -= (dstRight - rcClient.MaxX) * widthRatio;\r\n dstRight = rcClient.MaxX;\r\n }\r\n\r\n if (dstBottom > rcClient.MaxY)\r\n {\r\n srcBottom -= (dstBottom - rcClient.MaxY) * heightRatio;\r\n dstBottom = rcClient.MaxY;\r\n }\r\n \r\n if (compositeOperation)\r\n this.offScreenContext.globalCompositeOperation = compositeOperation;\r\n\r\n tile.render(this.offScreenContext, srcLeft, srcTop, srcRight, srcBottom, dstLeft, dstTop, dstRight, dstBottom); \r\n }\r\n \r\n if (++col == this.maxColumns)\r\n {\r\n xWrap += TileSource.LatLongExtents.Width;\r\n col = 0;\r\n }\r\n } \r\n \r\n }\r\n \r\n \r\n if (compositeOperation)\r\n context.globalCompositeOperation = compositeOperation;\r\n\r\n if (this.offScreenCanvas.width > 0 && this.offScreenCanvas.height > 0)\r\n this.canvas.drawImage(this.offScreenCanvas, 0, 0, context, this.opacity); \r\n }\r\n \r\n renderTile(tile) {\r\n var xWrap = 0.0;\r\n if (tile.Row == this.maxColumns)\r\n xWrap += TileSource.LatLongExtents.Width;\r\n \r\n var image = tile.image;\r\n var dstTop = Math.trunc((this.normalisedMaxY - tile.LatLongBounds.MaxY) / this.Cellsize) + this.Client.MinY;\r\n var dstLeft = Math.trunc((xWrap + tile.LatLongBounds.MinX - this.normalisedMinX) / this.Cellsize) + this.Client.MinX;\r\n var dstRight = Math.trunc((xWrap + tile.LatLongBounds.MaxX - this.normalisedMinX) / this.Cellsize) + this.Client.MinX;\r\n var dstBottom = Math.trunc((this.normalisedMaxY - tile.LatLongBounds.MinY) / this.Cellsize) + this.Client.MinY;\r\n\r\n var heightRatio = image.height / (dstBottom - dstTop);\r\n var widthRatio = image.width / (dstRight - dstLeft);\r\n\r\n var rcClient = this.Client;\r\n\r\n var srcTop = 0;\r\n var srcLeft = 0;\r\n var srcRight = image.width;\r\n var srcBottom = image.height;\r\n \r\n if (dstLeft < rcClient.MinX)\r\n {\r\n srcLeft += (rcClient.MinX - dstLeft) * widthRatio;\r\n dstLeft = rcClient.MinX;\r\n }\r\n\r\n if (dstTop < rcClient.MinY)\r\n {\r\n srcTop += (rcClient.MinY - dstTop) * heightRatio;\r\n dstTop = rcClient.MinY;\r\n }\r\n\r\n if (dstRight > rcClient.MaxX)\r\n {\r\n srcRight -= (dstRight - rcClient.MaxX) * widthRatio;\r\n dstRight = rcClient.MaxX;\r\n }\r\n\r\n if (dstBottom > rcClient.MaxY)\r\n {\r\n srcBottom -= (dstBottom - rcClient.MaxY) * heightRatio;\r\n dstBottom = rcClient.MaxY;\r\n }\r\n \r\n this.offScreenContext.globalCompositeOperation = 'destination-over';\r\n tile.render(this.offScreenContext, srcLeft, srcTop, srcRight, srcBottom, dstLeft, dstTop, dstRight, dstBottom); \r\n this.canvas.context.globalCompositeOperation = 'destination-over'; \r\n tile.render(this.canvas.context, srcLeft, srcTop, srcRight, srcBottom, dstLeft, dstTop, dstRight, dstBottom); \r\n }\r\n\r\n isReferenced(tile) {\r\n var bIsReferenced = false;\r\n\r\n if (tile.Level != this.level)\r\n bIsReferenced = false;\r\n else if (!this.IsInRange(tile.Col, this.firstCol, this.lastCol))\r\n bIsReferenced = false;\r\n else if (!this.IsInRange(tile.Row, this.firstRow, this.lastRow))\r\n bIsReferenced = false;\r\n else\r\n bIsReferenced = true;\r\n\r\n return bIsReferenced;\r\n }\r\n\r\n isInRange(tile, firstTile, lastTile) {\r\n var bIsInRange = false;\r\n\r\n if (lastTile >= firstTile)\r\n bIsInRange = (tile >= firstTile && tile <= lastTile);\r\n else\r\n bIsInRange = ((tile >= firstTile && tile <= this.maxColumns) || (tile >= 0 && tile <= lastTile));\r\n\r\n return bIsInRange;\r\n }\r\n\r\n renderCanvas(canvas) {\r\n \r\n let canRender = this.tiles == null || this.tiles.length <= 0 ? false : true;\r\n for (let i = 0; i < this.tiles.length; i++) {\r\n for (let j = 0; j < this.tiles[i].length; j++) {\r\n let tile = this.tiles[i][j];\r\n if (tile.ImageState == LoadStates.Initial || tile.ImageState == LoadStates.Loading) {\r\n canRender = false;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (canRender && canvas) {\r\n this.tileSource.map.canvas.offScreenContext.globalCompositeOperation = 'destination-over';\r\n this.tileSource.map.canvas.drawImage(canvas, 0, 0, this.tileSource.map.canvas.offScreenContext); \r\n this.tileSource.map.canvas.refreshView();\r\n } \r\n } \r\n\r\n}","import {MgShape} from './mgshape';\r\n\r\nexport class MgMultiPoint extends MgShape {\r\n \r\n //#region -- CONSTRUCTORS\r\n \r\n /**\r\n * @param {MgPoint[]} points\r\n */\r\n constructor(feature) { \r\n super(feature);\r\n\r\n /*\r\n this._geoPoints = [];\r\n\r\n let geometry = feature.Geometry;\r\n for (let i = 0; i < feature.Geometry.NumGeometries; i++) {\r\n let geoPoint = geometry.GetGeometryN(i);\r\n if (geoPoint != null && !geoPoint.IsEmpty)\r\n this._geoPoints.push(geoPoint);\r\n }\r\n */\r\n this.symbol = null;\r\n \r\n if (feature.ThematicIndex > -1) {\r\n this.symbol = feature.featureLayer.Thematics[feature.ThematicIndex].PointStyle;\r\n }\r\n else if (feature.featureLayer.pointStyle != null) {\r\n this.symbol = feature.featureLayer.pointStyle; \r\n }\r\n }\r\n //#endregion\r\n \r\n //#region -- STATIC METHODS \r\n /**\r\n * @param {MgPoint[]} points\r\n */\r\n static createObject(points) { \r\n return new MgMultiPoint(points); \r\n } \r\n //#endregion \r\n \r\n //#region -- OVERRIDES\r\n /**\r\n * @param {MgCanvas} canvas\r\n * @param {string} strokeColor\r\n * @param {string} fillColor\r\n * @override\r\n */\r\n draw(canvas, opacity, context) { \r\n if (this.symbol != null) {\r\n for(let p of this._points) {\r\n this.drawPoint(p, canvas, opacity, this.symbol.NormalSymbol, context); \r\n } \r\n }\r\n } \r\n \r\n drawHover(canvas, opacity, context) { \r\n context.globalCompositeOperation = 'source-over';\r\n \r\n if (this.symbol != null) {\r\n for(let p of this._points) {\r\n this.drawPoint(p, canvas, opacity, this.symbol.HoverSymbol, context); \r\n } \r\n } \r\n }\r\n\r\n drawSelected(canvas, opacity, context) { \r\n if (this.symbol != null) {\r\n for(let p of this._points) {\r\n this.drawPoint(p, canvas, opacity, this.symbol.SelectedSymbol, context); \r\n } \r\n } \r\n }\r\n\r\n drawPoint(pt, canvas, opacity, symbol, context) { \r\n \r\n if (this._points.length > 0) {\r\n \r\n let offsetX = symbol.width / 2;\r\n let offsetY = symbol.height / 2;\r\n canvas.drawSymbol(symbol, pt.x - offsetX, pt.y - offsetY, context);\r\n this.drawText(new Point(pt.x - offsetX, pt.y - offsetY), canvas, offsetX, offsetY, context);\r\n }\r\n }\r\n\r\n drawText(pt, canvas, offsetX, offsetY, context) {\r\n if (this.LabelStyle != null && this.LabelStyle.isVisible(this.Feature.featureLayer.map.scale)) {\r\n\r\n var sLabel = this.labelText;\r\n var labelRotation = this.LabelStyle.Rotation != null && this.LabelStyle.Rotation.length > 0 ? parseInt(this.LabelStyle.Rotation) : undefined;\r\n \r\n let newX = pt.x;\r\n let newY = pt.y;\r\n let textAlign = 'start';\r\n\r\n switch (this.LabelStyle.Placement)\r\n {\r\n case MapEnums.Placements.AboveLeft:\r\n newX = pt.x - this.symbol.Width/2;\r\n newY = pt.y - this.symbol.Height/2;\r\n textAlign = 'right';\r\n break;\r\n case MapEnums.Placements.AboveCentre:\r\n newY = pt.y - this.symbol.Height/2;\r\n textAlign = 'left';\r\n break;\r\n case MapEnums.Placements.AboveRight:\r\n newX = pt.x + this.symbol.Width /2;\r\n newY = pt.y - this.symbol.Height/2;\r\n textAlign = 'left';\r\n\r\n break;\r\n case MapEnums.Placements.MiddleLeft:\r\n newX = pt.x - this.symbol.Width/2;\r\n newY = pt.y + offsetY;\r\n textAlign = 'right';\r\n break;\r\n case MapEnums.Placements.MiddleCentre:\r\n textAlign = 'center';\r\n break;\r\n case MapEnums.Placements.MiddleRight:\r\n newX = pt.x + this.symbol.Width;\r\n newY = pt.y + this.symbol.Height/2;\r\n textAlign = 'left';\r\n break;\r\n\r\n case MapEnums.Placements.BelowLeft:\r\n newX = pt.x - this.symbol.Width/2;\r\n newY = pt.y + this.symbol.Height;\r\n textAlign = 'right';\r\n break;\r\n\r\n case MapEnums.Placements.BelowCentre:\r\n newY = pt.y + this.symbol.Height + this.LabelStyle.FontSize;\r\n textAlign = 'center';\r\n break; \r\n\r\n case MapEnums.Placements.BelowRight:\r\n newX = pt.x + this.symbol.Width/2;\r\n newY = pt.y + this.symbol.Height;\r\n textAlign = 'left';\r\n break;\r\n } \r\n\r\n if (sLabel != null) {\r\n canvas.drawText(sLabel, Math.trunc(newX), Math.trunc(newY)+2, labelRotation, this.LabelStyle, textAlign, context); \r\n }\r\n }\r\n }\r\n //#endregion\r\n}","import {MgShape} from './mgshape';\r\nimport { Stroke} from '../drawing/Stroke';\r\nimport {MapPrimitive, LabelPoint} from './mapprimitive';\r\nimport {Point} from '../geometry/index';\r\n\r\nexport class MgMultiLine extends MgShape {\r\n \r\n //#region -- CONSTRUCTORS \r\n /**\r\n * @param {MgLine[]} lines\r\n */\r\n constructor(feature) { \r\n super(feature);\r\n\r\n this.stroke = null;\r\n this.fill = null;\r\n this._lines = [];\r\n \r\n let geometry = feature.Geometry;\r\n for (let i = 0; i < feature.Geometry.NumGeometries; i++) {\r\n let line = geometry.GetGeometryN(i);\r\n if (line != null && !line.IsEmpty)\r\n this._lines.push(line);\r\n }\r\n\r\n if (feature.ThematicIndex > -1) {\r\n this.stroke = feature.featureLayer.Thematics[feature.ThematicIndex].LineStyle;\r\n }\r\n // else if (feature.featureLayer.PolygonStyle != null) {\r\n else if (feature.featureLayer.LineStyle != null) {\r\n this.stroke = feature.featureLayer.LineStyle;\r\n }\r\n } \r\n //#endregion\r\n \r\n //#region -- STATIC METHODS \r\n /**\r\n * @param {MgLine[]} lines\r\n */\r\n static createObject(lines) { \r\n return new MgMultiLine(lines); \r\n } \r\n //#endregion \r\n \r\n //#region -- OVERRIDES\r\n /**\r\n * @param {MgCanvas} canvas\r\n * @param {string} strokeColor\r\n * @param {string} fillColor\r\n * @override\r\n */\r\n draw(canvas, opacity, context) { \r\n if (this.stroke != null) {\r\n for (var i = 0; i < this._lines.length; i++){\r\n this._lines[i].draw(canvas, opacity, this.stroke, null, context); \r\n if (this._lines[i].points != null) {\r\n this.drawText(this._lines[i].points, canvas, context);\r\n }\r\n }\r\n\r\n } \r\n }\r\n \r\n drawHover(canvas, opacity, context) {\r\n context.globalCompositeOperation = 'source-over';\r\n \r\n if (this.stroke != null) {\r\n for(let l of this._lines) {\r\n l.draw(canvas, opacity, this.stroke.hoverStroke, null, context); \r\n\r\n if (l.points != null) {\r\n this.drawText(l.points, canvas, context);\r\n }\r\n }\r\n } \r\n }\r\n\r\n drawSelected(canvas, opacity, context) {\r\n if (this.stroke != null) {\r\n for(let l of this._lines) {\r\n l.draw(canvas, opacity, this.stroke.selectedStroke, null, context); \r\n\r\n if (l.points != null) {\r\n this.drawText(l.points, canvas, context);\r\n }\r\n }\r\n } \r\n }\r\n\r\n drawText(pts, canvas, context) {\r\n const DEG_TO_RAD = 0.017453292519943296;\r\n if (this.LabelStyle != null && this.LabelStyle.isVisible(this.Feature.featureLayer.map.scale)) {\r\n if (true) { //this.labelPoint == null || canvas.xOffset == null || canvas.yOffset == null ) { \r\n this.labelPoint = new LabelPoint();\r\n let rcExtents = MapPrimitive.CalculateExtents(pts);\r\n var sLabel = this.labelText;\r\n var labelRotation = this.LabelStyle.Rotation != null && this.LabelStyle.Rotation.length > 0 ? parseInt(this.LabelStyle.Rotation) : undefined;\r\n \r\n var pt = null;\r\n if (pts == null)\r\n sLabel = null;\r\n else if (MapPrimitive.GetPolylineLabelPoint(pts, 0, labelRotation, this.labelPoint)) {\r\n labelRotation = this.labelPoint.angle;\r\n pt = this.labelPoint.pt;\r\n }\r\n else\r\n sLabel = null;\r\n \r\n if (sLabel != null && sLabel.length > 0 && pt != null) {\r\n let textWidth = canvas.getTextWidth(sLabel);\r\n let halfLabelHeight = this.LabelStyle.FontSize / 2 + 2;\r\n let halfLabelWidth = textWidth / 2;\r\n\r\n let angleInRadians = DEG_TO_RAD * labelRotation;\r\n let cos = Math.cos(angleInRadians);\r\n let sin = Math.sin(angleInRadians);\r\n\r\n var tangent = {\r\n \"Width\": (cos * halfLabelWidth), \r\n \"Height\": (sin * halfLabelWidth)\r\n }\r\n var perpendicular = {\r\n \"Width\": sin * halfLabelHeight,\r\n \"Height\": cos * halfLabelHeight\r\n }\r\n\r\n let ptUpperLeft = new Point(pt.x - tangent.Width + perpendicular.Width, pt.y - perpendicular.Height - tangent.Height);\r\n let ptLowerLeft = new Point(pt.x - tangent.Width - perpendicular.Width, pt.y + perpendicular.Height - tangent.Height);\r\n\r\n let ptUpperRight = new Point(pt.x + tangent.Width + perpendicular.Width, pt.y - perpendicular.Height + tangent.Height);\r\n let ptLowerRight = new Point(pt.x + tangent.Width - perpendicular.Width, pt.y + perpendicular.Height + tangent.Height);\r\n\r\n // basic test. Note: We should be doing line intersection like mapserv\r\n if (this.isMouseOver(rcExtents, pts, ptUpperLeft) && this.isMouseOver(rcExtents, pts, ptUpperRight) && \r\n this.isMouseOver(rcExtents, pts, ptLowerRight) && this.isMouseOver(rcExtents, pts, ptLowerLeft)) {\r\n canvas.drawText(sLabel, Math.trunc(pt.x), Math.trunc(pt.y), labelRotation, this.LabelStyle, 'center', context) \r\n }\r\n else {\r\n this.labelPoint = null; \r\n }\r\n } \r\n }\r\n }\r\n }\r\n\r\n isMouseOver(rcExtents, points, ptMouse) {\r\n var bFound = false;\r\n\r\n if (rcExtents.pointInRect(ptMouse.x, ptMouse.y)) {\r\n bFound = MapPrimitive.PolygonContains(points, ptMouse); \r\n }\r\n\r\n return bFound;\r\n }\r\n //#endregion\r\n\r\n \r\n}","import {MgShape} from './mgshape';\r\nimport { MgPoint } from './mgpoint';\r\n\r\nimport {MapPrimitive, LabelPoint} from './mapprimitive';\r\nimport {Point} from '../geometry/index';\r\n\r\nexport class MgMultiPolygon extends MgShape {\r\n \r\n //#region -- CONSTRUCTORS\r\n /**\r\n * @param {number[[]]} points\r\n */\r\n constructor(feature) { \r\n super(feature);\r\n this._polygons = [];\r\n\r\n let geometry = feature.Geometry;\r\n for (let i = 0; i < feature.Geometry.NumGeometries; i++) {\r\n let polygon = geometry.GetGeometryN(i);\r\n if (polygon != null && !polygon.IsEmpty)\r\n this._polygons.push(polygon);\r\n }\r\n\r\n this.stroke = null;\r\n this.fill = null;\r\n \r\n if (feature.ThematicIndex > -1) {\r\n this.stroke = feature.featureLayer.Thematics[feature.ThematicIndex].PolygonStyle.Stroke;\r\n this.fill = feature.featureLayer.Thematics[feature.ThematicIndex].PolygonStyle.Fill; \r\n }\r\n else if (feature.featureLayer.PolygonStyle != null) {\r\n this.stroke = feature.featureLayer.PolygonStyle.Stroke;\r\n this.fill = feature.featureLayer.PolygonStyle.Fill; \r\n }\r\n } \r\n //#endregion\r\n\r\n //#region -- STATIC METHODS\r\n /**\r\n * @param {number[[]]} points\r\n * @returns MgPolygon\r\n */\r\n static createObject(points) { \r\n return new MgMultiPolygon(points); \r\n } \r\n //#endregion \r\n\r\n //#region -- OVERRIDES\r\n /**\r\n * @param {MgCanvas} canvas\r\n * @param {string} strokeColor\r\n * @param {string} fillColor \r\n * @override\r\n */\r\n draw(canvas, opacity, context) {\r\n if (this.stroke != null || this.fill != null )\r\n for (var i = 0; i < this._polygons.length; i++) {\r\n let polygon = this._polygons[i];\r\n polygon.draw(canvas, opacity, this.stroke, this.fill, context); \r\n\r\n if (polygon.exteriorRing != null) {\r\n this.drawText(polygon.exteriorRing.points, canvas, context);\r\n }\r\n }\r\n }\r\n \r\n drawHover(canvas, opacity, context) {\r\n context.globalCompositeOperation = 'source-over';\r\n\r\n let localFill = this.fill;\r\n\r\n if (this.fill && this.fill.style && this.fill.style.Type === \"Hatch\" && this.fill.hoverPattern) {\r\n localFill = Object.assign({}, this.fill, {pattern: this.fill.hoverPattern});\r\n }\r\n\r\n let hoverFill = (localFill && localFill.hoverFill) ? localFill.hoverFill: null;\r\n \r\n if (this.stroke != null || this.fill != null ) {\r\n\r\n for (var i = 0; i < this._polygons.length; i++) {\r\n let polygon = this._polygons[i];\r\n\r\n polygon.draw(canvas, opacity, this.stroke.hoverStroke, hoverFill, context); \r\n\r\n if (polygon.exteriorRing != null) {\r\n this.drawText(polygon.exteriorRing.points, canvas, context);\r\n }\r\n }\r\n }\r\n } \r\n\r\n drawSelected(canvas, opacity, context) {\r\n context.globalCompositeOperation = 'source-over';\r\n\r\n let selectedFill = (this.fill && this.fill.selectedFill) ? this.fill.selectedFill: null;\r\n\r\n\r\n if (this.stroke != null || this.fill != null ) {\r\n for (var i = 0; i < this._polygons.length; i++) {\r\n let polygon = this._polygons[i];\r\n polygon.draw(canvas, opacity, this.stroke.selectedStroke, selectedFill, context); \r\n \r\n if (polygon.exteriorRing != null) {\r\n this.drawText(polygon.exteriorRing.points, canvas, context);\r\n }\r\n }\r\n }\r\n } \r\n\r\n drawTracked(canvas, opacity, context) {\r\n context.globalCompositeOperation = 'source-over';\r\n\r\n let trackingFill = (this.fill && this.fill.trackingFill) ? this.fill.trackingFill: null;\r\n\r\n\r\n if (this.stroke != null || this.fill != null ) {\r\n for (var i = 0; i < this._polygons.length; i++) {\r\n let polygon = this._polygons[i];\r\n polygon.draw(canvas, opacity, this.stroke.trackingStroke, trackingFill, context); \r\n \r\n if (polygon.exteriorRing != null) {\r\n this.drawText(polygon.exteriorRing.points, canvas, context);\r\n }\r\n }\r\n }\r\n } \r\n\r\n drawText(pts, canvas, context) {\r\n const DEG_TO_RAD = 0.017453292519943296;\r\n if (this.LabelStyle != null && this.LabelStyle.isVisible(this.Feature.featureLayer.map.scale)) {\r\n if (true) { //this.labelPoint == null || canvas.xOffset == null || canvas.yOffset == null ) {\r\n /*\r\n var labelRotation = this.LabelStyle.Rotation != null && this.LabelStyle.Rotation.length > 0 ? parseInt(this.LabelStyle.Rotation) : undefined;\r\n\r\n const message = {\r\n Label : this.labelText,\r\n TextWidth : canvas.getTextWidth(this.labelText),\r\n FontSize : this.LabelStyle.FontSize,\r\n Points : pts,\r\n SuggestedAngle : labelRotation\r\n }\r\n\r\n this._feature.featureLayer.mpWorker.postMessage(message);\r\n */\r\n this.labelPoint = new LabelPoint();\r\n let rcExtents = MapPrimitive.CalculateExtents(pts);\r\n var sLabel = this.labelText;\r\n var labelRotation = this.LabelStyle.Rotation != null && this.LabelStyle.Rotation.length > 0 ? parseInt(this.LabelStyle.Rotation) : undefined;\r\n \r\n var pt = null;\r\n if (pts == null || pts.Length < 3)\r\n sLabel = null;\r\n else if (MapPrimitive.GetPolygonLabelPoint(rcExtents, pts, labelRotation, this.labelPoint)) {\r\n labelRotation = this.labelPoint.angle;\r\n pt = this.labelPoint.pt;\r\n }\r\n else\r\n sLabel = null;\r\n \r\n if (sLabel != null && sLabel.length > 0 && pt != null) {\r\n let textWidth = canvas.getTextWidth(sLabel);\r\n let halfLabelHeight = this.LabelStyle.FontSize / 2 + 2;\r\n let halfLabelWidth = textWidth / 2;\r\n\r\n let angleInRadians = DEG_TO_RAD * labelRotation;\r\n let cos = Math.cos(angleInRadians);\r\n let sin = Math.sin(angleInRadians);\r\n\r\n var tangent = {\r\n \"Width\": (cos * halfLabelWidth), \r\n \"Height\": (sin * halfLabelWidth)\r\n }\r\n var perpendicular = {\r\n \"Width\": sin * halfLabelHeight,\r\n \"Height\": cos * halfLabelHeight\r\n }\r\n\r\n let ptUpperLeft = new Point(pt.x - tangent.Width + perpendicular.Width, pt.y - perpendicular.Height - tangent.Height);\r\n let ptLowerLeft = new Point(pt.x - tangent.Width - perpendicular.Width, pt.y + perpendicular.Height - tangent.Height);\r\n\r\n let ptUpperRight = new Point(pt.x + tangent.Width + perpendicular.Width, pt.y - perpendicular.Height + tangent.Height);\r\n let ptLowerRight = new Point(pt.x + tangent.Width - perpendicular.Width, pt.y + perpendicular.Height + tangent.Height);\r\n\r\n // basic test. Note: We should be doing line intersection like mapserv\r\n if (this.isMouseOver(rcExtents, pts, ptUpperLeft) && this.isMouseOver(rcExtents, pts, ptUpperRight) && \r\n this.isMouseOver(rcExtents, pts, ptLowerRight) && this.isMouseOver(rcExtents, pts, ptLowerLeft)) {\r\n canvas.drawText(sLabel, Math.trunc(pt.x), Math.trunc(pt.y), labelRotation, this.LabelStyle, 'center', context) \r\n }\r\n else {\r\n this.labelPoint = null;\r\n //let dist = PolyLabel.pointToPolygonDist(pt.x, pt.y, this._points);\r\n //if (dist > -1 && rcExtents.width > textWidth*2) {\r\n // canvas.drawText(sLabel, Math.trunc(pt.x), Math.trunc(pt.y), labelRotation, this.LabelStyle) \r\n //}\r\n }\r\n } \r\n }\r\n else if (this.labelText.length > 0) {\r\n let x = Math.trunc(this.labelPoint.pt.x) + canvas.xOffset; \r\n let y = Math.trunc(this.labelPoint.pt.y) + canvas.yOffset; \r\n if (x > 0 && y > 0) {\r\n canvas.drawText(this.labelText, x, y, this.labelPoint.angle, this.LabelStyle, context) \r\n }\r\n }\r\n \r\n }\r\n }\r\n\r\n isMouseOver(rcExtents, points, ptMouse) {\r\n var bFound = false;\r\n\r\n if (rcExtents.pointInRect(ptMouse.x, ptMouse.y)) {\r\n bFound = MapPrimitive.PolygonContains(points, ptMouse); \r\n }\r\n\r\n return bFound;\r\n }\r\n\r\n getRectExtents() {\r\n if (this._points != null && this._points.length > 0) {\r\n return MapPrimitive.CalculateExtents(this._points[0]);\r\n }\r\n\r\n return null;\r\n }\r\n //#endregion \r\n}","import {MgPoint, MgLine, MgPolygon, MgMultiPoint, MgMultiLine, MgMultiPolygon, MgGeometryCollection} from './index';\r\nimport MapEnums from '../map/enums';\r\n\r\nexport class MgShapeFactory {\r\n static createShape(feature) {\r\n var shape = undefined;\r\n if (feature == undefined || feature.Geometry == undefined)\r\n return null;\r\n\r\n let geoType = feature.Geometry.GeometryType;\r\n\r\n switch(geoType) {\r\n case MapEnums.GeometryTypes.POINT:\r\n shape = new MgPoint(feature);\r\n break;\r\n \r\n case MapEnums.GeometryTypes.LINESTRING:\r\n shape = new MgLine(feature);\r\n break;\r\n\r\n case MapEnums.GeometryTypes.POLYGON:\r\n shape = new MgPolygon(feature);\r\n break;\r\n \r\n case MapEnums.GeometryTypes.MULTIPOINT:\r\n shape = new MgMultiPoint(feature);\r\n break;\r\n \r\n case MapEnums.GeometryTypes.MULTILINESTRING:\r\n shape = new MgMultiLine(feature);\r\n break;\r\n \r\n case MapEnums.GeometryTypes.MULTIPOLYGON:\r\n shape = new MgMultiPolygon(feature);\r\n break;\r\n \r\n case MapEnums.GeometryTypes.GEOMETRYCOLLECTION:\r\n shape = new MgGeometryCollection(feature);\r\n break;\r\n \r\n }\r\n\r\n return shape;\r\n }\r\n}","import {MgShape} from './mgshape';\r\nimport { MgPoint } from './mgpoint';\r\nimport {MgShapeFactory} from './mgshapefactory';\r\nimport { GeoLineString, GeoLinearRing, GeoMultiLineString, GeoPolygon, GeoMultiPolygon, GeoPoint, GeoMultiPoint } from '../geometries';\r\nimport MapEnums from '../map/enums';\r\n\r\nexport class MgGeometryCollection extends MgShape {\r\n \r\n //#region -- CONSTRUCTORS\r\n /**\r\n * @param {number[[]]} points\r\n */\r\n constructor(feature) { \r\n super(feature);\r\n this._geometries = [];\r\n this._shapes = [];\r\n this._geopoints = [];\r\n\r\n this.polygonStroke = null;\r\n this.polygonFill = null;\r\n \r\n this.lineStroke = null;\r\n this.pointSymbol = null;\r\n\r\n if (feature.ThematicIndex > -1) { \r\n if (feature.featureLayer.Thematics[feature.ThematicIndex].PointStyle != null) {\r\n this.pointSymbol = feature.featureLayer.Thematics[feature.ThematicIndex].PointStyle;\r\n }\r\n\r\n if (feature.featureLayer.Thematics[feature.ThematicIndex].LineStyle != null) {\r\n this.lineStroke = feature.featureLayer.Thematics[feature.ThematicIndex].LineStyle;\r\n }\r\n\r\n if (feature.featureLayer.Thematics[feature.ThematicIndex].PolygonStyle != null) {\r\n this.polygonStroke = feature.featureLayer.Thematics[feature.ThematicIndex].PolygonStyle.Stroke;\r\n this.polygonFill = feature.featureLayer.Thematics[feature.ThematicIndex].PolygonStyle.Fill; \r\n }\r\n }\r\n else {\r\n if (feature.featureLayer.PointStyle != null) {\r\n this.pointSymbol = feature.featureLayer.PointStyle;\r\n }\r\n\r\n if (feature.featureLayer.LineStyle != null) {\r\n this.lineStroke = feature.featureLayer.LineStyle;\r\n }\r\n\r\n if (feature.featureLayer.PolygonStyle != null) {\r\n this.polygonStroke = feature.featureLayer.PolygonStyle.Stroke;\r\n this.polygonFill = feature.featureLayer.PolygonStyle.Fill; \r\n }\r\n }\r\n\r\n for (let i = 0; i < feature.Geometry.NumGeometries; i++) {\r\n this._geometries.push(feature.Geometry.GetGeometryN(i));\r\n }\r\n } \r\n //#endregion\r\n\r\n //#region -- STATIC METHODS\r\n /**\r\n * @param {number[[]]} points\r\n * @returns MgPolygon\r\n */\r\n static createObject(points) { \r\n return new MgGeometryCollection(points); \r\n } \r\n //#endregion \r\n\r\n //#region -- OVERRIDES\r\n /**\r\n * @param {MgCanvas} canvas\r\n * @param {string} strokeColor\r\n * @param {string} fillColor \r\n * @override\r\n */\r\n draw(canvas, opacity, context) {\r\n for (var i = 0; i < this._geometries.length; i++) {\r\n let geometry = this._geometries[i];\r\n if (geometry instanceof GeoPoint || geometry instanceof GeoMultiPoint) {\r\n if (this.pointSymbol != null)\r\n geometry.draw(canvas, opacity, this.pointSymbol, null, context);\r\n }\r\n else if (geometry instanceof GeoLineString || geometry instanceof GeoLinearRing || geometry instanceof GeoMultiLineString) {\r\n if (this.lineStroke != null)\r\n geometry.draw(canvas, opacity, this.lineStroke, null, context);\r\n }\r\n else if (geometry instanceof GeoPolygon || geometry instanceof GeoMultiPolygon) {\r\n if (this.polygonStroke != null || this.polygonFill != null)\r\n geometry.draw(canvas, opacity, this.polygonStroke, this.polygonFill, context); \r\n }\r\n } \r\n }\r\n \r\n drawHover(canvas, opacity, context) {\r\n for (var i = 0; i < this._geometries.length; i++) {\r\n let geometry = this._geometries[i];\r\n if (geometry instanceof GeoPoint || geometry instanceof GeoMultiPoint) {\r\n if (this.pointSymbol != null)\r\n geometry.drawHover(canvas, opacity, this.pointSymbol, null, context);\r\n }\r\n else if (geometry instanceof GeoLineString || geometry instanceof GeoLinearRing || geometry instanceof GeoMultiLineString) {\r\n if (this.lineStroke != null)\r\n geometry.draw(canvas, opacity, this.lineStroke.hoverStroke, context);\r\n }\r\n else if (geometry instanceof GeoPolygon || geometry instanceof GeoMultiPolygon) {\r\n if (this.polygonStroke != null || this.polygonFill != null)\r\n geometry.draw(canvas, opacity, this.polygonStroke.hoverStroke, this.polygonFill, context); \r\n }\r\n } \r\n }\r\n\r\n drawSelected(canvas, opacity, context) {\r\n for (var i = 0; i < this._geometries.length; i++) {\r\n let geometry = this._geometries[i];\r\n if (geometry instanceof GeoPoint || geometry instanceof GeoMultiPoint) {\r\n if (this.pointSymbol != null)\r\n geometry.drawSelected(canvas, opacity, this.pointSymbol, null, context);\r\n }\r\n else if (geometry instanceof GeoLineString || geometry instanceof GeoLinearRing || geometry instanceof GeoMultiLineString) {\r\n if (this.lineStroke != null)\r\n geometry.draw(canvas, opacity, this.lineStroke.selectedStroke, context);\r\n }\r\n else if (geometry instanceof GeoPolygon || geometry instanceof GeoMultiPolygon) {\r\n if (this.polygonStroke != null || this.polygonFill != null)\r\n geometry.draw(canvas, opacity, this.polygonStroke.selectedStroke, this.polygonFill, context); \r\n }\r\n } \r\n }\r\n \r\n //#endregion \r\n}","import * as Colour from './Colour';\r\nimport MapEnums from '../map/enums';\r\n\r\nexport class Fill {\r\n constructor(fillStyle) {\r\n this.style = fillStyle;\r\n this.colour = fillStyle != undefined && fillStyle.Colour != undefined ? Colour.fromString(fillStyle.Colour) : 'black';\r\n this.type = this.getFillType(fillStyle);\r\n this.hatchStyle = MapEnums.HatchStyles.None;\r\n this.hatchImg = null;\r\n this.pattern = null;\r\n this.hoverPattern = null;\r\n\r\n if (fillStyle && fillStyle.FillType == 'Hatch') {\r\n this.setHatchStyle(fillStyle.HatchStyle); \r\n } \r\n else if (fillStyle && fillStyle.FillType == 'Pattern') {\r\n this.patternId = fillStyle.PatternId;\r\n this.patternHeight = fillStyle.PatternHeight;\r\n this.patternSpacing = fillStyle.PatternSpacing;\r\n }\r\n }\r\n \r\n getFillType(fillStyle) {\r\n\r\n if (fillStyle == undefined)\r\n return MapEnums.FillTypes.None;\r\n\r\n var sType = fillStyle.Type;\r\n\r\n if (sType == undefined)\r\n return MapEnums.FillTypes.None;\r\n else if (sType == 'Solid')\r\n return MapEnums.FillTypes.Solid;\r\n else if (sType == 'Hatch')\r\n return MapEnums.FillTypes.Hatch;\r\n else if (sType == 'Pattern')\r\n return MapEnums.FillTypes.Pattern; \r\n else if (sType == 'Gradient')\r\n return MapEnums.FillTypes.Gradient;\r\n else if (sType == 'LinearGradient')\r\n return MapEnums.FillTypes.LinearGradient; \r\n }\r\n\r\n setHatchStyle(sType) {\r\n if (sType == undefined) {\r\n this.hatchStyle = MapEnums.HatchStyles.None;\r\n }\r\n else if (sType == 'Horizontal') {\r\n this.hatchImg = new Image();\r\n this.hatchImg.src = \"data:image/svg+xml;charset=utf8, \" + this.sanitisedSVG(Fill.Horizontal);\r\n this.hatchStyle = MapEnums.HatchStyles.Horizontal;\r\n }\r\n else if (sType == 'Vertical') {\r\n this.hatchImg = new Image();\r\n this.hatchImg.src = \"data:image/svg+xml;charset=utf8, \" + this.sanitisedSVG(Fill.Horizontal);\r\n //this.hatchStyle = MapEnums.HatchStyles.Vertical;\r\n }\r\n else if (sType == 'ForwardDiagonal') {\r\n this.hatchImg = new Image();\r\n this.hatchImg.src = \"data:image/svg+xml;charset=utf8, \" + this.sanitisedSVG(Fill.FDiagonal);\r\n\r\n this.hatchStyle = MapEnums.HatchStyles.ForwardDiagonal; \r\n }\r\n else if (sType == 'BackwardDiagonal') {\r\n this.hatchImg = new Image();\r\n this.hatchImg.src = \"data:image/svg+xml;charset=utf8, \" + this.sanitisedSVG(Fill.BDiagonal);\r\n\r\n this.hatchStyle = MapEnums.HatchStyles.BackwardDiagonal;\r\n }\r\n else if (sType == 'Cross') {\r\n this.hatchImg = new Image();\r\n this.hatchImg.src = \"data:image/svg+xml;charset=utf8, \" + this.sanitisedSVG(Fill.Cross);\r\n\r\n this.hatchStyle = MapEnums.HatchStyles.Cross; \r\n }\r\n else if (sType == 'DiagonalCross') {\r\n this.hatchImg = new Image();\r\n this.hatchImg.src = \"data:image/svg+xml;charset=utf8, \" + this.sanitisedSVG(Fill.DoubleDiagonal);\r\n\r\n this.hatchStyle = MapEnums.HatchStyles.DiagonalCross; \r\n }\r\n }\r\n\r\n setHoverStyles(hoverColour){\r\n var hoverStyle = {\r\n 'Colour' : hoverColour,\r\n 'Type' : 'Solid',\r\n };\r\n this.hoverFill = new Fill(hoverStyle);\r\n\r\n }\r\n\r\n setSelectedStyles(selectedColour){\r\n var selectedStyle = {\r\n 'Colour' : selectedColour,\r\n 'Type' : 'Solid',\r\n };\r\n this.selectedFill = new Fill(selectedStyle);\r\n\r\n }\r\n\r\n setTrackingStyles(trackingColour){\r\n var trackingStyle = {\r\n 'Colour': trackingColour,\r\n 'Type': 'Solid',\r\n };\r\n this.trackingFill = new Fill(trackingStyle);\r\n }\r\n\r\n sanitisedSVG(svg) {\r\n var sanitized = svg.replace(/\\/g,'%3E') //for >\r\n sanitized = sanitized.replace(/\\#/g,'%23') //for #\r\n \r\n return sanitized;\r\n }\r\n \r\n loadHoverPatten(baseUrl, accessToken, debugMode = false, hoverColour){\r\n\r\n let hoverStyle = Object.assign({}, this.style, {Colour: hoverColour});\r\n\r\n let base64 = window.btoa(debugMode ? JSON.stringify(hoverStyle) : JSON.stringify(hoverStyle));\r\n let imageUrl = `${baseUrl}\\GenerateFillPattern?token=${accessToken}&jStyle=${base64}&size=24`;\r\n\r\n if (this.type == MapEnums.FillTypes.Hatch || this.type == MapEnums.FillTypes.Pattern) {\r\n this.hoverPattern = new Image();\r\n\r\n let __this = this;\r\n\r\n this.hoverPattern.onload = function () {\r\n __this.hoverPattern.width = __this.style.PatternHeight;\r\n __this.hoverPattern.height = __this.style.PatternHeight;\r\n };\r\n\r\n this.hoverPattern.src = imageUrl;\r\n }\r\n }\r\n\r\n loadPattern(baseUrl, accessToken, debugMode = false) {\r\n\r\n let base64 = window.btoa(debugMode ? JSON.stringify(this.style) : JSON.stringify(this.style.objJSON));\r\n let imageUrl = `${baseUrl}\\GenerateFillPattern?token=${accessToken}&jStyle=${base64}&size=24`;\r\n\r\n if (this.type == MapEnums.FillTypes.Hatch || this.type == MapEnums.FillTypes.Pattern) {\r\n this.pattern = new Image();\r\n\r\n let __this = this;\r\n\r\n this.pattern.onload = function () {\r\n __this.pattern.width = __this.style.PatternHeight;\r\n __this.pattern.height = __this.style.PatternHeight;\r\n };\r\n\r\n this.pattern.src = imageUrl;\r\n }\r\n }\r\n\r\n get IsEmpty() {\r\n return (type == Types.None || width == 0.0 || opacity == 0 || colour == \"none\");\r\n } \r\n\r\n get Colour() {\r\n return this.colour;\r\n }\r\n \r\n get HatchImage() {\r\n return this.hatchImg;\r\n }\r\n\r\n get FillPattern() {\r\n return this.pattern;\r\n }\r\n\r\n get FillType() {\r\n return this.type;\r\n }\r\n}\r\n\r\nFill.Circles = \"\";\r\nFill.Horizontal = \"\";\r\nFill.Vertical = \"\";\r\nFill.Square = \"\";\r\nFill.FDiagonal = \"\";\r\nFill.BDiagonal = \"\";\r\nFill.Cross = \"\";\r\nFill.DoubleDiagonal = \"\";\r\n\r\n\r\n","require(\"babel-polyfill\");\r\n\r\nexport class MgFeatures {\r\n \r\n //#region -- CONSTRUCTORS\r\n constructor() {\r\n this._features = [];\r\n } \r\n //#endregion\r\n \r\n //#region -- METHODS\r\n addFeatures(...features) {\r\n this._features = this._features.concat(features);\r\n }\r\n\r\n *[Symbol.iterator]() {\r\n for(let f of this._features) {\r\n yield f;\r\n }\r\n } \r\n //#endregion \r\n}\r\n","import { MgLine } from \"../drawing\";\r\nimport { MgPoint } from \"../drawing\";\r\nimport { MgPolygon } from \"../drawing\";\r\nimport { MgCircle } from \"../drawing\";\r\nimport { MgMultiPoint } from \"../drawing\";\r\nimport { MgMultiLine } from \"../drawing\";\r\nimport Axios from \"axios\";\r\nimport MapEnums from \"../map/enums\";\r\n\r\nclass MgRestAPI {\r\n\r\n //#region -- CONSTRUCTORS\r\n constructor() {\r\n this._baseUrl = \"localhost\";\r\n this._accessToken = undefined;\r\n this.debugMode = false; \r\n } \r\n //#endregion -- CONSTRUCTORS\r\n \r\n //#region -- METHODS\r\n get BaseUrl() {\r\n return this._baseUrl; \r\n }\r\n set BaseUrl(value) { \r\n this._baseUrl = value;\r\n }\r\n\r\n get AccessToken() {\r\n return this._accessToken; \r\n }\r\n set AccessToken(value) { \r\n this._accessToken = value;\r\n }\r\n\r\n getFeatures(layerId) {\r\n return new Promise( (resolve, reject) => {\r\n console.log(this._baseUrl);\r\n if(layerId == \"VectorLayer 2\")\r\n resolve(FEATURES2);\r\n else\r\n resolve(FEATURES); \r\n }); \r\n }\r\n\r\n coordinatesQuery(queryParams){\r\n var sort = [];\r\n\r\n if (queryParams.sortField == null || queryParams.sortField == undefined) {\r\n sort = [{\"Field\":sort, \"Ascending\":false}];\r\n }\r\n\r\n var extentsFilter = null;\r\n if (queryParams.extents != null) {\r\n extentsFilter = {\r\n \"MinX\": queryParams.extents.MinX, \r\n \"MinY\": queryParams.extents.MinY, \r\n \"MaxX\": queryParams.extents.MaxX, \r\n \"MaxY\": queryParams.extents.MaxY,\r\n \"ExtentsProjection\": queryParams.extentsProjection,\r\n \"MapProjection\": queryParams.mapProjection,\r\n \"GeometryField\":queryParams.geometryField\r\n }\r\n }\r\n\r\n var params = {\r\n \"token\": this.AccessToken == undefined ? \"3102c54e-317b-4fca-80b9-d1513547b273\" : this.AccessToken, \r\n \"datasetId\": queryParams.datasetId, \r\n // \"columns\": queryParams.columns,\r\n \"thematics\": queryParams.thematics, \r\n \"extentsFilter\": extentsFilter, \r\n \"cellSize\": queryParams.cellSize,\r\n \"taskId\": queryParams.taskId != undefined ? queryParams.taskId : -1,\r\n \"id\": queryParams.id,\r\n \"cellsize\": queryParams.cellSize,\r\n \"coordinates\": queryParams.coordinates\r\n };\r\n \r\n var url = this.BaseUrl + \"CoordinatesQuery\";\r\n return Axios.post(url, params,{cancelToken: queryParams.source.token}); \r\n\r\n}\r\n \r\n featureQuery(queryParams, source) {\r\n var sort = [];\r\n\r\n if (queryParams.sortField == null || queryParams.sortField == undefined) {\r\n sort = [{\"Field\":sort, \"Ascending\":false}];\r\n }\r\n\r\n var extentsFilter = null;\r\n if (queryParams.extents != null) {\r\n extentsFilter = {\r\n \"MinX\": queryParams.extents.MinX, \r\n \"MinY\": queryParams.extents.MinY, \r\n \"MaxX\": queryParams.extents.MaxX, \r\n \"MaxY\": queryParams.extents.MaxY,\r\n \"ExtentsProjection\": queryParams.extentsProjection,\r\n \"MapProjection\": queryParams.mapProjection,\r\n \"GeometryField\":queryParams.geometryField\r\n }\r\n }\r\n \r\n var params = {\r\n \"id\": queryParams.id,\r\n \"token\": this.AccessToken == undefined ? \"3102c54e-317b-4fca-80b9-d1513547b273\" : this.AccessToken, \r\n \"datasetId\": queryParams.datasetId, \r\n \"columns\": queryParams.columns,\r\n \"thematics\": queryParams.thematics, \r\n \"sort\": sort, \r\n \"sContextFilter\": queryParams.sContextFilter,\r\n \"sLayerFilter\": queryParams.sLayerFilter, \r\n \"sUserFilter\": queryParams.sUserFilter, \r\n \"extentsFilter\": extentsFilter, \r\n \"offset\": queryParams.offset, \r\n \"limit\": queryParams.limit,\r\n \"cellSize\": queryParams.cellSize,\r\n \"contextType\": queryParams.contextType,\r\n \"taskId\": queryParams.taskId != undefined ? queryParams.taskId : -1,\r\n \"isIdentitySearch\": queryParams.isIdentitySearch != undefined ? queryParams.isIdentitySearch : false,\r\n \"contextFilterDatasource\": queryParams.contextFilterDatasource != undefined ? queryParams.contextFilterDatasource : MapEnums.DatasourceTypes.None,\r\n };\r\n \r\n var url = this.BaseUrl + \"FeatureQuery\";\r\n var req = null;\r\n \r\n if (source)\r\n req = Axios.post(url, params, {cancelToken: source.token}); \r\n else\r\n req = Axios.post(url, params); \r\n\r\n return req;\r\n }\r\n\r\n getSymbol(geometryType, jStyle, height) { \r\n var params = {\r\n \"token\": this.AccessToken == undefined ? \"3102c54e-317b-4fca-80b9-d1513547b273\" : this.AccessToken, \r\n \"geometryType\":geometryType, \r\n \"jStyle\": JSON.stringify(jStyle),\r\n \"height\":height, \r\n \r\n };\r\n \r\n var url = this.BaseUrl + \"GenerateSymbol\";\r\n return Axios.post(url, params);\r\n //.then(response => Buffer.from(response.data, 'binary').toString('base64')) \r\n /*\r\n .then((response) => {\r\n\r\n var binary = '';\r\n var bytes = new Uint8Array(response.data);\r\n var len = bytes.byteLength;\r\n for (var i = 0; i < len; i++) {\r\n binary += String.fromCharCode(bytes[i]);\r\n }\r\n return window.btoa(binary);\r\n \r\n //let image = btoa(\r\n // new Uint8Array(response.data)\r\n // .reduce((data, byte) => data + String.fromCharCode(byte), '')\r\n //);\r\n //return image; //`data:${response.headers['content-type'].toLowerCase()};base64,${image}`;\r\n \r\n }); \r\n */ \r\n }\r\n \r\n rasterQuery(datasetId, MinX, MaxX, MinY, MaxY, projection, width, height) { \r\n var url = this.BaseUrl + `RasterQuery?token=${this.AccessToken}&datasetId=${datasetId}&MinX=${MinX}&MaxX=${MaxX}&MinY=${MinY}&MaxY=${MaxY}&projection=${projection}&width=${width}&height=${height}`;\r\n return Axios.get(url, params,{cancelToken: source.token}); \r\n }\r\n\r\n getCommonTaskDefinition(taskId) { \r\n var url = this.BaseUrl + `GetCommonTaskDefinition?token=${this.AccessToken}&taskId=${taskId}`;\r\n return Axios.get(url);\r\n }\r\n \r\n //#endregion -- METHODS\r\n \r\n}\r\n\r\nexport let RestAPI = new MgRestAPI();\r\n ","import * as Colour from './Colour';\r\nimport MapEnums from '../map/enums';\r\nimport { RestAPI } from '../api';\r\n\r\nexport class Symbol {\r\n /*\r\n \"Point\":\r\n {\r\n \"Type\":\"SolidShape\",\r\n \"Height\":16.0,\r\n \"Shape\":\"Circle\",\r\n \"Colour\":\"Black\"\r\n }\r\n */\r\n\r\n constructor(pointStyle) { \r\n this.style = pointStyle; \r\n this.height = pointStyle.Height;\r\n this.shape = this.getShapeType(pointStyle.Shape);\r\n this.colour = pointStyle.Colour;\r\n this.type = this.getSymbolType(pointStyle.Type);\r\n this.symbolId = pointStyle.SymbolId;\r\n\r\n this.stroke = null;\r\n this.fill = null;\r\n this.pattern = null;\r\n\r\n // symbolType\r\n // 0 - Normal\r\n // 1 - Hover Symbol\r\n // 2 - Selection Symbol\r\n\r\n /*\r\n if (this.shape == MapEnums.Shapes.Marker || this.shape == MapEnums.Shapes.Pin) {\r\n let svgSymbol = this.shape == MapEnums.Shapes.Marker ? Symbol.Marker : Symbol.Pin;\r\n svgSymbol = svgSymbol.replace(\"{{colour}}\", this.colour);\r\n svgSymbol = svgSymbol.replace(\"{{width}}\", pointStyle.Height);\r\n svgSymbol = svgSymbol.replace(\"{{height}}\", pointStyle.Height);\r\n\r\n this.pattern = new Image();\r\n let img = this.pattern;\r\n \r\n this.pattern.onload = function () {\r\n img.width = pointStyle.Height;\r\n img.height = pointStyle.Height;\r\n };\r\n this.pattern.src = \"data:image/svg+xml;charset=utf8, \" + this.sanitisedSVG(svgSymbol);\r\n }\r\n */\r\n }\r\n\r\n getSymbolType(sType) {\r\n if (sType == undefined)\r\n return MapEnums.SymbolTypes.None;\r\n else if (sType == 'SolidShape')\r\n return MapEnums.SymbolTypes.SolidShape;\r\n else if (sType == 'OutlineShape')\r\n return MapEnums.SymbolTypes.OutlineShape;\r\n else if (sType == 'Character')\r\n return MapEnums.SymbolTypes.Character; \r\n else if (sType == 'Glyph')\r\n return MapEnums.SymbolTypes.Glyph;\r\n }\r\n\r\n getShapeType(sType) { \r\n if (sType == 'Circle')\r\n return MapEnums.Shapes.Circle;\r\n else if (sType == 'Cross')\r\n return MapEnums.Shapes.Cross;\r\n else if (sType == 'DiagonalCross')\r\n return MapEnums.Shapes.DiagonalCross;\r\n else if (sType == 'Diamond')\r\n return MapEnums.Shapes.Diamond; \r\n else if (sType == 'Marker')\r\n return MapEnums.Shapes.Marker;\r\n else if (sType == 'Pin')\r\n return MapEnums.Shapes.Pin;\r\n else if (sType == 'Square')\r\n return MapEnums.Shapes.Square;\r\n else if (sType == 'Star')\r\n return MapEnums.Shapes.Star;\r\n else if (sType == 'TriangleUp')\r\n return MapEnums.Shapes.TriangleUp; \r\n else if (sType == 'TriangleDown')\r\n return MapEnums.Shapes.TriangleDown;\r\n else \r\n return MapEnums.Shapes.None;\r\n }\r\n // @region Properties \r\n get IsEmpty()\r\n {\r\n return (this.pattern == undefined || this.stroke == undefined || this.size == undefined || this.size <= 0);\r\n }\r\n \r\n get Colour() {\r\n return this.colour;\r\n }\r\n \r\n get Height() {\r\n return this.height;\r\n }\r\n\r\n get Width() {\r\n return this.height;\r\n }\r\n\r\n get DashPattern() {\r\n return this.dashPattern;\r\n }\r\n\r\n get Pattern() {\r\n return this.pattern;\r\n }\r\n\r\n get ShapeType() {\r\n return this.shape;\r\n }\r\n\r\n get SymbolType() {\r\n return this.type;\r\n }\r\n\r\n get NormalSymbol() {\r\n return this.normalSymbol;\r\n }\r\n\r\n get HoverSymbol() {\r\n return this.hoverSymbol;\r\n }\r\n\r\n get SelectedSymbol() {\r\n return this.selectedSymbol;\r\n }\r\n\r\n sanitisedSVG(svg) {\r\n var sanitized = svg.replace(/\\/g,'%3E') //for >\r\n sanitized = sanitized.replace(/\\#/g,'%23') //for #\r\n \r\n return sanitized;\r\n }\r\n\r\n loadSymbols(baseUrl, accessToken, options, debugMode) {\r\n let base64 = window.btoa(debugMode ? JSON.stringify(this.style) : JSON.stringify(this.style.objJSON));\r\n let imageUrl = `${baseUrl}\\GenerateSymbol?token=${accessToken}&geometryType=1&jStyle=${base64}&height=${this.height}`;\r\n \r\n this.normalSymbol = new Image();\r\n this.normalSymbol.src = imageUrl; \r\n this.hoverSymbol = new Image();\r\n this.hoverSymbol.src = imageUrl + `&size=${encodeURI(options.HoverOutlineWidth)}&colour=${encodeURIComponent(options.HoverColour)}`;\r\n this.selectedSymbol = new Image();\r\n this.selectedSymbol.src = imageUrl + `&size=${encodeURI(options.SelectedOutlineWidth)}&colour=${encodeURIComponent(options.SelectedColour)}`; \r\n }\r\n}\r\n\r\nSymbol.Pin = ``;\r\nSymbol.Marker = ``;\r\n","import * as Colour from './Colour';\r\nimport MapEnums from '../map/enums';\r\n\r\nexport class Label {\r\n // @region Constructors\r\n\r\n constructor(labelStyle) {\r\n this.colour = labelStyle.Colour;\r\n this.hexColour = Colour.fromString(this.colour);\r\n this.fontName = labelStyle.FontName;\r\n this.fontSize = labelStyle.FontSize+2;\r\n this.position = labelStyle.Position;\r\n this.placement = this.getPlacement(labelStyle.Position);\r\n this.rotation = labelStyle.Rotation;\r\n \r\n this.minScale = labelStyle.minScale != null ? labelStyle.minScale : Number.NEGATIVE_INFINITY;\r\n this.maxScale = labelStyle.MaxScale != null ? labelStyle.MaxScale : Number.POSITIVE_INFINITY;\r\n\r\n this.highlight = labelStyle.Highlight;\r\n \r\n this.columns = [];\r\n this.labelFormat = this.getLabelFormat(labelStyle);\r\n }\r\n\r\n isVisible(scale) {\r\n return this.maxScale >= scale; \r\n }\r\n\r\n getLabelFormat(labelStyle) {\r\n var labelFormat = \"\";\r\n let label = labelStyle.Label != null ? JSON.parse(labelStyle.Label) : null;\r\n if ( label != null) {\r\n if (label.Type == 'Field' || label.Type == 'SpatialField') {\r\n this.columns.push(label.Id); \r\n labelFormat += `{${label.Id}}`;\r\n }\r\n else if (label.Type == 'Concatenate') {\r\n if (label.Comparisons != null) {\r\n for(let i = 0; i < label.Comparisons.length; i++) {\r\n let comparison = label.Comparisons[i];\r\n\r\n if (comparison.Id != null) {\r\n this.columns.push(comparison.Id);\r\n labelFormat += `{${comparison.Id}}`;\r\n }\r\n else\r\n labelFormat += `${comparison}`;\r\n }\r\n }\r\n else {\r\n if (label.Rhs.Id != null)\r\n this.columns.push(label.Rhs.Id);\r\n else \r\n labelFormat = label.Rhs;\r\n\r\n if (label.Lhs.Id != null)\r\n this.columns.push(label.Lhs.Id); \r\n else \r\n labelFormat = label.Lhs; \r\n\r\n for (let i = 0; i < this.columns.length; i++) {\r\n labelFormat += `{${this.columns[i]}}`;\r\n } \r\n }\r\n } \r\n\r\n \r\n }\r\n\r\n return labelFormat;\r\n }\r\n \r\n getPlacement(sType) { \r\n if (sType == undefined)\r\n return MapEnums.Placements.MiddleCentre;\r\n else if (sType == 'AboveLeft')\r\n return MapEnums.Placements.AboveLeft;\r\n else if (sType == 'AboveCentre')\r\n return MapEnums.Placements.AboveCentre;\r\n else if (sType == 'AboveRight')\r\n return MapEnums.Placements.AboveRight; \r\n else if (sType == 'MiddleLeft')\r\n return MapEnums.Placements.MiddleLeft;\r\n else if (sType == 'MiddleCentre')\r\n return MapEnums.Placements.MiddleCentre;\r\n else if (sType == 'MiddleRight')\r\n return MapEnums.Placements.MiddleRight; \r\n else if (sType == 'BelowLeft')\r\n return MapEnums.Placements.BelowLeft; \r\n else if (sType == 'BelowCentre')\r\n return MapEnums.Placements.BelowCentre;\r\n else if (sType == 'BelowRight')\r\n return MapEnums.Placements.BelowRight; \r\n } \r\n \r\n getFormattedLabel(feature) {\r\n var formattedLabel = this.LabelFormat;\r\n\r\n for(let i = 0; i < this.columns.length; i++) {\r\n let key = this.columns[i];\r\n let value = feature.dctValues[key];\r\n if (value != null) {\r\n let toReplace = `{${this.columns[i]}}`;\r\n formattedLabel = formattedLabel.replace(toReplace, value);\r\n }\r\n }\r\n\r\n return formattedLabel;\r\n }\r\n\r\n get Colour() {\r\n return this.colour;\r\n }\r\n \r\n get HexColour() {\r\n return this.hexColour;\r\n }\r\n\r\n get FontName() {\r\n return this.fontName;\r\n }\r\n\r\n get FontSize() {\r\n return this.fontSize;\r\n }\r\n\r\n get Position() {\r\n return this.position;\r\n }\r\n\r\n get Placement() {\r\n return this.placement;\r\n }\r\n\r\n get Rotation() {\r\n return this.rotation;\r\n }\r\n \r\n get LabelFormat() {\r\n return this.labelFormat;\r\n }\r\n}\r\n\r\n\r\n","import * as DomEvent from './DomEvent';\nimport * as Util from '../core/Util';\nimport * as Browser from '../core/Browser';\n\n/*\n * Extends L.DomEvent to provide touch support for Internet Explorer and Windows-based devices.\n */\n\n\nvar POINTER_DOWN = Browser.msPointer ? 'MSPointerDown' : 'pointerdown';\nvar POINTER_MOVE = Browser.msPointer ? 'MSPointerMove' : 'pointermove';\nvar POINTER_UP = Browser.msPointer ? 'MSPointerUp' : 'pointerup';\nvar POINTER_CANCEL = Browser.msPointer ? 'MSPointerCancel' : 'pointercancel';\nvar TAG_WHITE_LIST = ['INPUT', 'SELECT', 'OPTION'];\n\nvar _pointers = {};\nvar _pointerDocListener = false;\n\n// DomEvent.DoubleTap needs to know about this\nexport var _pointersCount = 0;\n\n// Provides a touch events wrapper for (ms)pointer events.\n// ref http://www.w3.org/TR/pointerevents/ https://www.w3.org/Bugs/Public/show_bug.cgi?id=22890\n\nexport function addPointerListener(obj, type, handler, id) {\n\tif (type === 'touchstart') {\n\t\t_addPointerStart(obj, handler, id);\n\n\t} else if (type === 'touchmove') {\n\t\t_addPointerMove(obj, handler, id);\n\n\t} else if (type === 'touchend') {\n\t\t_addPointerEnd(obj, handler, id);\n\t}\n\n\treturn this;\n}\n\nexport function removePointerListener(obj, type, id) {\n\tvar handler = obj['_leaflet_' + type + id];\n\n\tif (type === 'touchstart') {\n\t\tobj.removeEventListener(POINTER_DOWN, handler, false);\n\n\t} else if (type === 'touchmove') {\n\t\tobj.removeEventListener(POINTER_MOVE, handler, false);\n\n\t} else if (type === 'touchend') {\n\t\tobj.removeEventListener(POINTER_UP, handler, false);\n\t\tobj.removeEventListener(POINTER_CANCEL, handler, false);\n\t}\n\n\treturn this;\n}\n\nfunction _addPointerStart(obj, handler, id) {\n\tvar onDown = Util.bind(function (e) {\n\t\tif (e.pointerType !== 'mouse' && e.MSPOINTER_TYPE_MOUSE && e.pointerType !== e.MSPOINTER_TYPE_MOUSE) {\n\t\t\t// In IE11, some touch events needs to fire for form controls, or\n\t\t\t// the controls will stop working. We keep a whitelist of tag names that\n\t\t\t// need these events. For other target tags, we prevent default on the event.\n\t\t\tif (TAG_WHITE_LIST.indexOf(e.target.tagName) < 0) {\n\t\t\t\tDomEvent.preventDefault(e);\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t_handlePointer(e, handler);\n\t});\n\n\tobj['_leaflet_touchstart' + id] = onDown;\n\tobj.addEventListener(POINTER_DOWN, onDown, false);\n\n\t// need to keep track of what pointers and how many are active to provide e.touches emulation\n\tif (!_pointerDocListener) {\n\t\t// we listen documentElement as any drags that end by moving the touch off the screen get fired there\n\t\tdocument.documentElement.addEventListener(POINTER_DOWN, _globalPointerDown, true);\n\t\tdocument.documentElement.addEventListener(POINTER_MOVE, _globalPointerMove, true);\n\t\tdocument.documentElement.addEventListener(POINTER_UP, _globalPointerUp, true);\n\t\tdocument.documentElement.addEventListener(POINTER_CANCEL, _globalPointerUp, true);\n\n\t\t_pointerDocListener = true;\n\t}\n}\n\nfunction _globalPointerDown(e) {\n\t_pointers[e.pointerId] = e;\n\t_pointersCount++;\n}\n\nfunction _globalPointerMove(e) {\n\tif (_pointers[e.pointerId]) {\n\t\t_pointers[e.pointerId] = e;\n\t}\n}\n\nfunction _globalPointerUp(e) {\n\tdelete _pointers[e.pointerId];\n\t_pointersCount--;\n}\n\nfunction _handlePointer(e, handler) {\n\te.touches = [];\n\tfor (var i in _pointers) {\n\t\te.touches.push(_pointers[i]);\n\t}\n\te.changedTouches = [e];\n\n\thandler(e);\n}\n\nfunction _addPointerMove(obj, handler, id) {\n\tvar onMove = function (e) {\n\t\t// don't fire touch moves when mouse isn't down\n\t\tif ((e.pointerType === e.MSPOINTER_TYPE_MOUSE || e.pointerType === 'mouse') && e.buttons === 0) { return; }\n\n\t\t_handlePointer(e, handler);\n\t};\n\n\tobj['_leaflet_touchmove' + id] = onMove;\n\tobj.addEventListener(POINTER_MOVE, onMove, false);\n}\n\nfunction _addPointerEnd(obj, handler, id) {\n\tvar onUp = function (e) {\n\t\t_handlePointer(e, handler);\n\t};\n\n\tobj['_leaflet_touchend' + id] = onUp;\n\tobj.addEventListener(POINTER_UP, onUp, false);\n\tobj.addEventListener(POINTER_CANCEL, onUp, false);\n}\n\n","import * as Browser from '../core/Browser';\r\nimport {_pointersCount} from './DomEvent.Pointer';\r\n\r\n/*\r\n * Extends the event handling code with double tap support for mobile browsers.\r\n */\r\n\r\nvar _touchstart = Browser.msPointer ? 'MSPointerDown' : Browser.pointer ? 'pointerdown' : 'touchstart';\r\nvar _touchend = Browser.msPointer ? 'MSPointerUp' : Browser.pointer ? 'pointerup' : 'touchend';\r\nvar _pre = '_leaflet_';\r\n\r\n// inspired by Zepto touch code by Thomas Fuchs\r\nexport function addDoubleTapListener(obj, handler, id) {\r\n\tvar last, touch,\r\n\t doubleTap = false,\r\n\t delay = 250;\r\n\r\n\tfunction onTouchStart(e) {\r\n\t\tvar count;\r\n\r\n\t\tif (Browser.pointer) {\r\n\t\t\tif ((!Browser.edge) || e.pointerType === 'mouse') { return; }\r\n\t\t\tcount = _pointersCount;\r\n\t\t} else {\r\n\t\t\tcount = e.touches.length;\r\n\t\t}\r\n\r\n\t\tif (count > 1) { return; }\r\n\r\n\t\tvar now = Date.now(),\r\n\t\t delta = now - (last || now);\r\n\r\n\t\ttouch = e.touches ? e.touches[0] : e;\r\n\t\tdoubleTap = (delta > 0 && delta <= delay);\r\n\t\tlast = now;\r\n\t}\r\n\r\n\tfunction onTouchEnd(e) {\r\n\t\tif (doubleTap && !touch.cancelBubble) {\r\n\t\t\tif (Browser.pointer) {\r\n\t\t\t\tif ((!Browser.edge) || e.pointerType === 'mouse') { return; }\r\n\t\t\t\t// work around .type being readonly with MSPointer* events\r\n\t\t\t\tvar newTouch = {},\r\n\t\t\t\t prop, i;\r\n\r\n\t\t\t\tfor (i in touch) {\r\n\t\t\t\t\tprop = touch[i];\r\n\t\t\t\t\tnewTouch[i] = prop && prop.bind ? prop.bind(touch) : prop;\r\n\t\t\t\t}\r\n\t\t\t\ttouch = newTouch;\r\n\t\t\t}\r\n\t\t\ttouch.type = 'dblclick';\r\n\t\t\ttouch.button = 0;\r\n\t\t\thandler(touch);\r\n\t\t\tlast = null;\r\n\t\t}\r\n\t}\r\n\r\n\tobj[_pre + _touchstart + id] = onTouchStart;\r\n\tobj[_pre + _touchend + id] = onTouchEnd;\r\n\tobj[_pre + 'dblclick' + id] = handler;\r\n\r\n\tobj.addEventListener(_touchstart, onTouchStart, Browser.passiveEvents ? {passive: false} : false);\r\n\tobj.addEventListener(_touchend, onTouchEnd, Browser.passiveEvents ? {passive: false} : false);\r\n\r\n\t// On some platforms (notably, chrome<55 on win10 + touchscreen + mouse),\r\n\t// the browser doesn't fire touchend/pointerup events but does fire\r\n\t// native dblclicks. See #4127.\r\n\t// Edge 14 also fires native dblclicks, but only for pointerType mouse, see #5180.\r\n\tobj.addEventListener('dblclick', handler, false);\r\n\r\n\treturn this;\r\n}\r\n\r\nexport function removeDoubleTapListener(obj, id) {\r\n\tvar touchstart = obj[_pre + _touchstart + id],\r\n\t touchend = obj[_pre + _touchend + id],\r\n\t dblclick = obj[_pre + 'dblclick' + id];\r\n\r\n\tobj.removeEventListener(_touchstart, touchstart, Browser.passiveEvents ? {passive: false} : false);\r\n\tobj.removeEventListener(_touchend, touchend, Browser.passiveEvents ? {passive: false} : false);\r\n\tif (!Browser.edge) {\r\n\t\tobj.removeEventListener('dblclick', dblclick, false);\r\n\t}\r\n\r\n\treturn this;\r\n}\r\n","import * as DomEvent from './DomEvent';\r\nimport * as Util from '../core/Util';\r\nimport {Point} from '../geometry/Point';\r\nimport * as Browser from '../core/Browser';\r\n\r\n/*\r\n * @namespace DomUtil\r\n *\r\n * Utility functions to work with the [DOM](https://developer.mozilla.org/docs/Web/API/Document_Object_Model)\r\n * tree, used by Leaflet internally.\r\n *\r\n * Most functions expecting or returning a `HTMLElement` also work for\r\n * SVG elements. The only difference is that classes refer to CSS classes\r\n * in HTML and SVG classes in SVG.\r\n */\r\n\r\n\r\n// @property TRANSFORM: String\r\n// Vendor-prefixed transform style name (e.g. `'webkitTransform'` for WebKit).\r\nexport var TRANSFORM = testProp(\r\n\t['transform', 'webkitTransform', 'OTransform', 'MozTransform', 'msTransform']);\r\n\r\n// webkitTransition comes first because some browser versions that drop vendor prefix don't do\r\n// the same for the transitionend event, in particular the Android 4.1 stock browser\r\n\r\n// @property TRANSITION: String\r\n// Vendor-prefixed transition style name.\r\nexport var TRANSITION = testProp(\r\n\t['webkitTransition', 'transition', 'OTransition', 'MozTransition', 'msTransition']);\r\n\r\n// @property TRANSITION_END: String\r\n// Vendor-prefixed transitionend event name.\r\nexport var TRANSITION_END =\r\n\tTRANSITION === 'webkitTransition' || TRANSITION === 'OTransition' ? TRANSITION + 'End' : 'transitionend';\r\n\r\n\r\n// @function get(id: String|HTMLElement): HTMLElement\r\n// Returns an element given its DOM id, or returns the element itself\r\n// if it was passed directly.\r\nexport function get(id) {\r\n\treturn typeof id === 'string' ? document.getElementById(id) : id;\r\n}\r\n\r\n// @function getStyle(el: HTMLElement, styleAttrib: String): String\r\n// Returns the value for a certain style attribute on an element,\r\n// including computed values or values set through CSS.\r\nexport function getStyle(el, style) {\r\n\tvar value = el.style[style] || (el.currentStyle && el.currentStyle[style]);\r\n\r\n\tif ((!value || value === 'auto') && document.defaultView) {\r\n\t\tvar css = document.defaultView.getComputedStyle(el, null);\r\n\t\tvalue = css ? css[style] : null;\r\n\t}\r\n\treturn value === 'auto' ? null : value;\r\n}\r\n\r\n// @function create(tagName: String, className?: String, container?: HTMLElement): HTMLElement\r\n// Creates an HTML element with `tagName`, sets its class to `className`, and optionally appends it to `container` element.\r\nexport function create(tagName, className, container) {\r\n\tvar el = document.createElement(tagName);\r\n\tel.className = className || '';\r\n\r\n\tif (container) {\r\n\t\tcontainer.appendChild(el);\r\n\t}\r\n\treturn el;\r\n}\r\n\r\n// @function remove(el: HTMLElement)\r\n// Removes `el` from its parent element\r\nexport function remove(el) {\r\n\tvar parent = el.parentNode;\r\n\tif (parent) {\r\n\t\tparent.removeChild(el);\r\n\t}\r\n}\r\n\r\n// @function empty(el: HTMLElement)\r\n// Removes all of `el`'s children elements from `el`\r\nexport function empty(el) {\r\n\twhile (el.firstChild) {\r\n\t\tel.removeChild(el.firstChild);\r\n\t}\r\n}\r\n\r\n// @function toFront(el: HTMLElement)\r\n// Makes `el` the last child of its parent, so it renders in front of the other children.\r\nexport function toFront(el) {\r\n\tvar parent = el.parentNode;\r\n\tif (parent && parent.lastChild !== el) {\r\n\t\tparent.appendChild(el);\r\n\t}\r\n}\r\n\r\n// @function toBack(el: HTMLElement)\r\n// Makes `el` the first child of its parent, so it renders behind the other children.\r\nexport function toBack(el) {\r\n\tvar parent = el.parentNode;\r\n\tif (parent && parent.firstChild !== el) {\r\n\t\tparent.insertBefore(el, parent.firstChild);\r\n\t}\r\n}\r\n\r\n// @function hasClass(el: HTMLElement, name: String): Boolean\r\n// Returns `true` if the element's class attribute contains `name`.\r\nexport function hasClass(el, name) {\r\n\tif (el.classList !== undefined) {\r\n\t\treturn el.classList.contains(name);\r\n\t}\r\n\tvar className = getClass(el);\r\n\treturn className.length > 0 && new RegExp('(^|\\\\s)' + name + '(\\\\s|$)').test(className);\r\n}\r\n\r\n// @function addClass(el: HTMLElement, name: String)\r\n// Adds `name` to the element's class attribute.\r\nexport function addClass(el, name) {\r\n\tif (el.classList !== undefined) {\r\n\t\tvar classes = Util.splitWords(name);\r\n\t\tfor (var i = 0, len = classes.length; i < len; i++) {\r\n\t\t\tel.classList.add(classes[i]);\r\n\t\t}\r\n\t} else if (!hasClass(el, name)) {\r\n\t\tvar className = getClass(el);\r\n\t\tsetClass(el, (className ? className + ' ' : '') + name);\r\n\t}\r\n}\r\n\r\n// @function removeClass(el: HTMLElement, name: String)\r\n// Removes `name` from the element's class attribute.\r\nexport function removeClass(el, name) {\r\n\tif (el.classList !== undefined) {\r\n\t\tel.classList.remove(name);\r\n\t} else {\r\n\t\tsetClass(el, Util.trim((' ' + getClass(el) + ' ').replace(' ' + name + ' ', ' ')));\r\n\t}\r\n}\r\n\r\n// @function setClass(el: HTMLElement, name: String)\r\n// Sets the element's class.\r\nexport function setClass(el, name) {\r\n\tif (el.className.baseVal === undefined) {\r\n\t\tel.className = name;\r\n\t} else {\r\n\t\t// in case of SVG element\r\n\t\tel.className.baseVal = name;\r\n\t}\r\n}\r\n\r\n// @function getClass(el: HTMLElement): String\r\n// Returns the element's class.\r\nexport function getClass(el) {\r\n\t// Check if the element is an SVGElementInstance and use the correspondingElement instead\r\n\t// (Required for linked SVG elements in IE11.)\r\n\tif (el.correspondingElement) {\r\n\t\tel = el.correspondingElement;\r\n\t}\r\n\treturn el.className.baseVal === undefined ? el.className : el.className.baseVal;\r\n}\r\n\r\n// @function setOpacity(el: HTMLElement, opacity: Number)\r\n// Set the opacity of an element (including old IE support).\r\n// `opacity` must be a number from `0` to `1`.\r\nexport function setOpacity(el, value) {\r\n\tif ('opacity' in el.style) {\r\n\t\tel.style.opacity = value;\r\n\t} else if ('filter' in el.style) {\r\n\t\t_setOpacityIE(el, value);\r\n\t}\r\n}\r\n\r\nfunction _setOpacityIE(el, value) {\r\n\tvar filter = false,\r\n\t filterName = 'DXImageTransform.Microsoft.Alpha';\r\n\r\n\t// filters collection throws an error if we try to retrieve a filter that doesn't exist\r\n\ttry {\r\n\t\tfilter = el.filters.item(filterName);\r\n\t} catch (e) {\r\n\t\t// don't set opacity to 1 if we haven't already set an opacity,\r\n\t\t// it isn't needed and breaks transparent pngs.\r\n\t\tif (value === 1) { return; }\r\n\t}\r\n\r\n\tvalue = Math.round(value * 100);\r\n\r\n\tif (filter) {\r\n\t\tfilter.Enabled = (value !== 100);\r\n\t\tfilter.Opacity = value;\r\n\t} else {\r\n\t\tel.style.filter += ' progid:' + filterName + '(opacity=' + value + ')';\r\n\t}\r\n}\r\n\r\n// @function testProp(props: String[]): String|false\r\n// Goes through the array of style names and returns the first name\r\n// that is a valid style name for an element. If no such name is found,\r\n// it returns false. Useful for vendor-prefixed styles like `transform`.\r\nexport function testProp(props) {\r\n\tvar style = document.documentElement.style;\r\n\r\n\tfor (var i = 0; i < props.length; i++) {\r\n\t\tif (props[i] in style) {\r\n\t\t\treturn props[i];\r\n\t\t}\r\n\t}\r\n\treturn false;\r\n}\r\n\r\n// @function setTransform(el: HTMLElement, offset: Point, scale?: Number)\r\n// Resets the 3D CSS transform of `el` so it is translated by `offset` pixels\r\n// and optionally scaled by `scale`. Does not have an effect if the\r\n// browser doesn't support 3D CSS transforms.\r\nexport function setTransform(el, offset, scale) {\r\n\tvar pos = offset || new Point(0, 0);\r\n\r\n\tel.style[TRANSFORM] =\r\n\t\t(Browser.ie3d ?\r\n\t\t\t'translate(' + pos.x + 'px,' + pos.y + 'px)' :\r\n\t\t\t'translate3d(' + pos.x + 'px,' + pos.y + 'px,0)') +\r\n\t\t(scale ? ' scale(' + scale + ')' : '');\r\n}\r\n\r\n// @function setPosition(el: HTMLElement, position: Point)\r\n// Sets the position of `el` to coordinates specified by `position`,\r\n// using CSS translate or top/left positioning depending on the browser\r\n// (used by Leaflet internally to position its layers).\r\nexport function setPosition(el, point) {\r\n\r\n\t/*eslint-disable */\r\n\tel._leaflet_pos = point;\r\n\t/* eslint-enable */\r\n\r\n\tif (Browser.any3d) {\r\n\t\tsetTransform(el, point);\r\n\t} else {\r\n\t\tel.style.left = point.x + 'px';\r\n\t\tel.style.top = point.y + 'px';\r\n\t}\r\n}\r\n\r\n// @function getPosition(el: HTMLElement): Point\r\n// Returns the coordinates of an element previously positioned with setPosition.\r\nexport function getPosition(el) {\r\n\t// this method is only used for elements previously positioned using setPosition,\r\n\t// so it's safe to cache the position for performance\r\n\r\n\treturn el._leaflet_pos || new Point(0, 0);\r\n}\r\n\r\n// @function disableTextSelection()\r\n// Prevents the user from generating `selectstart` DOM events, usually generated\r\n// when the user drags the mouse through a page with text. Used internally\r\n// by Leaflet to override the behaviour of any click-and-drag interaction on\r\n// the map. Affects drag interactions on the whole document.\r\n\r\n// @function enableTextSelection()\r\n// Cancels the effects of a previous [`L.DomUtil.disableTextSelection`](#domutil-disabletextselection).\r\nexport var disableTextSelection;\r\nexport var enableTextSelection;\r\nvar _userSelect;\r\nif ('onselectstart' in document) {\r\n\tdisableTextSelection = function () {\r\n\t\tDomEvent.on(window, 'selectstart', DomEvent.preventDefault);\r\n\t};\r\n\tenableTextSelection = function () {\r\n\t\tDomEvent.off(window, 'selectstart', DomEvent.preventDefault);\r\n\t};\r\n} else {\r\n\tvar userSelectProperty = testProp(\r\n\t\t['userSelect', 'WebkitUserSelect', 'OUserSelect', 'MozUserSelect', 'msUserSelect']);\r\n\r\n\tdisableTextSelection = function () {\r\n\t\tif (userSelectProperty) {\r\n\t\t\tvar style = document.documentElement.style;\r\n\t\t\t_userSelect = style[userSelectProperty];\r\n\t\t\tstyle[userSelectProperty] = 'none';\r\n\t\t}\r\n\t};\r\n\tenableTextSelection = function () {\r\n\t\tif (userSelectProperty) {\r\n\t\t\tdocument.documentElement.style[userSelectProperty] = _userSelect;\r\n\t\t\t_userSelect = undefined;\r\n\t\t}\r\n\t};\r\n}\r\n\r\n// @function disableImageDrag()\r\n// As [`L.DomUtil.disableTextSelection`](#domutil-disabletextselection), but\r\n// for `dragstart` DOM events, usually generated when the user drags an image.\r\nexport function disableImageDrag() {\r\n\tDomEvent.on(window, 'dragstart', DomEvent.preventDefault);\r\n}\r\n\r\n// @function enableImageDrag()\r\n// Cancels the effects of a previous [`L.DomUtil.disableImageDrag`](#domutil-disabletextselection).\r\nexport function enableImageDrag() {\r\n\tDomEvent.off(window, 'dragstart', DomEvent.preventDefault);\r\n}\r\n\r\nvar _outlineElement, _outlineStyle;\r\n// @function preventOutline(el: HTMLElement)\r\n// Makes the [outline](https://developer.mozilla.org/docs/Web/CSS/outline)\r\n// of the element `el` invisible. Used internally by Leaflet to prevent\r\n// focusable elements from displaying an outline when the user performs a\r\n// drag interaction on them.\r\nexport function preventOutline(element) {\r\n\twhile (element.tabIndex === -1) {\r\n\t\telement = element.parentNode;\r\n\t}\r\n\tif (!element.style) { return; }\r\n\trestoreOutline();\r\n\t_outlineElement = element;\r\n\t_outlineStyle = element.style.outline;\r\n\telement.style.outline = 'none';\r\n\tDomEvent.on(window, 'keydown', restoreOutline);\r\n}\r\n\r\n// @function restoreOutline()\r\n// Cancels the effects of a previous [`L.DomUtil.preventOutline`]().\r\nexport function restoreOutline() {\r\n\tif (!_outlineElement) { return; }\r\n\t_outlineElement.style.outline = _outlineStyle;\r\n\t_outlineElement = undefined;\r\n\t_outlineStyle = undefined;\r\n\tDomEvent.off(window, 'keydown', restoreOutline);\r\n}\r\n\r\n// @function getSizedParentNode(el: HTMLElement): HTMLElement\r\n// Finds the closest parent node which size (width and height) is not null.\r\nexport function getSizedParentNode(element) {\r\n\tdo {\r\n\t\telement = element.parentNode;\r\n\t} while ((!element.offsetWidth || !element.offsetHeight) && element !== document.body);\r\n\treturn element;\r\n}\r\n\r\n// @function getScale(el: HTMLElement): Object\r\n// Computes the CSS scale currently applied on the element.\r\n// Returns an object with `x` and `y` members as horizontal and vertical scales respectively,\r\n// and `boundingClientRect` as the result of [`getBoundingClientRect()`](https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect).\r\nexport function getScale(element) {\r\n\tvar rect = element.getBoundingClientRect(); // Read-only in old browsers.\r\n\r\n\treturn {\r\n\t\tx: rect.width / element.offsetWidth || 1,\r\n\t\ty: rect.height / element.offsetHeight || 1,\r\n\t\tboundingClientRect: rect\r\n\t};\r\n}\r\n","import {Point} from '../geometry/Point';\r\nimport * as Util from '../core/Util';\r\nimport * as Browser from '../core/Browser';\r\nimport {addPointerListener, removePointerListener} from './DomEvent.Pointer';\r\nimport {addDoubleTapListener, removeDoubleTapListener} from './DomEvent.DoubleTap';\r\nimport {getScale} from './DomUtil';\r\n\r\n/*\r\n * @namespace DomEvent\r\n * Utility functions to work with the [DOM events](https://developer.mozilla.org/docs/Web/API/Event), used by Leaflet internally.\r\n */\r\n\r\n// Inspired by John Resig, Dean Edwards and YUI addEvent implementations.\r\n\r\n// @function on(el: HTMLElement, types: String, fn: Function, context?: Object): this\r\n// Adds a listener function (`fn`) to a particular DOM event type of the\r\n// element `el`. You can optionally specify the context of the listener\r\n// (object the `this` keyword will point to). You can also pass several\r\n// space-separated types (e.g. `'click dblclick'`).\r\n\r\n// @alternative\r\n// @function on(el: HTMLElement, eventMap: Object, context?: Object): this\r\n// Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\nexport function on(obj, types, fn, context) {\r\n\r\n\tif (typeof types === 'object') {\r\n\t\tfor (var type in types) {\r\n\t\t\taddOne(obj, type, types[type], fn);\r\n\t\t}\r\n\t} else {\r\n\t\ttypes = Util.splitWords(types);\r\n\r\n\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\taddOne(obj, types[i], fn, context);\r\n\t\t}\r\n\t}\r\n\r\n\treturn this;\r\n}\r\n\r\nvar eventsKey = '_leaflet_events';\r\n\r\n// @function off(el: HTMLElement, types: String, fn: Function, context?: Object): this\r\n// Removes a previously added listener function.\r\n// Note that if you passed a custom context to on, you must pass the same\r\n// context to `off` in order to remove the listener.\r\n\r\n// @alternative\r\n// @function off(el: HTMLElement, eventMap: Object, context?: Object): this\r\n// Removes a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\nexport function off(obj, types, fn, context) {\r\n\r\n\tif (typeof types === 'object') {\r\n\t\tfor (var type in types) {\r\n\t\t\tremoveOne(obj, type, types[type], fn);\r\n\t\t}\r\n\t} else if (types) {\r\n\t\ttypes = Util.splitWords(types);\r\n\r\n\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\tremoveOne(obj, types[i], fn, context);\r\n\t\t}\r\n\t} else {\r\n\t\tfor (var j in obj[eventsKey]) {\r\n\t\t\tremoveOne(obj, j, obj[eventsKey][j]);\r\n\t\t}\r\n\t\tdelete obj[eventsKey];\r\n\t}\r\n\r\n\treturn this;\r\n}\r\n\r\nfunction addOne(obj, type, fn, context) {\r\n\tvar id = type + Util.stamp(fn) + (context ? '_' + Util.stamp(context) : '');\r\n\r\n\tif (obj[eventsKey] && obj[eventsKey][id]) { return this; }\r\n\r\n\tvar handler = function (e) {\r\n\t\treturn fn.call(context || obj, e || window.event);\r\n\t};\r\n\r\n\tvar originalHandler = handler;\r\n\r\n\tif (Browser.pointer && type.indexOf('touch') === 0) {\r\n\t\t// Needs DomEvent.Pointer.js\r\n\t\taddPointerListener(obj, type, handler, id);\r\n\r\n\t} else if (Browser.touch && (type === 'dblclick') && addDoubleTapListener &&\r\n\t !(Browser.pointer && Browser.chrome)) {\r\n\t\t// Chrome >55 does not need the synthetic dblclicks from addDoubleTapListener\r\n\t\t// See #5180\r\n\t\taddDoubleTapListener(obj, handler, id);\r\n\r\n\t} else if ('addEventListener' in obj) {\r\n\r\n\t\tif (type === 'mousewheel') {\r\n\t\t\tobj.addEventListener('onwheel' in obj ? 'wheel' : 'mousewheel', handler, Browser.passiveEvents ? {passive: false} : false);\r\n\r\n\t\t} else if ((type === 'mouseenter') || (type === 'mouseleave')) {\r\n\t\t\thandler = function (e) {\r\n\t\t\t\te = e || window.event;\r\n\t\t\t\tif (isExternalTarget(obj, e)) {\r\n\t\t\t\t\toriginalHandler(e);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\tobj.addEventListener(type === 'mouseenter' ? 'mouseover' : 'mouseout', handler, false);\r\n\r\n\t\t} else {\r\n\t\t\tif (type === 'click' && Browser.android) {\r\n\t\t\t\thandler = function (e) {\r\n\t\t\t\t\tfilterClick(e, originalHandler);\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\tobj.addEventListener(type, handler, false);\r\n\t\t}\r\n\r\n\t} else if ('attachEvent' in obj) {\r\n\t\tobj.attachEvent('on' + type, handler);\r\n\t}\r\n\r\n\tobj[eventsKey] = obj[eventsKey] || {};\r\n\tobj[eventsKey][id] = handler;\r\n}\r\n\r\nfunction removeOne(obj, type, fn, context) {\r\n\r\n\tvar id = type + Util.stamp(fn) + (context ? '_' + Util.stamp(context) : ''),\r\n\t handler = obj[eventsKey] && obj[eventsKey][id];\r\n\r\n\tif (!handler) { return this; }\r\n\r\n\tif (Browser.pointer && type.indexOf('touch') === 0) {\r\n\t\tremovePointerListener(obj, type, id);\r\n\r\n\t} else if (Browser.touch && (type === 'dblclick') && removeDoubleTapListener &&\r\n\t !(Browser.pointer && Browser.chrome)) {\r\n\t\tremoveDoubleTapListener(obj, id);\r\n\r\n\t} else if ('removeEventListener' in obj) {\r\n\r\n\t\tif (type === 'mousewheel') {\r\n\t\t\tobj.removeEventListener('onwheel' in obj ? 'wheel' : 'mousewheel', handler, Browser.passiveEvents ? {passive: false} : false);\r\n\r\n\t\t} else {\r\n\t\t\tobj.removeEventListener(\r\n\t\t\t\ttype === 'mouseenter' ? 'mouseover' :\r\n\t\t\t\ttype === 'mouseleave' ? 'mouseout' : type, handler, false);\r\n\t\t}\r\n\r\n\t} else if ('detachEvent' in obj) {\r\n\t\tobj.detachEvent('on' + type, handler);\r\n\t}\r\n\r\n\tobj[eventsKey][id] = null;\r\n}\r\n\r\n// @function stopPropagation(ev: DOMEvent): this\r\n// Stop the given event from propagation to parent elements. Used inside the listener functions:\r\n// ```js\r\n// L.DomEvent.on(div, 'click', function (ev) {\r\n// \tL.DomEvent.stopPropagation(ev);\r\n// });\r\n// ```\r\nexport function stopPropagation(e) {\r\n\r\n\tif (e.stopPropagation) {\r\n\t\te.stopPropagation();\r\n\t} else if (e.originalEvent) { // In case of Leaflet event.\r\n\t\te.originalEvent._stopped = true;\r\n\t} else {\r\n\t\te.cancelBubble = true;\r\n\t}\r\n\tskipped(e);\r\n\r\n\treturn this;\r\n}\r\n\r\n// @function disableScrollPropagation(el: HTMLElement): this\r\n// Adds `stopPropagation` to the element's `'mousewheel'` events (plus browser variants).\r\nexport function disableScrollPropagation(el) {\r\n\taddOne(el, 'mousewheel', stopPropagation);\r\n\treturn this;\r\n}\r\n\r\n// @function disableClickPropagation(el: HTMLElement): this\r\n// Adds `stopPropagation` to the element's `'click'`, `'doubleclick'`,\r\n// `'mousedown'` and `'touchstart'` events (plus browser variants).\r\nexport function disableClickPropagation(el) {\r\n\ton(el, 'mousedown touchstart dblclick', stopPropagation);\r\n\taddOne(el, 'click', fakeStop);\r\n\treturn this;\r\n}\r\n\r\n// @function preventDefault(ev: DOMEvent): this\r\n// Prevents the default action of the DOM Event `ev` from happening (such as\r\n// following a link in the href of the a element, or doing a POST request\r\n// with page reload when a `
` is submitted).\r\n// Use it inside listener functions.\r\nexport function preventDefault(e) {\r\n\tif (e.preventDefault) {\r\n\t\te.preventDefault();\r\n\t} else {\r\n\t\te.returnValue = false;\r\n\t}\r\n\treturn this;\r\n}\r\n\r\n// @function stop(ev: DOMEvent): this\r\n// Does `stopPropagation` and `preventDefault` at the same time.\r\nexport function stop(e) {\r\n\tpreventDefault(e);\r\n\tstopPropagation(e);\r\n\treturn this;\r\n}\r\n\r\n// @function getMousePosition(ev: DOMEvent, container?: HTMLElement): Point\r\n// Gets normalized mouse position from a DOM event relative to the\r\n// `container` (border excluded) or to the whole page if not specified.\r\nexport function getMousePosition(e, container) {\r\n\tif (!container) {\r\n\t\treturn new Point(e.clientX, e.clientY);\r\n\t}\r\n\r\n\tvar scale = getScale(container),\r\n\t offset = scale.boundingClientRect; // left and top values are in page scale (like the event clientX/Y)\r\n\r\n\treturn new Point(\r\n\t\t// offset.left/top values are in page scale (like clientX/Y),\r\n\t\t// whereas clientLeft/Top (border width) values are the original values (before CSS scale applies).\r\n\t\t(e.clientX - offset.left) / scale.x - container.clientLeft,\r\n\t\t(e.clientY - offset.top) / scale.y - container.clientTop\r\n\t);\r\n}\r\n\r\n// Chrome on Win scrolls double the pixels as in other platforms (see #4538),\r\n// and Firefox scrolls device pixels, not CSS pixels\r\nvar wheelPxFactor =\r\n\t(Browser.win && Browser.chrome) ? 2 * window.devicePixelRatio :\r\n\tBrowser.gecko ? window.devicePixelRatio : 1;\r\n\r\n// @function getWheelDelta(ev: DOMEvent): Number\r\n// Gets normalized wheel delta from a mousewheel DOM event, in vertical\r\n// pixels scrolled (negative if scrolling down).\r\n// Events from pointing devices without precise scrolling are mapped to\r\n// a best guess of 60 pixels.\r\nexport function getWheelDelta(e) {\r\n\treturn (Browser.edge) ? e.wheelDeltaY / 2 : // Don't trust window-geometry-based delta\r\n\t (e.deltaY && e.deltaMode === 0) ? -e.deltaY / wheelPxFactor : // Pixels\r\n\t (e.deltaY && e.deltaMode === 1) ? -e.deltaY * 20 : // Lines\r\n\t (e.deltaY && e.deltaMode === 2) ? -e.deltaY * 60 : // Pages\r\n\t (e.deltaX || e.deltaZ) ? 0 :\t// Skip horizontal/depth wheel events\r\n\t e.wheelDelta ? (e.wheelDeltaY || e.wheelDelta) / 2 : // Legacy IE pixels\r\n\t (e.detail && Math.abs(e.detail) < 32765) ? -e.detail * 20 : // Legacy Moz lines\r\n\t e.detail ? e.detail / -32765 * 60 : // Legacy Moz pages\r\n\t 0;\r\n}\r\n\r\nvar skipEvents = {};\r\n\r\nexport function fakeStop(e) {\r\n\t// fakes stopPropagation by setting a special event flag, checked/reset with skipped(e)\r\n\tskipEvents[e.type] = true;\r\n}\r\n\r\nexport function skipped(e) {\r\n\tvar events = skipEvents[e.type];\r\n\t// reset when checking, as it's only used in map container and propagates outside of the map\r\n\tskipEvents[e.type] = false;\r\n\treturn events;\r\n}\r\n\r\n// check if element really left/entered the event target (for mouseenter/mouseleave)\r\nexport function isExternalTarget(el, e) {\r\n\r\n\tvar related = e.relatedTarget;\r\n\r\n\tif (!related) { return true; }\r\n\r\n\ttry {\r\n\t\twhile (related && (related !== el)) {\r\n\t\t\trelated = related.parentNode;\r\n\t\t}\r\n\t} catch (err) {\r\n\t\treturn false;\r\n\t}\r\n\treturn (related !== el);\r\n}\r\n\r\nvar lastClick;\r\n\r\n// this is a horrible workaround for a bug in Android where a single touch triggers two click events\r\nfunction filterClick(e, handler) {\r\n\tvar timeStamp = (e.timeStamp || (e.originalEvent && e.originalEvent.timeStamp)),\r\n\t elapsed = lastClick && (timeStamp - lastClick);\r\n\r\n\t// are they closer together than 500ms yet more than 100ms?\r\n\t// Android typically triggers them ~300ms apart while multiple listeners\r\n\t// on the same event should be triggered far faster;\r\n\t// or check if click is simulated on the element, and if it is, reject any non-simulated events\r\n\r\n\tif ((elapsed && elapsed > 100 && elapsed < 500) || (e.target._simulatedClick && !e._simulated)) {\r\n\t\tstop(e);\r\n\t\treturn;\r\n\t}\r\n\tlastClick = timeStamp;\r\n\r\n\thandler(e);\r\n}\r\n\r\n// @function addListener(…): this\r\n// Alias to [`L.DomEvent.on`](#domevent-on)\r\nexport {on as addListener};\r\n\r\n// @function removeListener(…): this\r\n// Alias to [`L.DomEvent.off`](#domevent-off)\r\nexport {off as removeListener};\r\n","import * as Colour from './Colour';\r\nimport MapEnums from '../map/enums';\r\nimport {Rectangle} from '../geometry/rectangle';\r\nimport {RestAPI} from '../api/restapi';\r\nimport { map } from 'rxjs/operators';\r\nimport { MgCanvas } from '../map/canvas';\r\nimport { fakeStop } from '../dom/DomEvent';\r\nexport class HoverText {\r\n constructor(text, fontName, fontSize, fontStyle, expressionColumn) {\r\n this.Text = text != undefined ? text : '';;\r\n this.FontName = fontName != undefined ? fontName : 'Arial';\r\n this.FontSize = fontSize != undefined ? fontSize.replace('pt', 'px') : '12px';\r\n this.FontStyle = fontStyle != undefined ? fontStyle : 'Normal';\r\n this.IsExpression = expressionColumn != null;\r\n this.expressionColumn = expressionColumn;\r\n }\r\n\r\n toCSS()\r\n {\r\n var fontStyle = (this.FontStyle == 'Bold') ? \"font-weight:bold;\" : \"font-weight:normal;\";\r\n\r\n if (this.FontStyle == 'Italic')\r\n fontStyle += \"font-style:italic;\";\r\n \r\n let sFont = `font-family:${this.FontName};font-size:${this.FontSize}px;${fontStyle}`;\r\n return sFont; \r\n }\r\n\r\n toHTML(parent, text) {\r\n let span = document.createElement('span');\r\n span.style.margin = '2px';\r\n span.style.padding = '0px';\r\n span.style.fontFamily = this.FontName;\r\n span.style.fontSize = this.FontSize;\r\n span.style.fontWeight = 'Normal';\r\n \r\n if (this.FontStyle.indexOf('Bold') > -1)\r\n span.style.fontWeight = 'Bold';\r\n if (this.FontStyle.indexOf('Italic') > -1)\r\n span.style.fonStyle = 'Italic';\r\n \r\n span.innerHTML = text;\r\n parent.appendChild(span);\r\n }\r\n}\r\n\r\nexport class HoverParagraph {\r\n constructor(textAlign) {\r\n this.hoverTexts = []; \r\n this.columns = [];\r\n this.textAlign = textAlign != undefined ? textAlign : 'start';\r\n this.width = 0;\r\n }\r\n\r\n addHoverText(hoverText, column) {\r\n this.hoverTexts.push(hoverText);\r\n this.hoverFormat += hoverText.text;\r\n if (column)\r\n this.columns.push(column);\r\n else \r\n this.columns.push(hoverText.Text);\r\n }\r\n\r\n getTextWidth(feature, context) {\r\n var formattedLine = '';\r\n\r\n for(let i = 0; i < this.hoverTexts.length; i++) {\r\n let hoverText = this.hoverTexts[i];\r\n let column = this.columns[i];\r\n var text = column;\r\n if (hoverText.IsExpression) \r\n text = feature.dctValues[column]; \r\n \r\n formattedLine += text; \r\n }\r\n \r\n \r\n if (this.hoverTexts.length > 0)\r\n context.font = `${this.hoverTexts[0].FontStyle} ${this.hoverTexts[0].FontSize}px ${this.hoverTexts[0].FontName}`; \r\n\r\n this.width = context.measureText(formattedLine).width;\r\n return this.width;\r\n }\r\n\r\n render(feature, canvas, context, x, y) {\r\n \r\n for(let i = 0; i < this.hoverTexts.length; i++) {\r\n let hoverText = this.hoverTexts[i];\r\n let column = this.columns[i];\r\n var text = column;\r\n if (hoverText.IsExpression) \r\n text = feature.dctValues[hoverText.expressionColumn]; \r\n \r\n context.fillStyle = '#000000';\r\n\r\n if (hoverText.FontName != undefined && hoverText.FontSize != undefined)\r\n context.font = `${hoverText.FontSize}px ${hoverText.FontName}`; \r\n \r\n let metrics = context.measureText(text); \r\n let width = metrics.width;\r\n \r\n context.textAlign = this.textAlign; \r\n context.fillText(text, x, y);\r\n\r\n if (width > 0)\r\n x = x + width + 2;\r\n }\r\n }\r\n\r\n toHTML(parent, feature) {\r\n \r\n let p = document.createElement('p');\r\n p.style.margin = '0px';\r\n p.style.padding = '0px';\r\n parent.appendChild(p);\r\n\r\n for(let i = 0; i < this.hoverTexts.length; i++) {\r\n let hoverText = this.hoverTexts[i];\r\n \r\n let column = this.columns[i];\r\n var text = column;\r\n if (hoverText.IsExpression) \r\n text = feature.dctValues[hoverText.expressionColumn]; \r\n\r\n hoverText.toHTML(p, text);\r\n }\r\n }\r\n}\r\n\r\nexport class Hover {\r\n // @region Constructors\r\n\r\n constructor(xml, isSimple) {\r\n this.pixelRatio = PIXEL_RATIO;\r\n this.paragraphs = [];\r\n this.columns = [];\r\n this.expressionColumns = [];\r\n this.isSimple = isSimple != undefined ? isSimple : false;\r\n this.parseHoverXml(xml); \r\n }\r\n\r\n get Columns() {\r\n return this.columns;\r\n }\r\n\r\n get ExpressionColumns() {\r\n return this.expressionColumns;\r\n }\r\n parseHoverXml(xml) {\r\n /*\r\n Example:\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n */\r\n if (xml != null && xml.length > 0) {\r\n var xmlDoc = null;\r\n if (window.DOMParser) {\r\n let parser= new window.DOMParser();\r\n xmlDoc=parser.parseFromString(xml,\"text/xml\");\r\n } \r\n else { // Internet Explorer\r\n xmlDoc=new ActiveXObject(\"Microsoft.XMLDOM\");\r\n xmlDoc.async=false;\r\n xmlDoc.loadXML(xml); \r\n }\r\n\r\n var tags = xmlDoc.getElementsByTagName('*'); \r\n var paragraph = null;\r\n\r\n for (var i = 0; i < tags.length; i++) {\r\n let tag = tags[i];\r\n \r\n if (tag.nodeName == 'TextRun' || tag.nodeName == 'EvalTextRun') {\r\n var column = tag.getAttribute(\"Expression\");\r\n var expressionColumn = column;\r\n if (expressionColumn != null)\r\n expressionColumn = expressionColumn.trim();\r\n \r\n let text = tag.nodeName == 'TextRun' ? (tag.childNodes.length > 0 ? tag.childNodes[0].nodeValue : '') : `{${expressionColumn}}`; \r\n let hoverText = new HoverText(text, tag.getAttribute(\"FontName\"), tag.getAttribute(\"FontSize\"), tag.getAttribute(\"FontStyle\"), expressionColumn);\r\n \r\n if (paragraph != null)\r\n paragraph.addHoverText(hoverText, column); \r\n\r\n if (column != undefined && column.length > 0)\r\n this.columns.push(column); \r\n \r\n if (expressionColumn != null && column.length > 0)\r\n this.expressionColumns.push(expressionColumn); \r\n }\r\n else if (tag.nodeName == 'Paragraph') {\r\n paragraph = new HoverParagraph(tag.getAttribute(\"align\"));\r\n this.paragraphs.push(paragraph);\r\n }\r\n else if (tag.nodeName == 'TableCell' || tag.nodeName == 'Frame') {\r\n this.isSimple = false;\r\n }\r\n \r\n }\r\n } \r\n }\r\n \r\n showTooltip(feature, canvas, context, x, y, map) {\r\n context.globalCompositeOperation = 'source-over';\r\n\r\n // why are we drawing stuff other than the tooltip here?\r\n\r\n // let hoverItem = map.hoverItem;\r\n // if (hoverItem != null) {\r\n\r\n /*\r\n let width = hoverItem.Shape.symbol.HoverSymbol.width;\r\n let height = hoverItem.Shape.symbol.HoverSymbol.height;\r\n let sx = x - width;\r\n let sy = y - height;\r\n\r\n console.log(`sx: ${sx} sy: ${sy} width:${width} height:${height}`);\r\n canvas.clearRect(sx, sy, width * 2, height *2 ) \r\n canvas.context.drawImage(canvas.offScreenCanvas, sx, sy, width*2, height*2, sx, sy, width*2, height*2);\r\n */\r\n \r\n // hoverItem.Shape.draw(canvas, 1, context);\r\n // }\r\n\t\t\r\n // if (feature.Shape != null) {\r\n // feature.Shape.drawHover(canvas, 1, context);\r\n // }\r\n\r\n let toolTipDiv = this.createToolTiDiv(map, x, y+20);\r\n\r\n if (this.isSimple) {\r\n for(let i = 0; i < this.paragraphs.length; i++) {\r\n let paragraph = this.paragraphs[i]; \r\n paragraph.toHTML(toolTipDiv, feature); \r\n }\r\n\r\n toolTipDiv.style.visibility = \"visible\";\r\n }\r\n else {\r\n let image = new Image();\r\n\t\t\t\r\n\t\t\timage.addEventListener(\"load\", () => {\r\n let width = image.naturalWidth ;\r\n let height = image.naturalHeight ; \r\n\r\n if (map.canvas.height < (y+height+40)) {\r\n toolTipDiv.style.top = y - height - 40;\r\n }\r\n\r\n if (map.canvas.width < (x+(2* width))) {\r\n toolTipDiv.style.left = x - (2 * width);\r\n }\r\n\r\n toolTipDiv.style.visibility = \"visible\"; \t\t\t\r\n });\r\n let layer = feature.featureLayer;\r\n let taskId = layer.taskId;\r\n if (taskId){\r\n let tokens = taskId.toString().split('-');\r\n if (tokens != null && tokens.length > 1)\r\n taskId = tokens[0];\r\n }\r\n\r\n let encodedXml = encodeURIComponent(layer.options.Hover);\r\n let imageUrl = `${RestAPI.BaseUrl}GetFeatureTooltip?token=${RestAPI.AccessToken}&datasetId=${layer.Dataset}&xmlHover=${encodedXml}&featureId=${feature.Id}`;\r\n image.src = imageUrl; \r\n toolTipDiv.appendChild(image);\r\n } \r\n\r\n map.div.insertBefore(toolTipDiv, map.div.firstChild);\r\n }\r\n\r\n render(feature, canvas, context, x, y, map) {\r\n context.globalCompositeOperation = 'source-over';\r\n \r\n if (feature.Shape != null)\r\n feature.Shape.drawHover(canvas, 1, context);\r\n\r\n if (this.isSimple) {\r\n var longestWidth = -1;\r\n\r\n var emptyParagraphs = 0;\r\n\r\n for(let i = 0; i < this.paragraphs.length; i++) {\r\n let width = this.paragraphs[i].getTextWidth(feature, context);\r\n longestWidth = Math.max(longestWidth, width); \r\n\r\n if (width <= 0)\r\n emptyParagraphs++;\r\n }\r\n \r\n let offset = 4;\r\n let height = 24 * (this.paragraphs.length - emptyParagraphs) + offset;\r\n\r\n let rect = new Rectangle(x + offset, y + (offset*2), longestWidth + 40, height); \r\n canvas.drawRoundRectangle(rect.left, rect.top, rect.width, rect.height, 5, '#000000', '#ffffed', context)\r\n \r\n y = rect.top + 16;\r\n for(let i = 0; i < this.paragraphs.length; i++) {\r\n let paragraph = this.paragraphs[i]; \r\n if (paragraph.width > 0) { \r\n paragraph.render(feature, canvas, context, rect.left+offset, y);\r\n y += 24;\r\n }\r\n }\r\n }\r\n else {\r\n let image = new Image();\r\n\t\t\t\r\n\t\t\timage.addEventListener(\"load\", () => {\r\n let width = image.naturalWidth ;\r\n let height = image.naturalHeight ;\r\n\r\n canvas.drawRoundRectangle(x-2, y-2, width+4, height + 4, 5, '#000000', '#ffffed', context)\t\t\t; \r\n\t\t\t\tcanvas.context.drawImage(image, x + 2, y + 2);\t\t\t\t\r\n\t\t\t\r\n });\r\n let layer = feature.featureLayer;\r\n let encodedXml = encodeURIComponent(layer.options.Hover);\r\n\r\n let imageUrl = `${RestAPI.BaseUrl}GetFeatureTooltip?token=${RestAPI.AccessToken}&taskId=${layer.taskId}&datasetId=${layer.Dataset}&xmlHover=${encodedXml}&featureId=${feature.Id}`;\r\n\t\t\timage.src = imageUrl;\r\n } \r\n }\r\n \r\n createToolTiDiv(map, x, y) {\r\n\r\n if (map.toolTipDiv != null) {\r\n map.toolTipDiv.parentNode.removeChild(map.toolTipDiv);\r\n }\r\n \r\n var toolTipDiv = document.createElement('div');\r\n toolTipDiv.style.margin = '2px';\r\n toolTipDiv.style.padding = '2px';\r\n toolTipDiv.style.backgroundColor = '#ffffed';\r\n toolTipDiv.style.border = '1px solid grey';\r\n toolTipDiv.style.borderRadius = '5px';\r\n toolTipDiv.style.position = 'absolute';\r\n toolTipDiv.style.left = x + 'px';\r\n toolTipDiv.style.top = y + 'px';\r\n toolTipDiv.style.zIndex = 1000;\r\n toolTipDiv.style.outlineStyle = 'none';\r\n\r\n toolTipDiv.style.webkitUserSelect = 'none'; /* Safari */\r\n toolTipDiv.style.msUserSelect = 'none'; /* IE 10+ and Edge */\r\n toolTipDiv.style.userSelect = 'none'; /* Standard syntax */\r\n\r\n toolTipDiv.style.visibility = \"hidden\";\r\n toolTipDiv.oncontextmenu = function(e) {e.preventDefault();}\r\n\r\n map.toolTipDiv = toolTipDiv; \r\n \r\n return toolTipDiv;\r\n }\r\n}\r\n\r\nexport let PIXEL_RATIO = (function () {\r\n var ctx = document.createElement(\"canvas\").getContext(\"2d\"),\r\n dpr = window.devicePixelRatio || 1,\r\n bsr = ctx.webkitBackingStorePixelRatio ||\r\n ctx.mozBackingStorePixelRatio ||\r\n ctx.msBackingStorePixelRatio ||\r\n ctx.oBackingStorePixelRatio ||\r\n ctx.backingStorePixelRatio || 1;\r\n\r\n return dpr / bsr;\r\n})();\r\n\r\n\r\n","import {Point, toPoint} from '../geometry/Point';\r\nimport {Envelope} from '../geometry/Envelope';\r\nimport {Viewport, Symbol, Fill, Stroke, Label} from '../drawing/index';\r\nimport MapEnums from '../map/enums';\r\n\r\nexport class MarkupPoint {\r\n constructor(clientPoint, worldCoordinate, isStartPoint, colour)\r\n {\r\n this.ClientPoint = clientPoint;\r\n this.WorldCoordinate = worldCoordinate;\r\n this.IsStartPoint = isStartPoint;\r\n this.Colour = colour;\r\n } \r\n}\r\n\r\nexport class Markup {\r\n constructor(map, editor, id = -1) {\r\n this.map = map;\r\n this.editor = editor;\r\n this.canvas = map.canvas;\r\n this.context = map.canvas.context;\r\n this.linePoints = [];\r\n this.isGeometryComplete = false;\r\n this.selectedForEditing = false;\r\n this.selected = false;\r\n this.id = id == -1 || id == undefined ? new Date().getTime() : id;\r\n this.geometryType = MapEnums.GeometryTypes.NONE;\r\n this.isHovered = false;\r\n this.insertionPoint = null;\r\n }\r\n \r\n //#region -- Virtual Functions\r\n isStartPoint(point) {\r\n\r\n }\r\n\r\n isLastPoint(point) {\r\n\r\n }\r\n\r\n isPointOnLine(point) {\r\n let indexToInsertAt = -1;\r\n \r\n for (var i = 0; i < this.linePoints.length-1; i++) {\r\n let start = this.linePoints[i].ClientPoint;\r\n let end = this.linePoints[i+1].ClientPoint;\r\n\r\n if (this.isPointOnSegment(point, start, end)) {\r\n indexToInsertAt = i+1;\r\n break;\r\n }\r\n } \r\n\r\n return indexToInsertAt;\r\n }\r\n\r\n getExistingPoint(clientPoint) { \r\n var foundPoint = null;\r\n var i = -1;\r\n for ( i = 0; i < this.linePoints.length; i++) {\r\n let point = this.linePoints[i];\r\n \r\n var existingPoint = this.editor.viewport.worldToClient(point.WorldCoordinate.X, point.WorldCoordinate.Y);\r\n let distance = existingPoint.distanceTo(clientPoint); \r\n\r\n // we use the radius of the linePoint (circle) drawn as a way\r\n // to detect if the clientPoint in inside that circle.\r\n // if distance of clientPoint to linePoint is less than or equal to the radius, then the point is inside.\r\n if ( distance <= (Markup.Radius+4)) {\r\n foundPoint = point;\r\n break; \r\n }\r\n }\r\n\r\n //if (foundPoint == null && this.activeMarkup != null) \r\n // return this.activeMarkup.isPointOnLine(clientPoint);\r\n \r\n return {\"point\":foundPoint, \"index\": i};\r\n }\r\n\r\n handleMouseClick(x, y) {\r\n }\r\n\r\n handleMouseMove(x, y) { \r\n if (!this.selectedForEditing && this.hitTest(x, y)) {\r\n // this.isHovered = true;\r\n return true; \r\n }\r\n\r\n return false;\r\n }\r\n\r\n handleMouseDoubleClick(x, y) {\r\n }\r\n\r\n render(context) {\r\n \r\n }\r\n\r\n clear() {\r\n\r\n }\r\n\r\n delete() {\r\n \r\n }\r\n\r\n withinBounds(topLeftPoint, bottomRightPoint) {\r\n \r\n if (this.linePoints.length > 0) {\r\n let markupBounds = this.calculateBounds(this.linePoints); \r\n let worldTopLeft = this.editor.viewport.pointToWorldCoordinate(topLeftPoint);\r\n let worldBottomRight = this.editor.viewport.pointToWorldCoordinate(bottomRightPoint);\r\n let selectionWorldBounds = new Envelope(worldTopLeft.X, worldBottomRight.X, worldTopLeft.Y, worldBottomRight.Y);\t\t\t\t\t \r\n return markupBounds.intersects(selectionWorldBounds); \r\n }\r\n }\r\n\r\n\r\n toWKT(addTag) {\r\n return \"\";\r\n }\r\n //#endregion - Virtual Functions\r\n\r\n //#region - Common Functions \r\n get isEmpty() {\r\n return this.linePoints.length <= 0 ? true : false; \r\n }\r\n\r\n get Points() {\r\n let pts = [];\r\n for (let i = 0; i < this.linePoints.length; i++) {\r\n let current = this.linePoints[i];\r\n pts.push(this.editor.viewport.worldToClient(current.WorldCoordinate.X, current.WorldCoordinate.Y)); \r\n }\r\n\r\n return pts;\r\n }\r\n\r\n\r\n getLastPoint() {\r\n if (this.linePoints.length > 0)\r\n return this.linePoints[this.linePoints.length-1];\r\n \r\n return null;\r\n }\r\n\r\n addPoint(clientPoint) { \r\n var worldCoordinate = this.editor.viewport.pointToWorldCoordinate(clientPoint);\r\n\r\n let newPoint = new MarkupPoint(clientPoint, worldCoordinate, this.linePoints.length == 0, 'blue')\r\n this.linePoints.push(newPoint);\r\n\r\n return newPoint;\r\n \r\n }\r\n\r\n insertPoint(clientPoint, indexToInsertAt) { \r\n if (indexToInsertAt - 1 >= 0)\r\n {\r\n var worldPoint = this.editor.viewport.pointToWorldCoordinate(clientPoint); \r\n this.linePoints.splice(indexToInsertAt, 0, new MarkupPoint(clientPoint, worldPoint, false, 'blue')); \r\n } \r\n }\r\n\r\n addWorldCoordinate(worldCoordinate) { \r\n var clientPoint = this.editor.viewport.worldToClient(worldCoordinate.X, worldCoordinate.Y);\r\n\r\n let newPoint = new MarkupPoint(clientPoint, worldCoordinate, this.linePoints.length == 0, 'blue')\r\n this.linePoints.push(newPoint);\r\n\r\n return newPoint; \r\n }\r\n\r\n removePoint(worldCoordinate) { \r\n // find original point \r\n var index = this.linePoints.findIndex( x => x.WorldCoordinate.equals(worldCoordinate));\r\n\r\n if (index > -1)\r\n this.linePoints.splice(index, 1);\r\n\r\n // if it was a closed polygon and now it's not anymore then remove the last point (which is the same as the starting point)\r\n if (this.linePoints.length > 1 && this.linePoints.length < 4 && this.linePoints[this.linePoints.length - 1].WorldCoordinate.equals(this.linePoints[0].WorldCoordinate))\r\n this.linePoints.splice(this.linePoints.length - 1, 1);\r\n }\r\n \r\n distance(p1, p2) {\r\n //let a = p1.x - p2.x;\r\n //let b = p1.y - p2.y;\r\n //return Math.sqrt( a*a + b*b );\r\n return Math.hypot(p2.x - p1.x, p2.y - p1.y);\r\n }\r\n\r\n isPointOnSegment(point, A, B) {\r\n let d1 = this.distance(point, A);\r\n let d2 = this.distance(point, B);\r\n let lineDistance = this.distance(A, B);\r\n let buffer = 2; // 2 pixels\r\n\r\n if ( d1+d2 >= lineDistance-buffer && d1+d2 <= lineDistance+buffer )\r\n return true; // point is on the line.\r\n\r\n return false;\r\n }\r\n\r\n calculateBounds(pts) {\r\n var rcBounds;\r\n \r\n if (pts != null && pts.length > 0) { \r\n var top = pts[0].WorldCoordinate.Y;\r\n var left = pts[0].WorldCoordinate.X;\r\n var right = left;\r\n var bottom = top;\r\n\r\n for (let index = 1; index < pts.length; index++) {\r\n let pt = pts[index];\r\n\r\n if (pt.WorldCoordinate.X < left)\r\n left = pt.WorldCoordinate.X;\r\n else if (pt.WorldCoordinate.X > right)\r\n right = pt.WorldCoordinate.X;\r\n\r\n if (pt.WorldCoordinate.Y < top)\r\n top = pt.WorldCoordinate.Y;\r\n else if (pt.WorldCoordinate.Y > bottom)\r\n bottom = pt.WorldCoordinate.Y;\r\n }\r\n \r\n rcBounds = new Envelope( left, right, top, bottom); \r\n }\r\n else\r\n rcBounds = new Envelope();\r\n\r\n return rcBounds;\r\n }\r\n\r\n onDisplayPrompt(promptType) { \r\n\r\n if (this.map.cbDisplayPrompt) {\r\n let message = {\r\n prompt: promptType, \r\n }\r\n \r\n this.map.cbDisplayPrompt(message);\r\n }\r\n }\r\n\r\n // Mouse Events and Handlers\r\n hitTest(x, y) {\r\n let testPoint = new Point(x,y);\r\n let tuple = this.getExistingPoint(testPoint);\r\n\r\n if (tuple.point == null) {\r\n for (var i = 0; i < this.linePoints.length-1; i++) {\r\n let start = this.linePoints[i].ClientPoint; \r\n let end = this.linePoints[i+1].ClientPoint;\r\n\r\n if (this.isPointOnSegment(testPoint, start, end))\r\n return true;\r\n }\r\n } \r\n else {\r\n return true;\r\n }\r\n\r\n return false;\r\n } \r\n \r\n //#endregion\r\n}\r\n\r\nMarkup.Radius = 4;\r\nMarkup.RadiusOfEarthInMetres = 6378137;","import {Markup, MarkupPoint} from './markup';\r\nimport {toBounds} from '../geometry/Bounds';\r\nimport MapEnums from '../map/enums';\r\n\r\nexport class PointMarkup extends Markup {\r\n constructor(map, viewport, id) {\r\n super(map, viewport, id);\r\n this.geometryType = MapEnums.GeometryTypes.POINT;\r\n }\r\n\r\n //#region -- VIRTUAL FUNCTIONS\r\n render(context) {\r\n if (!this.isEmpty) {\r\n let current = this.linePoints[0];\r\n current.ClientPoint = this.editor.viewport.worldToClient(current.WorldCoordinate.X, current.WorldCoordinate.Y);\r\n\r\n if (!this.selectedForEditing)\r\n this.editor.renderPoint(current.ClientPoint, context, this.isHovered, this.selected) \r\n else \r\n this.editor.drawPoint(current.ClientPoint, false, context); \r\n }\r\n }\r\n\r\n isStartPoint(point) {\r\n return true;\r\n }\r\n\r\n isLastPoint(point) {\r\n return true;\r\n }\r\n\r\n isPointOnLine(point) {\r\n return -1\r\n }\r\n\r\n handleMouseClick(x, y) {\r\n if (this.isEmpty) {\r\n let pt = new Point(x, y);\r\n this.addPoint(pt); \r\n }\r\n \r\n this.isGeometryComplete = true;\r\n }\r\n \r\n handleMouseDoubleClick(x, y) {\r\n if (this.isEmpty) {\r\n let pt = new Point(x, y);\r\n this.addPoint(pt); \r\n this.isGeometryComplete = true;\r\n }\r\n }\r\n\r\n clear() {\r\n\r\n }\r\n\r\n delete() {\r\n \r\n }\r\n\r\n toWKT(addTag) {\r\n if (this.linePoints.length > 0) {\r\n let coordinate = this.linePoints[0].WorldCoordinate;\r\n return addTag ? `POINT (${coordinate.X} ${coordinate.Y})` : `(${coordinate.X} ${coordinate.Y})`; \r\n }\r\n return \"\";\r\n }\r\n\r\n //#endregion - VIRTUAL FUNCTIONS \r\n\r\n addPoint(clientPoint) { \r\n var worldCoordinate = this.editor.viewport.pointToWorldCoordinate(clientPoint);\r\n\r\n let newPoint = new MarkupPoint(clientPoint, worldCoordinate, false, 'black')\r\n this.linePoints.push(newPoint);\r\n\r\n return newPoint; \r\n }\r\n \r\n withinBounds(topLeftPoint, bottomRightPoint) {\r\n let bounds = toBounds(topLeftPoint, bottomRightPoint); \r\n if (this.linePoints.length > 0) \r\n return bounds.contains(this.linePoints[0].ClientPoint); \r\n }\r\n}","import {Markup} from './markup';\r\nimport MapEnums from '../map/enums';\r\n\r\nexport class LineMarkup extends Markup {\r\n constructor(map, viewport, id) {\r\n super(map, viewport, id);\r\n this.geometryType = MapEnums.GeometryTypes.LINESTRING;\r\n }\r\n\r\n //#region -- VIRTUAL FUNCTIONS\r\n isStartPoint(point) {\r\n return true;\r\n }\r\n\r\n isLastPoint(point) {\r\n return true;\r\n }\r\n\r\n handleMouseClick(x, y) {\r\n let pt = new Point(x, y);\r\n let tuple = this.getExistingPoint(pt);\r\n \r\n let existingPoint = tuple.point;\r\n \r\n if (existingPoint == null) {\r\n let indexToInsert = this.isPointOnLine(pt);\r\n if (indexToInsert > -1) {\r\n this.insertPoint(pt, indexToInsert);\r\n }\r\n else\r\n this.addPoint(pt); \r\n } \r\n else {\r\n if (this.linePoints.length <= 2)\r\n this.onDisplayPrompt(MapEnums.PromptTypes.MINIMUM_REQUIRED_POINTS_LINESTRING); \r\n else \r\n this.removePoint(existingPoint.WorldCoordinate); \r\n }\r\n }\r\n\r\n handleMouseDoubleClick(x, y) {\r\n let pt = new Point(x, y);\r\n let tuple = this.getExistingPoint(pt);\r\n \r\n let existingPoint = tuple.point;\r\n \r\n if (existingPoint == null) {\r\n let indexToInsert = this.isPointOnLine(pt);\r\n if (indexToInsert > -1) {\r\n this.insertPoint(pt, indexToInsert);\r\n }\r\n else\r\n this.addPoint(pt); \r\n } \r\n \r\n if (this.linePoints.length >= 1)\r\n this.isGeometryComplete = true;\r\n }\r\n\r\n render(context) {\r\n if (!this.selectedForEditing) {\r\n this.editor.renderLine(this.Points, context, this.isHovered, this.selected);\r\n }\r\n else {\r\n var lastPoint = null;\r\n\r\n for (let i = 0; i < this.linePoints.length; i++) {\r\n let current = this.linePoints[i];\r\n\r\n current.ClientPoint = this.editor.viewport.worldToClient(current.WorldCoordinate.X, current.WorldCoordinate.Y);\r\n\r\n if (current.IsStartPoint) { \r\n this.editor.drawPoint(current.ClientPoint, false, context);\r\n }\r\n else if (lastPoint != null) { \r\n let stroke = this.editor.contextLayer != null && this.editor.contextLayer.LineStyle != null ? this.editor.contextLayer.LineStyle.selectedStroke : null; \r\n this.editor.drawLine(current.ClientPoint, lastPoint.ClientPoint, context, stroke); \r\n this.editor.drawPoint(current.ClientPoint, false, context); \r\n } \r\n\r\n lastPoint = current;\r\n }\r\n\r\n if (this.insertionPoint) { \r\n this.editor.drawPoint(new Point(this.insertionPoint.x, this.insertionPoint.y), false, context); \r\n this.insertionPoint = null;\r\n }\r\n }\r\n }\r\n\r\n clear() {\r\n\r\n }\r\n\r\n delete() {\r\n \r\n }\r\n\r\n toWKT(addTag) {\r\n if (this.isGeometryComplete) {\r\n var sWKT = addTag ? 'LINESTRING(' : '(';\r\n\r\n for (let i = 0; i < this.linePoints.length; i++) {\r\n let coordinate = this.linePoints[i].WorldCoordinate;\r\n if (i > 0)\r\n sWKT += ', ';\r\n\r\n sWKT += `${coordinate.X} ${coordinate.Y}`; \r\n }\r\n\r\n sWKT += ')';\r\n return sWKT;\r\n }\r\n\r\n return \"\"; \r\n }\r\n\r\n //#endregion - VIRTUAL FUNCTIONS \r\n}","import {Markup, MarkupPoint} from './markup';\r\nimport MapEnums from '../map/enums';\r\nexport class PolygonMarkup extends Markup {\r\n constructor(map, viewport, id) {\r\n super(map, viewport, id);\r\n this.geometryType = MapEnums.GeometryTypes.POLYGON;\r\n }\r\n\r\n //#region -- VIRTUAL FUNCTIONS\r\n isStartPoint(point) {\r\n return true;\r\n }\r\n\r\n isLastPoint(point) {\r\n return true;\r\n }\r\n\r\n // Mouse Events and Handlers\r\n hitTest(x, y) {\r\n if (!super.hitTest(x,y) && !this.isEmpty) {\r\n let clientPoint = new Point(x, y);\r\n let coordinate = this.editor.viewport.pointToWorldCoordinate(clientPoint);\r\n let bounds = this.calculateBounds(this.linePoints);\r\n if (bounds != null && bounds.contains(coordinate)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n \r\n return true;\r\n } \r\n\r\n handleMouseMove(x, y) {\r\n if (!this.selectedForEditing && this.hitTest(x, y)) {\r\n this.isHovered = true;\r\n return true; \r\n }\r\n\r\n return false;\r\n }\r\n\r\n handleMouseClick(x, y) {\r\n let pt = new Point(x, y);\r\n let tuple = this.getExistingPoint(pt);\r\n \r\n let existingPoint = tuple.point;\r\n \r\n if (existingPoint == null) {\r\n let indexToInsert = this.isPointOnLine(pt);\r\n if (indexToInsert > -1) {\r\n this.insertPoint(pt, indexToInsert);\r\n }\r\n else\r\n this.addPoint(pt); \r\n } \r\n else {\r\n if (existingPoint.IsStartPoint) {\r\n this.linePoints.push(new MarkupPoint(existingPoint.ClientPoint, existingPoint.WorldCoordinate, false, 'blue'));\r\n this.isGeometryComplete = true;\r\n }\r\n else { \r\n if ((this.linePoints.length <= 3))\r\n this.onDisplayPrompt(MapEnums.PromptTypes.MINIMUM_REQUIRED_POINTS_POLYGON); \r\n else\r\n this.removePoint(existingPoint.WorldCoordinate);\r\n }\r\n }\r\n }\r\n\r\n handleMouseDoubleClick(x, y) {\r\n let pt = new Point(x, y);\r\n let tuple = this.getExistingPoint(pt);\r\n \r\n let existingPoint = tuple.point;\r\n \r\n if (existingPoint == null) {\r\n let firstPoint = this.linePoints.length > 0 ? this.linePoints[0] : null;\r\n\r\n this.addPoint(pt); \r\n \r\n if (this.linePoints.length >= 3) {\r\n this.linePoints.push(new MarkupPoint(firstPoint.ClientPoint, firstPoint.WorldCoordinate, false, 'blue'));\r\n this.isGeometryComplete = true;\r\n }\r\n } \r\n else {\r\n if (existingPoint.IsStartPoint && this.linePoints.length >= 3) {\r\n this.linePoints.push(new MarkupPoint(existingPoint.ClientPoint, existingPoint.WorldCoordinate, false, 'blue'));\r\n this.isGeometryComplete = true;\r\n } \r\n }\r\n }\r\n\r\n render(context) {\r\n if (!this.selectedForEditing) {\r\n this.editor.renderPolygon(this.Points, context, this.isHovered, this.selected);\r\n }\r\n else {\r\n var lastPoint = null;\r\n for (let i = 0; i < this.linePoints.length; i++) {\r\n let current = this.linePoints[i];\r\n\r\n current.ClientPoint = this.editor.viewport.worldToClient(current.WorldCoordinate.X, current.WorldCoordinate.Y);\r\n\r\n if (current.IsStartPoint) { \r\n this.editor.drawPoint(current.ClientPoint, true, context);\r\n }\r\n else if (lastPoint != null) { \r\n let stroke = this.editor.contextLayer != null && this.editor.contextLayer.PolygonStyle != null \r\n && this.editor.contextLayer.PolygonStyle.Stroke != null ? this.editor.contextLayer.PolygonStyle.Stroke.selectedStroke : null; \r\n this.editor.drawLine(current.ClientPoint, lastPoint.ClientPoint, context, stroke); \r\n this.editor.drawPoint(current.ClientPoint, false, context); \r\n } \r\n\r\n lastPoint = current;\r\n }\r\n \r\n if (this.insertionPoint) { \r\n this.editor.drawPoint(new Point(this.insertionPoint.x, this.insertionPoint.y), false, context); \r\n this.insertionPoint = null;\r\n }\r\n }\r\n }\r\n\r\n clear() {\r\n\r\n }\r\n\r\n delete() {\r\n \r\n }\r\n\r\n toWKT(addTag) {\r\n if (this.isGeometryComplete) {\r\n var sWKT = addTag ? 'POLYGON((' : '((';\r\n\r\n for (let i = 0; i < this.linePoints.length; i++) {\r\n let coordinate = this.linePoints[i].WorldCoordinate;\r\n if (i > 0)\r\n sWKT += ', ';\r\n\r\n sWKT += `${coordinate.X} ${coordinate.Y}`; \r\n }\r\n\r\n sWKT += '))';\r\n return sWKT;\r\n }\r\n\r\n return \"\"; \r\n } \r\n\r\n //#endregion - VIRTUAL FUNCTIONS \r\n}","import {Rectangle} from '../geometry/rectangle';\r\nimport { Stroke, Fill} from '../drawing/index';\r\nimport MapEnums from '../map/enums';\r\nimport{Point, toPoint} from '../geometry/Point';\r\nexport class MgCanvas {\r\n\r\n //#region -- CONSTRUCTORS\r\n constructor(canvas,div, map) { \r\n this._canvas = canvas;\r\n this._div = div;\r\n this._map = map;\r\n\r\n this._ctx = canvas.getContext(\"2d\"); \r\n \r\n this._offScreenCanvas = MgCanvas.createHiDPICanvas(this._canvas.width, this._canvas.height, 1);\r\n this._offScreenCtx = this._offScreenCanvas.getContext(\"2d\"); \r\n this._offScreenCtx.globalCompositeOperation = 'source-atop';\r\n\r\n this._selectionCanvas = MgCanvas.createHiDPICanvas(this._canvas.width, this._canvas.height, 1);\r\n this._selectionCtx = this._selectionCanvas.getContext(\"2d\"); \r\n \r\n this.xOffset = undefined;\r\n this.yOffset = undefined;\r\n\r\n this._global = {\r\n scale\t: 1,\r\n offset\t: {\r\n x : 0,\r\n y : 0,\r\n },\r\n };\r\n\r\n this._pan = {\r\n start : {\r\n x : null,\r\n y : null,\r\n },\r\n offset : {\r\n x : 0,\r\n y : 0,\r\n },\r\n };\r\n\r\n this.isPanning = false;\r\n\r\n let hoverStyle = { Type: 'Solid', Colour: 'blue', Width : 2 };\r\n let selectedStrokeStyle = { Type: 'DashStyle', DashStyle: 'Dash', Colour: 'black', Width : 1 };\r\n let selectedFillStyle = { Type: 'Solid', Colour: 'grey', Width : 1 };\r\n let transparentFillStyle = { Type: 'Solid', Colour: 'rgba(255,255,255,0.1)', Width : 1 };\r\n\r\n this.hoverStroke = new Stroke(hoverStyle);\r\n this.selectedStroke = new Stroke(selectedStrokeStyle);\r\n this.selectedFill = new Fill(selectedFillStyle);\r\n this.transparentFill = new Fill(transparentFillStyle);\r\n } \r\n //#endregion\r\n\r\n //#region -- GETTERS and SETTERS\r\n /** @returns MgCanvas\r\n */\r\n get canvas() {\r\n return this._canvas;\r\n }\r\n\r\n get offScreenCanvas() {\r\n return this._offScreenCanvas;\r\n }\r\n\r\n get context() {\r\n return this._ctx;\r\n }\r\n\r\n get offScreenContext() {\r\n return this._offScreenCtx;\r\n }\r\n\r\n get selectionContext() {\r\n return this._selectionCtx;\r\n }\r\n\r\n /** \r\n * @returns div\r\n */\r\n get div() {\r\n return this._div;\r\n }\r\n /** \r\n * @returns number\r\n */\r\n get width() { \r\n return this._canvas.width;\r\n }\r\n /**\r\n * @returns number\r\n */\r\n get height() { \r\n return this._canvas.height;\r\n } \r\n\r\n get pan() {\r\n return this._pan;\r\n }\r\n\r\n get global() {\r\n return this._global;\r\n }\r\n //#endregion \r\n\r\n //#region -- DRAW METHODS\r\n \r\n /**\r\n * @param {Image} image\r\n * @param {number} x\r\n * @param {number} y\r\n */\r\n drawImage(image, x, y, ctxParam, alpha) { \r\n if(image) { \r\n let ctx = ctxParam != undefined ? ctxParam : this._ctx;\r\n let prevAlpha = ctx.globalAlpha;\r\n ctx.globalAlpha = alpha != undefined ? alpha : 1.0;\r\n ctx.drawImage(image, x, y); \r\n ctx.globalAlpha = prevAlpha; \r\n } \r\n } \r\n\r\n drawSymbol(image, x, y, ctxParam) { \r\n if(image) { \r\n let ctx = ctxParam != undefined ? ctxParam : this._offScreenCtx;\r\n ctx.drawImage(image, x, y, image.width, image.height); \r\n } \r\n }\r\n \r\n drawShapeSymbol(symbol, x, y, ctxParam) { \r\n let ctx = ctxParam != undefined ? ctxParam : this._ctx;\r\n let fillColour = symbol.SymbolType == MapEnums.SymbolTypes.SolidShape ? symbol.Colour : undefined;\r\n let lineWidth = symbol.SymbolType == MapEnums.SymbolTypes.SolidShape ? 1 : 2;\r\n\r\n switch(symbol.ShapeType) {\r\n case MapEnums.Shapes.Circle:\r\n this.drawCircleShape(ctx, x, y, symbol.Height/2, lineWidth, symbol.Colour, fillColour);\r\n break;\r\n\r\n case MapEnums.Shapes.Square:\r\n this.drawSquareShape(ctx, x, y, symbol.Height, lineWidth, symbol.Colour, fillColour, 5);\r\n break;\r\n\r\n case MapEnums.Shapes.Star:\r\n this.drawStarShape(ctx, x, y, symbol.Height, lineWidth, symbol.Colour, fillColour, 5);\r\n break;\r\n \r\n case MapEnums.Shapes.Diamond:\r\n this.drawDiamondShape(ctx, x, y, symbol.Height, lineWidth, symbol.Colour, fillColour);\r\n break; \r\n \r\n\r\n case MapEnums.Shapes.TriangleUp:\r\n this.drawTriangleShape(ctx, x, y, symbol.Height, lineWidth, symbol.Colour, fillColour, true);\r\n break;\r\n\r\n case MapEnums.Shapes.TriangleDown:\r\n this.drawTriangleShape(ctx, x, y, symbol.Height, lineWidth, symbol.Colour, fillColour, false); \r\n break;\r\n\r\n case MapEnums.Shapes.Marker:\r\n case MapEnums.Shapes.Pin: \r\n this.drawImage(symbol.Pattern, x-symbol.Height/2, y-symbol.Height, ctxParam);\r\n break; \r\n } \r\n }\r\n /**\r\n * @param {string} text\r\n * @param {number} x\r\n * @param {number} y\r\n * @param {number} angle\r\n */\r\n drawText(text, x, y, angle, labelStyle, textAlign, ctxParam) {\r\n let ctx = ctxParam != undefined ? ctxParam : this._offScreenCtx;\r\n ctx.save();\r\n\r\n ctx.globalAlpha = 1.0;\r\n if (angle != undefined) {\r\n ctx.translate(x, y);\r\n ctx.rotate(angle * (Math.PI / 180));\r\n }\r\n \r\n if (labelStyle.FontName === undefined || labelStyle.FontSize === undefined)\r\n ctx.font = \"10px Arial\";\r\n else\r\n ctx.font = `${labelStyle.FontSize}px ${labelStyle.FontName}`; \r\n \r\n if (angle != undefined) {\r\n ctx.textAlign = textAlign != null ? textAlign : \"center\"; \r\n if (labelStyle.highlight) this.highlightText(ctx, text, 0, 0, labelStyle.highlight);\r\n ctx.fillStyle = labelStyle.Colour;\r\n ctx.fillText(text, 0, 0);\r\n }\r\n else { \r\n ctx.textAlign = textAlign != null ? textAlign : \"start\"; \r\n if (labelStyle.highlight) this.highlightText(ctx, text, x, y, labelStyle.highlight);\r\n ctx.fillStyle = labelStyle.Colour;\r\n ctx.fillText(text, x, y); \r\n \r\n } \r\n\r\n ctx.restore();\r\n }\r\n\r\n highlightText(ctx, text, x, y, highlightColour){\r\n ctx.fillStyle = highlightColour;\r\n\r\n ctx.fillText(text, x-1, y);\r\n ctx.fillText(text, x, y-1);\r\n ctx.fillText(text, x+1, y);\r\n ctx.fillText(text, x, y+1);\r\n\r\n ctx.fillText(text, x-1, y-1);\r\n ctx.fillText(text, x+1, y-1);\r\n ctx.fillText(text, x+1, y+1);\r\n ctx.fillText(text, x-1, y+1);\r\n }\r\n \r\n angleToRadians(angle) {\r\n return (Math.PI / 180) * angle;\r\n }\r\n\r\n drawTextOverLineSegment(strokeColor, fontSize, text, p1, p2, textAboveSegment, ctxParam) { \r\n let ctx = ctxParam != undefined ? ctxParam : this._offScreenCtx;\r\n ctx.save();\r\n\r\n // get the segment's angle\r\n let dx = p2.x - p1.x;\r\n let dy = p2.y - p1.y;\r\n let angle = (180 * Math.atan2(dy, dx) / Math.PI);\r\n\r\n // find the center point\r\n let centreX = (p2.x + p1.x) / 2;\r\n let centreY = (p2.y + p1.y) / 2;\r\n\r\n // if we're going from right to left (dx is negative) then rotate 180 so the text is the right way up (otherwise upside down)\r\n if (dx < 0)\r\n angle += 180;\r\n\r\n // translate and rotate the origin to the centre of the segment\r\n ctx.fillStyle = strokeColor != undefined ? strokeColor : 'black';\r\n if (angle > 0) {\r\n ctx.translate(centreX, centreY);\r\n ctx.rotate(angle * (Math.PI / 180));\r\n }\r\n ctx.textAlign = \"center\"; \r\n\r\n \r\n if (fontSize === undefined)\r\n ctx.font = \"10px Arial\";\r\n else\r\n ctx.font = `${fontSize}px Arial`; \r\n\r\n let size = ctx.measureText(text);\r\n let textHeight = 16;\r\n // make a rectangle to contain the text\r\n let y = 0;\r\n if (textAboveSegment)\r\n y = -textHeight;\r\n\r\n let rect = new Rectangle(-size.width / 2, y, size.width, textHeight);\r\n\r\n if (angle > 0)\r\n ctx.fillText(text, 0, -4);\r\n else\r\n ctx.fillText(text, centreX, centreY);\r\n ctx.restore(); \r\n }\r\n\r\n /**\r\n * @param {MgPoint} point\r\n * @param {string} color\r\n */\r\n drawPoint(point, color) {\r\n \r\n this.clearStyles();\r\n\r\n if(color) {\r\n this._ctx.fillStyle = color;\r\n } \r\n \r\n this._ctx.fillRect(point.x, point.y, 5, 5);\r\n }\r\n \r\n /**\r\n * @param {MgPoint[]} points \r\n * @param {string} color\r\n */\r\n drawSolidLine(points, strokeColor, strokeWidth, dashStyle, opacity, ctx) {\r\n ctx.setLineDash(dashStyle);\r\n\r\n ctx.strokeStyle = strokeColor;\r\n ctx.globalAlpha = opacity;\r\n ctx.lineWidth = strokeWidth;\r\n \r\n ctx.beginPath(); \r\n let firstPoint = points[0];\r\n let nLastPoint = points.length;\r\n \r\n ctx.moveTo(firstPoint.x, firstPoint.y);\r\n for(let i = 1; i < nLastPoint; i++) {\r\n ctx.lineTo(points[i].x, points[i].y);\r\n } \r\n\r\n ctx.stroke(); \r\n }\r\n\r\n drawPatternLine(points, pattern, opacity, ctx) {\r\n ctx.strokeStyle = ctx.createPattern(pattern, 'repeat');\r\n ctx.globalAlpha = opacity;\r\n \r\n ctx.beginPath(); \r\n let firstPoint = points[0];\r\n let nLastPoint = points.length;\r\n\r\n ctx.moveTo(firstPoint.x, firstPoint.y);\r\n for(let i = 1; i < nLastPoint; i++) {\r\n ctx.lineTo(points[i].x, points[i].y);\r\n } \r\n\r\n ctx.stroke(); \r\n }\r\n\r\n drawLine(points, stroke, opacity, ctxParam) {\r\n let ctx = ctxParam != undefined ? ctxParam : this._offScreenCtx;\r\n\r\n if (stroke.StrokeType == MapEnums.StrokeTypes.Pattern) {\r\n this.drawPatternLine(points, stroke.Pattern, opacity, ctx)\r\n }\r\n else if (stroke.StrokeType != MapEnums.StrokeTypes.None) {\r\n if (points != null && points.length > 0)\r\n this.drawSolidLine(points, stroke.Colour, stroke.Width, stroke.DashPattern, opacity, ctx);\r\n } \r\n }\r\n\r\n /**\r\n * @param {MgPoints[]} points\r\n * @param {string} strokeColor //ex. rgba(0,0,0.0.5) or \"yellow\"\r\n * @param {string} fillColor\r\n */\r\n drawPolygon(points, stroke, fill, opacity, ctxParam, isHole) {\r\n\r\n if(points != null && points.length > 3 && points[0].x == points[points.length-1].x) {\r\n let ctx = ctxParam != undefined ? ctxParam : this._offScreenCtx;\r\n // Create region\r\n // Expiremental, not supported in IE\r\n /* \r\n let region = new Path2D();\r\n region.moveTo(points[0].x, points[0].y);\r\n for(let i = 1; i < points.length; i++) {\r\n region.lineTo(points[i].x, points[i].y);\r\n }\r\n region.closePath(); \r\n */\r\n \r\n ctx.beginPath(); \r\n ctx.globalAlpha = opacity != undefined ? opacity : 1.0; \r\n\r\n // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/strokeStyle\r\n // TODO: we may have to change this if we are going to use CanvasGradient or CanvasPattern a strokestyle\r\n ctx.globalAlpha = opacity != undefined ? opacity : 1.0;\r\n\r\n if (stroke.StrokeType == MapEnums.StrokeTypes.Pattern) {\r\n ctx.strokeStyle = ctx.createPattern(stroke.Pattern, 'repeat');\r\n ctx.lineWidth = stroke.PatternHeight != undefined ? stroke.PatternHeight : 16;\r\n }\r\n else if (stroke.StrokeType != MapEnums.StrokeTypes.None) {\r\n ctx.strokeStyle = stroke.Colour != undefined ? stroke.Colour : 'black';\r\n ctx.lineWidth = stroke.Width != undefined ? stroke.Width : 2; \r\n ctx.setLineDash(stroke.DashPattern);\r\n } \r\n else {\r\n ctx.lineWidth = 0; \r\n }\r\n \r\n ctx.moveTo(points[0].x, points[0].y); \r\n for(let i = 1; i < points.length; i++) {\r\n ctx.lineTo(points[i].x, points[i].y);\r\n } \r\n\r\n ctx.stroke();\r\n ctx.closePath();\r\n \r\n if (fill != null && (isHole == undefined || isHole == false)) {\r\n this._fillPolygon(fill, ctx); \r\n }\r\n }\r\n } \r\n \r\n\r\n /**\r\n * @param {MgPoints[]} points\r\n * @param {string} strokeColor //ex. rgba(0,0,0.0.5) or \"yellow\"\r\n * @param {string} fillColor\r\n */\r\n drawRectangle(p1, p2, strokeColor, fillColor, lineWidth, dashedLine, ctxParam) {\r\n\r\n let ctx = ctxParam != undefined ? ctxParam : this._selectionCtx;\r\n\r\n ctx.beginPath(); \r\n if (dashedLine == undefined)\r\n ctx.setLineDash([5, 15]); \r\n else\r\n ctx.setLineDash(dashedLine); \r\n\r\n ctx.moveTo(p1.x, p1.y);\r\n\r\n ctx.lineTo(p2.x, p1.y);\r\n ctx.lineTo(p2.x, p2.y);\r\n ctx.lineTo(p1.x, p2.y);\r\n ctx.lineTo(p1.x, p1.y);\r\n\r\n ctx.closePath();\r\n if (fillColor != undefined)\r\n this._drawFillable(strokeColor, fillColor, lineWidth, 1, ctx); \r\n \r\n }\r\n\r\n /**\r\n * @param {MgPoints[]} points\r\n * @param {string} strokeColor //ex. rgba(0,0,0.0.5) or \"yellow\"\r\n * @param {string} fillColor\r\n */\r\n drawRectangle(x1, y1, x2, y2, strokeColor, fillColor, lineWidth, dashedLine, ctxParam) {\r\n\r\n /*\r\n setLineDash([]); ___\r\n setLineDash([1, 1]); ....\r\n setLineDash([10, 10]); - - -\r\n setLineDash([20, 5]); __ __ __\r\n setLineDash([15, 3, 3, 3]); __ . __ . __ .\r\n setLineDash([20, 3, 3, 3, 3, 3, 3, 3]); ___ ... ___ ... ___ ...\r\n setLineDash([12, 3, 3]); // Equals [12, 3, 3, 12, 3, 3] _. _. _.\r\n\r\n */\r\n console.log(`drawRectangle: x1: ${x1}, y1: ${y1}, x2: ${x2}, y2: ${y2}`)\r\n let ctx = ctxParam != undefined ? ctxParam : this._selectionCtx;\r\n\r\n ctx.beginPath(); \r\n \r\n if (dashedLine == undefined)\r\n ctx.setLineDash([]); \r\n else\r\n ctx.setLineDash(dashedLine); \r\n\r\n ctx.moveTo(x1, y1);\r\n\r\n ctx.lineTo(x2, y1);\r\n ctx.lineTo(x2, y2);\r\n ctx.lineTo(x1, y2);\r\n ctx.lineTo(x1, y1);\r\n\r\n ctx.closePath();\r\n if (fillColor != undefined)\r\n this._drawFillable(strokeColor, fillColor, lineWidth, 1, ctx);\r\n \r\n }\r\n\r\n drawRoundRectangle(x, y, width, height, radius, strokeColor, fillColor, ctxParam) {\r\n let ctx = ctxParam != undefined ? ctxParam : this._selectionCtx;\r\n \r\n if (typeof radius === 'undefined') {\r\n radius = 5;\r\n }\r\n\r\n if (typeof radius === 'number') {\r\n radius = {tl: radius, tr: radius, br: radius, bl: radius};\r\n } \r\n else {\r\n var defaultRadius = {tl: 0, tr: 0, br: 0, bl: 0};\r\n for (var side in defaultRadius) {\r\n radius[side] = radius[side] || defaultRadius[side];\r\n }\r\n }\r\n\r\n ctx.setLineDash([]);\r\n\r\n ctx.beginPath();\r\n ctx.moveTo(x + radius.tl, y);\r\n ctx.lineTo(x + width - radius.tr, y);\r\n ctx.quadraticCurveTo(x + width, y, x + width, y + radius.tr);\r\n ctx.lineTo(x + width, y + height - radius.br);\r\n ctx.quadraticCurveTo(x + width, y + height, x + width - radius.br, y + height);\r\n ctx.lineTo(x + radius.bl, y + height);\r\n ctx.quadraticCurveTo(x, y + height, x, y + height - radius.bl);\r\n ctx.lineTo(x, y + radius.tl);\r\n ctx.quadraticCurveTo(x, y, x + radius.tl, y);\r\n ctx.closePath();\r\n\r\n if (fillColor != undefined)\r\n this._drawFillable(strokeColor, fillColor, 1, 1, ctx);\r\n \r\n }\r\n\r\n /**\r\n * @param {number} centerX\r\n * @param {number} centerY\r\n * @param {number} radius\r\n * @param {string} strokeColor\r\n * @param {string} fillColor\r\n */\r\n drawCircle(centerX, centerY, radius, strokeColor, fillColor, lineWidth) { \r\n this._ctx.beginPath();\r\n this._ctx.arc(centerX, centerY, radius, 0, 2 * Math.PI, false);\r\n\r\n this._drawFillable(strokeColor, fillColor, lineWidth);\r\n }\r\n\r\n _drawFillable(strokeColor, fillColor, lineWidth, opacity, ctxParam) {\r\n let ctx = ctxParam != undefined ? ctxParam :this._offScreenCtx;\r\n\r\n ctx.strokeStyle = strokeColor != undefined ? strokeColor : 'black';\r\n ctx.lineWidth = lineWidth != undefined ? lineWidth : 1; \r\n ctx.globalAlpha = opacity != undefined ? opacity : 1.0;\r\n ctx.stroke();\r\n\r\n if(fillColor) { \r\n ctx.fillStyle = fillColor;\r\n ctx.fill(); \r\n } \r\n } \r\n\r\n _fillPolygon(fillStyle, ctx) { \r\n if(fillStyle != null) {\r\n \r\n //fillStyle.FillType was throwing undefined\r\n\r\n if (fillStyle.type == MapEnums.FillTypes.Solid) {\r\n if (fillStyle.Colour != null) {\r\n ctx.fillStyle = fillStyle.Colour;\r\n ctx.fill(); \r\n }\r\n }\r\n else if (fillStyle.type == MapEnums.FillTypes.Hatch || fillStyle.type == MapEnums.FillTypes.Pattern) { \r\n let pattern = ctx.createPattern(fillStyle.pattern, 'repeat'); \t\r\n ctx.fillStyle = pattern;\r\n \r\n ctx.fill(); \r\n\r\n } \r\n } \r\n }\r\n\r\n \r\n \r\n\r\n //#endregion\r\n\r\n //#region -- METHODS \r\n clearRect(x, y, width, height) {\r\n this._ctx.clearRect(x, y, width, height);\r\n }\r\n\r\n clearStyles() {\r\n this._ctx.fillStyle = \"rgba(255, 255, 255, 0)\";\r\n this._ctx.strokeStyle = \"black\";\r\n } \r\n\r\n clear() {\r\n // Store the current transformation matrix\r\n this._ctx.save();\r\n\r\n // Use the identity matrix while clearing the canvas\r\n //this._ctx.setTransform(1, 0, 0, 1, 0, 0);\r\n this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);\r\n this._ctx.width = this._ctx.width;\r\n this._ctx.beginPath();\r\n // Restore the transform\r\n //this._ctx.restore(); \r\n }\r\n\r\n clearOffscreen() {\r\n // Store the current transformation matrix\r\n //this._offScreenCtx.save();\r\n\r\n // Use the identity matrix while clearing the canvas\r\n //this._offScreenCtx.setTransform(1, 0, 0, 1, 0, 0);\r\n this._offScreenCtx.clearRect(0, 0, this._canvas.width, this._canvas.height);\r\n this._offScreenCtx.width = this._offScreenCtx.width;\r\n this._offScreenCtx.beginPath();\r\n // Restore the transform\r\n //this._offScreenCtx.restore(); \r\n }\r\n\r\n clearSelection() {\r\n // Store the current transformation matrix\r\n this._selectionCtx.save();\r\n\r\n // Use the identity matrix while clearing the canvas\r\n this._selectionCtx.clearRect(0, 0, this._canvas.width, this._canvas.height);\r\n\r\n // Restore the transform\r\n this._selectionCtx.restore(); \r\n }\r\n\r\n clearAll() {\r\n this.clear();\r\n this.clearOffscreen();\r\n }\r\n refreshView(xOffset, yOffset) { \r\n this.xOffset = xOffset;\r\n this.yOffset = yOffset;\r\n\r\n if (this.isPanning && xOffset != undefined && yOffset != undefined) {\r\n if (this.offScreenCanvas != null) { \r\n //window.requestAnimationFrame(this.drawCanvasPanning.bind(this)); \r\n this.drawCanvasPanning(); \r\n } \r\n }\r\n else {\r\n //window.requestAnimationFrame(this.drawCanvas.bind(this));\r\n this.drawCanvas(); \r\n } \r\n }\r\n\r\n drawCanvas() { \r\n if (this.offScreenCanvas.width > 0 && this.offScreenCanvas.height > 0) { \r\n this._ctx.save();\r\n this._ctx.translate(0, 0); \r\n this._ctx.clearRect(0, 0, this._canvas.width, this._canvas.height); \r\n this._ctx.drawImage(this.offScreenCanvas,0,0);\r\n this._ctx.restore();\r\n }\r\n } \r\n\r\n drawCanvasNoClear() { \r\n this._ctx.save();\r\n this._ctx.translate(0, 0); \r\n this._ctx.drawImage(this.offScreenCanvas,0,0);\r\n this._ctx.restore();\r\n }\r\n\r\n drawCanvasPanning() { \r\n this._ctx.save();\r\n if (this.xOffset != undefined && this.yOffset != undefined) {\r\n this._ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\t \r\n this._ctx.setTransform(1, 0, 0, 1, 0, 0); \r\n \r\n this._ctx.translate(this.xOffset, this.yOffset); \r\n this._ctx.drawImage(this.offScreenCanvas, 0, 0); \r\n } \r\n else {\r\n this._ctx.setTransform(1, 0, 0, 1, 0, 0);\r\n this._ctx.drawImage(this.offScreenCanvas, 0, 0); \r\n }\r\n this._ctx.restore();\r\n }\r\n\r\n drawCroppedCanvas(sx, sy, dx, dy, scale, h, w) { \r\n this._ctx.save();\r\n this._ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\t\r\n \r\n if (scale < 1.0) { //zooming out\r\n this._ctx.drawImage(this.offScreenCanvas, sx, sy, h, w, 0, 0, this.canvas.width, this.canvas.height); \r\n }\r\n else if (scale > 1.0) { // zooming in\r\n this._ctx.drawImage(this.offScreenCanvas, sx, sy, h, w, dx, dy, w - this.canvas.width, h - this.canvas.height); \r\n }\r\n else {\r\n this._ctx.translate(0, 0);\r\n this._ctx.drawImage(this.offScreenCanvas, sx, sy, dx, dy, 0, 0, this.canvas.width, this.canvas.height); \r\n }\r\n \r\n this._ctx.restore();\r\n\r\n console.log('drawCroppedCanvas');\r\n }\r\n\r\n drawCanvasSelection(pt1, pt2) { \r\n this.clear();\r\n this._ctx.save();\r\n this._ctx.translate(0, 0); \r\n \r\n this._ctx.drawImage(this.offScreenCanvas,0,0);\r\n this._ctx.globalCompositeOperation = 'source-over';\r\n this.drawRectangle(pt1.x, pt1.y, pt2.x, pt2.y, 'blue', 'transparent', 1, [3,3], this._ctx);\r\n \r\n this._ctx.restore();\r\n }\r\n\r\n sanitisedSVG(svg) {\r\n var sanitized = svg.replace(/\\/g,'%3E') //for >\r\n sanitized = sanitized.replace(/\\#/g,'%23') //for #\r\n \r\n return sanitized;\r\n }\r\n\r\n // #region Draw Shapes\r\n drawPolygonShape(ctx, points, strokeWidth, strokeColour, fillColour) { \r\n ctx.beginPath(); \r\n ctx.globalAlpha = 1.0; \r\n ctx.setLineDash([]);\r\n\r\n ctx.moveTo(points[0].x, points[0].y); \r\n for(let i = 1; i < points.length; i++) {\r\n ctx.lineTo(points[i].x, points[i].y);\r\n } \r\n ctx.closePath();\r\n\r\n if (strokeColour != null) {\r\n ctx.strokeStyle = strokeColour;\r\n ctx.lineWidth = strokeWidth; \r\n\r\n ctx.stroke();\r\n } \r\n \r\n if (fillColour != null) {\r\n ctx.fillStyle = fillColour;\r\n\r\n ctx.fill();\r\n } \r\n } \r\n\r\n drawCircleShape(ctx, cx, cy, radius, strokeWidth, strokeColour, fillColour) { \r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.arc(cx, cy, radius, 0, 2 * Math.PI, false);\r\n\r\n ctx.setLineDash([]);\r\n \r\n if (strokeColour != undefined) {\r\n ctx.strokeStyle = strokeColour;\r\n ctx.lineWidth = strokeWidth;\r\n ctx.stroke(); \r\n }\r\n\r\n if (fillColour != undefined) {\r\n ctx.fillStyle = fillColour;\r\n ctx.fill(); \r\n }\r\n\r\n ctx.restore();\r\n }\r\n\r\n drawTriangleShape(ctx, cx, cy, height, strokeWidth, strokeColour, fillColour, isUp ) { \r\n let radius = Math.trunc(height/2);\r\n \r\n var points = isUp == true ? this.getTriangleUpPoints(cx, cy, radius) : this.getTriangleDownPoints(cx, cy, radius);\r\n this.drawPolygonShape(ctx, points, strokeWidth, strokeColour, fillColour); \r\n }\r\n\r\n drawDiamondShape(ctx, cx, cy, height, strokeWidth, strokeColour, fillColour, isUp ) { \r\n let radius = Math.trunc(height/2);\r\n \r\n var points = [];\r\n points.push(new Point(cx, cy - radius));\r\n points.push(new Point(cx + radius - 2, cy));\r\n points.push(new Point(cx, cy + radius));\r\n points.push(new Point(cx - radius + 2, cy));\r\n\r\n this.drawPolygonShape(ctx, points, strokeWidth, strokeColour, fillColour); \r\n }\r\n\r\n drawSquareShape(ctx, cx, cy, height, strokeWidth, strokeColour, fillColour, isUp ) { \r\n let radius = Math.trunc(height/2);\r\n \r\n var points = [];\r\n points.push(new Point(cx - radius, cy - radius));\r\n points.push(new Point(cx + radius, cy - radius));\r\n points.push(new Point(cx + radius, cy + radius));\r\n points.push(new Point(cx - radius, cy + radius));\r\n \r\n this.drawPolygonShape(ctx, points, strokeWidth, strokeColour, fillColour); \r\n }\r\n\r\n drawStarShape(ctx, cx,cy, height, strokeWidth, strokeColour, fillColour, spikes) {\r\n var outerRadius = height / 2;\r\n var innerRadius = height / 4;\r\n var rot = Math.PI / 2*3;\r\n var x = cx;\r\n var y = cy;\r\n var step = Math.PI/spikes;\r\n\r\n ctx.beginPath();\r\n ctx.moveTo(cx,cy-outerRadius);\r\n\r\n for(let i=0; i < spikes; i++){\r\n x=cx+Math.cos(rot) * outerRadius;\r\n y=cy+Math.sin(rot) * outerRadius;\r\n ctx.lineTo(x,y);\r\n rot += step;\r\n\r\n x=cx+Math.cos(rot) * innerRadius;\r\n y=cy+Math.sin(rot) * innerRadius;\r\n ctx.lineTo(x,y);\r\n rot += step;\r\n }\r\n\r\n ctx.lineTo(cx, cy-outerRadius);\r\n ctx.closePath();\r\n\r\n if (strokeColour != undefined) {\r\n ctx.lineWidth = strokeWidth;\r\n ctx.strokeStyle = strokeColour;\r\n ctx.stroke();\r\n }\r\n\r\n if (fillColour != undefined) {\r\n ctx.fillStyle = fillColour;\r\n ctx.fill(); \r\n }\r\n }\r\n\r\n getTriangleUpPoints(cx, cy, radius) {\r\n var points = [];\r\n points.push(new Point(Math.trunc(radius * (-0.866)) + cx, Math.trunc(radius * (0.5))+ cy));\r\n points.push(new Point(Math.trunc(radius * (0.866)) + cx, Math.trunc(radius * (0.5))+ cy)); \r\n points.push(new Point(cx, Math.trunc(radius * (-1.0))+ cy));\r\n\r\n return points;\r\n }\r\n\r\n getTriangleDownPoints(cx, cy, radius) {\r\n var points = [];\r\n points.push(new Point(Math.trunc(radius * (-0.866)) + cx, Math.trunc(radius * (-0.5))+ cy));\r\n points.push(new Point(Math.trunc(radius * (0.866)) + cx, Math.trunc(radius * (-0.5))+ cy)); \r\n points.push(new Point(cx, radius + cy));\r\n\r\n return points;\r\n }\r\n\r\n getTextWidth(text) {\r\n return this._offScreenCtx.measureText(text).width;\r\n }\r\n //#endregion \r\n \r\n //#region -- EVENTS\r\n handleMouseMove(event) {\r\n event = event || window.event; // IE-ism \r\n } \r\n\r\n resize(newWidth, newHeight) { \r\n this.resizeCanvas(this._canvas, newWidth, newHeight);\r\n this.resizeCanvas(this._offScreenCanvas, newWidth, newHeight);\r\n this.resizeCanvas(this._selectionCanvas, newWidth, newHeight); \r\n }\r\n\r\n resizeCanvas(canvas, w, h) {\r\n canvas.width = w;\r\n canvas.height = h;\r\n canvas.style.width = w + \"px\";\r\n canvas.style.height = h + \"px\";\r\n }\r\n //#endregion\r\n \r\n}\r\n\r\nexport let PIXEL_RATIO = (function () {\r\n var ctx = document.createElement(\"canvas\").getContext(\"2d\"),\r\n dpr = window.devicePixelRatio || 1,\r\n bsr = ctx.webkitBackingStorePixelRatio ||\r\n ctx.mozBackingStorePixelRatio ||\r\n ctx.msBackingStorePixelRatio ||\r\n ctx.oBackingStorePixelRatio ||\r\n ctx.backingStorePixelRatio || 1;\r\n\r\n return dpr / bsr;\r\n})();\r\n\r\n\r\nMgCanvas.createHiDPICanvas = function(w, h, ratio, imageSmoothingEnabled) {\r\n //if (!ratio) { ratio = PIXEL_RATIO; } \r\n let canvas = document.createElement(\"canvas\", {alpha: true});\r\n let ctx = canvas.getContext('2d');\r\n canvas.width = w * ratio;\r\n canvas.height = h * ratio;\r\n canvas.style.width = w + \"px\";\r\n canvas.style.height = h + \"px\";\r\n\r\n // prevent anti-aliasing\r\n ctx.imageSmoothingEnabled = imageSmoothingEnabled != undefined ? imageSmoothingEnabled : false;\r\n \r\n //canvas.getContext(\"2d\").setTransform(ratio, 0, 0, ratio, 0, 0);\r\n //ctx.scale(dpr, dpr); \r\n return canvas;\r\n}","\r\nimport {Browser} from '../core';\r\nimport {Util} from '../core/index';\r\n\r\nexport class MgEvent {\r\n constructor() {\r\n\r\n }\r\n // Methods\r\n /**\r\n * @param {MgCanvas} canvas\r\n * @virtual\r\n */\r\n onClick(event, canvas) {\r\n } \r\n\r\n onLeftClick(event, canvas) {\r\n }\r\n\r\n onRightClick(event, canvas) {\r\n }\r\n\r\n onMouseMove(event, canvas) {\r\n }\r\n\r\n onSpan(event, canvas) {\r\n }\r\n \r\n onResize(event, canvas) {\r\n }\r\n\r\n /* @method on(type: String, fn: Function, context?: Object): this\r\n\t * Adds a listener function (`fn`) to a particular event type of the object. You can optionally specify the context of the listener (object the this keyword will point to). You can also pass several space-separated types (e.g. `'click dblclick'`).\r\n\t *\r\n\t * @alternative\r\n\t * @method on(eventMap: Object): this\r\n\t * Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\n\t */\r\n\ton(types, fn, context) {\r\n\r\n\t\t// types can be a map of types/handlers\r\n\t\tif (typeof types === 'object') {\r\n\t\t\tfor (var type in types) {\r\n\t\t\t\t// we don't process space-separated events here for performance;\r\n\t\t\t\t// it's a hot path since Layer uses the on(obj) syntax\r\n\t\t\t\tthis._on(type, types[type], fn);\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\t// types can be a string of space-separated words\r\n\t\t\ttypes = Util.splitWords(types);\r\n\r\n\t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\t\tthis._on(types[i], fn, context);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/* @method off(type: String, fn?: Function, context?: Object): this\r\n\t * Removes a previously added listener function. If no function is specified, it will remove all the listeners of that particular event from the object. Note that if you passed a custom context to `on`, you must pass the same context to `off` in order to remove the listener.\r\n\t *\r\n\t * @alternative\r\n\t * @method off(eventMap: Object): this\r\n\t * Removes a set of type/listener pairs.\r\n\t *\r\n\t * @alternative\r\n\t * @method off: this\r\n\t * Removes all listeners to all events on the object. This includes implicitly attached events.\r\n\t */\r\n\toff(types, fn, context) {\r\n\r\n\t\tif (!types) {\r\n\t\t\t// clear all listeners if called without arguments\r\n\t\t\tdelete this._events;\r\n\r\n\t\t} else if (typeof types === 'object') {\r\n\t\t\tfor (var type in types) {\r\n\t\t\t\tthis._off(type, types[type], fn);\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\ttypes = Util.splitWords(types);\r\n\r\n\t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\t\tthis._off(types[i], fn, context);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t// attach listener (without syntactic sugar now)\r\n\t_on(type, fn, context) {\r\n\t\tthis._events = this._events || {};\r\n\r\n\t\t/* get/init listeners for type */\r\n\t\tvar typeListeners = this._events[type];\r\n\t\tif (!typeListeners) {\r\n\t\t\ttypeListeners = [];\r\n\t\t\tthis._events[type] = typeListeners;\r\n\t\t}\r\n\r\n\t\tif (context === this) {\r\n\t\t\t// Less memory footprint.\r\n\t\t\tcontext = undefined;\r\n\t\t}\r\n\t\tvar newListener = {fn: fn, ctx: context},\r\n\t\t listeners = typeListeners;\r\n\r\n\t\t// check if fn already there\r\n\t\tfor (var i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\tif (listeners[i].fn === fn && listeners[i].ctx === context) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlisteners.push(newListener);\r\n\t}\r\n\r\n\t_off(type, fn, context) {\r\n\t\tvar listeners,\r\n\t\t i,\r\n\t\t len;\r\n\r\n\t\tif (!this._events) { return; }\r\n\r\n\t\tlisteners = this._events[type];\r\n\r\n\t\tif (!listeners) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!fn) {\r\n\t\t\t// Set all removed listeners to noop so they are not called if remove happens in fire\r\n\t\t\tfor (i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\t\tlisteners[i].fn = Util.falseFn;\r\n\t\t\t}\r\n\t\t\t// clear all listeners for a type if function isn't specified\r\n\t\t\tdelete this._events[type];\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (context === this) {\r\n\t\t\tcontext = undefined;\r\n\t\t}\r\n\r\n\t\tif (listeners) {\r\n\r\n\t\t\t// find fn and remove it\r\n\t\t\tfor (i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\t\tvar l = listeners[i];\r\n\t\t\t\tif (l.ctx !== context) { continue; }\r\n\t\t\t\tif (l.fn === fn) {\r\n\r\n\t\t\t\t\t// set the removed listener to noop so that's not called if remove happens in fire\r\n\t\t\t\t\tl.fn = Util.falseFn;\r\n\r\n\t\t\t\t\tif (this._firingCount) {\r\n\t\t\t\t\t\t/* copy array in case events are being fired */\r\n\t\t\t\t\t\tthis._events[type] = listeners = listeners.slice();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlisteners.splice(i, 1);\r\n\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// @method fire(type: String, data?: Object, propagate?: Boolean): this\r\n\t// Fires an event of the specified type. You can optionally provide an data\r\n\t// object — the first argument of the listener function will contain its\r\n\t// properties. The event can optionally be propagated to event parents.\r\n\tfire(type, data, propagate) {\r\n\t\tif (!this.listens(type, propagate)) { return this; }\r\n\r\n\t\tvar event = Util.extend({}, data, {\r\n\t\t\ttype: type,\r\n\t\t\ttarget: this,\r\n\t\t\tsourceTarget: data && data.sourceTarget || this\r\n\t\t});\r\n\r\n\t\tif (this._events) {\r\n\t\t\tvar listeners = this._events[type];\r\n\r\n\t\t\tif (listeners) {\r\n\t\t\t\tthis._firingCount = (this._firingCount + 1) || 1;\r\n\t\t\t\tfor (var i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\t\t\tvar l = listeners[i];\r\n\t\t\t\t\tl.fn.call(l.ctx || this, event);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._firingCount--;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (propagate) {\r\n\t\t\t// propagate the event to parents (set with addEventParent)\r\n\t\t\tthis._propagateEvent(event);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t// @method listens(type: String): Boolean\r\n\t// Returns `true` if a particular event type has any listeners attached to it.\r\n\tlistens(type, propagate) {\r\n\t\tvar listeners = this._events && this._events[type];\r\n\t\tif (listeners && listeners.length) { return true; }\r\n\r\n\t\tif (propagate) {\r\n\t\t\t// also check parents for listeners if event propagates\r\n\t\t\tfor (var id in this._eventParents) {\r\n\t\t\t\tif (this._eventParents[id].listens(type, propagate)) { return true; }\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\t// @method once(…): this\r\n\t// Behaves as [`on(…)`](#evented-on), except the listener will only get fired once and then removed.\r\n\tonce(types, fn, context) {\r\n\r\n\t\tif (typeof types === 'object') {\r\n\t\t\tfor (var type in types) {\r\n\t\t\t\tthis.once(type, types[type], fn);\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tvar handler = Util.bind(function () {\r\n\t\t\tthis\r\n\t\t\t .off(types, fn, context)\r\n\t\t\t .off(types, handler, context);\r\n\t\t}, this);\r\n\r\n\t\t// add a listener that's executed once and removed after that\r\n\t\treturn this\r\n\t\t .on(types, fn, context)\r\n\t\t .on(types, handler, context);\r\n\t}\r\n\r\n\t// @method addEventParent(obj: Evented): this\r\n\t// Adds an event parent - an `Evented` that will receive propagated events\r\n\taddEventParent(obj) {\r\n\t\tthis._eventParents = this._eventParents || {};\r\n\t\tthis._eventParents[Util.stamp(obj)] = obj;\r\n\t\treturn this;\r\n\t}\r\n\r\n\t// @method removeEventParent(obj: Evented): this\r\n\t// Removes an event parent, so it will stop receiving propagated events\r\n\tremoveEventParent(obj) {\r\n\t\tif (this._eventParents) {\r\n\t\t\tdelete this._eventParents[Util.stamp(obj)];\r\n\t\t}\r\n\t\treturn this;\r\n\t}\r\n\r\n\t_propagateEvent(e) {\r\n\t\tfor (var id in this._eventParents) {\r\n\t\t\tthis._eventParents[id].fire(e.type, Util.extend({\r\n\t\t\t\tlayer: e.target,\r\n\t\t\t\tpropagatedFrom: e.target\r\n\t\t\t}, e), true);\r\n\t\t}\r\n\t}\r\n}\r\n\r\n// @function include(properties: Object): this\r\n// [Includes a mixin](#class-includes) into the current class.\r\nMgEvent.include = function (props) {\r\n\tUtil.extend(this.prototype, props);\r\n\treturn this;\r\n};\r\n\r\n// @function mergeOptions(options: Object): this\r\n// [Merges `options`](#class-options) into the defaults of the class.\r\nMgEvent.mergeOptions = function (options) {\r\n\tUtil.extend(this.prototype.options, options);\r\n\treturn this;\r\n};\r\n\r\n// @function addInitHook(fn: Function): this\r\n// Adds a [constructor hook](#class-constructor-hooks) to the class.\r\nMgEvent.addInitHook = function (fn) { // (Function) || (String, args...)\r\n\tvar args = Array.prototype.slice.call(arguments, 1);\r\n\r\n\tvar init = typeof fn === 'function' ? fn : function () {\r\n\t\tthis[fn].apply(this, args);\r\n\t};\r\n\r\n\tthis.prototype._initHooks = this.prototype._initHooks || [];\r\n\tthis.prototype._initHooks.push(init);\r\n\treturn this;\r\n};","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport function isFunction(x) {\n return typeof x === 'function';\n}\n//# sourceMappingURL=isFunction.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nvar _enable_super_gross_mode_that_will_cause_bad_things = false;\nexport var config = {\n Promise: undefined,\n set useDeprecatedSynchronousErrorHandling(value) {\n if (value) {\n var error = /*@__PURE__*/ new Error();\n /*@__PURE__*/ console.warn('DEPRECATED! RxJS was set to use deprecated synchronous error handling behavior by code at: \\n' + error.stack);\n }\n else if (_enable_super_gross_mode_that_will_cause_bad_things) {\n /*@__PURE__*/ console.log('RxJS: Back to a better error behavior. Thank you. <3');\n }\n _enable_super_gross_mode_that_will_cause_bad_things = value;\n },\n get useDeprecatedSynchronousErrorHandling() {\n return _enable_super_gross_mode_that_will_cause_bad_things;\n },\n};\n//# sourceMappingURL=config.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport function hostReportError(err) {\n setTimeout(function () { throw err; }, 0);\n}\n//# sourceMappingURL=hostReportError.js.map\n","/** PURE_IMPORTS_START _config,_util_hostReportError PURE_IMPORTS_END */\nimport { config } from './config';\nimport { hostReportError } from './util/hostReportError';\nexport var empty = {\n closed: true,\n next: function (value) { },\n error: function (err) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n throw err;\n }\n else {\n hostReportError(err);\n }\n },\n complete: function () { }\n};\n//# sourceMappingURL=Observer.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport var isArray = /*@__PURE__*/ (function () { return Array.isArray || (function (x) { return x && typeof x.length === 'number'; }); })();\n//# sourceMappingURL=isArray.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport function isObject(x) {\n return x !== null && typeof x === 'object';\n}\n//# sourceMappingURL=isObject.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nvar UnsubscriptionErrorImpl = /*@__PURE__*/ (function () {\n function UnsubscriptionErrorImpl(errors) {\n Error.call(this);\n this.message = errors ?\n errors.length + \" errors occurred during unsubscription:\\n\" + errors.map(function (err, i) { return i + 1 + \") \" + err.toString(); }).join('\\n ') : '';\n this.name = 'UnsubscriptionError';\n this.errors = errors;\n return this;\n }\n UnsubscriptionErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);\n return UnsubscriptionErrorImpl;\n})();\nexport var UnsubscriptionError = UnsubscriptionErrorImpl;\n//# sourceMappingURL=UnsubscriptionError.js.map\n","/** PURE_IMPORTS_START _util_isArray,_util_isObject,_util_isFunction,_util_UnsubscriptionError PURE_IMPORTS_END */\nimport { isArray } from './util/isArray';\nimport { isObject } from './util/isObject';\nimport { isFunction } from './util/isFunction';\nimport { UnsubscriptionError } from './util/UnsubscriptionError';\nvar Subscription = /*@__PURE__*/ (function () {\n function Subscription(unsubscribe) {\n this.closed = false;\n this._parentOrParents = null;\n this._subscriptions = null;\n if (unsubscribe) {\n this._ctorUnsubscribe = true;\n this._unsubscribe = unsubscribe;\n }\n }\n Subscription.prototype.unsubscribe = function () {\n var errors;\n if (this.closed) {\n return;\n }\n var _a = this, _parentOrParents = _a._parentOrParents, _ctorUnsubscribe = _a._ctorUnsubscribe, _unsubscribe = _a._unsubscribe, _subscriptions = _a._subscriptions;\n this.closed = true;\n this._parentOrParents = null;\n this._subscriptions = null;\n if (_parentOrParents instanceof Subscription) {\n _parentOrParents.remove(this);\n }\n else if (_parentOrParents !== null) {\n for (var index = 0; index < _parentOrParents.length; ++index) {\n var parent_1 = _parentOrParents[index];\n parent_1.remove(this);\n }\n }\n if (isFunction(_unsubscribe)) {\n if (_ctorUnsubscribe) {\n this._unsubscribe = undefined;\n }\n try {\n _unsubscribe.call(this);\n }\n catch (e) {\n errors = e instanceof UnsubscriptionError ? flattenUnsubscriptionErrors(e.errors) : [e];\n }\n }\n if (isArray(_subscriptions)) {\n var index = -1;\n var len = _subscriptions.length;\n while (++index < len) {\n var sub = _subscriptions[index];\n if (isObject(sub)) {\n try {\n sub.unsubscribe();\n }\n catch (e) {\n errors = errors || [];\n if (e instanceof UnsubscriptionError) {\n errors = errors.concat(flattenUnsubscriptionErrors(e.errors));\n }\n else {\n errors.push(e);\n }\n }\n }\n }\n }\n if (errors) {\n throw new UnsubscriptionError(errors);\n }\n };\n Subscription.prototype.add = function (teardown) {\n var subscription = teardown;\n if (!teardown) {\n return Subscription.EMPTY;\n }\n switch (typeof teardown) {\n case 'function':\n subscription = new Subscription(teardown);\n case 'object':\n if (subscription === this || subscription.closed || typeof subscription.unsubscribe !== 'function') {\n return subscription;\n }\n else if (this.closed) {\n subscription.unsubscribe();\n return subscription;\n }\n else if (!(subscription instanceof Subscription)) {\n var tmp = subscription;\n subscription = new Subscription();\n subscription._subscriptions = [tmp];\n }\n break;\n default: {\n throw new Error('unrecognized teardown ' + teardown + ' added to Subscription.');\n }\n }\n var _parentOrParents = subscription._parentOrParents;\n if (_parentOrParents === null) {\n subscription._parentOrParents = this;\n }\n else if (_parentOrParents instanceof Subscription) {\n if (_parentOrParents === this) {\n return subscription;\n }\n subscription._parentOrParents = [_parentOrParents, this];\n }\n else if (_parentOrParents.indexOf(this) === -1) {\n _parentOrParents.push(this);\n }\n else {\n return subscription;\n }\n var subscriptions = this._subscriptions;\n if (subscriptions === null) {\n this._subscriptions = [subscription];\n }\n else {\n subscriptions.push(subscription);\n }\n return subscription;\n };\n Subscription.prototype.remove = function (subscription) {\n var subscriptions = this._subscriptions;\n if (subscriptions) {\n var subscriptionIndex = subscriptions.indexOf(subscription);\n if (subscriptionIndex !== -1) {\n subscriptions.splice(subscriptionIndex, 1);\n }\n }\n };\n Subscription.EMPTY = (function (empty) {\n empty.closed = true;\n return empty;\n }(new Subscription()));\n return Subscription;\n}());\nexport { Subscription };\nfunction flattenUnsubscriptionErrors(errors) {\n return errors.reduce(function (errs, err) { return errs.concat((err instanceof UnsubscriptionError) ? err.errors : err); }, []);\n}\n//# sourceMappingURL=Subscription.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport var rxSubscriber = /*@__PURE__*/ (function () {\n return typeof Symbol === 'function'\n ? /*@__PURE__*/ Symbol('rxSubscriber')\n : '@@rxSubscriber_' + /*@__PURE__*/ Math.random();\n})();\nexport var $$rxSubscriber = rxSubscriber;\n//# sourceMappingURL=rxSubscriber.js.map\n","/** PURE_IMPORTS_START tslib,_util_isFunction,_Observer,_Subscription,_internal_symbol_rxSubscriber,_config,_util_hostReportError PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { isFunction } from './util/isFunction';\nimport { empty as emptyObserver } from './Observer';\nimport { Subscription } from './Subscription';\nimport { rxSubscriber as rxSubscriberSymbol } from '../internal/symbol/rxSubscriber';\nimport { config } from './config';\nimport { hostReportError } from './util/hostReportError';\nvar Subscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(Subscriber, _super);\n function Subscriber(destinationOrNext, error, complete) {\n var _this = _super.call(this) || this;\n _this.syncErrorValue = null;\n _this.syncErrorThrown = false;\n _this.syncErrorThrowable = false;\n _this.isStopped = false;\n switch (arguments.length) {\n case 0:\n _this.destination = emptyObserver;\n break;\n case 1:\n if (!destinationOrNext) {\n _this.destination = emptyObserver;\n break;\n }\n if (typeof destinationOrNext === 'object') {\n if (destinationOrNext instanceof Subscriber) {\n _this.syncErrorThrowable = destinationOrNext.syncErrorThrowable;\n _this.destination = destinationOrNext;\n destinationOrNext.add(_this);\n }\n else {\n _this.syncErrorThrowable = true;\n _this.destination = new SafeSubscriber(_this, destinationOrNext);\n }\n break;\n }\n default:\n _this.syncErrorThrowable = true;\n _this.destination = new SafeSubscriber(_this, destinationOrNext, error, complete);\n break;\n }\n return _this;\n }\n Subscriber.prototype[rxSubscriberSymbol] = function () { return this; };\n Subscriber.create = function (next, error, complete) {\n var subscriber = new Subscriber(next, error, complete);\n subscriber.syncErrorThrowable = false;\n return subscriber;\n };\n Subscriber.prototype.next = function (value) {\n if (!this.isStopped) {\n this._next(value);\n }\n };\n Subscriber.prototype.error = function (err) {\n if (!this.isStopped) {\n this.isStopped = true;\n this._error(err);\n }\n };\n Subscriber.prototype.complete = function () {\n if (!this.isStopped) {\n this.isStopped = true;\n this._complete();\n }\n };\n Subscriber.prototype.unsubscribe = function () {\n if (this.closed) {\n return;\n }\n this.isStopped = true;\n _super.prototype.unsubscribe.call(this);\n };\n Subscriber.prototype._next = function (value) {\n this.destination.next(value);\n };\n Subscriber.prototype._error = function (err) {\n this.destination.error(err);\n this.unsubscribe();\n };\n Subscriber.prototype._complete = function () {\n this.destination.complete();\n this.unsubscribe();\n };\n Subscriber.prototype._unsubscribeAndRecycle = function () {\n var _parentOrParents = this._parentOrParents;\n this._parentOrParents = null;\n this.unsubscribe();\n this.closed = false;\n this.isStopped = false;\n this._parentOrParents = _parentOrParents;\n return this;\n };\n return Subscriber;\n}(Subscription));\nexport { Subscriber };\nvar SafeSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(SafeSubscriber, _super);\n function SafeSubscriber(_parentSubscriber, observerOrNext, error, complete) {\n var _this = _super.call(this) || this;\n _this._parentSubscriber = _parentSubscriber;\n var next;\n var context = _this;\n if (isFunction(observerOrNext)) {\n next = observerOrNext;\n }\n else if (observerOrNext) {\n next = observerOrNext.next;\n error = observerOrNext.error;\n complete = observerOrNext.complete;\n if (observerOrNext !== emptyObserver) {\n context = Object.create(observerOrNext);\n if (isFunction(context.unsubscribe)) {\n _this.add(context.unsubscribe.bind(context));\n }\n context.unsubscribe = _this.unsubscribe.bind(_this);\n }\n }\n _this._context = context;\n _this._next = next;\n _this._error = error;\n _this._complete = complete;\n return _this;\n }\n SafeSubscriber.prototype.next = function (value) {\n if (!this.isStopped && this._next) {\n var _parentSubscriber = this._parentSubscriber;\n if (!config.useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {\n this.__tryOrUnsub(this._next, value);\n }\n else if (this.__tryOrSetError(_parentSubscriber, this._next, value)) {\n this.unsubscribe();\n }\n }\n };\n SafeSubscriber.prototype.error = function (err) {\n if (!this.isStopped) {\n var _parentSubscriber = this._parentSubscriber;\n var useDeprecatedSynchronousErrorHandling = config.useDeprecatedSynchronousErrorHandling;\n if (this._error) {\n if (!useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {\n this.__tryOrUnsub(this._error, err);\n this.unsubscribe();\n }\n else {\n this.__tryOrSetError(_parentSubscriber, this._error, err);\n this.unsubscribe();\n }\n }\n else if (!_parentSubscriber.syncErrorThrowable) {\n this.unsubscribe();\n if (useDeprecatedSynchronousErrorHandling) {\n throw err;\n }\n hostReportError(err);\n }\n else {\n if (useDeprecatedSynchronousErrorHandling) {\n _parentSubscriber.syncErrorValue = err;\n _parentSubscriber.syncErrorThrown = true;\n }\n else {\n hostReportError(err);\n }\n this.unsubscribe();\n }\n }\n };\n SafeSubscriber.prototype.complete = function () {\n var _this = this;\n if (!this.isStopped) {\n var _parentSubscriber = this._parentSubscriber;\n if (this._complete) {\n var wrappedComplete = function () { return _this._complete.call(_this._context); };\n if (!config.useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {\n this.__tryOrUnsub(wrappedComplete);\n this.unsubscribe();\n }\n else {\n this.__tryOrSetError(_parentSubscriber, wrappedComplete);\n this.unsubscribe();\n }\n }\n else {\n this.unsubscribe();\n }\n }\n };\n SafeSubscriber.prototype.__tryOrUnsub = function (fn, value) {\n try {\n fn.call(this._context, value);\n }\n catch (err) {\n this.unsubscribe();\n if (config.useDeprecatedSynchronousErrorHandling) {\n throw err;\n }\n else {\n hostReportError(err);\n }\n }\n };\n SafeSubscriber.prototype.__tryOrSetError = function (parent, fn, value) {\n if (!config.useDeprecatedSynchronousErrorHandling) {\n throw new Error('bad call');\n }\n try {\n fn.call(this._context, value);\n }\n catch (err) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n parent.syncErrorValue = err;\n parent.syncErrorThrown = true;\n return true;\n }\n else {\n hostReportError(err);\n return true;\n }\n }\n return false;\n };\n SafeSubscriber.prototype._unsubscribe = function () {\n var _parentSubscriber = this._parentSubscriber;\n this._context = null;\n this._parentSubscriber = null;\n _parentSubscriber.unsubscribe();\n };\n return SafeSubscriber;\n}(Subscriber));\nexport { SafeSubscriber };\n//# sourceMappingURL=Subscriber.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport var observable = /*@__PURE__*/ (function () { return typeof Symbol === 'function' && Symbol.observable || '@@observable'; })();\n//# sourceMappingURL=observable.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport function identity(x) {\n return x;\n}\n//# sourceMappingURL=identity.js.map\n","/** PURE_IMPORTS_START _identity PURE_IMPORTS_END */\nimport { identity } from './identity';\nexport function pipe() {\n var fns = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fns[_i] = arguments[_i];\n }\n return pipeFromArray(fns);\n}\nexport function pipeFromArray(fns) {\n if (fns.length === 0) {\n return identity;\n }\n if (fns.length === 1) {\n return fns[0];\n }\n return function piped(input) {\n return fns.reduce(function (prev, fn) { return fn(prev); }, input);\n };\n}\n//# sourceMappingURL=pipe.js.map\n","/** PURE_IMPORTS_START _util_canReportError,_util_toSubscriber,_symbol_observable,_util_pipe,_config PURE_IMPORTS_END */\nimport { canReportError } from './util/canReportError';\nimport { toSubscriber } from './util/toSubscriber';\nimport { observable as Symbol_observable } from './symbol/observable';\nimport { pipeFromArray } from './util/pipe';\nimport { config } from './config';\nvar Observable = /*@__PURE__*/ (function () {\n function Observable(subscribe) {\n this._isScalar = false;\n if (subscribe) {\n this._subscribe = subscribe;\n }\n }\n Observable.prototype.lift = function (operator) {\n var observable = new Observable();\n observable.source = this;\n observable.operator = operator;\n return observable;\n };\n Observable.prototype.subscribe = function (observerOrNext, error, complete) {\n var operator = this.operator;\n var sink = toSubscriber(observerOrNext, error, complete);\n if (operator) {\n sink.add(operator.call(sink, this.source));\n }\n else {\n sink.add(this.source || (config.useDeprecatedSynchronousErrorHandling && !sink.syncErrorThrowable) ?\n this._subscribe(sink) :\n this._trySubscribe(sink));\n }\n if (config.useDeprecatedSynchronousErrorHandling) {\n if (sink.syncErrorThrowable) {\n sink.syncErrorThrowable = false;\n if (sink.syncErrorThrown) {\n throw sink.syncErrorValue;\n }\n }\n }\n return sink;\n };\n Observable.prototype._trySubscribe = function (sink) {\n try {\n return this._subscribe(sink);\n }\n catch (err) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n sink.syncErrorThrown = true;\n sink.syncErrorValue = err;\n }\n if (canReportError(sink)) {\n sink.error(err);\n }\n else {\n console.warn(err);\n }\n }\n };\n Observable.prototype.forEach = function (next, promiseCtor) {\n var _this = this;\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor(function (resolve, reject) {\n var subscription;\n subscription = _this.subscribe(function (value) {\n try {\n next(value);\n }\n catch (err) {\n reject(err);\n if (subscription) {\n subscription.unsubscribe();\n }\n }\n }, reject, resolve);\n });\n };\n Observable.prototype._subscribe = function (subscriber) {\n var source = this.source;\n return source && source.subscribe(subscriber);\n };\n Observable.prototype[Symbol_observable] = function () {\n return this;\n };\n Observable.prototype.pipe = function () {\n var operations = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n operations[_i] = arguments[_i];\n }\n if (operations.length === 0) {\n return this;\n }\n return pipeFromArray(operations)(this);\n };\n Observable.prototype.toPromise = function (promiseCtor) {\n var _this = this;\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor(function (resolve, reject) {\n var value;\n _this.subscribe(function (x) { return value = x; }, function (err) { return reject(err); }, function () { return resolve(value); });\n });\n };\n Observable.create = function (subscribe) {\n return new Observable(subscribe);\n };\n return Observable;\n}());\nexport { Observable };\nfunction getPromiseCtor(promiseCtor) {\n if (!promiseCtor) {\n promiseCtor = config.Promise || Promise;\n }\n if (!promiseCtor) {\n throw new Error('no Promise impl found');\n }\n return promiseCtor;\n}\n//# sourceMappingURL=Observable.js.map\n","/** PURE_IMPORTS_START _Subscriber,_symbol_rxSubscriber,_Observer PURE_IMPORTS_END */\nimport { Subscriber } from '../Subscriber';\nimport { rxSubscriber as rxSubscriberSymbol } from '../symbol/rxSubscriber';\nimport { empty as emptyObserver } from '../Observer';\nexport function toSubscriber(nextOrObserver, error, complete) {\n if (nextOrObserver) {\n if (nextOrObserver instanceof Subscriber) {\n return nextOrObserver;\n }\n if (nextOrObserver[rxSubscriberSymbol]) {\n return nextOrObserver[rxSubscriberSymbol]();\n }\n }\n if (!nextOrObserver && !error && !complete) {\n return new Subscriber(emptyObserver);\n }\n return new Subscriber(nextOrObserver, error, complete);\n}\n//# sourceMappingURL=toSubscriber.js.map\n","/** PURE_IMPORTS_START _Subscriber PURE_IMPORTS_END */\nimport { Subscriber } from '../Subscriber';\nexport function canReportError(observer) {\n while (observer) {\n var _a = observer, closed_1 = _a.closed, destination = _a.destination, isStopped = _a.isStopped;\n if (closed_1 || isStopped) {\n return false;\n }\n else if (destination && destination instanceof Subscriber) {\n observer = destination;\n }\n else {\n observer = null;\n }\n }\n return true;\n}\n//# sourceMappingURL=canReportError.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nvar ObjectUnsubscribedErrorImpl = /*@__PURE__*/ (function () {\n function ObjectUnsubscribedErrorImpl() {\n Error.call(this);\n this.message = 'object unsubscribed';\n this.name = 'ObjectUnsubscribedError';\n return this;\n }\n ObjectUnsubscribedErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);\n return ObjectUnsubscribedErrorImpl;\n})();\nexport var ObjectUnsubscribedError = ObjectUnsubscribedErrorImpl;\n//# sourceMappingURL=ObjectUnsubscribedError.js.map\n","/** PURE_IMPORTS_START tslib,_Subscription PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscription } from './Subscription';\nvar SubjectSubscription = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(SubjectSubscription, _super);\n function SubjectSubscription(subject, subscriber) {\n var _this = _super.call(this) || this;\n _this.subject = subject;\n _this.subscriber = subscriber;\n _this.closed = false;\n return _this;\n }\n SubjectSubscription.prototype.unsubscribe = function () {\n if (this.closed) {\n return;\n }\n this.closed = true;\n var subject = this.subject;\n var observers = subject.observers;\n this.subject = null;\n if (!observers || observers.length === 0 || subject.isStopped || subject.closed) {\n return;\n }\n var subscriberIndex = observers.indexOf(this.subscriber);\n if (subscriberIndex !== -1) {\n observers.splice(subscriberIndex, 1);\n }\n };\n return SubjectSubscription;\n}(Subscription));\nexport { SubjectSubscription };\n//# sourceMappingURL=SubjectSubscription.js.map\n","/** PURE_IMPORTS_START tslib,_Observable,_Subscriber,_Subscription,_util_ObjectUnsubscribedError,_SubjectSubscription,_internal_symbol_rxSubscriber PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Observable } from './Observable';\nimport { Subscriber } from './Subscriber';\nimport { Subscription } from './Subscription';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { SubjectSubscription } from './SubjectSubscription';\nimport { rxSubscriber as rxSubscriberSymbol } from '../internal/symbol/rxSubscriber';\nvar SubjectSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(SubjectSubscriber, _super);\n function SubjectSubscriber(destination) {\n var _this = _super.call(this, destination) || this;\n _this.destination = destination;\n return _this;\n }\n return SubjectSubscriber;\n}(Subscriber));\nexport { SubjectSubscriber };\nvar Subject = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(Subject, _super);\n function Subject() {\n var _this = _super.call(this) || this;\n _this.observers = [];\n _this.closed = false;\n _this.isStopped = false;\n _this.hasError = false;\n _this.thrownError = null;\n return _this;\n }\n Subject.prototype[rxSubscriberSymbol] = function () {\n return new SubjectSubscriber(this);\n };\n Subject.prototype.lift = function (operator) {\n var subject = new AnonymousSubject(this, this);\n subject.operator = operator;\n return subject;\n };\n Subject.prototype.next = function (value) {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n if (!this.isStopped) {\n var observers = this.observers;\n var len = observers.length;\n var copy = observers.slice();\n for (var i = 0; i < len; i++) {\n copy[i].next(value);\n }\n }\n };\n Subject.prototype.error = function (err) {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n this.hasError = true;\n this.thrownError = err;\n this.isStopped = true;\n var observers = this.observers;\n var len = observers.length;\n var copy = observers.slice();\n for (var i = 0; i < len; i++) {\n copy[i].error(err);\n }\n this.observers.length = 0;\n };\n Subject.prototype.complete = function () {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n this.isStopped = true;\n var observers = this.observers;\n var len = observers.length;\n var copy = observers.slice();\n for (var i = 0; i < len; i++) {\n copy[i].complete();\n }\n this.observers.length = 0;\n };\n Subject.prototype.unsubscribe = function () {\n this.isStopped = true;\n this.closed = true;\n this.observers = null;\n };\n Subject.prototype._trySubscribe = function (subscriber) {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n else {\n return _super.prototype._trySubscribe.call(this, subscriber);\n }\n };\n Subject.prototype._subscribe = function (subscriber) {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n else if (this.hasError) {\n subscriber.error(this.thrownError);\n return Subscription.EMPTY;\n }\n else if (this.isStopped) {\n subscriber.complete();\n return Subscription.EMPTY;\n }\n else {\n this.observers.push(subscriber);\n return new SubjectSubscription(this, subscriber);\n }\n };\n Subject.prototype.asObservable = function () {\n var observable = new Observable();\n observable.source = this;\n return observable;\n };\n Subject.create = function (destination, source) {\n return new AnonymousSubject(destination, source);\n };\n return Subject;\n}(Observable));\nexport { Subject };\nvar AnonymousSubject = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(AnonymousSubject, _super);\n function AnonymousSubject(destination, source) {\n var _this = _super.call(this) || this;\n _this.destination = destination;\n _this.source = source;\n return _this;\n }\n AnonymousSubject.prototype.next = function (value) {\n var destination = this.destination;\n if (destination && destination.next) {\n destination.next(value);\n }\n };\n AnonymousSubject.prototype.error = function (err) {\n var destination = this.destination;\n if (destination && destination.error) {\n this.destination.error(err);\n }\n };\n AnonymousSubject.prototype.complete = function () {\n var destination = this.destination;\n if (destination && destination.complete) {\n this.destination.complete();\n }\n };\n AnonymousSubject.prototype._subscribe = function (subscriber) {\n var source = this.source;\n if (source) {\n return this.source.subscribe(subscriber);\n }\n else {\n return Subscription.EMPTY;\n }\n };\n return AnonymousSubject;\n}(Subject));\nexport { AnonymousSubject };\n//# sourceMappingURL=Subject.js.map\n","/** PURE_IMPORTS_START tslib,_Subject,_util_ObjectUnsubscribedError PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subject } from './Subject';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nvar BehaviorSubject = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(BehaviorSubject, _super);\n function BehaviorSubject(_value) {\n var _this = _super.call(this) || this;\n _this._value = _value;\n return _this;\n }\n Object.defineProperty(BehaviorSubject.prototype, \"value\", {\n get: function () {\n return this.getValue();\n },\n enumerable: true,\n configurable: true\n });\n BehaviorSubject.prototype._subscribe = function (subscriber) {\n var subscription = _super.prototype._subscribe.call(this, subscriber);\n if (subscription && !subscription.closed) {\n subscriber.next(this._value);\n }\n return subscription;\n };\n BehaviorSubject.prototype.getValue = function () {\n if (this.hasError) {\n throw this.thrownError;\n }\n else if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n else {\n return this._value;\n }\n };\n BehaviorSubject.prototype.next = function (value) {\n _super.prototype.next.call(this, this._value = value);\n };\n return BehaviorSubject;\n}(Subject));\nexport { BehaviorSubject };\n//# sourceMappingURL=BehaviorSubject.js.map\n","import { MgEvent} from '../map/event';\r\nimport { Util } from '../core/index';\r\nimport {Browser} from '../core/index';\r\nimport { MapEnums } from '../map/enums';\r\nimport {BehaviorSubject} from 'rxjs';\r\n\r\nexport class MgLayer { \r\n\r\n //#region -- CONSTRUCTOR \r\n constructor(id, options, taskId) {\r\n this._id = id;\r\n this._map = null;\r\n this.taskId = taskId; \r\n this.options = Util.setOptions(this, this.defaultOptions);\r\n this.options = Util.setOptions(this, options);\r\n this.visible = this.options.Visible;\r\n this.isDebouncing = new BehaviorSubject(false);\r\n\r\n }\r\n //#endregion\r\n \r\n //#region -- GETTERS and SETTERS \r\n get id() { \r\n return this._id; \r\n }\r\n get options() { \r\n return this._options; \r\n }\r\n\r\n get map() { \r\n return this._map; \r\n }\r\n\r\n set options(value) {\r\n this._options = value;\r\n }\r\n //#endregion\r\n\r\n //#region -- METHODS\r\n addTo(map) {\r\n this._map = map;\r\n if(map) {\r\n map.addLayer(this);\r\n if (map.options.Context != null && this.options.ContextFilter == null) \r\n this.options.ContextFilter = map.options.Context.Filter;\r\n this.onAdd(map);\r\n }\r\n return this; \r\n } \r\n //#endregion\r\n \r\n /** \r\n * @returns Promise(MgLayer)\r\n * @virtual\r\n */\r\n isLayerReady(canvas, zoom) {\r\n throw new Error(\"Implement isLayerReady method\");\r\n }\r\n\r\n /**\r\n * @param {MgCanvas} canvas \r\n * @virtual\r\n */\r\n refreshView(canvas, offscreenCanvas) {\r\n throw new Error(\"Implement refreshView method\");\r\n }\r\n\r\n /**\r\n * @param {Bounds} rcMap\r\n * @param {LatLngBounds} newExtents\r\n * @param {Number} cellsize\r\n * @param {Number} scale\r\n */\r\n onExtentsChanged(sourceEvent, rcMap, newExtents, cellsize, scale) {\r\n\r\n }\r\n // @section\r\n\t// @aka MGLayer options\r\n\tget defaultOptions() {\r\n let _defaultOptions = {\r\n opacity: 1, // Number = 1.0,\r\n zIndex: 1, // Number,\r\n bounds: null, // LatLngBounds\r\n minZoom: 0, // Number\r\n maxZoom: 22, // Number\r\n }\r\n _defaultOptions = this.mergeOptions(_defaultOptions, this.getWCLayerOptions());\r\n return _defaultOptions;\r\n }\r\n\r\n get DatasetType() {\r\n return this.options.DatasetType;\r\n }\r\n\r\n get canHover() {\r\n return false;\r\n }\r\n\r\n get Dataset() {\r\n return this.options.Dataset;\r\n }\r\n \r\n getWCLayerOptions() {\r\n // FROM API\r\n const layerOptions = {\r\n Name: null, // String\r\n Position: null, // Number\r\n Dataset: null, // Number\r\n DatasetType: null, // MapEnums.DatasetTypes\r\n Projection: null, // String\r\n Visible: null, // Boolean\r\n Folder: [], // String[]\r\n MinScale: null, // Number\r\n MaxScale: null, // Number \r\n RenderOrderIndex: null // Number\r\n }\r\n return layerOptions;\r\n }\r\n\r\n onAdd(map) {\r\n }\r\n\r\n isVisible(scale) {\r\n return (this.options.MaxScale >= scale || this.options.MaxScale == null) && (this.options.MinScale <= scale || this.options.MinScale == null) ? this.visible : false; \r\n }\r\n\r\n showThematics(index, show) {\r\n }\r\n\r\n showLayer(sourceEvent, show) {\r\n this.visible = show;\r\n if (this.map != null) {\r\n if (show == true) {\r\n this._viewport = null;\r\n this.currentExtents = null;\r\n this.onExtentsChanged(sourceEvent, this.map.rcMap, this.map.extents, this.map.cellsize, this.map.scale, this.map.canvas);\r\n }\r\n\r\n this.map.refreshView();\r\n }\r\n }\r\n \r\n render(canvas, force, context, compositeOperation) {\r\n }\r\n\r\n renderSelection(canvas, context, compositeOperation) { \r\n }\r\n\r\n clearItems() {\r\n }\r\n \r\n cancelRequest() {\r\n\r\n }\r\n\r\n getHitItem(x, y) {\r\n return null;\r\n }\r\n\r\n hitTest(x, y) {\r\n return false;\r\n }\r\n\r\n getIntersections(bounds) {\r\n return null;\r\n }\r\n \r\n createOffscreenCanvas(canvas, width , height, clearRect) {\r\n if (this.offScreenCanvas == null || this.offScreenContext == null) {\r\n this.offScreenCanvas = document.createElement(\"canvas\", {alpha: true});\r\n let w = width != null ? width : canvas.canvas.width;\r\n let h = height != null ? height : canvas.canvas.height;\r\n\r\n this.offScreenCanvas.width = w;\r\n this.offScreenCanvas.height = h;\r\n this.offScreenCanvas.style.width = w + \"px\";\r\n this.offScreenCanvas.style.height = h + \"px\";\r\n\r\n // prevent anti-aliasing\r\n this.offScreenCanvas.imageSmoothingEnabled = true;\r\n this.offScreenContext = this.offScreenCanvas.getContext('2d');\r\n this.offScreenContext.globalCompositeOperation = 'source-over';\r\n }\r\n else if (clearRect == true || clearRect == undefined) {\r\n this.offScreenContext.clearRect(0, 0, this.offScreenCanvas.width, this.offScreenCanvas.height);\r\n this.offScreenContext.width = this.offScreenContext.width;\r\n }\r\n }\r\n\r\n resize(newWidth, newHeight) {\r\n if (this.offScreenCanvas != undefined) {\r\n this.offScreenCanvas.width = newWidth;\r\n this.offScreenCanvas.height = newHeight;\r\n this.offScreenCanvas.style.width = newWidth + \"px\";\r\n this.offScreenCanvas.style.height = newHeight + \"px\";\r\n }\r\n }\r\n} \r\n\r\n","import {MgLayer} from './layer';\r\nimport {Util} from '../core/index';\r\nimport MapEnums from '../map/enums';\r\nimport {Viewport} from '../drawing/viewport';\r\nimport {RestAPI} from '../api';\r\nimport {Rectangle, fromRect} from '../geometry/rectangle';\r\nimport {Envelope} from '../geometry/Envelope';\r\n\r\nfunction FixedQueue(fixedSize) {\r\n this.data = [];\r\n this.fixedSize = fixedSize == undefined ? 20 : fixedSize;\r\n}\r\n\r\nFixedQueue.prototype.add = function(record) {\r\n this.trimTail();\r\n this.data.unshift(record);\r\n}\r\n\r\nFixedQueue.prototype.trimTail = function(){\r\n\r\n if (this.data.length <= this.fixedSize){\r\n // No trimming, return out.\r\n return;\r\n }\r\n\r\n // Trim whatever is beyond the fixed size.\r\n Array.prototype.splice.call(\r\n this.data,\r\n this.fixedSize,\r\n (this.data.length - this.fixedSize)\r\n );\r\n};\r\n\r\nFixedQueue.prototype.remove = function() {\r\n this.data.pop();\r\n}\r\n\r\nFixedQueue.prototype.first = function() {\r\n return this.data[0];\r\n}\r\n\r\nFixedQueue.prototype.last = function() {\r\n return this.data[this.data.length - 1];\r\n}\r\n\r\nFixedQueue.prototype.size = function() {\r\n return this.data.length;\r\n}\r\n\r\nFixedQueue.prototype.isEmpty = function() {\r\n return this.data.length <= 0;\r\n}\r\n\r\nFixedQueue.prototype.removeAll = function() {\r\n return this.data = [];\r\n}\r\n\r\n\r\nexport class RasterInfo {\r\n constructor(envelope, rect, center, viewport) {\r\n this.Envelope = envelope;\r\n this.Rect = rect;\r\n this.Center = center;\r\n this.Viewport = viewport;\r\n\r\n this.Top = rect.top;\r\n this.Left = rect.left;\r\n this.Bottom = rect.bottom;\r\n this.Right = rect.right;\r\n\r\n this.ImageState = MapEnums.ImageStates.Initial;\r\n this.Image = null\r\n }\r\n\r\n // @method MinX(): Number\r\n\t// Returns the leftmost part of the bounding box.\r\n\tget MinX() {\r\n\t\treturn this.Envelope.MinX;\r\n\t}\r\n\r\n\t// @method MinX(): Number\r\n\t// Returns the rightmost part of the bounding box.\r\n\tget MaxX() {\r\n\t\treturn this.Envelope.MaxX;\r\n\t}\r\n\r\n\t// @method MinY(): Number\r\n\t// Returns the upper right of the bounding box.\r\n\tget MinY() {\r\n\t\treturn this.Envelope.MinY;\r\n\t}\r\n\r\n\t// @method MaxY(): Number\r\n\t// Returns the bottom right of the bounding box.\r\n\tget MaxY() {\r\n\t\treturn this.Envelope.MaxY;\r\n\t}\r\n\r\n\tget Width() {\r\n\t\treturn this.Rect.width;\r\n\t}\r\n\r\n\tget Height() {\r\n\t\treturn this.Rect.height;\r\n\t}\r\n}\r\n\r\nexport class MgImageLayer extends MgLayer {\r\n \r\n constructor(id, options, taskId) {\r\n super(id, options, taskId);\r\n this._image = null;\r\n this._scale = null;\r\n this.fixedQueue = new FixedQueue(20);\r\n this.rasters = null;\r\n\r\n this.previousRaster = null;\r\n this.raster = null;\r\n }\r\n\r\n // Factory methods\r\n static createObject(id, options) { \r\n return new MgImageLayer(id, options); \r\n }\r\n \r\n /** \r\n * @returns Promise(MgLayer)\r\n * @override\r\n */\r\n isLayerReady(canvas, cellsize) {\r\n let viewport = this._viewport;\r\n let __this = this;\r\n return new Promise((resolve, reject) => { \r\n \r\n if (__this.raster.ImageState == MapEnums.ImageStates.Loaded) { \r\n //__this.renderRaster(canvas.context, __this.raster, viewport);\r\n resolve(__this); \r\n } \r\n else if (__this.promise != null) {\r\n __this.promise.then(function(raster) {\r\n __this.renderRaster(canvas.context, __this.raster, viewport);\r\n resolve(__this);\r\n });\r\n } \t\t\t\t\t\t\t\t\t\t \r\n }); \r\n }\r\n \r\n getRasterInfo(extents, viewport, canvas) {\r\n \r\n this.raster = null;\r\n if (!this.fixedQueue.isEmpty()) {\r\n for (let i = 0; i < this.fixedQueue.data.length; i++) {\r\n let raster = this.fixedQueue.data[i];\r\n if (raster.Envelope.contains(extents)) {\r\n this.raster = raster;\r\n } \r\n }\r\n }\r\n\r\n if (this.raster == null) {\r\n let halfWidth = viewport.World.Width / 2;\r\n let halfHeight = viewport.World.Height / 2;\r\n\r\n let envelope = new Envelope(extents.MinX - halfWidth, extents.MaxX + halfWidth, extents.MinY - halfHeight, extents.MaxY + halfHeight);\r\n let rect = viewport.worldToClientRect(envelope);\r\n let rasterInfo = new RasterInfo(envelope, rect, envelope.Center, viewport);\r\n\r\n this.fixedQueue.add(rasterInfo);\r\n this.raster = rasterInfo;\r\n\r\n this.promise = this.loadImage(this.raster, \r\n this.raster.MinX, \r\n this.raster.MaxX, \r\n this.raster.MinY, \r\n this.raster.MaxY, \r\n this.map.options.Projection, \r\n this.raster.Width, \r\n this.raster.Height);\r\n\r\n let __this = this;\r\n this.promise.then(function(raster) {\r\n __this.promise = null; \r\n //__this.renderRaster(canvas.context, __this.raster, viewport);\r\n }); \r\n }\r\n\r\n return this.raster;\r\n }\r\n\r\n renderRaster(context, rasterInfo, viewport) {\r\n if (rasterInfo.Image != null)\r\n {\r\n let imageRect = viewport.worldToClientRect(rasterInfo.Envelope);\r\n context.drawImage(rasterInfo.Image, 0, 0, rasterInfo.Image.width, rasterInfo.Image.height, imageRect.left, imageRect.top, imageRect.width, imageRect.height);\r\n }\r\n }\r\n\r\n onAdd(map) {\r\n\t\tthis._levels = {};\r\n\t\tthis._tiles = {};\r\n }\r\n \r\n /**\r\n * @param {Bounds} rcMap\r\n * @param {LatLngBounds} newExtents\r\n * @param {Number} cellsize\r\n * @param {Number} scale\r\n */\r\n onExtentsChanged(sourceEvent, rcMap, extents, cellsize, scale, canvas, xOffset, yOffset) {\r\n console.log('onExtentsChanged - ImageLayer');\r\n \r\n var disposableViewPort = this._viewport;\r\n this.previousRaster = this.raster;\r\n \r\n let scaleChanged = this._scale == undefined || this._scale != scale ? true : false;\r\n this._scale = scale;\r\n\r\n if (this.isVisible(scale)) {\r\n if (disposableViewPort != null && disposableViewPort.World.equals(extents))\r\n disposableViewPort = null; // just re-use the current\r\n else {\r\n this._viewport = new Viewport(rcMap, extents, cellsize, scale);\t\t\t\t\t \r\n }\r\n \r\n if (scaleChanged)\r\n this.fixedQueue.removeAll();\r\n\r\n this.getRasterInfo(extents, this._viewport, canvas);\r\n\r\n if (this.raster != null && this.raster.ImageState == MapEnums.ImageStates.Loaded) { \r\n this.renderRaster(canvas.context, this.raster, this._viewport);\r\n } \r\n }\r\n else {\r\n this._viewport = null;\r\n }\r\n \r\n return true;\r\n }\r\n \r\n render(canvas, force, context, compositeOperation) { \r\n console.log('render - ImageLayer - start ' + this.id); \r\n \r\n if (!canvas.isPanning) {\r\n\r\n context.save();\r\n if (compositeOperation)\r\n context.globalCompositeOperation = compositeOperation;\r\n \r\n if (this.raster.Image != null) {\r\n this.renderRaster(context, this.raster, this._viewport);\r\n }\r\n\r\n context.restore();\r\n }\r\n \r\n console.log('render - ImageLayer - end ' + this.id); \r\n }\r\n\r\n /**\r\n * @param {MgCanvas} canvas\r\n * @override\r\n */\r\n refreshView(canvas) { \r\n if(this._image)\r\n canvas.drawImage(this._image, 0, 0); \r\n } \r\n\r\n get defaultOptions() {\r\n\t var _defaultOptions = {\r\n minZoom: 0, // Number\r\n maxZoom: 18, // Number\r\n errorImageUrl: '', // String\r\n\r\n // @option crossOrigin: Boolean|String = false\r\n // Whether the crossOrigin attribute will be added to the tiles.\r\n // If a String is provided, all tiles will have their crossOrigin attribute set to the String provided. This is needed if you want to access tile pixel data.\r\n // Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.\r\n crossOrigin: false\r\n }\r\n\r\n\t\t_defaultOptions = Util.mergeOptions(_defaultOptions, this.getWCLayerOptions())\r\n return _defaultOptions;\r\n\t}\r\n\r\n getWCLayerOptions() {\r\n\t\tlet parentOptions = super.getWCLayerOptions();\r\n\r\n\t\tlet layerOptions = { \r\n\t\t\tOpacity: 1.0 // Number = 1.0\r\n }\r\n \r\n\t\tlayerOptions = Util.mergeOptions(parentOptions, layerOptions);\r\n\t\treturn layerOptions;\r\n }\r\n \r\n loadImage(rasterInfo, MinX, MaxX, MinY, MaxY, projection, width, height) {\r\n let url = RestAPI.BaseUrl + `RasterQuery?token=${RestAPI.AccessToken}&datasetId=${this.options.Dataset}&MinX=${MinX}&MaxX=${MaxX}&MinY=${MinY}&MaxY=${MaxY}&projection=${projection}&width=${width}&height=${height}`;\r\n \r\n return new Promise((resolve, reject) => {\r\n if (rasterInfo.ImageState == MapEnums.ImageStates.Loaded)\r\n resolve(rasterInfo);\r\n else {\r\n rasterInfo.Image = new Image();\r\n rasterInfo.ImageState = MapEnums.ImageStates.Loading; \r\n\r\n rasterInfo.Image.addEventListener(\"load\", () => {\r\n rasterInfo.ImageState = MapEnums.ImageStates.Loaded;\r\n resolve(rasterInfo);\r\n });\r\n\r\n rasterInfo.Image.addEventListener(\"error\", err => {\r\n rasterInfo.ImageState = MapEnums.ImageStates.Failed;\r\n resolve(rasterInfo);\r\n });\r\n\r\n rasterInfo.Image.src = url;\r\n }\r\n });\r\n } \r\n}","import {TileSource} from './tilesource';\r\n\r\nexport class OpenStreetMapTileSource extends TileSource\r\n{\r\n // @section Constructors\r\n\r\n constructor(map) {\r\n super(map);\r\n }\r\n\r\n // @section Properties\r\n\r\n // @section TileSource Methods\r\n\r\n getTileUrl(level, col, row) {\r\n let domains = ['a','b','c'];\r\n let i = (col + row) % domains.length;\r\n\r\n var sTileUrl = `https://${domains[i]}.tile.openstreetmap.org/${level}/${col}/${row}.png`\r\n \r\n //This is what the client uses\r\n //var sTileUrl = `https://maps.wikimedia.org/osm-intl/${level}/${col}/${row}.png`;\r\n\r\n //var sTileUrl = `https://tile.openstreetmap.org/${level}/${col}/${row}.png`\r\n return sTileUrl;\r\n }\r\n\r\n}","import {TileSource} from './tilesource';\r\n\r\nexport class EsriTileSource extends TileSource\r\n{\r\n // @section Constructors\r\n\r\n constructor(map, name, url) {\r\n super(map);\r\n this.url = url;\r\n this.name = name.replace(/ /g, '_');\r\n }\r\n\r\n // @section Properties\r\n\r\n // @section TileSource Methods\r\n\r\n getTileUrl(level, col, row) {\r\n \r\n var sTileUrl = `${this.url}/${this.name}/MapServer/tile/${level}/${row}/${col}`;\r\n return sTileUrl;\r\n }\r\n\r\n}","import {TileSource} from './tilesource';\r\n\r\nexport class GoogleTileSource extends TileSource\r\n{\r\n // @section Constructors\r\n\r\n constructor(map) {\r\n super(map);\r\n }\r\n\r\n // @section Properties\r\n\r\n // @section TileSource Methods\r\n\r\n getTileUrl(level, col, row) { \r\n let seclen = ((col * 3) + row) % 8;\r\n let serverNum = (col + 2 * row) % 4;\r\n let sec1 = (row >= 10000 && row < 100000) ? \"&s=\" : '';\r\n let sec2 = \"Galileo\".substring(0, seclen);\r\n\r\n //String.Format(\"http://{0}{1}.google.com/{2}/{10}={3}&hl={4}&x={5}{6}&y={7}&z={8}&s={9}\", \"mt\", serverNum, \"vt\", \"m@130\", \"English\", col, sec1, row, level, sec2, \"lyrs\");\r\n let sTileUrl = `https://mt${serverNum}.google.com/vt/lyrs=m@130&hl=en&x=${col}${sec1}&y=${row}&z=${level}&s=${sec2}`;\r\n\r\n //var sTileUrl = `https://${domains[i]}.tile.openstreetmap.org/${level}/${col}/${row}.png`\r\n //var sTileUrl = `https://mt0.google.com/vt/lyrs=s&hl=en&x=${col}&y=${row}&z=${level}&s=Ga`;\r\n return sTileUrl;\r\n }\r\n\r\n}","import {TileSource} from './tilesource';\r\n\r\nexport class WMTSTileSource extends TileSource\r\n{\r\n // @section Constructors\r\n\r\n constructor(map) {\r\n super(map);\r\n }\r\n\r\n // @section Properties\r\n\r\n // @section TileSource Methods\r\n\r\n setLayer(layer){\r\n this._layer = layer.replace(\" \", \"_\");\r\n }\r\n\r\n getTileUrl(level, col, row) {\r\n let url = \"https://tiles.metromap.com.au/wmts\";\r\n let username = 'hmcdonald';\r\n let password = 'Mipela2021';\r\n let version = 'Auto';\r\n let service = 'WMTS';\r\n let request = 'GetTile'\r\n let style= 'default';\r\n let format = 'image/png';\r\n let tileMatrixSet = 'GoogleMapsCompatibleExt:epsg:3857'\r\n let tileMatrix = level;\r\n\r\n // have to double the tiles for wmts\r\n\r\n col = col;\r\n row = row;\r\n\r\n \r\n let domains = ['a','b','c'];\r\n\r\n let i = (col + row) % domains.length;\r\n\r\n var sTileUrl = `${url}?service=${service}&request=${request}&version=${version}&layer=${this._layer}&style=${style}&format=${format}&tileMatrixSet=${tileMatrixSet}&tileMatrix=${tileMatrix}&tileRow=${row}&tileCol=${col}`;\r\n \r\n\r\n return sTileUrl;\r\n }\r\n\r\n}\r\n","import {MgLayer} from './layer';\r\nimport {Util} from '../core/index';\r\n\r\nimport {Point} from '../geometry/Point';\r\nimport {Bounds} from '../geometry/Bounds';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\nimport {LatLngBounds, toLatLngBounds as latLngBounds} from '../geometry/LatLngBounds';\r\nimport {Envelope} from '../geometry/Envelope';\r\nimport {TileViewport} from '../drawing/tileviewport';\r\nimport {OpenStreetMapTileSource} from './OpenStreetMapTileSource';\r\nimport {EsriTileSource} from './EsriTileSource';\r\nimport {GoogleTileSource} from './GoogleTileSource';\r\nimport {WMTSTileSource} from './WMTSTileSource';\r\nimport {TileSource} from './tilesource';\r\nimport {LoadStates} from '../layer/tile';\r\nimport { MapEnums } from '../map/enums';\r\nimport {cancelable, CancelablePromise} from 'cancelable-promise';\r\n\r\nexport class MgTileLayer extends MgLayer {\r\n \r\n constructor(id, options, taskId) {\r\n super(id, options, taskId);\r\n\t\tthis._tiles = {};\r\n\t\tthis._levels = {};\r\n\t\tthis._viewport = null;\r\n\r\n\t\tlet sType = \"\";\r\n\t\tthis.promise = undefined;\r\n }\r\n\r\n // Factory methods\r\n /**\r\n * @param {number} id\r\n * @param {json} options\r\n */\r\n static createObject(id, options) { \r\n return new MgTileLayer(id, options); \r\n }\r\n\r\n isLayerReadyDebounce(canvas){\r\n\tconst debounced = Util.debouncePromise(this.isLayerReady, 1000);\r\n\r\n\treturn debounced(canvas, this);\r\n }\r\n\t\t\r\n\t/** \r\n * @returns Promise(MgLayer)\r\n * @virtual\r\n */\r\n isLayerReady(canvas) {\r\n\t\tlet __this = this;\r\n\r\n\t\treturn new Promise((resolve, reject) => { \r\n\t\t if (__this.promiseAll != null) {\t\t\r\n\t\t\t\t__this.promiseAll.then(tiles => { \r\n\t\t\t\t\ttiles.forEach( tile => {\r\n\t\t\t\t\t\t__this._viewport.renderTile(tile);\r\n\t\t\t\t\t});\r\n\t\t\t\t\t__this.promiseAll = undefined; \r\n\t\t\t\t\tresolve(__this);\r\n\t\t\t\t})\r\n\t\t\t\t.catch(error => {\r\n\t\t\t\t\t__this.promiseAll = undefined;\r\n\t\t\t\t\tconsole.log(error);\r\n\t\t\t\t\treject(__this);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t__this.promiseAll = undefined;\t\t\t\t\r\n\t\t\t\tresolve(__this);\r\n\t\t\t}\r\n\t\t});\t\t\r\n\t\t\r\n }\r\n\r\n\tspiralize(tiles) {\r\n\t\tvar aSpiral = [];\r\n // No need to have the number of rows and columns passed as arguments:\r\n // We can get that information from the array:\r\n var rows = tiles.length;\r\n var cols = tiles[0].length;\r\n\t\t// Set \"current\" cell to be outside array: it moves into it in first inner loop\r\n\t\tvar step = 0;\r\n var row = 0;\r\n\t\tvar col = -1;\r\n\t\tvar tile = null;\r\n var direction = 1; // Can be 1 for forward and -1 for backward\r\n while (rows > 0 && cols > 0) {\r\n\t\t\t// Print cells along one row\r\n\t\t\tfor (step = 0; step < cols; step++) {\r\n\t\t\t\tcol += direction;\r\n\t\t aSpiral.push(tiles[row][col]);\r\n\t\t\t\t\r\n\t\t\t}\r\n\t\t\t// As we have printed a row, we have fewer rows left to print from:\r\n\t\t\trows--;\r\n\t\t\t// Print cells along one column\r\n\t\t\tfor (step = 0; step < rows; step++) {\r\n\t\t\t\trow += direction;\r\n\t\t\t\taSpiral.push(tiles[row][col]);\t\t\r\n\t\t\t}\r\n\t\t\t// As we have printed a column, we have fewer columns left to print from:\r\n\t\t\tcols--;\r\n\t\t\t// Now flip the direction between forward and backward\r\n\t\t\tdirection = -direction;\r\n\t\t}\r\n\t\t\r\n\t\treturn aSpiral;\r\n }\r\n\r\n /**\r\n * @param {Bounds} rcMap\r\n * @param {LatLngBounds} newExtents\r\n * @param {Number} cellsize\r\n * @param {Number} scale\r\n */\r\n onExtentsChanged(sourceEvent, rcMap, extents, cellsize, scale, canvas) {\r\n\t\tconsole.log('onExtentsChanged - TileLayer');\r\n\t\tvar disposableViewPort = this._viewport;\r\n\r\n\t\tif (this.isVisible(scale)) {\r\n\t\t\t// if (disposableViewPort != null && disposableViewPort.World.equals(extents)) {\r\n\t\t\t// \tdisposableViewPort = null; // just re-use the current\r\n\t\t\t// } else {\t\t\r\n\t\t\t\tthis._viewport = new TileViewport(rcMap, extents, cellsize, scale, this._tileSource, canvas, this.options.Opacity);\t \t\t\t\t\r\n\t\t\t\tthis.scale = scale;\r\n\t\t\t\tthis.getTiles(extents, this._viewport, canvas, cellsize); \r\n\t\t\t// }\r\n \t} else\r\n\t\t\tthis._viewport = null;\r\n\t\t\t \r\n\t\t// if (disposableViewPort != null)\r\n\t\t// {\r\n\t\t// \tdisposableViewPort.dispose(this._tileSource, Date.now());\r\n\t\t// \tthis._tileSource.cleanup();\r\n\t\t// }\r\n\r\n \treturn true;\r\n\t}\r\n\t\r\n\tworldToClientRect(envelope, World, Client, Cellsize)\r\n\t{\r\n\t\treturn new Rectangle(Client.MinX + Math.floor((envelope.MinX - World.MinX) / Cellsize), \r\n\t\t\t\t\t\t\t\t\t\t\tClient.MinY + Math.floor((World.MaxY - envelope.MaxY) / Cellsize), \r\n\t\t\t\t\t\t\t\t\t\t\tClient.MinX + Math.ceil((envelope.MaxX - World.MinX) / Cellsize), \r\n\t\t\t\t\t\t\t\t\t\t\tClient.MinY + Math.ceil((World.MaxY - envelope.MinY) / Cellsize), true);\r\n\t}\r\n\r\n\tgetTiles(extents, viewport, canvas, cellsize) { \r\n\t\tif (this.cancelable != null) {\r\n\t\t\t\tthis.cancelable.cancel();\r\n\t\t\t\tthis.cancelable = null;\r\n\r\n\t\t}\r\n\r\n\t\tlet tilePromises = [];\r\n\r\n\t\tif (this._viewport != null && this._viewport.tiles.length > 0) {\r\n\t\t\tlet tiles = this.spiralize(this._viewport.tiles);\r\n\t\t\tfor (let i = tiles.length - 1; i >= 0; i--) {\r\n\t\t\t\tlet tile = tiles[i];\r\n\t\t\t\tif (tile.image == null && tile.imageUrl != null && tile.imageUrl.length > 0) { \r\n\t\t\t\t\ttilePromises.push(tile.loadImage(tile.imageUrl));\r\n\t\t\t\t}\t\t\t\t\r\n\t\t\t}\r\n\r\n\t\t\tthis.promiseAll = Promise.all(tilePromises);\r\n\r\n\t\t\t// this.cancelable = cancelable(this.promiseAll);\r\n\t\t} \r\n\t} \r\n\t\r\n refreshView(canvas) {\r\n\t\tconsole.log('refreshView - TileLayer');\r\n\t\tif ( this._viewport != undefined) {\r\n\t\t\tthis._viewport.render(canvas, this._tileSource,1.0);\r\n\t\t}\r\n\t\t\r\n\t\t//canvas.refreshView();\r\n } \r\n\r\n // @section\r\n // @aka TileLayer options\r\n get defaultOptions() {\r\n\t var _defaultOptions = {\r\n\t\t tileSize: 256, \t\t// Number\r\n minZoom: 0, \t\t\t// Number\r\n maxZoom: 18, \t\t\t// Number\r\n errorTileUrl: '', // String\r\n\r\n // @option crossOrigin: Boolean|String = false\r\n // Whether the crossOrigin attribute will be added to the tiles.\r\n // If a String is provided, all tiles will have their crossOrigin attribute set to the String provided. This is needed if you want to access tile pixel data.\r\n // Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.\r\n crossOrigin: false\r\n }\r\n\r\n\t\t_defaultOptions = Util.mergeOptions(_defaultOptions, this.getWCLayerOptions())\r\n return _defaultOptions;\r\n\t}\r\n\r\n\tgetWCLayerOptions() {\r\n\t\tlet parentOptions = super.getWCLayerOptions();\r\n\r\n\t\tlet layerOptions = { \r\n\t\t\tOpacity: 1.0, \t\t// Number = 1.0\r\n\t\t\tDatasource: {\r\n\t\t\t\tType: null, \t\t// MapEnums.DatasourceTypes\r\n\t\t\t\tUrl: null, \t\t\t// String\r\n\t\t\t\tKey: null \t\t\t// String\r\n\t\t\t}\r\n\t\t}\r\n\t\tlayerOptions = Util.mergeOptions(parentOptions, layerOptions);\r\n\t\treturn layerOptions;\r\n\t}\r\n\t\r\n\t/**\r\n\t * @param {} map\r\n\t */\r\n\tonAdd(map) {\r\n\t\tthis._levels = {};\r\n\t\tthis._tiles = {};\r\n\r\n\t\tif (this.options.Datasource.Type == 'OpenStreetMap')\r\n\t\t\tthis._tileSource = new OpenStreetMapTileSource(map);\r\n\t\telse if (this.options.Datasource.Type == 'EsriRestService')\t\r\n\t\t\tthis._tileSource = new EsriTileSource(map, this.options.Name, this.options.Datasource.Url);\r\n\t\telse if (this.options.Datasource.Type == 'GoogleStreetMap')\t\r\n\t\t\tthis._tileSource = new GoogleTileSource(map, this.options.Name);\t\r\n\t\telse if (this.options.Datasource.Type == 'WMTS'){\r\n\t\t\tthis._tileSource = new WMTSTileSource(map);\r\n\t\t\tthis._tileSource.setLayer(this.options.Name);\r\n\t\t}\r\n\t\telse\t\r\n\t\t this._tileSource = new TileSource(map);\r\n\t\t\r\n\t}\r\n\t/**\r\n\t * @param {} map\r\n\t */\r\n\tbeforeAdd(map) {\r\n\t\tmap._addZoomLimit(this);\r\n\t}\r\n\t/**\r\n\t * @param {} map\r\n\t */\r\n\tonRemove(map) {\r\n\t\tDomUtil.remove(this._container);\r\n\t\tthis._container = null;\r\n\t\tthis._tileZoom = undefined;\r\n\t}\r\n\r\n\t// @method bringToFront: this\r\n\t// Brings the tile layer to the top of all tile layers.\r\n\t/**\r\n\t */\r\n\tbringToFront() {\r\n\t\tif (this._map) {\r\n\t\t\tDomUtil.toFront(this._container);\r\n\t\t\tthis._setAutoZIndex(Math.max);\r\n\t\t}\r\n\t\treturn this;\r\n\t}\r\n\r\n\t// @method bringToBack: this\r\n\t// Brings the tile layer to the bottom of all tile layers.\r\n\tbringToBack() {\r\n\t\tif (this._map) {\r\n\t\t\tDomUtil.toBack(this._container);\r\n\t\t\tthis._setAutoZIndex(Math.min);\r\n\t\t}\r\n\t\treturn this;\r\n\t}\r\n\r\n\t// @method setOpacity(opacity: Number): this\r\n\t// Changes the [opacity](#gridlayer-opacity) of the grid layer.\r\n\tsetOpacity(opacity) {\r\n\t\tthis.options.opacity = opacity;\r\n\t\tthis._updateOpacity();\r\n\t\treturn this;\r\n\t}\r\n\r\n\t// @method setZIndex(zIndex: Number): this\r\n\t// Changes the [zIndex](#gridlayer-zindex) of the grid layer.\r\n\tsetZIndex(zIndex) {\r\n\t\tthis.options.zIndex = zIndex;\r\n\t\tthis._updateZIndex();\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t// @method isLoading: Boolean\r\n\t// Returns `true` if any tile in the grid layer has not finished loading.\r\n\tisLoading() {\r\n\t\treturn this._loading;\r\n\t}\r\n\r\n\t// @method redraw: this\r\n\t// Causes the layer to clear all the tiles and request them again.\r\n\tredraw() {\r\n\t\tif (this._map) {\r\n\t\t\tthis._update();\r\n\t\t}\r\n\t\treturn this;\r\n\t}\r\n\r\n getTileSize() {\r\n\t\tvar s = this.options.tileSize;\r\n\t\treturn s instanceof Point ? s : new Point(s, s);\r\n\t}\r\n\r\n\t// @method render: canvas\r\n\t// Causes the layer to clear all the tiles and request them again.\r\n\trender(canvas, force, context, compositeOperation) {\r\n\t\tif ( this._viewport != undefined) {\r\n\t\t\tthis._viewport.render(canvas, force, context, compositeOperation);\r\n\t\t}\r\n\r\n\t\tcanvas.refreshView();\r\n\t}\r\n\t\r\n\thitTest(x, y) {\r\n return false; \r\n }\r\n}\r\n\r\nexport class MgOSMTileLayer extends MgTileLayer {\r\n\r\n}","import { MgLayer, MgGeocoderLayer } from './layer';\r\nimport { Viewport } from '../drawing/viewport';\r\nimport { RestAPI } from '../api';\r\nimport { Feature } from './feature';\r\nimport Axios from \"axios\";\r\nimport MapEnums from '../map/enums';\r\nimport { Util } from '../core/index';\r\nimport { Stroke, Fill, Symbol, Label, Hover } from '../drawing/index';\r\nimport { Bounds, toBoundsFromRect, LatLng, QuadTree } from '../geometry/index';\r\nimport { Rectangle, fromRect } from '../geometry/rectangle';\r\nimport { Envelope } from '../geometry/Envelope';\r\nimport { cancelable, CancelablePromise } from 'cancelable-promise';\r\nimport { WktReader } from '../geometries/index';\r\n\r\nexport class MgFeatureLayer extends MgLayer {\r\n\r\n constructor(id, options, taskId) {\r\n super(id, options, taskId);\r\n this._image;\r\n this.quadTree = null;\r\n this.quadTrees = [];\r\n this._viewport = null;\r\n this.coordinates = [];\r\n this._context = null;\r\n this._features = [];\r\n this._visibleItems = [];\r\n this.promise = undefined;\r\n this.searchFeaturesPromise = undefined;\r\n this.scale = undefined;\r\n this.selected = [];\r\n this.tracked = [];\r\n this.thematics = [];\r\n this.customStyles = [];\r\n this.hasThematics = false;\r\n this.hasStyle = false;\r\n this.hoverTemplate = null;\r\n this.currentBounds = null;\r\n this.isGeocoder = false;\r\n this.cellsize = 0;\r\n this.worker = null;\r\n if (this.options.MaxScale != null)\r\n this.maxScale = this.options.MaxScale;\r\n else if (this.options.objJSON != null && this.options.objJSON.MaxScale != null)\r\n this.maxScale = this.options.MaxScale;\r\n else\r\n this.maxScale = Number.POSITIVE_INFINITY;\r\n\r\n this.backgroundLayer = this.options.BackgroundLayer == true ? true : false;\r\n\r\n this.count = 0;\r\n\r\n this.createDefaultStyles(this.options.Symbology, this.options.Label);\r\n this.createCustomStyles(this.options.Thematics);\r\n this.processSearchColumns();\r\n this.checkContextualType();\r\n\r\n this.loadedExtents = [];\r\n\r\n }\r\n\r\n // Factory methods\r\n static createObject(id, options, taskId) {\r\n return new MgFeatureLayer(id, options, taskId);\r\n }\r\n\r\n showLayer(sourceEvent, show) {\r\n this.visible = show;\r\n if (this.map != null) {\r\n if (show == true) {\r\n if (this.options.ContextLayer == false && this.isGeocoder == false) {\r\n this.clearItems();\r\n this._viewport = null;\r\n this.currentExtents = null;\r\n }\r\n else {\r\n this.currentExtents = null;\r\n }\r\n\r\n this.onExtentsChanged(sourceEvent, this.map.rcMap, this.map.extents, this.map.cellsize, this.map.scale, this.map.canvas);\r\n }\r\n\r\n this.map.refreshView();\r\n }\r\n }\r\n\r\n showThematics(index, show) {\r\n if (index == -1) {\r\n for (var i = 0; i < this.thematics.length; i++) {\r\n this.thematics[i] = show;\r\n }\r\n\r\n this.visible = show;\r\n }\r\n else if (index < this.thematics.length) {\r\n this.thematics[index] = show;\r\n\r\n this.visible = false;\r\n // check if any thematic is enabled\r\n for (let i = 0; i < this.thematics.length; i++) {\r\n if (this.thematics[i] == true) {\r\n this.visible = true;\r\n break;\r\n }\r\n }\r\n\r\n }\r\n\r\n if (this.map != null) {\r\n if (this.options.ContextLayer == false && this.isGeocoder == false) {\r\n this.clearItems();\r\n this.quadTree = null;\r\n this._viewport = null;\r\n this.currentExtents = null;\r\n }\r\n else {\r\n this.currentExtents = null;\r\n }\r\n\r\n this.onExtentsChanged(MapEnums.SourceEvents.ShowThematics, this.map.rcMap, this.map.extents, this.map.cellsize, this.map.scale, this.map.canvas);\r\n this.map.refreshView();\r\n }\r\n\r\n }\r\n\r\n isVisible(scale) {\r\n\r\n return (this.options.MaxScale >= scale || this.options.MaxScale == null) && (this.options.MinScale <= scale || this.options.MinScale == null) ? this.visible && this.hasStyle : false;\r\n\r\n // return this.maxScale >= scale ? this.visible && this.hasStyle : false; \r\n }\r\n\r\n clearItems() {\r\n this._visibleItems.length = 0;\r\n if (this.options.ContextLayer == false &&\r\n this.isGeocoder == false &&\r\n (!this.options.ContextualType || this.options.ContextualType != \"ShowOnlyRelatedFeatures\"))\r\n this._features.length = 0;\r\n this.promise = undefined;\r\n }\r\n\r\n isLayerReadyDebounce(canvas, cellsize) {\r\n\r\n\r\n this.isDebouncing.next(true);\r\n\r\n const debounced = Util.debouncePromise(this.isLayerReadyToDebounce, 1000);\r\n\r\n return debounced(canvas, cellsize, this);\r\n\r\n }\r\n\r\n /* \r\n * @returns Promise(MgLayer)\r\n * @override\r\n * \r\n */\r\n isLayerReady(canvas, cellsize) {\r\n\r\n\r\n let ctx = this.offScreenContext;\r\n return new Promise(function (resolve, reject) {\r\n\r\n if (this.workerPromise != null) {\r\n this.isDebouncing.next(false);\r\n\r\n this.workerPromise.then(function (layer) {\r\n resolve(this);\r\n }.bind(this));\r\n }\r\n else if (this.callFeatureQuery == true) {\r\n let viewport = this._viewport;\r\n\r\n this.guid = this.uuidv4();\r\n\r\n \r\n this.callRestApiFeatureQuery().then(function (response) {\r\n this.map.changeLoadingStatus({id: this._id, loading: false});\r\n\r\n if (response.status == 200 && response.status < 400) {\r\n let data = response.data;\r\n let newFeatures = [];\r\n let geometries = [];\r\n\r\n let quadTree = new QuadTree(viewport.World);\r\n this.quadTree = quadTree;\r\n\r\n\r\n if (data.Results != null) {\r\n for (var i = 0; i < data.Results.length; i++) {\r\n\r\n let values = data.Results[i];\r\n let thematicIndex = data.Thematics.length > 0 ? data.Thematics[i] : -1;\r\n if ((this.hasThematics == true && thematicIndex > -1) || this.hasThematics == false) {\r\n let feature = new Feature(this, this.columns, values, data.Geometries[i], data.Ids[i], data.FeatureNames[i], this.geometryFieldId, thematicIndex);\r\n newFeatures.push(feature);\r\n\r\n var envelope = null;\r\n if (data.Bounds[i] != null)\r\n envelope = new Envelope(data.Bounds[i][0], data.Bounds[i][1], data.Bounds[i][2], data.Bounds[i][3]);\r\n\r\n if (feature.Shape != null && envelope != null) {\r\n feature.Shape.Geometry.Bounds = envelope;\r\n //geometries.push(feature.Shape.Geometry);\r\n quadTree.insertFeature(feature, feature.Shape.Geometry.Bounds, 0);\r\n }\r\n }\r\n }\r\n this.currentBounds = new Envelope(data.MinX, data.MaxX, data.MinY, data.MaxY);\r\n\r\n }\r\n \r\n this._features = newFeatures;\r\n\r\n if (window.Worker) {\r\n var visibleFeatures = [];\r\n this.quadTree.getIntersectingFeatures(visibleFeatures, viewport.World);\r\n\r\n for (let feature of visibleFeatures) {\r\n if (feature.Shape != null) {\r\n geometries.push(feature.Shape.Geometry);\r\n }\r\n }\r\n\r\n this.worker = new Worker(WORKER_DIR);\r\n this.map.changeLoadingStatus({id: 'WORKER'+this._id, loading: true});\r\n\r\n\r\n this.worker.onmessage = function (e) {\r\n\r\n\r\n \r\n this._visibleItems = visibleFeatures;\r\n\r\n for (let i = 0; i < visibleFeatures.length; i++) {\r\n let feature = visibleFeatures[i];\r\n if (feature.Shape != null && e.data.Points[i] != null) {\r\n feature.Shape.Geometry.setWorldToClient(viewport, e.data.Points[i]);\r\n feature.Shape._points = e.data.Points[i];\r\n\r\n // when enabled, this bit of code renders the shape in it's hovered state\r\n\r\n // if (this.map.hoverItem){\r\n // if (this.map.hoverItem.id){\r\n // // to confirm that the hoverItem and the feature are the same item, we have to match both id and \r\n // // _featureName. This is due to some features having no id\r\n // if (this.map.hoverItem.id == feature.id && this.map.hoverItem._featureName == feature._featureName){\r\n // feature.hovering = true;\r\n // } \r\n\r\n // } else if (this.map.hoverItem._featureName == feature._featureName){\r\n // // no id, for instance QLD LGA\r\n // feature.hovering = true;\r\n // }\r\n // }\r\n\r\n\r\n //If Map Activity has Search query fields (Show Results button has to be clicked), featureQuery is called twice.\r\n //Once in setView and another after zoomToGeometryBounds.\r\n //We prevent layer from being drawn in advance\r\n if (!this.map.options.HasQueryFields) {\r\n\r\n // feature.Shape.render(canvas, 1, ctx);\r\n // feature.Shape.render(canvas, 1, canvas.context);\r\n }\r\n }\r\n }\r\n\r\n this.map.changeLoadingStatus({id: 'WORKER'+this._id, loading: false});\r\n\r\n this.worker.terminate();\r\n\r\n resolve(this);\r\n this.cancelable = undefined;\r\n this.source = undefined;\r\n this.promise = undefined;\r\n\r\n this.getVisibleFeatures(viewport.World, canvas, this._map._scale, visibleFeatures);\r\n\r\n\r\n }.bind(this);\r\n\r\n\r\n\r\n const payload = {\r\n World: this._viewport.World,\r\n Client: this._viewport.Client,\r\n CheckVisibility: false,\r\n CellSize: cellsize,\r\n Geometries: geometries,\r\n };\r\n \r\n\r\n this.worker.postMessage(payload);\r\n this.isDebouncing.next(false);\r\n\r\n this.geometries = geometries;\r\n\r\n }\r\n else {\r\n\r\n this._features = newFeatures;\r\n canvas.context.globalCompositeOperation = 'source-over';\r\n this.getVisibleFeatures(viewport.World, canvas, this.scale);\r\n\r\n \r\n this.isDebouncing.next(false);\r\n resolve(this);\r\n }\r\n }\r\n }.bind(this));\r\n }\r\n else if (this.searchFeaturesPromise != null) {\r\n\r\n this.searchFeaturesPromise.then(function (response) {\r\n this.searchFeaturesPromise = undefined;\r\n this.isDebouncing.next(false);\r\n\r\n resolve(this);\r\n }.bind(this));\r\n }\r\n else {\r\n // console.log(`isLayerReady - featureLayer - end ${this.id}`); \r\n if (this.offScreenCanvas != null && this.offScreenCanvas.width > 0)\r\n canvas.drawImage(this.offScreenCanvas, 0, 0, canvas.context);\r\n\r\n this.isDebouncing.next(false);\r\n\r\n\r\n resolve(this);\r\n }\r\n\r\n }.bind(this));\r\n }\r\n\r\n uuidv4() {\r\n return ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, c =>\r\n (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)\r\n );\r\n }\r\n \r\n render(canvas, force, context, compositeOperation) {\r\n\r\n let ctx = this.offScreenContext;\r\n\r\n if (compositeOperation)\r\n context.globalCompositeOperation = compositeOperation;\r\n\r\n if (force) {\r\n for (var i = 0; i < this._visibleItems.length; i++) {\r\n var feature = this._visibleItems[i];\r\n if (feature.Shape && !feature.Selected && !feature.hovering) {\r\n feature.worldToClient(this._viewport, true);\r\n feature.Shape.draw(canvas, 1, ctx);\r\n } else if (feature.Shape && !feature.Selected && feature.hovering) {\r\n feature.worldToClient(this._viewport, true);\r\n feature.Shape.drawHover(canvas, 1, ctx);\r\n }\r\n }\r\n\r\n }\r\n\r\n if (this.offScreenCanvas != null && this.offScreenCanvas.width > 0)\r\n canvas.drawImage(this.offScreenCanvas, 0, 0, context);\r\n\r\n if (canvas.context == context) {\r\n if (this.selected.length > 0) {\r\n for (var i = 0; i < this.selected.length; i++) {\r\n this.selected[i].worldToClient(this._viewport, true);\r\n this.selected[i].Shape.drawSelected(canvas, 1, canvas.context);\r\n }\r\n }\r\n }\r\n\r\n\r\n }\r\n\r\n renderTracked(canvas, context, compositeOperation) {\r\n if (compositeOperation)\r\n context.globalCompositeOperation = compositeOperation;\r\n\r\n if (this.tracked.length > 0) {\r\n for (var i = 0; i < this.tracked.length; i++) {\r\n this.tracked[i].Shape.drawTracked(canvas, 1, context);\r\n }\r\n }\r\n }\r\n\r\n renderSelection(canvas, context, compositeOperation) {\r\n if (compositeOperation)\r\n context.globalCompositeOperation = compositeOperation;\r\n\r\n if (this.selected.length > 0) {\r\n for (var i = 0; i < this.selected.length; i++) {\r\n this.selected[i].Shape.drawSelected(canvas, 1, context);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @param {Bounds} rcMap\r\n * @param {LatLngBounds} newExtents\r\n * @param {Number} cellsize\r\n * @param {Number} scale\r\n */\r\n onExtentsChanged(sourceEvent, rcMap, extents, cellsize, scale, canvas) {\r\n\r\n this.createOffscreenCanvas(canvas);\r\n var disposableViewPort = this._viewport;\r\n if (this.isVisible(scale)) {\r\n // if (disposableViewPort != null && disposableViewPort.World.equals(extents)) {\r\n // disposableViewPort = null; // just re-use the current\r\n // this.getVisibleFeatures(extents, canvas, scale);\r\n // }\r\n // else {\r\n this._viewport = new Viewport(rcMap, extents, cellsize, scale);\r\n let isNewScale = this.scale == undefined || this.scale != scale;\r\n\r\n if (sourceEvent == MapEnums.SourceEvents.AngularZoomToFeature){\r\n this.scale = scale;\r\n this.getFeatures(sourceEvent, extents, this._viewport, canvas, cellsize);\r\n return true;\r\n }\r\n\r\n if ((this.currentExtents == null || isNewScale) && this.map.loadFeatures) {\r\n // if (this.currentExtents == null) {\r\n this.scale = scale;\r\n this.getFeatures(sourceEvent, extents, this._viewport, canvas, cellsize);\r\n }\r\n else {\r\n if (this.currentExtents && this.currentExtents.contains(extents)) {\r\n // if (this.isExtentsLoaded(extents)) {\r\n this.cancelable = undefined;\r\n this.source = undefined;\r\n // this.promise = undefined;\r\n this.getVisibleFeatures(extents, canvas, scale);\r\n }\r\n else {\r\n this.getFeatures(sourceEvent, extents, this._viewport, canvas, cellsize);\r\n }\r\n // }\r\n }\r\n }\r\n else\r\n this._viewport = null;\r\n\r\n return true;\r\n }\r\n\r\n isExtentsLoaded(extents){\r\n var isLoaded = false;\r\n this.loadedExtents.forEach(le => {\r\n if (le.contains(extents))\r\n isLoaded = true;\r\n })\r\n\r\n return isLoaded;\r\n }\r\n\r\n getFeatures(sourceEvent, extents, viewport, canvas, cellsize) {\r\n let halfWidth = viewport.World.Width / 2;\r\n let halfHeight = viewport.World.Height / 2;\r\n\r\n //this.currentExtents = extents;\r\n this.currentExtents = new Envelope(extents.MinX - halfWidth, extents.MaxX + halfWidth, extents.MinY - halfHeight, extents.MaxY + halfHeight);\r\n\r\n if (this.source != null) {\r\n // this.source.cancel('new request coming thru');\r\n }\r\n\r\n //Is Map Activity with Search fields. We wait for the 'Show Results' button to be clicked. Thus map handled differently\r\n if (this.map.options.HasQueryFields) {\r\n if (this.options.ContextLayer) {\r\n if (sourceEvent != MapEnums.SourceEvents.AngularShowMap && \r\n sourceEvent != MapEnums.SourceEvents.AngularContextLayerSearch &&\r\n sourceEvent != MapEnums.SourceEvents.AngularLayerVisibility) {\r\n //Update _visibleItems\r\n this.getVisibleFeatures(extents, canvas, this.scale)\r\n }\r\n else {\r\n //Do nothing. map.component calls the searchFeatures.\r\n // No it doesnt\r\n this.setRestApiFeatureQueryParams(cellsize);\r\n }\r\n }\r\n else if (this.isGeocoder == true) {\r\n this.getVisibleFeatures(extents, canvas, this.scale)\r\n }\r\n else if (!this.options.ContextualType || this.options.ContextualType != \"ShowOnlyRelatedFeatures\") {\r\n this.setRestApiFeatureQueryParams(cellsize);\r\n }\r\n else { //ShowOnlyRelatedFeatures --> data retrieved by searchFeatures which is called from angular\r\n // no, it isnt \r\n // this.getVisibleFeatures(extents, canvas, this.scale);\r\n this.setRestApiFeatureQueryParams(cellsize);\r\n }\r\n }\r\n // When Map Activity has map that shows on load, or when is Geometry Map or Map Control\r\n else {\r\n if (this.options.ContextLayer == true) {\r\n if (!this.isGeocoder && this.quadTree == null && this.map.mapOptionType != MapEnums.MapOptionTypes.GEOMETRY) {\r\n // this.searchFeaturesPromise = this.searchFeatures(sourceEvent, \"\", -1, false, 0, 0);\r\n this.searchFeaturesPromise = this.searchFeatures(sourceEvent, \"\", -1, false, 0, 0);\r\n } else {\r\n this.getVisibleFeatures(extents, canvas, this.scale)\r\n }\r\n }\r\n else { //ShowOnlyRelated and ShowOtherFeatures will call FeatureQuery here. \r\n //For ShowOnlyRelated, we passed from angular the Context connect object's value in the options.ContextFilter and options.UserFilter and set this.options.isIdentitySearch to true\r\n //For ShowOtherFeatures, we passed from angular the filter in options.UserFilter and set this.options.isIdentitySearch to true. \r\n this.setRestApiFeatureQueryParams(cellsize);\r\n\r\n }\r\n }\r\n }\r\n\r\n setRestApiFeatureQueryParams(cellsize) {\r\n this.cellsize = cellsize;\r\n this.callFeatureQuery = true;\r\n }\r\n\r\n callRestApiFeatureQuery() {\r\n // Clear visibleItems. If we don't, while layer is still fetching new data, hovering over previously visible item\r\n // will highlight the shape in the map \r\n \r\n // this.map.changeLoadingStatus({id: this._id, loading: true});\r\n\r\n this._visibleItems = [];\r\n\r\n this.callFeatureQuery = false;\r\n\r\n this.source = Axios.CancelToken.source();\r\n\r\n let customParams = {\r\n cellSize: this.cellsize * MgFeatureLayer.kGeometryReducer,\r\n id: this._id\r\n }\r\n\r\n let params = Util.mergeOptions(this.defaultFeatureQueryParams, customParams);\r\n\r\n this.map.changeLoadingStatus({id: this._id, loading: true});\r\n\r\n\r\n return RestAPI.featureQuery(params, this.source);\r\n\r\n }\r\n\r\n getVisibleFeatures(extents, canvas, scale, overwriteFeatures) {\r\n\r\n this.promise = null;\r\n\r\n if (this.quadTree != null && this.isVisible(scale)) {\r\n var visibleFeatures = [];\r\n this.quadTree.getIntersectingFeatures(visibleFeatures, extents);\r\n\r\n if (this.hasThematics) {\r\n // this._visibleItems = [];\r\n\r\n for (let feature of visibleFeatures) {\r\n if (feature.thematicIndex >= 0 && this.thematics[feature.thematicIndex] == true) {\r\n if (feature.Shape) {\r\n feature.worldToClient(this._viewport, true)\r\n feature.Shape.draw(canvas, 1, canvas.context);\r\n feature.Shape.draw(canvas, 1, this.offScreenContext);\r\n\r\n }\r\n\r\n this._visibleItems = visibleFeatures;\r\n }\r\n }\r\n }\r\n else {\r\n for (let feature of visibleFeatures) {\r\n if (feature.Shape) {\r\n feature.worldToClient(this._viewport, true)\r\n feature.Shape.draw(canvas, 1, canvas.context);\r\n feature.Shape.draw(canvas, 1, this.offScreenContext);\r\n }\r\n }\r\n\r\n this._visibleItems = visibleFeatures;\r\n }\r\n }\r\n }\r\n\r\n deleteFeature(feature) {\r\n\r\n this._features = this._features.filter(f => f.id != feature.id);\r\n this._visibleItems = this._visibleItems.filter(f => f.id != feature.id);\r\n\r\n }\r\n\r\n drawPointAtLatLon(coordinates) {\r\n\r\n // coordinates: {lat: 42, lon: 2}\r\n\r\n this.currentBounds = new Envelope(coordinates.lat, coordinates.lat,\r\n coordinates.lon, coordinates.lon);\r\n\r\n this.currentExtents = this.currentBounds;\r\n this.quadTree = new QuadTree(this.currentBounds);\r\n\r\n let isContextualType = this.options.ContextualType && this.options.ContextualType == \"ShowOnlyRelatedFeatures\" && !this.options.ContextLayer;\r\n\r\n if (this._viewport == null)\r\n this._viewport = new Viewport(this.map.rcMap, this.currentExtents, this.map.cellsize, this.map.scale);\r\n\r\n // create point geometry\r\n\r\n let geometry = `POINT (${coordinates.lat} ${coordinates.lon})`;\r\n\r\n let id = Math.floor(Math.random() * (9999999 - 999999 + 1) + 999999);\r\n\r\n let feature = new Feature(this, this.columns, null, geometry, id, `${coordinates.lat}, ${coordinates.lon}`, this.geometryFieldId, -1);\r\n this._features.push(feature);\r\n\r\n var envelope = null;\r\n\r\n if (feature.Shape != null && this.currentBounds != null) {\r\n feature.Shape.Geometry.Bounds = envelope;\r\n this.quadTree.insertFeature(feature, feature.Shape.Geometry.Bounds, 0);\r\n this._visibleItems.push(feature);\r\n\r\n if (isContextualType) {\r\n feature.worldToClient(this._viewport, true)\r\n feature.Shape.draw(this.map.canvas, 1, this.map.canvas.context);\r\n feature.Shape.draw(this.map.canvas, 1, this.offScreenContext);\r\n }\r\n\r\n }\r\n if (this.pendingSelectionIds) {\r\n this.setSelection(this.pendingSelectionIds);\r\n }\r\n\r\n return this.currentBounds;\r\n\r\n }\r\n\r\n searchContextLayerFeatures(sourceEvent, userFilter, taskId, zoomToBounds = false, offset = 0, limit = 0) {\r\n if (this.cancelable != null) {\r\n this.cancelable.cancel();\r\n }\r\n\r\n this._features = [];\r\n this._visibleItems = [];\r\n\r\n let extents = new Envelope(-180.0, 180.0, -90.0, 90.0);\r\n /*if(sourceEvent === MapEnums.SourceEvents.AngularShowMap && this.map.options.Extents != null) {\r\n extents = new Envelope(this.map.options.Extents.MinX, this.map.options.Extents.MaxX, this.map.options.Extents.MinY, this.map.options.Extents.MaxY);\r\n }*/\r\n\r\n this.quadTree = new QuadTree(extents);\r\n\r\n this.source = Axios.CancelToken.source();\r\n\r\n let customParams = {\r\n extents: extents,\r\n extentsProjection: \"EPSG:4326\",\r\n sUserFilter: this.options.UserFilter != null && this.options.UserFilter != \"\" ? this.options.UserFilter : userFilter,\r\n offset: offset,\r\n limit: limit,\r\n contextType: this.contextType != MapEnums.ContextTypes.None ? this.contextType : 0,\r\n taskId: taskId != undefined ? taskId : -1,\r\n id: this._id\r\n }\r\n let params = Util.mergeOptions(this.defaultFeatureQueryParams, customParams);\r\n\r\n if (params.sUserFilter == '0') params.sUserFilter = \"\";\r\n\r\n let promise = RestAPI.featureQuery(params);\r\n\r\n this.cancelable = cancelable(promise);\r\n var innerPromise = new Promise(function (resolve, reject) {\r\n promise.then(function (response) {\r\n if (response.status == 200 && response.status < 400) {\r\n let data = response.data;\r\n this.currentBounds = new Envelope(data.MinX, data.MaxX, data.MinY, data.MaxY);\r\n //this.currentExtents = new Envelope(this.currentBounds.MinX - halfWidth, this.currentBounds.MaxX + halfWidth, this.currentBounds.MinY - halfHeight, this.currentBounds.MaxY + halfHeight);\r\n this.currentExtents = this.currentBounds;\r\n this.quadTree = new QuadTree(this.currentBounds);\r\n\r\n let isContextualType = this.options.ContextualType && this.options.ContextualType == \"ShowOnlyRelatedFeatures\" && !this.options.ContextLayer;\r\n\r\n if (data.Results != null) {\r\n if (data.Results.length == 0) {\r\n //__this.map.refreshView(true);\r\n this.map.resize();\r\n }\r\n\r\n if (this._viewport == null)\r\n this._viewport = new Viewport(this.map.rcMap, this.currentExtents, this.map.cellsize, this.map.scale);\r\n\r\n for (var i = 0; i < data.Results.length; i++) {\r\n let values = data.Results[i];\r\n let thematicIndex = data.Thematics.length > 0 ? data.Thematics[i] : -1;\r\n if ((this.hasThematics == true && thematicIndex > -1) || this.hasThematics == false) {\r\n\r\n\r\n let feature = new Feature(this, this.columns, values, data.Geometries[i], data.Ids[i], data.FeatureNames[i], this.geometryFieldId, thematicIndex);\r\n this._features.push(feature);\r\n\r\n var envelope = null;\r\n if (data.Bounds[i] != null)\r\n envelope = new Envelope(data.Bounds[i][0], data.Bounds[i][1], data.Bounds[i][2], data.Bounds[i][3]);\r\n\r\n if (feature.Shape != null && envelope != null) {\r\n feature.Shape.Geometry.Bounds = envelope;\r\n this.quadTree.insertFeature(feature, feature.Shape.Geometry.Bounds, 0);\r\n this._visibleItems.push(feature);\r\n\r\n feature.worldToClient(this._viewport, true)\r\n feature.Shape.draw(this.map.canvas, 1, this.map.canvas.context);\r\n feature.Shape.draw(this.map.canvas, 1, this.offScreenContext);\r\n }\r\n\r\n if (this.map.geometryEditor) {\r\n\r\n for (var k = 0; k < data.Geometries.length; k++) {\r\n let geometry = WktReader.parseWKT(data.Geometries[k]);\r\n if (geometry != null) {\r\n var geometries = [];\r\n var id = 100;\r\n geometry.addGeometry(geometries);\r\n\r\n for (let i = 0; i < geometries.length; i++) {\r\n this.map.geometryEditor.addGeometry(geometries[i], id);\r\n id += 1;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (this.map.geometryEditor) {\r\n this.map.geometryEditor.onGeometryChanged();\r\n }\r\n\r\n // Happens when Map history is restored. In angular, map.component (map Item) and map.content.component (map activity) \r\n // will process restoration in parallel. map.content.component will trigger searchFeatures which will clear this._features,\r\n // which setSelection (called by map.component) uses to find feature of interest.\r\n if (this.pendingSelectionIds) {\r\n this.setSelection(this.pendingSelectionIds);\r\n }\r\n\r\n if (zoomToBounds != false && this._features.length > 0) {\r\n this.map.zoomToGeometryBounds(sourceEvent, this.currentBounds, this);\r\n }\r\n resolve({ renderOrderIndex: this.options.RenderOrderIndex, bounds: this.currentBounds });\r\n }\r\n }\r\n }.bind(this));\r\n\r\n }.bind(this));\r\n\r\n return innerPromise;\r\n }\r\n\r\n searchCoordinates(sourceEvent, coordinates, taskId, zoomToBounds = false) {\r\n if (this.cancelable != null) {\r\n this.cancelable.cancel();\r\n }\r\n\r\n\r\n\r\n let extents = new Envelope(-180.0, 180.0, -90.0, 90.0);\r\n /*if(sourceEvent === MapEnums.SourceEvents.AngularShowMap && this.map.options.Extents != null) {\r\n extents = new Envelope(this.map.options.Extents.MinX, this.map.options.Extents.MaxX, this.map.options.Extents.MinY, this.map.options.Extents.MaxY);\r\n }*/\r\n\r\n this.quadTree = new QuadTree(extents);\r\n\r\n this.source = Axios.CancelToken.source();\r\n\r\n let customParams = {\r\n extents: extents,\r\n extentsProjection: \"EPSG:4326\",\r\n taskId: taskId != undefined ? taskId : -1,\r\n id: this._id,\r\n coordinates: `${coordinates.lat}, ${coordinates.lon}`\r\n }\r\n\r\n\r\n\r\n let params = Util.mergeOptions(this.defaultFeatureQueryParams, customParams);\r\n let promise = RestAPI.coordinatesQuery(params);\r\n\r\n this.cancelable = cancelable(promise);\r\n var innerPromise = new Promise(function (resolve, reject) {\r\n promise.then(function (response) {\r\n if (response.status == 200 && response.status < 400) {\r\n let data = response.data;\r\n\r\n this.currentBounds = new Envelope(data.MinX, data.MaxX, data.MinY, data.MaxY);\r\n\r\n this.currentExtents = this.currentBounds;\r\n this.quadTree = new QuadTree(this.currentBounds);\r\n\r\n let isContextualType = this.options.ContextualType && this.options.ContextualType == \"ShowOnlyRelatedFeatures\" && !this.options.ContextLayer;\r\n var bounds = null;\r\n\r\n if (data.Results != null) {\r\n if (data.Results.length == 0) {\r\n //__this.map.refreshView(true);\r\n this.map.resize();\r\n }\r\n\r\n if (this._viewport == null)\r\n this._viewport = new Viewport(this.map.rcMap, this.currentExtents, this.map.cellsize, this.map.scale);\r\n\r\n for (var i = 0; i < data.Results.length; i++) {\r\n let values = data.Results[i];\r\n let thematicIndex = data.Thematics.length > 0 ? data.Thematics[i] : -1;\r\n if ((this.hasThematics == true && thematicIndex > -1) || this.hasThematics == false) {\r\n let feature = new Feature(this, this.columns, values, data.Geometries[i], data.Ids[i], data.FeatureNames[i], this.geometryFieldId, thematicIndex);\r\n this._features.push(feature);\r\n\r\n var envelope = null;\r\n if (data.Bounds[i] != null)\r\n envelope = new Envelope(data.Bounds[i][0], data.Bounds[i][1], data.Bounds[i][2], data.Bounds[i][3]);\r\n\r\n if (feature.Shape != null && envelope != null) {\r\n feature.Shape.Geometry.Bounds = envelope;\r\n this.quadTree.insertFeature(feature, feature.Shape.Geometry.Bounds, 0);\r\n this._visibleItems.push(feature);\r\n\r\n if (isContextualType) {\r\n feature.worldToClient(this._viewport, true)\r\n feature.Shape.draw(this.map.canvas, 1, this.map.canvas.context);\r\n feature.Shape.draw(this.map.canvas, 1, this.offScreenContext);\r\n }\r\n }\r\n if (bounds == null)\r\n bounds = new Envelope(feature.Shape.Geometry.Bounds.MinX, feature.Shape.Geometry.Bounds.MaxX, feature.Shape.Geometry.Bounds.MinY, feature.Shape.Geometry.Bounds.MaxY);\r\n else\r\n bounds.extend(feature.Shape.Geometry.Bounds);\r\n }\r\n }\r\n\r\n\r\n\r\n // Happens when Map history is restored. In angular, map.component (map Item) and map.content.component (map activity) \r\n // will process restoration in parallel. map.content.component will trigger searchFeatures which will clear this._features,\r\n // which setSelection (called by map.component) uses to find feature of interest.\r\n if (this.pendingSelectionIds) {\r\n this.setSelection(this.pendingSelectionIds);\r\n }\r\n\r\n if (zoomToBounds != false && this._features.length > 0) {\r\n // this.map.zoomToGeometryBounds(sourceEvent, bounds, this, false, coordinates); \r\n this.zoomToFeature(sourceEvent, [this._id], false);\r\n }\r\n resolve({ renderOrderIndex: this.options.RenderOrderIndex, bounds: bounds });\r\n }\r\n }\r\n }.bind(this));\r\n\r\n }.bind(this));\r\n\r\n return innerPromise;\r\n }\r\n\r\n searchFeatures(sourceEvent, userFilter, taskId, zoomToBounds = false, offset = 0, limit = 0) {\r\n if (this.cancelable != null) {\r\n this.cancelable.cancel();\r\n }\r\n\r\n this._features = [];\r\n this._visibleItems = [];\r\n\r\n let extents = new Envelope(-180.0, 180.0, -90.0, 90.0);\r\n /*if(sourceEvent === MapEnums.SourceEvents.AngularShowMap && this.map.options.Extents != null) {\r\n extents = new Envelope(this.map.options.Extents.MinX, this.map.options.Extents.MaxX, this.map.options.Extents.MinY, this.map.options.Extents.MaxY);\r\n }*/\r\n\r\n this.quadTree = new QuadTree(extents);\r\n\r\n this.source = Axios.CancelToken.source();\r\n\r\n let customParams = {\r\n extents: extents,\r\n extentsProjection: \"EPSG:4326\",\r\n sUserFilter: this.options.UserFilter != null && this.options.UserFilter != \"\" ? this.options.UserFilter : userFilter,\r\n offset: offset,\r\n limit: limit,\r\n contextType: this.contextType != MapEnums.ContextTypes.None ? this.contextType : 0,\r\n taskId: taskId != undefined ? taskId : -1,\r\n id: this._id\r\n }\r\n let params = Util.mergeOptions(this.defaultFeatureQueryParams, customParams);\r\n let promise = RestAPI.featureQuery(params);\r\n\r\n this.cancelable = cancelable(promise);\r\n var innerPromise = new Promise(function (resolve, reject) {\r\n promise.then(function (response) {\r\n if (response.status == 200 && response.status < 400) {\r\n let data = response.data;\r\n\r\n this.currentBounds = new Envelope(data.MinX, data.MaxX, data.MinY, data.MaxY);\r\n\r\n let halfWidth = this.currentBounds.Width / 2;\r\n let halfHeight = this.currentBounds.Height / 2;\r\n //this.currentExtents = new Envelope(this.currentBounds.MinX - halfWidth, this.currentBounds.MaxX + halfWidth, this.currentBounds.MinY - halfHeight, this.currentBounds.MaxY + halfHeight);\r\n this.currentExtents = this.currentBounds;\r\n this.quadTree = new QuadTree(this.currentBounds);\r\n\r\n let isContextualType = this.options.ContextualType && this.options.ContextualType == \"ShowOnlyRelatedFeatures\" && !this.options.ContextLayer;\r\n\r\n if (data.Results != null) {\r\n if (data.Results.length == 0) {\r\n //__this.map.refreshView(true);\r\n this.map.resize();\r\n }\r\n\r\n if (this._viewport == null)\r\n this._viewport = new Viewport(this.map.rcMap, this.currentExtents, this.map.cellsize, this.map.scale);\r\n\r\n for (var i = 0; i < data.Results.length; i++) {\r\n let values = data.Results[i];\r\n let thematicIndex = data.Thematics.length > 0 ? data.Thematics[i] : -1;\r\n if ((this.hasThematics == true && thematicIndex > -1) || this.hasThematics == false) {\r\n let feature = new Feature(this, this.columns, values, data.Geometries[i], data.Ids[i], data.FeatureNames[i], this.geometryFieldId, thematicIndex);\r\n this._features.push(feature);\r\n\r\n var envelope = null;\r\n if (data.Bounds[i] != null)\r\n envelope = new Envelope(data.Bounds[i][0], data.Bounds[i][1], data.Bounds[i][2], data.Bounds[i][3]);\r\n\r\n if (feature.Shape != null && envelope != null) {\r\n feature.Shape.Geometry.Bounds = envelope;\r\n this.quadTree.insertFeature(feature, feature.Shape.Geometry.Bounds, 0);\r\n this._visibleItems.push(feature);\r\n\r\n if (isContextualType) {\r\n feature.worldToClient(this._viewport, true)\r\n feature.Shape.draw(this.map.canvas, 1, this.map.canvas.context);\r\n feature.Shape.draw(this.map.canvas, 1, this.offScreenContext);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Happens when Map history is restored. In angular, map.component (map Item) and map.content.component (map activity) \r\n // will process restoration in parallel. map.content.component will trigger searchFeatures which will clear this._features,\r\n // which setSelection (called by map.component) uses to find feature of interest.\r\n if (this.pendingSelectionIds) {\r\n this.setSelection(this.pendingSelectionIds);\r\n }\r\n\r\n if (zoomToBounds != false && this._features.length > 0) {\r\n this.map.zoomToGeometryBounds(sourceEvent, this.currentBounds, this);\r\n }\r\n resolve({ renderOrderIndex: this.options.RenderOrderIndex, bounds: this.currentBounds });\r\n }\r\n }\r\n }.bind(this));\r\n\r\n }.bind(this));\r\n\r\n return innerPromise;\r\n }\r\n\r\n syncSearchResults(results) {\r\n this._features = [];\r\n this._visibleItems = [];\r\n\r\n let columns = [\"0\", \"1\", \"2\"];\r\n\r\n for (var i = 0; i < results.length; i++) {\r\n let values = [\"\", results[i].ItemId, results[i].Name];\r\n let feature = new Feature(this, columns, values, results[i].WKT, results[i].ItemId, results[i].Name, \"0\", -1);\r\n this._features.push(feature);\r\n\r\n var envelope = new Envelope(results[i].MinX, results[i].MaxX, results[i].MinY, results[i].MaxY);\r\n\r\n if (feature.Shape != null && envelope != null) {\r\n feature.Shape.Geometry.Bounds = envelope;\r\n this._visibleItems.push(feature);\r\n }\r\n }\r\n }\r\n\r\n searchAndZoomToFeatures(sourceEvent, userFilter) {\r\n if (this.cancelable != null) {\r\n this.cancelable.cancel();\r\n }\r\n\r\n let extents = new Envelope(-180.0, 180.0, -90.0, 90.0);\r\n this.source = Axios.CancelToken.source();\r\n\r\n let customParams = {\r\n extents: extents,\r\n extentsProjection: \"EPSG:4326\",\r\n sUserFilter: userFilter,\r\n contextType: 0,\r\n isIdentitySearch: true\r\n }\r\n\r\n let params = Util.mergeOptions(this.defaultFeatureQueryParams, customParams);\r\n params.taskId = -1;\r\n let promise = RestAPI.featureQuery(params);\r\n\r\n this.cancelable = cancelable(promise);\r\n\r\n promise.then(function (response) {\r\n if (response.status == 200 && response.status < 400) {\r\n let data = response.data;\r\n\r\n this.currentBounds = new Envelope(data.MinX, data.MaxX, data.MinY, data.MaxY);\r\n\r\n let halfWidth = this.currentBounds.Width / 2;\r\n let halfHeight = this.currentBounds.Height / 2;\r\n this.currentExtents = new Envelope(this.currentBounds.MinX - halfWidth, this.currentBounds.MaxX + halfWidth, this.currentBounds.MinY - halfHeight, this.currentBounds.MaxY + halfHeight);\r\n\r\n this.quadTree = new QuadTree(this.currentBounds);\r\n\r\n if (data.Results != null) {\r\n var bounds = null;\r\n for (var i = 0; i < data.Results.length; i++) {\r\n let values = data.Results[i];\r\n let thematicIndex = data.Thematics.length > 0 ? data.Thematics[i] : -1;\r\n if ((this.hasThematics == true && thematicIndex > -1) || this.hasThematics == false) {\r\n let feature = new Feature(this, this.columns, values, data.Geometries[i], data.Ids[i], data.FeatureNames[i], this.geometryFieldId, thematicIndex);\r\n this._features.push(feature);\r\n\r\n var envelope = null;\r\n if (data.Bounds[i] != null)\r\n envelope = new Envelope(data.Bounds[i][0], data.Bounds[i][1], data.Bounds[i][2], data.Bounds[i][3]);\r\n\r\n if (feature.Shape != null && envelope != null) {\r\n feature.Selected = true;\r\n feature.Shape.Geometry.Bounds = envelope;\r\n this.quadTree.insertFeature(feature, feature.Shape.Geometry.Bounds, 0);\r\n this._visibleItems.push(feature);\r\n\r\n if (bounds == null)\r\n bounds = new Envelope(feature.Shape.Geometry.Bounds.MinX, feature.Shape.Geometry.Bounds.MaxX, feature.Shape.Geometry.Bounds.MinY, feature.Shape.Geometry.Bounds.MaxY);\r\n else\r\n bounds.extend(feature.Shape.Geometry.Bounds);\r\n }\r\n }\r\n }\r\n\r\n\r\n if (bounds != null) {\r\n this.map.zoomToGeometryBounds(sourceEvent, bounds, this);\r\n }\r\n }\r\n }\r\n }.bind(this));\r\n }\r\n\r\n zoomToLayer(sourceEvent) {\r\n this.visible = true;\r\n if (this.hasThematics) {\r\n for (var i = 0; i < this.thematics.length; i++) {\r\n this.thematics[i] = true;\r\n }\r\n\r\n if (this.options.ContextLayer == false && this.isGeocoder == false) {\r\n this.clearItems();\r\n this.quadTree = null;\r\n this._viewport = null;\r\n this.currentExtents = null;\r\n }\r\n }\r\n else {\r\n if (this.options.ContextLayer == false && this.isGeocoder == false) {\r\n this.clearItems();\r\n this._viewport = null;\r\n this.currentExtents = null;\r\n }\r\n }\r\n\r\n this.searchFeaturesPromise = this.searchFeatures(sourceEvent, \"\", -1, true, 0, 0);\r\n }\r\n\r\n zoomToFeature(sourceEvent, ids, isInitial) {\r\n this.clearSelection();\r\n this.visible = true;\r\n if (this.hasThematics) {\r\n for (var i = 0; i < this.thematics.length; i++) {\r\n this.thematics[i] = true;\r\n }\r\n }\r\n\r\n if (ids != null && ids.length > 0) {\r\n var bounds = null;\r\n var idsFound = 0;\r\n\r\n var mapSelectedItems = [];\r\n\r\n for (let i = 0; i < ids.length; i++) {\r\n let sId = ids[i].toString();\r\n var matches = this._features.filter(x => x.id == sId || x.Id == sId).map(x => x);\r\n\r\n if (matches == null && matches.length > 0)\r\n matches = this._features.filter(x => x.FeatureName.toString() == sId);\r\n\r\n if (matches != null && matches.length > 0)\r\n idsFound += 1\r\n\r\n for (let feature of matches) {\r\n if (feature.Shape != null && feature.Shape.Geometry.Bounds != null) {\r\n feature.worldToClient(this._viewport, true);\r\n feature.Selected = true;\r\n mapSelectedItems.push(feature);\r\n\r\n if (bounds == null)\r\n bounds = new Envelope(feature.Shape.Geometry.Bounds.MinX, feature.Shape.Geometry.Bounds.MaxX, feature.Shape.Geometry.Bounds.MinY, feature.Shape.Geometry.Bounds.MaxY);\r\n else\r\n bounds.extend(feature.Shape.Geometry.Bounds);\r\n }\r\n }\r\n }\r\n\r\n if (bounds != null && idsFound == ids.length) {\r\n // if this is the initial zoomToFeature, we need to re-initialise the extents and bounds\r\n // so that if zoomToGeometryBounds will work properly\r\n if (isInitial != undefined && isInitial == true) {\r\n this.map.setInitialExtents(sourceEvent, bounds, true);\r\n }\r\n\r\n this.createOffscreenCanvas(this.map.canvas);\r\n if ((this.options.GeometryType == \"MultiPoint\" || this.options.GeometryType == \"Point\") && ids.length == 1)\r\n this.map.zoomToGeometry(bounds, this);\r\n else\r\n this.map.zoomToGeometryBounds(sourceEvent, bounds, this);\r\n\r\n //Set Map Selection\r\n if (mapSelectedItems != null)\r\n this._map.setSelection(mapSelectedItems);\r\n }\r\n else {\r\n // If feature is not visible in the map, make an API call to search for it\r\n // and zoom to that feature\r\n var sFeatureIds = ids.join(\"|\");\r\n this.searchAndZoomToFeatures(sourceEvent, sFeatureIds)\r\n }\r\n }\r\n else {\r\n if (this.currentBounds != null) {\r\n this.createOffscreenCanvas(this.map.canvas);\r\n if ((this.options.GeometryType == \"MultiPoint\" || this.options.GeometryType == \"Point\") && ids.length == 1)\r\n this.map.zoomToGeometry(bounds, this);\r\n else\r\n this.map.zoomToGeometryBounds(sourceEvent, bounds, this);\r\n }\r\n\r\n //Clear map selection\r\n this._map.setSelection([]);\r\n }\r\n }\r\n\r\n set pendingSelectionIds(ids) { this._pendingSelectionIds = ids; }\r\n get pendingSelectionIds() { return this._pendingSelectionIds; }\r\n\r\n setSelection(ids) {\r\n if (this._features == null || this._features.length == 0) {\r\n this.pendingSelectionIds = ids;\r\n return;\r\n }\r\n\r\n // Clear pending Ids\r\n if (this.pendingSelectionIds && this.pendingSelectionIds.length > 0)\r\n this.pendingSelectionIds = null;\r\n\r\n this.clearSelection();\r\n\r\n if (ids != null && ids.length > 0) {\r\n var idsFound = 0;\r\n\r\n for (let i = 0; i < ids.length; i++) {\r\n let sId = ids[i].toString();\r\n var matches = this._features.filter(x => x.id == sId || x.Id == sId).map(x => x);\r\n\r\n if (matches == null && matches.length > 0)\r\n matches = this._features.filter(x => x.FeatureName.toString() == sId);\r\n\r\n if (matches != null && matches.length > 0)\r\n idsFound += 1\r\n\r\n for (let feature of matches) {\r\n if (feature.Shape != null && feature.Shape.Geometry.Bounds != null) {\r\n feature.Selected = true;\r\n }\r\n }\r\n }\r\n\r\n }\r\n }\r\n\r\n getFeatureById(id) {\r\n for (var i = 0; i < this._features.length; i++) {\r\n let feature = this._features[i];\r\n if (feature.Id == id) {\r\n return feature;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n getHitItem(x, y) {\r\n for (var i = 0; i < this._visibleItems.length; i++) {\r\n let feature = this._visibleItems[i];\r\n if (feature.hitTest(x, y)) {\r\n // feature.hovering = true;\r\n return feature;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n getHitItems(x, y) {\r\n let items = [];\r\n var dctIds = {};\r\n for (var i = 0; i < this._features.length; i++) {\r\n let feature = this._features[i];\r\n if (feature.hitTest(x, y)) {\r\n if (!dctIds.hasOwnProperty(feature.id)) {\r\n items.push(feature);\r\n dctIds[feature.id] = feature;\r\n }\r\n }\r\n }\r\n\r\n return items;\r\n }\r\n\r\n getHitItemsFeatureInfo(x, y) {\r\n let featureInfos = [];\r\n var dctIds = {};\r\n let hasSelectedItems = false;\r\n\r\n for (var i = 0; i < this._visibleItems.length; i++) {\r\n //I think we only look at visibleItems for hits\r\n //for (var i = 0; i < this._features.length; i++) {\r\n //let feature = this._features[i];\r\n let feature = this._visibleItems[i];\r\n if (feature.hitTest(x, y)) {\r\n if (!feature.Selected) {\r\n if (!dctIds.hasOwnProperty(feature.id)) {\r\n let featureInfo = {\r\n Dataset: this.options.Dataset,\r\n LayerId: this.options.RenderOrderIndex,\r\n FeatureId: feature.Id,\r\n FeatureName: feature.FeatureName,\r\n Selected: false\r\n }\r\n\r\n featureInfos.push(featureInfo);\r\n dctIds[feature.id] = feature;\r\n }\r\n }\r\n else {\r\n hasSelectedItems = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (hasSelectedItems) {\r\n featureInfos = [];\r\n dctIds = {};\r\n\r\n for (var i = 0; i < this.selected.length; i++) {\r\n let feature = this.selected[i];\r\n if (!dctIds.hasOwnProperty(feature.id)) {\r\n let featureInfo = {\r\n Dataset: this.options.Dataset,\r\n LayerId: this.options.RenderOrderIndex,\r\n FeatureId: feature.Id,\r\n FeatureName: feature.FeatureName,\r\n Selected: true\r\n }\r\n\r\n featureInfos.push(featureInfo);\r\n dctIds[feature.id] = feature;\r\n }\r\n }\r\n }\r\n\r\n return featureInfos;\r\n }\r\n\r\n hitTest(x, y) {\r\n for (var i = 0; i < this._features.length; i++) {\r\n let feature = this._features[i];\r\n if (feature.hitTest(x, y)) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n get canHover() {\r\n return !this.backgroundLayer;\r\n }\r\n\r\n get canShowTooltip() {\r\n return this.hover != null && !this.backgroundLayer;\r\n }\r\n\r\n get canClick() {\r\n if (this.options != null && this.options.canClick != null)\r\n return this.options.canClick;\r\n\r\n return true;\r\n }\r\n\r\n getIntersections(bounds) {\r\n this.clearSelection();\r\n\r\n\r\n for (var i = 0; i < this._features.length; i++) {\r\n let feature = this._features[i];\r\n if (feature.intersects(bounds)) {\r\n feature.Selected = true;\r\n }\r\n }\r\n\r\n return this.selected;\r\n }\r\n\r\n clearSelection() {\r\n if (this.selected.length > 0) {\r\n for (var i = 0; i < this.selected.length; i++) {\r\n this.selected[i].Selected = false;\r\n }\r\n }\r\n\r\n this.selected = [];\r\n }\r\n\r\n\r\n removeFromTracked(feature){\r\n for (let i = 0; i < this.tracked.length; i++) {\r\n if (this.tracked[i].id === feature.id) {\r\n this.tracked.splice(i, 1);\r\n break;\r\n }\r\n }\r\n }\r\n \r\n\r\n removeItemFromSelection(feature) {\r\n for (let i = 0; i < this.selected.length; i++) {\r\n if (this.selected[i].id === feature.id) {\r\n this.selected.splice(i, 1);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n get defaultOptions() {\r\n var _defaultOptions = {\r\n minZoom: 0, // Number\r\n maxZoom: 18, // Number\r\n }\r\n\r\n _defaultOptions = Util.mergeOptions(_defaultOptions, this.getWCLayerOptions())\r\n return _defaultOptions;\r\n }\r\n\r\n getWCLayerOptions() {\r\n let parentOptions = super.getWCLayerOptions();\r\n\r\n let layerOptions = {\r\n Datasource: {\r\n Type: null, // MapEnums.DatasourceTypes\r\n Url: null, // String\r\n Key: null // String\r\n },\r\n GeometryType: null, // MapEnums.GeometryTypes,\r\n BackgroundLayer: null, // Boolean\r\n HoverLayout: null, // String\r\n InfoLayout: null, // String\r\n Symbology: {\r\n Point: {\r\n Type: null, // MapEnums.SymbolTypes\r\n Height: null, // Number\r\n\r\n /* Type == OutlineShape | SolidShape */\r\n Shape: null, // MapEnums.Shapes\r\n Colour: null, // String\r\n\r\n /* Type == Glyph */\r\n SymbolId: null, // Number -- this might be changed into GlyphUrl\r\n },\r\n\r\n Line: {\r\n Type: null, // MapEnums.StrokeTypes \r\n\r\n /* Type == Solid */\r\n Width: null, // Number\r\n Colour: null, // String,\r\n\r\n /* Type == DashStyle */\r\n DashStyle: null, // MapEnums.DashStyles\r\n\r\n /* Type == DashPattern */\r\n DashPattern: null, // String\r\n\r\n /* Type == Pattern */\r\n PatternId: null, // Number\r\n PatternHeight: null, // Number\r\n },\r\n Polygon: {\r\n Stroke: { //Same as LineStyle\r\n Type: null, // MapEnums.StrokeTypes \r\n\r\n /* Type == Solid */\r\n Width: null, // Number\r\n Colour: null, // String,\r\n\r\n /* Type == DashStyle */\r\n DashStyle: null, // MapEnums.DashStyles\r\n\r\n /* Type == DashPattern */\r\n DashPattern: null, // String\r\n\r\n /* Type == Pattern */\r\n PatternId: null, // Number\r\n PatternHeight: null, // Number\r\n },\r\n Fill: {\r\n Type: null, // MapEnums.FillTypes\r\n\r\n /* Type == Solid */\r\n Colour: null, // String\r\n\r\n /* Type == Hatch */\r\n BackgroundColour: null, // String\r\n HatchStyle: null, // MapEnums.HatchStyles\r\n\r\n /* Type == Pattern */\r\n PatternId: null, // Number\r\n PatternHeight: null, // Number\r\n PatternSpacing: null, // Number\r\n }\r\n }\r\n }\r\n }\r\n\r\n layerOptions = Util.mergeOptions(parentOptions, layerOptions);\r\n return layerOptions;\r\n }\r\n\r\n processSearchColumns() {\r\n this.columns = [];\r\n if (this.options.Label != null) {\r\n let label = this.options.Label.Label != null ? JSON.parse(this.options.Label.Label) : null;\r\n if (label != null) {\r\n if (label.Type == 'Field' || label.Type == 'SpatialField')\r\n this.columns.push(String(label.Id));\r\n else if (label.Type == 'Concatenate') {\r\n if (label.Comparisons != null) {\r\n for (let i = 0; i < label.Comparisons.length; i++) {\r\n let comparison = label.Comparisons[i];\r\n\r\n if (comparison.Id != null) {\r\n this.columns.push(String(comparison.Id));\r\n }\r\n }\r\n }\r\n else {\r\n if (label.Rhs.Id != null)\r\n this.columns.push(String(label.Rhs.Id));\r\n if (label.Lhs.Id != null)\r\n this.columns.push(String(label.Lhs.Id));\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.geometryFieldId = this.options.GeometryFieldId;\r\n this.columns.push(String(this.geometryFieldId));\r\n\r\n // Create Hover object and insert columns\r\n var otherColumns = [];\r\n if (this.options.Hover != null) {\r\n this.hover = new Hover(this.options.Hover, this.options.DatasetType == \"Feature\");\r\n otherColumns = this.hover.ExpressionColumns;\r\n }\r\n\r\n if (this.labelStyle != null) {\r\n\r\n otherColumns.concat(this.labelStyle.columns);\r\n }\r\n\r\n if (this.hover != null && this.options.IdentityField) {\r\n let jIdField = JSON.parse(this.options.IdentityField);\r\n otherColumns.push(jIdField.Id.toString());\r\n this.IdentityField = jIdField.Id.toString();\r\n }\r\n\r\n // Add other columns to the search columns\r\n for (let i = 0; i < otherColumns.length; i++) {\r\n let column = otherColumns[i];\r\n let index = this.columns.indexOf(column);\r\n if (index == -1)\r\n this.columns.push(column.toString());\r\n }\r\n\r\n this.addThematicFieldsToColumns();\r\n this.columns.sort(function (a, b) {\r\n return a.length - b.length || // sort by length, if equal then\r\n a.toString().localeCompare(b); // sort by dictionary order\r\n });\r\n }\r\n\r\n addThematicFieldsToColumns() {\r\n if (this.options.Thematics != null) {\r\n let fields = this.options.Fields;\r\n let sCustomField = 'DbCustomField,'\r\n for (let i = 0; i < this.options.Thematics.length; i++) {\r\n let filter = this.options.Thematics[i].Filter;\r\n\r\n if (filter)\r\n var pos = filter.indexOf(sCustomField);\r\n else\r\n return;\r\n\r\n while (pos > -1) {\r\n let pos2 = filter.indexOf(',', pos + sCustomField.length + 1);\r\n let customFieldId = filter.substring(sCustomField.length + pos, pos2);\r\n let index = this.columns.indexOf(customFieldId);\r\n if (index == -1)\r\n this.columns.push(customFieldId);\r\n\r\n pos = filter.indexOf(sCustomField, pos2);\r\n }\r\n }\r\n }\r\n }\r\n\r\n createDefaultStyles(symbology, label) {\r\n this.pointStyle = null;\r\n this.lineStyle = null;\r\n this.polygonStrokeStyle = null;\r\n this.polygonFillStyle = null;\r\n this.labelStyle = null;\r\n\r\n if (label != null) {\r\n this.labelStyle = new Label(label);\r\n }\r\n\r\n if (symbology.Point != null && symbology.Point.Type != undefined) {\r\n this.pointStyle = new Symbol(symbology.Point);\r\n this.pointStyle.loadSymbols(RestAPI.BaseUrl, RestAPI.AccessToken, this.options, RestAPI.debugMode);\r\n }\r\n\r\n if (symbology.Line != null && symbology.Line.Type != undefined) {\r\n this.lineStyle = new Stroke(symbology.Line);\r\n\r\n let hoverColour = this.options.HoverColour != null ? this.options.HoverColour : '#007fff';\r\n let hoverOutlineWidth = this.options.HoverOutlineWidth != null ? parseFloat(this.options.HoverOutlineWidth) / 100 : 2;\r\n\r\n let selectedColour = this.options.SelectedColour != null ? this.options.SelectedColour : '#007fff';\r\n let selectedOutlineWidth = this.options.SelectedOutlineWidth != null ? parseFloat(this.options.SelectedOutlineWidth) / 100 : 2;\r\n\r\n this.lineStyle.setHoverAndSelectedStyles(symbology.Line, hoverColour, hoverOutlineWidth, selectedColour, selectedOutlineWidth);\r\n\r\n this.lineStyle.loadPattern(RestAPI.BaseUrl, RestAPI.AccessToken, RestAPI.debugMode);\r\n }\r\n\r\n if (symbology.Polygon != null) {\r\n if (symbology.Polygon.Stroke != null && symbology.Polygon.Stroke.Type != undefined) {\r\n this.polygonStrokeStyle = new Stroke(symbology.Polygon.Stroke);\r\n\r\n let hoverColour = this.options.HoverColour != null ? this.options.HoverColour : '#007fff';\r\n let hoverOutlineWidth = this.options.HoverOutlineWidth != null ? parseFloat(this.options.HoverOutlineWidth) / 100 : 2;\r\n\r\n let selectedColour = this.options.SelectedColour != null ? this.options.SelectedColour : '#007fff';\r\n let selectedOutlineWidth = this.options.SelectedOutlineWidth != null ? parseFloat(this.options.SelectedOutlineWidth) / 100 : 2;\r\n\r\n let trackingColour = this.options.TrackingColour != null ? this.options.TrackingColour : '#007fff';\r\n let trackingOutlineWidth = this.options.TrackingOutlineWidth != null ? parseFloat(this.options.TrackingOutlineWidth) / 100 : 2;\r\n\r\n this.polygonStrokeStyle.setTrackingStyle(symbology.Polygon.Stroke, trackingColour, trackingOutlineWidth);\r\n this.polygonStrokeStyle.setHoverAndSelectedStyles(symbology.Polygon.Stroke, hoverColour, hoverOutlineWidth, selectedColour, selectedOutlineWidth);\r\n this.polygonStrokeStyle.loadPattern(RestAPI.BaseUrl, RestAPI.AccessToken, RestAPI.debugMode);\r\n }\r\n\r\n if (symbology.Polygon.Fill != null && symbology.Polygon.Fill.Type != undefined) {\r\n this.polygonFillStyle = new Fill(symbology.Polygon.Fill);\r\n let hoverColour = this.options.HoverColour != null ? this.options.HoverColour : '#007fff';\r\n this.polygonFillStyle.loadHoverPatten(RestAPI.BaseUrl, RestAPI.AccessToken, RestAPI.debugMode, hoverColour);\r\n this.polygonFillStyle.loadPattern(RestAPI.BaseUrl, RestAPI.AccessToken, RestAPI.debugMode);\r\n }\r\n\r\n if (this.polygonFillStyle == null)\r\n this.polygonFillStyle = new Fill(symbology.Polygon.Fill);\r\n\r\n if (this.options.TrackingFillColour)\r\n this.polygonFillStyle.setTrackingStyles(this.options.TrackingFillColour);\r\n\r\n if (this.options.HoverFillColour)\r\n this.polygonFillStyle.setHoverStyles(this.options.HoverFillColour);\r\n\r\n if (this.options.SelectedFillColour)\r\n this.polygonFillStyle.setSelectedStyles(this.options.SelectedFillColour);\r\n\r\n this.polygonStyle = {\r\n \"Fill\": this.polygonFillStyle,\r\n \"Stroke\": this.polygonStrokeStyle,\r\n }\r\n\r\n }\r\n\r\n this.hasStyle = this.pointStyle != null || this.lineStyle != null || this.polygonFillStyle != null || this.polygonStrokeStyle != null;\r\n }\r\n\r\n createCustomStyles(thematics) {\r\n if (thematics != null) {\r\n for (let i = 0; i < thematics.length; i++) {\r\n let symbology = thematics[i].Symbology;\r\n let pointStyle = null;\r\n let lineStyle = null;\r\n let polygonStyle = null;\r\n\r\n if (symbology.Point != null && symbology.Point.Type != undefined) {\r\n pointStyle = new Symbol(symbology.Point);\r\n pointStyle.loadSymbols(RestAPI.BaseUrl, RestAPI.AccessToken, this.options, RestAPI.debugMode);\r\n }\r\n\r\n if (symbology.Line != null && symbology.Line.Type != undefined) {\r\n lineStyle = new Stroke(symbology.Line);\r\n\r\n let hoverColour = this.options.HoverColour != null ? this.options.HoverColour : '#007fff';\r\n let hoverOutlineWidth = this.options.HoverOutlineWidth != null ? parseFloat(this.options.HoverOutlineWidth) / 100 : 2;\r\n\r\n let selectedColour = this.options.SelectedColour != null ? this.options.SelectedColour : '#007fff';\r\n let selectedOutlineWidth = this.options.SelectedOutlineWidth != null ? parseFloat(this.options.SelectedOutlineWidth) / 100 : 2;\r\n\r\n lineStyle.setHoverAndSelectedStyles(symbology.Line, hoverColour, hoverOutlineWidth, selectedColour, selectedOutlineWidth);\r\n lineStyle.loadPattern(RestAPI.BaseUrl, RestAPI.AccessToken, RestAPI.debugMode);\r\n }\r\n\r\n if (symbology.Polygon != null) {\r\n let polygonStrokeStyle = null;\r\n let polygonFillStyle = null;\r\n if (symbology.Polygon.Stroke != null && symbology.Polygon.Stroke.Type != undefined) {\r\n polygonStrokeStyle = new Stroke(symbology.Polygon.Stroke);\r\n\r\n let hoverColour = this.options.HoverColour != null ? this.options.HoverColour : '#007fff';\r\n let hoverOutlineWidth = this.options.HoverOutlineWidth != null ? parseFloat(this.options.HoverOutlineWidth) / 100 : 2;\r\n\r\n let selectedColour = this.options.SelectedColour != null ? this.options.SelectedColour : '#007fff';\r\n let selectedOutlineWidth = this.options.SelectedOutlineWidth != null ? parseFloat(this.options.SelectedOutlineWidth) / 100 : 2;\r\n \r\n let trackingColour = this.options.TrackingColour != null ? this.options.TrackingColour : '#007fff';\r\n let trackingOutlineWidth = this.options.TrackingOutlineWidth != null ? parseFloat(this.options.TrackingOutlineWidth) / 100 : 2;\r\n \r\n polygonStrokeStyle.setTrackingStyle(symbology.Polygon.Stroke, trackingColour, trackingOutlineWidth); \r\n polygonStrokeStyle.setHoverAndSelectedStyles(symbology.Polygon.Stroke, hoverColour, hoverOutlineWidth, selectedColour, selectedOutlineWidth);\r\n polygonStrokeStyle.loadPattern(RestAPI.BaseUrl, RestAPI.AccessToken, RestAPI.debugMode);\r\n }\r\n\r\n if (symbology.Polygon.Fill != null && symbology.Polygon.Fill.Type != undefined) {\r\n polygonFillStyle = new Fill(symbology.Polygon.Fill);\r\n\r\n let hoverColour = this.options.HoverColour != null ? this.options.HoverColour : '#007fff';\r\n\r\n polygonFillStyle.loadHoverPatten(RestAPI.BaseUrl, RestAPI.AccessToken, RestAPI.debugMode, hoverColour);\r\n polygonFillStyle.loadPattern(RestAPI.BaseUrl, RestAPI.AccessToken, RestAPI.debugMode);\r\n }\r\n\r\n if (polygonFillStyle == null)\r\n polygonFillStyle = new Fill(symbology.Polygon.Fill);\r\n\r\n if (this.options.TrackingFillColour)\r\n this.polygonFillStyle.setTrackingStyles(this.options.TrackingFillColour);\r\n \r\n if (this.options.HoverFillColour)\r\n this.polygonFillStyle.setHoverStyles(this.options.HoverFillColour);\r\n \r\n if (this.options.SelectedFillColour)\r\n this.polygonFillStyle.setSelectedStyles(this.options.SelectedFillColour);\r\n \r\n polygonStyle = {\r\n \"Fill\": polygonFillStyle,\r\n \"Stroke\": polygonStrokeStyle,\r\n }\r\n }\r\n\r\n let customStyle = {\r\n \"PointStyle\": pointStyle,\r\n \"LineStyle\": lineStyle,\r\n \"PolygonStyle\": polygonStyle,\r\n }\r\n\r\n this.thematics.push(this.visible);\r\n this.customStyles.push(customStyle);\r\n }\r\n\r\n this.hasStyle = this.thematics.length > 0;\r\n this.hasThematics = this.thematics.length > 0;\r\n }\r\n }\r\n\r\n checkContextualType() {\r\n /*\r\n ShowAllFeatures : 0,\r\n ShowOnlyRelatedFeatures : 1,\r\n ShowOtherFeatures : 2,\r\n Primary: 3\r\n */\r\n this.contextType = MapEnums.ContextTypes.None;\r\n if (this.options.ContextualType == \"ShowAllFeatures\")\r\n this.contextType = MapEnums.ContextTypes.ShowAllFeatures;\r\n else if (this.options.ContextualType == \"ShowOnlyRelatedFeatures\")\r\n this.contextType = MapEnums.ContextTypes.ShowOnlyRelatedFeatures;\r\n else if (this.options.ContextualType == \"ShowOtherFeatures\")\r\n this.contextType = MapEnums.ContextTypes.ShowOtherFeatures;\r\n else if (this.options.ContextualType == \"Primary\")\r\n this.contextType = MapEnums.ContextTypes.Primary;\r\n }\r\n get PointStyle() {\r\n return this.pointStyle;\r\n }\r\n\r\n get LineStyle() {\r\n return this.lineStyle;\r\n }\r\n\r\n get PolygonStyle() {\r\n return this.polygonStyle;\r\n }\r\n\r\n get Thematics() {\r\n return this.customStyles;\r\n }\r\n\r\n get Hover() {\r\n return this.hover;\r\n }\r\n\r\n get EnabledThematics() {\r\n let thematics = [];\r\n for (let i = 0; i < this.thematics.length; i++) {\r\n if (this.thematics[i])\r\n thematics.push(i);\r\n }\r\n\r\n return thematics;\r\n }\r\n\r\n get Columns() {\r\n return this.columns;\r\n }\r\n\r\n get FlatColumns() {\r\n return this.columns.join(',');\r\n }\r\n\r\n get Viewport() {\r\n return this._viewport;\r\n }\r\n\r\n \r\n isAlreadyTracked(id){\r\n return this.tracked.findIndex(x => x.id == id) >= 0;\r\n }\r\n\r\n isFeatureAlreadySelected(id) {\r\n return this.selected.findIndex(x => x.id == id) >= 0;\r\n }\r\n\r\n get defaultFeatureQueryParams() {\r\n let params = {\r\n datasetId: this.options.Dataset,\r\n extents: this.currentExtents,\r\n extentsProjection: this.map.options.Projection,\r\n mapProjection: this.map.options.Projection,\r\n columns: this.columns,\r\n thematics: this.EnabledThematics,\r\n geometryField: this.geometryFieldId,\r\n sortField: this.columns[0],\r\n sContextFilter: this.contextType == MapEnums.ContextTypes.ShowOnlyRelatedFeatures || this.contextType == MapEnums.ContextTypes.ShowOtherFeatures ? this.options.ContextFilter : \"\",\r\n sLayerFilter: this.map.options.Filter,\r\n sUserFilter: this.map.options.UserFilter != null && this.map.options.UserFilter != \"\" ? this.map.options.UserFilter : null,\r\n offset: 0,\r\n limit: 0,\r\n cellSize: 0,\r\n contextType: this.contextType, //this.contextType != MapEnums.ContextTypes.None ? this.contextType : 0,\r\n taskId: this.taskId,\r\n isIdentitySearch: this.options.isIdentitySearch != null ? this.options.isIdentitySearch : false,\r\n contextFilterDatasource: this.options.ContextFilterDatasource,\r\n source: this.source,\r\n }\r\n return params;\r\n }\r\n\r\n}\r\n\r\nMgFeatureLayer.kGeometryReducer = 0.4;","import {MgFeatureLayer} from './featureLayer';\r\n\r\nexport class MgGeocoderLayer extends MgFeatureLayer {\r\n \r\n constructor(id, options, taskId) {\r\n super(id, options, taskId); \r\n this.isGeocoder = true;\r\n }\r\n\r\n // Factory methods\r\n static createObject(id, options, taskId) { \r\n return new MgGeocoderLayer(id, options, taskId); \r\n }\r\n\r\n /** \r\n * @returns Promise(MgLayer)\r\n * @virtual\r\n */\r\n isLayerReady(canvas, zoom) {\r\n let __this = this;\r\n return new Promise((resolve, reject) => { \r\n resolve(__this); \r\n });\r\n }\r\n\r\n /**\r\n * @param {MgCanvas} canvas \r\n * @virtual\r\n */\r\n refreshView(canvas, offscreenCanvas) {\r\n super.refreshView(canvas, offscreenCanvas);\r\n }\r\n\r\n /**\r\n * @param {Bounds} rcMap\r\n * @param {LatLngBounds} newExtents\r\n * @param {Number} cellsize\r\n * @param {Number} scale\r\n */\r\n onExtentsChanged(sourceEvent, rcMap, newExtents, cellsize, scale, canvas) {\r\n super.onExtentsChanged(sourceEvent, rcMap, newExtents, cellsize, scale, canvas);\r\n }\r\n\r\n onAdd(map) {\r\n map.geocoder = this;\r\n } \r\n}","import { MgImageLayer } from \"./imageLayer\";\r\n\r\nexport class MgWmsLayer extends MgImageLayer {\r\n\r\n //#region -- CONSTRUCTOR\r\n constructor(id, options) {\r\n super(id, options); \r\n this._image;\r\n } \r\n //#endregion\r\n \r\n //#region -- STATIC METHODS\r\n /**\r\n * @param {number} id\r\n * @param {json} options\r\n */\r\n static createObject(id, options, taskId) { \r\n return new MgWmsLayer(id, options, taskId); \r\n } \r\n //#endregion\r\n \r\n //#region -- OVERRIDES\r\n /** \r\n * @returns Promise(MgLayer)\r\n * @override\r\n */\r\n isLayerReady(canvas) {\r\n \r\n return new Promise((resolve, reject) => { \r\n \r\n const getMapUrl = `${this.options.url}?SERVICE=wms&VERSION=${this.options.version}&REQUEST=GetMap&LAYERS=${this.options.layers}\r\n &STYLES=${this.options.styles}&CRS=${this.options.crs}&width=${canvas.width}&HEIGHT=${canvas.height}&FORMAT=${this.options.format}&BBOX=${this.options.bbox}`;\r\n\r\n fetch(getMapUrl)\r\n .then(response=>{\r\n if(!response.ok)\r\n throw new Error(\"HTTP Status \" + response.status);\r\n return response.blob()\r\n })\r\n .then(wmsBlob => { \r\n if(wmsBlob.type == \"text/xml\"){\r\n this._readErrorFromBlob(wmsBlob)\r\n .then(message => console.log(message))\r\n .catch(error => this.handleError(error));\r\n }\r\n else {\r\n const urlCreator = window.URL || window.webkitURL; \r\n let imgUrl = urlCreator.createObjectURL(wmsBlob); \r\n \r\n this._image = new Image();\r\n this._image.src = imgUrl;\r\n console.log(imgUrl);\r\n \r\n this._image.onload = ()=> { \r\n resolve(this);\r\n }; \r\n } \r\n })\r\n .catch(error => reject(error));\r\n });\r\n }\r\n\r\n /**\r\n * @param {MgCanvas} canvas\r\n * @override\r\n */\r\n refreshView(canvas) { \r\n canvas.drawImage(this._image, 0, 0); \r\n }\r\n //#endregion\r\n \r\n //#region -- METHODS\r\n _readErrorFromBlob(blob) { \r\n return new Promise(function(resolve, reject) {\r\n let reader = new FileReader();\r\n reader.onload = () => { \r\n let parser = new DOMParser();\r\n let xml = parser.parseFromString(reader.result, \"text/xml\");\r\n let message = xml.getElementsByTagName(\"ServiceException\")[0].innerHTML; \r\n return resolve(message);\r\n };\r\n reader.onerror = (error) => reject(error); \r\n reader.readAsText(blob);\r\n }); \r\n } \r\n //#endregion\r\n}","import {TileSource} from './tilesource';\r\n\r\nexport class OSMInternationalMapTileSource extends TileSource\r\n{\r\n // @section Constructors\r\n\r\n constructor(map) {\r\n super(map);\r\n }\r\n\r\n // @section Properties\r\n\r\n // @section TileSource Methods\r\n\r\n getTileUrl(level, col, row) {\r\n let domains = ['a','b','c'];\r\n let i = (col + row) % domains.length;\r\n\r\n var sTileUrl = `https://maps.wikimedia.org/osm-intl/${level}/${col}/${row}.png`\r\n return sTileUrl;\r\n }\r\n\r\n}","\r\nimport {Point, toPoint} from '../geometry/Point';\r\nimport {Bounds, toBounds} from '../geometry/Bounds';\r\nimport {LatLng, toLatLng} from '../geometry/LatLng';\r\nimport {LatLngBounds, toLatLngBounds, fromBoundingBox} from '../geometry/LatLngBounds';\r\nimport {Envelope} from '../geometry/Envelope';\r\nimport {Viewport, Symbol, Fill, Stroke, Label} from '../drawing/index';\r\nimport {Rectangle, fromLTRB, fromRect} from '../geometry/rectangle';\r\n\r\nexport class MeasurementPoint {\r\n constructor(clientPoint, worldCoordinate, distance, isStartPoint, colour)\r\n {\r\n this.ClientPoint = clientPoint;\r\n this.WorldCoordinate = worldCoordinate;\r\n this.DistanceInMetresFromPreviousPoint = distance;\r\n this.IsStartPoint = isStartPoint;\r\n this.Colour = colour;\r\n } \r\n}\r\n\r\nexport class Measurement {\r\n constructor(map) {\r\n this.map = map;\r\n this.viewPort = new Viewport(this.map.rcMap, this.map.extents, this.map.cellsize, this.map.scale);\r\n this.linePoints = [];\r\n this.canvas = map.canvas;\r\n this.context = map.canvas.context;\r\n this.selectedPoint = null;\r\n this.selectedPointIndex = -1;\r\n this.insertionPoint = null;\r\n this.measureToolDistanceUnits = 'Meters/Kilometers';\r\n this.measureToolAreaUnits = 'Use distance unit';\r\n this.measurementRec = null;\r\n\r\n this.circleStroke = new Stroke({ Type: 'Solid', Colour: 'black', Width : 2 });\r\n this.lineStroke = new Stroke({ Type: 'Solid', Colour: 'black', Width : 2 });\r\n this.blackFill = new Fill({ Type: 'Solid', Colour: 'black' });\r\n this.label = new Label({ FontName: 'Arial', Colour: 'black', FontSize : 10, Position : 0 });\r\n }\r\n\r\n addPoint(measurementPoint, clientPoint) {\r\n var distanceInMetres = 0.0;\r\n \r\n // if clicked the starting point use the measurementPoint's WorldCoordinate otherwise the clientPoint \r\n var worldCoordinate = measurementPoint != null && measurementPoint.IsStartPoint ? measurementPoint.WorldCoordinate : this.viewPort.pointToWorldCoordinate(clientPoint);\r\n\r\n if (this.linePoints.length > 0) { \r\n var previousPoint = this.linePoints[this.linePoints.length - 1]; \r\n // calculate the distance from the previous point to the new point \r\n distanceInMetres = previousPoint.WorldCoordinate.distanceTo(worldCoordinate); \r\n }\r\n\r\n let newPoint = new MeasurementPoint(clientPoint, worldCoordinate, distanceInMetres, this.linePoints.length == 0, 'black')\r\n this.linePoints.push(newPoint);\r\n\r\n return newPoint;\r\n \r\n }\r\n\r\n /// \r\n /// Inserts a point into the this.linePoints list.\r\n /// \r\n insertPoint(clientPoint, indexToInsertAt) { \r\n var previousPoint = null;\r\n\r\n if (indexToInsertAt - 1 >= 0)\r\n {\r\n previousPoint = this.linePoints[indexToInsertAt - 1]; \r\n var worldPoint = this.viewPort.pointToWorldCoordinate(clientPoint);\r\n \r\n // calculate the distance \r\n var distanceInMetres = previousPoint.WorldCoordinate.distanceTo(worldPoint);\r\n\r\n // insert item on indexToInsertAt\r\n this.linePoints.splice(indexToInsertAt, 0, new MeasurementPoint(clientPoint, worldPoint, distanceInMetres, false, 'black'));\r\n // update the distance for the point after it \r\n if (indexToInsertAt + 1 < this.linePoints.length)\r\n { \r\n var nextPoint = this.linePoints[indexToInsertAt + 1];\r\n nextPoint.DistanceInMetresFromPreviousPoint = worldPoint.distanceTo(nextPoint.WorldCoordinate);\r\n }\r\n } \r\n }\r\n\r\n \r\n \r\n /// \r\n /// Determines whether the client point lies within any of the line segments within the this.linePoints list.\r\n /// \r\n isPointOnLine(clientPoint) {\r\n let indexToInsertAt = -1;\r\n \r\n for (var i = 0; i < this.linePoints.length-1; i++) {\r\n let start = this.linePoints[i].ClientPoint;\r\n let end = this.linePoints[i+1].ClientPoint;\r\n\r\n if (this.isPointOnSegment(clientPoint, start, end)) {\r\n indexToInsertAt = i+1;\r\n break;\r\n }\r\n } \r\n \r\n return indexToInsertAt;\r\n }\r\n\r\n /// \r\n /// Looks for an existing point in the this.linePoints collection.\r\n /// \r\n /// The world if found, otherwise null. \r\n getExistingPoint(clientPoint) { \r\n var foundPoint = null;\r\n var i = -1;\r\n for ( i = 0; i < this.linePoints.length; i++) {\r\n let point = this.linePoints[i];\r\n \r\n var existingPoint = this.viewPort.worldToClient(point.WorldCoordinate.X, point.WorldCoordinate.Y);\r\n let distance = existingPoint.distanceTo(clientPoint); \r\n\r\n // we use the radius of the linePoint (circle) drawn as a way\r\n // to detect if the clientPoint in inside that circle.\r\n // if distance of clientPoint to linePoint is less than or equal to the radius, then the point is inside.\r\n if ( distance <= (Measurement.Radius+2)) {\r\n foundPoint = point;\r\n break; \r\n }\r\n }\r\n\r\n return {\"point\":foundPoint, \"index\": i};\r\n }\r\n\r\n /// \r\n /// Remove the point from the this.linePoints list.\r\n /// \r\n removePoint(worldCoordinate) { \r\n // find original point \r\n var index = this.linePoints.findIndex( x => x.WorldCoordinate.equals(worldCoordinate));\r\n\r\n if (index > -1)\r\n this.linePoints.splice(index, 1);\r\n\r\n // if it was a closed polygon and now it's not anymore then remove the last point (which is the same as the starting point)\r\n if (this.linePoints.length > 1 && this.linePoints.length < 4 && this.linePoints[this.linePoints.length - 1].WorldCoordinate.equals(this.linePoints[0].WorldCoordinate))\r\n this.linePoints.splice(this.linePoints.length - 1, 1);\r\n }\r\n\r\n setDistanceType(measureTool){\r\n this.measureToolDistanceUnits = measureTool.MeasureToolDistanceUnits;\r\n this.measureToolAreaUnits = measureTool.MeasureToolAreaUnits;\r\n }\r\n\r\n measureBoxHitTest(x,y){\r\n if (this.measurementRec == null) return false;\r\n return this.measurementRec.pointInRect(x, y);\r\n }\r\n\r\n drawDetailsBox(context) {\r\n let ctx = context != undefined ? context : this.context;\r\n\r\n const offset = 20;\r\n const panelWidth = 200;\r\n const panelHeight = 55;\r\n // each line of text is 27.5 height\r\n\r\n var mapContainer = this.map._container;\r\n\r\n let rect = new Rectangle(this.map.rcMap.Width / 2, this.map.rcMap.MinY + offset, panelWidth, panelHeight); \r\n this.measurementRec = rect; \r\n //this.canvas.drawRectangle(rect.left, rect.top, rect.right, rect.bottom, '#000000', '#FFFFFF', 1, [], ctx);\r\n this.canvas.drawRoundRectangle(rect.left, rect.top, rect.width, rect.height, 5, '#000000', '#FFFFFF', ctx)\r\n\r\n var totalDistance = 0;\r\n if (this.linePoints.length > 1) {\r\n var lastPoint = this.linePoints[0];\r\n for (let i = 1; i < this.linePoints.length; i++) {\r\n totalDistance += lastPoint.WorldCoordinate.distanceTo(this.linePoints[i].WorldCoordinate); \r\n lastPoint = this.linePoints[i];\r\n }\r\n }\r\n \r\n this.canvas.drawText(`Total Distance: ${this.getDistanceString(totalDistance, this.measureToolDistanceUnits)}`, rect.left + offset, rect.top + offset, undefined, this.label, 'start', ctx);\r\n\r\n let area = this.calculateArea();\r\n if (area > 0)\r\n this.canvas.drawText(`Total Area: ${this.getAreaString(area, this.measureToolAreaUnits)}`, rect.left + offset, rect.top + (offset*2), undefined, this.label, 'start', ctx); \r\n } \r\n\r\n selectAreaUnit(areaUnit){\r\n this.measureToolAreaUnits = areaUnit;\r\n this.map.invalidate();\r\n this.render();\r\n }\r\n\r\n selectDistanceUnit(distanceUnit){\r\n this.measureToolDistanceUnits = distanceUnit;\r\n this.map.invalidate();\r\n this.render();\r\n }\r\n \r\n drawPoint(clientPoint, drawExtraEllipse, context, colour = this.circleStroke.Colour) {\r\n let ctx = context != undefined ? context : this.context;\r\n \r\n var radius = drawExtraEllipse ? Measurement.Radius - 1 : Measurement.Radius;\r\n this.canvas.drawCircleShape(ctx, clientPoint.x, clientPoint.y, radius, this.circleStroke.Width, colour, colour); \r\n \r\n if (drawExtraEllipse) {\r\n radius = Measurement.Radius + 4;\r\n this.canvas.drawCircleShape(ctx, clientPoint.x, clientPoint.y, radius, this.circleStroke, colour, null); \r\n } \r\n }\r\n\r\n drawLine(clientPoint, previousClientPoint, distanceInMetres, context) { \r\n let ctx = context != undefined ? context : this.context;\r\n\r\n this.canvas.drawLine([clientPoint, previousClientPoint], this.lineStroke, 1.0, ctx);\r\n this.canvas.drawTextOverLineSegment(\"#000000\", 12, distanceInMetres, previousClientPoint, clientPoint, true, ctx); \r\n }\r\n\r\n getDistanceString(distanceInMetres, distanceUnits) {\r\n\r\n const metresInKilometre = 1000;\r\n const metresToFeet = 3.28084; \r\n const metresToInches = 39.3701;\r\n const metresToYards = 1.09361;\r\n const metresToMiles = 0.000621371;\r\n const feetToMiles = 5280;\r\n\r\n switch(distanceUnits) {\r\n\r\n case 'Metres/Kilometres':\r\n if (distanceInMetres < metresInKilometre)\r\n return `${distanceInMetres.toFixed(2)} m`;\r\n else\r\n return `${(distanceInMetres / metresInKilometre).toFixed(2)} km`;\r\n case 'Millimetres':\r\n return `${(distanceInMetres * 1000).toFixed(2)} mm`;\r\n case 'Centimetres':\r\n return `${(distanceInMetres * 100).toFixed(2)} cm`;\r\n case 'Metres':\r\n return `${distanceInMetres.toFixed(2)} m`;\r\n case 'Kilometres':\r\n return `${(distanceInMetres / metresInKilometre).toFixed(2)} km`;\r\n case 'Feet/Miles':\r\n var feet = distanceInMetres * metresToFeet;\r\n if (feet < feetToMiles) {\r\n return `${feet.toFixed(2)} ft`\r\n } else {\r\n return `${(feet / feetToMiles).toFixed(2)} mi`;\r\n }\r\n case 'Inches':\r\n {\r\n var inches = distanceInMetres * metresToInches; \r\n return `${inches.toFixed(2)} in`;\r\n }\r\n case 'Feet':{\r\n var feet = distanceInMetres * metresToFeet;\r\n return `${feet.toFixed(2)} ft`\r\n }\r\n case 'Yards': {\r\n var yards = distanceInMetres * metresToYards;\r\n return `${yards.toFixed(2)} yd`; \r\n }\r\n case 'Miles': {\r\n var miles = distanceInMetres * metresToMiles;\r\n return `${miles.toFixed(2)} mi`; \r\n }\r\n\r\n default:\r\n if (distanceInMetres < metresInKilometre)\r\n return `${distanceInMetres.toFixed(2)} m`;\r\n else\r\n return `${(distanceInMetres / metresInKilometre).toFixed(2)} km`;\r\n }\r\n\r\n\r\n }\r\n\r\n getAreaString(areaInMetresSquared, areaUnits) {\r\n const squareMetresInKilometre = 1000000;\r\n const squareMetresInHectare = 10000;\r\n const squareMetresInMillimetre = 0.000001;\r\n const squareMetresInCentimetre = 0.0001;\r\n const squareMetresInSquareFeet = 0.092903;\r\n const squareMetreInAcre = 4047;\r\n const squareMetreInSquareMile = 2590000;\r\n const squareMetreInSquareInch = 0.00064516;\r\n const squareMetreInYard = 1.19599;\r\n\r\n switch(areaUnits){\r\n \r\n case \"Use distance unit\":\r\n case \"UseDistanceUnits\":\r\n return this.getAreaString(areaInMetresSquared, this.measureToolDistanceUnits);\r\n case \"Metres/Hectares/Kilometres\":\r\n case \"Metres/Kilometres\":\r\n\r\n if (areaInMetresSquared >= squareMetresInKilometre){\r\n return `${(areaInMetresSquared / squareMetresInKilometre).toFixed(2)} km²`;\r\n } else if (areaInMetresSquared >= squareMetresInHectare){\r\n return `${(areaInMetresSquared / squareMetresInHectare).toFixed(2)} ha`;\r\n } else {\r\n return `${(areaInMetresSquared).toFixed(2)} m²`;\r\n }\r\n\r\n case \"Square Millimetres\":\r\n case \"Millimetres\":\r\n return `${(areaInMetresSquared / squareMetresInMillimetre).toFixed(2)} mm²`;\r\n\r\n\r\n case \"Square Centimetres\":\r\n case \"Centimetres\":\r\n return `${(areaInMetresSquared / squareMetresInCentimetre).toFixed(2)} cm²`;\r\n\r\n\r\n case \"Square Metres\":\r\n case \"Metres\":\r\n return `${(areaInMetresSquared).toFixed(2)} m²`;\r\n\r\n case \"Hectares\":\r\n return `${(areaInMetresSquared / squareMetresInHectare).toFixed(2)} ha`;\r\n\r\n\r\n case \"Square Kilometres\":\r\n case \"Kilometres\":\r\n return `${(areaInMetresSquared / squareMetresInKilometre).toFixed(2)} km²`;\r\n\r\n\r\n case \"Feet/Acres/Miles\":\r\n case \"Feet/Miles\":\r\n if (areaInMetresSquared >= squareMetreInSquareMile){\r\n return `${(areaInMetresSquared / squareMetreInSquareMile).toFixed(2)} mi²`;\r\n } else if (areaInMetresSquared >= squareMetreInAcre){\r\n return `${(areaInMetresSquared / squareMetreInAcre).toFixed(2)} acres`;\r\n } else {\r\n return `${(areaInMetresSquared / squareMetresInSquareFeet).toFixed(2)} ft²`;\r\n }\r\n\r\n\r\n case \"Square Inches\":\r\n case \"Inches\":\r\n return `${(areaInMetresSquared / squareMetreInSquareInch).toFixed(2)} in²`;\r\n\r\n\r\n case \"Square Feet\":\r\n case \"Feet\":\r\n return `${(areaInMetresSquared / squareMetresInSquareFeet).toFixed(2)} ft²`;\r\n\r\n\r\n case \"Square Yards\":\r\n case \"Yards\":\r\n return `${(areaInMetresSquared / squareMetreInYard).toFixed(2)} yd²`;\r\n\r\n\r\n case \"Acres\":\r\n return `${(areaInMetresSquared / squareMetreInAcre).toFixed(2)} acres`;\r\n\r\n\r\n case \"Square Miles\":\r\n case \"Miles\":\r\n return `${(areaInMetresSquared / squareMetreInSquareMile).toFixed(2)} mi²`;\r\n\r\n default: \r\n if (areaInMetresSquared >= squareMetresInKilometre){\r\n return `${(areaInMetresSquared / squareMetresInKilometre).toFixed(2)} km²`;\r\n } else if (areaInMetresSquared >= squareMetresInHectare){\r\n return `${(areaInMetresSquared / squareMetresInHectare).toFixed(2)} ha`;\r\n } else {\r\n return `${(areaInMetresSquared).toFixed(2)} m²`;\r\n }\r\n \r\n\r\n }\r\n\r\n }\r\n\r\n getLastPoint() {\r\n if (this.linePoints.length > 0)\r\n return this.linePoints[this.linePoints.length-1];\r\n \r\n return null;\r\n }\r\n\r\n calculateArea() { \r\n var area = 0.0;\r\n\r\n if (this.linePoints.length >= 4) // enough points to create a polygon (4 points and 3 sides with 1st and last points being the same)\r\n {\r\n var firstPoint = this.linePoints[0].WorldCoordinate;\r\n var lastPoint = this.linePoints[this.linePoints.length - 1].WorldCoordinate;\r\n \r\n if (firstPoint.X == lastPoint.X && firstPoint.Y == lastPoint.Y) // 1st and 4th points are the same so we have a closed polygon\r\n {\r\n for (var i = 0; i < this.linePoints.length-1; i++) {\r\n var p1 = this.linePoints[i].WorldCoordinate;\r\n var p2 = this.linePoints[i + 1].WorldCoordinate;\r\n area += this.convertToRadian(p2.Y - p1.Y) * (2 + Math.sin(this.convertToRadian(p1.X)) + Math.sin(this.convertToRadian(p2.X)));\r\n }\r\n\r\n // returns area in square metres\r\n area = area * Measurement.RadiusOfEarthInMetres * Measurement.RadiusOfEarthInMetres / 2;\r\n }\r\n }\r\n\r\n return Math.abs(area);\r\n } \r\n\r\n convertToRadian(input) {\r\n return input * Math.PI / 180;\r\n } \r\n \r\n distance(p1, p2) {\r\n //let a = p1.x - p2.x;\r\n //let b = p1.y - p2.y;\r\n //return Math.sqrt( a*a + b*b );\r\n return Math.hypot(p2.x - p1.x, p2.y - p1.y);\r\n }\r\n\r\n isPointOnSegment(point, A, B) {\r\n let d1 = this.distance(point, A);\r\n let d2 = this.distance(point, B);\r\n let lineDistance = this.distance(A, B);\r\n let buffer = 2; // 2 pixels\r\n\r\n if ( d1+d2 >= lineDistance-buffer && d1+d2 <= lineDistance+buffer )\r\n return true; // point is on the line.\r\n\r\n return false;\r\n }\r\n\r\n // Mouse Events and Handlers\r\n hitTest(x, y) {\r\n let testPoint = new Point(x,y);\r\n let tuple = this.getExistingPoint(testPoint);\r\n\r\n if (tuple.point == null) {\r\n for (var i = 0; i < this.linePoints.length-1; i++) {\r\n let start = this.linePoints[i].ClientPoint; \r\n let end = this.linePoints[i+1].ClientPoint;\r\n\r\n if (this.isPointOnSegment(testPoint, start, end))\r\n return true;\r\n }\r\n } \r\n\r\n return false;\r\n } \r\n \r\n handleMouseClick(x, y) {\r\n let lastPoint = this.getLastPoint();\r\n\r\n let pt = new Point(x, y);\r\n let tuple = this.getExistingPoint(pt);\r\n \r\n let existingPoint = tuple.point;\r\n var needsRefreshView = false;\r\n if (existingPoint == null) {\r\n let indexToInsert = this.isPointOnLine(pt);\r\n if (indexToInsert > -1) {\r\n this.insertPoint(pt, indexToInsert);\r\n }\r\n else\r\n this.addPoint(null, pt); \r\n } \r\n else {\r\n if (existingPoint.IsStartPoint) {\r\n let distanceInMetres = lastPoint.WorldCoordinate.distanceTo(existingPoint.WorldCoordinate); \r\n this.linePoints.push(new MeasurementPoint(existingPoint.ClientPoint, existingPoint.WorldCoordinate, distanceInMetres, false, 'black'));\r\n }\r\n else {\r\n this.removePoint(existingPoint.WorldCoordinate);\r\n }\r\n }\r\n\r\n this.map.invalidate();\r\n this.render(); \r\n }\r\n\r\n handleMouseDown(x, y) {\r\n let tuple = this.getExistingPoint(new Point(x, y))\r\n this.selectedPoint = tuple.point;\r\n \r\n this.selectedPointIndex = tuple.point != null ? tuple.index : -1; \r\n\r\n return this.selectedPoint != null ? true : false;\r\n }\r\n\r\n handleMouseDragging(x, y) {\r\n if (this.selectedPoint != null) {\r\n let lastPoint = this.getLastPoint();\r\n \r\n if (lastPoint.ClientPoint.equals(this.selectedPoint.ClientPoint)) {\r\n lastPoint.ClientPoint = new Point(x, y);\r\n lastPoint.WorldCoordinate = this.viewPort.pointToWorldCoordinate(lastPoint.ClientPoint);\r\n\r\n this.selectedPoint.ClientPoint = lastPoint.ClientPoint;\r\n this.selectedPoint.WorldCoordinate = lastPoint.WorldCoordinate;\r\n }\r\n else {\r\n this.selectedPoint.ClientPoint = new Point(x, y);\r\n this.selectedPoint.WorldCoordinate = this.viewPort.pointToWorldCoordinate(this.selectedPoint.ClientPoint);\r\n }\r\n\r\n this.map.invalidate();\r\n this.render(); \r\n }\r\n }\r\n\r\n updateExtents() {\r\n this.viewPort = new Viewport(this.map.rcMap, this.map.extents, this.map.cellsize, this.map.scale);\r\n this.render();\r\n }\r\n\r\n render(context) {\r\n let ctx = context != undefined ? context : this.context;\r\n\r\n var lastPoint = null;\r\n for (let i = 0; i < this.linePoints.length; i++) {\r\n let current = this.linePoints[i];\r\n\r\n current.ClientPoint = this.viewPort.worldToClient(current.WorldCoordinate.X, current.WorldCoordinate.Y);\r\n\r\n if (current.IsStartPoint) { \r\n this.drawPoint(current.ClientPoint, true, ctx);\r\n }\r\n else if (lastPoint != null) {\r\n let distance = lastPoint.WorldCoordinate.distanceTo(current.WorldCoordinate);\r\n if (distance > 0) {\r\n this.drawLine(current.ClientPoint, lastPoint.ClientPoint, this.getDistanceString(distance, this.measureToolDistanceUnits), ctx);\r\n this.drawPoint(current.ClientPoint, false, ctx);\r\n }\r\n } \r\n\r\n lastPoint = current;\r\n }\r\n\r\n if (this.insertionPoint) {\r\n this.drawPoint(new Point(this.insertionPoint.x, this.insertionPoint.y, null), false, null, 'gray'); \r\n this.insertionPoint = null;\r\n }\r\n\r\n this.drawDetailsBox(context);\r\n }\r\n\r\n} \r\n\r\nMeasurement.Radius = 4;\r\nMeasurement.RadiusOfEarthInMetres = 6378137;","import {Point, LatLng, Envelope} from '../geometry/index';\r\nimport {Viewport, Symbol, Fill, Stroke, Hover, Label, Markup, MarkupPoint, LineMarkup, PolygonMarkup, PointMarkup} from '../drawing/index';\r\nimport MapEnums from '../map/enums';\r\nimport {WktReader} from '../geometries/index';\r\n\r\nexport class GeometryEditor {\r\n constructor(map, geometryType, sWKT, bounds) {\r\n this.map = map;\r\n this.geometryType = geometryType;\r\n this.originalGeometryType = geometryType;\r\n this.bounds = bounds;\r\n this.viewport = new Viewport(this.map.rcMap, this.map.extents, this.map.cellsize, this.map.scale);\r\n this.canvas = map.canvas;\r\n this.context = map.canvas.context;\r\n this.selectedPoint = null;\r\n this.selectedPointIndex = -1;\r\n this.overwritePromptDisplayed = false;\r\n\r\n this.circleStroke = new Stroke({ Type: 'Solid', Colour: 'blue', Width : 2 });\r\n this.lineStroke = new Stroke({ Type: 'Solid', Colour: 'blue', Width : 2 });\r\n this.blackFill = new Fill({ Type: 'Solid', Colour: 'blue' });\r\n this.label = new Label({ FontName: 'Arial', Colour: 'blue', FontSize : 10, Position : 0 });\r\n\r\n this.contextLayer = this.map.getContextLayer();\r\n\r\n if (this.contextLayer != null && this.contextLayer.options.Hover != null)\r\n this.hover = new Hover(this.contextLayer.options.Hover);\r\n \r\n this.initialise(sWKT);\r\n this.selectedMarkup = null; \r\n this.markupsWithinSelectionRectangle = [];\r\n this.markupType = MapEnums.GeometryTypes.NONE;\r\n } \r\n\r\n initialise(sWKT) {\r\n this.markups = []; \r\n this.selectedMarkup = null;\r\n this.hitItems = null;\r\n this.activeMarkup = null;\r\n\r\n if (sWKT != null && sWKT.length > 0) {\r\n let geometry = WktReader.parseWKT(sWKT);\r\n if (geometry != null) {\r\n var geometries = [];\r\n var id = 1;\r\n geometry.addGeometry(geometries);\r\n\r\n for (let i = 0; i < geometries.length; i++) {\r\n this.addGeometry(geometries[i], id);\r\n id += 1;\r\n }\r\n }\r\n\r\n if (this.bounds != null) {\r\n //this.map.zoomToGeometryBounds(this.bounds); \r\n //this.updateExtents();\r\n \r\n this.map.refreshView(true); \r\n }\r\n else {\r\n this.map.invalidate();\r\n this.render();\r\n }\r\n \r\n }\r\n }\r\n\r\n addGeometry(geometry, id) {\r\n var markup = null;\r\n if (geometry.GeometryType == MapEnums.GeometryTypes.POINT) {\r\n markup = new PointMarkup(this.map, this, id);\r\n }\r\n else if (geometry.GeometryType == MapEnums.GeometryTypes.LINESTRING) {\r\n markup = new LineMarkup(this.map, this, id);\r\n }\r\n else if (geometry.GeometryType == MapEnums.GeometryTypes.POLYGON || geometry.GeometryType == MapEnums.GeometryTypes.LINEARRING) {\r\n markup = new PolygonMarkup(this.map, this, id);\r\n }\r\n\r\n if (markup != null) {\r\n markup.isGeometryComplete = true;\r\n this.addPoints(markup, geometry);\r\n this.markups.push(markup);\r\n }\r\n }\r\n\r\n addPoints(markup, geometry) {\r\n for (let i = 0; i < geometry.Coordinates.length; i++) {\r\n markup.addWorldCoordinate(new LatLng(geometry.Coordinates[i].Y, geometry.Coordinates[i].X));\r\n }\r\n }\r\n\r\n addMarkup(geometryType) {\r\n this.markupType = geometryType;\r\n\r\n if ( this.selectedMarkup != null) {\r\n this.selectedMarkup.selectedForEditing = false;\r\n this.selectedMarkup = null;\r\n\r\n this.map.invalidate();\r\n this.render();\r\n }\r\n\r\n if (this.activeMarkup != null) {\r\n this.activeMarkup.selectedForEditing = false;\r\n }\r\n\r\n if (geometryType == MapEnums.GeometryTypes.POINT) {\r\n this.activeMarkup = new PointMarkup(this.map, this); \r\n }\r\n else if (geometryType == MapEnums.GeometryTypes.LINESTRING) {\r\n this.activeMarkup = new LineMarkup(this.map, this); \r\n }\r\n else if (geometryType == MapEnums.GeometryTypes.POLYGON) {\r\n this.activeMarkup = new PolygonMarkup(this.map, this); \r\n }\r\n\r\n if (this.activeMarkup != null) {\r\n this.activeMarkup.selectedForEditing = true;\r\n this.markups.push(this.activeMarkup);\r\n }\r\n\r\n this.selectedMarkup = null; \r\n }\r\n\r\n addPoint(clientPoint) {\r\n \r\n if (this.activeMarkup != null) \r\n return this.activeMarkup.addPoint(clientPoint);\r\n \r\n return null;\r\n }\r\n\r\n insertPoint(clientPoint, indexToInsertAt) { \r\n if (this.activeMarkup != null) \r\n return this.activeMarkup.insertPoint(clientPoint, indexToInsertAt); \r\n }\r\n \r\n isPointOnLine(clientPoint) {\r\n if (this.activeMarkup != null) \r\n return this.activeMarkup.isPointOnLine(clientPoint);\r\n \r\n return -1;\r\n }\r\n\r\n getExistingPoint(clientPoint) { \r\n if (this.activeMarkup != null) \r\n return this.activeMarkup.getExistingPoint(clientPoint);\r\n \r\n return {\"point\":null, \"index\": -1};\r\n }\r\n\r\n removePoint(worldCoordinate) { \r\n if (this.activeMarkup != null) \r\n return this.activeMarkup.removePoint(worldCoordinate);\r\n }\r\n \r\n getLastPoint() {\r\n if (this.activeMarkup != null) \r\n return this.activeMarkup.getLastPoint();\r\n \r\n return null;\r\n }\r\n \r\n toWKT() {\r\n let geometryType = MapEnums.GeometryTypes.NONE;\r\n\r\n // check the geometry type\r\n for (var i = 0; i < this.markups.length; i++) {\r\n let markup = this.markups[i];\r\n if (geometryType == MapEnums.GeometryTypes.NONE) {\r\n geometryType = markup.geometryType;\r\n }\r\n else if (geometryType == MapEnums.GeometryTypes.POINT || geometryType == MapEnums.GeometryTypes.MULTIPOINT) {\r\n if (markup.geometryType == MapEnums.GeometryTypes.POINT)\r\n geometryType = MapEnums.GeometryTypes.MULTIPOINT;\r\n else\r\n geometryType = MapEnums.GeometryTypes.GEOMETRYCOLLECTION;\r\n }\r\n else if (geometryType == MapEnums.GeometryTypes.LINESTRING || geometryType == MapEnums.GeometryTypes.MULTILINESTRING) {\r\n if (markup.geometryType == MapEnums.GeometryTypes.LINESTRING)\r\n geometryType = MapEnums.GeometryTypes.MULTILINESTRING;\r\n else\r\n geometryType = MapEnums.GeometryTypes.GEOMETRYCOLLECTION;\r\n }\r\n else if (geometryType == MapEnums.GeometryTypes.POLYGON || geometryType == MapEnums.GeometryTypes.MULTIPOLYGON) {\r\n if (markup.geometryType == MapEnums.GeometryTypes.POLYGON)\r\n geometryType = MapEnums.GeometryTypes.MULTIPOLYGON;\r\n else\r\n geometryType = MapEnums.GeometryTypes.GEOMETRYCOLLECTION;\r\n }\r\n else {\r\n geometryType = MapEnums.GeometryTypes.GEOMETRYCOLLECTION;\r\n }\r\n }\r\n\r\n var addTag = true;\r\n var sWKT = '';\r\n \r\n if (this.markups.length == 1) {\r\n sWKT = this.markups[0].toWKT(true);\r\n }\r\n else {\r\n if (geometryType == MapEnums.GeometryTypes.MULTIPOINT) {\r\n sWKT = 'MULTIPOINT(';\r\n addTag = false;\r\n }\r\n else if (geometryType == MapEnums.GeometryTypes.MULTILINESTRING) {\r\n sWKT = 'MULTILINESTRING(';\r\n addTag = false;\r\n }\r\n else if (geometryType == MapEnums.GeometryTypes.MULTIPOLYGON) {\r\n sWKT = 'MULTIPOLYGON(';\r\n addTag = false;\r\n }\r\n else if (geometryType == MapEnums.GeometryTypes.GEOMETRYCOLLECTION) {\r\n sWKT = 'GEOMETRYCOLLECTION(';\r\n addTag = true;\r\n }\r\n\r\n var nCompleted = 0;\r\n for (var i = 0; i < this.markups.length; i++) {\r\n let markup = this.markups[i];\r\n\r\n if (markup.isGeometryComplete) {\r\n if (nCompleted > 0)\r\n sWKT += ', ';\r\n\r\n sWKT += markup.toWKT(addTag);\r\n nCompleted += 1;\r\n }\r\n }\r\n\r\n if (sWKT.trim() > 0 \r\n || geometryType == MapEnums.GeometryTypes.MULTILINESTRING\r\n || geometryType == MapEnums.GeometryTypes.MULTIPOINT \r\n || geometryType == MapEnums.GeometryTypes.MULTIPOLYGON \r\n || geometryType == MapEnums.GeometryTypes.GEOMETRYCOLLECTION)\r\n sWKT += ')';\r\n }\r\n return sWKT;\r\n }\r\n \r\n// here 'selected' is indicated by a property on the markup object, not the selectedMarkup object used elsewhere\r\n\r\n selectMarkupsWithinBounds(topLeftPoint, bottomRightPoint) { \r\n for (let markup of this.markups) { \r\n if (markup.withinBounds(topLeftPoint, bottomRightPoint)) \r\n {\r\n markup.selected = true; \r\n this.markupsWithinSelectionRectangle.push(markup); \r\n }\r\n } \r\n } \r\n\r\n clearSelectedMarkup() {\r\n if (this.selectedMarkup != null) {\r\n this.selectedMarkup.selectedForEditing = false;\r\n this.selectedMarkup = null; \r\n } \r\n\r\n for (let markup of this.markups) {\r\n markup.selected = false; \r\n } \r\n\r\n this.markupsWithinSelectionRectangle.splice(0, this.markupsWithinSelectionRectangle.length); \r\n }\r\n\r\n isActiveMarkupValid() {\r\n if (this.activeMarkup != null && this.activeMarkup.linePoints != null) {\r\n if (this.activeMarkup.geometryType == MapEnums.GeometryTypes.LINESTRING)\r\n return this.activeMarkup.linePoints.length >= 2;\r\n else if (this.activeMarkup.geometryType == MapEnums.GeometryTypes.POLYGON)\r\n return this.activeMarkup.linePoints.length >= 3;\r\n else // point\r\n return this.activeMarkup.linePoints.length > 0;\r\n }\r\n return false;\r\n }\r\n\r\n saveInCompleteMarkup(markupId) {\r\n if (markupId) {\r\n let markup = this.markups.find(o => o.id == markupId);\r\n\r\n if (markup != null && markup.linePoints != null) { \r\n if (markup.geometryType == MapEnums.GeometryTypes.POLYGON) {\r\n // close the polygon\r\n let startPoint = markup.linePoints[0];\r\n markup.handleMouseDoubleClick(startPoint.ClientPoint.x, startPoint.ClientPoint.y); \r\n }\r\n else if (markup.geometryType == MapEnums.GeometryTypes.LINESTRING) {\r\n markup.isGeometryComplete = true; \r\n }\r\n\r\n markup.selectedForEditing = false;\r\n this.map.refreshView();\r\n this.render(); \r\n }\r\n } \r\n } \r\n\r\n deleteSelectedMarkups(markupIds) {\r\n\r\n if (markupIds != null && markupIds.length > 0) { \r\n markupIds.forEach(id => this.unselectMarkupAndDelete(id)); \r\n \r\n // when the map is loaded, the 'Inspections area' layer objects are both markups and features\r\n // so check the Inspections Area layer for these features (tied by the same 'id') and delete them too\r\n \r\n // this doesn't remove the predrawn multipolys yet\r\n \r\n this.clearSelectedMarkup();\r\n this.onGeometryChanged();\r\n this.map.invalidate();\r\n this.render();\r\n this.map.refreshView(true); \r\n } \r\n }\r\n \r\n deleteMarkup(markupId) {\r\n\r\n if (markupId == -1) {\r\n this.markups = [];\r\n this.activeMarkup = null;\r\n this.selectedMarkup = null;\r\n this.hitItems = null;\r\n //this.initialise();\t\t\t\r\n }\r\n else {\r\n this.unselectMarkupAndDelete(markupId); \r\n }\r\n \r\n this.onGeometryChanged();\r\n this.map.invalidate();\r\n this.render();\r\n this.map.refreshView(true); \r\n }\r\n\r\n unselectMarkupAndDelete(markupId)\r\n {\r\n var index = this.markups.findIndex( x => x.id == markupId);\r\n\r\n if (index > -1) {\r\n if (this.activeMarkup != null && this.activeMarkup.id == markupId)\r\n this.activeMarkup = null;\r\n \r\n if (this.selectedMarkup != null && this.selectedMarkup.id == markupId)\r\n this.selectedMarkup = null;\r\n \r\n this.markups.splice(index, 1);\r\n }\r\n }\r\n \r\n // Mouse Events and Handlers\r\n getHitItems(x, y) {\r\n this.hitItems = [];\r\n var dctIds = {};\r\n for (var i = 0; i < this.markups.length; i++) {\r\n let markup = this.markups[i];\r\n if (markup.hitTest(x, y)) {\r\n if (!dctIds.hasOwnProperty(markup.id)) {\r\n this.hitItems.push(markup);\r\n dctIds[markup.id] = markup;\r\n } \r\n }\r\n }\r\n\r\n return this.hitItems;\r\n }\r\n\r\n hitTest(x, y) {\r\n if (this.activeMarkup != null) \r\n return this.activeMarkup.hitTest(x, y);\r\n\r\n return false;\r\n } \r\n \r\n // Return true if mouse click been handles, false otherwise\r\n handleMouseClick(x, y, inDrawMode) {\r\n var mouseClickHandled = false;\r\n\r\n\r\n if (this.activeMarkup != null) { \r\n this.activeMarkup.handleMouseClick(x, y);\r\n\r\n if (this.activeMarkup.isGeometryComplete) {\r\n this.activeMarkup.selectedForEditing = false;\r\n this.activeMarkup = null;\r\n this.onGeometryChanged();\r\n } \r\n \r\n mouseClickHandled = true;\r\n } \r\n else if ( this.selectedMarkup != null) {\r\n let pt = new Point(x, y);\r\n let tuple = this.selectedMarkup.getExistingPoint(pt);\r\n \r\n let existingPoint = tuple.point;\r\n if (existingPoint == null) {\r\n let indexToInsert = this.selectedMarkup.isPointOnLine(pt);\r\n if (indexToInsert > -1) {\r\n this.selectedMarkup.insertPoint(pt, indexToInsert);\r\n }\r\n else {\r\n this.selectedMarkup.selectedForEditing = false;\r\n this.selectedMarkup = null;\r\n if (inDrawMode){\r\n this.handleMouseClick(x,y,inDrawMode);\r\n } else {\r\n this.selectMarkup(x, y, inDrawMode);\r\n }\r\n }\r\n } \r\n else {\r\n if (this.selectedMarkup.geometryType == MapEnums.GeometryTypes.LINESTRING && this.selectedMarkup.linePoints.length <= 2)\r\n this.onDisplayPrompt(MapEnums.PromptTypes.MINIMUM_REQUIRED_POINTS_LINESTRING); \r\n else if (this.selectedMarkup.geometryType == MapEnums.GeometryTypes.POLYGON && this.selectedMarkup.linePoints.length <= 4)\r\n this.onDisplayPrompt(MapEnums.PromptTypes.MINIMUM_REQUIRED_POINTS_POLYGON); \r\n else if (this.selectedMarkup.geometryType != MapEnums.GeometryTypes.POINT) { // don't want to remove points when we click on them when in 'Draw Point' mode\r\n if (!existingPoint.IsStartPoint)\r\n this.selectedMarkup.removePoint(existingPoint.WorldCoordinate); \r\n }\r\n }\r\n\r\n mouseClickHandled = true; \r\n }\r\n else if (this.selectMarkup(x, y, inDrawMode)) {\r\n mouseClickHandled = true; \r\n }\r\n else if (this.activeMarkup == null) {\r\n\r\n // polygon has finished being drawn.\r\n\r\n if (this.markupType != MapEnums.GeometryTypes.NONE && this.canAddMarkup){\r\n this.addMarkup(this.markupType);\r\n } else {\r\n if (inDrawMode && this.markupType != MapEnums.GeometryTypes.GEOMETRYCOLLECTION && this.markupType != MapEnums.GeometryTypes.MULTIPOLYGON){ \r\n this.displayOverwritePrompt();\r\n }\r\n }\r\n\r\n if (this.activeMarkup != null) {\r\n this.activeMarkup.handleMouseClick(x, y);\r\n\r\n if (this.activeMarkup.isGeometryComplete) {\r\n this.activeMarkup.selectedForEditing = false;\r\n this.activeMarkup = null;\r\n this.onGeometryChanged();\r\n }\r\n } \r\n \r\n mouseClickHandled = true;\r\n }\r\n \r\n this.map.refreshView();\r\n this.render(); \r\n\r\n return mouseClickHandled; \r\n }\r\n\r\n handleMouseDoubleClick(x, y) {\r\n if (this.activeMarkup != null) {\r\n this.activeMarkup.handleMouseDoubleClick(x, y);\r\n\r\n if (this.activeMarkup.isGeometryComplete) {\r\n this.activeMarkup.selectedForEditing = false;\r\n this.activeMarkup = null;\r\n this.onGeometryChanged();\r\n }\r\n }\r\n \r\n this.map.refreshView();\r\n this.render(); \r\n }\r\n\r\n handleMouseDown(x, y, inDrawMode) {\r\n this.selectedPoint = null;\r\n\r\n let pt = new Point(x, y);\r\n for(let i = 0; i < this.markups.length; i++) {\r\n let markup = this.markups[i];\r\n \r\n let tuple = markup.getExistingPoint(pt);\r\n if (tuple != null && tuple.point != null) {\r\n this.selectedPoint = tuple.point; \r\n this.selectedPointIndex = tuple.index; \r\n\r\n if (this.selectedMarkup != null)\r\n this.selectedMarkup.selectedForEditing = false; \r\n\r\n this.selectedMarkup = markup;\r\n if (!inDrawMode || this.selectedMarkup.geometryType != MapEnums.GeometryTypes.POINT) \r\n this.selectedMarkup.selectedForEditing = true;\r\n break;\r\n }\r\n }\r\n\r\n return this.selectedPoint != null ? true : false;\r\n }\r\n\r\n handleMouseUp(x, y) {\r\n this.onGeometryChanged();\r\n }\r\n\r\n handleMouseMove(x, y) {\r\n var canShowTooltip = false;\r\n\r\n for(let i = 0; i < this.markups.length; i++) {\r\n let markup = this.markups[i];\r\n markup.insertionPoint = null;\r\n\r\n if (markup.isPointOnLine(new Point(x, y)) >= 0) \r\n markup.insertionPoint = new Point(x, y);\t\t\t\t\t\t\t\t\t \r\n\r\n // if (markup.isHovered) {\r\n // markup.isHovered = false;\r\n // markup.render(this.context);\r\n // }\r\n\r\n /* \r\n\r\n Rather than set 'isHovered' from the markup.handleMouseMove function, \r\n that function nows serves as a markup.hitTest() as long as that markup isn't selected for editing\r\n If any of markups are being hovered, all markups will now have the hover styling applied \r\n\r\n */\r\n\r\n if (markup.handleMouseMove(x, y)) { \r\n this.markups.map(m => {\r\n m.isHovered = true;\r\n m.render(this.context);\r\n }); \r\n canShowTooltip = true;\r\n break;\r\n }else{\r\n if (this.markups.some(m => m.isHovered)){\r\n this.markups.map(m => {\r\n m.isHovered = false;\r\n m.render(this.context);\r\n }); \r\n break;\r\n }\r\n } \r\n\r\n }\r\n\r\n if (canShowTooltip && this.hover != null) {\r\n\r\n } \r\n }\r\n\r\n handleMouseDragging(x, y) {\r\n if (this.selectedPoint != null && this.selectedMarkup != null) {\r\n let lastPoint = this.selectedMarkup.getLastPoint();\r\n \r\n if (lastPoint.ClientPoint.equals(this.selectedPoint.ClientPoint)) {\r\n lastPoint.ClientPoint = new Point(x, y);\r\n lastPoint.WorldCoordinate = this.viewport.pointToWorldCoordinate(lastPoint.ClientPoint);\r\n\r\n this.selectedPoint.ClientPoint = lastPoint.ClientPoint;\r\n this.selectedPoint.WorldCoordinate = lastPoint.WorldCoordinate;\r\n }\r\n else {\r\n this.selectedPoint.ClientPoint = new Point(x, y);\r\n this.selectedPoint.WorldCoordinate = this.viewport.pointToWorldCoordinate(this.selectedPoint.ClientPoint);\r\n } \r\n\r\n this.map.refreshView(); \r\n this.render(); \r\n } \r\n }\r\n\r\n\r\n addToSelectedMarkup(x, y){\r\n\r\n let selectedMarkups = [];\r\n\r\n for(let i = 0; i < this.markups.length; i++) {\r\n let markup = this.markups[i];\r\n\r\n if (markup.hitTest(x, y)) {\r\n selectedMarkups.push(markup);\r\n markup.selected = true;\r\n } \r\n }\r\n\r\n return selectedMarkups;\r\n\r\n }\r\n\r\n \r\n // This 'selectMarkup' markup sets selectedMarkup object but doesn't set the 'selected' property in the markup object itself\r\n\r\n selectMarkup(x, y, inDrawMode) {\r\n if (inDrawMode) // don't want to select any markup if in drawMode\r\n return false;\r\n\r\n // violates dry in 'addToSelectedMarkup'\r\n for(let i = 0; i < this.markups.length; i++) {\r\n let markup = this.markups[i];\r\n\r\n if (markup.hitTest(x, y)) {\r\n \r\n if (this.selectedMarkup != null)\r\n this.selectedMarkup.selectedForEditing = false;\r\n \r\n this.selectedMarkup = markup;\r\n this.selectedMarkup.selectedForEditing = true;\r\n\r\n return true;\r\n } \r\n } \r\n \r\n return false;\r\n }\r\n\r\n updateExtents() {\r\n this.viewport = new Viewport(this.map.rcMap, this.map.extents, this.map.cellsize, this.map.scale);\r\n }\r\n\r\n render(context) {\r\n let ctx = context != undefined ? context : this.context; \r\n for(let i = 0; i < this.markups.length; i++) {\r\n \r\n this.markups[i].render(ctx);\r\n }\r\n }\r\n\r\n drawPoint(clientPoint, drawExtraEllipse, context) { \r\n let ctx = context != undefined ? context : this.context; \r\n var radius = drawExtraEllipse ? Markup.Radius - 1 : Markup.Radius; \r\n let pointColour = this.contextLayer != null && this.contextLayer.options != null ? this.contextLayer.options.SelectedColour : this.circleStroke.Colour; \r\n this.canvas.drawCircleShape(ctx, clientPoint.x, clientPoint.y, radius, this.circleStroke.Width, pointColour, pointColour); \r\n \r\n if (drawExtraEllipse) {\r\n radius = Markup.Radius + 4;\r\n this.canvas.drawCircleShape(ctx, clientPoint.x, clientPoint.y, radius, this.circleStroke.Width, pointColour, null); \r\n } \r\n } \r\n \r\n drawLine(clientPoint, previousClientPoint, context, stroke) { \r\n let ctx = context != undefined ? context : this.context; \r\n\r\n if (stroke == null)\r\n stroke = this.lineStroke;\r\n \r\n this.canvas.drawLine([clientPoint, previousClientPoint], stroke, 1.0, ctx);\r\n }\r\n \r\n renderPolygon(pts, context, isHovering = false, isSelected = false) {\r\n if (this.contextLayer != null && this.contextLayer.PolygonStyle != null) {\r\n let ctx = context != undefined ? context : this.context; \r\n this.canvas.drawPolygon(pts, isHovering ? this.contextLayer.PolygonStyle.Stroke.hoverStroke : isSelected ? this.contextLayer.PolygonStyle.Stroke.selectedStroke : this.contextLayer.PolygonStyle.Stroke, this.contextLayer.PolygonStyle.Fill, 1.0, ctx);\r\n }\r\n }\r\n\r\n renderLine(pts, context, isHovering = false, isSelected = false) {\r\n if (this.contextLayer != null && this.contextLayer.LineStyle != null) {\r\n let ctx = context != undefined ? context : this.context;\r\n \r\n this.canvas.drawLine(pts, isHovering ? this.contextLayer.LineStyle.hoverStroke : isSelected ? this.contextLayer.LineStyle.selectedStroke : this.contextLayer.LineStyle, 1.0, ctx); \r\n }\r\n }\r\n \r\n renderPoint(clientPoint, context, isHovering = false, isSelected = false) {\r\n if (this.contextLayer != null && this.contextLayer.PointStyle != null) {\r\n let ctx = context != undefined ? context : this.context;\r\n \r\n let symbol = isHovering ? this.contextLayer.PointStyle.HoverSymbol : isSelected ? this.contextLayer.PointStyle.SelectedSymbol : this.contextLayer.PointStyle.NormalSymbol; \r\n let offsetX = symbol.width / 2;\r\n let offsetY = symbol.height / 2;\r\n this.canvas.drawSymbol(symbol, clientPoint.x - offsetX, clientPoint.y - offsetY, ctx);\r\n } \r\n }\r\n\r\n onGeometryChanged() {\r\n let sWKT = this.toWKT();\r\n console.log(sWKT);\r\n\r\n if (this.map.cbGeometryEdit) {\r\n let message = {\r\n wkt: sWKT, \r\n }\r\n \r\n this.map.cbGeometryEdit(message);\r\n }\r\n }\r\n\r\n onDisplayPrompt(promptType) { \r\n console.log(`onDisplayPrompt:${MapEnums.PromptTypes.REPLACE_EXISTING_GEOMETRY}`);\r\n\r\n if (this.map.cbDisplayPrompt) {\r\n let message = {\r\n prompt: promptType, \r\n }\r\n \r\n this.map.cbDisplayPrompt(message);\r\n }\r\n }\r\n\r\n endEditMode() {\r\n this.markupType = MapEnums.GeometryTypes.NONE;\r\n this.selectedMarkup = null;\r\n this.activeMarkup = null;\r\n }\r\n\r\n get canAddMarkup() {\r\n var bAddMarkup = true;\r\n \r\n if (this.geometryType == MapEnums.GeometryTypes.POINT ||\r\n this.geometryType == MapEnums.GeometryTypes.LINESTRING ||\r\n this.geometryType == MapEnums.GeometryTypes.POLYGON) {\r\n \r\n for(let i = 0; i < this.markups.length; i++) {\r\n if (!this.markups[i].isEmpty) {\r\n bAddMarkup = false;\r\n break;\r\n }\r\n \r\n } \r\n\r\n // if (!bAddMarkup) {\r\n // this.overwritePromptDisplayed = true;\r\n // this.onDisplayPrompt(MapEnums.PromptTypes.REPLACE_EXISTING_GEOMETRY);\r\n // } \r\n }\r\n\r\n return bAddMarkup; \r\n }\r\n\r\n displayOverwritePrompt(){\r\n this.overwritePromptDisplayed = true;\r\n this.onDisplayPrompt(MapEnums.PromptTypes.REPLACE_EXISTING_GEOMETRY);\r\n }\r\n\r\n getBounds() {\r\n var rcBounds = null;\r\n \r\n if (this.markups.length > 0) {\r\n var top = null;\r\n var left = null;\r\n var right = null;\r\n var bottom = null;\r\n\r\n for (var i = 0; i < this.markups.length; i++) {\r\n let markup = this.markups[i]; \r\n \r\n for (var j = 0; j < markup.linePoints.length; j++) {\r\n let pt = markup.linePoints[j].WorldCoordinate;\r\n\r\n if (top == null) {\r\n top = pt.Y;\r\n left = pt.X;\r\n right = left;\r\n bottom = top;\r\n }\r\n\r\n \r\n if (pt.X < left)\r\n left = pt.X;\r\n else if (pt.X > right)\r\n right = pt.X;\r\n\r\n if (pt.Y < top)\r\n top = pt.Y;\r\n else if (pt.Y > bottom)\r\n bottom = pt.Y;\r\n }\r\n }\r\n\r\n rcBounds = new Envelope( left, right, top, bottom); \r\n }\r\n\r\n return rcBounds;\r\n }\r\n} \r\n","import {Util} from '../core/index';\r\nimport {Bounds} from '../geometry/Bounds';\r\n\r\nimport {LatLngBounds, toLatLngBounds as latLngBounds} from '../geometry/LatLngBounds';\r\nimport { MgImageLayer } from './imageLayer';\r\nimport { RestAPI } from '../api';\r\nimport {Viewport} from '../drawing/viewport';\r\nimport MapEnums from '../map/enums';\r\nimport {TileViewport} from '../drawing/tileviewport';\r\n\r\nimport {OpenStreetMapTileSource} from './OpenStreetMapTileSource';\r\nimport {EsriTileSource} from './EsriTileSource';\r\nimport {GoogleTileSource} from './GoogleTileSource';\r\nimport {TileSource} from './tilesource';\r\nimport { Envelope } from '../geometry';\r\n\r\nexport class MgReprojectedTileLayer extends MgImageLayer {\r\n \r\n constructor(id, options, taskId) {\r\n super(id, options, taskId);\r\n }\r\n\r\n // Factory methods\r\n /**\r\n * @param {number} id\r\n * @param {json} options\r\n */\r\n static createObject(id, options, taskId) { \r\n return new MgReprojectedTileLayer(id, options, taskId); \r\n }\r\n\t\t\r\n\t/** \r\n * @returns Promise(MgLayer)\r\n * @virtual\r\n */\r\n isLayerReady(canvas) {\r\n\r\n return new Promise(function(resolve, reject) { \r\n\r\n if(this._transformPromise != null && this._tranformPromiseParams != null) {\r\n this._transformPromise.then(response => {\r\n \r\n this._transformPromise = null;\r\n\r\n if(!response.ok)\r\n throw new Error(\"HTTP Status \" + response.status);\r\n return response.json();\r\n })\r\n .then(sTranformedExtents => { \r\n const jTranformedExtents = JSON.parse(sTranformedExtents);\r\n const envelope = new Envelope(jTranformedExtents.MinX, jTranformedExtents.MaxX, jTranformedExtents.MinY, jTranformedExtents.MaxY);\r\n this._viewport = new TileViewport(this._tranformPromiseParams.rcMap, envelope, (envelope.MaxX - envelope.MinX) / this._tranformPromiseParams.rcMap.Width, this._tranformPromiseParams.scale, this._tileSource, this._tranformPromiseParams.canvas, this._options.Opacity);\r\n this.scale = this._tranformPromiseParams.scale;\r\n \r\n this.getTiles(this._tranformPromiseParams.extents, this._viewport, this._tranformPromiseParams.canvas, this._tranformPromiseParams.cellsize); \r\n this._tranformPromiseParams = null;\r\n \r\n this.fetchReprojectedTiles(resolve, reject); \r\n })\r\n .catch(error => reject(error));\r\n }\r\n //When extents hasn't changed, don't fetch tiles from server\r\n else if(this.map.extents == this.currentExtents && this._image != null) {\r\n resolve(this);\r\n }\r\n else if(this._tileUrls != null && this._tileUrls.length > 0) { //getTiles was previously called already\r\n this.fetchReprojectedTiles(resolve, reject);\r\n } \r\n else {\r\n reject(\"Tile Urls unknown\");\r\n }\r\n \t\t}.bind(this));\t\t\r\n }\r\n\r\n fetchReprojectedTiles(resolve, reject) {\r\n\r\n this.currentExtents = this.map.extents;\r\n\r\n if (this._tileUrls != null && this._tileUrls.length > 0) { \t\t\t\t\t\t \r\n const parameters = {\r\n projection: this._map.options.Projection,\r\n datasetId: this._options.Dataset,\r\n tileUrls: JSON.stringify(this._tileUrls),\r\n columns: this._tileColumnCount,\r\n rows: this._tileRowCount,\r\n extents: JSON.stringify({minX: this.map.extents.MinX, minY: this.map.extents.MinY, maxX: this.map.extents.MaxX, maxY: this.map.extents.MaxY}),\r\n tileSize: this._tileSource.ImageSize,\r\n upperLeft: JSON.stringify(this._upperLeft.LatLongBounds),\r\n lowerRight: JSON.stringify(this._lowerRight.LatLongBounds),\r\n viewportClient: JSON.stringify({height: this._viewport.Client.Height, width: this._viewport.Client.Width})\r\n }\r\n\r\n const imageUrl = `${RestAPI.BaseUrl}ReprojectedTileSource?token=${RestAPI.AccessToken}¶meters=${this.toStringBase64(parameters)}`; \r\n\r\n fetch(imageUrl)\r\n .then(response => {\r\n if(!response.ok)\r\n throw new Error(\"HTTP Status \" + response.status);\r\n return response.blob()\r\n })\r\n .then(imageBlob => { \r\n if(imageBlob.type == \"text/xml\"){\r\n this._readErrorFromBlob(imageBlob)\r\n .then(message => console.log(message))\r\n .catch(error => this.handleError(error));\r\n }\r\n else {\r\n const urlCreator = window.URL || window.webkitURL; \r\n let imgUrl = urlCreator.createObjectURL(imageBlob); \r\n \r\n this._image = new Image();\r\n this._image.src = imgUrl;\r\n console.log(imgUrl);\r\n \r\n this._image.onload = ()=> { \r\n resolve(this);\r\n }; \r\n } \r\n })\r\n .catch(error => reject(error));\r\n }\r\n }\r\n \r\n\r\n toStringBase64(paramsJson) {\r\n return window.btoa(JSON.stringify(paramsJson));\r\n }\r\n\r\n\t\r\n /**\r\n * @param {Bounds} rcMap\r\n * @param {LatLngBounds} newExtents\r\n * @param {Number} cellsize\r\n * @param {Number} scale\r\n */\r\n onExtentsChanged(sourceEvent, rcMap, extents, cellsize, scale, canvas) {\t\t\r\n var disposableViewPort = this._viewport;\r\n this._tileUrls = null; //Clear when extents changed\r\n\r\n\t\tif (this.isVisible(scale)) {\r\n if (disposableViewPort != null && disposableViewPort.World.equals(extents)) {\r\n\t\t\t\tdisposableViewPort = null; // just re-use the current\r\n\t\t\t}\r\n else {\r\n const parameters = {\r\n sourceProjection: this._map.options.Projection,\r\n targetProjection: \"EPSG:4326\",\r\n envelope: JSON.stringify({MinX: extents.MinX, MaxX: extents.MaxX, MinY: extents.MinY, MaxY: extents.MaxY})\r\n }\r\n\r\n const transformViewportUrl = `${RestAPI.BaseUrl}TransformEnvelope?token=${RestAPI.AccessToken}¶meters=${this.toStringBase64(parameters)}`; \r\n \r\n this._transformPromise = fetch(transformViewportUrl);\r\n this._tranformPromiseParams = {\r\n rcMap: rcMap,\r\n canvas: canvas,\r\n scale: scale,\r\n cellsize: cellsize,\r\n extents: extents\r\n }\r\n }\r\n }\r\n else {\r\n\t\t\tthis._viewport = null;\r\n this._transformPromise = null;\r\n this._tranformPromiseParams = null;\r\n }\r\n\t\t\t \r\n\t\tif (disposableViewPort != null)\r\n\t\t{\r\n\t\t\tdisposableViewPort.dispose(this._tileSource, Date.now());\r\n\t\t\tthis._tileSource.cleanup();\r\n\t\t}\r\n\r\n return true; \r\n\t}\r\n\r\n\tgetTiles() { \r\n this._tileUrls = [];\r\n this._tileColumnCount = 0;\r\n this._tileRowCount = 0;\r\n\r\n\t\tif (this._viewport != null && this._viewport.tiles.length > 0) { \t\t\t \r\n \r\n this._tileColumnCount = this._viewport.tiles.length;\r\n\r\n\t\t\tfor (let iCol = this._viewport.tiles.length - 1; iCol >= 0; iCol--) {\r\n\t\t\t\t\r\n const tiles = this._viewport.tiles[iCol]; \r\n if(iCol == 0)\r\n this._tileRowCount = tiles.length;\r\n \r\n let columns = [];\r\n\r\n for(let iRow = tiles.length -1; iRow >= 0; iRow--) {\r\n const tile = tiles[iRow];\r\n \r\n if(tile != null)\r\n columns.unshift(tile.imageUrl);\r\n } \r\n\r\n this._tileUrls.unshift(columns); \r\n\t\t\t\t \r\n this._upperLeft = this._viewport.tiles[0][0];\r\n this._lowerRight = this._viewport.tiles[this._tileColumnCount-1][this._tileRowCount-1]; \r\n\t\t\t} \t\t\t\r\n\t\t} \r\n\t} \r\n\t\r\n\r\n\tgetWCLayerOptions() {\r\n\t\tlet parentOptions = super.getWCLayerOptions();\r\n\r\n\t\tlet layerOptions = { \r\n\t\t\tOpacity: 1.0, \t\t// Number = 1.0\r\n\t\t\tDatasource: {\r\n\t\t\t\tType: null, \t\t// MapEnums.DatasourceTypes\r\n\t\t\t\tUrl: null, \t\t\t// String\r\n\t\t\t\tKey: null \t\t\t// String\r\n\t\t\t}\r\n\t\t}\r\n\t\tlayerOptions = Util.mergeOptions(parentOptions, layerOptions);\r\n\t\treturn layerOptions;\r\n\t}\r\n\t\r\n\t/**\r\n\t * @param {} map\r\n\t */\r\n\tonAdd(map) {\r\n\t\tsuper.onAdd(map);\r\n\r\n\t\t if (this._options.Datasource.Type == 'OpenStreetMap')\r\n\t\t\tthis._tileSource = new OpenStreetMapTileSource(map);\r\n\t\telse if (this._options.Datasource.Type == 'EsriRestService')\t\r\n\t\t\tthis._tileSource = new EsriTileSource(map, this._options.Name, this._options.Datasource.Url);\r\n\t\telse if (this._options.Datasource.Type == 'GoogleStreetMap')\t\r\n\t\t\tthis._tileSource = new GoogleTileSource(map, this._options.Name);\t\r\n\t\telse\t\r\n\t\t this._tileSource = new TileSource(map);\r\n\t\t\r\n\t} \r\n\r\n /**\r\n * @param {MgCanvas} canvas\r\n * @override\r\n */\r\n refreshView(canvas) { \r\n if(this._image)\r\n canvas.drawImage(this._image, 0, 0); \r\n } \r\n \r\n render(canvas, force, context, compositeOperation) { \r\n console.log('render - reprojectedTileLayer - start ' + this.id); \r\n \r\n if (!canvas.isPanning) {\r\n \r\n context.save();\r\n if (compositeOperation)\r\n context.globalCompositeOperation = compositeOperation;\r\n \r\n if (this._image != null) {\r\n let halfWidth = this._viewport.World.Width / 2;\r\n let halfHeight = this._viewport.World.Height / 2;\r\n \r\n let envelope = new Envelope(this.map.extents.MinX - halfWidth, this.map.extents.MaxX + halfWidth, this.map.extents.MinY - halfHeight, this.map.extents.MaxY + halfHeight);\r\n \r\n let imageRect = this._viewport.worldToClientRect(envelope);\r\n //context.drawImage(this._image, 0, 0, this._image.width, this._image.height, imageRect.left, imageRect.top, imageRect.width, imageRect.height);\r\n context.drawImage(this._image, 0, 0, this._image.width, this._image.height);\r\n \r\n }\r\n \r\n context.restore();\r\n }\r\n \r\n console.log('render - reprojectedTileLayer - end ' + this.id); \r\n }\r\n \r\n}","/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nexport function map(project, thisArg) {\n return function mapOperation(source) {\n if (typeof project !== 'function') {\n throw new TypeError('argument is not a function. Are you looking for `mapTo()`?');\n }\n return source.lift(new MapOperator(project, thisArg));\n };\n}\nvar MapOperator = /*@__PURE__*/ (function () {\n function MapOperator(project, thisArg) {\n this.project = project;\n this.thisArg = thisArg;\n }\n MapOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new MapSubscriber(subscriber, this.project, this.thisArg));\n };\n return MapOperator;\n}());\nexport { MapOperator };\nvar MapSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(MapSubscriber, _super);\n function MapSubscriber(destination, project, thisArg) {\n var _this = _super.call(this, destination) || this;\n _this.project = project;\n _this.count = 0;\n _this.thisArg = thisArg || _this;\n return _this;\n }\n MapSubscriber.prototype._next = function (value) {\n var result;\n try {\n result = this.project.call(this.thisArg, value, this.count++);\n }\n catch (err) {\n this.destination.error(err);\n return;\n }\n this.destination.next(result);\n };\n return MapSubscriber;\n}(Subscriber));\n//# sourceMappingURL=map.js.map\n","/** PURE_IMPORTS_START _Observable,_util_isArray,_util_isFunction,_operators_map PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nimport { isArray } from '../util/isArray';\nimport { isFunction } from '../util/isFunction';\nimport { map } from '../operators/map';\nvar toString = /*@__PURE__*/ (function () { return Object.prototype.toString; })();\nexport function fromEvent(target, eventName, options, resultSelector) {\n if (isFunction(options)) {\n resultSelector = options;\n options = undefined;\n }\n if (resultSelector) {\n return fromEvent(target, eventName, options).pipe(map(function (args) { return isArray(args) ? resultSelector.apply(void 0, args) : resultSelector(args); }));\n }\n return new Observable(function (subscriber) {\n function handler(e) {\n if (arguments.length > 1) {\n subscriber.next(Array.prototype.slice.call(arguments));\n }\n else {\n subscriber.next(e);\n }\n }\n setupSubscription(target, eventName, handler, subscriber, options);\n });\n}\nfunction setupSubscription(sourceObj, eventName, handler, subscriber, options) {\n var unsubscribe;\n if (isEventTarget(sourceObj)) {\n var source_1 = sourceObj;\n sourceObj.addEventListener(eventName, handler, options);\n unsubscribe = function () { return source_1.removeEventListener(eventName, handler, options); };\n }\n else if (isJQueryStyleEventEmitter(sourceObj)) {\n var source_2 = sourceObj;\n sourceObj.on(eventName, handler);\n unsubscribe = function () { return source_2.off(eventName, handler); };\n }\n else if (isNodeStyleEventEmitter(sourceObj)) {\n var source_3 = sourceObj;\n sourceObj.addListener(eventName, handler);\n unsubscribe = function () { return source_3.removeListener(eventName, handler); };\n }\n else if (sourceObj && sourceObj.length) {\n for (var i = 0, len = sourceObj.length; i < len; i++) {\n setupSubscription(sourceObj[i], eventName, handler, subscriber, options);\n }\n }\n else {\n throw new TypeError('Invalid event target');\n }\n subscriber.add(unsubscribe);\n}\nfunction isNodeStyleEventEmitter(sourceObj) {\n return sourceObj && typeof sourceObj.addListener === 'function' && typeof sourceObj.removeListener === 'function';\n}\nfunction isJQueryStyleEventEmitter(sourceObj) {\n return sourceObj && typeof sourceObj.on === 'function' && typeof sourceObj.off === 'function';\n}\nfunction isEventTarget(sourceObj) {\n return sourceObj && typeof sourceObj.addEventListener === 'function' && typeof sourceObj.removeEventListener === 'function';\n}\n//# sourceMappingURL=fromEvent.js.map\n","require(\"babel-polyfill\");\r\n\r\nimport { MgCanvas } from \"./canvas\";\r\n\r\nimport { RestAPI } from '../api';\r\nimport { Browser } from '../core';\r\nimport { Events } from '../core/Events';\r\nimport { Util } from '../core/index';\r\n\r\nimport { Bounds, toBounds } from '../geometry/Bounds';\r\nimport { EPSG3857 } from '../geometry/crs/CRS.EPSG3857';\r\nimport { Envelope } from '../geometry/Envelope';\r\nimport { LatLng, toLatLng } from '../geometry/LatLng';\r\nimport { LatLngBounds, toLatLngBounds } from '../geometry/LatLngBounds';\r\nimport { Point, toPoint } from '../geometry/Point';\r\nimport { Rectangle } from '../geometry/rectangle';\r\n\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport { Measurement, MgFeatureLayer } from '../layer/index';\r\n\r\nimport { BehaviorSubject, fromEvent, Subject } from 'rxjs';\r\nimport { Label, Viewport } from '../drawing/index';\r\nimport { GeometryEditor } from '../layer/geometryeditor';\r\nimport MapEnums from './enums';\r\n\r\n/*\r\nconst Units = Object.freeze({\r\n\tMS_INCHES : Symbol(0),\r\n\tMS_FEET : Symbol(1),\r\n\tMS_MILES : Symbol(2),\r\n\tMS_METERS : Symbol(3),\r\n\tMS_KILOMETERS : Symbol(4),\r\n\tMS_DD : Symbol(5),\r\n\tMS_PIXELS : Symbol(6)\r\n});\r\n*/\r\nconst DragStates = Object.freeze({\r\n\tNone : Symbol(\"None\"),\r\n\tPanStart : Symbol(\"PanStart\"),\r\n\tPanDragging : Symbol(\"PanDragging\"),\r\n\tZoomStart : Symbol(\"ZoomStart\"),\r\n\tZoomDragging : Symbol(\"ZoomDragging\"),\r\n\tSelectStart : Symbol(\"SelectStart\"),\r\n\tSelectDragging : Symbol(\"SelectDragging\"),\r\n\tMeasurePanStart : Symbol(\"MeasurePanStart\"),\r\n\tMeasurePanDragging : Symbol(\"MeasurePanDragging\"),\r\n\tGeometryEditPanStart : Symbol(\"GeometryEditPanStart\"),\r\n\tGeometryEditPanDragging : Symbol(\"GeometryEditPanDragging\"),\r\n});\r\n\r\nconst MIN_DRAG_WIDTH = 10;\r\nconst MIN_DRAG_HEIGHT = 10;\r\n\r\nconst MOUSE_BUTTON_NONE = 0;\r\nconst MOUSE_BUTTON_LEFT = 1;\r\nconst MOUSE_BUTTON_WHEEL = 2;\r\nconst MOUSE_BUTTON_RIGHT = 3;\r\nexport class MgMap extends Events {\r\n\t\r\n\t// constructor\r\n /**\r\n * @param {} id\r\n * @param {} options\r\n * @param {} div\r\n */\r\n constructor(id, options, div, baseUrl, accessToken) {\r\n super();\r\n\t\tthis.isHovering = false;\r\n\t\tthis.options = Util.setOptions(this, this.defaultOptions);\r\n\t\tthis.options = Util.setOptions(this, options);\r\n\t\tthis.zoomTimer = null;\r\n\t\tthis.panTimer = null;\r\n\t\tthis._zoom = Util.scaleToZoomLevel(this.scale);\r\n this._id = id;\r\n\t\tthis._div = div;\r\n\t\tthis.mouseDown = false;\r\n\t\tthis.doMouseUpBound = null;\r\n\t\tthis.doMouseMoveBound = null;\r\n\t\tthis.loadFeatures = true;\r\n\t\tthis.homeCenter = null;\r\n\t\tthis.homeScale = null;\r\n\t\tthis.trackingMode = this.options.TrackingOnByDefault;\r\n\t\tRestAPI.BaseUrl = baseUrl;\r\n\t\tRestAPI.AccessToken = accessToken;\r\n\t\t \r\n\t\tthis._canvas = new MgCanvas(this.createCanvas(div), div, this);\r\n\t\tthis.initialise();\r\n \r\n\t\tif ( this.options.Extents!= null) {\r\n\t\t\tlet extents = this.options.Extents;\r\n\t\t\tthis.extents = new LatLngBounds(toLatLng(extents.MinY, extents.MinX), toLatLng(extents.MaxY, extents.MaxX));\r\n\t\t\r\n let xScale = (extents.MaxX - extents.MinX) / this.rcMap.Width * MgMap.DPI * this.getInchesPerUnit(0);\r\n let yScale = (extents.MaxY - extents.MinY) / this.rcMap.Height * MgMap.DPI * this.getInchesPerUnit(0);\r\n\r\n\t\t\tthis.options.center = [(extents.MinY + extents.MaxY) / 2.0, (extents.MinX + extents.MaxX) / 2.0];\r\n\t\t\tthis.options.scale = Math.max(xScale, yScale);\r\n \r\n }\r\n else if (this.options.LocationAndScale != null) {\r\n this.options.center = [this.options.LocationAndScale.Y, this.options.LocationAndScale.X];\r\n this.options.scale = this.options.LocationAndScale.Scale;\r\n\t\t}\r\n\r\n\t\tthis.homeCenter = this.options.center;\r\n\t\tthis.homeScale = this.options.scale;\r\n\r\n\t\tthis.scale = this.options.scale;\r\n\t\tthis.units = this.options.Units;\r\n\t\tthis._initContainer(id);\r\n\t\tthis._initLayout();\r\n\r\n\t\tthis.hoverItem = null;\r\n\t\tthis.mouseX = undefined;\r\n\t\tthis.mouseY = undefined;\t\t\t\r\n\t\tthis.promises = [];\t\t\r\n\t\tthis.selectedFeatures = new Object();\r\n\t\tthis.trackingFeatures = [];\r\n\t\t\r\n\t\tthis._initEvents();\r\n\t\t\r\n\t\tthis.enableTooltip();\r\n\t\tthis.mouseClicks = 0;\r\n\t\tthis.timerid = -1;\r\n\r\n\t\tthis.measureDistanceMode = false;\r\n\t\tthis.geometryEditMode = false;\r\n\t\tthis.measurement = null;\r\n\t\tthis.geometryEditor = null;\r\n\t\tthis.geocoder = null;\r\n\r\n\t\tvar doContextMenu = () => this.handleContextmenu(event); \r\n\t\tthis._canvas.canvas.addEventListener('contextmenu', doContextMenu.bind(this), false); \t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\r\n\t\tthis._ongoingRefreshView = false;\r\n\t\tthis._pendingZoomByContextOrder = false;\r\n\t\tthis._initialExtentsDone = false;\r\n\r\n\t\t// this.isLoadingExtents$ = new BehaviorSubject(false).pipe();\r\n\r\n\t\tthis.anyLoadingExtents$ = new BehaviorSubject([]).pipe();\r\n\t\r\n\r\n\t}\r\n\r\n // Factory methods\r\n /**\r\n * @param {string} id\r\n * @param {json} options\r\n * @returns MgMap\r\n */\r\n static createObject(id, options, baseUrl, accessToken) {\r\n if(id){\r\n const mapDiv = document.getElementById(id);\r\n return new MgMap(id, options, mapDiv, baseUrl, accessToken);\r\n } \r\n }\r\n\r\n\tinitialise() {\r\n\t\tthis._dctLayers = new Map(); \r\n\r\n\t\tthis.cellsize = 0;\r\n\t\tthis.cellsize = 0.0;\r\n\t\tthis.units = MgMap.MS_DD;\r\n\t\tthis.rcMap = new Bounds( new Point(0,0), new Point(this.div.clientWidth, this.div.clientHeight));\r\n\t\tthis.scale = this.options.scale;\r\n\t\tthis.extents = null;\r\n\t\t// mouse dragging fields\r\n \tthis.ptDragStart = null;\r\n \tthis.ptDragCurrent = null;\r\n\t\tthis.ptSelectionStart = null;\r\n\t\tthis.ptSelectionEnd = null;\r\n\t\tthis.dragState = DragStates.None;\r\n\t\tthis.Capture = false;\r\n\t\t\r\n this._handlers = [];\r\n\t\tthis._layers = [];\r\n\t\tthis._zoomBoundLayers = {};\r\n\t\tthis._sizeChanged = true;\r\n\t\tthis.repaintLayers = [];\r\n\t}\r\n\r\n\tresize(sourceEvent, triggerCallback = true) {\r\n\t\t\r\n\t\t//Map is not ready yet. Ignore call\r\n\t\tif(sourceEvent == MapEnums.SourceEvents.AngularMapDivSizeChange && !this._initialExtentsDone)\r\n\t\t\treturn;\r\n\r\n\t\tthis.canvas.clear();\r\n\t\tlet newWidth = this.div.clientWidth;\r\n\t\tlet newHeight = this.div.clientHeight;\r\n\r\n\t\tthis.rcMap = new Bounds( new Point(0,0), new Point(this.div.clientWidth, this.div.clientHeight));\r\n\r\n\t\tthis.canvas.resize(newWidth, newHeight);\r\n\t\tfor (let layer of this._layers) \r\n\t\t\tlayer.resize(newWidth, newHeight);\r\n\t\t\t\r\n\t\tthis.calculateOffset();\t\r\n\t\tthis.calculateExtents(sourceEvent, null, null, triggerCallback);\r\n\t\tthis.refreshView(false);\r\n\t}\r\n\r\n\tresizeHeight(newHeight) {\r\n\t\tthis.canvas.clear();\r\n\t\tlet newWidth = this.div.clientWidth;\r\n\t\tthis.div.clientHeight = newHeight;\r\n\r\n\t\tthis.rcMap = new Bounds( new Point(0,0), new Point(this.div.clientWidth, this.div.clientHeight));\r\n\r\n\t\tthis.canvas.resize(newWidth, newHeight);\r\n\t\tfor (let layer of this._layers) \r\n\t\t\tlayer.resize(newWidth, newHeight);\r\n\t\t\t\r\n\t\tthis.calculateOffset();\t\r\n\t\tthis.calculateExtents(MapEnums.SourceEvents.ResizeHeight);\r\n\t\tthis.refreshView(true);\r\n\t}\r\n\r\n\t// @section default properties\r\n get defaultOptions() {\r\n let _defaultOptions = {\r\n // @section Map State Options\r\n // @option crs: CRS = L.CRS.EPSG3857\r\n // The [Coordinate Reference System](#crs) to use. Don't change this if you're not\r\n // sure what it means.\r\n crs: EPSG3857,\r\n\r\n // @option center: LatLng = undefined\r\n // Initial geographic center of the map\r\n center: undefined,\r\n\r\n // @option zoom: Number = undefined\r\n // Initial map zoom level\r\n zoom: 12,\r\n\r\n // @option minZoom: Number = *\r\n // Minimum zoom level of the map.\r\n // If not specified and at least one `GridLayer` or `TileLayer` is in the map,\r\n // the lowest of their `minZoom` options will be used instead.\r\n minZoom: 4,\r\n\r\n // @option maxZoom: Number = *\r\n // Maximum zoom level of the map.\r\n // If not specified and at least one `GridLayer` or `TileLayer` is in the map,\r\n // the highest of their `maxZoom` options will be used instead.\r\n maxZoom: 22,\r\n\r\n // @option maxBounds: LatLngBounds = null\r\n // When this option is set, the map restricts the view to the given\r\n // geographical bounds, bouncing the user back if the user tries to pan\r\n // outside the view. To set the restriction dynamically, use\r\n // [`setMaxBounds`](#map-setmaxbounds) method.\r\n maxBounds: undefined,\r\n }\r\n\t\t_defaultOptions = Util.mergeOptions(_defaultOptions, this.getWCMapOptions())\r\n return _defaultOptions;\r\n\t}\r\n\r\n\tgetWCMapOptions() {\r\n\t\tlet mapOptions = { \r\n\t\t\tProjection: null, \t\t\t\t// String\r\n\t\t\tUnits: null, \t\t\t\t\t\t\t// MapEnums.UnitTypes\r\n\t\t\tExtents: {\r\n\t\t\t\tMinX: null, \t\t\t\t\t\t// Number\r\n\t\t\t\tMaxX: null, \t\t\t\t\t\t// Number\r\n\t\t\t\tMinY: null, \t\t\t\t\t\t// Number\r\n\t\t\t\tMaxX: null, \t\t\t\t\t\t// Number\r\n\t\t\t},\r\n\t\t\tLocationAndScale : {\r\n\t\t\t\tX: null, \t\t\t\t\t\t\t\t// Number\r\n\t\t\t\tY: null, \t\t\t\t\t\t\t\t// Number\r\n\t\t\t\tScale: 50000, \t\t\t\t\t\t// Number\r\n\t\t\t}\r\n }\r\n\t\treturn mapOptions;\r\n\t}\r\n\r\n\t// @section Properties \r\n /** @returns MgCanvas\r\n */\r\n get canvas() {\r\n return this._canvas;\r\n }\r\n\t\r\n\tget container() {\r\n return this._container;\r\n\t}\r\n\t\r\n /** @returns div\r\n */\r\n get div() {\r\n return this._div;\r\n }\r\n\r\n // @method zoom(): Number\r\n // Returns the current zoom level of the map view\r\n get zoom() {\r\n return this.options.zoom;\r\n\t}\r\n\t\r\n /**\r\n * @param {} value\r\n */\r\n set zoom(value) {\r\n this._zoom = value;\r\n }\r\n\r\n // @method center: Number\r\n // Returns the current zoom level of the map view\r\n get center() {\r\n\t\tif(!this.options.center && this.options.LocationAndScale)\r\n\t\t\tthis._center = toLatLng(this.options.LocationAndScale.Y, this.options.LocationAndScale.X);\r\n\t\telse if (this._center == undefined)\r\n\t\t\tthis._center = toLatLng(this.options.center[0], this.options.center[1]);\r\n\t\t\t\r\n\t\treturn this._center;\r\n }\r\n\r\n set center(value) {\r\n this._center = value;\r\n }\r\n\r\n\t// @method scale: Number\r\n // Returns the current scale of the map view\r\n get scale() {\r\n return this._scale;\r\n\t}\r\n\t\r\n\t// @method scale: Number\r\n // Sets the current scale of the map view\r\n set scale(value) {\r\n this._scale = value;\r\n\t}\t\r\n\r\n\t// @method selectedMarkupId: []\r\n \t// Returns the currently selected markup ids\r\n\tget selectedMarkupIds() {\r\n\t\tlet ids = [];\r\n\t\tif (this.geometryEditor != null) {\r\n\t\t\tif (this.geometryEditor.markupsWithinSelectionRectangle != null && this.geometryEditor.markupsWithinSelectionRectangle.length > 0)\r\n\t\t\t\tids = this.geometryEditor.markupsWithinSelectionRectangle.map(x => x.id);\r\n\t\t\tif (this.geometryEditor.selectedMarkup != null)\r\n\t\t\t\tids.push(this.geometryEditor.selectedMarkup.id);\t\t\t\r\n\t\t\tif (this.geometryEditor.activeMarkup != null && this.geometryEditor.activeMarkup.linePoints.length > 0)\r\n\t\t\t\tids.push(this.geometryEditor.activeMarkup.id);\t\t\t\r\n\t\t}\r\n\t\t\r\n\t\treturn ids;\r\n\t}\r\n\r\n\t// @method activeMarkupId: Number\r\n \t// Returns the id of the active markup\r\n\tget activeMarkupId() {\r\n\t\treturn this.geometryEditor && this.geometryEditor.activeMarkup ? this.geometryEditor.activeMarkup.id : null;\r\n\t}\t\r\n\r\n\t// @section Map initialization methods\r\n\t\r\n\t_initEvents() {\t\r\n\t\tthis.shiftKeyDown = false;\r\n\t\tthis.ctrlKeyDown = false;\r\n\r\n\t\tlet __this = this;\r\n\t\tfromEvent(document, 'keydown').subscribe(e => {\r\n\t\t if (!e.repeat && e.key == 'Shift') {\r\n\t\t\t\tconsole.log(`shiftKeyDown ${e.key}`);\t\r\n\t\t\t\t__this.shiftKeyDown = true;\r\n\t\t\t}\r\n\t\t\telse if (!e.repeat && e.key == 'Control') {\r\n\t\t\t\t__this.ctrlKeyDown = true;\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\tfromEvent(document, 'keyup').subscribe(e => {\r\n\t\t if (e.key == 'Shift') {\r\n\t\t\t console.log(`shiftKeyUp ${e.key}`);\t\r\n\t\t\t\t__this.shiftKeyDown = false;\r\n\t\t\t}\r\n\t\t\telse if (e.key == 'Control') {\r\n\t\t\t console.log(`ctrlKeyUp ${e.key}`);\t\r\n\t\t\t\t__this.ctrlKeyDown = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Subscription RxJS\r\n\t\tthis.featureHoveredEvent = new Subject();\r\n\t\tthis.featureSingleClickedEvent = new Subject();\r\n\t\tthis.featureDoubleClickedEvent = new Subject();\r\n\t\tthis.featureSelectedEvent = new Subject();\r\n\t\t\r\n\t\t/*\r\n\t\t// this will limit the emission of mouse move event to 60fps\t\t\r\n\t\t// and limit calling the hitTest function to 60fps as well\r\n\t\tlet _mouseMoveEvent = new Subject();\r\n\t\tthis.mouseMoveEvent = _mouseMoveEvent.pipe(debounce(() => interval(1000/60)));\r\n\t\tthis.mouseMoveEvent.subscribe(e => {\r\n\t\t\t__this.mouseMoveCallback(e);\r\n\t\t});\r\n\r\n\t\t\r\n\t\t// this will limit the emission of mousewheel event to 1 every 200ms\t\t\r\n\t\tlet _mouseWheelEvent = new Subject();\r\n\t\tthis.mouseWheelEvent = _mouseWheelEvent.pipe(debounce(() => interval(1000/2)));\r\n\t\tthis.mouseWheelEvent.subscribe(e => {\r\n\t\t\t__this.mouseWheelCallback(e);\r\n\t\t});\r\n */\r\n\t}\r\n\t/**\r\n\t * @param {} id\r\n\t */\r\n\t_initContainer(id) {\r\n\t\tvar container = this._container = DomUtil.get(id);\r\n\r\n\t\tif (!container) {\r\n\t\t\tthrow new Error('Map container not found.');\r\n\t\t} else if (container._leaflet_id) {\r\n\t\t\tthrow new Error('Map container is already initialized.');\r\n\t\t}\r\n\r\n\t\tthis._canvasId = Util.stamp(container);\r\n\t\r\n \t}\r\n\t/**\r\n\t */\r\n\t_initLayout() {\r\n\t\tvar container = this._container;\r\n\r\n\t\t//this._fadeAnimated = this.options.fadeAnimation && Browser.any3d;\r\n /*\r\n\t\tDomUtil.addClass(container, 'leaflet-container' +\r\n\t\t\t(Browser.touch ? ' leaflet-touch' : '') +\r\n\t\t\t(Browser.retina ? ' leaflet-retina' : '') +\r\n\t\t\t(Browser.ielt9 ? ' leaflet-oldie' : '') +\r\n\t\t\t(Browser.safari ? ' leaflet-safari' : '') +\r\n\t\t\t(this._fadeAnimated ? ' leaflet-fade-anim' : ''));\r\n */\r\n\t\tvar position = DomUtil.getStyle(container, 'position');\r\n\r\n\t\tif (position !== 'absolute' && position !== 'relative' && position !== 'fixed') {\r\n\t\t\tcontainer.style.position = 'relative';\r\n\t\t}\r\n\r\n\t\t/*\r\n\t\tthis.zoomControl = new ZoomControl();\t\r\n\t\tthis.zoomControl.addTo(this); \r\n\t\r\n\t\tthis.layerControl = new LayerControl();\r\n\r\n\t\tlet _this = this;\r\n\t\tthis.zoomControl.onZoomInEvent.subscribe(e => {\r\n\t\t\tconsole.log(e);\r\n\t\t\te.stopPropagation();\r\n\t\t\t_this.zoomIn();\r\n\t\t});\r\n\r\n\t\tthis.zoomControl.onZoomOutEvent.subscribe(e => {\r\n\t\t\tconsole.log(e);\r\n\t\t\te.stopPropagation();\r\n\t\t\t_this.zoomOut();\r\n\t\t});\r\n */\r\n\t\t// Assign the listener callback to a variable\r\n\t\t\r\n\t\t var doMouseUp = () => this.onMouseUp(event); \r\n\t\tvar doMouseMove = () => this.onMouseMove(event);\r\n\r\n\t\tthis.doMouseMoveBound = doMouseMove.bind(this);\r\n\t\tthis.doMouseUpBound = doMouseUp.bind(this);\r\n\r\n\t\tvar doMouseDown = () => this.onMouseDown(event); \r\n\t\tvar doMouseWheel = () => this.onMouseWheel(event);\r\n\t\tvar doMouseLeave = () => this.onMouseLeave(event);\r\n\t\tvar doMouseOver = () => this.enableDocumentLevelMouseMove(event) \r\n\t\tvar doDblClick = () => this.onMouseDoubleClick(event); \r\n\r\n\t\t// document.addEventListener('mouseup', doMouseUp.bind(this), true);\r\n\t\t// this._container.addEventListener('mouseup', doMouseUp.bind(this), true);\r\n\t\tthis._container.addEventListener('mouseover', doMouseOver.bind(this), true);\r\n\t\tthis._container.addEventListener('mousedown', doMouseDown.bind(this), true);\r\n\t\tthis._container.addEventListener('mousewheel', doMouseWheel.bind(this), true);\r\n\t\tthis._container.addEventListener('mouseleave', doMouseLeave.bind(this), true);\r\n\t\tthis._container.addEventListener('ondblclick', doDblClick.bind(this), true);\r\n\t\t\r\n\t\tthis.initTooltipContainer();\t\r\n\r\n\t\t// calculate offset for mouse events\r\n\t this.calculateOffset();\t\t\r\n\t}\r\n\r\n\tenableDocumentLevelMouseMove(e){\r\n\r\n\r\n\t\tif (!this.isHovering){\r\n\t\t\t// has yet to hover over container div, but now we have\r\n\t\t\tthis.isHovering = true;\r\n\t\t\tdocument.addEventListener('mousemove', this.doMouseMoveBound, true);\t\r\n\t\t\tdocument.addEventListener('mouseup', this.doMouseUpBound, true);\t\r\n\r\n\t\t}\r\n\r\n\t}\r\n\t\r\n\tcalculateOffset() {\r\n\t\tconst getOffset = (element, horizontal = false) => {\r\n\t\t\tif(!element) return 0;\r\n\t\t\treturn getOffset(element.offsetParent, horizontal) + (horizontal ? element.offsetLeft : element.offsetTop);\r\n\t\t};\r\n\t\t\r\n\t\tthis.offsetX = getOffset(this._div, true);\r\n \tthis.offsetY = getOffset(this._div) ;\r\n\r\n\t}\r\n\r\n\tgetScrollParent(node) {\r\n\t\tif (node == null) {\r\n\t\t return null;\r\n\t\t}\r\n\t \r\n\t\tif (node.scrollHeight > node.clientHeight) {\r\n\t\t return node;\r\n\t\t} else {\r\n\t\t return this.getScrollParent(node.parentNode);\r\n\t\t}\r\n\t }\r\n\r\n\r\n // @section Methods\r\n /**\r\n * @param {} div\r\n * @returns canvas DOM Element\r\n */\r\n createCanvas(div) {\r\n\t\tlet canvas = MgCanvas.createHiDPICanvas(div.clientWidth, div.clientHeight, 1);\r\n canvas.id = \"mapcontrol-\" + div.id;\r\n canvas.style.zIndex = 8;\r\n canvas.style.position = \"absolute\"; \r\n div.appendChild(canvas);\r\n\r\n this._div = div;\r\n return document.getElementById(canvas.id); \r\n }\r\n\t\r\n\t// addlayer\r\n /**\r\n * @param {MgLayer} layer\r\n */\r\n addLayer(layer) {\r\n\t\tconsole.log(\"add Layer \" + layer.id + \" To \" + this._id);\r\n\t\tthis._layers.push(layer);\r\n\t\tthis._dctLayers.set(layer.id, layer);\r\n\t\t\r\n\t\tif (layer.options.ContextLayer == true) \r\n\t\t\tthis._contextLayer = layer;\r\n\t\t\t\r\n\t\t//sort according to position; least number = bottom. greatest number = top\r\n\t\tthis._layers.sort((a, b) => {\r\n\t\t\tif(a.options.position < b.options.position) return -1;\r\n\t\t\telse if(a.options.position > b.options.position) return 1;\r\n\t\t\telse return 0;\r\n\t\t});\r\n\t}\r\n\t\r\n\tinitialiseLayers() {\r\n\t\t//this.layerControl.addTo(this, this._layers);\r\n\t}\r\n /**\r\n */\r\n refreshView(fullRefresh, hitItem, hitItemLayer) {\t\t\t\r\n\t\tthis.removeTooltip();\r\n\t\tthis._ongoingRefreshView = true;\r\n\r\n\t\t\r\n\r\n\t\tif (this.shiftKeyDown && this.dragState == DragStates.SelectDragging) {\r\n\t\t\t// do nothing do not refresh the view\r\n\t\t\tconsole.log('refreshView: do nothing, user is select dragging');\t\t\t\r\n\t\t\tthis.canvas.drawCanvasSelection(this.ptSelectionStart, this.ptSelectionEnd); \r\n\t\t}\r\n\t\telse if (this.ctrlKeyDown && this.dragState == DragStates.SelectDragging) {\t\t\t\r\n\t\t\tthis.canvas.drawCanvasSelection(this.ptDragStart, this.ptDragCurrent);\t\t\t\r\n\t\t}\r\n\t\telse if (this.canvas.isPanning) {\r\n\t\t\tconsole.log('map - refreshView - Panning');\r\n\t\t\tthis.canvas.refreshView();\r\n\t\t\t\r\n\t\t\tif (this.measurement != null)\r\n\t\t\t\tthis.measurement.render();\r\n\t\t\t\t\r\n\t\t\tif (this.geometryEditor != null && this.geometryEditor.contextLayer.isVisible(this.scale))\r\n\t\t\t this.geometryEditor.render();\r\n\t\t}\r\n\t\telse {\t\t\t\t\t\t\r\n\t\t\r\n\t\t\tlet __canvas = this.canvas;\r\n\t\t\tif (this.promises != null)\r\n\t\t\t this.promises.length = 0;\r\n\r\n\r\n\r\n\t\t\tif (this.promises.length <= 0) {\r\n\t\t\t\t// __canvas.clearAll();\r\n\t\t\t\t\tfor(let i = this._layers.length-1; i >= 0; i--) {\t\t\r\n\t\t\t\t\t\tlet layer = this._layers[i];\r\n\t\t\t\t\t\tif (layer.isVisible(this.scale)) {\r\n\r\n\t\t\t\t\t\t\tvar promise = layer.isLayerReady(this.canvas, this.cellsize);\r\n\t\t\t\t\t\t\tpromise.then(function(layer) {\r\n\t\t\t\t\t\t\t\t// layer.render(__canvas, true, __canvas.offScreenContext, 'destination-over');\t\r\n\t\t\t\t\t\t\t});\t\t\r\n\t\t\t\t\t\t\tthis.promises.push(promise);\t\t\t\r\n\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tlayer.clearItems();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t Promise.all(this.promises).then(function(layers) {\r\n\r\n\r\n\t\t\t\t\t__canvas.clearAll();\r\n\t\t\t\t\tlet reversedLayers = layers.reverse();\r\n\t\t\t\t\treversedLayers.forEach( layer => {\r\n\r\n\t\t\t\t\t\tif (layer != null && layer.isVisible(this.scale)) {\r\n\t\t\t\t\t\t\tlayer.render(__canvas, fullRefresh, __canvas.context, 'source-over');\r\n\t\t\t\t\t\t\tlayer.render(__canvas, fullRefresh, __canvas.offScreenContext, 'source-over');\r\n\t\t\t\t\t\t\tif (hitItemLayer && hitItem && layer == hitItemLayer){\r\n\t\t\t\t\t\t\t\thitItem.Shape.drawHover(__canvas, 1, __canvas.context);\r\n\t\t\t\t\t\t\t}\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif (this.measurement != null) {\r\n\t\t\t\t\t\tthis.measurement.render();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tif (this.geometryEditor != null && this.geometryEditor.contextLayer.isVisible(this.scale)) { \r\n\t\t\t\t\t\tthis.geometryEditor.render();\r\n\t\t\t\t\t\tif (this.geometryEditor.selectedMarkup == null) {\r\n\t\t\t\t\t\t\tthis.geometryEditor.render(__canvas.offScreenContext);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.drawTracked();\r\n\r\n\t\t\t\t\tthis.drawSelection();\r\n\r\n\t\t\t\t\tthis.promises = [];\r\n\t\t\t\t\t//this._ongoingRefreshView = false;\r\n\t\t\t\t\t//if(this._pendingZoomByContextOrder) {\r\n\t\t\t\t\t//\tthis.zoomByContextOrder();\r\n\t\t\t\t\t//}\r\n\r\n\r\n\r\n\t\t\t\t}.bind(this));\r\n\t\t\t}\r\n\t\t\telse {\t\t\t\t\r\n\t\t\t\tthis.invalidate();\r\n\t\t\t\t\r\n\t\t\t}\t\t\t\t\t\t\r\n\t\t}\r\n\t} \r\n\r\n\r\n\tchangeLoadingStatus(loadingStatus){\r\n\r\n\t\t\r\n\t\t\r\n\t\t// if (this.isLoadingExtents$.value && !force) // already loading, don't do anything\r\n\t\t// \treturn;\r\n\t\tlet newLoadingExtents = this.anyLoadingExtents$.value;\r\n\r\n\t\tconst index = newLoadingExtents.findIndex((obj) => obj.id === loadingStatus.id);\r\n\r\n\t\tif (index === -1) { \r\n\r\n\t\t\tif (loadingStatus.loading == true)\r\n\t\t\t\tnewLoadingExtents.push(loadingStatus);\r\n\t\t\t\t\r\n\t\t} else {\r\n\t\t\t// newLoadingExtents[index] = loadingStatus;\r\n\t\t\tnewLoadingExtents.splice(index, 1);\r\n\t\t}\r\n\r\n\t\r\n\t\tthis.anyLoadingExtents$.next(newLoadingExtents);\r\n\r\n\t}\r\n\t\r\n\r\n\t// need this?\r\n\tredraw(sourceEvent, layer, clearCanvas = true) {\t\t\r\n\t\tif (layer != null) { \r\n\t\t\tif (layer.isVisible(this.scale)) {\r\n\t\t\t\tlet __this = this;\r\n\t\t\t\tlet __canvas = this.canvas;\r\n\r\n\t\t\t\tlayer.onExtentsChanged(sourceEvent, this.rcMap, this.extents, this.cellsize, this.scale, this.canvas);\r\n\t\t\t\tlayer.isLayerReady(this.canvas, this.cellsize).then(function(layer) {\r\n \t\t\t layer.render(__canvas, true, __canvas.context);\r\n\t\t\t\t});\t\t\t\t\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlayer.clearItems();\t\t\t\t\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (clearCanvas)\r\n\t\t\tthis.canvas.clearAll();\r\n\t\t\t\r\n\t\tthis._layers.forEach( layer => {\r\n\t\t\tif (layer != null && layer.isVisible(this.scale)) {\r\n\t\t\t\tlayer.render(this.canvas, true, this.canvas.context);\r\n\t\t\t}\r\n\t\t});\t\t\t\r\n\t}\r\n\r\n\tmarkItemsAsTracked(items, layerName){\r\n\r\n\t\tif (!this.trackingMode) return;\r\n\r\n\t\tconsole.log(items);\r\n\t\tlet layer = this._layers.find(l => l._id == layerName);\r\n\r\n\t\tif (layer == null) return;\r\n\r\n\t\tfor(let i = 0; i < items.length; i++) {\r\n\t\t\tlet feature = layer._visibleItems.find(vi => vi.id == items[i].FeatureId);\r\n\t\t\tif (feature){\r\n\t\t\t\tfeature.Tracking = true;\r\n\t\t\t\tthis.trackingFeatures.push(feature);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tclearTracked(){\r\n\t\tif (this.trackingFeatures.length > 0) {\r\n\t\t\tfor (var i = 0; i < this.trackingFeatures.length; i++) {\r\n\t\t\t this.trackingFeatures[i].Tracking = false;\r\n\t\t\t}\r\n\t\t }\r\n\t \r\n\t\t this.trackingFeatures = [];\t\r\n\t}\r\n\r\n\r\n\tdrawTracked() {\t\t\r\n\t\tfor(let i = 0; i < this._layers.length; i++) {\r\n\t\t\tlet layer = this._layers[i];\t\t\t\r\n\t\t\tif (layer.isVisible(this.scale)) {\r\n\t\t\t if (layer instanceof MgFeatureLayer) {\r\n\t\t\t\t\tlayer.renderTracked(this.canvas, this.canvas.context, 'source-over');\r\n\t\t\t\t}\t\t\t\t\t\r\n\t\t\t}\t\t\t\r\n\t\t}\t\t\r\n\t}\r\n\r\n\tdrawSelection() {\t\t\r\n\t\tfor(let i = 0; i < this._layers.length; i++) {\r\n\t\t\tlet layer = this._layers[i];\t\t\t\r\n\t\t\tif (layer.isVisible(this.scale)) {\r\n\t\t\t if (layer instanceof MgFeatureLayer) {\r\n\t\t\t\t\tlayer.renderSelection(this.canvas, this.canvas.context, 'source-over');\r\n\t\t\t\t}\t\t\t\t\t\r\n\t\t\t}\t\t\t\r\n\t\t}\t\t\r\n\t}\r\n /**\r\n * @param {} promises\r\n */\r\n async checkLayerReady(promises) {\r\n for(const promise of promises) {\r\n\t\t\tawait promise.then(layer => \r\n\t\t\t{\r\n\t\t\t\tif(layer)\r\n\t\t\t\t layer.render(this.canvas); \r\n\t\t\t});\r\n }\r\n }\r\n\r\n handleClick(event) {\r\n\t\tconsole.log(`handleClick: ${event.type}`); \r\n\t\tevent.preventDefault();\r\n }\r\n\r\n // @method getBounds(): LatLngBounds\r\n // Returns the geographical bounds visible in the current map view\r\n get bounds() {\r\n\t\tvar bounds = this.getPixelBounds(),\r\n\t\t sw = this.unproject(bounds.getBottomLeft()),\r\n\t\t ne = this.unproject(bounds.getTopRight());\r\n\r\n\t\treturn new LatLngBounds(sw, ne);\r\n\t}\r\n\r\n // @method getMinZoom(): Number\r\n // Returns the minimum zoom level of the map (if set in the `minZoom` option of the map or of any layers), or `0` by default.\r\n get minZoom() {\r\n\t return this.options.minZoom === undefined ? this._layersMinZoom || 0 : this.options.minZoom;\r\n }\r\n\r\n set minZoom(value) {\r\n this._minZoom = value;\r\n\t}\r\n\t\r\n\tget fadeAnimation() {\r\n\t return this.options.fadeAnimation === undefined ? this._fadeAnimation : 0;\r\n }\r\n\r\n set fadeAnimation(value) {\r\n this._fadeAnimation = value;\r\n\t}\r\n\t\r\n\t// @method getMaxZoom(): Number\r\n\t// Returns the maximum zoom level of the map (if set in the `maxZoom` option of the map or of any layers).\r\n\tget maxZoom() {\r\n\t\treturn this.options.maxZoom === undefined ?\r\n\t\t\t(this._layersMaxZoom === undefined ? Infinity : this._layersMaxZoom) :\r\n\t\t\tthis.options.maxZoom;\r\n }\r\n\r\n set maxZoom(value) {\r\n this._maxZoom = value;\r\n }\r\n\r\n\t// @method getSize(): Point\r\n\t// Returns the current size of the map container (in pixels).\r\n\tgetSize() {\r\n\t\tif (!this._size || this._sizeChanged) {\r\n\t\t\tthis._size = new Point(\r\n\t\t\t\tthis._canvas.width || 0,\r\n\t\t\t\tthis._canvas.height || 0);\r\n\r\n\t\t\tthis._sizeChanged = false;\r\n\t\t}\r\n\t\treturn this._size.clone();\r\n\t}\r\n\r\n\t// @method getPixelBounds(): Bounds\r\n\t// Returns the bounds of the current map view in projected pixel\r\n\t// coordinates (sometimes useful in layer and overlay implementations).\r\n\tgetPixelBounds(center, zoom) {\r\n\t\tvar topLeftPoint = this._getTopLeftPoint(center, zoom);\r\n\t\treturn new Bounds(topLeftPoint, topLeftPoint.add(this.getSize()));\r\n\t}\r\n\r\n\t// TODO: Check semantics - isn't the pixel origin the 0,0 coord relative to\r\n\t// the map pane? \"left point of the map layer\" can be confusing, specially\r\n\t// since there can be negative offsets.\r\n\t// @method getPixelOrigin(): Point\r\n\t// Returns the projected pixel coordinates of the top left point of\r\n\t// the map layer (useful in custom layer and overlay implementations).\r\n\tgetPixelOrigin() {\r\n\t\tthis._checkIfLoaded();\r\n\t\treturn this._pixelOrigin;\r\n\t}\r\n\r\n\t// @method getPixelWorldBounds(zoom?: Number): Bounds\r\n\t// Returns the world's bounds in pixel coordinates for zoom level `zoom`.\r\n\t// If `zoom` is omitted, the map's current zoom level is used.\r\n\tgetPixelWorldBounds(zoom) {\r\n\t\treturn this.options.crs.getProjectedBounds(zoom === undefined ? this.zoom : zoom);\r\n\t}\r\n\r\n\t// @section Other Methods\r\n\r\n\t// @method getPane(pane: String|HTMLElement): HTMLElement\r\n\t// Returns a [map pane](#map-pane), given its name or its HTML element (its identity).\r\n\tgetPane(pane) {\r\n\t\treturn typeof pane === 'string' ? this._panes[pane] : pane;\r\n\t}\r\n\r\n\t// @method getPanes(): Object\r\n\t// Returns a plain object containing the names of all [panes](#map-pane) as keys and\r\n\t// the panes as values.\r\n\tgetPanes() {\r\n\t\treturn this._panes;\r\n\t}\r\n\r\n\t// @method getContainer: HTMLElement\r\n\t// Returns the HTML element that contains the map.\r\n\tgetContainer() {\r\n\t\treturn this._canvas;\r\n\t}\r\n\r\n\r\n\t// @section Conversion Methods\r\n\r\n\t// @method getZoomScale(toZoom: Number, fromZoom: Number): Number\r\n\t// Returns the scale factor to be applied to a map transition from zoom level\r\n\t// `fromZoom` to `toZoom`. Used internally to help with zoom animations.\r\n\tgetZoomScale(toZoom, fromZoom) {\r\n\t\t// TODO replace with universal implementation after refactoring projections\r\n\t\tvar crs = this.options.crs;\r\n\t\tfromZoom = fromZoom === undefined ? this.zoom : fromZoom;\r\n\t\treturn crs.scale(toZoom) / crs.scale(fromZoom);\r\n\t}\r\n\r\n\t// @method getScaleZoom(scale: Number, fromZoom: Number): Number\r\n\t// Returns the zoom level that the map would end up at, if it is at `fromZoom`\r\n\t// level and everything is scaled by a factor of `scale`. Inverse of\r\n\t// [`getZoomScale`](#map-getZoomScale).\r\n\tgetScaleZoom(scale, fromZoom) {\r\n\t\tvar crs = this.options.crs;\r\n\t\tfromZoom = fromZoom === undefined ? this._zoom : fromZoom;\r\n\t\tvar zoom = crs.zoom(scale * crs.scale(fromZoom));\r\n\t\treturn isNaN(zoom) ? Infinity : zoom;\r\n\t}\r\n\r\n\t// @method project(latlng: LatLng, zoom: Number): Point\r\n\t// Projects a geographical coordinate `LatLng` according to the projection\r\n\t// of the map's CRS, then scales it according to `zoom` and the CRS's\r\n\t// `Transformation`. The result is pixel coordinate relative to\r\n\t// the CRS origin.\r\n\tproject(latlng, zoom) {\r\n\t\tzoom = zoom === undefined ? this._zoom : zoom;\r\n\t\treturn this.options.crs.latLngToPoint(toLatLng(latlng), zoom);\r\n\t}\r\n\r\n\t// @method unproject(point: Point, zoom: Number): LatLng\r\n\t// Inverse of [`project`](#map-project).\r\n\tunproject(point, zoom) {\r\n\t\tzoom = zoom === undefined ? this._zoom : zoom;\r\n\t\treturn this.options.crs.pointToLatLng(toPoint(point), zoom);\r\n\t}\r\n\r\n\t// @method layerPointToLatLng(point: Point): LatLng\r\n\t// Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),\r\n\t// returns the corresponding geographical coordinate (for the current zoom level).\r\n\tlayerPointToLatLng(point) {\r\n\t\tvar projectedPoint = toPoint(point).add(this.getPixelOrigin());\r\n\t\treturn this.unproject(projectedPoint);\r\n\t}\r\n\r\n\t// @method latLngToLayerPoint(latlng: LatLng): Point\r\n\t// Given a geographical coordinate, returns the corresponding pixel coordinate\r\n\t// relative to the [origin pixel](#map-getpixelorigin).\r\n\tlatLngToLayerPoint(latlng) {\r\n\t\tvar projectedPoint = this.project(toLatLng(latlng))._round();\r\n\t\treturn projectedPoint._subtract(this.getPixelOrigin());\r\n\t}\r\n\r\n\t// @method wrapLatLng(latlng: LatLng): LatLng\r\n\t// Returns a `LatLng` where `lat` and `lng` has been wrapped according to the\r\n\t// map's CRS's `wrapLat` and `wrapLng` properties, if they are outside the\r\n\t// CRS's bounds.\r\n\t// By default this means longitude is wrapped around the dateline so its\r\n\t// value is between -180 and +180 degrees.\r\n\twrapLatLng(latlng) {\r\n\t\treturn this.options.crs.wrapLatLng(toLatLng(latlng));\r\n\t}\r\n\r\n\t// @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds\r\n\t// Returns a `LatLngBounds` with the same size as the given one, ensuring that\r\n\t// its center is within the CRS's bounds.\r\n\t// By default this means the center longitude is wrapped around the dateline so its\r\n\t// value is between -180 and +180 degrees, and the majority of the bounds\r\n\t// overlaps the CRS's bounds.\r\n\twrapLatLngBounds(latlng) {\r\n\t\treturn this.options.crs.wrapLatLngBounds(toLatLngBounds(latlng));\r\n\t}\r\n\r\n\t// @method distance(latlng1: LatLng, latlng2: LatLng): Number\r\n\t// Returns the distance between two geographical coordinates according to\r\n\t// the map's CRS. By default this measures distance in meters.\r\n\tdistance(latlng1, latlng2) {\r\n\t\treturn this.options.crs.distance(toLatLng(latlng1), toLatLng(latlng2));\r\n\t}\r\n\r\n\t// @method containerPointToLayerPoint(point: Point): Point\r\n\t// Given a pixel coordinate relative to the map container, returns the corresponding\r\n\t// pixel coordinate relative to the [origin pixel](#map-getpixelorigin).\r\n\tcontainerPointToLayerPoint(point) { // (Point)\r\n\t\treturn toPoint(point).subtract(this._getMapPanePos());\r\n\t}\r\n\r\n\t// @method layerPointToContainerPoint(point: Point): Point\r\n\t// Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),\r\n\t// returns the corresponding pixel coordinate relative to the map container.\r\n\tlayerPointToContainerPoint(point) { // (Point)\r\n\t\treturn toPoint(point).add(this._getMapPanePos());\r\n\t}\r\n\r\n\t// @method containerPointToLatLng(point: Point): LatLng\r\n\t// Given a pixel coordinate relative to the map container, returns\r\n\t// the corresponding geographical coordinate (for the current zoom level).\r\n\tcontainerPointToLatLng(point) {\r\n\t\tvar layerPoint = this.containerPointToLayerPoint(toPoint(point));\r\n\t\treturn this.layerPointToLatLng(layerPoint);\r\n\t}\r\n\r\n\t// @method latLngToContainerPoint(latlng: LatLng): Point\r\n\t// Given a geographical coordinate, returns the corresponding pixel coordinate\r\n\t// relative to the map container.\r\n\tlatLngToContainerPoint(latlng) {\r\n\t\treturn this.layerPointToContainerPoint(this.latLngToLayerPoint(toLatLng(latlng)));\r\n\t}\r\n\r\n\t// @method mouseEventToContainerPoint(ev: MouseEvent): Point\r\n\t// Given a MouseEvent object, returns the pixel coordinate relative to the\r\n\t// map container where the event took place.\r\n\tmouseEventToContainerPoint(e) {\r\n\t\treturn DomEvent.getMousePosition(e, this._container);\r\n\t}\r\n\r\n\t// @method mouseEventToLayerPoint(ev: MouseEvent): Point\r\n\t// Given a MouseEvent object, returns the pixel coordinate relative to\r\n\t// the [origin pixel](#map-getpixelorigin) where the event took place.\r\n\tmouseEventToLayerPoint(e) {\r\n\t\treturn this.containerPointToLayerPoint(this.mouseEventToContainerPoint(e));\r\n\t}\r\n\r\n\t// @method mouseEventToLatLng(ev: MouseEvent): LatLng\r\n\t// Given a MouseEvent object, returns geographical coordinate where the\r\n\t// event took place.\r\n\tmouseEventToLatLng(e) { // (MouseEvent)\r\n\t\treturn this.layerPointToLatLng(this.mouseEventToLayerPoint(e));\r\n\t}\r\n\r\n\t// @method fitBounds(bounds: LatLngBounds, options?: fitBounds options): this\r\n\t// Sets a map view that contains the given geographical bounds with the\r\n\t// maximum zoom level possible.\r\n\tfitBounds(bounds, options) {\r\n\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tif (!bounds.isValid()) {\r\n\t\t\tthrow new Error('Bounds are not valid.');\r\n\t\t}\r\n\r\n\t\tvar target = this._getBoundsCenterZoom(bounds, options);\r\n\t\treturn this.setView(target.center, target.zoom, options);\r\n\t}\r\n\r\n\t// @method fitWorld(options?: fitBounds options): this\r\n\t// Sets a map view that mostly contains the whole world with the maximum\r\n\t// zoom level possible.\r\n\tfitWorld(options) {\r\n\t\treturn this.fitBounds([[-90, -180], [90, 180]], options);\r\n\t}\r\n\r\n\t// @method panTo(latlng: LatLng, options?: Pan options): this\r\n\t// Pans the map to a given center.\r\n\tpanTo(center, options) { // (LatLng)\r\n\t\treturn this.setView(center, this._zoom, {pan: options});\r\n\t}\r\n\t\r\n\r\n\t// @method flyTo(latlng: LatLng, zoom?: Number, options?: Zoom/pan options): this\r\n\t// Sets the view of the map (geographical center and zoom) performing a smooth\r\n\t// pan-zoom animation.\r\n\tflyTo(targetCenter, targetZoom, options) {\r\n\r\n\t\toptions = options || {};\r\n\t\tif (options.animate === false || !Browser.any3d) {\r\n\t\t\treturn this.setView(targetCenter, targetZoom, options);\r\n\t\t}\r\n\r\n\t\tthis._stop();\r\n\r\n\t\tvar from = this.project(this.getCenter()),\r\n\t\t to = this.project(targetCenter),\r\n\t\t size = this.getSize(),\r\n\t\t startZoom = this._zoom;\r\n\r\n\t\ttargetCenter = toLatLng(targetCenter);\r\n\t\ttargetZoom = targetZoom === undefined ? startZoom : targetZoom;\r\n\r\n\t\tvar w0 = Math.max(size.x, size.y),\r\n\t\t w1 = w0 * this.getZoomScale(startZoom, targetZoom),\r\n\t\t u1 = (to.distanceTo(from)) || 1,\r\n\t\t rho = 1.42,\r\n\t\t rho2 = rho * rho;\r\n\r\n\t\tfunction r(i) {\r\n\t\t\tvar s1 = i ? -1 : 1,\r\n\t\t\t s2 = i ? w1 : w0,\r\n\t\t\t t1 = w1 * w1 - w0 * w0 + s1 * rho2 * rho2 * u1 * u1,\r\n\t\t\t b1 = 2 * s2 * rho2 * u1,\r\n\t\t\t b = t1 / b1,\r\n\t\t\t sq = Math.sqrt(b * b + 1) - b;\r\n\r\n\t\t\t // workaround for floating point precision bug when sq = 0, log = -Infinite,\r\n\t\t\t // thus triggering an infinite loop in flyTo\r\n\t\t\t var log = sq < 0.000000001 ? -18 : Math.log(sq);\r\n\r\n\t\t\treturn log;\r\n\t\t}\r\n\r\n\t\tfunction sinh(n) { return (Math.exp(n) - Math.exp(-n)) / 2; }\r\n\t\tfunction cosh(n) { return (Math.exp(n) + Math.exp(-n)) / 2; }\r\n\t\tfunction tanh(n) { return sinh(n) / cosh(n); }\r\n\r\n\t\tvar r0 = r(0);\r\n\r\n\t\tfunction w(s) { return w0 * (cosh(r0) / cosh(r0 + rho * s)); }\r\n\t\tfunction u(s) { return w0 * (cosh(r0) * tanh(r0 + rho * s) - sinh(r0)) / rho2; }\r\n\r\n\t\tfunction easeOut(t) { return 1 - Math.pow(1 - t, 1.5); }\r\n\r\n\t\tvar start = Date.now(),\r\n\t\t S = (r(1) - r0) / rho,\r\n\t\t duration = options.duration ? 1000 * options.duration : 1000 * S * 0.8;\r\n\r\n\t\tfunction frame() {\r\n\t\t\tvar t = (Date.now() - start) / duration,\r\n\t\t\t s = easeOut(t) * S;\r\n\r\n\t\t\tif (t <= 1) {\r\n\t\t\t\tthis._flyToFrame = Util.requestAnimFrame(frame, this);\r\n\r\n\t\t\t\tthis._move(\r\n\t\t\t\t\tthis.unproject(from.add(to.subtract(from).multiplyBy(u(s) / u1)), startZoom),\r\n\t\t\t\t\tthis.getScaleZoom(w0 / w(s), startZoom),\r\n\t\t\t\t\t{flyTo: true});\r\n\r\n\t\t\t} else {\r\n\t\t\t\tthis\r\n\t\t\t\t\t._move(targetCenter, targetZoom)\r\n\t\t\t\t\t._moveEnd(true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._moveStart(true, options.noMoveStart);\r\n\r\n\t\tframe.call(this);\r\n\t\treturn this;\r\n\t}\r\n\r\n\t// @method flyToBounds(bounds: LatLngBounds, options?: fitBounds options): this\r\n\t// Sets the view of the map with a smooth animation like [`flyTo`](#map-flyto),\r\n\t// but takes a bounds parameter like [`fitBounds`](#map-fitbounds).\r\n\tflyToBounds(bounds, options) {\r\n\t\tvar target = this._getBoundsCenterZoom(bounds, options);\r\n\t\treturn this.flyTo(target.center, target.zoom, options);\r\n\t}\r\n\r\n\t// @method setMaxBounds(bounds: Bounds): this\r\n\t// Restricts the map view to the given bounds (see the [maxBounds](#map-maxbounds) option).\r\n\tsetMaxBounds(bounds) {\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tif (!bounds.isValid()) {\r\n\t\t\tthis.options.maxBounds = null;\r\n\t\t\treturn this.off('moveend', this._panInsideMaxBounds);\r\n\t\t} else if (this.options.maxBounds) {\r\n\t\t\tthis.off('moveend', this._panInsideMaxBounds);\r\n\t\t}\r\n\r\n\t\tthis.options.maxBounds = bounds;\r\n\r\n\t\tif (this._loaded) {\r\n\t\t\tthis._panInsideMaxBounds();\r\n\t\t}\r\n\r\n\t\treturn this.on('moveend', this._panInsideMaxBounds);\r\n\t}\r\n\r\n\t// @method setMinZoom(zoom: Number): this\r\n\t// Sets the lower limit for the available zoom levels (see the [minZoom](#map-minzoom) option).\r\n\tsetMinZoom(zoom) {\r\n\t\tvar oldZoom = this.options.minZoom;\r\n\t\tthis.options.minZoom = zoom;\r\n\r\n\t\tif (this._loaded && oldZoom !== zoom) {\r\n\t\t\tthis.fire('zoomlevelschange');\r\n\r\n\t\t\tif (this.getZoom() < this.options.minZoom) {\r\n\t\t\t\treturn this.setZoom(zoom);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t// @method setMaxZoom(zoom: Number): this\r\n\t// Sets the upper limit for the available zoom levels (see the [maxZoom](#map-maxzoom) option).\r\n\tsetMaxZoom(zoom) {\r\n\t\tvar oldZoom = this.options.maxZoom;\r\n\t\tthis.options.maxZoom = zoom;\r\n\r\n\t\tif (this._loaded && oldZoom !== zoom) {\r\n\t\t\tthis.fire('zoomlevelschange');\r\n\r\n\t\t\tif (this.getZoom() > this.options.maxZoom) {\r\n\t\t\t\treturn this.setZoom(zoom);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t// @method panInsideBounds(bounds: LatLngBounds, options?: Pan options): this\r\n\t// Pans the map to the closest view that would lie inside the given bounds (if it's not already), controlling the animation using the options specific, if any.\r\n\tpanInsideBounds(bounds, options) {\r\n\t\tthis._enforcingBounds = true;\r\n\t\tvar center = this.getCenter(),\r\n\t\t newCenter = this._limitCenter(center, this._zoom, toLatLngBounds(bounds));\r\n\r\n\t\tif (!center.equals(newCenter)) {\r\n\t\t\tthis.panTo(newCenter, options);\r\n\t\t}\r\n\r\n\t\tthis._enforcingBounds = false;\r\n\t\treturn this;\r\n\t}\r\n\r\n\t// @method panInside(latlng: LatLng, options?: options): this\r\n\t// Pans the map the minimum amount to make the `latlng` visible. Use\r\n\t// `padding`, `paddingTopLeft` and `paddingTopRight` options to fit\r\n\t// the display to more restricted bounds, like [`fitBounds`](#map-fitbounds).\r\n\t// If `latlng` is already within the (optionally padded) display bounds,\r\n\t// the map will not be panned.\r\n\tpanInside(latlng, options) {\r\n\t\toptions = options || {};\r\n\r\n\t\tvar paddingTL = toPoint(options.paddingTopLeft || options.padding || [0, 0]),\r\n\t\t paddingBR = toPoint(options.paddingBottomRight || options.padding || [0, 0]),\r\n\t\t center = this.getCenter(),\r\n\t\t pixelCenter = this.project(center),\r\n\t\t pixelPoint = this.project(latlng),\r\n\t\t pixelBounds = this.getPixelBounds(),\r\n\t\t halfPixelBounds = pixelBounds.getSize().divideBy(2),\r\n\t\t paddedBounds = toBounds([pixelBounds.min.add(paddingTL), pixelBounds.max.subtract(paddingBR)]);\r\n\r\n\t\tif (!paddedBounds.contains(pixelPoint)) {\r\n\t\t\tthis._enforcingBounds = true;\r\n\t\t\tvar diff = pixelCenter.subtract(pixelPoint),\r\n\t\t\t newCenter = toPoint(pixelPoint.x + diff.x, pixelPoint.y + diff.y);\r\n\r\n\t\t\tif (pixelPoint.x < paddedBounds.min.x || pixelPoint.x > paddedBounds.max.x) {\r\n\t\t\t\tnewCenter.x = pixelCenter.x - diff.x;\r\n\t\t\t\tif (diff.x > 0) {\r\n\t\t\t\t\tnewCenter.x += halfPixelBounds.x - paddingTL.x;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tnewCenter.x -= halfPixelBounds.x - paddingBR.x;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (pixelPoint.y < paddedBounds.min.y || pixelPoint.y > paddedBounds.max.y) {\r\n\t\t\t\tnewCenter.y = pixelCenter.y - diff.y;\r\n\t\t\t\tif (diff.y > 0) {\r\n\t\t\t\t\tnewCenter.y += halfPixelBounds.y - paddingTL.y;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tnewCenter.y -= halfPixelBounds.y - paddingBR.y;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.panTo(this.unproject(newCenter), options);\r\n\t\t\tthis._enforcingBounds = false;\r\n\t\t}\r\n\t\treturn this;\r\n\t}\t\r\n\r\n\t// @section Methods for modifying map state\r\n\t// @method stop(): this\r\n\t// Stops the currently running `panTo` or `flyTo` animation, if any.\r\n\tstop() {\r\n\t\tthis.setZoom(this._limitZoom(this._zoom));\r\n\t\tif (!this.options.zoomSnap) {\r\n\t\t\tthis.fire('viewreset');\r\n\t\t}\r\n\t\treturn this._stop();\r\n\t}\r\n\r\n\t// @section Geolocation methods\r\n\t// @method locate(options?: Locate options): this\r\n\t// Tries to locate the user using the Geolocation API, firing a [`locationfound`](#map-locationfound)\r\n\t// event with location data on success or a [`locationerror`](#map-locationerror) event on failure,\r\n\t// and optionally sets the map view to the user's location with respect to\r\n\t// detection accuracy (or to the world view if geolocation failed).\r\n\t// Note that, if your page doesn't use HTTPS, this method will fail in\r\n\t// modern browsers ([Chrome 50 and newer](https://sites.google.com/a/chromium.org/dev/Home/chromium-security/deprecating-powerful-features-on-insecure-origins))\r\n\t// See `Locate options` for more details.\r\n\tlocate(options) {\r\n\r\n\t\toptions = this._locateOptions = Util.extend({\r\n\t\t\ttimeout: 10000,\r\n\t\t\twatch: false\r\n\t\t\t// setView: false\r\n\t\t\t// maxZoom: \r\n\t\t\t// maximumAge: 0\r\n\t\t\t// enableHighAccuracy: false\r\n\t\t}, options);\r\n\r\n\t\tif (!('geolocation' in navigator)) {\r\n\t\t\tthis._handleGeolocationError({\r\n\t\t\t\tcode: 0,\r\n\t\t\t\tmessage: 'Geolocation not supported.'\r\n\t\t\t});\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tvar onResponse = Util.bind(this._handleGeolocationResponse, this),\r\n\t\t onError = Util.bind(this._handleGeolocationError, this);\r\n\r\n\t\tif (options.watch) {\r\n\t\t\tthis._locationWatchId =\r\n\t\t\t navigator.geolocation.watchPosition(onResponse, onError, options);\r\n\t\t} else {\r\n\t\t\tnavigator.geolocation.getCurrentPosition(onResponse, onError, options);\r\n\t\t}\r\n\t\treturn this;\r\n\t}\r\n\r\n\t// @method stopLocate(): this\r\n\t// Stops watching location previously initiated by `map.locate({watch: true})`\r\n\t// and aborts resetting the map view if map.locate was called with\r\n\t// `{setView: true}`.\r\n\tstopLocate() {\r\n\t\tif (navigator.geolocation && navigator.geolocation.clearWatch) {\r\n\t\t\tnavigator.geolocation.clearWatch(this._locationWatchId);\r\n\t\t}\r\n\t\tif (this._locateOptions) {\r\n\t\t\tthis._locateOptions.setView = false;\r\n\t\t}\r\n\t\treturn this;\r\n\t}\r\n \t\r\n\t_findEventTargets(e, type) {\r\n\t\tvar targets = [],\r\n\t\t target,\r\n\t\t isHover = type === 'mouseout' || type === 'mouseover',\r\n\t\t src = e.target || e.srcElement,\r\n\t\t dragging = false;\r\n\r\n\t\twhile (src) {\r\n\t\t\ttarget = this._targets[Util.stamp(src)];\r\n\t\t\tif (target && (type === 'click' || type === 'preclick') && !e._simulated && this._draggableMoved(target)) {\r\n\t\t\t\t// Prevent firing click after you just dragged an object.\r\n\t\t\t\tdragging = true;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tif (target && target.listens(type, true)) {\r\n\t\t\t\tif (isHover && !DomEvent.isExternalTarget(src, e)) { break; }\r\n\t\t\t\ttargets.push(target);\r\n\t\t\t\tif (isHover) { break; }\r\n\t\t\t}\r\n\t\t\tif (src === this._canvas) { break; }\r\n\t\t\tsrc = src.parentNode;\r\n\t\t}\r\n\t\tif (!targets.length && !dragging && !isHover && DomEvent.isExternalTarget(src, e)) {\r\n\t\t\ttargets = [this];\r\n\t\t}\r\n\t\treturn targets;\r\n\t}\r\n\r\n\t\r\n _fireDOMEvent(e, type, targets) {\r\n\r\n\t\tif (e.type === 'click') {\r\n\t\t\t// Fire a synthetic 'preclick' event which propagates up (mainly for closing popups).\r\n\t\t\t// @event preclick: MouseEvent\r\n\t\t\t// Fired before mouse click on the map (sometimes useful when you\r\n\t\t\t// want something to happen on click before any existing click\r\n\t\t\t// handlers start running).\r\n\t\t\tvar synth = Util.extend({}, e);\r\n\t\t\tsynth.type = 'preclick';\r\n\t\t\tthis._fireDOMEvent(synth, synth.type, targets);\r\n\t\t}\r\n\r\n\t\tif (e._stopped) { return; }\r\n\r\n\t\t// Find the layer the event is propagating from and its parents.\r\n\t\ttargets = (targets || []).concat(this._findEventTargets(e, type));\r\n\r\n\t\tif (!targets.length) { return; }\r\n\r\n\t\tvar target = targets[0];\r\n\t\tif (type === 'contextmenu' && target.listens(type, true)) {\r\n\t\t\tDomEvent.preventDefault(e);\r\n\t\t}\r\n\r\n\t\tvar data = {\r\n\t\t\toriginalEvent: e\r\n\t\t};\r\n\r\n\t\tif (e.type !== 'keypress' && e.type !== 'keydown' && e.type !== 'keyup') {\r\n\t\t\tvar isMarker = target.getLatLng && (!target._radius || target._radius <= 10);\r\n\t\t\tdata.containerPoint = isMarker ?\r\n\t\t\t\tthis.latLngToContainerPoint(target.getLatLng()) : this.mouseEventToContainerPoint(e);\r\n\t\t\tdata.layerPoint = this.containerPointToLayerPoint(data.containerPoint);\r\n\t\t\tdata.latlng = isMarker ? target.getLatLng() : this.layerPointToLatLng(data.layerPoint);\r\n\t\t}\r\n\r\n const _mouseEvents = ['click', 'dblclick', 'mouseover', 'mouseout', 'contextmenu'];\r\n\r\n\t\tfor (var i = 0; i < targets.length; i++) {\r\n\t\t\ttargets[i].fire(type, data, true);\r\n\t\t\tif (data.originalEvent._stopped ||\r\n\t\t\t\t(targets[i].options.bubblingMouseEvents === false && Util.indexOf(_mouseEvents, type) !== -1)) { return; }\r\n\t\t}\r\n\t}\r\n\r\n\t_draggableMoved(obj) {\r\n\t\tobj = obj.dragging && obj.dragging.enabled() ? obj : this;\r\n\t\treturn (obj.dragging && obj.dragging.moved()) || (this.boxZoom && this.boxZoom.moved());\r\n\t}\r\n\r\n\t// @section Other Methods\r\n\r\n\t// @method whenReady(fn: Function, context?: Object): this\r\n\t// Runs the given function `fn` when the map gets initialized with\r\n\t// a view (center and zoom) and at least one layer, or immediately\r\n\t// if it's already initialized, optionally passing a function context.\r\n\twhenReady(callback, context) {\r\n\t\tif (this._loaded) {\r\n\t\t\tcallback.call(context || this, {target: this});\r\n\t\t} else {\r\n\t\t\tthis.on('load', callback, context);\r\n\t\t}\r\n\t\treturn this;\r\n\t}\r\n\r\n\r\n\t// private methods for getting map state\r\n\r\n\t_getMapPanePos() {\r\n\t\treturn DomUtil.getPosition(this._canvas) || new Point(0, 0);\r\n\t}\r\n\r\n\t_moved() {\r\n\t\tvar pos = this._getMapPanePos();\r\n\t\treturn pos && !pos.equals([0, 0]);\r\n\t}\r\n\r\n\t_getTopLeftPoint(center, zoom) {\r\n\t\tvar pixelOrigin = center && zoom !== undefined ?\r\n\t\t\tthis._getNewPixelOrigin(center, zoom) :\r\n\t\t\tthis.getPixelOrigin();\r\n\t\treturn pixelOrigin.subtract(this._getMapPanePos());\r\n\t}\r\n\r\n\t_getNewPixelOrigin(center, zoom) {\r\n\t\tvar viewHalf = this.getSize()._divideBy(2);\r\n\t\treturn this.project(center, zoom)._subtract(viewHalf)._add(this._getMapPanePos())._round();\r\n\t}\r\n\r\n\t_latLngToNewLayerPoint(latlng, zoom, center) {\r\n\t\tvar topLeft = this._getNewPixelOrigin(center, zoom);\r\n\t\treturn this.project(latlng, zoom)._subtract(topLeft);\r\n\t}\r\n\r\n\t_latLngBoundsToNewLayerBounds(latLngBounds, zoom, center) {\r\n\t\tvar topLeft = this._getNewPixelOrigin(center, zoom);\r\n\t\treturn toBounds([\r\n\t\t\tthis.project(latLngBounds.getSouthWest(), zoom)._subtract(topLeft),\r\n\t\t\tthis.project(latLngBounds.getNorthWest(), zoom)._subtract(topLeft),\r\n\t\t\tthis.project(latLngBounds.getSouthEast(), zoom)._subtract(topLeft),\r\n\t\t\tthis.project(latLngBounds.getNorthEast(), zoom)._subtract(topLeft)\r\n\t\t]);\r\n\t}\r\n\r\n\t// @section Methods for modifying map state\r\n\t// @method setView(center: LatLng, scale: Number): this\r\n\t// Sets the view of the map (geographical center and scale) \r\n\tsetView(center, scale, mapOptionType) {\r\n\t\t\r\n\t\tif(this.pendingSetExtentsParam != null) {\t\t\r\n\t\t\tthis.setInitialExtents(MapEnums.SourceEvents.SetView, this.pendingSetExtentsParam, true);\r\n\t\t\treturn;\t\t\t\r\n\t\t}\r\n\r\n\t\t//zoom = zoom === undefined ? this._zoom : this._limitZoom(zoom);\r\n\t\tthis.center = center;\r\n\t\tthis.mapOptionType = mapOptionType;\t\t\r\n\t\tvar findNewExtents = false;\r\n\r\n\t\t// MapActivity with Context (search) but no query fields - means auto show results without clicking \"Search\" button\r\n\t\t// We need to get new extents according to feature geometry bounds\r\n\t\tif(this.mapOptionType == MapEnums.MapOptionTypes.MAPACTIVITY && this.options.Context && !this.options.HasQueryFields && this._contextLayer) {\r\n\t\t\tfindNewExtents = true;\r\n\t\t}\r\n\r\n\t\tif(findNewExtents) {\t\t\t\t\t\t\t\r\n\t\t\tthis._contextLayer.searchFeatures(\"\", -1, false, 0, 0).then(function(params) {\r\n\t\t\t\t// this.convertBoundsToScale(params.bounds);\t\t\t\t\r\n\t\t\t\t// this.updateExtents(this.scale / MgMap.DPI / this.getInchesPerUnit(0), true); \t\t\t\t\r\n\t\t\t\tthis.calculateOffset();\r\n\t\t\t\tthis.calculateExtents(MapEnums.SourceEvents.SetView);\r\n\t\t\t\tthis.refreshView(false);\r\n\t\t\t}.bind(this));\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis._zoom = Util.scaleToZoomLevel(scale);\r\n\t\t\tthis.center = this._limitCenter(toLatLng(this.center), this._zoom, this.options.maxBounds);\r\n\t\t\tthis.scale = scale; //Util.zoomLevelToScale(this._zoom);\r\n\t\t\t// this.scale = Util.zoomLevelToScale(this._zoom);\r\n\t\t\t// this.updateExtents(MapEnums.SourceEvents.SetView, this.scale / MgMap.DPI / this.getInchesPerUnit(0)); \r\n\t\t\tthis.calculateOffset();\r\n\t\t\tthis.calculateExtents(MapEnums.SourceEvents.SetView);\r\n\t\t\tthis.refreshView(false);\r\n\t\t}\r\n\r\n\t\tthis._initialExtentsDone = true;\r\n\t\t\t\t\r\n\t}\r\n\r\n\tsetInitialExtents(sourceEvent, extents, skipRefreshView = false, extentsPercent = null) {\r\n\t\t\t\t\r\n\t\tif(this.pendingSetExtentsParam != null) {\t\t\r\n\t\t\textents = this.pendingSetExtentsParam.extents;\r\n\t\t\tthis.pendingSetExtentsParam = null;\r\n\t\t}\r\n\r\n\t\tlet xScale = (extents.MaxX - extents.MinX) / this.rcMap.Width * MgMap.DPI * this.getInchesPerUnit(0);\r\n\t\tlet yScale = (extents.MaxY - extents.MinY) / this.rcMap.Height * MgMap.DPI * this.getInchesPerUnit(0);\r\n\r\n\t\tif (extentsPercent && extentsPercent != \"100\"){\r\n\t\t\tlet zoomedInScale = Math.max(xScale, yScale);\r\n\r\n\t\t\tlet overscan = +extentsPercent / 100.0;\r\n\t\t\t xScale = zoomedInScale * extents.Width * overscan / extents.Width;\r\n\t\t\t yScale = zoomedInScale * extents.Height * overscan / extents.Height;\r\n\t\t}\r\n\r\n\r\n\t\tthis.center = toLatLng((extents.MinY + extents.MaxY) / 2.0, (extents.MinX + extents.MaxX) / 2.0);\r\n\t\tthis.scale = Math.max(xScale, yScale);\r\n\t\tthis.homeCenter = Object.assign({},this.center, {X: this.center.X, Y: this.center.Y});\r\n\t\t\r\n\t\t// getting weird behaviour from this, must deep copy\r\n\t\t// this.homeScale = Object.assign({},this.scale);\r\n\r\n\t\tthis.homeScale = JSON.parse(JSON.stringify(this.scale));\r\n\r\n\r\n\t\tthis.calculateExtents(sourceEvent);\t\r\n\t\t// this.updateExtents(sourceEvent, this.scale / MgMap.DPI / this.getInchesPerUnit(0));\r\n\r\n\t\tif (!skipRefreshView){\r\n\t\t\tthis.refreshView(true);\t\r\n\t\t}\r\n\t\r\n\t\tthis._initialExtentsDone = true;\t\t\r\n\t}\r\n\r\n\tconvertBoundsToScale(extents) {\r\n\t\tif (extents != null) {\r\n\t\t\r\n\t\t\tvar MinX = extents.SouthWest.lng;\r\n\t\t\tvar MaxY = extents.SouthWest.lat;\r\n\t\t\tvar MaxX = extents.NorthEast.lng;\r\n\t\t\tvar MinY = extents.NorthEast.lat;\r\n\r\n\t\t\tthis.center = toLatLng((extents.MinY + extents.MaxY) / 2.0, (extents.MinX + extents.MaxX) / 2.0);\r\n\r\n\t\t\tlet xScale = Math.abs((MaxX - MinX) / this.rcMap.Width * MgMap.DPI * this.getInchesPerUnit(0));\r\n\t\t\tlet yScale = Math.abs((MaxY - MinY) / this.rcMap.Height * MgMap.DPI * this.getInchesPerUnit(0));\r\n\r\n\t\t\tthis.scale = Math.max(xScale, yScale);\r\n\t\t}\r\n\t\t\t\r\n\t}\r\n\r\n\t// @method setZoom(zoom: Number, options?: Zoom/pan options): this\r\n\t// Sets the zoom of the map.\r\n\tsetZoom(zoom, options) {\r\n\t\tif (!this._loaded) {\r\n\t\t\tthis._zoom = zoom;\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tthis.setView(this.center, zoom, {zoom: options});\r\n\t\tthis.refreshView();\r\n\t}\r\n\r\n\tset onZoomCallback(callback) {\r\n\t\tthis.cbZoom = callback;\r\n\t}\r\n\r\n\tpointToWorldCoordinate(World, Client, Cellsize, point) { \r\n\t\treturn new LatLng(World.MaxY - ((point.y - Client.MinY) * Cellsize), (point.x * Cellsize) + World.MinX); \r\n\t}\r\n\r\n\tworldToClient(World, Cellsize, lat, lng) {\r\n\t\treturn new Point(Math.trunc((lng - World.MinX) / Cellsize), Math.trunc((World.MaxY - lat) / Cellsize));\r\n\t}\r\n\r\n\tzoomIn(e) {\r\n\t\t//if (this.promises != null && this.promises.length > 0)\r\n\t\t// return;\r\n\t\tlet w = this.canvas.width;\r\n\t\tlet h = this.canvas.height;\r\n\r\n\t\tlet newW = w * 0.5;\r\n\t\tlet newH = h * 0.5;\r\n\r\n\t\tlet ptStart = new Point(newW, newH);\r\n\t\tlet ptEnd = new Point(w - newW, h - newH);\r\n\t\t\r\n\t\tlet rcMap = new Bounds( ptStart, ptEnd);\r\n \r\n\t\t//let latLng1 = toLatLng(this.extents.MaxY - (ptStart.y) * this.cellsize, (ptStart.x * this.cellsize) + this.extents.MinX); \r\n\t\t//let latLng2 = toLatLng(this.extents.MaxY - (ptEnd.y) * this.cellsize, (ptEnd.x * this.cellsize) + this.extents.MinX);\r\n\t\t//let extents = new LatLngBounds(latLng1, latLng2);\r\n\r\n\t\tthis._zoom = Util.scaleToZoomLevel(this._scale / 1.5);\t\r\n\t\tif (this._zoom < this.maxZoom) {\r\n\t\t\tthis._scale /= 1.5;\r\n\r\n\t\t\t//this.canvas.drawCroppedCanvas(ptStart.x, ptStart.y, ptEnd.x - ptStart.x, ptEnd.y - ptEnd.y, 0.5, rcMap.height, rcMap.width);\r\n\t\t\tthis.canvas.clearAll();\r\n\t\t\t// if (e) \r\n\r\n\t\t\tif (e && !this.loadFeatures){\r\n\t\t\t\tthis.calculateExtents(MapEnums.SourceEvents.Zoom, (e.offsetX - newW), newH - e.offsetY);\r\n\t\t\t} else{\r\n\t\t\t\tthis._scale *= 1.5;\r\n\t\t\t\tthis.calculateExtents(MapEnums.SourceEvents.Zoom);\r\n\t\t\t} \r\n\r\n\t\t\tthis.calculateExtents(MapEnums.SourceEvents.PanDragging);\t\t\t\t\r\n\t\t\tthis.refreshView(false);\r\n\t\t}\t\t\r\n\r\n\t\tif (this.cbZoom) this.cbZoom(this.scale);\r\n\r\n\t}\r\n\r\n\tzoomOut(e) {\r\n\t\t//if (this.promises != null && this.promises.length > 0)\r\n\t\t//\treturn;\r\n\t\t\t\r\n\t\tlet w = this.canvas.width;\r\n\t\tlet h = this.canvas.height;\r\n\r\n\t\tlet newW = w * 0.5;\r\n\t\tlet newH = h * 0.5;\r\n\r\n\t\tlet ptStart = new Point(-1 * newW, -1 * newH);\r\n\t\tlet ptEnd = new Point(w + newW, h + newH);\r\n\r\n\t\tlet rcMap = new Bounds( ptStart, ptEnd);\t\t\r\n\t\tthis._zoom = Util.scaleToZoomLevel(this._scale * 1.5);\r\n\t\t\r\n\t\tif (this._zoom > this.minZoom) {\r\n\t\t\tthis._scale *= 1.5;\r\n\r\n\t\t\t//this.canvas.drawCroppedCanvas(ptStart.x, ptStart.y, 0, 0, 1.5, rcMap.height, rcMap.width);\r\n\t\t\tthis.canvas.clearAll();\r\n\t\t\tif (e && !this.loadFeatures){\r\n\t\t\t\tthis.calculateExtents(MapEnums.SourceEvents.Zoom, (e.offsetX - newW), newH - e.offsetY);\r\n\t\t\t} else{\r\n\t\t\t\tthis._scale /= 1.5;\r\n\t\t\t\tthis.calculateExtents(MapEnums.SourceEvents.Zoom);\r\n\t\t\t} \r\n\r\n\t\t\tthis.calculateExtents(MapEnums.SourceEvents.PanDragging);\t\t\t\t\r\n\t\t\tthis.refreshView(false);\r\n\t\t}\t\r\n\r\n\t\tif (this.cbZoom)\r\n\t\t this.cbZoom(this.scale);\t\r\n\r\n\r\n\t}\r\n\r\n\tshowLayer(layer) {\r\n\t\tvar index = parseInt(layer);\r\n\t\tif (index != NaN) {\r\n\t\t\tlet layer = this._layers[index];\r\n\r\n\t\t layer.visible = !layer.visible;\r\n\t\t\tlayer.cancelRequest();\r\n\t\t\t\r\n\t\t\tif (layer.visible == false)\r\n\t\t\t layer.clearItems();\r\n\r\n\t\t\tthis.refreshView(true);\t\t\t\r\n\t\t}\r\n\t} \r\n\t\r\n\t\r\n\t_stop() {\r\n\t\tUtil.cancelAnimFrame(this._flyToFrame);\r\n\t\tif (this._panAnim) {\r\n\t\t\tthis._panAnim.stop();\r\n\t\t}\r\n\t\treturn this;\r\n\t}\r\n\r\n\t_panInsideMaxBounds() {\r\n\t\tif (!this._enforcingBounds) {\r\n\t\t\tthis.panInsideBounds(this.options.maxBounds);\r\n\t\t}\r\n\t}\r\n\r\n\t_checkIfLoaded() {\r\n\t\tif (!this._loaded) {\r\n\t\t\tthrow new Error('Set map center and zoom first.');\r\n\t\t}\r\n }\r\n \t\r\n\t// @section Private fuctions Layers\r\n\t// layer point of the current center\r\n\t_getCenterLayerPoint() {\r\n\t\treturn this.containerPointToLayerPoint(this.getSize()._divideBy(2));\r\n\t}\r\n\r\n\t// offset of the specified place to the current center in pixels\r\n\t_getCenterOffset(latlng) {\r\n\t\treturn this.latLngToLayerPoint(latlng).subtract(this._getCenterLayerPoint());\r\n\t}\r\n\r\n\t// adjust center for view to get inside bounds\r\n\t_limitCenter(center, zoom, bounds) {\r\n\r\n\t\tif (!bounds) { return center; }\r\n\r\n\t\tvar centerPoint = this.project(center, zoom),\r\n\t\t viewHalf = this.getSize().divideBy(2),\r\n\t\t viewBounds = new Bounds(centerPoint.subtract(viewHalf), centerPoint.add(viewHalf)),\r\n\t\t offset = this._getBoundsOffset(viewBounds, bounds, zoom);\r\n\r\n\t\t// If offset is less than a pixel, ignore.\r\n\t\t// This prevents unstable projections from getting into\r\n\t\t// an infinite loop of tiny offsets.\r\n\t\tif (offset.round().equals([0, 0])) {\r\n\t\t\treturn center;\r\n\t\t}\r\n\r\n\t\treturn this.unproject(centerPoint.add(offset), zoom);\r\n\t}\r\n\r\n\t// adjust offset for view to get inside bounds\r\n\t/**\r\n\t * @param {} offset\r\n\t * @param {} bounds\r\n\t */\r\n\t_limitOffset(offset, bounds) {\r\n\t\tif (!bounds) { return offset; }\r\n\r\n\t\tvar viewBounds = this.getPixelBounds(),\r\n\t\t newBounds = new Bounds(viewBounds.min.add(offset), viewBounds.max.add(offset));\r\n\r\n\t\treturn offset.add(this._getBoundsOffset(newBounds, bounds));\r\n\t}\r\n\r\n\t// returns offset needed for pxBounds to get inside maxBounds at a specified zoom\r\n\t/**\r\n\t * @param {} pxBounds\r\n\t * @param {} maxBounds\r\n\t * @param {} zoom\r\n\t */\r\n\t_getBoundsOffset(pxBounds, maxBounds, zoom) {\r\n\t\tvar projectedMaxBounds = toBounds(\r\n\t\t this.project(maxBounds.getNorthEast(), zoom),\r\n\t\t this.project(maxBounds.getSouthWest(), zoom)\r\n\t\t ),\r\n\t\t minOffset = projectedMaxBounds.min.subtract(pxBounds.min),\r\n\t\t maxOffset = projectedMaxBounds.max.subtract(pxBounds.max),\r\n\r\n\t\t dx = this._rebound(minOffset.x, -maxOffset.x),\r\n\t\t dy = this._rebound(minOffset.y, -maxOffset.y);\r\n\r\n\t\treturn new Point(dx, dy);\r\n\t}\r\n\t\r\n\t/**\r\n\t * @param {} left\r\n\t * @param {} right\r\n\t */\r\n\t_rebound(left, right) {\r\n\t\treturn left + right > 0 ?\r\n\t\t\tMath.round(left - right) / 2 :\r\n\t\t\tMath.max(0, Math.ceil(left)) - Math.max(0, Math.floor(right));\r\n }\r\n \r\n\t/**\r\n\t * @param {} zoom\r\n\t */\r\n\t_limitZoom(zoom) {\r\n\t\tvar min = this.minZoom,\r\n\t\t max = this.maxZoom,\r\n\t\t snap = Browser.any3d ? this.options.zoomSnap : 1;\r\n\t\tif (snap) {\r\n\t\t\tzoom = Math.round(zoom / snap) * snap;\r\n\t\t}\r\n\t\treturn Math.max(min, Math.min(max, zoom));\r\n\t}\r\n\r\n\t// @section Map Control Extents\r\n\tupdateExtents(sourceEvent, newCellsize, excludeContextLayer = false, triggerCallback = true ) {\r\n\t\tvar halfClientWidth = (this.rcMap.Width-1) / 2.0;\r\n\t\tvar halfClientHeight = (this.rcMap.Height-1) / 2.0;\r\n\t\t//const onefourthW = halfClientWidth / 2;\r\n\t\t//const onefourthH = halfClientHeight / 2;\r\n\r\n\t\t//halfClientWidth += onefourthW;\r\n\t\t//halfClientHeight += onefourthH;\r\n\r\n\t\tvar newExtents = new Envelope(this.center.X - (newCellsize * halfClientWidth), \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.center.X + (newCellsize * halfClientWidth), \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.center.Y - (newCellsize * halfClientHeight), \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.center.Y + (newCellsize * halfClientHeight));\r\n\r\n\t\tif (this.extents == null || !newExtents.equals(this.extents))\r\n\t\t{\r\n\t\t\tthis.extents = newExtents;\r\n\t\t\tthis.cellsize = newCellsize;\r\n\r\n\t\t\tlet boundingClientRect = this._div.getBoundingClientRect();\r\n\t\t\tthis.boundingRectOffsetX = boundingClientRect.left;\r\n\t\t this.boundingRectOffsetY = boundingClientRect.top; \t\t\r\n\t\t}\r\n\r\n\t\tif (triggerCallback && this.cbUpdateExtents) {\r\n\t\t\tthis.cbUpdateExtents(this.extents);\r\n\t\t}\r\n\r\n\t\t// not sure how this is possible\r\n\t\telse if (this.cellsize != newCellsize)\r\n\t\t{\r\n\t\t\tthis.cellsize = newCellsize;\r\n\t\t}\r\n\r\n\t\tif (this.measurement)\r\n\t\t\tthis.measurement.updateExtents();\r\n\r\n\t\tif (this.geometryEditor)\r\n\t\t\tthis.geometryEditor.updateExtents();\t\r\n\t\t\t\r\n\t\t//this.canvas.clearOffscreen();\r\n\t\t//this.invalidate();\r\n\t\tfor (var index = 0; index < this._layers.length; index++) {\r\n\t\t\tlet layer = this._layers[index];\r\n\t\t\tif (layer.isVisible(this.scale)) {\r\n\t\t\t\tif(excludeContextLayer && layer._options.ContextLayer ) {\r\n\t\t\t\t\t//do nothing Layer was already retrieved in setView\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t\tlayer.onExtentsChanged(sourceEvent, this.rcMap, newExtents, this.cellsize, this.scale, this.canvas);\r\n\t\t\t}\r\n\t\t\t\t\r\n\t\t}\r\n\r\n\t\tif (this.cbZoom)\r\n\t\t this.cbZoom(this.scale);\t\t\t\r\n\t}\r\n\r\n\tget pendingSetExtentsParam() { return this._pendingSetExtentsParam; }\r\n\tset pendingSetExtentsParam(value) { this._pendingSetExtentsParam = value; }\r\n\r\n\t//Restore extents\r\n\tsetExtents(sourceEvent, newExtents, triggerCallback = false) {\r\n\r\n\t\tif(!this._initialExtentsDone) {\r\n\t\t\tthis.pendingSetExtentsParam = {extents: newExtents, triggerCallback: triggerCallback};\r\n\t\t\treturn;\r\n\t\t}\t\r\n\t\t\r\n\t\t// Clear pending because it will now be processed\r\n\t\tif(this.pendingSetExtentsParam) \r\n\t\t\tthis.pendingSetExtentsParam = null;\r\n\r\n\t\tthis.extents = new LatLngBounds(toLatLng(newExtents.MinY, newExtents.MinX), toLatLng(newExtents.MaxY, newExtents.MaxX));\r\n\t\t\r\n\t\tlet xScale = (newExtents.MaxX - newExtents.MinX) / this.rcMap.Width * MgMap.DPI * this.getInchesPerUnit(0);\r\n\t\tlet yScale = (newExtents.MaxY - newExtents.MinY) / this.rcMap.Height * MgMap.DPI * this.getInchesPerUnit(0);\r\n\t\t\r\n\t\tthis._center = toLatLng((newExtents.MinY + newExtents.MaxY) / 2.0, (newExtents.MinX + newExtents.MaxX) / 2.0)\r\n\t\tthis.scale = Math.max(xScale, yScale);\r\n\t\t\r\n\t\tthis.resize(sourceEvent, triggerCallback);\t\t\r\n\r\n\t\tif (triggerCallback && this.cbUpdateExtents) {\r\n\t\t\tthis.cbUpdateExtents(this.extents);\r\n\t\t}\r\n\t}\r\n\r\n\t_getTiledPixelBounds(center) {\r\n\t\tvar map = this,\r\n\t\t mapZoom = map.zoom,\r\n\t\t scale = map.getZoomScale(mapZoom, this._tileZoom),\r\n\t\t pixelCenter = map.project(center, this._tileZoom).floor(),\r\n\t\t halfSize = map.getSize().divideBy(scale * 2);\r\n\r\n\t\treturn new Bounds(pixelCenter.subtract(halfSize), pixelCenter.add(halfSize));\r\n\t}\r\n\r\n\tgetInchesPerUnit(center_lat) {\r\n\t\tvar lat_adj = 1.0, ipu = 1.0;\r\n\r\n\t\tswitch (this.units)\r\n\t\t{\r\n\t\t\tcase MgMap.MS_METERS:\r\n\t\t\tcase MgMap.MS_KILOMETERS:\r\n\t\t\tcase MgMap.MS_MILES:\r\n\t\t\tcase MgMap.MS_INCHES:\r\n\t\t\tcase MgMap.MS_FEET:\r\n\t\t\t\tipu = MgMap.InchesPerUnit[this.units];\r\n\t\t\t\tbreak;\r\n\t\t\tcase MgMap.MS_DD:\r\n\t\t\t\tipu = MgMap.InchesPerUnit[this.units] * lat_adj;\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn ipu;\r\n\t}\t\r\n\r\n\t// @section Mouse Events and Handlers\r\n calculateExtents(sourceEvent, xMouseOffset, yMouseOffset, triggerCallback = true) {\r\n\t\tlet newCellsize = (this.scale / MgMap.DPI) / this.getInchesPerUnit(0);\r\n\r\n\t\txMouseOffset = xMouseOffset === undefined ? 0.0 : xMouseOffset;\r\n\t\tyMouseOffset = yMouseOffset === undefined ? 0.0 : yMouseOffset;\r\n\t\t\r\n\t\t// when using the scroll wheel, we try to point under the mouse at the same location\r\n\t\tthis.center.X += ((xMouseOffset * this.cellsize) - (xMouseOffset * newCellsize));\r\n\t\tthis.center.Y += ((yMouseOffset * this.cellsize) - (yMouseOffset * newCellsize));\r\n\r\n\t\tthis.updateExtents(sourceEvent, newCellsize, false, triggerCallback);\r\n\t}\r\n\r\n\tzoomHome(sourceEvent){\r\n\t\tthis.center.X = this.homeCenter.X;\r\n\t\tthis.center.Y = this.homeCenter.Y;\r\n\t\tthis.scale = this.homeScale;\r\n\t\tthis.calculateExtents(sourceEvent);\r\n\t\t\tthis.refreshView(false);\r\n\t}\r\n\t\r\n\t/* \r\n\t\tSets dragstate depending on keydown (ctrl or shift)\r\n\t\tRuns prior to onMouseUp\r\n\t*/\r\n\r\n\tonMouseDown(e) {\r\n\t\tthis.mouseX = undefined;\r\n\t\tthis.mouseY = undefined;\r\n\r\n\t\tthis.mouseDown = true;\r\n\r\n\t\tif (e.which == MOUSE_BUTTON_LEFT && this.extents != null) {\r\n\t\t\tthis.ptDragStart = new Point(e.clientX, e.clientY);\r\n\r\n\t\t\tif (e.ctrlKey)\r\n\t\t\t this.dragState = DragStates.ZoomStart;\r\n\t\t\telse if (e.shiftKey)\r\n\t\t\t this.dragState = DragStates.SelectStart;\r\n\t\t\telse\r\n\t\t\t this.dragState = DragStates.PanStart;\r\n\r\n\t\t\tthis.canvas.pan.start.x = e.clientX;\r\n\t \tthis.canvas.pan.start.y = e.clientY;\r\n\r\n\t\t\tif (this.measureDistanceMode) {\t\t\t\t\r\n\t\t\t\tif (this.measurement == null){\r\n\t\t\t\t\tthis.measurement = new Measurement(this);\r\n\t\t\t\t\tthis.measurement.setDistanceType(this.options.MeasureTool);\r\n\r\n\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\tif (this.measurement.handleMouseDown(e.clientX - this.offsetX, e.clientY - this.offsetY, this._canvas.canvas.style.cursor === 'crosshair'))\r\n\t\t\t\t this.dragState = DragStates.MeasurePanStart;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (this.geometryEditor != null) {\t\t\t\t\t\t\t\t\t\r\n\t\t\t\tif (this.geometryEditor.handleMouseDown(e.clientX - this.offsetX, e.clientY - this.offsetY, this._canvas.canvas.style.cursor === 'crosshair')) \r\n\t\t\t\t this.dragState = DragStates.GeometryEditPanStart;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.dragState == DragStates.SelectStart) {\r\n\t\t\t\tthis.removeTooltip();\r\n\t\t }\r\n\t\t\t\t\r\n\t\t\tthis.Capture = true;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tonMouseMove(e) {\r\n\r\n\t\tif (this.dragState != DragStates.None) {\r\n\t\t\tif (!this.isLeftButtonPressed(e))\r\n\t\t\t this.dragState = DragStates.None;\r\n\r\n\t\t\tif (this.dragState == DragStates.PanStart) {\r\n\t\t\t\tif (Math.abs(e.clientX - this.ptDragStart.x) > MIN_DRAG_WIDTH || Math.abs(e.clientY - this.ptDragStart.y) > MIN_DRAG_HEIGHT) {\r\n\t\t\t\t\tthis.dragState = DragStates.PanDragging;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if (this.dragState == DragStates.MeasurePanStart) {\r\n\t\t\t\tif (Math.abs(e.clientX - this.ptDragStart.x) > MIN_DRAG_WIDTH || Math.abs(e.clientY - this.ptDragStart.y) > MIN_DRAG_HEIGHT) {\r\n\t\t\t\t\tthis.dragState = DragStates.MeasurePanDragging;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if (this.dragState == DragStates.GeometryEditPanStart) {\r\n\t\t\t\tif (Math.abs(e.clientX - this.ptDragStart.x) > MIN_DRAG_WIDTH || Math.abs(e.clientY - this.ptDragStart.y) > MIN_DRAG_HEIGHT) {\r\n\t\t\t\t\tthis.dragState = DragStates.GeometryEditPanDragging;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if (this.dragState == DragStates.ZoomStart) {\r\n\t\t\t\tif (Math.abs(e.clientX - this.ptDragStart.x) > MIN_DRAG_WIDTH || Math.abs(e.clientY - this.ptDragStart.y) > MIN_DRAG_HEIGHT) {\r\n\t\t\t\t\tthis.dragState = DragStates.ZoomDragging;\r\n\t\t\t\t\tthis.ptDragCurrent = this.ptDragStart;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if (this.dragState == DragStates.SelectStart) {\r\n\t\t\t\tif (Math.abs(e.clientX - this.ptDragStart.x) > MIN_DRAG_WIDTH || Math.abs(e.clientY - this.ptDragStart.y) > MIN_DRAG_HEIGHT) {\r\n\t\t\t\t\tthis.dragState = DragStates.SelectDragging;\r\n\t\t\t\t\tthis.ptDragCurrent = this.ptDragStart;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (this.dragState == DragStates.MeasurePanDragging) {\r\n\t\t\t\tif (this.measurement)\r\n\t\t\t\t\tthis.measurement.handleMouseDragging(e.clientX - this.offsetX, e.clientY - this.offsetY);\t\t\t\t\t\r\n\t\t\t}\r\n\t\t\telse if (this.dragState == DragStates.GeometryEditPanDragging) {\r\n\t\t\t\tif (this.geometryEditor)\r\n\t\t\t\t this.geometryEditor.handleMouseDragging(e.clientX - this.offsetX, e.clientY - this.offsetY);\t\r\n\t\t\t}\r\n\t\t\telse if (this.dragState == DragStates.PanDragging) {\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t// offset the centre point\r\n\t\t\t\tthis._center.X += (this.ptDragStart.x - e.clientX) * this.cellsize;\r\n\t\t\t\tthis._center.Y += (e.y - this.ptDragStart.y) * this.cellsize;\r\n\t\t\t\tthis.ptDragStart = new Point(e.clientX, e.clientY);\r\n\r\n\t\t\t\tvar offsetX = e.clientX - this.canvas.pan.start.x;\r\n\t\t\t\tvar offsetY = e.clientY - this.canvas.pan.start.y;\r\n\t\t\t\tthis.canvas.pan.offset.x = this.canvas.global.offset.x + offsetX;\r\n\t\t\t\tthis.canvas.pan.offset.y = this.canvas.global.offset.y + offsetY;\r\n\r\n\t\t\t\tthis.canvas.isPanning = true;\r\n\t\t\t\tthis.invalidate(offsetX, offsetY);\t\t\t\t\r\n\t\t\t}\r\n\t\t\telse if (this.dragState == DragStates.ZoomDragging || this.dragState == DragStates.SelectDragging) {\t\t\t\t\r\n\t\t\t\tthis.ptSelectionStart = new Point(this.ptDragStart.x - this.offsetX, this.ptDragStart.y - this.offsetY);\r\n\t\t\t\tthis.ptSelectionEnd = new Point(e.clientX - this.offsetX, e.clientY - this.offsetY);\t\t\t\t\r\n\t\t\t}\t\t\t\r\n\t\t}\r\n\t\telse if (this.extents != null) {\t\t\r\n\t\t\te.preventDefault();\r\n\t \te.stopPropagation();\r\n\t\r\n\t\t\tlet mouseX = e.clientX - this.offsetX;\r\n\t\t\tlet mouseY = e.clientY - this.offsetY;\r\n\r\n\t\t\tif (this.mouseX == undefined || this.mouseY == undefined ||\r\n\t\t\t\t (Math.abs(mouseX - this.mouseX) > 2 && \r\n\t\t\t Math.abs(mouseY - this.mouseY) > 2)) {\r\n\t\t\t this.mouseX = mouseX;\r\n\t\t\t this.mouseY = mouseY;\r\n\r\n\t\t\t\t//if (this.promises == null || this.promises.length == 0)\r\n\t\t\t\tthis.mouseMoveCallback(e);\r\n\t\t\t\t \r\n\t\t\t}\r\n\t\t\t\r\n\t\t}\r\n }\r\n\r\n /*\r\n \t\tCalled right after onMouseDown, which sets the dragState\r\n \t\tif (this.dragState == DragStates.SelectStart) the shift key is being held\r\n */\r\n\r\n\tonMouseUp(e) {\t\t\r\n\t\tconsole.log('map - onMouseUp(e)');\r\n\r\n\t\tthis.canvas.isPanning = false;\t\t\r\n\r\n\t\tif (this.dragState != DragStates.None) {\r\n\t\t\tif (this.dragState == DragStates.MeasurePanStart || \r\n\t\t\t\t this.dragState == DragStates.GeometryEditPanStart ||\r\n\t\t\t\t this.dragState == DragStates.PanStart) { \r\n\t\t\t\t// this is a click\r\n\t\t\t\t// check if zoom in or zoom out button is clicked\r\n\t\t\t\tif (e.toElement.title.indexOf('Zoom') > -1 || e.toElement.innerHTML.length >= 4)\r\n\t\t\t\t\treturn;\r\n\t\t\t\t\r\n\t\t\t\tthis.mouseClicks++;\r\n\t\t\t\tlet __this = this;\r\n\t\t\t\tif (this.mouseClicks == 1) {\r\n\t\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\t\tif(__this.mouseClicks == 1) {\r\n\t\t\t\t\t\t\t__this.onMouseSingleClick(e);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t__this.onMouseDoubleClick(e);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t__this.mouseClicks = 0;\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t// if in draw mode then ensure all selected markup is cleared (we may have selected markup if did Shift drag to draw a selection rectangle) \r\n\t\t\t\t\t\tlet inDrawMode = __this._canvas.canvas.style.cursor === 'crosshair';\t\t\t\t\t\t\r\n\t\t\t\t\t\tif (inDrawMode && __this.geometryEditor != null && __this.geometryEditor.markupsWithinSelectionRectangle != null && __this.geometryEditor.markupsWithinSelectionRectangle.length > 0)\r\n\t\t\t\t\t\t\t__this.geometryEditor.clearSelectedMarkup();\r\n\t\t\t\t\t}, 300);\r\n\t\t\t\t}\t\t\t\t\t\t\t\r\n\t\t\t}\t\t\t\r\n\t\t\telse if (this.dragState == DragStates.GeometryEditPanDragging) {\r\n\t\t\t\tif (this.geometryEditor != null)\r\n\t\t\t\t this.geometryEditor.handleMouseUp(e.clientX - this.offsetX, e.clientY - this.offsetY);\r\n\t\t\t}\r\n\r\n\t\t\telse if (this.dragState == DragStates.SelectStart || this.dragState == DragStates.ZoomStart){\r\n\r\n\t\t\t\t// user is holding shift or ctrl key, but not dragging only clicking, so select whatever feature or markup that is under there\r\n\t\t\t\t\r\n\t\t\t\tlet x = e.clientX - this.offsetX;\r\n\t\t\t\tlet y = e.clientY - this.offsetY;\t\t\r\n\t\t\t\tvar hitItem = null;\r\n\t\t\t\tlet hitLayers = [];\r\n\t\t\t\t// this layer retrieval for loop happens many times throughout the code\r\n\t\t\t\t// detection should start from the topmost layer to the bottom\r\n\t\t\t\tfor(let i = this._layers.length-1; i >= 0; i--) {\r\n\t\t\t\t\tlet layer = this._layers[i];\r\n\t\t\t\t\tif (layer instanceof MgFeatureLayer && layer.isVisible(this.scale) && !layer.isDownloading) {\r\n\t\t\t\t\t\tif ((hitItem = layer.getHitItem(x, y)) != null) {\r\n\t\t\t\t\t\t\thitLayers.push(layer);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (hitItem){\r\n\r\n\t\t\t\t\t// if it's ctrl clicking + it's already selected, we have to unselect it\r\n\r\n\t\t\t\t\tif (this.dragState == DragStates.ZoomStart && this.selectedFeatures.hasOwnProperty(hitItem.id)){\r\n\t\t\t\t\t\tthis.selectedFeatures[hitItem.id] = null;\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tfor (let i = hitLayers.length-1; i>=0; i--){\r\n\t\t\t\t\t\t\thitLayers[i].removeItemFromSelection(hitItem);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.selectedFeatures[hitItem.id] = hitItem;\r\n\t\t\t\t\t\tthis.selectedFeatures[hitItem.id].Selected = true;\r\n\t\t\t\t\t\tthis.featureSelectedEvent.next(hitItem);\r\n\t\t\t\t\t\tif (this.cbSelectFeatures) this.cbSelectFeatures(hitItem);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tfor (let i = hitLayers.length-1; i>=0; i--){\r\n\t\t\t\t\t\thitLayers[i].clearSelection();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.geometryEditor != null) {\r\n\t\t\t\t\tlet selectedMarkups = this.geometryEditor.addToSelectedMarkup(x, y);\r\n\t\t\t\t\tif (selectedMarkups.length == 0){\r\n\t\t\t\t\t\tthis.geometryEditor.clearSelectedMarkup();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.invalidate();\r\n\t\t\t\tthis.drawTracked(null);\r\n\t\t\t\tthis.drawSelection(null);\r\n\r\n\t\t\t}\r\n\t\t\telse if (this.dragState == DragStates.SelectDragging) { \r\n\t\t\t\t\r\n\t\t\t\t// ensure the previously selected geometries are de-selected\r\n\t\t\t\t// why are we checking if markupsWithinSelectRectangle has something in it? Shouldn't we clear it if a new rectangle is being drawn?\r\n\t\t\t\t// if (this.geometryEditor != null && this.geometryEditor.markupsWithinSelectionRectangle != null && this.geometryEditor.markupsWithinSelectionRectangle.length > 0) \r\n\t\t\t\t\r\n\t\t\t\tif (this.geometryEditor != null) \r\n\t\t\t\t\tthis.geometryEditor.clearSelectedMarkup();\r\n\r\n\t\t\t\tthis.canvas.drawCanvasSelection(this.ptSelectionStart, this.ptSelectionEnd);\t\t\t\t\t\t\r\n\r\n\t\t\t\tlet bounds = toBounds(this.ptSelectionStart, this.ptSelectionEnd); \r\n\t\t\t\tlet selected = [];\r\n \t\tvar layerSelection = null;\r\n\r\n\t\t\t\t// this layer retrieval for loop happens many times throughout the code\r\n\r\n \t\tfor(let i = this._layers.length-1; i >= 0; i--) {\r\n\t\t\t\t\tlet layer = this._layers[i];\r\n\t\t\t\t\tif (layer instanceof MgFeatureLayer && layer.isVisible(this.scale)) {\r\n\t\t\t\t\t\tlayer.clearSelection();\r\n\t\t\t\t\t\tif ((layerSelection = layer.getIntersections(bounds)) != null) {\r\n\t\t\t\t\t\t\tArray.prototype.push.apply(selected, layerSelection);\r\n\t\t\t\t\t\t}\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.geometryEditor != null) \r\n\t\t\t\t\tthis.geometryEditor.selectMarkupsWithinBounds(this.ptSelectionStart, this.ptSelectionEnd);\t\t\t\t\r\n\r\n\t\t\t\tthis.invalidate();\r\n\t\t\t\tthis.drawTracked();\r\n\t\t\t\tthis.drawSelection(null);\r\n\r\n\t\t\t\tif (selected != null && selected.length > 0) {\r\n\t\t\t\t\tfor (let i = 0; i < selected.length; i++)\r\n\t\t\t\t\t\tthis.selectedFeatures[selected[i].id] = selected[i];\r\n\t\t\t\t\t\t\r\n\t\t\t\t\tthis.featureSelectedEvent.next(selected);\r\n\t\t\t\t\tif (this.cbSelectFeatures)\r\n\t\t\t\t\t this.cbSelectFeatures(selected);\r\n\t\t\t\t}\t\t\t\r\n\r\n\t\t\t\t// let the selection box remain visible for a second before clearing otherwise it clears before even seeing it\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tthis.ptSelectionStart = null;\r\n\t\t\t\t\tthis.ptSelectionEnd = null;\t\t\t\t\t\r\n\t\t\t\t\tthis.refreshView(false);\r\n\t\t\t\t}, 1000);\t\t\t\r\n\t\t\t}\r\n\t\t\telse if (this.dragState == DragStates.ZoomDragging) {\r\n\t\t\t\tlet ptStart = new Point(this.ptDragStart.x - this.offsetX, this.ptDragStart.y - this.offsetY);\r\n\t\t\t\tlet ptEnd = new Point(e.clientX - this.offsetX, e.clientY - this.offsetY);\r\n\t\t\t\t\r\n\t\t\t\tlet latLng1 = toLatLng(this.extents.MaxY - (ptStart.y - this.rcMap.MinY) * this.cellsize, (ptStart.x * this.cellsize) + this.extents.MinX); \r\n\t\t\t\tlet latLng2 = toLatLng(this.extents.MaxY - (ptEnd.y - this.rcMap.MinY) * this.cellsize, (ptEnd.x * this.cellsize) + this.extents.MinX);\r\n\r\n\t\t\t\tlet extents = new LatLngBounds(latLng1, latLng2);\r\n\t\t\t\r\n\t\t\t\tlet xScale = (extents.MaxX - extents.MinX) / this.rcMap.Width * MgMap.DPI * this.getInchesPerUnit(0);\r\n\t\t\t\tlet yScale = (extents.MaxY - extents.MinY) / this.rcMap.Height * MgMap.DPI * this.getInchesPerUnit(0);\r\n\r\n\t\t\t\tthis.center = toLatLng((extents.MinY + extents.MaxY) / 2.0, (extents.MinX + extents.MaxX) / 2.0);\r\n\t\t\t\tthis.scale = Math.max(xScale, yScale);\r\n\t\t\t\tthis.calculateExtents(MapEnums.SourceEvents.ZoomDragging);\t\r\n\r\n\t\t\t\tthis.canvas.drawCroppedCanvas(ptStart.x, ptStart.y, ptEnd.x - ptStart.x, ptEnd.y - ptEnd.y, 1.0);\r\n\t\t\t\t//this.updateExtents(this.scale / MgMap.DPI / this.getInchesPerUnit(0)); \r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tthis.ptSelectionStart = null;\r\n\t\t\t\t\tthis.ptSelectionEnd = null;\t\t\t\t\t\r\n\t\t\t\t\tthis.refreshView(true);\r\n\t\t\t\t}, 1000);\t\t \r\n\t\t\t}\r\n else if (this.dragState == DragStates.PanDragging) {\r\n\t\t\t\tthis.dragState = DragStates.None\r\n\t\t\t\tthis.canvas.X = this.canvas.pan.start.x;\r\n\t\t\t\tthis.canvas.Y = this.canvas.pan.start.y;\r\n\t\t\t\tthis.canvas.pan.start.x = null;\r\n\t\t\t\tthis.canvas.pan.start.y = null;\r\n\t\t\t\tthis.canvas.global.offset.x = this.canvas.pan.offset.x;\r\n\t\t\t\tthis.canvas.global.offset.y = this.canvas.pan.offset.y;\r\n\r\n\t\t\t\tthis.Capture = false;\r\n\r\n\t\t\t\t// this.onPan();\r\n\t\t\t\tthis.calculateExtents(MapEnums.SourceEvents.PanDragging);\t\t\t\t\r\n\t\t\t\tthis.refreshView(false);\r\n\r\n\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.dragState = DragStates.None;\r\n\r\n\t\tthis.mouseDown = false;\r\n\r\n\t\t// mouseleave has ran\r\n\t\tif (!this.isHovering){\r\n\t\t\tdocument.removeEventListener('mousemove', this.doMouseMoveBound, true);\t\t\t\t\r\n\t\t\tdocument.removeEventListener('mouseup', this.doMouseUpBound, true);\t\t\r\n\t\t}\r\n\r\n\t\t// remove eventListener\r\n\t}\r\n\r\n\tonPan(){\r\n\r\n\t\tif(this.panTimer !== null) {\r\n\t\t\tclearTimeout(this.panTimer); \r\n\t\t}\r\n\t\tthis.panTimer = setTimeout(() => {\r\n\t\t\t// load features\r\n\t\t\tthis.loadFeatures = true;\r\n\t\t\tthis.calculateExtents(MapEnums.SourceEvents.PanDragging);\t\t\t\t\r\n\t\t\tthis.refreshView(false);\r\n\t\t\tthis.loadFeatures = false;\r\n\r\n\t\t}, 1000);\r\n\r\n\t\tthis.loadFeatures = false;\r\n\t\tthis.calculateExtents(MapEnums.SourceEvents.PanDragging);\t\t\t\t\r\n\t\tthis.refreshView(false);\r\n\t}\r\n\t\r\n\tonMouseWheel(e) {\t\r\n\t\t\r\n\te.preventDefault();\r\n\te.stopPropagation();\r\n\t\r\n\t\tif(this.zoomTimer !== null) {\r\n\t\t\tclearTimeout(this.zoomTimer); \r\n\t\t}\r\n\t\tthis.zoomTimer = setTimeout(() => {\r\n\t\t\t// load features\r\n\t\t\tthis.loadFeatures = true;\r\n\t\t\tconsole.log('SCROLL WHEEL TIMEOUT TRUE')\r\n\t\t\tthis.mouseWheelCallback(e);\t\r\n\t\t\t// this.loadFeatures = false;\r\n\r\n\t\t}, 1000);\r\n\r\n\t\tthis.loadFeatures = false;\r\n\r\n\t\tthis.mouseWheelCallback(e);\t\r\n\t}\r\n\r\n\tonMouseLeave(e) {\r\n\t\tthis.mouseX = undefined;\r\n\t\tthis.mouseY = undefined;\r\n\t\tthis.isHovering = false;\r\n\r\n\t\t// has left the container div, so check if mouseDown \r\n\t\tif (!this.mouseDown){\r\n\t\t\tdocument.removeEventListener('mousemove', this.doMouseMoveBound, true);\t\t\r\n\t\t\tdocument.removeEventListener('mouseup', this.doMouseUpBound, true);\t\t\r\n\t\t}\r\n\r\n\r\n\t}\r\n\r\n\tonMouseSingleClick(e) {\r\n\t\te.preventDefault();\r\n\t\te.stopPropagation();\r\n\t\tthis.calculateOffset();\r\n\t\tlet x = e.clientX - this.offsetX;\r\n\t\tlet y = e.clientY - this.offsetY;\r\n\r\n\t\tvar hasScrollParent = this.getScrollParent(this._div);\r\n\r\n\t\tif (hasScrollParent) {\r\n\t\t\tx += hasScrollParent.scrollLeft;\r\n\t\t\ty += hasScrollParent.scrollTop;\r\n\t\t}\r\n\r\n\r\n\t\tif (this.geometryEditor != null && this.geometryEditor.overwritePromptDisplayed){\r\n\t\t\tthis.geometryEditor.deleteMarkup(-1);\r\n\t\t\tthis.geometryEditor.overwritePromptDisplayed = false;\t\t\r\n\t\t}\r\n\t\t\r\n\t\tif (this.measureDistanceMode) {\r\n\t\t\tif (this.measurement == null){\r\n\t\t\t\tthis.measurement = new Measurement(this);\r\n\t\t\t\tthis.measurement.setDistanceType(this.options.MeasureTool);\r\n\r\n\t\t\t}\r\n\t\t\t\t\r\n\t\t\tthis.measurement.handleMouseClick(x,y);\t\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.geometryEditor != null && this.geometryEditor.handleMouseClick(x,y, this._canvas.canvas.style.cursor === 'crosshair')) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\tvar hitItem = null;\r\n\t\tvar rectExtents = null;\r\n\t\t\r\n\t\t// detection should start from the topmost layer to the bottom\r\n\t\tfor(let i = this._layers.length-1; i >= 0; i--) {\r\n\t\t\tlet layer = this._layers[i];\r\n\t\t\tif (layer instanceof MgFeatureLayer && layer.isVisible(this.scale) && !layer.isDownloading) {\r\n\t\t\t\tif ((hitItem = layer.getHitItem(x, y)) != null) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t}\r\n\t\t}\r\n\t\r\n\t\tif (hitItem != null) {\r\n\t\t\tlet item = {\"x\": x, \"y\": y, \"feature\": hitItem };\r\n\t\t\tconsole.log(`onMouseSingleClick: ${item}`);\r\n\r\n\t\t\trectExtents = hitItem.Shape.getRectExtents();\r\n\r\n\t\t\tlet items = [];\r\n\t\t\tif (!e.ctrlKey) {\r\n\t\t\t\tthis.clearSelection()\r\n\r\n\t\t\t\titems.push(hitItem);\r\n\t\t\t\tthis.selectedFeatures[hitItem.id] = hitItem;\r\n\t\t\t\thitItem.featureLayer.clearSelection();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (this.selectedFeatures.length <= 0) {\r\n\t\t\t\t\thitItem.featureLayer.clearSelection();\r\n\t\t\t\t\titems.push(hitItem);\r\n\t\t\t\t\tthis.selectedFeatures[hitItem.id] = hitItem;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (!this.selectedFeatures.hasOwnProperty(hitItem.id)) {\r\n\t\t\t\t\t\titems.push(hitItem);\r\n\t\t\t\t\t\tfor (var key in this.selectedFeatures) {\r\n\t\t\t\t\t\t\titems.push(this.selectedFeatures[key])\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis.selectedFeatures[hitItem.id] = hitItem;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\t// remove the item from the dictionary, this is unselecting\r\n\t\t\t\t\t\tdelete this.selectedFeatures[hitItem.id];\r\n\t\t\t\t\t\thitItem.Selected = false;\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tfor (var key in this.selectedFeatures) {\r\n\t\t\t\t\t\t\titems.push(this.selectedFeatures[key]);\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfor (let i = 0; i < items.length; i++) {\r\n\t\t\t\tif (!items[i].Selected)\r\n\t\t\t\t items[i].Selected = true;\r\n\t\t\t}\r\n\t\t\t// only used to print console logs\r\n\t\t\tthis.featureSelectedEvent.next(items);\r\n\t\t\tif (this.cbSelectFeatures)\r\n\t\t\t this.cbSelectFeatures(items);\r\n\r\n\t\t}\t\r\n\t\telse {\r\n\t\t\tfor(let i = this._layers.length-1; i >= 0; i--) {\r\n\t\t\t\tlet layer = this._layers[i];\r\n\t\t\t\tif (layer instanceof MgFeatureLayer) {\r\n\t\t\t\t layer.clearSelection();\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.selectedFeatures = new Object();\r\n\t\t\tthis.featureSelectedEvent.next([]);\r\n\r\n\t\t\tif (this.cbSelectFeatures)\r\n\t\t\t this.cbSelectFeatures([]);\r\n\t\t}\r\n\t\tthis.invalidate();\r\n\t\tthis.drawTracked();\r\n\t\tthis.drawSelection(); \t\t\t\r\n\t}\r\n\r\n\tonMouseDoubleClick(e) {\r\n\t\te.preventDefault();\r\n\t\te.stopPropagation();\r\n\t\t\t\t\r\n\t\tif (e.toElement.title.indexOf('Zoom') > -1)\r\n\t\t\t\treturn;\r\n\t\t\t\r\n\t\tlet x = e.clientX - this.offsetX;\r\n\t\tlet y = e.clientY - this.offsetY;\r\n\t\t\r\n\t\tif (this.geometryEditMode) {\r\n\t\t\tthis.geometryEditor.handleMouseDoubleClick(x,y);\t\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\t\t\r\n\t\tvar hitItem = null;\r\n\r\n\t\t// detection should start from the topmost layer to the bottom\r\n\t\tfor(let i = this._layers.length-1; i >= 0; i--) {\r\n\t\t\tlet layer = this._layers[i];\r\n\t\t\tif (layer instanceof MgFeatureLayer && layer.isVisible(this.scale) && !layer.isDownloading) {\r\n\t\t\t\tif ((hitItem = layer.getHitItem(x, y)) != null) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t}\r\n\t\t}\r\n\t\r\n\t\tif (hitItem != null) {\r\n\t\t\tlet item = {\"x\": x, \"y\": y, \"feature\": hitItem };\r\n\t\t\tconsole.log(`onMouseDoubleClick ${item}`);\r\n\t\t\t//this.featureDoubleClickedEvent.next(item);\t\t\t\r\n\t\t\tdocument.removeEventListener('mousemove', this.doMouseMoveBound, true);\t\t\t\t\r\n\t\t\tdocument.removeEventListener('mouseup', this.doMouseUpBound, true);\t\r\n\t\t\tthis.isHovering = false;\r\n\t\r\n\t\t\tif (this.cbDoubleClick)\r\n\t\t\t\tthis.cbDoubleClick(hitItem);\r\n\t\t}\t\t\t\t\t\r\n\t}\r\n\r\n\t// Drawing Functions\r\n\tmouseWheelCallback(e) {\t\r\n\t\te.preventDefault();\r\n\t\tconsole.log('onMouseWheel', e);\r\n\t\tvar lines = 0;\r\n\r\n\t\tif (e instanceof WheelEvent) \t\t\t\r\n\t\t\tlines = e.deltaY / 200;\r\n\r\n\t\tvar factor;\r\n\r\n\t\tif (lines < 0)\r\n\t\t{\r\n\t\t\t// if control is down we do a fine small zoom\r\n\t\t\t// zoom in is negative lines\r\n\t\t\t\r\n\t\t\tif \t(e.ctrlKey)\r\n\t\t\t\tfactor = lines * this._scale;\r\n\t\t\telse\r\n\t\t\t\tfactor = 1;\r\n\r\n\t\t\t// this._scale *= lines;\r\n\t\t\tthis.zoomIn(e);\r\n\t\t\t// this.zoomIn();\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tif (e.ctrlKey)\r\n\t\t\t\tfactor = lines * this._scale;\r\n\t\t\telse\r\n\t\t\t\tfactor = 1;\r\n\r\n\t\t\t// this._scale *= lines;\r\n\t\t\tthis.zoomOut(e);\t\t\t\r\n\t\t}\r\n\r\n\r\n\t\t// cancel any ongoing http requests \r\n\t\t/*\r\n\t\tthis._layers.forEach( layer => {\r\n\t\t\tlayer.cancelRequest();\r\n\t\t});\r\n\r\n\t\tthis.showToolTipContainer(false);\r\n\t\tthis.calculateExtents();\r\n\t\tthis.refreshView(true);\t\t\r\n\t\t*/\r\n\t}\r\n\r\n\tmouseMoveCallback(e) {\r\n\t\tif (this.dragState == DragStates.None && this.mouseX >= 0 && this.mouseY >= 0) {\t\t\r\n\t\t\tthis.timerid = -1;\t\r\n\t\t\tlet previousItem = this.hoverItem;\t\t\t\t\r\n\t\t\t// if (this.hoverItem != null) {\r\n\t\t\t// \tthis.hoverItem.hovering = false;\r\n\t\t\t// }\r\n\r\n\t\t\tvar hitItem = null;\t\t\t\r\n\t\t\tvar needsRedraw = false;\r\n\t\t\tvar hitItems = [];\r\n\t\t\tvar layers = [];\r\n\t\t\tvar hitItemLayer = null;\r\n\r\n\t\t\t// detection should start from the topmost layer to the bottom\r\n\t\t\t//for(let i = 0; i < this._layers.length; i++) {\r\n\t\t\tfor(let i = this._layers.length-1; i >= 0; i--) {\r\n\t\t\t\tlet layer = this._layers[i];\r\n\t\t\t\tif (layer instanceof MgFeatureLayer && layer.isVisible(this.scale) && layer.canHover) {\r\n\t\t\t\t\tlayers.push(layer);\r\n\t\t\t\t\tif ((hitItem = layer.getHitItem(this.mouseX, this.mouseY)) != null) {\t\r\n\t\t\t\t\t\thitItems.push(hitItem);\r\n\t\t\t\t\t\thitItemLayer = layer;\r\n\t\t\t\t\t\tif (previousItem && hitItem.id == previousItem.id ) {\r\n\t\t\t\t\t\t\tneedsRedraw = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tneedsRedraw = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// if (hitItem == null){\r\n\t\t\t// \tthis.hoverItem = null;\r\n\t\t\t// \tpreviousItem.hovering = false;\r\n\t\t\t// }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\tif (this.measurement != null) {\r\n\t\t\t\tneedsRedraw = true;\r\n\t\t\t\tthis.measurement.insertionPoint = null;\r\n\t\t\t\tthis._canvas.canvas.style.cursor = 'crosshair';\t\r\n\r\n\t\t\t\tif (this.measurement.hitTest(this.mouseX, this.mouseY)) \r\n\t\t\t\t\tthis.measurement.insertionPoint = new Point(this.mouseX, this.mouseY, null);\t\t\r\n\t\t\t\t\t\r\n\t\t\t}\t\t\t\t\t\t\r\n\r\n\t\t\tif (this.geometryEditor != null && this.geometryEditor.contextLayer.isVisible(this.scale)) {\r\n\t\t\t\tthis.geometryEditor.handleMouseMove(this.mouseX, this.mouseY);\t\t\t\t\t\t\t\r\n\t\t\t} \t\t\t\t \t\t\t \t\r\n\t\t\t\r\n\t\t\tif (needsRedraw) {\t\t\t\t\r\n\t\t\t\t//this.invalidate();\r\n\r\n\r\n\t\t\t\t// if (this.measurement != null){\r\n\t\t\t\t// \tthis.measurement.render();\r\n\r\n\t\t\t\t// }\r\n\t\t\t\t\r\n\t\t\t\tif (this.geometryEditor != null && this.geometryEditor.contextLayer.isVisible(this.scale))\r\n\t\t\t\t\tthis.geometryEditor.render();\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t// when you hover over a new item...\r\n\t\t\t\tif (hitItem && hitItem != this.hoverItem) {\r\n\t\t\t\t\tthis.canvas.context.globalCompositeOperation = 'source-over';\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t// if (this.hoverItem != null && this.hoverItem.Shape != null)\r\n\t\t\t\t\t// \tthis.hoverItem.Shape.draw(this.canvas, 1, this.canvas.context);\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\tif (hitItem.Shape != null){\r\n\t\t\t\t\t\t// this.clearOffscreenCanvas();\r\n\t\t\t\t\t\tthis.refreshView(false, hitItem, hitItemLayer);\r\n\t\t\t\t\t\t// render the hovered item in its proper order\r\n\t\t\t\t\t\t// this is because the hover item currently is painted on top of all layers regardless of layer order\r\n\t\t\t\t\t\t\t// for(let i = 0; i < this._layers.length; i++) {\r\n\t\t\t\t\t\t\t// \tif (this._layers[i].isVisible(this.scale)){\r\n\t\t\t\t\t\t\t// \t\tif (this._layers[i] != hitItemLayer){\r\n\t\t\t\t\t\t\t// \t\t\tthis._layers[i].render(this.canvas, true, this.canvas.context, 'source-over');\r\n\t\t\t\t\t\t\t// \t\t} else {\r\n\t\t\t\t\t\t\t// \t\t\tthis._layers[i].render(this.canvas, true, this.canvas.context, 'source-over');\r\n\t\t\t\t\t\t\t// \t\t\thitItem.Shape.drawHover(this.canvas, 1, this.canvas.context);\r\n\t\t\t\t\t\t\t// \t\t}\r\n\t\t\t\t\t\t\t// \t}\r\n\t\t\t\t\t\t\t// }\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\tif (hitItem.Hover != null)\r\n\t\t\t\t\t\thitItem.Hover.showTooltip(hitItem, this.canvas, this.canvas.context, this.mouseX, this.mouseY, this);\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\tthis.hoverItem = hitItem;\r\n\r\n\t\t\t\t}\r\n\t\t\t\tthis.drawTracked();\r\n\t\t\t\tthis.drawSelection();\t\r\n\t\t\t}\r\n\t\t\telse if (previousItem != null) {\r\n\t\t\t\tif (!previousItem.hitTest(this.mouseX, this.mouseY)) {\r\n\t\t\t\t\tthis.removeTooltip();\t\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\tif (this.hoverItem != null && this.hoverItem.Shape != null){\r\n\t\t\t\t\t\t// this.hoverItem.Shape.drawClear(this.canvas, 1, this.canvas.context);\r\n\t\t\t\t\t\tthis.refreshView(false, this.hoverItem, hitItemLayer);\r\n\t\t\t\t\t\t// this.hoverItem.Shape.draw(this.canvas, 1, this.canvas.context);\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t\tthis.hoverItem = null;\r\n\t\t\t\t\t\r\n\t\t\t\t\t// why we do this?\r\n\t\t\t\t\t// if (previousItem.Shape instanceof MgPoint && previousItem.Shape.symbol != null) {\r\n\t\t\t\t\t\t// this.invalidate();\r\n\r\n\t\t\t\t\t\t// if (this.measurement != null)\r\n\t\t\t\t\t\t// \tthis.measurement.render();\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t// if (this.geometryEditor != null && this.geometryEditor.contextLayer.isVisible(this.scale))\r\n\t\t\t\t\t\t// \tthis.geometryEditor.render();\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t// this.drawSelection();\r\n\r\n\t\t\t\t\t\t//let width = previousItem.Shape.symbol.HoverSymbol.width;\r\n\t\t\t\t\t\t//let height = previousItem.Shape.symbol.HoverSymbol.height;\r\n\t\t\t\t\t\t//let sx = firstPoint.x - width;\r\n\t\t\t\t\t\t//let sy = firstPoint.y - height;\r\n\r\n\t\t\t\t\t\t//console.log(`sx: ${sx} sy: ${sy} width:${width} height:${height}`);\r\n\t\t\t\t\t\t//this.canvas.context.drawImage(this.canvas.offScreenCanvas, sx, sy, width*2, height*2, sx, sy, width*2, height*2);\r\n\t\t\t\t\t// }\t\t\t\r\n\t\t\t\t}\r\n\t\t\t}\t\t\t\t\r\n\t\t\t\r\n\t\t\tif (this.ptSelectionStart && this.ptSelectionEnd)\r\n\t\t\t\tthis.canvas.drawCanvasSelection(this.ptSelectionStart, this.ptSelectionEnd); \r\n\t\t}\r\n\t}\r\n\r\n\tinvalidate(xOffset, yOffset){\r\n\t\tthis.canvas.refreshView(xOffset, yOffset);\r\n\t\t/*\r\n\t\tif (this.measurement != null)\r\n\t\t\tthis.measurement.render();\r\n\r\n\t\tif (this.geometryEditor != null) {\r\n\t\t\tthis.geometryEditor.render();\r\n\t\t\tthis.geometryEditor.render(this.canvas.offScreenContext);\t\r\n\t\t}\r\n\t\t*/\t\t\r\n\t}\r\n\r\n\r\n\tclearOffscreenCanvas() {\r\n\t\tlet offScreenCanvas = this.canvas.offScreenCanvas;\r\n\t\tlet context = offScreenCanvas.getContext(\"2d\");\r\n\t\tcontext.save();\r\n\r\n\t\tcontext.setTransform(1, 0, 0, 1, 0, 0);\r\n\t\tcontext.clearRect(0, 0, offScreenCanvas.width, offScreenCanvas.height);\r\n \r\n\t\tcontext.restore(); \r\n\t}\r\n\r\n\tisLeftButtonPressed(evt) {\r\n evt = evt || window.event;\r\n if (\"buttons\" in evt) {\r\n return evt.buttons == 1;\r\n }\r\n var button = evt.which || evt.button;\r\n return button == 1;\r\n\t}\r\n\t\r\n\tinitTooltipContainer() {\r\n\t\t\r\n\t\tthis.showDivStyle = document.createElement('style');\r\n\t\tthis.showDivStyle.type = 'text/css';\r\n\t\tthis.showDivStyle.innerHTML = '.showDiv { z-index: 1000; min-width: 100px; border: 1px solid grey; position: relative; background-color: ghostwhite; padding: 4px; display: inline-block; }';\r\n\t\t\r\n\t\tthis.hideDivStyle = document.createElement('style');\r\n\t\tthis.hideDivStyle.type = 'text/css';\r\n\t\tthis.hideDivStyle.innerHTML = '.hideDiv { display: none; }';\r\n\r\n\t\tdocument.head.appendChild(this.showDivStyle);\r\n\t\tdocument.head.appendChild(this.hideDivStyle);\r\n\r\n\t\tthis.toolTip = DomUtil.create('div', '', this._container);\t\t\r\n\t\tthis.toolTip.classList.add('hideDiv');\r\n\t\t\r\n\t}\r\n\t\r\n\tdrawToolTipBox(x,y, toolTip) {\r\n let ctx = this.canvas.context;\r\n let label = new Label({ FontName: 'Arial', Colour: 'black', FontSize : 10, Position : 0 });\r\n const offset = 8;\r\n const panelHeight = 24;\r\n\r\n\t\tconst textWidth = Math.trunc(this.canvas.getTextWidth(toolTip)) + 40;\r\n\r\n\t\tlet rect = new Rectangle(x + offset, y + offset, textWidth, panelHeight); \r\n\t\tthis.canvas.drawRoundRectangle(rect.left, rect.top, rect.width, rect.height, 5, '#000000', '#ffffed', ctx)\r\n\t\tthis.canvas.drawText(toolTip, rect.left + offset, rect.top + (offset * 2), undefined, label, 'start', ctx); \r\n \r\n\t\tconsole.log(`drawToolTipBox :${toolTip}`);\r\n\t} \r\n\t\r\n\tenableTooltip() {\r\n\t\tlet _this = this;\r\n\t\tthis.featureHoveredEvent.subscribe( result => {\r\n\t\t\tconsole.log(result);\r\n\t\t\t\r\n\t\t\tlet feature = result.feature;\r\n\t\t\tif (feature != null && typeof feature.id === 'string' ) {\r\n\t\t\t\tlet x = _this.mouseX > _this._canvas.width - _this.toolTip.clientWidth ? _this._canvas.width - _this.toolTip.clientWidth : _this.mouseX;\r\n\t\t\t\tlet y = _this.mouseY > _this._canvas.height - _this.toolTip.clientHeight ? _this._canvas.height - _this.toolTip.clientHeight : _this.mouseY;\r\n\r\n\t\t\t\t//_this.drawToolTipBox(x,y, feature.id);\t\t\t\t\r\n\t\t\t}\r\n\t\t\t\r\n\t\t});\t\t\r\n\t}\r\n\r\n\t// Context Menu Related Items\r\n\t_createMenuItem(html, className, container, fn) {\r\n\t\tvar menu = DomUtil.create('li', className, container);\r\n\t\tmenu.innerHTML = html;\r\n\t\t\t\r\n\t\tDomEvent.disableClickPropagation(menu);\r\n\t\tDomEvent.on(menu, 'click', DomEvent.stop);\r\n\t\tif (fn != undefined)\r\n\t\t DomEvent.on(menu, 'click', fn, this);\r\n\t\t\r\n\t\tmenu.style = this.liStyle;\r\n\t\tmenu.style.paddingTop = '2px';\t\r\n\t\tmenu.style.paddingBottom = '2px';\t\r\n\t\treturn menu;\r\n }\r\n \r\n // this still used? \r\n createContextMenu(container) {\r\n\t\tvar doEnableMeasure = () => this.onEnableMeasurement(event); \r\n var doDisableMeasure = () => this.onDisableMeasurement(event); \r\n var doMoreInformation = () => this.onMoreInformation(event);\r\n\t\t\r\n\t\tvar doInitGeometry = () => this.onInitGeometry(event);\r\n\r\n\t\tvar doDrawPoint = () => this.onDrawPointSelected(event);\r\n\t\tvar doDrawLine = () => this.onDrawLineSelected(event);\r\n\t\tvar doDrawPolygon = () => this.onDrawPolygonSelected(event);\r\n\t\tvar doDeleteMarkup = () => this.onDeleteMarkup(event);\r\n\t\tvar doDeleteAllMarkups = () => this.onDeleteAllMarkups(event);\r\n\t\tvar doSearchFeatures = () => this.onSearchFeatures(event);\r\n\t\tvar doZoomToFeatures = () => this.onZoomToFeatures(event);\r\n\t\t\r\n\r\n\t\tif (container == undefined) {\r\n\t\t\tthis.contextMenuContainer = DomUtil.create('div', '', this._div);\r\n\t\t\tthis.contextMenuContainer.style.display = 'none';\r\n\t\t\tthis.contextMenuContainer.style.width = '170px';\r\n\t\t\tthis.contextMenuContainer.style.height = '60';\r\n\t\t\tthis.contextMenuContainer.style.textAlign = 'left';\r\n\t\t\r\n\t\t\tthis.liStyle = this.createStyle('li:hover {background-color: #8fcadd;');\r\n\t\t\t\r\n\t\t}\r\n\r\n\t\tDomUtil.empty(this.contextMenuContainer);\r\n\r\n\t\tthis.contextMenu = DomUtil.create('ul', '', this.contextMenuContainer);\r\n\t\tthis.contextMenu.style.listStyle = 'none';\r\n\t\tthis.contextMenu.style.backgroundColor = 'white';\r\n\t\tthis.contextMenu.style.position = 'absolute';\r\n\t\tthis.contextMenu.style.width = '170px';\r\n \tthis.contextMenu.style.height = '160px';\r\n\t\t\r\n\t\tthis.contextMenu.style.padding = '0px'; \r\n\t\tthis.contextMenu.style.margin = '0px';\r\n\r\n\t\tthis._createMenuItem('More Information', '', this.contextMenu, doMoreInformation.bind(this));\t\t\t\t\t\t\t\t\t\r\n\t\tlet hr = DomUtil.create('hr', '', this.contextMenu); // menu separator\r\n\t\t//hr.style.paddingTop = '2px'; \r\n\t\t//hr.style.paddingBottom = '2px'; \r\n\r\n\t\tif (this.measureDistanceMode)\r\n\t\t\tthis._createMenuItem('Clear Measurement', '', this.contextMenu, doDisableMeasure.bind(this));\t\r\n\t\telse \r\n\t\t\tthis._createMenuItem('Measure Distance', '', this.contextMenu, doEnableMeasure.bind(this));\t\t\r\n\r\n\t\tif (this.homeCenter && this.homeScale)\r\n\t\t\tthis._createMenuItem('Home', '', this.contextMenu, doZoomToFeatures.bind(this));\t\t\t\r\n\r\n\r\n\t\tthis._createMenuItem('Search Features', '', this.contextMenu, doSearchFeatures.bind(this));\r\n\t\tthis._createMenuItem('Zoom To Features', '', this.contextMenu, doZoomToFeatures.bind(this));\t\t\t\r\n\t\t\r\n\t\tthis._createMenuItem('Init Geometry', '', this.contextMenu, doInitGeometry.bind(this));\r\n\t\tthis._createMenuItem('Draw Point', '', this.contextMenu, doDrawPoint.bind(this));\r\n\t\tthis._createMenuItem('Draw Line', '', this.contextMenu, doDrawLine.bind(this));\r\n\t\tthis._createMenuItem('Draw Polygon', '', this.contextMenu, doDrawPolygon.bind(this));\r\n\t\tthis._createMenuItem('Delete', '', this.contextMenu, doDeleteMarkup.bind(this));\t\t\t\r\n\t\tthis._createMenuItem('Delete All', '', this.contextMenu, doDeleteAllMarkups.bind(this));\r\n\t\t\r\n\t}\r\n\t\r\n\tset contextMenuCallback(callback) {\r\n\t\tthis.cbContextMenu = callback;\r\n\t}\r\n\r\n\tset geometryEditCallback(callback) {\r\n\t\tthis.cbGeometryEdit = callback;\r\n\t}\r\n\r\n\tset displayPromptCallback(callback) {\r\n\t\tthis.cbDisplayPrompt = callback;\r\n\t}\r\n\r\n\tset selectFeaturesCallback(callback) {\r\n\t\tthis.cbSelectFeatures = callback;\r\n\t}\r\n\r\n\tset doubleClickCallback(callback) {\r\n\t\tthis.cbDoubleClick = callback;\r\n\t}\r\n\r\n\tset updateExtentsCallback(callback) {\r\n this.cbUpdateExtents = callback;\r\n\t}\r\n\r\n\thandleContextmenu(e) {\r\n\t\te.preventDefault();\r\n\t\te.stopPropagation();\r\n\t\tthis.mouseX = e.clientX - this.offsetX;\r\n\t\tthis.mouseY = e.clientY - this.offsetY;\r\n\r\n\t\tlet markups = [];\r\n\t\tlet allMarkups = [];\r\n\t\tlet allFeatures = {};\r\n\t\tif (this.geometryEditor != null){\r\n\t\t\tmarkups = this.geometryEditor.getHitItems(this.mouseX, this.mouseY);\r\n\t\t\tallMarkups = this.geometryEditor.markups;\r\n\t\t}\r\n\r\n\t\tif (this.cbContextMenu) {\t\t\r\n\t\t\r\n\t\t\tlet features = [];\t\t\t\t\r\n\t\t\tfor(let i = this._layers.length-1; i >= 0; i--) {\r\n\t\t\t\tlet layer = this._layers[i];\r\n\t\t\t\t\r\n\t\t\t\tif (layer instanceof MgFeatureLayer && layer.isVisible(this.scale) && layer.canHover) {\r\n\t\t\t\t\t// this is for testing\r\n\t\t\t\t\tif (layer._id == \"Inspection Areas\"){\r\n\t\t\t\t\t\tallFeatures = {visibleItems: layer._visibleItems, features: layer._features, markups: allMarkups};\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlet hitItems = layer.getHitItemsFeatureInfo(this.mouseX, this.mouseY);\r\n\t\t\t\t\tfeatures = features.concat(hitItems);\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(this.selectedFeatures != null && Object.keys(this.selectedFeatures).length > 0) {\r\n\t\t\t\tlet selectedFeatures = features.filter(x => x.Selected == true);\r\n\t\t\t\tif(selectedFeatures != null && selectedFeatures.length > 0)\r\n\t\t\t\t\tfeatures = selectedFeatures;\r\n\t\t\t}\r\n\r\n\t\t\t// if we're right clicking the measurebox\r\n\r\n\t\t\tlet overMeasureBox = false;\r\n\r\n\t\t\tif (this.measurement != null && this.measurement.measureBoxHitTest(this.mouseX, this.mouseY))\r\n\t\t\t\toverMeasureBox = true;\r\n\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\tlet message = {\r\n\t\t\t\tevent: e,\r\n\t\t\t\tfeatures: features,\r\n\t\t\t\tmarkups: markups,\r\n\t\t\t\tallInspAreaFeatures: allFeatures,\r\n\t\t\t\toverMeasureBox: overMeasureBox\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.cbContextMenu(message);\r\n\t\t}\r\n\t\telse {\t\t\r\n\t\t\tthis.createContextMenu(this.contextMenuContainer);\r\n\t\t\t\r\n\t\t\tlet style = this.contextMenuContainer.style;\r\n\t\t\tthis.contextMenuContainer.style.position = 'absolute';\r\n\t\t\tthis.contextMenuContainer.style.display = '';\r\n\t\t\tthis.contextMenuContainer.style.borderStyle = 'Solid';\r\n\t\t\tthis.contextMenuContainer.style.borderWidth = '2px';\r\n\t\t\tthis.contextMenuContainer.style.borderColor = 'grey';\r\n\r\n\t\t\tthis.contextMenuContainer.style.zIndex = 1001;\r\n\t\t\tlet x = e.clientX - this.offsetX;\r\n\t\t\tlet y = e.clientY - this.offsetY;\r\n\t\t\r\n\t\t\tDomUtil.setPosition(this.contextMenuContainer, toPoint(x, y));\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t}\r\n\t}\r\n\r\n\thideContextMenu(cursor) {\r\n\t\tthis._canvas.canvas.style.cursor = cursor;\r\n\t\tif (this.contextMenuContainer)\r\n\t\t this.contextMenuContainer.style.display = 'none';\r\n\t}\r\n\r\n\tonSearchFeatures(e) {\r\n\t\tthis.hideContextMenu('default');\r\n\t\tthis.searchFeatures(\"\"); \r\n\t}\r\n\r\n\tonZoomToFeatures(e) {\r\n\t\tthis.hideContextMenu('default');\r\n\t\tif (this._contextLayer != null) {\r\n\t\t\tif (new Date().getMilliseconds() % 2 == 1)\r\n\t\t\t this._contextLayer.zoomToFeature(-1, [\"711\", \"8388647\"]);\r\n\t\t\telse\r\n\t\t\t this._contextLayer.zoomToFeature(-1, [\"711\", \"8388647\"]);\r\n\t\t}\r\n\t}\r\n\r\n\tonEnableMeasurement(e) {\r\n\t\te.stopPropagation();\r\n\t\tthis.hideContextMenu('crosshair');\r\n\t\tthis.measureDistanceMode = true;\t\t\r\n \t}\r\n\r\n\tonDisableMeasurement(e) {\r\n\t\te.stopPropagation();\r\n\t\tthis.hideContextMenu('default');\r\n\t\tthis.measureDistanceMode = false;\t\t\r\n\t\t\r\n\t\tthis.measurement.linePoints.length = 0;\t\t\t\t\t\r\n\t\tthis.measurement = null;\r\n\t\t\r\n\t\r\n\r\n\t\tthis.refreshView();\r\n\t}\r\n\t\r\n\tenableMeasurement(enable) {\r\n\t\tif (enable) {\r\n\t\t\tthis.hideContextMenu('crosshair');\r\n\t\t\tthis.measureDistanceMode = true;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.hideContextMenu('default');\r\n\t\t \tthis.measureDistanceMode = false;\r\n\t\t \r\n\t\t \tif (this.measurement && this.measurement.linePoints) \r\n\t\t\t\tthis.measurement.linePoints.length = 0;\r\n\t\t\tthis.measurement = null;\r\n\t\t\t\r\n\t\t}\r\n\t}\r\n\r\n\tonInitGeometry(e) {\r\n\t\te.preventDefault();\r\n\t\te.stopPropagation();\r\n\r\n\t\t//let sWkt = `GEOMETRYCOLLECTION(POINT (150.38217656775913 -23.524670906572588), POINT (150.44569124614299 -23.532925521813812), POINT (150.50209778362466 -23.546224624146895), POINT (150.50301496309592 -23.556542893198422), POLYGON((150.37827855500635 -23.545078149807836, 150.39066047786818 -23.547371098485954, 150.3874503497188 -23.56021161108341, 150.3702532346329 -23.567319751985572, 150.35328541441484 -23.55860654700873, 150.35924708097795 -23.548058983089387, 150.37827855500635 -23.545078149807836)), POLYGON((150.4129020800459 -23.542326611394095, 150.41978092608025 -23.548517572825013, 150.4124434903103 -23.56296314949715, 150.40074945205188 -23.56021161108341, 150.39776861877033 -23.541409431922848, 150.40533534940812 -23.535906355095364, 150.4129020800459 -23.542326611394095)), LINESTRING(150.4365194514305 -23.546683213882517, 150.44087605391894 -23.554020649652493, 150.4518822075739 -23.56456821357183, 150.46403483556793 -23.543931675468777, 150.46380554070012 -23.563651034100587), LINESTRING(150.4229910542296 -23.562045970025903, 150.43376791301677 -23.565026803307457, 150.42413752856868 -23.57098846987056))`;\r\n\t\tlet sWkt = `POLYGON((150.37827855500635 -23.545078149807836, 150.39066047786818 -23.547371098485954, 150.3874503497188 -23.56021161108341, 150.3702532346329 -23.567319751985572, 150.35328541441484 -23.55860654700873, 150.35924708097795 -23.548058983089387, 150.37827855500635 -23.545078149807836))`;\t\t\r\n\t\t//let sWkt = `POINT (150.50209778362466 -23.546224624146895)`;\t\t\r\n\t\tthis.initialiseGeometryEditor(MapEnums.GeometryTypes.POLYGON, sWkt);\r\n\t}\r\n\r\n\tgeometryEditorInitialise(wkt){\r\n\t\tif (this.geometryEditor) this.geometryEditor.initialise(wkt);\r\n\t}\r\n\r\n\r\n\tinitialiseGeometryEditor(geometryType, sWKT, bounds) {\t\t\r\n\t\tif (this.geometryEditor == null) {\r\n\t\t\tthis.hideContextMenu('default');\r\n \t\tthis.geometryEditor = new GeometryEditor(this, geometryType, sWKT, bounds);\r\n\t\t\tthis.geometryEditMode = false;\r\n\t\t\tthis.geometryType == MapEnums.GeometryTypes.NONE;\t\t\t\r\n\t\t}\t\t\r\n\t}\r\n\r\n\tsetGeometryEditorType(geometryType) {\r\n this.geometryType = geometryType;\r\n\r\n\t\tif (geometryType == MapEnums.GeometryTypes.NONE) {\r\n\t\t\tthis.hideContextMenu('default');\t\t\t\r\n\t\t\tthis.geometryEditMode = false;\r\n\t\t\tif (this.geometryEditor) this.geometryEditor.endEditMode();\r\n\t\t} else {\r\n\r\n\t\t\tif (this.geometryEditor && this.geometryEditor.markups.length > 0 && \r\n\t\t\t\tthis.geometryEditor.geometryType != MapEnums.GeometryTypes.GEOMETRYCOLLECTION &&\r\n\t\t\t\tthis.geometryEditor.geometryType != MapEnums.GeometryTypes.MULTIPOLYGON){\r\n\t\t\t\tthis.geometryEditor.displayOverwritePrompt();\r\n\t\t\t}\r\n\t\t\t\tthis.hideContextMenu('crosshair');\r\n\t\t\t\tthis.geometryEditMode = true;\r\n\t\t\t\tthis.geometryEditor.addMarkup(geometryType);\r\n\t\t\t}\r\n\t} \r\n\r\n\t\r\n\r\n\tonDrawPointSelected(e) {\r\n\t\te.preventDefault();\r\n\t\te.stopPropagation();\r\n\r\n \tif (this.geometryEditor != null) {\r\n\t\t\tthis.hideContextMenu('crosshair');\r\n\t\t\tthis.setGeometryEditorType(this.geometryEditor.markupType == MapEnums.GeometryTypes.POINT ? MapEnums.GeometryTypes.NONE : MapEnums.GeometryTypes.POINT);\r\n\t\t}\t\t\r\n\t}\r\n\r\n\tonDrawLineSelected(e) {\r\n\t\te.preventDefault();\r\n\t\te.stopPropagation();\r\n\r\n\t\tif (this.geometryEditor != null) {\r\n\t\t\tthis.hideContextMenu('crosshair');\r\n\t\t\tthis.setGeometryEditorType(this.geometryEditor.markupType == MapEnums.GeometryTypes.LINESTRING ? MapEnums.GeometryTypes.NONE : MapEnums.GeometryTypes.LINESTRING);\r\n\t\t}\r\n\t}\r\n\r\n\tonDrawPolygonSelected(e) {\r\n\t\te.preventDefault();\r\n\t\te.stopPropagation();\r\n\t\t\r\n\t\tif (this.geometryEditor != null) {\r\n\t\t\tthis.hideContextMenu('crosshair');\r\n\t\t\tthis.setGeometryEditorType(this.geometryEditor.markupType == MapEnums.GeometryTypes.POLYGON ? MapEnums.GeometryTypes.NONE : MapEnums.GeometryTypes.POLYGON);\r\n\t\t}\r\n\t}\r\n\t\r\n\tonDeleteMarkup(e) {\r\n e.preventDefault();\r\n\t\te.stopPropagation();\r\n\r\n\t\tif (this.geometryEditor != null && this.geometryEditor.hitItems != null) {\r\n\t\t\tfor (let i = 0; i < this.geometryEditor.hitItems.length; i++) {\r\n\t\t\t\tlet hitItem = this.geometryEditor.hitItems[i];\r\n\t\t\t\tthis.geometryEditor.deleteMarkup(hitItem.id);\r\n\t\t\t}\r\n\t\t\r\n\t\t\tthis.hideContextMenu(this.geometryEditor.geometryType == MapEnums.GeometryTypes.NONE ? 'default' : 'crosshair');\r\n\t\t}\r\n\r\n\t\tthis.invalidate();\t\t\r\n\t}\r\n\r\n\tonDeleteAllMarkups(e) {\r\n e.preventDefault();\r\n\t\te.stopPropagation();\r\n\r\n\t\tif (this.geometryEditor != null) {\r\n\t\t\tthis.geometryEditor.deleteMarkup(-1); // -1 for all\t\t\t\t\t\t\r\n\t\t\tthis.hideContextMenu(this.geometryEditor.geometryType == MapEnums.GeometryTypes.NONE ? 'default' : 'crosshair');\r\n\t\t}\r\n\r\n\t\tthis.invalidate();\t\t\r\n\t}\r\n\r\n\tdeleteAllMarkup() {\r\n\t\tif (this.geometryEditor != null) {\r\n\t\t\tthis.geometryEditor.deleteMarkup(-1); // -1 for all\r\n\t\t}\r\n\t}\r\n\r\n\thasHomeExtents (){\r\n\t\treturn (this.homeCenter && this.homeScale);\r\n\t}\r\n\t\r\n\tdeleteSelectedMarkups(markupIds) {\r\n \tif (this.geometryEditor != null && markupIds != null && markupIds.length > 0){ \r\n\t\t\tthis.geometryEditor.deleteSelectedMarkups(markupIds);\t\r\n\t\t}\r\n\t}\r\n\tenableGeometryEditing(enable, type) {\r\n\t\tif (enable) {\r\n\t\t\tthis._canvas.canvas.style.cursor = 'crosshair';\r\n\t\t this.measureDistanceMode = true;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis._canvas.canvas.style.cursor = 'pointer';\r\n\t\t this.measureDistanceMode = false;\r\n\t\t \r\n\t\t\tthis.measurement.linePoints.length = 0;\r\n\t\t\tthis.measurement = null;\r\n\t\t\tthis.refreshView();\r\n\t\t}\r\n\t}\r\n\t\r\n\tclearSelectedMarkup() {\t\t\r\n\t\tif (this.geometryEditor != null) {\r\n\t\t\tthis.geometryEditor.clearSelectedMarkup();\r\n\t\t\tthis.refreshView(false); \r\n\t\t}\r\n\t}\r\n\r\n\tisActiveMarkupValid() {\r\n\t\tif (this.geometryEditor != null)\r\n\t\t\treturn this.geometryEditor.isActiveMarkupValid();\r\n\t}\r\n\r\n\tsaveInCompleteMarkup(activeMarkupId) {\r\n\t\tif (this.geometryEditor != null)\r\n\t\t\tthis.geometryEditor.saveInCompleteMarkup(activeMarkupId);\r\n\t}\r\n\r\n\tonMoreInformation(e) {\r\n\t\te.stopPropagation();\r\n\t\tthis.measureDistanceMode = false;\r\n\t\tthis.contextMenuContainer.style.display = 'none';\r\n\t}\r\n\r\n\tremoveTooltip() {\r\n\t\tif (this.toolTipDiv != null) {\r\n\t\t\tif (this.toolTipDiv.parentNode != null) this.toolTipDiv.parentNode.removeChild(this.toolTipDiv);\r\n\t\t\tthis.toolTipDiv = null;\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tcreateStyle(css) {\r\n\t\tvar head = document.head || document.getElementsByTagName('head')[0];\r\n\t\tvar style = document.createElement('style');\r\n\r\n\t\thead.appendChild(style);\r\n\r\n\t\tstyle.type = 'text/css';\r\n\t\tif (style.styleSheet){\r\n\t\t\t// This is required for IE8 and below.\r\n\t\t\tstyle.styleSheet.cssText = css;\r\n\t\t} else {\r\n\t\t\tstyle.appendChild(document.createTextNode(css));\r\n\t\t}\r\n\t\t\r\n\t\treturn style;\t\t\r\n\t}\r\n\r\n\tgetLayerByDataset(dataset) {\r\n\t\tfor(let i = 0; i < this._layers.length; i++) {\r\n\t\t\tlet layer = this._layers[i];\r\n\t\t\tif (layer instanceof MgFeatureLayer && layer.Dataset == dataset) {\r\n\t\t\t\treturn layer;\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tgetContextLayer() {\r\n\t\tif (this.options.Context != null) {\r\n\t\t\tlet contextLayers = [];\r\n\t\t\tfor(let i = 0; i < this._layers.length; i++) {\r\n\t\t\t\tlet layer = this._layers[i];\r\n\t\t\t\tif (layer instanceof MgFeatureLayer && layer.Dataset == this.options.Context.Dataset) {\r\n\t\t\t\t\tcontextLayers.push(layer);\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (contextLayers.length == 1) {\r\n return contextLayers[0];\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tfor(let contextLayer of contextLayers) {\r\n\t\t\t\t\tif (contextLayer.options.ContextualType == \"ShowOnlyRelatedFeatures\")\r\n\t\t\t\t\t return contextLayer;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn contextLayers[0];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tzoomByContextOrder() {\r\n\t\tif(!this._ongoingRefreshView) {\r\n\t\t\t\r\n\t\t\tthis._pendingZoomByContextOrder = false;\r\n\t\t\t\r\n\t\t\tlet contextLayers = [];\r\n\t\t\tfor(let i = 0; i < this._layers.length; i++) {\r\n\t\t\t\tlet layer = this._layers[i];\r\n\t\t\t\tif (layer instanceof MgFeatureLayer && layer.options.ContextualType == \"ShowOnlyRelatedFeatures\" && layer.options.ContextOrder >= 0) {\r\n\t\t\t\t\tcontextLayers.push(layer);\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\r\n\t\t\tcontextLayers.sort(function(x, y) {return x.options.ContextOrder - y.options.ContextOrder});\r\n\t\t\tfor(let i = 0; i < contextLayers.length; i++) {\r\n\t\t\t\tlet contextLayer = contextLayers[i];\r\n\t\r\n\t\t\t\tif(contextLayer && contextLayer.currentBounds != undefined) {\r\n\t\t\t\t\tthis.zoomToGeometryBounds(MapEnums.SourceEvents.ZoomByContextOrder, contextLayer.currentBounds, contextLayer);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis._pendingZoomByContextOrder = true;\r\n\t\t}\r\n\t}\r\n\r\n\tzoomToGeometryBounds(sourceEvent, bounds, contextLayer, skipRefreshView, center = null) {\t\t\r\n\t\tif (bounds != null && bounds.MinX != -1 && bounds.MinY != -1) {\r\n\t\t\tthis.hoverItem = null;\r\n\t\t\t// this.removeTooltip();\r\n\r\n\t\t\t// for(let i = 0; i < this._layers.length; i++) {\t\t\t\t\r\n\t\t\t\t//if(this._layers[i]._id != contextLayer._id)\r\n\t\t\t\t// this._layers[i].createOffscreenCanvas(this.canvas);\r\n\t\t\t// }\r\n\t\t\r\n\r\n\t\t\tvar MinX = bounds.SouthWest.lng;\r\n\t\t\tvar MaxY = bounds.SouthWest.lat;\r\n\t\t\tvar MaxX = bounds.NorthEast.lng;\r\n\t\t\tvar MinY = bounds.NorthEast.lat;\r\n\r\n\r\n \t\tvar kScaleToZoomIn = -1;\r\n\t\t\tif ( Math.abs(MinX - MaxX) == 0 && Math.abs(MinY - MaxY) == 0) {\r\n\t\t\t\tkScaleToZoomIn = 2000;\r\n\t\t\t\tlet cellsize = (kScaleToZoomIn / MgMap.DPI) / this.getInchesPerUnit(0);\t\t\t\r\n\t\t\t\tMinX -= cellsize;\r\n\t\t\t\tMinY -= cellsize;\r\n\t\t\t\tMaxX += cellsize;\r\n\t\t\t\tMaxY += cellsize;\t\t\t\t\r\n\t\t\t}\r\n\r\n\t\t\tlet extents = this.extents != null ? this.extents : bounds\r\n\t\t\tlet viewport = new Viewport(this.rcMap, extents, this.cellsize, this.scale); \r\n\r\n\t\t\tlet ptStart = viewport.worldToClient(MinX, MinY);\r\n\t\t\tlet ptEnd = viewport.worldToClient(MaxX, MaxY);\r\n\t\t\t\r\n\t\t\tlet width = Math.abs(ptEnd.x - ptStart.x);\r\n\t\t\tlet height = Math.abs(ptEnd.y - ptStart.y);\r\n\t\t\tlet xBuffer = width > 100 ? width * 0.8 : 100;\r\n\t\t\tlet yBuffer = height > 100 ? height * 0.8 : 100;\r\n\r\n\t\t\tptStart.x -= xBuffer;\r\n\t\t\tptStart.y -= yBuffer;\r\n\t\t\tptEnd.x += xBuffer;\r\n\t\t\tptEnd.y += yBuffer;\r\n\r\n\t\t\tlet latLng1 = toLatLng(extents.MaxY - (ptStart.y - this.rcMap.MinY) * this.cellsize, (ptStart.x * this.cellsize) + extents.MinX); \r\n\t\t\tlet latLng2 = toLatLng(extents.MaxY - (ptEnd.y - this.rcMap.MinY) * this.cellsize, (ptEnd.x * this.cellsize) + extents.MinX);\r\n\r\n\t\t\textents = new LatLngBounds(latLng1, latLng2);\r\n\t\t\tlet xScale = 0;\r\n\t\t\tlet yScale = 0; \r\n\t\t\t// if (center){\r\n\t\t\t// \tthis.center = toLatLng(center.lat, center.lon);\r\n\t\t\t// } else {\r\n\t\t\t\tthis.center = toLatLng((extents.MinY + extents.MaxY) / 2.0, (extents.MinX + extents.MaxX) / 2.0);\r\n\t\t\t// }\r\n\r\n\t\t\txScale = Math.abs((MaxX - MinX) / this.rcMap.Width * MgMap.DPI * this.getInchesPerUnit(0));\r\n\t\t\tyScale = Math.abs((MaxY - MinY) / this.rcMap.Height * MgMap.DPI * this.getInchesPerUnit(0));\r\n\t\t\t\r\n\r\n\t\t\tthis.scale = Math.max(xScale, yScale);\r\n\t\t\t\t\r\n //if (contextLayer != null)\r\n\t\t\t// contextLayer.scale = this.scale;\r\n\t\t\t\r\n\t\t\t//this.resize();\r\n\t\t\tthis.calculateOffset();\r\n\t\t\tthis.calculateExtents(sourceEvent);\r\n\r\n\t\t\t//skip refresh view when an address search is done.\r\n\t\t\t//address search will not trigger zoomtogeometrybounds as we don't want the\r\n\t\t\t//map focus to change. if there is a pending currentbounds that needs to be zoomed into,\r\n\t\t\t//we just update the variables, but not the view. view will be updated by zoomtoFeatures,\r\n\t\t\t//which calls this zoomtogeometrybounds function again.\r\n\t\t\tif(!skipRefreshView) {\r\n\t\t\t\t\tthis.refreshView(true);\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.calculateOffset();\r\n\t\t\tthis.calculateExtents(sourceEvent);\r\n\r\n\t\t\tif(!skipRefreshView) {\r\n\t\t\t\tthis.refreshView(true);\r\n\t\t\t}\r\n\t\t}\t\t\t \r\n\t}\r\n\r\n\tzoomToGeometry(bounds, featureLayer) {\t\t\r\n\t\tif (bounds != null) {\r\n\t\t\tthis.hoverItem = null;\r\n\t\t\t// this.removeTooltip();\r\n\t\t\t\r\n\t\t\tlet scale = +featureLayer.options.ZoomToScale;\r\n\t\t\tif (scale == null)\r\n\t\t\t\tscale = 2000;\r\n\t\t\t\t\r\n\t\t\tthis.canvas.clearAll();\r\n\t\t\tthis.setView(bounds.Center, scale);\r\n\t\t}\t\t\t \r\n\t}\r\n\r\n\tsearchFeatures(userFilter, layer) {\r\n\t\tif (layer == null) {\r\n\t\t\tthis._contextLayer.searchFeatures(userFilter);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlayer.searchFeatures(userFilter);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tsearchGeocoder(userFilter) {\r\n\t\tif (this.geocoder != null) {\t\t\t\r\n\t\t\tthis.geocoder.searchFeatures(userFilter, -1, false, 0, 100);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tsetSelection(items) {\t\t\r\n\t\tif(items) {\r\n\t\t\tthis.clearSelection();\r\n\t\t\tfor(let i = 0; i < items.length; i++) {\r\n\t\t\t\tlet item = items[i];\r\n\t\t\t\tif(item != null)\r\n\t\t\t\tif (!this.selectedFeatures.hasOwnProperty(item.id)) {\r\n\t\t\t\t\titem.Selected = true;\r\n\t\t\t\t\tthis.selectedFeatures[item.id] = item;\r\n\t\t\t\t\titem.featureLayer.render(this.canvas, true, this.canvas.context, 'source-over');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tclearSelection() {\r\n\t\tfor (var key in this.selectedFeatures) {\r\n\t\t\tlet item = this.selectedFeatures[key];\r\n\t\t\tif (item != undefined) {\r\n\t\t\t\titem.Selected = false;\r\n\t\t\t\titem.featureLayer.render(this.canvas, true, this.canvas.context, 'source-over');\r\n\t\t\t}\t\r\n\t\t\t\r\n\t\t\tdelete this.selectedFeatures[key];\r\n\t\t}\r\n\r\n\t\tthis.selectedFeatures = new Object();\r\n\t}\r\n\r\n\tgetMapDpi(){\r\n\t\treturn MgMap.DPI;\r\n\t}\r\n\r\n\r\n}\r\n\r\n// @section Static Fields\r\nMgMap.MS_INCHES = 0;\r\nMgMap.MS_FEET = 1;\r\nMgMap.MS_MILES = 2;\r\nMgMap.MS_METERS = 3;\r\nMgMap.MS_KILOMETERS = 4;\r\nMgMap.MS_DD = 5;\r\nMgMap.MS_PIXELS = 6;\r\n\r\nMgMap.InchesPerUnit = [1, 12, 63360.0, 39.3701, 39370.1, 4374754 ];\r\nMgMap.DPI = 72;\r\nMgMap.DomUtil = DomUtil;\r\n\r\n","/** PURE_IMPORTS_START tslib,_Subscription PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscription } from '../Subscription';\nvar Action = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(Action, _super);\n function Action(scheduler, work) {\n return _super.call(this) || this;\n }\n Action.prototype.schedule = function (state, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n return this;\n };\n return Action;\n}(Subscription));\nexport { Action };\n//# sourceMappingURL=Action.js.map\n","/** PURE_IMPORTS_START tslib,_Action PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Action } from './Action';\nvar AsyncAction = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(AsyncAction, _super);\n function AsyncAction(scheduler, work) {\n var _this = _super.call(this, scheduler, work) || this;\n _this.scheduler = scheduler;\n _this.work = work;\n _this.pending = false;\n return _this;\n }\n AsyncAction.prototype.schedule = function (state, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n if (this.closed) {\n return this;\n }\n this.state = state;\n var id = this.id;\n var scheduler = this.scheduler;\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, delay);\n }\n this.pending = true;\n this.delay = delay;\n this.id = this.id || this.requestAsyncId(scheduler, this.id, delay);\n return this;\n };\n AsyncAction.prototype.requestAsyncId = function (scheduler, id, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n return setInterval(scheduler.flush.bind(scheduler, this), delay);\n };\n AsyncAction.prototype.recycleAsyncId = function (scheduler, id, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n if (delay !== null && this.delay === delay && this.pending === false) {\n return id;\n }\n clearInterval(id);\n return undefined;\n };\n AsyncAction.prototype.execute = function (state, delay) {\n if (this.closed) {\n return new Error('executing a cancelled action');\n }\n this.pending = false;\n var error = this._execute(state, delay);\n if (error) {\n return error;\n }\n else if (this.pending === false && this.id != null) {\n this.id = this.recycleAsyncId(this.scheduler, this.id, null);\n }\n };\n AsyncAction.prototype._execute = function (state, delay) {\n var errored = false;\n var errorValue = undefined;\n try {\n this.work(state);\n }\n catch (e) {\n errored = true;\n errorValue = !!e && e || new Error(e);\n }\n if (errored) {\n this.unsubscribe();\n return errorValue;\n }\n };\n AsyncAction.prototype._unsubscribe = function () {\n var id = this.id;\n var scheduler = this.scheduler;\n var actions = scheduler.actions;\n var index = actions.indexOf(this);\n this.work = null;\n this.state = null;\n this.pending = false;\n this.scheduler = null;\n if (index !== -1) {\n actions.splice(index, 1);\n }\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, null);\n }\n this.delay = null;\n };\n return AsyncAction;\n}(Action));\nexport { AsyncAction };\n//# sourceMappingURL=AsyncAction.js.map\n","var Scheduler = /*@__PURE__*/ (function () {\n function Scheduler(SchedulerAction, now) {\n if (now === void 0) {\n now = Scheduler.now;\n }\n this.SchedulerAction = SchedulerAction;\n this.now = now;\n }\n Scheduler.prototype.schedule = function (work, delay, state) {\n if (delay === void 0) {\n delay = 0;\n }\n return new this.SchedulerAction(this, work).schedule(state, delay);\n };\n Scheduler.now = function () { return Date.now(); };\n return Scheduler;\n}());\nexport { Scheduler };\n//# sourceMappingURL=Scheduler.js.map\n","/** PURE_IMPORTS_START _AsyncAction,_AsyncScheduler PURE_IMPORTS_END */\nimport { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\nexport var asyncScheduler = /*@__PURE__*/ new AsyncScheduler(AsyncAction);\nexport var async = asyncScheduler;\n//# sourceMappingURL=async.js.map\n","/** PURE_IMPORTS_START tslib,_Scheduler PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Scheduler } from '../Scheduler';\nvar AsyncScheduler = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(AsyncScheduler, _super);\n function AsyncScheduler(SchedulerAction, now) {\n if (now === void 0) {\n now = Scheduler.now;\n }\n var _this = _super.call(this, SchedulerAction, function () {\n if (AsyncScheduler.delegate && AsyncScheduler.delegate !== _this) {\n return AsyncScheduler.delegate.now();\n }\n else {\n return now();\n }\n }) || this;\n _this.actions = [];\n _this.active = false;\n _this.scheduled = undefined;\n return _this;\n }\n AsyncScheduler.prototype.schedule = function (work, delay, state) {\n if (delay === void 0) {\n delay = 0;\n }\n if (AsyncScheduler.delegate && AsyncScheduler.delegate !== this) {\n return AsyncScheduler.delegate.schedule(work, delay, state);\n }\n else {\n return _super.prototype.schedule.call(this, work, delay, state);\n }\n };\n AsyncScheduler.prototype.flush = function (action) {\n var actions = this.actions;\n if (this.active) {\n actions.push(action);\n return;\n }\n var error;\n this.active = true;\n do {\n if (error = action.execute(action.state, action.delay)) {\n break;\n }\n } while (action = actions.shift());\n this.active = false;\n if (error) {\n while (action = actions.shift()) {\n action.unsubscribe();\n }\n throw error;\n }\n };\n return AsyncScheduler;\n}(Scheduler));\nexport { AsyncScheduler };\n//# sourceMappingURL=AsyncScheduler.js.map\n","/** PURE_IMPORTS_START _Observable,_scheduler_async,_util_isNumeric PURE_IMPORTS_END */\nimport { Observable } from '../Observable';\nimport { async } from '../scheduler/async';\nimport { isNumeric } from '../util/isNumeric';\nexport function interval(period, scheduler) {\n if (period === void 0) {\n period = 0;\n }\n if (scheduler === void 0) {\n scheduler = async;\n }\n if (!isNumeric(period) || period < 0) {\n period = 0;\n }\n if (!scheduler || typeof scheduler.schedule !== 'function') {\n scheduler = async;\n }\n return new Observable(function (subscriber) {\n subscriber.add(scheduler.schedule(dispatch, period, { subscriber: subscriber, counter: 0, period: period }));\n return subscriber;\n });\n}\nfunction dispatch(state) {\n var subscriber = state.subscriber, counter = state.counter, period = state.period;\n subscriber.next(counter);\n this.schedule({ subscriber: subscriber, counter: counter + 1, period: period }, period);\n}\n//# sourceMappingURL=interval.js.map\n","/** PURE_IMPORTS_START _isArray PURE_IMPORTS_END */\nimport { isArray } from './isArray';\nexport function isNumeric(val) {\n return !isArray(val) && (val - parseFloat(val) + 1) >= 0;\n}\n//# sourceMappingURL=isNumeric.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport function getSymbolIterator() {\n if (typeof Symbol !== 'function' || !Symbol.iterator) {\n return '@@iterator';\n }\n return Symbol.iterator;\n}\nexport var iterator = /*@__PURE__*/ getSymbolIterator();\nexport var $$iterator = iterator;\n//# sourceMappingURL=iterator.js.map\n","/** PURE_IMPORTS_START _subscribeToArray,_subscribeToPromise,_subscribeToIterable,_subscribeToObservable,_isArrayLike,_isPromise,_isObject,_symbol_iterator,_symbol_observable PURE_IMPORTS_END */\nimport { subscribeToArray } from './subscribeToArray';\nimport { subscribeToPromise } from './subscribeToPromise';\nimport { subscribeToIterable } from './subscribeToIterable';\nimport { subscribeToObservable } from './subscribeToObservable';\nimport { isArrayLike } from './isArrayLike';\nimport { isPromise } from './isPromise';\nimport { isObject } from './isObject';\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { observable as Symbol_observable } from '../symbol/observable';\nexport var subscribeTo = function (result) {\n if (!!result && typeof result[Symbol_observable] === 'function') {\n return subscribeToObservable(result);\n }\n else if (isArrayLike(result)) {\n return subscribeToArray(result);\n }\n else if (isPromise(result)) {\n return subscribeToPromise(result);\n }\n else if (!!result && typeof result[Symbol_iterator] === 'function') {\n return subscribeToIterable(result);\n }\n else {\n var value = isObject(result) ? 'an invalid object' : \"'\" + result + \"'\";\n var msg = \"You provided \" + value + \" where a stream was expected.\"\n + ' You can provide an Observable, Promise, Array, or Iterable.';\n throw new TypeError(msg);\n }\n};\n//# sourceMappingURL=subscribeTo.js.map\n","/** PURE_IMPORTS_START _symbol_observable PURE_IMPORTS_END */\nimport { observable as Symbol_observable } from '../symbol/observable';\nexport var subscribeToObservable = function (obj) {\n return function (subscriber) {\n var obs = obj[Symbol_observable]();\n if (typeof obs.subscribe !== 'function') {\n throw new TypeError('Provided object does not correctly implement Symbol.observable');\n }\n else {\n return obs.subscribe(subscriber);\n }\n };\n};\n//# sourceMappingURL=subscribeToObservable.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport var isArrayLike = (function (x) { return x && typeof x.length === 'number' && typeof x !== 'function'; });\n//# sourceMappingURL=isArrayLike.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport var subscribeToArray = function (array) {\n return function (subscriber) {\n for (var i = 0, len = array.length; i < len && !subscriber.closed; i++) {\n subscriber.next(array[i]);\n }\n subscriber.complete();\n };\n};\n//# sourceMappingURL=subscribeToArray.js.map\n","/** PURE_IMPORTS_START PURE_IMPORTS_END */\nexport function isPromise(value) {\n return !!value && typeof value.subscribe !== 'function' && typeof value.then === 'function';\n}\n//# sourceMappingURL=isPromise.js.map\n","/** PURE_IMPORTS_START _hostReportError PURE_IMPORTS_END */\nimport { hostReportError } from './hostReportError';\nexport var subscribeToPromise = function (promise) {\n return function (subscriber) {\n promise.then(function (value) {\n if (!subscriber.closed) {\n subscriber.next(value);\n subscriber.complete();\n }\n }, function (err) { return subscriber.error(err); })\n .then(null, hostReportError);\n return subscriber;\n };\n};\n//# sourceMappingURL=subscribeToPromise.js.map\n","/** PURE_IMPORTS_START _symbol_iterator PURE_IMPORTS_END */\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nexport var subscribeToIterable = function (iterable) {\n return function (subscriber) {\n var iterator = iterable[Symbol_iterator]();\n do {\n var item = void 0;\n try {\n item = iterator.next();\n }\n catch (err) {\n subscriber.error(err);\n return subscriber;\n }\n if (item.done) {\n subscriber.complete();\n break;\n }\n subscriber.next(item.value);\n if (subscriber.closed) {\n break;\n }\n } while (true);\n if (typeof iterator.return === 'function') {\n subscriber.add(function () {\n if (iterator.return) {\n iterator.return();\n }\n });\n }\n return subscriber;\n };\n};\n//# sourceMappingURL=subscribeToIterable.js.map\n","/** PURE_IMPORTS_START tslib,_Subscriber,_Observable,_util_subscribeTo PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { Subscriber } from './Subscriber';\nimport { Observable } from './Observable';\nimport { subscribeTo } from './util/subscribeTo';\nvar SimpleInnerSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(SimpleInnerSubscriber, _super);\n function SimpleInnerSubscriber(parent) {\n var _this = _super.call(this) || this;\n _this.parent = parent;\n return _this;\n }\n SimpleInnerSubscriber.prototype._next = function (value) {\n this.parent.notifyNext(value);\n };\n SimpleInnerSubscriber.prototype._error = function (error) {\n this.parent.notifyError(error);\n this.unsubscribe();\n };\n SimpleInnerSubscriber.prototype._complete = function () {\n this.parent.notifyComplete();\n this.unsubscribe();\n };\n return SimpleInnerSubscriber;\n}(Subscriber));\nexport { SimpleInnerSubscriber };\nvar ComplexInnerSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(ComplexInnerSubscriber, _super);\n function ComplexInnerSubscriber(parent, outerValue, outerIndex) {\n var _this = _super.call(this) || this;\n _this.parent = parent;\n _this.outerValue = outerValue;\n _this.outerIndex = outerIndex;\n return _this;\n }\n ComplexInnerSubscriber.prototype._next = function (value) {\n this.parent.notifyNext(this.outerValue, value, this.outerIndex, this);\n };\n ComplexInnerSubscriber.prototype._error = function (error) {\n this.parent.notifyError(error);\n this.unsubscribe();\n };\n ComplexInnerSubscriber.prototype._complete = function () {\n this.parent.notifyComplete(this);\n this.unsubscribe();\n };\n return ComplexInnerSubscriber;\n}(Subscriber));\nexport { ComplexInnerSubscriber };\nvar SimpleOuterSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(SimpleOuterSubscriber, _super);\n function SimpleOuterSubscriber() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n SimpleOuterSubscriber.prototype.notifyNext = function (innerValue) {\n this.destination.next(innerValue);\n };\n SimpleOuterSubscriber.prototype.notifyError = function (err) {\n this.destination.error(err);\n };\n SimpleOuterSubscriber.prototype.notifyComplete = function () {\n this.destination.complete();\n };\n return SimpleOuterSubscriber;\n}(Subscriber));\nexport { SimpleOuterSubscriber };\nvar ComplexOuterSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(ComplexOuterSubscriber, _super);\n function ComplexOuterSubscriber() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ComplexOuterSubscriber.prototype.notifyNext = function (_outerValue, innerValue, _outerIndex, _innerSub) {\n this.destination.next(innerValue);\n };\n ComplexOuterSubscriber.prototype.notifyError = function (error) {\n this.destination.error(error);\n };\n ComplexOuterSubscriber.prototype.notifyComplete = function (_innerSub) {\n this.destination.complete();\n };\n return ComplexOuterSubscriber;\n}(Subscriber));\nexport { ComplexOuterSubscriber };\nexport function innerSubscribe(result, innerSubscriber) {\n if (innerSubscriber.closed) {\n return undefined;\n }\n if (result instanceof Observable) {\n return result.subscribe(innerSubscriber);\n }\n return subscribeTo(result)(innerSubscriber);\n}\n//# sourceMappingURL=innerSubscribe.js.map\n","/** PURE_IMPORTS_START tslib,_innerSubscribe PURE_IMPORTS_END */\nimport * as tslib_1 from \"tslib\";\nimport { SimpleOuterSubscriber, innerSubscribe, SimpleInnerSubscriber } from '../innerSubscribe';\nexport function debounce(durationSelector) {\n return function (source) { return source.lift(new DebounceOperator(durationSelector)); };\n}\nvar DebounceOperator = /*@__PURE__*/ (function () {\n function DebounceOperator(durationSelector) {\n this.durationSelector = durationSelector;\n }\n DebounceOperator.prototype.call = function (subscriber, source) {\n return source.subscribe(new DebounceSubscriber(subscriber, this.durationSelector));\n };\n return DebounceOperator;\n}());\nvar DebounceSubscriber = /*@__PURE__*/ (function (_super) {\n tslib_1.__extends(DebounceSubscriber, _super);\n function DebounceSubscriber(destination, durationSelector) {\n var _this = _super.call(this, destination) || this;\n _this.durationSelector = durationSelector;\n _this.hasValue = false;\n return _this;\n }\n DebounceSubscriber.prototype._next = function (value) {\n try {\n var result = this.durationSelector.call(this, value);\n if (result) {\n this._tryNext(value, result);\n }\n }\n catch (err) {\n this.destination.error(err);\n }\n };\n DebounceSubscriber.prototype._complete = function () {\n this.emitValue();\n this.destination.complete();\n };\n DebounceSubscriber.prototype._tryNext = function (value, duration) {\n var subscription = this.durationSubscription;\n this.value = value;\n this.hasValue = true;\n if (subscription) {\n subscription.unsubscribe();\n this.remove(subscription);\n }\n subscription = innerSubscribe(duration, new SimpleInnerSubscriber(this));\n if (subscription && !subscription.closed) {\n this.add(this.durationSubscription = subscription);\n }\n };\n DebounceSubscriber.prototype.notifyNext = function () {\n this.emitValue();\n };\n DebounceSubscriber.prototype.notifyComplete = function () {\n this.emitValue();\n };\n DebounceSubscriber.prototype.emitValue = function () {\n if (this.hasValue) {\n var value = this.value;\n var subscription = this.durationSubscription;\n if (subscription) {\n this.durationSubscription = undefined;\n subscription.unsubscribe();\n this.remove(subscription);\n }\n this.value = undefined;\n this.hasValue = false;\n _super.prototype._next.call(this, value);\n }\n };\n return DebounceSubscriber;\n}(SimpleOuterSubscriber));\n//# sourceMappingURL=debounce.js.map\n","import {Events} from '../core/Events';\r\nimport { fromEvent, interval } from 'rxjs';\r\nimport { debounce } from 'rxjs/operators';\r\n\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\nexport class ZoomControl extends Events {\r\n constructor() {\r\n super();\r\n }\r\n\r\n addTo(map) {\r\n this._map = map;\r\n var zoomName = 'mgmap-control-container';\r\n var container = DomUtil.create('div', zoomName, this._map.container);\r\n \r\n this._zoomInButton = this._createButton('+', 'Zoom In', zoomName + '-zoom-in', container, this._zoomIn);\r\n\t\tthis._zoomOutButton = this._createButton('−', 'Zoom Out', zoomName + '-zoom-out', container, this._zoomOut);\r\n\t\t\r\n\t\tconst zoomInClicks = fromEvent(this._zoomInButton, 'click');\r\n\t\tconst zoomOutClicks = fromEvent(this._zoomOutButton, 'click');\r\n\r\n\t\tthis.onZoomInEvent = zoomInClicks.pipe(debounce(() => interval(200)));\r\n\t\tthis.onZoomOutEvent = zoomOutClicks.pipe(debounce(() => interval(200)));\r\n }\r\n\r\n _zoomIn (e) {\r\n if (!e)\r\n e = window.event;\r\n\r\n\t\te.stopPropagation();\r\n\t\tif (this._map._zoom < this._map.maxZoom) {\r\n this._map.zoomIn();\t\t\t\r\n\t\t}\r\n\t}\r\n\r\n\t_zoomOut(e) {\r\n\t\tif (!e)\r\n\t\t e= window.event;\r\n\t\t \r\n\t\te.stopPropagation();\r\n\t\tif (this._map._zoom > this._map.minZoom) {\r\n this._map.zoomOut();\t\t\t\r\n\t\t}\r\n\t}\r\n\r\n\t_createButton(html, title, className, container, fn) {\r\n\t\tvar link = DomUtil.create('a', className, container);\r\n\t\tlink.innerHTML = html;\r\n\t\tlink.href = '#';\r\n\t\tlink.title = title;\r\n\r\n\t\t/*\r\n\t\t * Will force screen readers like VoiceOver to read this as \"Zoom in - button\"\r\n\t\t */\r\n\t\tlink.setAttribute('role', 'button');\r\n\t\tlink.setAttribute('aria-label', title);\r\n\r\n\t\tDomEvent.disableClickPropagation(link);\r\n\t\tDomEvent.on(link, 'click', DomEvent.stop);\r\n\t\t//DomEvent.on(link, 'click', fn, this);\r\n\t\t\t\t\r\n\t\treturn link;\r\n\t}\r\n}","import {Events} from '../core/Events';\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\nexport class LayerControl extends Events {\r\n constructor() {\r\n super();\r\n }\r\n\r\n addTo(map, layers) {\r\n this._map = map; \r\n\t\tlet layerContainerItem = 'mgmap-layer-container-item';\r\n\t\tlet layerContainer = 'mgmap-layer-container';\r\n let container = DomUtil.create('div', layerContainer, this._map.container);\r\n\t\t\r\n\t\tlet __this = this;\r\n\t\tif (layers != null) {\r\n\t\t\tfor (var i = 0; i < layers.length; i++) {\r\n\t\t\t\tlet __i = i;\r\n\t\t\t\tlet layerName = layers[i].id;\r\n\t\t\t\tlet itemContainer = DomUtil.create('div', layerContainerItem + `-${i}`, container);\r\n\t\t\t\tthis._createButton(layerName, layerName, layerContainerItem, itemContainer, (e) => {\r\n\t\t\t\t\tif (!e)\r\n\t\t\t\t\t\te= window.event;\r\n\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t__this._map.showLayer(`${__i}`);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n }\r\n\r\n _zoomIn (e) {\r\n if (!e)\r\n e= window.event;\r\n\r\n e.stopPropagation();\r\n\t\tif (this._map._zoom < this._map.maxZoom) {\r\n this._map.zoomIn();\t\t\t\r\n\t\t}\r\n\t}\r\n\r\n\t_createButton(html, title, className, container, fn) {\r\n\t\tvar link = DomUtil.create('a', className, container);\r\n\t\tlink.innerHTML = html;\r\n\t\tlink.href = '#';\r\n\t\tlink.title = title;\r\n\r\n\t\t/*\r\n\t\t * Will force screen readers like VoiceOver to read this as \"Zoom in - button\"\r\n\t\t */\r\n\t\tlink.setAttribute('role', 'button');\r\n\t\tlink.setAttribute('aria-label', title);\r\n\r\n\t\tDomEvent.disableClickPropagation(link);\r\n\t\tDomEvent.on(link, 'click', DomEvent.stop);\r\n\t\tDomEvent.on(link, 'click', fn, this);\r\n\t\t//DomEvent.on(link, 'click', this._refocusOnMap, this);\r\n\r\n\t\treturn link;\r\n\t}\r\n}","import {MgMap} from './map/index';\r\nimport {MgFeatureLayer, MgFeatureLayer2, MgImageLayer, MgTileLayer, MgWmsLayer, MgGeocoderLayer, MgReprojectedTileLayer} from './layer/index';\r\nimport * as DomUtil from './dom/DomUtil';\r\nimport {Point, toPoint} from './geometry/Point';\r\nimport {Envelope} from './geometry/Envelope';\r\nimport {RestAPI} from './api';\r\n\r\nexport function createMap (id, options, baseUrl, accessToken) {\r\n let generatedMap = dctMaps.get(id);\r\n if(!generatedMap){ \r\n generatedMap = MgMap.createObject(id, options, baseUrl, accessToken);\r\n dctMaps.set(id, generatedMap);\r\n } \r\n return generatedMap;\r\n}\r\n\r\nexport function deleteMap(id) {\r\n dctMaps.delete(id);\r\n}\r\n\r\nexport function createTileLayer(id, options, taskId, mapProjection){\r\n if(!mapProjection || mapProjection == \"EPSG:4326\" || mapProjection == \"EPSG:4283\" || mapProjection == \"EPSG:3857\")\r\n return MgTileLayer.createObject(id, options, taskId);\r\n else \r\n return MgReprojectedTileLayer.createObject(id, options, taskId);\r\n}\r\n\r\nexport function createImageLayer(id, options, taskId){\r\n return MgImageLayer.createObject(id, options, taskId);\r\n}\r\n\r\nexport function createFeatureLayer(id, options, taskId){\r\n return MgFeatureLayer.createObject(id, options, taskId);\r\n}\r\n\r\nexport function createGeocoderLayer(id, options, taskId){\r\n return MgGeocoderLayer.createObject(id, options, taskId);\r\n}\r\n\r\nexport function createWmsLayer(id, options, taskId){\r\n return MgWmsLayer.createObject(id, options, taskId);\r\n}\r\n\r\nexport function createEnvelope(x1, x2, y1, y2){\r\n return new Envelope(x1, x2, y1, y2);\r\n}\r\n\r\nRestAPI.BaseUrl = \"http://localhost:8380/ConnectWebService/REST/\";\r\nRestAPI.AccessToken = \"e0f3923c-570b-4f55-a3e9-26dba007002f\";\r\n \r\nwindow.RestAPI = RestAPI;\r\nwindow.DomUtil = DomUtil;\r\nwindow.Point = Point;\r\nwindow.toPoint = toPoint;\r\n\r\nlet dctMaps = new Map();","import {version} from '../package.json';\r\nexport {version};\r\n\r\nexport * from './export';\r\n\r\nimport MapEnums from './map/enums';\r\nexport {MapEnums};\r\n"],"sourceRoot":""}