{"version":3,"file":"mapsvg-front.umd.js","sources":["../js/mapsvg/Core/globals.js","../js/mapsvg/Map/default-options.ts","../js/mapsvg/Vendor/tinycolor.js","../js/mapsvg/Infrastructure/Server/Server.ts","../js/mapsvg/Core/Events.ts","../js/mapsvg/Core/ArrayIndexed.ts","../js/mapsvg/Infrastructure/Server/SchemaField.ts","../js/mapsvg/Infrastructure/Server/Schema.ts","../js/mapsvg/Infrastructure/Server/Query.ts","../js/mapsvg/Location/LocationAddress.ts","../js/mapsvg/Location/Location.ts","../js/mapsvg/Object/CustomObject.ts","../js/mapsvg/Core/Repository.ts","../js/mapsvg/Map/MapsRepository.ts","../js/mapsvg/Map/MapsV2Repository.ts","../js/mapsvg/Map/Converter.ts","../js/mapsvg/Core/ResizeSensor.ts","../js/mapsvg/Map/MapOptionsInterface.ts","../js/mapsvg/MapObject/MapObject.ts","../js/mapsvg/Marker/Marker.ts","../js/mapsvg/MarkerCluster/MarkerCluster.ts","../js/mapsvg/Region/Region.ts","../js/mapsvg/Infrastructure/Server/SchemaRepository.ts","../js/mapsvg/Core/Controller.ts","../js/mapsvg/Directory/Directory.ts","../js/mapsvg/Details/Details.ts","../js/mapsvg/FormBuilder/FormElements/FormElement.ts","../js/mapsvg/FormBuilder/FormElements/Checkbox/CheckboxFormElement.ts","../js/mapsvg/FormBuilder/FormElements/Checkboxes/CheckboxesFormElement.ts","../js/mapsvg/FormBuilder/FormElements/Date/DateFormElement.ts","../js/mapsvg/FormBuilder/FormElements/Distance/DistanceFormElement.ts","../js/mapsvg/FormBuilder/FormElements/Empty/EmptyFormElement.ts","../js/mapsvg/FormBuilder/FormElements/Id/IdFormElement.ts","../js/vendor/sortable/sortable.min.js","../js/mapsvg/FormBuilder/FormElements/Images/ImagesFormElement.ts","../js/mapsvg/FormBuilder/FormElements/Location/LocationFormElement.ts","../js/mapsvg/FormBuilder/FormElements/Modal/ModalFormElement.ts","../js/mapsvg/FormBuilder/FormElements/Post/PostFormElement.ts","../js/mapsvg/FormBuilder/FormElements/Radio/RadioFormElement.ts","../js/mapsvg/FormBuilder/FormElements/Regions/RegionsFormElement.ts","../js/mapsvg/FormBuilder/FormElements/Save/SaveFormElement.ts","../js/mapsvg/FormBuilder/FormElements/Search/SearchFormElement.ts","../js/mapsvg/FormBuilder/FormElements/Select/SelectFormElement.ts","../js/mapsvg/FormBuilder/FormElements/Status/StatusFormElement.ts","../js/mapsvg/FormBuilder/FormElements/Textarea/TextareaFormElement.ts","../js/mapsvg/FormBuilder/FormElements/Text/TextFormElement.ts","../js/mapsvg/FormBuilder/FormElements/Title/TitleFormElement.ts","../js/mapsvg/FormBuilder/FormElements/Colorpicker/ColorPickerFormElement.ts","../js/mapsvg/FormBuilder/FormElements/FormElementFactory.ts","../js/mapsvg/FormBuilder/FormBuilder.ts","../js/mapsvg/Filters/Filters.ts","../js/mapsvg/Popover/Popover.ts","../js/mapsvg/Tooltips/Tooltip.ts","../js/mapsvg/Map/Map.ts"],"sourcesContent":["/**\n * Global MapSVG class. It contains all other MapSVG classes and some static methods.\n * @constructor\n * @example\n * var mapsvg = MapSVG.get(0); // get first map instance\n * var mapsvg2 = MapSVG.get(1); // get second map instance\n * var mapsvg3 = MapSVG.getById(123); // get map by ID\n *\n * var mapsvg = new MapSVG.Map(\"my-container\",{\n * source: \"/path/to/map.svg\"\n * });\n *\n * var marker = new MapSVG.Marker({\n * location: location,\n * mapsvg: mapsvg\n * });\n *\n * if(MapSVG.isPhone){\n * // do something special for mobile devices\n * }\n *\n *\n */\nvar MapSVG = function () {};\nconst $ = jQuery;\n\nMapSVG.formBuilder = {};\nMapSVG.mediaUploader = {};\n\nif (typeof wp !== \"undefined\" && typeof wp.media !== \"undefined\") {\n MapSVG.mediaUploader = wp.media({\n title: \"Choose images\",\n button: {\n text: \"Choose images\",\n },\n multiple: true,\n });\n}\n\n/**\n * Keeps loaded HBS templates\n * @type {Array}\n * @private\n * @static\n * @property\n */\nMapSVG.templatesLoaded = {};\n\n/**\n * Keeps URLs\n * @type {Array}\n * @private\n * @static\n * @property\n */\nif (typeof mapsvg_paths !== \"undefined\") {\n MapSVG.urls = mapsvg_paths;\n} else {\n MapSVG.urls = {};\n}\nif (typeof ajaxurl !== \"undefined\") {\n MapSVG.urls.ajaxurl = ajaxurl;\n}\n\n/**\n * Keeps map instances\n * @type {Array}\n * @private\n * @static\n * @property\n */\nMapSVG.instances = [];\n\nMapSVG.userAgent = navigator.userAgent.toLowerCase();\n\n/**\n * Determines if current device is touch-device\n * @type {boolean}\n * @static\n * @property\n */\nMapSVG.touchDevice =\n \"ontouchstart\" in window || navigator.MaxTouchPoints > 0 || navigator.msMaxTouchPoints > 0;\n// (MapSVG.userAgent.indexOf(\"ipad\") > -1) ||\n// (MapSVG.userAgent.indexOf(\"iphone\") > -1) ||\n// (MapSVG.userAgent.indexOf(\"ipod\") > -1) ||\n// (MapSVG.userAgent.indexOf(\"android\") > -1);\n\n/**\n * Determines if current device is iOS-device\n * @type {boolean}\n * @static\n * @property\n */\nMapSVG.ios =\n MapSVG.userAgent.indexOf(\"ipad\") > -1 ||\n MapSVG.userAgent.indexOf(\"iphone\") > -1 ||\n MapSVG.userAgent.indexOf(\"ipod\") > -1;\n\n/**\n * Determines if current device is Android-device\n * @type {boolean}\n * @static\n * @property\n */\nMapSVG.android = MapSVG.userAgent.indexOf(\"android\");\n\n/**\n * Determines if current device is mobile-device\n * @type {boolean}\n * @static\n * @property\n */\nMapSVG.isPhone = window.matchMedia(\"only screen and (max-width: 812px)\").matches;\n\n/**\n * Keeps browser information\n * @type {object}\n * @static\n * @property\n */\nMapSVG.browser = {};\nMapSVG.browser.ie =\n MapSVG.userAgent.indexOf(\"msie\") > -1 ||\n MapSVG.userAgent.indexOf(\"trident\") > -1 ||\n MapSVG.userAgent.indexOf(\"edge\") > -1\n ? {}\n : false;\nMapSVG.browser.firefox = MapSVG.userAgent.indexOf(\"firefox\") > -1;\nMapSVG.browser.safari =\n MapSVG.userAgent.indexOf(\"safari\") > -1 && MapSVG.userAgent.indexOf(\"chrome\") === -1;\n\n/**\n * Contains device information\n * @type {object}\n * @static\n * @property\n */\nvar ua = window.navigator.userAgent;\nMapSVG.device = {};\nMapSVG.device.ios = !!ua.match(/iPad/i) || !!ua.match(/iPhone/i);\nMapSVG.device.android = !!ua.match(/Android/i);\n\nif (!String.prototype.trim) {\n String.prototype.trim = function () {\n return this.replace(/^\\s+|\\s+$/g, \"\");\n };\n}\n\n/**\n * Converts mouse event object to x/y coordinates\n * @param e\n * @returns {{x: *, y: *}}\n */\nMapSVG.mouseCoords = function (e) {\n if (e.clientX) {\n return { x: e.clientX + $(document).scrollLeft(), y: e.clientY + $(document).scrollTop() };\n }\n if (e.pageX) {\n return { x: e.pageX, y: e.pageY };\n } else if (MapSVG.touchDevice) {\n e = e.originalEvent || e;\n return e.touches && e.touches[0]\n ? { x: e.touches[0].pageX, y: e.touches[0].pageY }\n : { x: e.changedTouches[0].pageX, y: e.changedTouches[0].pageY };\n }\n};\n\n/**\n * Adds new instance of the map\n * @param {MapSVG.Map} mapsvg\n */\nMapSVG.addInstance = function (mapsvg) {\n MapSVG.instances.push(mapsvg);\n};\n\nMapSVG.get = function (index) {\n return MapSVG.instances[index];\n};\n\nMapSVG.getById = function (id) {\n var instance = MapSVG.instances.filter(function (i) {\n return i.id == id;\n });\n if (instance.length > 0) {\n return instance[0];\n }\n};\n\nMapSVG.getByContainerId = function (id) {\n var instance = MapSVG.instances.filter(function (i) {\n return i.$map.attr(\"id\") == id;\n });\n if (instance.length > 0) {\n return instance[0];\n }\n};\n\nMapSVG.extend = function (sub, base) {\n sub.prototype = Object.create(base.prototype);\n sub.prototype.constructor = sub;\n};\n\nMapSVG.ucfirst = function (string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n};\nMapSVG.parseBoolean = function (string) {\n switch (String(string).toLowerCase()) {\n case \"on\":\n case \"true\":\n case \"1\":\n case \"yes\":\n case \"y\":\n return true;\n case \"off\":\n case \"false\":\n case \"0\":\n case \"no\":\n case \"n\":\n return false;\n default:\n return undefined;\n }\n};\nMapSVG.isNumber = function (n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n};\n\nMapSVG.safeURL = function (url) {\n if (url.indexOf(\"http://\") == 0 || url.indexOf(\"https://\") == 0)\n url = \"//\" + url.split(\"://\").pop();\n return url.replace(/^.*\\/\\/[^\\/]+/, \"\");\n};\n\nMapSVG.convertToText = function (obj) {\n //create an array that will later be joined into a string.\n var string = [];\n\n //is object\n // Both arrays and objects seem to return \"object\"\n // when typeof(obj) is applied to them. So instead\n // I am checking to see if they have the property\n // join, which normal objects don't have but\n // arrays do.\n if (obj === null) {\n return null;\n }\n if (obj === undefined) {\n return '\"\"';\n } else if (typeof obj == \"object\" && obj.join == undefined) {\n var prop;\n for (prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n var key = '\"' + prop.replace(/\\\"/g, '\\\\\"') + '\"'; //prop.search(/[^a-zA-Z]+/) === -1 ? prop : ...\n string.push(key + \": \" + MapSVG.convertToText(obj[prop]));\n }\n }\n return \"{\" + string.join(\",\") + \"}\";\n\n //is array\n } else if (typeof obj == \"object\" && !(obj.join == undefined)) {\n var prop;\n for (prop in obj) {\n string.push(MapSVG.convertToText(obj[prop]));\n }\n return \"[\" + string.join(\",\") + \"]\";\n\n //is function\n } else if (typeof obj == \"function\") {\n return obj.toString().replace(\"function anonymous\", \"function\");\n // string.push(obj.toString().replace('function anonymous','function'));\n\n //all other values can be done with JSON.stringify\n } else {\n return JSON.stringify(obj);\n // var s = JSON.stringify(obj);\n // string.push(s);\n }\n\n return string.join(\",\");\n};\n\n// Create Element.remove() function if not exists\nif (!(\"remove\" in Element.prototype)) {\n Element.prototype.remove = function () {\n if (this.parentNode) {\n this.parentNode.removeChild(this);\n }\n };\n}\n\nMath.hypot =\n Math.hypot ||\n function () {\n var y = 0;\n var length = arguments.length;\n\n for (var i = 0; i < length; i++) {\n if (arguments[i] === Infinity || arguments[i] === -Infinity) {\n return Infinity;\n }\n y += arguments[i] * arguments[i];\n }\n return Math.sqrt(y);\n };\nSVGElement.prototype.getTransformToElement =\n SVGElement.prototype.getTransformToElement ||\n function (toElement) {\n let value;\n try {\n value = toElement.getScreenCTM().inverse().multiply(this.getScreenCTM());\n } catch (e) {\n return;\n }\n return value;\n };\n\nMap.prototype.toArray = function () {\n return Array.from(this, ([name, value]) => value);\n};\n\nMapSVG.ResizeSensor = class ResizeSensor {\n constructor(element, callback) {\n var _this = this;\n _this.element = element;\n _this.callback = callback;\n var style = getComputedStyle(element);\n var zIndex = parseInt(style.zIndex);\n if (isNaN(zIndex)) {\n zIndex = 0;\n }\n zIndex--;\n _this.expand = document.createElement(\"div\");\n _this.expand.style.position = \"absolute\";\n _this.expand.style.left = \"0px\";\n _this.expand.style.top = \"0px\";\n _this.expand.style.right = \"0px\";\n _this.expand.style.bottom = \"0px\";\n _this.expand.style.overflow = \"hidden\";\n _this.expand.style.zIndex = zIndex.toString();\n _this.expand.style.visibility = \"hidden\";\n var expandChild = document.createElement(\"div\");\n expandChild.style.position = \"absolute\";\n expandChild.style.left = \"0px\";\n expandChild.style.top = \"0px\";\n expandChild.style.width = \"10000000px\";\n expandChild.style.height = \"10000000px\";\n _this.expand.appendChild(expandChild);\n _this.shrink = document.createElement(\"div\");\n _this.shrink.style.position = \"absolute\";\n _this.shrink.style.left = \"0px\";\n _this.shrink.style.top = \"0px\";\n _this.shrink.style.right = \"0px\";\n _this.shrink.style.bottom = \"0px\";\n _this.shrink.style.overflow = \"hidden\";\n _this.shrink.style.zIndex = zIndex.toString();\n _this.shrink.style.visibility = \"hidden\";\n var shrinkChild = document.createElement(\"div\");\n shrinkChild.style.position = \"absolute\";\n shrinkChild.style.left = \"0px\";\n shrinkChild.style.top = \"0px\";\n shrinkChild.style.width = \"200%\";\n shrinkChild.style.height = \"200%\";\n _this.shrink.appendChild(shrinkChild);\n _this.element.appendChild(_this.expand);\n _this.element.appendChild(_this.shrink);\n var size = element.getBoundingClientRect();\n _this.currentWidth = size.width;\n _this.currentHeight = size.height;\n _this.setScroll();\n _this.expand.addEventListener(\"scroll\", function () {\n _this.onScroll();\n });\n _this.shrink.addEventListener(\"scroll\", function () {\n _this.onScroll();\n });\n }\n onScroll() {\n var _this = this;\n var size = _this.element.getBoundingClientRect();\n var newWidth = size.width;\n var newHeight = size.height;\n if (newWidth != _this.currentWidth || newHeight != _this.currentHeight) {\n _this.currentWidth = newWidth;\n _this.currentHeight = newHeight;\n _this.callback();\n }\n this.setScroll();\n }\n setScroll() {\n this.expand.scrollLeft = 10000000;\n this.expand.scrollTop = 10000000;\n this.shrink.scrollLeft = 10000000;\n this.shrink.scrollTop = 10000000;\n }\n destroy() {\n this.expand.remove();\n this.shrink.remove();\n }\n};\n\nMapSVG.nonce = function () {\n return mapsvg_runtime_vars.nonce;\n};\n\n/**\n * Adds # hash at the beginning of HEX color value\n * @param {String} color\n * @returns {String}\n * @private\n */\nMapSVG.fixColorHash = (color) => {\n const hexColorNoHash = new RegExp(/^([0-9a-f]{3}|[0-9a-f]{6})$/i);\n if (color && color.match(hexColorNoHash) !== null) {\n color = \"#\" + color;\n }\n return color;\n};\n\n/**\n * Delays method execution.\n * For example, it can be used in search input fields to prevent sending\n * an ajax request on each key press.\n * @param {Function} method\n * @param {number} delay\n * @param {object} scope\n * @param {array} params\n * @private\n */\nMapSVG.throttle = (method, delay, scope, params) => {\n clearTimeout(method._tId);\n method._tId = setTimeout(function () {\n method.apply(scope, params);\n }, delay);\n};\nMapSVG.geocode = (query, callback) => {\n if (!window.google) {\n console.error(\"MapSVG: can't do Geocoding - Google Maps API is not loaded.\");\n jQuery.growl.error({\n title: \"Error\",\n message: \"Google Maps API files are not loaded\",\n });\n return false;\n }\n // if (!MapSVG.options.google_api_key) {\n // jQuery.growl.error({\n // title: \"Error\",\n // message: \"Google Maps API key is not provided\",\n // });\n // return false;\n // }\n if (!MapSVG.geocoder) {\n MapSVG.geocoder = new google.maps.Geocoder();\n }\n\n MapSVG.throttle(MapSVG.geocoder.geocode, 500, MapSVG.geocoder, [\n query,\n function (results, status) {\n if (status === \"OK\") {\n callback(results);\n } else {\n jQuery.growl.error({\n title: \"Error: \" + status,\n message:\n \"There is some problem with Google API keys. See browser's console for more details\",\n });\n }\n },\n ]);\n};\n\nMapSVG.handleFailedRequest = (response) => {\n var message = \"\";\n\n if (response.status === 403) {\n if (response.responseText.indexOf(\"Wordfence\") !== -1) {\n message +=\n \"The request has been blocked by Wordfence. \" +\n 'Switch Wordfence to \"Learning mode\", and save the map settings again. ' +\n \"If the settings are saved successfully, you can switch Wordfence back to normal mode.\";\n } else {\n message +=\n \"The request has been blocked by your server. \" +\n \"Do you have mod_sec Apache's module enabled? If that's the case you need to change its settings.\";\n }\n } else {\n if (response && response.responseText) {\n try {\n var _response = JSON.parse(response.responseText);\n if (_response && _response.data && _response.data.error) {\n message = _response.data.error;\n }\n } catch (e) {\n null;\n }\n }\n }\n\n $.growl.error({\n title: \"Error: \" + response.status + \" \" + response.statusText,\n message: message,\n duration: 30000,\n });\n};\n\nif (!Object.values) {\n Object.values = function (object) {\n return Object.keys(object).map(function (k) {\n return object[k];\n });\n };\n}\n\nwindow.MapSVG = MapSVG;\n\nexport { MapSVG };\n","const defRegionTemplate =\n \"
\\n\" +\n \"

This is the demo content of the Region %templateType%.

\\n\" +\n '

How to edit it: if you are in mapsvg control panel now, click on the following link to open the template editor for this view: Menu > Templates > Region %templateType%.

\\n' +\n '

More information about templates: mapsvg.com/docs/map-editor/templates

\\n' +\n \"
\\n\" +\n \"
\\n\\n\" +\n \"\\n\" +\n \"
{{#if title}} {{title}} {{else}} {{id}} {{/if}}
\\n\" +\n \"

Status: {{status_text}}

\\n\\n\" +\n \"\\n\" +\n \"{{#each objects}}\\n\\n\" +\n \" \\n\\n\" +\n \"
{{title}}
\\n\" +\n \" \\n\" +\n \"

{{{description}}}

\\n\" +\n \"

{{location.address.formatted}}

\\n\\n\" +\n \" \\n\" +\n \" {{#each images}}\\n\" +\n ' \\n' +\n \" \\n\" +\n ' \\n' +\n \" {{/each}}\\n\\n\" +\n \"{{/each}}\";\n\nconst defDBTemplate =\n \"
\\n\" +\n \"

This is the demo content of the DB Object %templateType%.

\\n\" +\n '

How to edit it: if you are in mapsvg control panel now, click on the following link to open the template editor for this view: Menu > Templates > DB Object %templateType%.

\\n' +\n '

More information about templates: mapsvg.com/docs/map-editor/templates

\\n' +\n \"
\\n\" +\n \"
\\n\\n\" +\n \"\\n\" +\n \"
{{title}}
\\n\" +\n \"\\n\" +\n \"

{{{description}}}

\\n\" +\n \"

{{location.address.formatted}}

\\n\\n\" +\n \"\\n\" +\n \"{{#each images}}\\n\" +\n ' \\n' +\n \" \\n\" +\n ' \\n' +\n \"{{/each}}\\n\\n\" +\n \"\\n\" +\n \"

Regions: \\n\" +\n \" {{#each regions}}\\n\" +\n \" \\n\" +\n \" {{#if title}}\\n\" +\n \" {{title}}\\n\" +\n \" {{else}}\\n\" +\n \" {{id}}\\n\" +\n \" {{/if}}{{#unless @last}}, {{/unless}}\\n\" +\n \" {{/each}}\\n\" +\n \"

\";\n\nconst dirItemItemTemplate =\n \"\\n\" +\n \"\\n\" +\n \"{{title}}\";\n\nconst DefaultOptions = {\n source: \"\",\n markerLastID: 0,\n regionLastID: 0,\n dataLastID: 1,\n disableAll: false,\n width: null,\n height: null,\n lockAspectRatio: false,\n padding: { top: 0, left: 0, right: 0, bottom: 0 },\n maxWidth: null,\n maxHeight: null,\n minWidth: null,\n minHeight: null,\n loadingText: \"Loading map...\",\n //colors : {base: \"#E1F1F1\", background: \"#eeeeee\", hover: \"#548eac\", selected: \"#065A85\", stroke: \"#7eadc0\"},\n colorsIgnore: false,\n colors: {\n baseDefault: \"#000000\",\n background: \"#eeeeee\",\n selected: 40,\n hover: 20,\n directory: \"#fafafa\",\n detailsView: \"\",\n status: {},\n clusters: \"\",\n clustersBorders: \"\",\n clustersText: \"\",\n clustersHover: \"\",\n clustersHoverBorders: \"\",\n clustersHoverText: \"\",\n markers: {\n base: { opacity: 100, saturation: 100 },\n hovered: { opacity: 100, saturation: 100 },\n unhovered: { opacity: 40, saturation: 100 },\n active: { opacity: 100, saturation: 100 },\n inactive: { opacity: 40, saturation: 100 },\n },\n },\n regions: {},\n clustering: { on: false },\n viewBox: [],\n cursor: \"default\",\n manualRegions: false,\n onClick: null,\n mouseOver: null,\n mouseOut: null,\n menuOnClick: null,\n beforeLoad: null,\n afterLoad: null,\n zoom: {\n on: true,\n limit: [0, 22],\n delta: 2,\n buttons: { on: true, location: \"right\" },\n mousewheel: true,\n fingers: true,\n hideSvg: false,\n hideSvgZoomLevel: 7,\n },\n scroll: { on: true, limit: false, background: false, spacebar: false },\n responsive: true,\n tooltips: { on: false, position: \"bottom-right\", template: \"\", maxWidth: \"\", minWidth: 100 },\n popovers: {\n on: false,\n position: \"top\",\n template: \"\",\n centerOn: true,\n width: 300,\n maxWidth: 50,\n maxHeight: 50,\n },\n multiSelect: false,\n regionStatuses: {\n \"1\": { label: \"Enabled\", value: \"1\", color: \"\", disabled: false },\n \"0\": { label: \"Disabled\", value: \"0\", color: \"\", disabled: true },\n },\n events: {\n afterLoad:\n \"function(){\\n\" +\n \" // var mapsvg = this;\\n\" +\n \" // var regions = mapsvg.regions;\\n\" +\n \" // var dbObjects = mapsvg.database.getLoaded();\\n\" +\n \"}\",\n beforeLoad:\n \"function(){\\n\" +\n \" // var mapsvg = this;\\n\" +\n \" // var settings = mapsvg.options;\\n\" +\n \" // console.log(settings);\\n\" +\n \"}\",\n databaseLoaded:\n \"function (){\\n\" +\n \" // var mapsvg = this;\\n\" +\n \" // var dbObjects = mapsvg.database.getLoaded();\\n\" +\n \"}\",\n \"click.region\":\n \"function (e, mapsvg){\\n\" +\n \" // var region = this;\\n\" +\n \" // console.log(region);\\n\" +\n \"}\",\n \"mouseover.region\":\n \"function (e, mapsvg){\\n\" +\n \" // var region = this;\\n\" +\n \" // console.log(region);\\n\" +\n \"}\",\n \"mouseout.region\":\n \"function (e, mapsvg){\\n\" +\n \" // var region = this;\\n\" +\n \" // console.log(region);\\n\" +\n \"}\",\n \"click.marker\":\n \"function (e, mapsvg){\\n\" +\n \" // var marker = this;\\n\" +\n \" // console.log(marker);\\n\" +\n \"}\",\n \"mouseover.marker\":\n \"function (e, mapsvg){\\n\" +\n \" // var marker = this;\\n\" +\n \" // console.log(marker);\\n\" +\n \"}\",\n \"mouseout.marker\":\n \"function (e, mapsvg){\\n\" +\n \" // var marker = this;\\n\" +\n \" // console.log(marker);\\n\" +\n \"}\",\n \"click.directoryItem\":\n \"function (e, regionOrObject, mapsvg){\\n\" + \" // var itemjQueryObject = this;\\n\" + \"}\",\n \"mouseover.directoryItem\":\n \"function (e, regionOrObject, mapsvg){\\n\" + \" // var itemjQueryObject = this;\\n\" + \"}\",\n \"mouseout.directoryItem\":\n \"function (e, regionOrObject, mapsvg){\\n\" + \" // var itemjQueryObject = this;\\n\" + \"}\",\n \"shown.popover\": \"function (mapsvg){\\n\" + \" // var popoverjQueryObject = this;\\n\" + \"}\",\n \"closed.popover\": \"function (mapsvg){\\n\" + \" // var popoverjQueryObject = this;\\n\" + \"}\",\n \"closed.detailsView\":\n \"function (mapsvg){\\n\" + \" // var detailsjQueryObject = this;\\n\" + \"}\",\n \"shown.detailsView\":\n \"function (mapsvg){\\n\" + \" // var detailsjQueryObject = this;\\n\" + \"}\",\n },\n css:\n \"#mapsvg-map-%id% .mapsvg-tooltip {\\n\\n}\\n\" +\n \"#mapsvg-map-%id% .mapsvg-popover {\\n\\n}\\n\" +\n \"#mapsvg-map-%id% .mapsvg-details-container {\\n\\n}\\n\" +\n \"#mapsvg-map-%id% .mapsvg-directory-item {\\n\\n}\\n\" +\n \"#mapsvg-map-%id% .mapsvg-region-label {\\n\" +\n \" /* background-color: rgba(255,255,255,.6); */\\n\" +\n \" font-size: 11px;\\n\" +\n \" padding: 3px 5px;\\n\" +\n \" border-radius: 4px;\\n\" +\n \"}\\n\" +\n \"#mapsvg-map-%id% .mapsvg-marker-label {\\n\" +\n \" padding: 3px 5px;\\n\" +\n \" /*\\n\" +\n \" border-radius: 4px;\\n\" +\n \" background-color: white;\\n\" +\n \" margin-top: -4px;\\n\" +\n \" */\\n}\\n\" +\n \"#mapsvg-map-%id% .mapsvg-filters-wrap {\\n\\n}\\n\" +\n \"\\n\\n\\n\\n\\n\\n\",\n templates: {\n popoverRegion: defRegionTemplate\n .replace(/%templateType%/g, \"Popover\")\n .replace(/%templateTypeSnake%/g, \"popover\"),\n popoverMarker: defDBTemplate\n .replace(/%templateType%/g, \"Popover\")\n .replace(/%templateTypeSnake%/g, \"popover\"),\n tooltipRegion: \"\\n{{id}} - {{title}}\",\n tooltipMarker: \"\\n{{title}}\",\n directoryItem: dirItemItemTemplate,\n directoryCategoryItem:\n '\\n{{label}}\\n{{counter}}\\n',\n detailsView: defDBTemplate\n .replace(/%templateType%/g, \"Details View\")\n .replace(/%templateTypeSnake%/g, \"detailsView\"),\n detailsViewRegion: defRegionTemplate\n .replace(/%templateType%/g, \"Details View\")\n .replace(/%templateTypeSnake%/g, \"detailsView\"),\n labelMarker: \"\\n{{title}}\",\n labelRegion: \"\\n{{title}}\",\n labelLocation: \"You are here!\",\n },\n choropleth: {\n on: false,\n source: \"regions\",\n sourceFieldSelect: {\n on: false,\n variants: [],\n },\n bubbleMode: false,\n bubbleSize: {\n min: 20,\n max: 40,\n },\n labels: { low: \"low\", high: \"high\" },\n colors: { lowRGB: null, highRGB: null, low: \"#550000\", high: \"#ee0000\", noData: \"#333333\" },\n min: 0,\n max: 0,\n coloring: {\n mode: \"gradient\",\n noData: {\n color: \"#999999\",\n description: \"No data\",\n },\n gradient: {\n colors: {\n lowRGB: null,\n highRGB: null,\n diffRGB: null,\n low: \"#550000\",\n high: \"#ee0000\",\n },\n labels: {\n low: \"low\",\n high: \"high\",\n },\n values: {\n min: null,\n max: null,\n maxAdjusted: null,\n },\n },\n palette: {\n outOfRange: {\n color: \"#ececec\",\n description: \"Out of range\",\n },\n colors: [\n {\n color: \"#550000\",\n valueFrom: 0,\n valueTo: 50,\n description: \"\",\n },\n ],\n },\n legend: {\n on: true,\n layout: \"vertical\",\n container: \"bottom-left\",\n title: \"Choropleth map\",\n text: \"\",\n description: \"\",\n width: \"20%\",\n height: \"20%\",\n },\n },\n },\n filters: {\n on: true,\n source: \"database\",\n location: \"header\",\n modalLocation: \"map\",\n width: \"100%\",\n hide: false,\n showButtonText: \"Filters\",\n clearButtonText: \"Clear all\",\n clearButton: false,\n searchButton: false,\n searchButtonText: \"Search\",\n padding: \"\",\n },\n menu: {\n on: false,\n hideOnMobile: true,\n location: \"leftSidebar\",\n locationMobile: \"leftSidebar\",\n search: false,\n containerId: \"\",\n searchPlaceholder: \"Search...\",\n searchFallback: false,\n source: \"database\",\n showFirst: \"map\",\n showMapOnClick: true,\n minHeight: \"400\",\n sortBy: \"id\",\n sortDirection: \"desc\",\n categories: {\n on: false,\n groupBy: \"\",\n hideEmpty: true,\n collapse: true,\n collapseOther: true,\n },\n clickActions: {\n region: \"default\",\n marker: \"default\",\n directoryItem: {\n triggerClick: true,\n showPopover: false,\n showDetails: true,\n },\n },\n detailsViewLocation: \"overDirectory\",\n noResultsText: \"No results found\",\n filterout: { field: \"\", cond: \"=\", val: \"\" },\n },\n database: {\n pagination: {\n on: true,\n perpage: 30,\n next: \"Next\",\n prev: \"Prev.\",\n showIn: \"both\",\n },\n loadOnStart: true,\n table: \"\",\n },\n actions: {\n map: {\n afterLoad: {\n selectRegion: false,\n },\n },\n region: {\n mouseover: {\n showTooltip: false,\n },\n click: {\n addIdToUrl: false,\n showDetails: true,\n showDetailsFor: \"region\",\n filterDirectory: false,\n loadObjects: false,\n showPopover: false,\n showPopoverFor: \"region\",\n goToLink: false,\n linkField: \"Region.link\",\n },\n touch: {\n showPopover: false,\n },\n },\n marker: {\n mouseover: {\n showTooltip: false,\n },\n click: {\n showDetails: true,\n showPopover: false,\n goToLink: false,\n linkField: \"Object.link\",\n },\n touch: {\n showPopover: false,\n },\n },\n directoryItem: {\n click: {\n showDetails: true,\n showPopover: false,\n goToLink: false,\n selectRegion: true,\n fireRegionOnClick: true,\n linkField: \"Object.link\",\n },\n hover: {\n centerOnMarker: false,\n },\n },\n },\n detailsView: {\n location: \"map\",\n containerId: \"\",\n width: \"100%\",\n mobileFullscreen: true,\n },\n mobileView: {\n labelMap: \"Map\",\n labelList: \"List\",\n labelClose: \"Close\",\n },\n googleMaps: {\n on: false,\n apiKey: \"\",\n loaded: false,\n center: \"auto\", // or {lat: 12, lon: 13}\n type: \"roadmap\",\n minZoom: 1,\n style: \"default\",\n styleJSON: [],\n language: \"en\",\n },\n groups: [],\n floors: [],\n layersControl: {\n on: false,\n position: \"top-left\",\n label: \"Show on map\",\n expanded: true,\n maxHeight: \"100%\",\n },\n floorsControl: {\n on: false,\n position: \"top-left\",\n label: \"Floors\",\n expanded: false,\n maxHeight: \"100%\",\n },\n containers: {\n leftSidebar: { on: false, width: \"250px\" },\n rightSidebar: { on: false, width: \"250px\" },\n header: { on: true, height: \"auto\" },\n footer: { on: false, height: \"auto\" },\n },\n labelsMarkers: { on: false },\n labelsRegions: { on: false },\n svgFileVersion: 1,\n fitMarkers: false,\n fitMarkersOnStart: false,\n fitSingleMarkerZoom: 20,\n controls: {\n location: \"right\",\n zoom: true,\n zoomReset: false,\n userLocation: false,\n previousMap: false,\n },\n previousMapsIds: [],\n};\n\nexport { DefaultOptions };\n","// TinyColor v1.4.1\n// https://github.com/bgrins/TinyColor\n// Brian Grinstead, MIT License\n\n//(function(Math) {\n\nvar trimLeft = /^\\s+/,\n trimRight = /\\s+$/,\n tinyCounter = 0,\n mathRound = Math.round,\n mathMin = Math.min,\n mathMax = Math.max,\n mathRandom = Math.random;\n\nfunction tinycolor(color, opts) {\n color = color ? color : \"\";\n opts = opts || {};\n\n // If input is already a tinycolor, return itself\n if (color instanceof tinycolor) {\n return color;\n }\n // If we are called as a function, call using new instead\n if (!(this instanceof tinycolor)) {\n return new tinycolor(color, opts);\n }\n\n var rgb = inputToRGB(color);\n (this._originalInput = color),\n (this._r = rgb.r),\n (this._g = rgb.g),\n (this._b = rgb.b),\n (this._a = rgb.a),\n (this._roundA = mathRound(100 * this._a) / 100),\n (this._format = opts.format || rgb.format);\n this._gradientType = opts.gradientType;\n\n // Don't let the range of [0,255] come back in [0,1].\n // Potentially lose a little bit of precision here, but will fix issues where\n // .5 gets interpreted as half of the total, instead of half of 1\n // If it was supposed to be 128, this was already taken care of by `inputToRgb`\n if (this._r < 1) {\n this._r = mathRound(this._r);\n }\n if (this._g < 1) {\n this._g = mathRound(this._g);\n }\n if (this._b < 1) {\n this._b = mathRound(this._b);\n }\n\n this._ok = rgb.ok;\n this._tc_id = tinyCounter++;\n}\n\ntinycolor.prototype = {\n isDark: function () {\n return this.getBrightness() < 128;\n },\n isLight: function () {\n return !this.isDark();\n },\n isValid: function () {\n return this._ok;\n },\n getOriginalInput: function () {\n return this._originalInput;\n },\n getFormat: function () {\n return this._format;\n },\n getAlpha: function () {\n return this._a;\n },\n getBrightness: function () {\n //http://www.w3.org/TR/AERT#color-contrast\n var rgb = this.toRgb();\n return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n },\n getLuminance: function () {\n //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n var rgb = this.toRgb();\n var RsRGB, GsRGB, BsRGB, R, G, B;\n RsRGB = rgb.r / 255;\n GsRGB = rgb.g / 255;\n BsRGB = rgb.b / 255;\n\n if (RsRGB <= 0.03928) {\n R = RsRGB / 12.92;\n } else {\n R = Math.pow((RsRGB + 0.055) / 1.055, 2.4);\n }\n if (GsRGB <= 0.03928) {\n G = GsRGB / 12.92;\n } else {\n G = Math.pow((GsRGB + 0.055) / 1.055, 2.4);\n }\n if (BsRGB <= 0.03928) {\n B = BsRGB / 12.92;\n } else {\n B = Math.pow((BsRGB + 0.055) / 1.055, 2.4);\n }\n return 0.2126 * R + 0.7152 * G + 0.0722 * B;\n },\n setAlpha: function (value) {\n this._a = boundAlpha(value);\n this._roundA = mathRound(100 * this._a) / 100;\n return this;\n },\n toHsv: function () {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a };\n },\n toHsvString: function () {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n var h = mathRound(hsv.h * 360),\n s = mathRound(hsv.s * 100),\n v = mathRound(hsv.v * 100);\n return this._a == 1\n ? \"hsv(\" + h + \", \" + s + \"%, \" + v + \"%)\"\n : \"hsva(\" + h + \", \" + s + \"%, \" + v + \"%, \" + this._roundA + \")\";\n },\n toHsl: function () {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a };\n },\n toHslString: function () {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n var h = mathRound(hsl.h * 360),\n s = mathRound(hsl.s * 100),\n l = mathRound(hsl.l * 100);\n return this._a == 1\n ? \"hsl(\" + h + \", \" + s + \"%, \" + l + \"%)\"\n : \"hsla(\" + h + \", \" + s + \"%, \" + l + \"%, \" + this._roundA + \")\";\n },\n toHex: function (allow3Char) {\n return rgbToHex(this._r, this._g, this._b, allow3Char);\n },\n toHexString: function (allow3Char) {\n return \"#\" + this.toHex(allow3Char);\n },\n toHex8: function (allow4Char) {\n return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char);\n },\n toHex8String: function (allow4Char) {\n return \"#\" + this.toHex8(allow4Char);\n },\n toRgb: function () {\n return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a };\n },\n toRgbString: function () {\n return this._a == 1\n ? \"rgb(\" +\n mathRound(this._r) +\n \", \" +\n mathRound(this._g) +\n \", \" +\n mathRound(this._b) +\n \")\"\n : \"rgba(\" +\n mathRound(this._r) +\n \", \" +\n mathRound(this._g) +\n \", \" +\n mathRound(this._b) +\n \", \" +\n this._roundA +\n \")\";\n },\n toPercentageRgb: function () {\n return {\n r: mathRound(bound01(this._r, 255) * 100) + \"%\",\n g: mathRound(bound01(this._g, 255) * 100) + \"%\",\n b: mathRound(bound01(this._b, 255) * 100) + \"%\",\n a: this._a,\n };\n },\n toPercentageRgbString: function () {\n return this._a == 1\n ? \"rgb(\" +\n mathRound(bound01(this._r, 255) * 100) +\n \"%, \" +\n mathRound(bound01(this._g, 255) * 100) +\n \"%, \" +\n mathRound(bound01(this._b, 255) * 100) +\n \"%)\"\n : \"rgba(\" +\n mathRound(bound01(this._r, 255) * 100) +\n \"%, \" +\n mathRound(bound01(this._g, 255) * 100) +\n \"%, \" +\n mathRound(bound01(this._b, 255) * 100) +\n \"%, \" +\n this._roundA +\n \")\";\n },\n toName: function () {\n if (this._a === 0) {\n return \"transparent\";\n }\n\n if (this._a < 1) {\n return false;\n }\n\n return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;\n },\n toFilter: function (secondColor) {\n var hex8String = \"#\" + rgbaToArgbHex(this._r, this._g, this._b, this._a);\n var secondHex8String = hex8String;\n var gradientType = this._gradientType ? \"GradientType = 1, \" : \"\";\n\n if (secondColor) {\n var s = tinycolor(secondColor);\n secondHex8String = \"#\" + rgbaToArgbHex(s._r, s._g, s._b, s._a);\n }\n\n return (\n \"progid:DXImageTransform.Microsoft.gradient(\" +\n gradientType +\n \"startColorstr=\" +\n hex8String +\n \",endColorstr=\" +\n secondHex8String +\n \")\"\n );\n },\n toString: function (format) {\n var formatSet = !!format;\n format = format || this._format;\n\n var formattedString = false;\n var hasAlpha = this._a < 1 && this._a >= 0;\n var needsAlphaFormat =\n !formatSet &&\n hasAlpha &&\n (format === \"hex\" ||\n format === \"hex6\" ||\n format === \"hex3\" ||\n format === \"hex4\" ||\n format === \"hex8\" ||\n format === \"name\");\n\n if (needsAlphaFormat) {\n // Special case for \"transparent\", all other non-alpha formats\n // will return rgba when there is transparency.\n if (format === \"name\" && this._a === 0) {\n return this.toName();\n }\n return this.toRgbString();\n }\n if (format === \"rgb\") {\n formattedString = this.toRgbString();\n }\n if (format === \"prgb\") {\n formattedString = this.toPercentageRgbString();\n }\n if (format === \"hex\" || format === \"hex6\") {\n formattedString = this.toHexString();\n }\n if (format === \"hex3\") {\n formattedString = this.toHexString(true);\n }\n if (format === \"hex4\") {\n formattedString = this.toHex8String(true);\n }\n if (format === \"hex8\") {\n formattedString = this.toHex8String();\n }\n if (format === \"name\") {\n formattedString = this.toName();\n }\n if (format === \"hsl\") {\n formattedString = this.toHslString();\n }\n if (format === \"hsv\") {\n formattedString = this.toHsvString();\n }\n\n return formattedString || this.toHexString();\n },\n clone: function () {\n return tinycolor(this.toString());\n },\n\n _applyModification: function (fn, args) {\n var color = fn.apply(null, [this].concat([].slice.call(args)));\n this._r = color._r;\n this._g = color._g;\n this._b = color._b;\n this.setAlpha(color._a);\n return this;\n },\n lighten: function () {\n return this._applyModification(lighten, arguments);\n },\n brighten: function () {\n return this._applyModification(brighten, arguments);\n },\n darken: function () {\n return this._applyModification(darken, arguments);\n },\n desaturate: function () {\n return this._applyModification(desaturate, arguments);\n },\n saturate: function () {\n return this._applyModification(saturate, arguments);\n },\n greyscale: function () {\n return this._applyModification(greyscale, arguments);\n },\n spin: function () {\n return this._applyModification(spin, arguments);\n },\n\n _applyCombination: function (fn, args) {\n return fn.apply(null, [this].concat([].slice.call(args)));\n },\n analogous: function () {\n return this._applyCombination(analogous, arguments);\n },\n complement: function () {\n return this._applyCombination(complement, arguments);\n },\n monochromatic: function () {\n return this._applyCombination(monochromatic, arguments);\n },\n splitcomplement: function () {\n return this._applyCombination(splitcomplement, arguments);\n },\n triad: function () {\n return this._applyCombination(triad, arguments);\n },\n tetrad: function () {\n return this._applyCombination(tetrad, arguments);\n },\n};\n\n// If input is an object, force 1 into \"1.0\" to handle ratios properly\n// String input requires \"1.0\" as input, so 1 will be treated as 1\ntinycolor.fromRatio = function (color, opts) {\n if (typeof color == \"object\") {\n var newColor = {};\n for (var i in color) {\n if (color.hasOwnProperty(i)) {\n if (i === \"a\") {\n newColor[i] = color[i];\n } else {\n newColor[i] = convertToPercentage(color[i]);\n }\n }\n }\n color = newColor;\n }\n\n return tinycolor(color, opts);\n};\n\n// Given a string or object, convert that input to RGB\n// Possible string inputs:\n//\n// \"red\"\n// \"#f00\" or \"f00\"\n// \"#ff0000\" or \"ff0000\"\n// \"#ff000000\" or \"ff000000\"\n// \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n// \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n// \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n// \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n// \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n// \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n// \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n//\nfunction inputToRGB(color) {\n var rgb = { r: 0, g: 0, b: 0 };\n var a = 1;\n var s = null;\n var v = null;\n var l = null;\n var ok = false;\n var format = false;\n\n if (typeof color == \"string\") {\n color = stringInputToObject(color);\n }\n\n if (typeof color == \"object\") {\n if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {\n rgb = rgbToRgb(color.r, color.g, color.b);\n ok = true;\n format = String(color.r).substr(-1) === \"%\" ? \"prgb\" : \"rgb\";\n } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {\n s = convertToPercentage(color.s);\n v = convertToPercentage(color.v);\n rgb = hsvToRgb(color.h, s, v);\n ok = true;\n format = \"hsv\";\n } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {\n s = convertToPercentage(color.s);\n l = convertToPercentage(color.l);\n rgb = hslToRgb(color.h, s, l);\n ok = true;\n format = \"hsl\";\n }\n\n if (color.hasOwnProperty(\"a\")) {\n a = color.a;\n }\n }\n\n a = boundAlpha(a);\n\n return {\n ok: ok,\n format: color.format || format,\n r: mathMin(255, mathMax(rgb.r, 0)),\n g: mathMin(255, mathMax(rgb.g, 0)),\n b: mathMin(255, mathMax(rgb.b, 0)),\n a: a,\n };\n}\n\n// Conversion Functions\n// --------------------\n\n// `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n// \n\n// `rgbToRgb`\n// Handle bounds / percentage checking to conform to CSS color spec\n// \n// *Assumes:* r, g, b in [0, 255] or [0, 1]\n// *Returns:* { r, g, b } in [0, 255]\nfunction rgbToRgb(r, g, b) {\n return {\n r: bound01(r, 255) * 255,\n g: bound01(g, 255) * 255,\n b: bound01(b, 255) * 255,\n };\n}\n\n// `rgbToHsl`\n// Converts an RGB color value to HSL.\n// *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n// *Returns:* { h, s, l } in [0,1]\nfunction rgbToHsl(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n\n var max = mathMax(r, g, b),\n min = mathMin(r, g, b);\n var h,\n s,\n l = (max + min) / 2;\n\n if (max == min) {\n h = s = 0; // achromatic\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return { h: h, s: s, l: l };\n}\n\n// `hslToRgb`\n// Converts an HSL color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\nfunction hslToRgb(h, s, l) {\n var r, g, b;\n\n h = bound01(h, 360);\n s = bound01(s, 100);\n l = bound01(l, 100);\n\n function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n\n// `rgbToHsv`\n// Converts an RGB color value to HSV\n// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n// *Returns:* { h, s, v } in [0,1]\nfunction rgbToHsv(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n\n var max = mathMax(r, g, b),\n min = mathMin(r, g, b);\n var h,\n s,\n v = max;\n\n var d = max - min;\n s = max === 0 ? 0 : d / max;\n\n if (max == min) {\n h = 0; // achromatic\n } else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return { h: h, s: s, v: v };\n}\n\n// `hsvToRgb`\n// Converts an HSV color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\nfunction hsvToRgb(h, s, v) {\n h = bound01(h, 360) * 6;\n s = bound01(s, 100);\n v = bound01(v, 100);\n\n var i = Math.floor(h),\n f = h - i,\n p = v * (1 - s),\n q = v * (1 - f * s),\n t = v * (1 - (1 - f) * s),\n mod = i % 6,\n r = [v, q, p, p, t, v][mod],\n g = [t, v, v, q, p, p][mod],\n b = [p, p, t, v, v, q][mod];\n\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n\n// `rgbToHex`\n// Converts an RGB color to hex\n// Assumes r, g, and b are contained in the set [0, 255]\n// Returns a 3 or 6 character hex\nfunction rgbToHex(r, g, b, allow3Char) {\n var hex = [\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16)),\n ];\n\n // Return a 3 character hex if possible\n if (\n allow3Char &&\n hex[0].charAt(0) == hex[0].charAt(1) &&\n hex[1].charAt(0) == hex[1].charAt(1) &&\n hex[2].charAt(0) == hex[2].charAt(1)\n ) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n }\n\n return hex.join(\"\");\n}\n\n// `rgbaToHex`\n// Converts an RGBA color plus alpha transparency to hex\n// Assumes r, g, b are contained in the set [0, 255] and\n// a in [0, 1]. Returns a 4 or 8 character rgba hex\nfunction rgbaToHex(r, g, b, a, allow4Char) {\n var hex = [\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16)),\n pad2(convertDecimalToHex(a)),\n ];\n\n // Return a 4 character hex if possible\n if (\n allow4Char &&\n hex[0].charAt(0) == hex[0].charAt(1) &&\n hex[1].charAt(0) == hex[1].charAt(1) &&\n hex[2].charAt(0) == hex[2].charAt(1) &&\n hex[3].charAt(0) == hex[3].charAt(1)\n ) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);\n }\n\n return hex.join(\"\");\n}\n\n// `rgbaToArgbHex`\n// Converts an RGBA color to an ARGB Hex8 string\n// Rarely used, but required for \"toFilter()\"\nfunction rgbaToArgbHex(r, g, b, a) {\n var hex = [\n pad2(convertDecimalToHex(a)),\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16)),\n ];\n\n return hex.join(\"\");\n}\n\n// `equals`\n// Can be called with any tinycolor input\ntinycolor.equals = function (color1, color2) {\n if (!color1 || !color2) {\n return false;\n }\n return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();\n};\n\ntinycolor.random = function () {\n return tinycolor.fromRatio({\n r: mathRandom(),\n g: mathRandom(),\n b: mathRandom(),\n });\n};\n\n// Modification Functions\n// ----------------------\n// Thanks to less.js for some of the basics here\n// \n\nfunction desaturate(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.s -= amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n}\n\nfunction saturate(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.s += amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n}\n\nfunction greyscale(color) {\n return tinycolor(color).desaturate(100);\n}\n\nfunction lighten(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.l += amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n}\n\nfunction brighten(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var rgb = tinycolor(color).toRgb();\n rgb.r = mathMax(0, mathMin(255, rgb.r - mathRound(255 * -(amount / 100))));\n rgb.g = mathMax(0, mathMin(255, rgb.g - mathRound(255 * -(amount / 100))));\n rgb.b = mathMax(0, mathMin(255, rgb.b - mathRound(255 * -(amount / 100))));\n return tinycolor(rgb);\n}\n\nfunction darken(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.l -= amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n}\n\n// Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\n// Values outside of this range will be wrapped into this range.\nfunction spin(color, amount) {\n var hsl = tinycolor(color).toHsl();\n var hue = (hsl.h + amount) % 360;\n hsl.h = hue < 0 ? 360 + hue : hue;\n return tinycolor(hsl);\n}\n\n// Combination Functions\n// ---------------------\n// Thanks to jQuery xColor for some of the ideas behind these\n// \n\nfunction complement(color) {\n var hsl = tinycolor(color).toHsl();\n hsl.h = (hsl.h + 180) % 360;\n return tinycolor(hsl);\n}\n\nfunction triad(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l }),\n ];\n}\n\nfunction tetrad(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l }),\n ];\n}\n\nfunction splitcomplement(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l }),\n ];\n}\n\nfunction analogous(color, results, slices) {\n results = results || 6;\n slices = slices || 30;\n\n var hsl = tinycolor(color).toHsl();\n var part = 360 / slices;\n var ret = [tinycolor(color)];\n\n for (hsl.h = (hsl.h - ((part * results) >> 1) + 720) % 360; --results; ) {\n hsl.h = (hsl.h + part) % 360;\n ret.push(tinycolor(hsl));\n }\n return ret;\n}\n\nfunction monochromatic(color, results) {\n results = results || 6;\n var hsv = tinycolor(color).toHsv();\n var h = hsv.h,\n s = hsv.s,\n v = hsv.v;\n var ret = [];\n var modification = 1 / results;\n\n while (results--) {\n ret.push(tinycolor({ h: h, s: s, v: v }));\n v = (v + modification) % 1;\n }\n\n return ret;\n}\n\n// Utility Functions\n// ---------------------\n\ntinycolor.mix = function (color1, color2, amount) {\n amount = amount === 0 ? 0 : amount || 50;\n\n var rgb1 = tinycolor(color1).toRgb();\n var rgb2 = tinycolor(color2).toRgb();\n\n var p = amount / 100;\n\n var rgba = {\n r: (rgb2.r - rgb1.r) * p + rgb1.r,\n g: (rgb2.g - rgb1.g) * p + rgb1.g,\n b: (rgb2.b - rgb1.b) * p + rgb1.b,\n a: (rgb2.a - rgb1.a) * p + rgb1.a,\n };\n\n return tinycolor(rgba);\n};\n\n// Readability Functions\n// ---------------------\n// false\n// tinycolor.isReadable(\"#000\", \"#111\",{level:\"AA\",size:\"large\"}) => false\ntinycolor.isReadable = function (color1, color2, wcag2) {\n var readability = tinycolor.readability(color1, color2);\n var wcag2Parms, out;\n\n out = false;\n\n wcag2Parms = validateWCAG2Parms(wcag2);\n switch (wcag2Parms.level + wcag2Parms.size) {\n case \"AAsmall\":\n case \"AAAlarge\":\n out = readability >= 4.5;\n break;\n case \"AAlarge\":\n out = readability >= 3;\n break;\n case \"AAAsmall\":\n out = readability >= 7;\n break;\n }\n return out;\n};\n\n// `mostReadable`\n// Given a base color and a list of possible foreground or background\n// colors for that base, returns the most readable color.\n// Optionally returns Black or White if the most readable color is unreadable.\n// *Example*\n// tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:false}).toHexString(); // \"#112255\"\n// tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:true}).toHexString(); // \"#ffffff\"\n// tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"large\"}).toHexString(); // \"#faf3f3\"\n// tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"small\"}).toHexString(); // \"#ffffff\"\ntinycolor.mostReadable = function (baseColor, colorList, args) {\n var bestColor = null;\n var bestScore = 0;\n var readability;\n var includeFallbackColors, level, size;\n args = args || {};\n includeFallbackColors = args.includeFallbackColors;\n level = args.level;\n size = args.size;\n\n for (var i = 0; i < colorList.length; i++) {\n readability = tinycolor.readability(baseColor, colorList[i]);\n if (readability > bestScore) {\n bestScore = readability;\n bestColor = tinycolor(colorList[i]);\n }\n }\n\n if (\n tinycolor.isReadable(baseColor, bestColor, { level: level, size: size }) ||\n !includeFallbackColors\n ) {\n return bestColor;\n } else {\n args.includeFallbackColors = false;\n return tinycolor.mostReadable(baseColor, [\"#fff\", \"#000\"], args);\n }\n};\n\n// Big List of Colors\n// ------------------\n// \nvar names = (tinycolor.names = {\n aliceblue: \"f0f8ff\",\n antiquewhite: \"faebd7\",\n aqua: \"0ff\",\n aquamarine: \"7fffd4\",\n azure: \"f0ffff\",\n beige: \"f5f5dc\",\n bisque: \"ffe4c4\",\n black: \"000\",\n blanchedalmond: \"ffebcd\",\n blue: \"00f\",\n blueviolet: \"8a2be2\",\n brown: \"a52a2a\",\n burlywood: \"deb887\",\n burntsienna: \"ea7e5d\",\n cadetblue: \"5f9ea0\",\n chartreuse: \"7fff00\",\n chocolate: \"d2691e\",\n coral: \"ff7f50\",\n cornflowerblue: \"6495ed\",\n cornsilk: \"fff8dc\",\n crimson: \"dc143c\",\n cyan: \"0ff\",\n darkblue: \"00008b\",\n darkcyan: \"008b8b\",\n darkgoldenrod: \"b8860b\",\n darkgray: \"a9a9a9\",\n darkgreen: \"006400\",\n darkgrey: \"a9a9a9\",\n darkkhaki: \"bdb76b\",\n darkmagenta: \"8b008b\",\n darkolivegreen: \"556b2f\",\n darkorange: \"ff8c00\",\n darkorchid: \"9932cc\",\n darkred: \"8b0000\",\n darksalmon: \"e9967a\",\n darkseagreen: \"8fbc8f\",\n darkslateblue: \"483d8b\",\n darkslategray: \"2f4f4f\",\n darkslategrey: \"2f4f4f\",\n darkturquoise: \"00ced1\",\n darkviolet: \"9400d3\",\n deeppink: \"ff1493\",\n deepskyblue: \"00bfff\",\n dimgray: \"696969\",\n dimgrey: \"696969\",\n dodgerblue: \"1e90ff\",\n firebrick: \"b22222\",\n floralwhite: \"fffaf0\",\n forestgreen: \"228b22\",\n fuchsia: \"f0f\",\n gainsboro: \"dcdcdc\",\n ghostwhite: \"f8f8ff\",\n gold: \"ffd700\",\n goldenrod: \"daa520\",\n gray: \"808080\",\n green: \"008000\",\n greenyellow: \"adff2f\",\n grey: \"808080\",\n honeydew: \"f0fff0\",\n hotpink: \"ff69b4\",\n indianred: \"cd5c5c\",\n indigo: \"4b0082\",\n ivory: \"fffff0\",\n khaki: \"f0e68c\",\n lavender: \"e6e6fa\",\n lavenderblush: \"fff0f5\",\n lawngreen: \"7cfc00\",\n lemonchiffon: \"fffacd\",\n lightblue: \"add8e6\",\n lightcoral: \"f08080\",\n lightcyan: \"e0ffff\",\n lightgoldenrodyellow: \"fafad2\",\n lightgray: \"d3d3d3\",\n lightgreen: \"90ee90\",\n lightgrey: \"d3d3d3\",\n lightpink: \"ffb6c1\",\n lightsalmon: \"ffa07a\",\n lightseagreen: \"20b2aa\",\n lightskyblue: \"87cefa\",\n lightslategray: \"789\",\n lightslategrey: \"789\",\n lightsteelblue: \"b0c4de\",\n lightyellow: \"ffffe0\",\n lime: \"0f0\",\n limegreen: \"32cd32\",\n linen: \"faf0e6\",\n magenta: \"f0f\",\n maroon: \"800000\",\n mediumaquamarine: \"66cdaa\",\n mediumblue: \"0000cd\",\n mediumorchid: \"ba55d3\",\n mediumpurple: \"9370db\",\n mediumseagreen: \"3cb371\",\n mediumslateblue: \"7b68ee\",\n mediumspringgreen: \"00fa9a\",\n mediumturquoise: \"48d1cc\",\n mediumvioletred: \"c71585\",\n midnightblue: \"191970\",\n mintcream: \"f5fffa\",\n mistyrose: \"ffe4e1\",\n moccasin: \"ffe4b5\",\n navajowhite: \"ffdead\",\n navy: \"000080\",\n oldlace: \"fdf5e6\",\n olive: \"808000\",\n olivedrab: \"6b8e23\",\n orange: \"ffa500\",\n orangered: \"ff4500\",\n orchid: \"da70d6\",\n palegoldenrod: \"eee8aa\",\n palegreen: \"98fb98\",\n paleturquoise: \"afeeee\",\n palevioletred: \"db7093\",\n papayawhip: \"ffefd5\",\n peachpuff: \"ffdab9\",\n peru: \"cd853f\",\n pink: \"ffc0cb\",\n plum: \"dda0dd\",\n powderblue: \"b0e0e6\",\n purple: \"800080\",\n rebeccapurple: \"663399\",\n red: \"f00\",\n rosybrown: \"bc8f8f\",\n royalblue: \"4169e1\",\n saddlebrown: \"8b4513\",\n salmon: \"fa8072\",\n sandybrown: \"f4a460\",\n seagreen: \"2e8b57\",\n seashell: \"fff5ee\",\n sienna: \"a0522d\",\n silver: \"c0c0c0\",\n skyblue: \"87ceeb\",\n slateblue: \"6a5acd\",\n slategray: \"708090\",\n slategrey: \"708090\",\n snow: \"fffafa\",\n springgreen: \"00ff7f\",\n steelblue: \"4682b4\",\n tan: \"d2b48c\",\n teal: \"008080\",\n thistle: \"d8bfd8\",\n tomato: \"ff6347\",\n turquoise: \"40e0d0\",\n violet: \"ee82ee\",\n wheat: \"f5deb3\",\n white: \"fff\",\n whitesmoke: \"f5f5f5\",\n yellow: \"ff0\",\n yellowgreen: \"9acd32\",\n});\n\n// Make it easy to access colors via `hexNames[hex]`\nvar hexNames = (tinycolor.hexNames = flip(names));\n\n// Utilities\n// ---------\n\n// `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`\nfunction flip(o) {\n var flipped = {};\n for (var i in o) {\n if (o.hasOwnProperty(i)) {\n flipped[o[i]] = i;\n }\n }\n return flipped;\n}\n\n// Return a valid alpha value [0,1] with all invalid values being set to 1\nfunction boundAlpha(a) {\n a = parseFloat(a);\n\n if (isNaN(a) || a < 0 || a > 1) {\n a = 1;\n }\n\n return a;\n}\n\n// Take input from [0, n] and return it as [0, 1]\nfunction bound01(n, max) {\n if (isOnePointZero(n)) {\n n = \"100%\";\n }\n\n var processPercent = isPercentage(n);\n n = mathMin(max, mathMax(0, parseFloat(n)));\n\n // Automatically convert percentage into number\n if (processPercent) {\n n = parseInt(n * max, 10) / 100;\n }\n\n // Handle floating point rounding errors\n if (Math.abs(n - max) < 0.000001) {\n return 1;\n }\n\n // Convert into [0, 1] range if it isn't already\n return (n % max) / parseFloat(max);\n}\n\n// Force a number between 0 and 1\nfunction clamp01(val) {\n return mathMin(1, mathMax(0, val));\n}\n\n// Parse a base-16 hex value into a base-10 integer\nfunction parseIntFromHex(val) {\n return parseInt(val, 16);\n}\n\n// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n// \nfunction isOnePointZero(n) {\n return typeof n == \"string\" && n.indexOf(\".\") != -1 && parseFloat(n) === 1;\n}\n\n// Check to see if string passed in is a percentage\nfunction isPercentage(n) {\n return typeof n === \"string\" && n.indexOf(\"%\") != -1;\n}\n\n// Force a hex value to have 2 characters\nfunction pad2(c) {\n return c.length == 1 ? \"0\" + c : \"\" + c;\n}\n\n// Replace a decimal with it's percentage value\nfunction convertToPercentage(n) {\n if (n <= 1) {\n n = n * 100 + \"%\";\n }\n\n return n;\n}\n\n// Converts a decimal to a hex value\nfunction convertDecimalToHex(d) {\n return Math.round(parseFloat(d) * 255).toString(16);\n}\n// Converts a hex value to a decimal\nfunction convertHexToDecimal(h) {\n return parseIntFromHex(h) / 255;\n}\n\nvar matchers = (function () {\n // \n var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n // \n var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\n var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n\n // Actual matching.\n // Parentheses and commas are optional, but not required.\n // Whitespace can take the place of commas or opening paren\n var PERMISSIVE_MATCH3 =\n \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n var PERMISSIVE_MATCH4 =\n \"[\\\\s|\\\\(]+(\" +\n CSS_UNIT +\n \")[,|\\\\s]+(\" +\n CSS_UNIT +\n \")[,|\\\\s]+(\" +\n CSS_UNIT +\n \")[,|\\\\s]+(\" +\n CSS_UNIT +\n \")\\\\s*\\\\)?\";\n\n return {\n CSS_UNIT: new RegExp(CSS_UNIT),\n rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n };\n})();\n\n// `isValidCSSUnit`\n// Take in a single string / number and check to see if it looks like a CSS unit\n// (see `matchers` above for definition).\nfunction isValidCSSUnit(color) {\n return !!matchers.CSS_UNIT.exec(color);\n}\n\n// `stringInputToObject`\n// Permissive string parsing. Take in a number of formats, and output an object\n// based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\nfunction stringInputToObject(color) {\n color = color.replace(trimLeft, \"\").replace(trimRight, \"\").toLowerCase();\n var named = false;\n if (names[color]) {\n color = names[color];\n named = true;\n } else if (color == \"transparent\") {\n return { r: 0, g: 0, b: 0, a: 0, format: \"name\" };\n }\n\n // Try to match string input using regular expressions.\n // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n // Just return an object and let the conversion functions handle that.\n // This way the result will be the same whether the tinycolor is initialized with string or object.\n var match;\n if ((match = matchers.rgb.exec(color))) {\n return { r: match[1], g: match[2], b: match[3] };\n }\n if ((match = matchers.rgba.exec(color))) {\n return { r: match[1], g: match[2], b: match[3], a: match[4] };\n }\n if ((match = matchers.hsl.exec(color))) {\n return { h: match[1], s: match[2], l: match[3] };\n }\n if ((match = matchers.hsla.exec(color))) {\n return { h: match[1], s: match[2], l: match[3], a: match[4] };\n }\n if ((match = matchers.hsv.exec(color))) {\n return { h: match[1], s: match[2], v: match[3] };\n }\n if ((match = matchers.hsva.exec(color))) {\n return { h: match[1], s: match[2], v: match[3], a: match[4] };\n }\n if ((match = matchers.hex8.exec(color))) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n a: convertHexToDecimal(match[4]),\n format: named ? \"name\" : \"hex8\",\n };\n }\n if ((match = matchers.hex6.exec(color))) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n format: named ? \"name\" : \"hex\",\n };\n }\n if ((match = matchers.hex4.exec(color))) {\n return {\n r: parseIntFromHex(match[1] + \"\" + match[1]),\n g: parseIntFromHex(match[2] + \"\" + match[2]),\n b: parseIntFromHex(match[3] + \"\" + match[3]),\n a: convertHexToDecimal(match[4] + \"\" + match[4]),\n format: named ? \"name\" : \"hex8\",\n };\n }\n if ((match = matchers.hex3.exec(color))) {\n return {\n r: parseIntFromHex(match[1] + \"\" + match[1]),\n g: parseIntFromHex(match[2] + \"\" + match[2]),\n b: parseIntFromHex(match[3] + \"\" + match[3]),\n format: named ? \"name\" : \"hex\",\n };\n }\n\n return false;\n}\n\nfunction validateWCAG2Parms(parms) {\n // return valid WCAG2 parms for isReadable.\n // If input parms are invalid, return {\"level\":\"AA\", \"size\":\"small\"}\n var level, size;\n parms = parms || { level: \"AA\", size: \"small\" };\n level = (parms.level || \"AA\").toUpperCase();\n size = (parms.size || \"small\").toLowerCase();\n if (level !== \"AA\" && level !== \"AAA\") {\n level = \"AA\";\n }\n if (size !== \"small\" && size !== \"large\") {\n size = \"small\";\n }\n return { level: level, size: size };\n}\n/*\n// Node: Export function\n if (typeof module !== \"undefined\" && module.exports) {\n module.exports = tinycolor;\n }\n// AMD/requirejs: Define the module\n else if (typeof define === 'function' && define.amd) {\n define(function () {return tinycolor;});\n }\n// Browser: Expose to window\n else {\n window.tinycolor = tinycolor;\n }\n\n */\n\n//})(Math);\n\nexport { tinycolor };\n","const $ = jQuery;\nimport { MapSVG } from \"../../Core/globals.js\";\n\nexport class Server {\n apiUrl: string;\n completeChunks: number;\n\n constructor() {\n this.apiUrl = MapSVG.urls.api;\n }\n getUrl(path) {\n return this.apiUrl + path;\n }\n get(path: string, data?: any): JQueryPromise {\n return $.ajax({\n url: this.apiUrl + path,\n type: \"GET\",\n data: data,\n beforeSend: function (xhr) {\n if (MapSVG.nonce()) {\n xhr.setRequestHeader(\"X-WP-Nonce\", MapSVG.nonce());\n }\n },\n });\n }\n post(path: string, data?: any): JQueryPromise {\n const ajaxParams = {\n url: this.apiUrl + path,\n type: \"POST\",\n data: data,\n beforeSend: function (xhr) {\n if (MapSVG.nonce()) {\n xhr.setRequestHeader(\"X-WP-Nonce\", MapSVG.nonce());\n }\n },\n };\n\n if (data instanceof FormData) {\n ajaxParams[\"processData\"] = false;\n ajaxParams[\"contentType\"] = false;\n }\n\n return $.ajax(ajaxParams);\n }\n put(path: string, data?: any): JQueryPromise {\n const ajaxParams = {\n url: this.apiUrl + path,\n type: \"POST\",\n data: data,\n beforeSend: function (xhr) {\n if (MapSVG.nonce()) {\n xhr.setRequestHeader(\"X-WP-Nonce\", MapSVG.nonce());\n }\n xhr.setRequestHeader(\"X-HTTP-Method-Override\", \"PUT\");\n },\n };\n\n if (data instanceof FormData) {\n ajaxParams[\"processData\"] = false;\n ajaxParams[\"contentType\"] = false;\n }\n\n return $.ajax(ajaxParams);\n }\n delete(path: string, data?: any): JQueryPromise {\n return $.ajax({\n url: this.apiUrl + path,\n type: \"POST\",\n data: data,\n beforeSend: function (xhr) {\n if (MapSVG.nonce()) {\n xhr.setRequestHeader(\"X-WP-Nonce\", MapSVG.nonce());\n }\n xhr.setRequestHeader(\"X-HTTP-Method-Override\", \"DELETE\");\n },\n });\n }\n ajax(\n path: string,\n data: { type: string; data: any; processData?: boolean; contentType?: boolean }\n ): JQueryPromise {\n // @ts-ignore\n data.url = this.getUrl(path);\n // @ts-ignore\n data.beforeSend = function (xhr) {\n if (MapSVG.nonce()) {\n xhr.setRequestHeader(\"X-WP-Nonce\", MapSVG.nonce());\n }\n };\n // @ts-ignore\n return $.ajax(data);\n }\n}\n","export class Events {\n context: any;\n events: { [key: string]: Function[] };\n\n constructor(context?: any) {\n this.events = {};\n this.context = context;\n }\n\n on(event: string, callbackOrObjectType: Function | string, callback?: Function) {\n if (!this.events[event]) this.events[event] = [];\n\n let objectType, callbackFunction;\n\n if (typeof callbackOrObjectType === \"string\") {\n objectType = callbackOrObjectType;\n callbackFunction = callback;\n } else {\n objectType = \"\";\n callbackFunction = callbackOrObjectType;\n }\n\n // let duplicatedEvent = false;\n // this.events[event].forEach(function (existingCallback) {\n // if (existingCallback.toString() === callbackFunction.toString()) {\n // duplicatedEvent = true;\n // }\n // });\n //\n // if (duplicatedEvent === false) {\n this.events[event].push(callbackFunction);\n // }\n\n return this;\n }\n\n off(event: string, callback?: Function) {\n const _this = this;\n if (this.events[event] && this.events[event].length) {\n this.events[event].forEach(function (_callback, index) {\n if (typeof callback === \"undefined\") {\n _this.events[event].splice(index, 1);\n } else if (_callback === callback) {\n _this.events[event].splice(index, 1);\n }\n });\n }\n return this;\n }\n\n trigger(event: string, thisArg?: any, args?: Array) {\n if (this.events[event] && this.events[event].length)\n this.events[event].forEach((callback) => {\n try {\n callback && callback.apply(thisArg || this.context, args || [this.context]);\n } catch (err) {\n console.error(err);\n }\n });\n return this;\n }\n}\n","class ArrayIndexed extends Array {\n dict: { [key: string]: any };\n key: string;\n options: { autoId: boolean; unique: boolean };\n nextId: number;\n\n constructor(indexKey: string, items?: any[], options?: { autoId: boolean; unique: boolean }) {\n if (items) {\n super(...items);\n } else {\n super();\n }\n this.key = indexKey;\n this.dict = {};\n this.nextId = 1;\n if (options) {\n this.options = options;\n } else {\n this.options = { autoId: false, unique: false };\n }\n if (this.length > 0) {\n let i = 0;\n const _this = this;\n\n if (this.options.autoId) {\n let maxId = 0;\n let missingIds = false;\n this.forEach(function (item) {\n if (item[_this.key] != null) {\n if (item[_this.key] > maxId) {\n maxId = item[_this.key];\n }\n } else {\n missingIds = true;\n }\n });\n this.nextId = ++maxId;\n if (missingIds) {\n this.forEach(function (item) {\n if (item[_this.key] == null) {\n item[_this.key] = _this.nextId;\n _this.nextId++;\n }\n });\n }\n }\n\n this.forEach(function (item) {\n _this.dict[item[_this.key]] = i;\n i++;\n });\n }\n }\n\n push(item: any): number {\n const length = super.push(item);\n if (this.options.autoId === true) {\n item[this.key] = this.nextId;\n this.nextId++;\n }\n this.dict[item[this.key]] = length - 1;\n return length;\n }\n\n pop(): T | undefined {\n const item = this[this.length - 1];\n const id = item[this.key];\n const length = super.pop();\n delete this.dict[id];\n this.reindex();\n return super.pop();\n }\n\n update(data: { [key: string]: any }): T | boolean {\n if (data[this.key] != null) {\n const obj = this.get(data[this.key]);\n for (const i in data) {\n obj[i] = data[i];\n }\n return obj;\n }\n return false;\n }\n\n get(id: number | string): any {\n return this.findById(id);\n }\n findById(id: number | string): any {\n return this[this.dict[id]];\n }\n\n deleteById(id: number | string): void {\n const index = this.dict[id];\n if (typeof index !== \"undefined\") {\n delete this.dict[id];\n this.splice(index, 1);\n }\n }\n\n delete(id: number | string): void {\n this.deleteById(id);\n }\n\n clear(): void {\n this.length = 0;\n this.reindex();\n }\n\n reindex(): void {\n const _this = this;\n this.dict = {};\n this.forEach(function (item, index) {\n _this.dict[item[_this.key]] = index;\n });\n }\n\n sort(compareFn?: (a: T, b: T) => number): this {\n super.sort(compareFn);\n this.reindex();\n return this;\n }\n\n splice(start: number, deleteCount?: number): T[] {\n const res = super.splice(start, deleteCount);\n this.reindex();\n return res;\n }\n}\n\nexport { ArrayIndexed };\n","import { MapSVG } from \"../../Core/globals.js\";\nimport { ArrayIndexed } from \"../../Core/ArrayIndexed\";\n\nexport class SchemaField {\n type: string;\n label?: string;\n name?: string;\n help?: string;\n options?: ArrayIndexed<{ [key: string]: any }>;\n visible?: boolean;\n readonly?: boolean;\n protected?: boolean;\n searchable?: boolean;\n value?: any;\n placeholder?: string;\n parameterName?: string;\n parameterNameShort?: string;\n db_type?: string;\n db_default?: number | boolean | string;\n [key: string]: any;\n\n constructor(field: { [key: string]: any }) {\n const booleans = [\"visible\", \"searchable\", \"readonly\", \"protected\"];\n\n for (const key in field) {\n this[key] = field[key];\n }\n\n booleans.forEach((paramName) => {\n if (typeof this[paramName] !== \"undefined\") {\n this[paramName] = MapSVG.parseBoolean(this[paramName]);\n } else {\n this[paramName] = false;\n }\n });\n\n if (typeof this.options !== \"undefined\") {\n if (!(this.options instanceof ArrayIndexed)) {\n this.options = new ArrayIndexed(\"value\", this.options);\n }\n }\n\n // TODO move this outside of the Schema class:\n // if(field.type == 'region'){\n // field.options = new Map();\n // _this.mapsvg.regions.forEach(function(region){\n // field.options.set(region.id, {id: region.id, title: region.title});\n // });\n // }\n }\n}\n","import { MapSVG } from \"../../Core/globals.js\";\nimport { Events } from \"../../Core/Events\";\nimport { SchemaField } from \"./SchemaField\";\nimport { ArrayIndexed } from \"../../Core/ArrayIndexed\";\n\nexport class Schema {\n id: number;\n type: string;\n name: string;\n title?: string;\n fields?: ArrayIndexed;\n lastChangeTime: number;\n events: Events;\n\n constructor(options: {\n id?: number;\n type?: string;\n name?: string;\n title?: string;\n fields?: Array<{ [key: string]: any }>;\n }) {\n this.fields = new ArrayIndexed(\"name\");\n\n this.build(options);\n\n this.lastChangeTime = Date.now();\n this.events = new Events(this);\n }\n\n build(options) {\n const allowedParams = [\"id\", \"title\", \"type\", \"name\", \"fields\"];\n allowedParams.forEach((paramName) => {\n const setter = \"set\" + MapSVG.ucfirst(paramName);\n if (typeof options[paramName] !== \"undefined\" && typeof this[setter] == \"function\") {\n this[setter](options[paramName]);\n }\n });\n }\n\n update(options) {\n this.build(options);\n }\n\n setId(id: number) {\n this.id = id;\n }\n setTitle(title: string) {\n this.title = title;\n }\n setName(name: string) {\n this.name = name;\n }\n\n loaded() {\n return this.fields.length !== 0;\n }\n\n setFields(fields: any[]) {\n if (fields) {\n this.fields.clear();\n\n fields.forEach((fieldParams) => {\n this.fields.push(new SchemaField(fieldParams));\n\n // TODO move this outside of the Schema class:\n // if(field.type == 'region'){\n // field.options = new Map();\n // _this.mapsvg.regions.forEach(function(region){\n // field.options.set(region.id, {id: region.id, title: region.title});\n // });\n // }\n });\n }\n }\n\n getFields(): ArrayIndexed {\n return this.fields;\n }\n getFieldsAsArray(): Array {\n // let res: Array;\n // res = [];\n // this.fields.forEach((field) => {\n // res.push(field);\n // })\n // return res;\n return this.fields;\n }\n getFieldNames(): Array {\n return this.fields.map((f) => f.name);\n }\n getField(field) {\n // if(field === 'id'){\n // return {name: 'id', visible: true, type: 'id'};\n // }\n return this.fields.findById(field);\n }\n getFieldByType(type) {\n let f = null;\n this.fields.forEach(function (field) {\n if (field.type === type) f = field;\n });\n return f;\n }\n getColumns(filters) {\n filters = filters || {};\n\n const columns = this.fields;\n\n const needfilters = Object.keys(filters).length !== 0;\n let results = [];\n\n if (needfilters) {\n let filterpass;\n columns.forEach(function (obj) {\n filterpass = true;\n for (const param in filters) {\n filterpass = obj[param] == filters[param];\n }\n filterpass && results.push(obj);\n });\n } else {\n results = columns;\n }\n\n return results;\n }\n\n getData() {\n const data = {\n id: this.id,\n title: this.title,\n name: this.name,\n fields: this.fields,\n type: this.type,\n };\n return data;\n }\n}\n","interface QueryInterface {\n sort?: Array<{ field: string; order: string }>;\n sortBy?: string;\n sortDir?: string;\n page?: number;\n lastpage?: boolean;\n perpage?: number;\n search?: string;\n searchField?: string;\n searchFallback?: boolean;\n filters?: { regions?: { table_name: string; region_ids: string[] }; [key: string]: any };\n filterout?: { [key: string]: string | number };\n withSchema?: boolean;\n}\n\nexport class Query implements QueryInterface {\n sort?: Array<{ field: string; order: string }>;\n sortBy?: string;\n sortDir?: string;\n page?: number;\n lastpage?: boolean;\n perpage?: number;\n search?: string;\n searchField?: string;\n searchFallback?: boolean;\n filters?: { regions?: { table_name: string; region_ids: string[] }; [key: string]: any };\n filterout?: { [key: string]: string | number };\n withSchema?: boolean;\n\n constructor(options?: QueryInterface) {\n this.filters = {};\n this.filterout = {};\n this.page = 1;\n if (options) {\n for (const i in options) {\n if (typeof options[i] !== \"undefined\") {\n this[i] = options[i];\n }\n }\n }\n }\n\n setFields(fields) {\n const _this = this;\n for (const key in fields) {\n if (key == \"filters\") {\n _this.setFilters(fields[key]);\n } else {\n _this[key] = fields[key];\n }\n }\n }\n\n update(query: QueryInterface) {\n for (const i in query) {\n if (typeof query[i] !== \"undefined\") {\n if (i === \"filters\") {\n this.setFilters(query[i]);\n } else {\n this[i] = query[i];\n }\n }\n }\n }\n\n get() {\n return {\n search: this.search,\n searchField: this.searchField,\n searchFallback: this.searchFallback,\n filters: this.filters,\n filterout: this.filterout,\n page: this.page,\n sort: this.sort,\n perpage: this.perpage,\n lastpage: this.lastpage,\n };\n }\n\n clearFilters() {\n this.resetFilters();\n }\n setFilters(fields: { [key: string]: string | number }) {\n const _this = this;\n for (const key in fields) {\n if (fields[key] === null || fields[key] === \"\" || fields[key] === undefined) {\n if (_this.filters[key]) {\n delete _this.filters[key];\n }\n } else {\n _this.filters[key] = fields[key];\n }\n }\n }\n setSearch(search: string) {\n this.search = search;\n }\n setFilterOut(fields: { [key: string]: string | number } | null): void {\n if (fields === null) {\n delete this.filterout;\n } else {\n this.filterout = fields;\n }\n }\n resetFilters(fields?: { [key: string]: string | number }) {\n this.filters = {};\n this.setSearch(\"\");\n }\n setFilterField(field: string, value: string | number) {\n this.filters[field] = value;\n }\n hasFilters(): boolean {\n return Object.keys(this.filters).length > 0 || this.search.length > 0;\n }\n removeFilter(fieldName: string): void {\n this.filters[fieldName] = null;\n delete this.filters[fieldName];\n }\n requestSchema(requestSchema: boolean) {\n this.withSchema = requestSchema ? requestSchema : true;\n }\n}\n","/**\n * LocationAddress class stores address field from Google Geocoding service\n * @param {object} fields\n * @constructor\n */\nexport class LocationAddress {\n route?: string;\n address_formatted?: string;\n administrative_area_level_1?: string;\n administrative_area_level_1_short?: string;\n administrative_area_level_2?: string;\n administrative_area_level_2_short?: string;\n country?: string;\n country_short?: string;\n postal_code?: string;\n\n constructor(fields: object) {\n for (const i in fields) {\n this[i] = fields[i];\n }\n }\n\n getData(): { [key: string]: string } {\n const copy: { [key: string]: string } = {};\n\n [\n \"route\",\n \"address_formatted\",\n \"administrative_area_level_1\",\n \"administrative_area_level_1_short\",\n \"administrative_area_level_2\",\n \"administrative_area_level_2_short\",\n \"country\",\n \"country_short\",\n \"postal_code\",\n ].forEach((field) => {\n if (this[field]) {\n copy[field] = this[field];\n }\n });\n return copy;\n }\n\n get state() {\n return this.country_short === \"US\" ? this.administrative_area_level_1 : null;\n }\n\n get state_short() {\n return this.country_short === \"US\" ? this.administrative_area_level_1_short : null;\n }\n\n get county() {\n return this.country_short === \"US\" ? this.administrative_area_level_2 : null;\n }\n\n get zip() {\n return this.postal_code;\n }\n}\n","import { LocationAddress } from \"./LocationAddress\";\nimport { MapSVG } from \"../Core/globals.js\";\nimport { Marker } from \"../Marker/Marker\";\nimport { CustomObject } from \"../Object/CustomObject\";\n\nexport class ScreenPoint {\n x: number;\n y: number;\n constructor(x: number, y: number) {\n this.x = x;\n this.y = y;\n }\n}\n\nexport class SVGPoint {\n x: number;\n y: number;\n constructor(\n x: number | string | { x: number | string; y: number | string },\n y?: number | string\n ) {\n let _x, _y;\n if (typeof x === \"object\") {\n if (x.x && x.y) {\n _x = parseFloat(x.x + \"\");\n _y = parseFloat(x.y + \"\");\n } else {\n console.error(\"MapSVG: incorrect format of {x, y} object for SVGPoint.\");\n _x = 0;\n _y = 0;\n }\n } else {\n _x = parseFloat(x + \"\");\n _y = parseFloat(y + \"\");\n }\n this.x = _x;\n this.y = _y;\n }\n\n toString() {\n return this.x + \",\" + this.y;\n }\n}\n\nexport class GeoPoint {\n lat: number;\n lng: number;\n constructor(\n lat: number | string | { lat: number | string; lng: number | string },\n lng?: number | string\n ) {\n let _lat, _lng;\n if (typeof lat === \"object\") {\n if (lat.lat && lat.lng) {\n _lat = parseFloat(lat.lat + \"\");\n _lng = parseFloat(lat.lng + \"\");\n } else {\n console.error(\"MapSVG: incorrect format of {lat, lng} object for GeoPoint.\");\n _lat = 0;\n _lng = 0;\n }\n } else {\n _lat = parseFloat(lat + \"\");\n _lng = parseFloat(lng + \"\");\n }\n this.lat = _lat;\n this.lng = _lng;\n }\n\n toString() {\n return this.lat + \",\" + this.lng;\n }\n}\n\nexport interface LocationOptionsInterface {\n img: string;\n object?: CustomObject;\n svgPoint?: SVGPoint;\n geoPoint?: GeoPoint;\n address?: LocationAddress;\n}\n\n/**\n * Location class. Contains lat/lon, x/y coordinates, image, address and marker.\n * @param {object} options\n * @param {MapSVG.Map} mapsvg\n * @constructor\n *\n * @example\n * var location = new MapSVG.Location({\n * geoPoint: {\n * lat: 55.22,\n * lng: 64.12,\n * },\n * img: \"/path/to/image.png\"\n * });\n *\n * var marker = new MapSVG.Marker({\n * location: location,\n * mapsvg: mapsvgInstance\n * });\n *\n */\nexport class Location {\n img: string;\n imagePath: string;\n object?: CustomObject;\n address?: LocationAddress;\n marker?: Marker;\n geoPoint?: GeoPoint;\n svgPoint?: SVGPoint;\n\n constructor(options: LocationOptionsInterface) {\n this.update(options);\n }\n\n update(options: LocationOptionsInterface): void {\n if (options.object) {\n this.setObject(options.object);\n }\n if (options.img) {\n this.setImage(options.img);\n }\n if (options.address) {\n this.setAddress(options.address);\n }\n if (options.svgPoint) {\n this.setSvgPoint(options.svgPoint);\n }\n if (options.geoPoint) {\n this.setGeoPoint(options.geoPoint);\n }\n }\n\n /**\n * Sets parent object\n */\n setObject(object: CustomObject): void {\n this.object = object;\n }\n /**\n * Sets image of the location\n * @param {string} imgUrl - URL of the image\n * @private\n */\n setImage(imgUrl: string): void {\n if (typeof imgUrl !== \"string\") {\n return;\n }\n let src = imgUrl.split(\"/\").pop();\n if (imgUrl.indexOf(\"uploads\") !== -1) {\n src = \"uploads/\" + src;\n }\n this.img = src;\n this.imagePath = this.getImageUrl();\n this.marker && this.marker && this.marker.setImage(this.imagePath);\n }\n\n /**\n * Returns full image path\n * @return string URL path\n */\n getImageUrl(): string {\n if (this.img && this.img.indexOf(\"uploads/\") === 0) {\n return MapSVG.urls.uploads + \"markers/\" + this.img.replace(\"uploads/\", \"\");\n } else {\n return MapSVG.urls.root + \"markers/\" + (this.img || \"_pin_default.png\");\n }\n }\n\n setAddress(address: { [key: string]: any }): void {\n this.address = new LocationAddress(address);\n }\n\n /**\n * Sets SvgPoint of the location (x/y coordinates)\n * @returns void\n */\n setSvgPoint(svgPoint: SVGPoint | { x: number; y: number }): void {\n this.svgPoint = svgPoint instanceof SVGPoint ? svgPoint : new SVGPoint(svgPoint);\n if (this.marker) {\n this.marker.setSvgPointFromLocation();\n }\n }\n\n /**\n * Sets GeoPoint of the location (lat/lng coordinates)\n * @returns void\n */\n setGeoPoint(geoPoint: GeoPoint | { lat: number; lng: number }): void {\n this.geoPoint = geoPoint instanceof GeoPoint ? geoPoint : new GeoPoint(geoPoint);\n if (this.marker) {\n this.marker.setSvgPointFromLocation();\n }\n }\n\n /**\n * Returns full marker image URL\n * @returns {string} image URL\n */\n getMarkerImage(): string {\n if (this.img && this.img.indexOf(\"uploads/\") === 0) {\n return MapSVG.urls.uploads + \"markers/\" + this.img.replace(\"uploads/\", \"\");\n } else {\n return MapSVG.urls.root + \"markers/\" + (this.img || \"_pin_default.png\");\n }\n }\n\n /**\n * Returns only essential data of the location\n * @returns {img: string, geoPoint?: {lat: number, lng: number}, svgPoint?: {x: number, y: number}, address: LocationAddress}\n */\n getData(): {\n img: string;\n imagePath: string;\n markerImagePath: string;\n geoPoint?: { lat: number; lng: number };\n svgPoint?: { x: number; y: number };\n address: LocationAddress;\n } {\n const data: {\n img: string;\n imagePath: string;\n markerImagePath: string;\n geoPoint?: { lat: number; lng: number };\n svgPoint?: { x: number; y: number };\n address: LocationAddress;\n } = {\n img: this.img,\n imagePath: this.imagePath,\n markerImagePath:\n this.marker && this.marker.object\n ? this.marker.object.getMarkerImage()\n : this.imagePath,\n address: this.address,\n };\n if (this.geoPoint) {\n data.geoPoint = { lat: this.geoPoint.lat, lng: this.geoPoint.lng };\n }\n if (this.svgPoint) {\n data.svgPoint = { x: this.svgPoint.x, y: this.svgPoint.y };\n }\n return data;\n }\n}\n","import { Schema } from \"../Infrastructure/Server/Schema.js\";\nimport { GeoPoint, Location, LocationOptionsInterface, SVGPoint } from \"../Location/Location.js\";\nimport { LocationAddress } from \"../Location/LocationAddress.js\";\nimport { Region } from \"../Region/Region.js\";\nimport { MapSVG } from \"../Core/globals\";\nimport { LocationFormElement } from \"../FormBuilder/FormElements\";\nimport { SchemaField } from \"../Infrastructure/Server/SchemaField\";\n\nexport class CustomObject {\n id: number;\n fields: Array;\n schema: Schema;\n location?: Location;\n regions?: Array<{ id: string; title: string; tableName: string }>;\n private _regions?: { [key: string]: Array<{ id: string; title: string }> };\n dirtyFields: string[];\n [key: string]: any;\n initialLoad = true;\n private locationField: SchemaField;\n\n constructor(params: any, schema: Schema) {\n this.setSchema(schema);\n this.dirtyFields = [];\n this.regions = [];\n this._regions = {};\n if (params.id !== undefined) {\n this.id = params.id;\n }\n this.initialLoad = true;\n this.build(params);\n this.initialLoad = false;\n if (this.id) {\n this.clearDirtyFields();\n }\n }\n\n private setSchema(schema: Schema): void {\n this.schema = schema;\n this.schema.events.on(\"changed\", () => this.setLocationField());\n this.fields = schema.getFieldNames();\n this.setLocationField();\n }\n\n build(params: any): void {\n for (const fieldName in params) {\n const field = this.schema.getField(fieldName);\n if (field) {\n if (!this.initialLoad) {\n this.dirtyFields.push(fieldName);\n }\n switch (field.type) {\n case \"region\":\n this.regions = params[fieldName];\n\n // if(params[fieldName].hasOwnProperty('length')){\n // // If got regions just for current regions table\n // // this._regions[this.schema.name] = this.regions;\n // } else {\n // // If got regions for multiple tables\n // // this._regions = params[fieldName];\n // this.regions = typeof this._regions[this.schema.name] != null ? this._regions[this.schema.name] : [];\n // }\n break;\n case \"location\":\n if (\n params[fieldName] != null &&\n params[fieldName] != \"\" &&\n Object.keys(params[fieldName]).length !== 0\n ) {\n const data: LocationOptionsInterface = {\n img: this.isMarkersByFieldEnabled()\n ? this.getMarkerImage()\n : params[fieldName].img,\n address: new LocationAddress(params[fieldName].address),\n };\n if (\n params[fieldName].geoPoint &&\n params[fieldName].geoPoint.lat &&\n params[fieldName].geoPoint.lng\n ) {\n data.geoPoint = new GeoPoint(params[fieldName].geoPoint);\n } else if (\n params[fieldName].svgPoint &&\n params[fieldName].svgPoint.x &&\n params[fieldName].svgPoint.y\n ) {\n data.svgPoint = new SVGPoint(params[fieldName].svgPoint);\n }\n if (this.location != null) {\n this.location.update(data);\n } else {\n this.location = new Location(data);\n }\n } else {\n this.location = null;\n }\n break;\n case \"post\":\n if (params.post) {\n this.post = params.post;\n }\n break;\n case \"select\":\n this[fieldName] = params[fieldName];\n if (!field.multiselect) {\n this[fieldName + \"_text\"] = this.getEnumLabel(field, params, fieldName);\n }\n break;\n case \"radio\":\n this[fieldName] = params[fieldName];\n this[fieldName + \"_text\"] = this.getEnumLabel(field, params, fieldName);\n break;\n default:\n this[fieldName] = params[fieldName];\n break;\n }\n }\n }\n const locationField = this.getLocationField();\n if (locationField && this.isMarkersByFieldEnabled() && this.isMarkerFieldChanged(params)) {\n this.reloadMarkerImage();\n }\n }\n\n isMarkerFieldChanged(params: { [key: string]: any }): boolean {\n return Object.keys(params).indexOf(this.getLocationField().markerField) !== -1;\n }\n\n setLocationField(): void {\n // this.locationField = this.schema.getFieldByType(\"location\");\n // if (this.locationField) {\n // this.getLocationField().markerField = this.locationField.markerField;\n // }\n }\n\n getLocationField(): SchemaField {\n return this.schema.getFieldByType(\"location\");\n }\n\n reloadMarkerImage(): void {\n this.location && this.location.setImage(this.getMarkerImage());\n }\n\n getMarkerImage(): string {\n let fieldValue;\n\n if (this.isMarkersByFieldEnabled()) {\n // @ts-ignore\n const locationField = this.getLocationField();\n fieldValue = this[locationField.markerField];\n if (!fieldValue) {\n return locationField.defaultMarkerPath || MapSVG.defaultMarkerImage;\n } else {\n if (locationField.markerField === \"regions\") {\n fieldValue = fieldValue[0] && fieldValue[0].id;\n } else if (typeof fieldValue === \"object\" && fieldValue.length) {\n fieldValue = fieldValue[0].value;\n }\n // @ts-ignore\n return (\n locationField.markersByField[fieldValue] ||\n locationField.defaultMarkerPath ||\n MapSVG.defaultMarkerImage\n );\n }\n } else {\n return this.location.imagePath;\n }\n }\n\n isMarkersByFieldEnabled(): boolean {\n const locationField = this.getLocationField();\n if (!locationField) {\n return false;\n }\n // @ts-ignore\n if (\n locationField.markersByFieldEnabled &&\n locationField.markerField &&\n Object.values(locationField.markersByField).length > 0\n ) {\n return true;\n } else {\n return false;\n }\n }\n\n clone(): CustomObject {\n const data = this.getData();\n return new CustomObject(data, this.schema);\n }\n\n private getEnumLabel(field, params: any, fieldName: string): string {\n const value = field.options.get(params[fieldName]);\n if (typeof value !== \"undefined\") {\n return value.label;\n } else {\n return \"\";\n }\n }\n\n update(params: { [key: string]: any }): void {\n this.build(params);\n }\n\n getDirtyFields(): { [key: string]: any } {\n const data: any = {};\n this.dirtyFields.forEach((field) => {\n data[field] = this[field];\n });\n data.id = this.id;\n if (data.location != null && data.location instanceof Location) {\n data.location = data.location.getData();\n }\n if (this.schema.getFieldByType(\"region\")) {\n data.regions = this.regions;\n }\n return data;\n }\n clearDirtyFields(): void {\n this.dirtyFields = [];\n }\n\n getData(): { [key: string]: any } {\n const data: { [key: string]: any } = {};\n\n const fields = this.schema.getFields();\n fields.forEach((field) => {\n switch (field.type) {\n case \"region\":\n data[field.name] = this[field.name];\n // data.regions = this.getRegions(regionsTableName);\n break;\n case \"select\":\n data[field.name] = this[field.name];\n if (!field.multiselect) {\n data[field.name + \"_text\"] = this[field.name + \"_text\"];\n }\n break;\n case \"post\":\n data[field.name] = this[field.name];\n data[\"post\"] = this.post;\n break;\n case \"status\":\n case \"radio\":\n data[field.name] = this[field.name];\n data[field.name + \"_text\"] = this[field.name + \"_text\"];\n break;\n case \"location\":\n data[field.name] = this[field.name] ? this[field.name].getData() : null;\n break;\n default:\n data[field.name] = this[field.name];\n break;\n }\n });\n return data;\n }\n\n getRegions(regionsTableName: string): Array<{ id: string; title: string }> {\n return this.regions;\n }\n getRegionsForTable(regionsTableName: string): Array<{ id: string; title: string }> {\n return this.regions\n ? this.regions.filter(\n // !region.tableName is a fix for broken settings after v6 release\n (region) => !region.tableName || region.tableName === regionsTableName\n )\n : [];\n }\n}\n","import { Server } from \"../Infrastructure/Server/Server\";\nimport { Schema } from \"../Infrastructure/Server/Schema\";\nimport { Query } from \"../Infrastructure/Server/Query\";\nimport { CustomObject } from \"../Object/CustomObject\";\nimport { Events } from \"./Events\";\nimport { ArrayIndexed } from \"./ArrayIndexed\";\nimport { MapSVGMap } from \"../Map/Map\";\nconst $ = jQuery;\n\nexport interface RepositoryInterface {\n server: Server;\n query: Query;\n hasMoreRecords: boolean;\n className: string;\n\n path: string;\n loaded: boolean;\n schema: Schema;\n objects: ArrayIndexed;\n completeChunks: number;\n\n objectNameSingle: string;\n objectNameMany: string;\n\n events: Events;\n\n noFiltersNoLoad: boolean;\n\n setSchema(schema: Schema): void;\n getSchema(): Schema;\n\n getLoaded(): ArrayIndexed;\n getLoadedAsArray(): ArrayIndexed;\n create(object: any): JQueryDeferred;\n find(params?: Query): JQueryDeferred;\n findById(id: number | string): JQueryDeferred;\n getLoadedObject(id: number | string): CustomObject;\n update(object: any): JQueryDeferred;\n delete(id: string | number): JQueryDeferred;\n\n loadDataFromResponse(data: { [key: string]: any } | string): void;\n reload(): void;\n\n encodeData(params: any): { [key: string]: any };\n decodeData(dataJSON: string): { [key: string]: any };\n\n onFirstPage(): boolean;\n onLastPage(): boolean;\n}\n\nexport class Repository implements RepositoryInterface {\n server: Server;\n query: Query;\n hasMoreRecords: boolean;\n className: string;\n\n objectNameSingle: string;\n objectNameMany: string;\n\n path: string;\n loaded: boolean;\n schema: Schema;\n objects: ArrayIndexed;\n completeChunks: number;\n\n noFiltersNoLoad: boolean;\n\n events: Events;\n\n constructor(objectName: string, path: string) {\n this.server = new Server();\n this.query = new Query();\n this.events = new Events(this);\n this.className = \"\";\n this.objectNameSingle = objectName;\n this.objectNameMany = objectName + \"s\";\n this.setPath(path);\n this.objects = new ArrayIndexed(\"id\");\n this.completeChunks = 0;\n }\n\n setNoFiltersNoLoad(value: boolean): void {\n this.noFiltersNoLoad = value;\n }\n\n setDataSource(path: string) {\n this.setPath(path);\n this.query = new Query({ withSchema: true });\n return this.find().done(() => {\n this.query.update({ withSchema: false });\n });\n }\n\n setPath(path: string) {\n this.path = path.replace(/\\/+$/, \"\") + \"/\";\n }\n\n setSchema(schema: Schema): void {\n this.schema = schema;\n }\n getSchema(): Schema {\n return this.schema;\n }\n\n loadDataFromResponse(response: { [key: string]: any } | string): void {\n let data: any;\n data = this.decodeData(response);\n this.objects.clear();\n\n if (data[this.objectNameMany] && data[this.objectNameMany].length) {\n this.hasMoreRecords =\n this.query.perpage && data[this.objectNameMany].length > this.query.perpage;\n if (this.hasMoreRecords) {\n data[this.objectNameMany].pop();\n }\n data[this.objectNameMany].forEach((obj) => {\n this.objects.push(obj);\n });\n } else {\n this.hasMoreRecords = false;\n }\n\n this.loaded = true;\n this.events.trigger(\"loaded\");\n }\n reload(): JQueryDeferred {\n return this.find();\n }\n\n create(object: object): JQueryDeferred {\n const defer = jQuery.Deferred();\n defer.promise();\n\n const data = {};\n data[this.objectNameSingle] = this.encodeData(object);\n\n this.server\n .post(this.path, data)\n .done((response: any) => {\n const data = this.decodeData(response);\n const object = data[this.objectNameSingle];\n this.objects.push(object);\n defer.resolve(object);\n this.events.trigger(\"created\", this, [object]);\n })\n .fail((response) => {\n defer.reject(response);\n });\n\n return defer;\n }\n\n findById(id: number | string, nocache = false): JQueryDeferred {\n const defer = jQuery.Deferred();\n defer.promise();\n\n let object;\n\n if (!nocache) {\n object = this.objects.findById(id.toString());\n }\n if (!nocache && object) {\n defer.resolve(object);\n } else {\n this.server\n .get(this.path + id)\n .done((response: string) => {\n const data = this.decodeData(response);\n defer.resolve(data[this.objectNameSingle]);\n })\n .fail((response) => {\n defer.reject(response);\n });\n }\n\n return defer;\n }\n\n find(query?: Query | { [key: string]: any }): JQueryDeferred {\n this.events.trigger(\"load\");\n\n const defer = jQuery.Deferred();\n\n defer.promise();\n\n if (typeof query !== \"undefined\") {\n this.query.update(query);\n }\n\n if (this.noFiltersNoLoad && !this.query.hasFilters()) {\n this.objects.clear();\n this.events.trigger(\"loaded\");\n defer.resolve(this.getLoaded());\n return defer;\n }\n\n if (!this.schema) {\n this.query.update({ withSchema: true });\n }\n\n this.server\n .get(this.path, this.query)\n .done((response: string) => {\n if (!this.schema) {\n this.query.update({ withSchema: false });\n }\n this.loadDataFromResponse(response);\n defer.resolve(this.getLoaded());\n })\n .fail((response) => {\n defer.reject(response);\n });\n\n return defer;\n }\n\n getLoaded(): ArrayIndexed {\n return this.objects;\n }\n getLoadedObject(id: number | string): CustomObject {\n return this.objects.findById(id.toString());\n }\n getLoadedAsArray(): ArrayIndexed {\n return this.objects;\n }\n\n update(object: any): JQueryDeferred {\n const defer = jQuery.Deferred();\n defer.promise();\n\n const data = {};\n const objectUpdatedFields = \"getDirtyFields\" in object ? object.getDirtyFields() : object;\n data[this.objectNameSingle] = this.encodeData(objectUpdatedFields);\n\n this.server\n .put(this.path + objectUpdatedFields.id, data)\n .done((response: string) => {\n if (\"clearDirtyFields\" in object) {\n object.clearDirtyFields();\n }\n\n defer.resolve(object);\n this.events.trigger(\"updated\", this, object);\n })\n .fail((response, stat) => {\n defer.reject(response, stat);\n });\n return defer;\n }\n\n delete(id: number): JQueryDeferred {\n const defer = jQuery.Deferred();\n defer.promise();\n\n this.server\n .delete(this.path + id)\n .done((response: string) => {\n this.objects.delete(id.toString());\n this.events.trigger(\"deleted\");\n defer.resolve();\n })\n .fail((response) => {\n defer.reject(response);\n });\n\n return defer;\n }\n\n clear(): JQueryDeferred {\n const defer = jQuery.Deferred();\n defer.promise();\n this.server\n .delete(this.path)\n .done((response: string) => {\n this.objects.clear();\n this.events.trigger(\"loaded\");\n this.events.trigger(\"cleared\");\n defer.resolve();\n })\n .fail((response) => {\n defer.reject(response);\n });\n\n return defer;\n }\n\n onFirstPage(): boolean {\n return this.query.page === 1;\n }\n\n onLastPage(): boolean {\n return this.hasMoreRecords === false;\n }\n\n encodeData(params: any): { [key: string]: any } {\n return params;\n }\n\n decodeData(dataJSON: string | { [key: string]: any }): { [key: string]: any } {\n let data;\n\n if (typeof dataJSON === \"string\") {\n data = JSON.parse(dataJSON);\n } else {\n data = dataJSON;\n }\n\n if ((data.object || data.region || data.regions || data.objects) && data.schema) {\n this.setSchema(new Schema(data.schema));\n }\n\n const dataFormatted: any = {};\n for (const key in data) {\n if (data[key]) {\n switch (key) {\n case \"object\":\n case \"region\":\n dataFormatted[key] = new CustomObject(data[key], this.schema);\n break;\n case \"objects\":\n case \"regions\":\n dataFormatted[key] = data[key].map(\n (obj) => new CustomObject(obj, this.schema)\n );\n break;\n case \"schema\":\n dataFormatted[key] = this.schema || new Schema(data[key]);\n break;\n case \"schemas\":\n dataFormatted[key] = data[key].map((obj) => new Schema(obj));\n break;\n default:\n break;\n }\n }\n }\n return dataFormatted;\n }\n\n /**\n * Imports data from a CSV file.\n *\n * @param data\n * @param convertLatlngToAddress\n * @param mapsvg\n */\n import(data: { [key: string]: any }, convertLatlngToAddress: boolean, mapsvg: MapSVGMap) {\n const _this = this;\n\n const locationField = _this.schema.getFieldByType(\"location\");\n let language = \"en\";\n if (locationField && locationField.language) {\n language = locationField.language;\n }\n\n data = this.formatCSV(data, mapsvg);\n\n return this.importByChunks(data, language, convertLatlngToAddress).done(function () {\n _this.find();\n });\n }\n\n /**\n * Splits data to small chunks and sends every chunk separately to the server\n *\n * @param data - Data to import\n * @param language - Language for Geocoding conversions\n * @param convertLatlngToAddress - Whether lat/lng coordinates should be converted to addresses via Geocoding service\n */\n importByChunks(\n data: { [key: string]: any },\n language: string,\n convertLatlngToAddress: boolean\n ) {\n const _this = this;\n\n let i,\n j,\n temparray,\n chunk = 50;\n const chunks = [];\n\n for (i = 0, j = data.length; i < j; i += chunk) {\n temparray = data.slice(i, i + chunk);\n chunks.push(temparray);\n }\n\n if (chunks.length > 0) {\n let delay = 0;\n const delayPlus = chunks[0][0] && chunks[0][0].location ? 1000 : 0;\n\n var defer = $.Deferred();\n defer.promise();\n\n _this.completeChunks = 0;\n\n chunks.forEach(function (chunk) {\n delay += delayPlus;\n setTimeout(function () {\n const data = {\n language: language,\n convertLatlngToAddress: convertLatlngToAddress,\n };\n\n data[_this.objectNameMany] = JSON.stringify(chunk);\n\n _this.server\n .post(_this.path + \"import\", data)\n .done(function (_data) {\n _this.completeChunk(chunks, defer);\n })\n .fail((response) => {\n console.error(response);\n });\n }, delay);\n });\n }\n return defer;\n }\n\n completeChunk(chunks, defer) {\n const _this = this;\n _this.completeChunks++;\n if (_this.completeChunks === chunks.length) {\n defer.resolve();\n }\n }\n\n formatCSV(data: { [key: string]: any }, mapsvg: MapSVGMap) {\n const _this = this;\n const newdata = [];\n const latLngRegex = /^(\\-?\\d+(\\.\\d+)?),\\s*(\\-?\\d+(\\.\\d+)?)$/g;\n\n const regionsTable = mapsvg.regionsRepository.getSchema().name;\n\n data.forEach(function (object, index) {\n const newObject = {};\n for (const key in object) {\n let field = _this.schema.getField(key);\n if (key === \"post\") {\n field = { type: \"post\" };\n }\n if (field !== undefined) {\n switch (field.type) {\n case \"region\":\n newObject[key] = {};\n newObject[key] = object[key]\n .split(\",\")\n .map(function (regionId) {\n return regionId.trim();\n })\n .filter(function (rId) {\n return (\n mapsvg.getRegion(rId) !== undefined ||\n mapsvg.regions.find(function (item) {\n return item.title === rId;\n }) !== undefined\n );\n })\n .map(function (rId) {\n let r = mapsvg.getRegion(rId);\n if (typeof r === \"undefined\") {\n r = mapsvg.regions.find(function (item) {\n return item.title === rId;\n });\n }\n return { id: r.id, title: r.title, tableName: regionsTable };\n });\n break;\n case \"location\":\n if (object[key].match(latLngRegex)) {\n const coords = object[key].split(\",\").map(function (n) {\n return parseFloat(n);\n });\n if (\n coords.length == 2 &&\n coords[0] > -90 &&\n coords[0] < 90 &&\n coords[1] > -180 &&\n coords[1] < 180\n ) {\n newObject[key] = {\n geoPoint: { lat: coords[0], lng: coords[1] },\n };\n } else {\n newObject[key] = \"\";\n }\n } else if (object[key]) {\n newObject[key] = { address: object[key] };\n }\n\n if (typeof newObject[key] == \"object\") {\n newObject[key].img = mapsvg.options.defaultMarkerImage;\n }\n\n break;\n case \"select\":\n const field = _this.schema.getField(key);\n if (field.multiselect) {\n const labels = _this.schema.getField(key).options.map(function (f) {\n return f.label;\n });\n newObject[key] = object[key]\n .split(\",\")\n .map(function (label) {\n return label.trim();\n })\n .filter(function (label) {\n return labels.indexOf(label) !== -1;\n })\n .map(function (label) {\n return _this.schema\n .getField(key)\n .options.filter(function (option) {\n return option.label == label;\n })[0];\n });\n if (newObject[key].length === 0) {\n const values = _this.schema\n .getField(key)\n .options.map(function (f) {\n return f.value + \"\";\n });\n newObject[key] = object[key]\n .split(\",\")\n .map(function (value) {\n return value.trim();\n })\n .filter(function (value) {\n return values.indexOf(value) !== -1;\n })\n .map(function (value) {\n return _this.schema\n .getField(key)\n .options.filter(function (option) {\n return option.value == value;\n })[0];\n });\n }\n } else {\n newObject[key] = object[key];\n }\n break;\n case \"radio\":\n case \"text\":\n case \"textarea\":\n case \"status\":\n default:\n newObject[key] = object[key];\n break;\n }\n }\n }\n data[index] = newObject;\n });\n\n return data;\n }\n}\n","import { Repository } from \"../Core/Repository.js\";\nimport { Schema } from \"../Infrastructure/Server/Schema\";\nimport { CustomObject } from \"../Object/CustomObject\";\nimport { MapSVGMap } from \"./Map\";\n\nexport class MapsRepository extends Repository {\n path = \"maps/\";\n\n constructor() {\n super(\"map\", \"maps\");\n }\n\n encodeData(params: any): { [key: string]: any } {\n const data: { [key: string]: any } = {};\n if (typeof params.options !== \"undefined\") {\n data.options = JSON.stringify(params.options);\n\n // Apache mod_sec blocks requests with the following words:\n // table, select, database. Encode those words to decode them later in PHP to prevent blocking:\n data.options = data.options.replace(/select/g, \"!mapsvg-encoded-slct\");\n data.options = data.options.replace(/table/g, \"!mapsvg-encoded-tbl\");\n data.options = data.options.replace(/database/g, \"!mapsvg-encoded-db\");\n data.options = data.options.replace(/varchar/g, \"!mapsvg-encoded-vc\");\n data.options = data.options.replace(/int\\(11\\)/g, \"!mapsvg-encoded-int\");\n }\n if (typeof params.title !== \"undefined\") {\n data.title = params.title;\n }\n if (typeof params.id !== \"undefined\") {\n data.id = params.id;\n }\n if (typeof params.status !== \"undefined\") {\n data.status = params.status;\n }\n\n return data;\n }\n\n decodeData(dataJSON: string | { [key: string]: any }): { [key: string]: any } {\n let data;\n\n if (typeof dataJSON === \"string\") {\n data = JSON.parse(dataJSON);\n } else {\n data = dataJSON;\n }\n\n return data;\n }\n\n copy(id: number, title: string): JQueryDeferred {\n const defer = jQuery.Deferred();\n defer.promise();\n\n const data = { options: { title: title } };\n\n this.server\n .post(this.path + id + \"/copy\", this.encodeData(data))\n .done((response: string) => {\n const data = this.decodeData(response);\n this.objects.clear();\n this.events.trigger(\"loaded\");\n this.events.trigger(\"cleared\");\n defer.resolve(data.map);\n })\n .fail(() => {\n defer.reject();\n });\n\n return defer;\n }\n\n createFromV2(object: any) {\n const defer = jQuery.Deferred();\n defer.promise();\n\n const data = {};\n data[this.objectNameSingle] = this.encodeData(object);\n\n this.server\n .post(this.path + \"/createFromV2\", data)\n .done((response: any) => {\n const data = this.decodeData(response);\n const object = data[this.objectNameSingle];\n this.objects.push(object);\n defer.resolve(object);\n this.events.trigger(\"created\", this, [object]);\n })\n .fail(() => {\n defer.reject();\n });\n\n return defer;\n }\n\n delete(id: number): JQueryDeferred {\n const defer = jQuery.Deferred();\n defer.promise();\n\n this.server\n .delete(this.path + id)\n .done((response: string) => {\n this.objects.delete(id.toString());\n this.events.trigger(\"deleted\");\n defer.resolve();\n })\n .fail(() => {\n defer.reject();\n });\n\n return defer;\n }\n}\n","import { Repository } from \"../Core/Repository.js\";\nimport { Schema } from \"../Infrastructure/Server/Schema\";\nimport { CustomObject } from \"../Object/CustomObject\";\nimport { MapSVGMap } from \"./Map\";\n\nexport class MapsV2Repository extends Repository {\n path = \"maps-v2/\";\n\n constructor() {\n super(\"map\", \"maps\");\n }\n\n encodeData(params: any): { [key: string]: any } {\n const data: { [key: string]: any } = {};\n data.options = JSON.stringify(params.options);\n\n // Apache mod_sec blocks requests with the following words:\n // table, select, database. Encode those words to decode them later in PHP to prevent blocking:\n data.options = data.options.replace(/select/g, \"!mapsvg-encoded-slct\");\n data.options = data.options.replace(/table/g, \"!mapsvg-encoded-tbl\");\n data.options = data.options.replace(/database/g, \"!mapsvg-encoded-db\");\n data.options = data.options.replace(/varchar/g, \"!mapsvg-encoded-vc\");\n\n data.id = params.id;\n data.title = params.title;\n\n return data;\n }\n\n decodeData(dataJSON: string | { [key: string]: any }): { [key: string]: any } {\n let data;\n\n if (typeof dataJSON === \"string\") {\n data = JSON.parse(dataJSON);\n } else {\n data = dataJSON;\n }\n\n return data;\n }\n}\n","import { GeoViewBox, ViewBox } from \"./MapOptionsInterface\";\nimport { GeoPoint, ScreenPoint, SVGPoint } from \"../Location/Location\";\n\nclass Converter {\n private mapElement: HTMLElement;\n private geoViewBox: GeoViewBox;\n private defViewBox: ViewBox;\n private viewBox: ViewBox;\n public mapLonDelta: number;\n private mapLatBottomDegree: number;\n private worldMapRadius: number;\n private worldMapWidth: number;\n private worldShift: boolean;\n private yShift: number;\n\n constructor(\n mapElement: HTMLElement,\n defViewBox: ViewBox,\n viewBox: ViewBox,\n geoViewBox?: GeoViewBox\n ) {\n this.mapElement = mapElement;\n this.defViewBox = defViewBox;\n this.viewBox = viewBox;\n this.yShift = 0;\n if (geoViewBox) {\n this.setGeoViewBox(geoViewBox);\n }\n }\n\n setYShift(): void {\n // Don't do shift for world map (Google Map)\n if (this.defViewBox.width === 20426) {\n this.yShift = 0;\n return;\n }\n if (this.geoViewBox) {\n const topLeftPoint = this.convertGeoToSVG(this.geoViewBox.ne);\n this.yShift = topLeftPoint.y - this.defViewBox.y;\n }\n }\n\n setGeoViewBox(geoViewBox: GeoViewBox): void {\n this.geoViewBox = geoViewBox;\n this.mapLonDelta = this.geoViewBox.ne.lng - this.geoViewBox.sw.lng;\n this.mapLatBottomDegree = (this.geoViewBox.sw.lat * Math.PI) / 180;\n this.worldMapWidth = (this.defViewBox.width / this.mapLonDelta) * 360;\n this.worldMapRadius = ((this.defViewBox.width / this.mapLonDelta) * 360) / (2 * Math.PI);\n this.setYShift();\n }\n\n setWorldShift(on: boolean) {\n this.worldShift = on;\n }\n\n getScale() {\n return this.mapElement.clientWidth / this.viewBox.width;\n }\n\n /**\n * Converts SVG coordinates to pixel coordinates relative to the map container\n */\n convertSVGToPixel(svgPoint: SVGPoint): ScreenPoint {\n const scale = this.getScale();\n\n let shiftXByGM = 0;\n const shiftYByGM = 0;\n\n if (this.worldShift) {\n if (this.viewBox.x - this.defViewBox.x > this.defViewBox.width) {\n shiftXByGM =\n this.worldMapWidth *\n Math.floor((this.viewBox.x - this.defViewBox.x) / this.defViewBox.width);\n }\n }\n\n return new ScreenPoint(\n (svgPoint.x - this.viewBox.x + shiftXByGM) * scale,\n (svgPoint.y - this.viewBox.y + shiftYByGM) * scale\n );\n }\n /**\n * Converts pixel coordinates (relative to map container) to SVG coordinates\n */\n convertPixelToSVG(screenPoint: ScreenPoint): SVGPoint {\n const scale = this.getScale();\n return new SVGPoint(\n screenPoint.x / scale + this.viewBox.x,\n screenPoint.y / scale + this.viewBox.y\n );\n }\n /**\n * Converts geo-coordinates (latitude/lognitude) to SVG coordinates\n */\n convertGeoToSVG(geoPoint: GeoPoint): SVGPoint {\n if (!this.geoViewBox) {\n throw new Error(\"Can't do convertGeoToSVG() - geoViewBox is not provided.\");\n }\n let x =\n (geoPoint.lng - this.geoViewBox.sw.lng) * (this.defViewBox.width / this.mapLonDelta);\n const lat = (geoPoint.lat * Math.PI) / 180;\n const mapOffsetY =\n (this.worldMapRadius / 2) *\n Math.log(\n (1 + Math.sin(this.mapLatBottomDegree)) / (1 - Math.sin(this.mapLatBottomDegree))\n );\n let y =\n this.defViewBox.height -\n ((this.worldMapRadius / 2) * Math.log((1 + Math.sin(lat)) / (1 - Math.sin(lat))) -\n mapOffsetY);\n\n x += this.defViewBox.x;\n y += this.defViewBox.y;\n\n y -= this.yShift;\n\n return new SVGPoint(x, y);\n }\n /**\n * Converts SVG coordinates to geo-coordinates (latitude/lognitude).\n */\n convertSVGToGeo(svgPoint: SVGPoint): GeoPoint {\n if (!this.geoViewBox) {\n throw new Error(\"Can't do convertSVGToGeo() - geoViewBox is not provided.\");\n }\n const tx = svgPoint.x - this.defViewBox.x;\n const ty = svgPoint.y - this.defViewBox.y;\n\n const mapOffsetY =\n (this.worldMapRadius / 2) *\n Math.log(\n (1 + Math.sin(this.mapLatBottomDegree)) / (1 - Math.sin(this.mapLatBottomDegree))\n );\n const equatorY = this.defViewBox.height + mapOffsetY;\n const a = (equatorY - ty) / this.worldMapRadius;\n let lat = (180 / Math.PI) * (2 * Math.atan(Math.exp(a)) - Math.PI / 2);\n let lng = this.geoViewBox.sw.lng + (tx / this.defViewBox.width) * this.mapLonDelta;\n lat = parseFloat(lat.toFixed(6));\n lng = parseFloat(lng.toFixed(6));\n return new GeoPoint(lat, lng);\n }\n}\n\nexport { Converter };\n","/**\n * Resize sensor.\n * @private\n * @param element\n * @param callback\n * @constructor\n */\n\nconst $ = jQuery;\n\nexport class ResizeSensor {\n element: HTMLElement;\n callback: Function;\n expand: HTMLElement;\n shrink: HTMLElement;\n currentWidth: number;\n currentHeight: number;\n\n constructor(element, callback) {\n const _this = this;\n\n _this.element = element;\n _this.callback = callback;\n\n const style = getComputedStyle(element);\n let zIndex = parseInt(style.zIndex);\n if (isNaN(zIndex)) {\n zIndex = 0;\n }\n zIndex--;\n\n _this.expand = document.createElement(\"div\");\n _this.expand.style.position = \"absolute\";\n _this.expand.style.left = \"0px\";\n _this.expand.style.top = \"0px\";\n _this.expand.style.right = \"0px\";\n _this.expand.style.bottom = \"0px\";\n _this.expand.style.overflow = \"hidden\";\n _this.expand.style.zIndex = zIndex.toString();\n _this.expand.style.visibility = \"hidden\";\n\n const expandChild = document.createElement(\"div\");\n expandChild.style.position = \"absolute\";\n expandChild.style.left = \"0px\";\n expandChild.style.top = \"0px\";\n expandChild.style.width = \"10000000px\";\n expandChild.style.height = \"10000000px\";\n _this.expand.appendChild(expandChild);\n\n _this.shrink = document.createElement(\"div\");\n _this.shrink.style.position = \"absolute\";\n _this.shrink.style.left = \"0px\";\n _this.shrink.style.top = \"0px\";\n _this.shrink.style.right = \"0px\";\n _this.shrink.style.bottom = \"0px\";\n _this.shrink.style.overflow = \"hidden\";\n _this.shrink.style.zIndex = zIndex.toString();\n _this.shrink.style.visibility = \"hidden\";\n\n const shrinkChild = document.createElement(\"div\");\n shrinkChild.style.position = \"absolute\";\n shrinkChild.style.left = \"0px\";\n shrinkChild.style.top = \"0px\";\n shrinkChild.style.width = \"200%\";\n shrinkChild.style.height = \"200%\";\n _this.shrink.appendChild(shrinkChild);\n\n _this.element.appendChild(_this.expand);\n _this.element.appendChild(_this.shrink);\n\n const size = element.getBoundingClientRect();\n\n _this.currentWidth = size.width;\n _this.currentHeight = size.height;\n\n _this.setScroll();\n\n _this.expand.addEventListener(\"scroll\", function () {\n _this.onScroll();\n });\n _this.shrink.addEventListener(\"scroll\", function () {\n _this.onScroll();\n });\n }\n\n onScroll() {\n const _this = this;\n const size = _this.element.getBoundingClientRect();\n\n const newWidth = size.width;\n const newHeight = size.height;\n\n if (newWidth != _this.currentWidth || newHeight != _this.currentHeight) {\n _this.currentWidth = newWidth;\n _this.currentHeight = newHeight;\n _this.callback();\n }\n\n this.setScroll();\n }\n\n setScroll() {\n this.expand.scrollLeft = 10000000;\n this.expand.scrollTop = 10000000;\n this.shrink.scrollLeft = 10000000;\n this.shrink.scrollTop = 10000000;\n }\n\n destroy() {\n this.expand.remove();\n this.shrink.remove();\n }\n}\n","/**\n * MapOptions object used to define the properties that can be set on a Map.\n * @typedef {Object} MapSVG.MapOptions\n * @property {string} source - SVG file URL\n * @property {boolean} disableAll - Disables all regions\n * @property {boolean} responsive - Map responsiveness. Default: true\n * @property {string} loadingText - Loading text message. Default is \"Loading map...\"\n * @property {number} width - Width of the map\n * @property {number} height - Height of the map\n * @property (array) viewBox - Map viewBox: [x,y,width,height]\n * @property {boolean} lockAspectRatio - Keep aspect ratio when changing width or height\n * @property {object} padding - Map padding, default: {top: 0, left: 0, right: 0, bottom: 0}\n * @property {string} cursor - Mouse pointer style: \"default' or \"pointer\"\n * @property {boolean} multiSelect - Allows to select multiple Regions. Default: false\n * @property {object} colors - Color settings. Example: {base: \"#E1F1F1\", background: \"#eeeeee\", hover: \"#548eac\", selected: \"#065A85\", stroke: \"#7eadc0\"},\n * @property {object} clustering - Clustering settings. Default: {on: false},\n * @property {object} zoom - Zoom options. Default: {on: false, limit: [0,10], delta: 2, buttons: {on: true, location: 'right'}, mousewheel: true, fingers: true},\n * @property {object} scroll - Scroll options. Default: {on: false, limit: false, background: false, spacebar: false},\n * @property {object} tooltips - Tooltip options. Default: {on: false, position: 'bottom-right', template: '', maxWidth: '', minWidth: 100},\n * @property {object} popovers - Popover options. Default: {on: false, position: 'top', template: '', centerOn: true, width: 300, maxWidth: 50, maxHeight: 50},\n * @property {object} regionStatuses - List of Region statuses\n * @property {object} events - List of callbacks\n * @property {object} choropleth - Choropleth map settings.\n * @property {object} labelsMarkers - Marker labels settings. Default: {on:false}\n * @property {object} labelsMarkers - Region labels settings. Default: {on:false}\n */\nimport { GeoPoint, SVGPoint } from \"../Location/Location\";\nimport { SchemaField } from \"../Infrastructure/Server/SchemaField\";\nimport { ArrayIndexed } from \"../Core/ArrayIndexed\";\n\nexport interface MapOptionsInterface {\n id: number;\n title: string;\n backend: boolean; // passed from admin\n /** @deprecated */\n afterLoad: Function;\n /** @deprecated */\n beforeLoad: Function;\n /** @deprecated */\n dataLoaded: Function;\n db_map_id: number | string;\n source: string;\n regionPrefix: string;\n groups: ArrayIndexed;\n galleries: ArrayIndexed;\n layersControl: LayersControlOptionsInterface;\n disableAll: boolean;\n responsive: boolean;\n loadingText: string;\n width: number;\n height: number;\n viewBox: number[];\n lockAspectRatio: boolean;\n padding: { top: number; left: number; right: number; bottom: number };\n cursor: string;\n multiSelect: boolean;\n colorsIgnore: boolean;\n editMode: boolean;\n defaultMarkerImage: string;\n fitMarkers: boolean;\n fitMarkersOnStart: boolean;\n fitSingleMarkerZoom: number;\n menu: {\n showFirst: string;\n showMapOnClick: boolean;\n noResultsText: string;\n on: boolean;\n customContainer: boolean;\n width: string;\n source: string;\n hideOnMobile: boolean;\n location: string;\n containerId: string;\n position: string;\n filterout: { field: string; val: number | string };\n categories: {\n on: boolean;\n groupBy: string;\n collapse: boolean;\n collapseOther: boolean;\n hideEmpty: boolean;\n };\n sortBy: string;\n sortDirection: string;\n minHeight: string;\n };\n colors: {\n base?: string;\n baseDefault?: string;\n background?: string;\n hover?: string | number;\n selected?: string | number;\n stroke?: string;\n directory: string;\n directorySearch: string;\n detailsView: string;\n popover: string;\n tooltip: string;\n status: any;\n markers: any;\n leftSidebar: string;\n rightSidebar: string;\n header: string;\n footer: string;\n modalFilters: string;\n clusters: string;\n clustersHover: string;\n clustersText: string;\n clustersBorders: string;\n clustersHoverBorders: string;\n clustersHoverText: string;\n };\n clustering: { on: boolean };\n zoom: {\n on: boolean;\n limit: [number, number];\n delta: number;\n buttons: {\n on: boolean;\n location: string;\n };\n mousewheel: boolean;\n fingers: boolean;\n hideSvg: boolean;\n hideSvgZoomLevel: number;\n };\n scroll: {\n on: boolean;\n limit: boolean;\n background: boolean;\n spacebar: boolean;\n };\n tooltips: {\n on: boolean;\n position: string;\n template: string;\n maxWidth: number;\n minWidth: number;\n };\n popovers: {\n on: boolean;\n position: string;\n template: string;\n centerOn: boolean;\n width: string;\n maxWidth: number;\n maxHeight: number;\n mobileFullscreen: boolean;\n resetViewboxOnClose: boolean;\n };\n regionStatuses: Array;\n events: { [key: string]: string };\n choropleth: {\n on?: boolean;\n [key: string]: any;\n source: string;\n sourceField: string;\n sourceFieldSelect: {\n on: boolean;\n variants: Array;\n };\n bubbleMode: boolean;\n bubbleSize: {\n min: number;\n max: number;\n };\n coloring: {\n mode: string;\n noData: {\n color: \"grey\";\n description: \"-\";\n };\n gradient: {\n colors: {\n low: string;\n high: string;\n diffRGB: { r: number; g: number; b: number; a: number };\n lowRGB: { r: number; g: number; b: number; a: number };\n highRGB: { r: number; g: number; b: number; a: number };\n };\n labels: {\n low: string;\n high: string;\n };\n values: {\n min: number;\n max: number;\n maxAdjusted: number;\n };\n };\n palette: {\n colors: Array<{\n color: string;\n valueFrom: number;\n valueTo: number;\n description: string;\n }>;\n outOfRange: {\n color: \"grey\";\n description: \"-\";\n };\n };\n legend: {\n on: boolean;\n layout: string;\n container: string;\n title: string;\n text: string;\n description: string;\n width: string;\n height: string;\n };\n };\n };\n regionChoroplethField: string;\n regions: Array<{ id: string; title: string; fill: string; disabled: boolean }>;\n database: {\n pagination: { on: boolean; perpage: number; showIn: string; prev: string; next: string };\n loadOnStart: boolean;\n noFiltersNoLoad: boolean;\n regionsTableName: string;\n objectsTableName: string;\n };\n labelsMarkers: { on: boolean };\n labelsRegions: { on: boolean };\n googleMaps: {\n on: boolean;\n apiKey: string;\n center: GeoPoint;\n zoom: number;\n drawingTools?: boolean;\n geometry?: boolean;\n minZoom: number;\n language: string;\n };\n css: string;\n containers: {\n leftSidebar: { on: boolean; width: string; height: string };\n rightSidebar: { on: boolean; width: string; height: string };\n header: { on: boolean; width: string; height: string };\n footer: { on: boolean; width: string; height: string };\n };\n filters: {\n on: boolean;\n source: string;\n containerId: string;\n location: string;\n width: string;\n filteredRegionsStatus: number;\n modalLocation: string;\n hideOnMobile: boolean;\n hide: boolean;\n padding: string;\n showButtonText: string;\n clearButton: boolean;\n clearButtonText: boolean;\n searchButton: boolean;\n searchButtonText: string;\n };\n filtersSchema?: Array;\n detailsView: {\n location: string;\n width: string;\n mobileFullscreen: boolean;\n containerId: string;\n margin: string;\n autoresize: boolean;\n };\n mobileView: {\n [key: string]: any;\n };\n templates: {\n directory: string;\n directoryItem: string;\n labelRegion: string;\n popoverRegion: string;\n popoverMarker: string;\n tooltipRegion: string;\n tooltipMarker: string;\n detailsViewRegion: string;\n detailsView: string;\n };\n controls: {\n zoom: boolean;\n zoomReset: boolean;\n userLocation: boolean;\n location: string;\n previousMap: boolean;\n };\n actions: {\n region: {\n click: { [key: string]: any };\n touch: { [key: string]: any };\n mouseover: { [key: string]: any; showTooltip: boolean };\n mouseout: { [key: string]: any };\n };\n marker: {\n touch: { [key: string]: any };\n click: { [key: string]: any };\n mouseover: { [key: string]: any; showTooltip: boolean };\n mouseout: { [key: string]: any };\n };\n map: {\n afterLoad: {\n selectRegion: boolean;\n };\n };\n directoryItem: {\n touch: { [key: string]: any };\n click: { [key: string]: any };\n hover: { [key: string]: any };\n mouseout: { [key: string]: any };\n };\n };\n svgFileVersion: number;\n data_regions: any; // passed from Admin\n data_objects: any; // passed from Admin\n extension: any;\n markerLastID: number;\n previousMapsIds: Array;\n}\n\nexport interface GroupOptionsInterface {\n id: string;\n title: string;\n objects: Array<{ label: string; value: string }>;\n visible: boolean;\n}\nexport interface GalleryOptionsInterface {\n id: string;\n title: string;\n objects: Array<{ label: string; value: string }>;\n visible: boolean;\n}\nexport interface LayersControlOptionsInterface {\n on: boolean;\n label: string;\n maxHeight: string;\n position: string;\n expanded: boolean;\n}\nexport class ViewBox {\n x: number;\n y: number;\n width: number;\n height: number;\n constructor(x: any, y?: number | string, width?: number | string, height?: number | string) {\n if (typeof x === \"object\") {\n // x as Object\n if (\n x.hasOwnProperty(\"x\") &&\n x.hasOwnProperty(\"y\") &&\n x.hasOwnProperty(\"width\") &&\n x.hasOwnProperty(\"height\")\n ) {\n this.x = typeof x.x === \"string\" ? parseFloat(x.x) : x.x;\n this.y = typeof x.y === \"string\" ? parseFloat(x.y) : x.y;\n this.width = typeof x.width === \"string\" ? parseFloat(x.width) : x.width;\n this.height = typeof x.height === \"string\" ? parseFloat(x.height) : x.height;\n } else if (typeof x === \"object\" && x.length && x.length === 4) {\n // x as Array\n this.x = typeof x[0] === \"string\" ? parseFloat(x[0]) : x[0];\n this.y = typeof x[1] === \"string\" ? parseFloat(x[1]) : x[1];\n this.width = typeof x[2] === \"string\" ? parseFloat(x[2]) : x[2];\n this.height = typeof x[3] === \"string\" ? parseFloat(x[3]) : x[3];\n }\n } else {\n this.x = typeof x === \"string\" ? parseFloat(x) : x;\n this.y = typeof y === \"string\" ? parseFloat(y) : y;\n this.width = typeof width === \"string\" ? parseFloat(width) : width;\n this.height = typeof height === \"string\" ? parseFloat(height) : height;\n }\n }\n\n /**\n * Updates viewbox with new numbers\n * @param newViewBox\n */\n update(newViewBox: ViewBox): void {\n this.x = newViewBox.x;\n this.y = newViewBox.y;\n this.width = newViewBox.width;\n this.height = newViewBox.height;\n }\n\n /**\n * Returns a string with viewBox numbers\n */\n toString(): string {\n return this.x + \" \" + this.y + \" \" + this.width + \" \" + this.height;\n }\n\n /**\n * Returns an array containing viewBox numbers\n */\n toArray(): number[] {\n return [this.x, this.y, this.width, this.height];\n }\n\n clone(): ViewBox {\n return new ViewBox({ x: this.x, y: this.y, width: this.width, height: this.height });\n }\n\n /**\n * Check whether current viewBox fits inside of another viewBox\n */\n fitsInViewBox(viewBox: ViewBox, atLeastByOneDimension?: boolean): boolean {\n if (atLeastByOneDimension === true) {\n return viewBox.width > this.width || viewBox.height > this.height;\n } else {\n return viewBox.width > this.width && viewBox.height > this.height;\n }\n }\n\n /**\n * Adds padding to the viewBox\n */\n addPadding(padding: { top: number; left: number; right: number; bottom: number }): void {\n if (padding.top) {\n this.y -= padding.top;\n this.height += padding.top;\n }\n if (padding.right) {\n this.width += padding.right;\n }\n if (padding.bottom) {\n this.height += padding.bottom;\n }\n if (padding.left) {\n this.x -= padding.left;\n this.width += padding.left;\n }\n }\n}\n\nexport class GeoViewBox {\n sw: GeoPoint;\n ne: GeoPoint;\n constructor(sw: GeoPoint, ne: GeoPoint) {\n this.sw = sw;\n this.ne = ne;\n }\n}\n","import { Events } from \"../Core/Events\";\nimport { MapSVGMap } from \"../Map/Map\";\nimport { GeoPoint, ScreenPoint, SVGPoint } from \"../Location/Location\";\nimport { ViewBox } from \"../Map/MapOptionsInterface\";\nconst $ = jQuery;\n\n/**\n * Abstract MapObject class. Extended by {@link #region|MapSVG.Region} & {@link #marker|MapSVG.Marker}\n * @abstract\n * @param {object} jQueryObject\n * @param {MapSVG.Map} mapsvg\n */\nexport class MapObject {\n id: string;\n objects: any[];\n events: Events;\n element: HTMLElement | SVGElement;\n mapsvg: MapSVGMap;\n\n constructor(element: HTMLElement | SVGElement | null, mapsvg: MapSVGMap) {\n this.id = \"\";\n this.objects = [];\n this.events = new Events(this);\n this.element = element;\n // this.elemType = element.tagName;\n this.mapsvg = mapsvg;\n }\n\n /**\n * Returns bounding box of an object in SVG coordinates\n * @returns {*[]} - [x,y,width,height]\n * @abstract\n * @private\n */\n getBBox(): ViewBox {\n return new ViewBox(1, 2, 3, 4);\n }\n /**\n * Returns geo-bounds of an object - South-West & North-East points.\n * @returns {{sw: (number[]), ne: (number[])}}\n */\n getGeoBounds(): { sw: GeoPoint; ne: GeoPoint } {\n const bbox = this.getBBox();\n const pointSW = new SVGPoint(bbox.x, bbox.y + bbox.height);\n const pointNE = new SVGPoint(bbox.x + bbox.width, bbox.y);\n const sw = this.mapsvg.converter.convertSVGToGeo(pointSW);\n const ne = this.mapsvg.converter.convertSVGToGeo(pointNE);\n\n return { sw: sw, ne: ne };\n }\n /**\n * Returns style of a given property of an SVG object\n * @param {string} prop - property name\n * @param {object} elem - SVG object\n * @returns {string} - style\n */\n getComputedStyle(prop: string, elem?: SVGElement | HTMLElement): string {\n elem = elem || this.element;\n return MapObject.getComputedStyle(prop, elem);\n }\n\n static getComputedStyle(prop: string, elem?: SVGElement | HTMLElement): string {\n const _p1: string = elem.getAttribute(prop);\n if (_p1) {\n return _p1;\n }\n\n const _p2: string = elem.getAttribute(\"style\");\n if (_p2) {\n const s = _p2.split(\";\");\n const z = s.filter(function (e) {\n e = e.trim();\n const attr = e.split(\":\");\n if (attr[0] == prop) return true;\n });\n if (z.length) {\n return z[0].split(\":\").pop().trim();\n }\n }\n\n const parent = elem.parentElement;\n const elemType = parent ? parent.tagName : null;\n\n if (elemType && elemType != \"svg\") return MapObject.getComputedStyle(prop, parent);\n else return undefined;\n }\n /**\n * Returns style of a property of the SVG object\n * @param {string} prop - property name\n * @returns {string}\n */\n getStyle(prop: string) {\n const _p1 = this.attr(prop);\n if (_p1) {\n return _p1;\n }\n const _p2 = this.attr(\"style\");\n if (_p2) {\n const s = _p2.split(\";\");\n const z = s.filter(function (e) {\n var e = e.trim();\n if (e.indexOf(prop) === 0) return e;\n });\n\n return z.length ? z[0].split(\":\").pop().trim() : undefined;\n }\n return \"\";\n }\n /**\n * Returns center of an object in pixel coordinates\n * @returns {number[]} - [x,y]\n */\n getCenter(): ScreenPoint {\n const x = this.element.getBoundingClientRect().left;\n const y = this.element.getBoundingClientRect().top;\n const w = this.element.getBoundingClientRect().width;\n const h = this.element.getBoundingClientRect().height;\n const point = new ScreenPoint(x + w / 2, y + h / 2);\n return point;\n }\n /**\n * Returns center of an object in SVG coordinates\n * @returns {{x: number, y: number}}\n */\n getCenterSVG(): SVGPoint {\n const bbox = this.getBBox();\n const point = new SVGPoint(bbox.x + bbox.width / 2, bbox.y + bbox.height / 2);\n return point;\n }\n /**\n * Returns center of an object in geo-coordinates\n * @returns {{lat: number, lng: number}}\n */\n getCenterLatLng(yShift) {\n yShift = yShift ? yShift : 0;\n const bbox = this.getBBox();\n const x = bbox.x + bbox.width / 2;\n const y = bbox.y + bbox.height / 2 - yShift;\n const point = new SVGPoint(x, y);\n return this.mapsvg.converter.convertSVGToGeo(point);\n }\n /**\n * Sets attribute of an SVG object\n * @param {string|object} v1 - attribute name or object: {name: value, name: value}\n * @param {string|number} v2 - value\n * @returns {*}\n */\n attr(v1, v2 = null) {\n const svgDom = this.element;\n\n if (typeof v1 == \"object\") {\n for (const key in v1) {\n const item = v1[key];\n if (typeof item === \"string\" || typeof item === \"number\") {\n svgDom.setAttribute(key, \"\" + item);\n }\n }\n } else if (typeof v1 == \"string\" && (typeof v2 == \"string\" || typeof v2 == \"number\")) {\n svgDom.setAttribute(v1, \"\" + v2);\n } else if (v2 == undefined) {\n return svgDom.getAttribute(v1);\n }\n }\n /**\n * Set ID of an object\n * @param {string} id\n */\n setId(id: string) {\n if (id !== undefined) {\n this.id = id;\n this.element.setAttribute(\"id\", id);\n }\n }\n}\n","import { MapSVG } from \"../Core/globals.js\";\nimport { MapObject } from \"../MapObject/MapObject.js\";\nimport { Location, SVGPoint, GeoPoint, ScreenPoint } from \"../Location/Location.js\";\nimport { ViewBox } from \"../Map/MapOptionsInterface.js\";\nimport { CustomObject } from \"../Object/CustomObject.js\";\nimport { type } from \"os\";\nconst $ = jQuery;\n\n/**\n * Marker class\n * @extends MapObject\n * @param params\n * @constructor\n *\n * @example\n * var location = new MapSVG.Location({\n * lat: 55.22,\n * lng: 64.12,\n * img: \"/path/to/image.png\"\n * });\n *\n * var marker = new MapSVG.Marker({\n * location: location,\n * mapsvg: mapsvgInstance\n * });\n *\n * // The marker is created but still not added to the map. Let's add it:\n * mapsvg.markerAdd(marker);\n *\n */\nexport class Marker extends MapObject {\n src: string;\n location: Location;\n svgPoint?: SVGPoint;\n geoPoint?: GeoPoint;\n screenPoint?: ScreenPoint;\n element: HTMLElement;\n label: HTMLElement;\n image: HTMLElement;\n width: number;\n height: number;\n selected: boolean;\n object: CustomObject;\n centered: boolean;\n altAttr: string;\n private svgPointBeforeDrag: SVGPoint;\n\n mapped?: boolean;\n needToRemove?: boolean;\n moving?: boolean;\n bubble: HTMLElement;\n bubbleMode: boolean;\n visible: boolean;\n\n constructor(params) {\n super(null, params.mapsvg);\n\n this.element = $(\"
\").addClass(\"mapsvg-marker\")[0];\n this.image = $('').addClass(\"mapsvg-marker-image\")[0];\n\n if (params.object) {\n this.setObject(params.object);\n }\n\n if (!(params.location instanceof Location)) {\n throw new Error(\"MapSVG.Marker: no Location provided for Marker initializaton\");\n } else {\n this.location = params.location;\n this.location.marker = this;\n }\n\n this.setImage(this.location.imagePath);\n\n $(this.element).append(this.image);\n\n if (params.width && params.height) {\n this.setSize(params.width, params.height);\n } else {\n this.setSize(15, 24);\n }\n\n this.setId(this.mapsvg.markerId());\n this.setSvgPointFromLocation();\n this.setAltAttr();\n }\n\n reload() {\n this.setImage();\n this.setSvgPointFromLocation();\n }\n\n private getImagePath() {\n return (this.object && this.object.getMarkerImage()) || this.location.getMarkerImage();\n }\n\n setSize(width: number, height: number): void {\n this.width = width;\n this.height = height;\n this.setCentered(this.width === this.height);\n }\n\n setSvgPointFromLocation(): void {\n const svgPoint =\n this.location.geoPoint &&\n this.location.geoPoint.lat !== 0 &&\n this.location.geoPoint.lng !== 0\n ? this.mapsvg.converter.convertGeoToSVG(this.location.geoPoint)\n : this.location.svgPoint;\n if (svgPoint) {\n this.setSvgPoint(svgPoint);\n }\n }\n\n /**\n * Set ID of the Marker\n * @param {string} id\n */\n setId(id: string | number): void {\n MapObject.prototype.setId.call(this, id);\n this.mapsvg.markers.reindex();\n }\n /**\n * Get SVG bounding box of the Marker\n * @returns {ViewBox}\n */\n getBBox(): ViewBox {\n if (this.centered) {\n return new ViewBox(\n this.svgPoint.x - this.width / 2 / this.mapsvg.scale,\n this.svgPoint.y - this.height / 2 / this.mapsvg.scale,\n this.width / this.mapsvg.scale,\n this.height / this.mapsvg.scale\n );\n } else {\n return new ViewBox(\n this.svgPoint.x - this.width / 2 / this.mapsvg.scale,\n this.svgPoint.y - this.height / this.mapsvg.scale,\n this.width / this.mapsvg.scale,\n this.height / this.mapsvg.scale\n );\n }\n }\n /**\n * Get Marker options\n * @returns {{id: string, src: string, svgPoint: SVGPoint, geoPoint: GeoPoint}}\n */\n getOptions(): { id: string; src: string; svgPoint: SVGPoint; geoPoint: GeoPoint } {\n const o = {\n id: this.id,\n src: this.src,\n svgPoint: this.svgPoint,\n geoPoint: this.geoPoint,\n };\n $.each(o, function (key, val) {\n if (val == undefined) {\n delete o[key];\n }\n });\n return o;\n }\n /**\n * Update marker settings\n * @param {object} data - Options\n */\n update(data): void {\n for (const key in data) {\n // check if there's a setter for a property\n const setter = \"set\" + MapSVG.ucfirst(key);\n if (setter in this) this[setter](data[key]);\n }\n }\n /**\n * Set image of the Marker\n * @param {string} src\n */\n setImage(src?: string, skipChangingLocationImage = false): void {\n if (!src) {\n src = this.getImagePath();\n }\n this.src = MapSVG.safeURL(src);\n const img = new Image();\n const marker = this;\n img.onload = function () {\n if (marker.image.getAttribute(\"src\") !== \"src\") {\n marker.image.setAttribute(\"src\", marker.src);\n }\n marker.setSize((this).width, (this).height);\n marker.adjustScreenPosition();\n };\n img.src = this.src;\n // if (!skipChangingLocationImage && this.location && this.location.imagePath !== src) {\n // this.location.setImage(src);\n // }\n this.events.trigger(\"change\");\n }\n\n /**\n * Set 'alt' attribute of the Marker\n */\n setAltAttr(): void {\n const marker = this;\n\n marker.altAttr =\n typeof marker.object != \"undefined\" &&\n typeof marker.object.title != \"undefined\" &&\n marker.object.title !== \"\"\n ? marker.object.title\n : marker.id;\n marker.image.setAttribute(\"alt\", marker.altAttr);\n }\n\n /**\n * Set x/y coordinates of the Marker\n * @param {SVGPoint} svgPoint\n */\n setSvgPoint(svgPoint: SVGPoint): void {\n this.svgPoint = svgPoint;\n\n // if (this.location) {\n // this.location.setSvgPoint(this.svgPoint);\n // }\n // if (this.mapsvg.mapIsGeo) {\n // this.geoPoint = this.mapsvg.converter.convertSVGToGeo(this.svgPoint);\n // this.location.setGeoPoint(this.geoPoint);\n // }\n\n this.adjustScreenPosition();\n this.events.trigger(\"change\");\n }\n\n /**\n * Moves marker to a point.\n * @private\n * @param {Array} xy\n */\n /*\n moveSvgPositionToClick = function (screen) {\n\n var _data = this.mapsvg.getData();\n var markerOptions = {};\n\n xy[0] = xy[0] + _data.viewBox[0];\n xy[1] = xy[1] + _data.viewBox[1];\n\n\n if (_data.mapIsGeo)\n this.geoCoords = this.mapsvg.converter.convertSVGToGeo(xy[0], xy[1]);\n\n markerOptions.xy = xy;\n this.update(markerOptions);\n };\n */\n\n /**\n * Adjusts position of the Marker. Called on map zoom and on map container resize.\n */\n adjustScreenPosition(): void {\n const pos = this.mapsvg.converter.convertSVGToPixel(this.svgPoint);\n\n pos.x -= this.width / 2;\n pos.y -= !this.centered ? this.height : this.height / 2;\n\n this.setScreenPosition(pos.x, pos.y);\n }\n\n /**\n * Moves marker by given numbers\n *\n * @param {number} deltaX\n * @param {number} deltaY\n */\n moveSrceenPositionBy(deltaX: number, deltaY: number): void {\n const oldPos = this.screenPoint,\n x = oldPos.x - deltaX,\n y = oldPos.y - deltaY;\n\n this.setScreenPosition(x, y);\n }\n\n /**\n * Set position of the marker by given numbers\n *\n * @param {number} x\n * @param {number} y\n */\n setScreenPosition(x: number, y: number): void {\n if (this.screenPoint instanceof ScreenPoint) {\n this.screenPoint.x = x;\n this.screenPoint.y = y;\n } else {\n this.screenPoint = new ScreenPoint(x, y);\n }\n\n this.updateVisibility();\n\n if (this.visible === true) {\n this.element.style.transform = \"translate(\" + x + \"px,\" + y + \"px)\";\n\n this.adjustLabelScreenPosition();\n }\n }\n\n /**\n * Adjust position of marker label\n *\n */\n adjustLabelScreenPosition(): void {\n if (this.label) {\n const markerPos = this.screenPoint,\n x = Math.round(markerPos.x + this.width / 2 - $(this.label).outerWidth() / 2),\n y = Math.round(markerPos.y - $(this.label).outerHeight());\n }\n }\n\n /**\n * Check if the marker is inside of the viewBox\n *\n * @return boolean\n */\n inViewBox(): boolean {\n const x = this.screenPoint.x,\n y = this.screenPoint.y,\n mapFullWidth = this.mapsvg.containers.map.offsetWidth,\n mapFullHeight = this.mapsvg.containers.map.offsetHeight;\n\n // Marker stays visible if it's inside of the map-width/height buffer zone around the map:\n return (\n x - this.width / 2 < 2 * mapFullWidth &&\n x + this.width / 2 > -mapFullWidth &&\n y - this.height / 2 < 2 * mapFullHeight &&\n y + this.height / 2 > -mapFullHeight\n );\n }\n\n /**\n * Set visibility of the marker\n *\n */\n updateVisibility(): boolean {\n if (this.inViewBox() === true) {\n this.visible = true;\n\n this.element.classList.remove(\"mapsvg-out-of-sight\");\n\n if (this.label) {\n this.label.classList.remove(\"mapsvg-out-of-sight\");\n }\n } else {\n this.visible = false;\n\n this.element.classList.add(\"mapsvg-out-of-sight\");\n\n if (this.label) {\n this.label.classList.add(\"mapsvg-out-of-sight\");\n }\n }\n\n return this.visible;\n }\n\n isMoving(): boolean {\n return this.moving;\n }\n setMoving(value: boolean) {\n this.moving = value;\n }\n\n /**\n * Marker drag event handler\n * @private\n * @param startCoords\n * @param scale\n * @param endCallback\n * @param clickCallback\n */\n drag(startCoords, scale, endCallback?: () => void, clickCallback?: () => void): void {\n const _this = this;\n this.svgPointBeforeDrag = new SVGPoint(this.svgPoint.x, this.svgPoint.y);\n this.setMoving(true);\n\n $(\"body\").on(\"mousemove.drag.mapsvg\", function (e) {\n e.preventDefault();\n $(_this.mapsvg.containers.map).addClass(\"no-transitions\");\n //$('body').css('cursor','move');\n const mouseNew = MapSVG.mouseCoords(e);\n const dx = mouseNew.x - startCoords.x;\n const dy = mouseNew.y - startCoords.y;\n const newSvgPoint = new SVGPoint(\n _this.svgPointBeforeDrag.x + dx / scale,\n _this.svgPointBeforeDrag.y + dy / scale\n );\n _this.setSvgPoint(newSvgPoint);\n });\n $(\"body\").on(\"mouseup.drag.mapsvg\", function (e) {\n e.preventDefault();\n _this.undrag();\n const mouseNew = MapSVG.mouseCoords(e);\n const dx = mouseNew.x - startCoords.x;\n const dy = mouseNew.y - startCoords.y;\n const newSvgPoint = new SVGPoint(\n _this.svgPointBeforeDrag.x + dx / scale,\n _this.svgPointBeforeDrag.y + dy / scale\n );\n\n _this.setSvgPoint(newSvgPoint);\n\n if (_this.mapsvg.isGeo()) {\n // var svgPoint = new SVGPoint(_this.x + _this.width / 2, this.y + (this.height-1));\n _this.geoPoint = _this.mapsvg.converter.convertSVGToGeo(newSvgPoint);\n }\n\n endCallback && endCallback.call(_this);\n if (\n _this.svgPointBeforeDrag.x == _this.svgPoint.x &&\n _this.svgPointBeforeDrag.y == _this.svgPoint.y\n )\n clickCallback && clickCallback.call(_this);\n });\n }\n /**\n * Marker undrag event handler\n * @private\n */\n undrag(): void {\n //$(this.element).closest('svg').css('pointer-events','auto');\n //$('body').css('cursor','default');\n this.setMoving(false);\n $(\"body\").off(\".drag.mapsvg\");\n $(this.mapsvg.containers.map).removeClass(\"no-transitions\");\n }\n /**\n * Deletes the Marker\n */\n delete(): void {\n if (this.label) {\n this.label.remove();\n this.label = null;\n }\n $(this.element).empty().remove();\n }\n /**\n * Sets parent DB object of the Marker\n * @param {object} obj\n */\n setObject(obj: CustomObject): void {\n this.object = obj;\n $(this.element).attr(\"data-object-id\", this.object.id);\n }\n /**\n * Hides the Marker\n */\n hide(): void {\n $(this.element).addClass(\"mapsvg-marker-hidden\");\n if (this.label) {\n $(this.label).hide();\n }\n }\n /**\n * Shows the Marker\n */\n show(): void {\n $(this.element).removeClass(\"mapsvg-marker-hidden\");\n if (this.label) {\n $(this.label).show();\n }\n }\n\n /**\n * Highlight the Marker.\n * Used on mouseover.\n */\n highlight(): void {\n $(this.element).addClass(\"mapsvg-marker-hover\");\n }\n /**\n * Unhighlight the Marker.\n * Used on mouseout.\n */\n unhighlight(): void {\n $(this.element).removeClass(\"mapsvg-marker-hover\");\n }\n /**\n * Select the Marker.\n */\n select(): void {\n this.selected = true;\n $(this.element).addClass(\"mapsvg-marker-active\");\n }\n /**\n * Deselect the Marker.\n */\n deselect(): void {\n this.selected = false;\n $(this.element).removeClass(\"mapsvg-marker-active\");\n }\n\n getData(): CustomObject {\n return this.object;\n }\n\n /**\n * Returns color of the choropleth marker bubble\n * @returns {string} color\n */\n getChoroplethColor(): string {\n const markerValue = parseFloat(this.object[this.mapsvg.options.choropleth.sourceField]);\n let color;\n\n if (!markerValue) {\n color = this.mapsvg.options.choropleth.coloring.noData.color;\n } else if (this.mapsvg.options.choropleth.coloring.mode === \"gradient\") {\n // Gradient mode\n const gradient = this.mapsvg.options.choropleth.coloring.gradient,\n w =\n gradient.values.maxAdjusted === 0\n ? 0\n : (markerValue - gradient.values.min) / gradient.values.maxAdjusted,\n r = Math.round(gradient.colors.diffRGB.r * w + gradient.colors.lowRGB.r),\n g = Math.round(gradient.colors.diffRGB.g * w + gradient.colors.lowRGB.g),\n b = Math.round(gradient.colors.diffRGB.b * w + gradient.colors.lowRGB.b),\n a = (gradient.colors.diffRGB.a * w + gradient.colors.lowRGB.a).toFixed(2);\n\n color = \"rgba(\" + r + \",\" + g + \",\" + b + \",\" + a + \")\";\n } else {\n // Palette mode\n const paletteColors = this.mapsvg.options.choropleth.coloring.palette.colors;\n\n if (!paletteColors[0].valueFrom && markerValue < paletteColors[0].valueTo) {\n color = paletteColors[0].color;\n } else if (\n !paletteColors[paletteColors.length - 1].valueTo &&\n markerValue > paletteColors[paletteColors.length - 1].valueFrom\n ) {\n color = paletteColors[paletteColors.length - 1].color;\n } else {\n paletteColors.forEach(function (paletteColor) {\n if (\n markerValue >= paletteColor.valueFrom &&\n markerValue < paletteColor.valueTo\n ) {\n color = paletteColor.color;\n }\n });\n\n color = color\n ? color\n : this.mapsvg.options.choropleth.coloring.palette.outOfRange.color;\n }\n }\n\n return color;\n }\n\n /**\n * Returns size of the choropleth bubble\n */\n getBubbleSize(): number {\n let bubbleSize;\n\n if (this.object[this.mapsvg.options.choropleth.sourceField]) {\n const maxBubbleSize = Number(this.mapsvg.options.choropleth.bubbleSize.max),\n minBubbleSize = Number(this.mapsvg.options.choropleth.bubbleSize.min),\n maxSourceFieldvalue = this.mapsvg.options.choropleth.coloring.gradient.values.max,\n minSourceFieldvalue = this.mapsvg.options.choropleth.coloring.gradient.values.min,\n sourceFieldvalue = parseFloat(\n this.object[this.mapsvg.options.choropleth.sourceField]\n );\n\n bubbleSize =\n ((sourceFieldvalue - minSourceFieldvalue) /\n (maxSourceFieldvalue - minSourceFieldvalue)) *\n (maxBubbleSize - minBubbleSize) +\n Number(minBubbleSize);\n } else {\n bubbleSize = false;\n }\n\n return bubbleSize;\n }\n\n /**\n * Returns screen point of the choropleth bubble\n */\n getBubbleScreenPosition(): { x: number; y: number } {\n const bubbleSize = Number(this.getBubbleSize());\n\n return {\n x: this.width / 2 - bubbleSize / 2,\n y: this.height - bubbleSize / 2,\n };\n }\n\n /**\n * Draw a choropleth bubble for the marker\n */\n drawBubble(): void {\n const bubbleId = \"mapsvg-bubble-\" + this.object.id;\n const bubbleValue = parseFloat(this.object[this.mapsvg.options.choropleth.sourceField]);\n if (bubbleValue) {\n if (!this.bubble) {\n this.bubble = $(\n '
'\n )[0];\n $(this.element).append(this.bubble);\n }\n const color = this.getChoroplethColor(),\n bubbleSize = Number(this.getBubbleSize());\n\n $(this.bubble)\n .css(\"background-color\", color)\n .css(\"width\", bubbleSize + \"px\")\n .css(\"height\", bubbleSize + \"px\")\n .css(\"lineHeight\", bubbleSize - 2 + \"px\");\n } else {\n $(\"#\" + bubbleId).remove();\n delete this.bubble;\n }\n }\n\n /**\n * Disable/enable BubbleMode for the marker\n *\n * @param {boolean} bubbleMode\n */\n setBubbleMode(bubbleMode: boolean): void {\n this.bubbleMode = bubbleMode;\n\n if (bubbleMode) {\n this.setCentered(true);\n this.drawBubble();\n if (this.bubble) {\n this.width = this.bubble.offsetWidth;\n this.height = this.bubble.offsetHeight;\n this.adjustScreenPosition();\n }\n } else {\n this.setImage(this.src);\n }\n }\n\n setLabel(html: string): void {\n if (html) {\n if (!this.label) {\n this.label = $(\"
\").addClass(\"mapsvg-marker-label\")[0];\n $(this.element).append(this.label);\n }\n $(this.label).html(html);\n } else {\n if (this.label) {\n $(this.label).remove();\n delete this.label;\n }\n }\n }\n\n /**\n * Set centered propperty of the marker\n *\n * @param {boolean} on\n */\n setCentered(on: boolean): void {\n this.centered = on;\n }\n}\n","/**\n * Cluster class. Groups markers into a clickable circle with a number indicating how many markers it contains.\n * @param options\n * @constructor\n * @extends MapObject\n */\nimport { MapSVGMap } from \"../Map/Map.js\";\nimport { MapObject } from \"../MapObject/MapObject.js\";\nimport { Marker } from \"../Marker/Marker.js\";\nimport { ViewBox } from \"../Map/MapOptionsInterface\";\nimport { ScreenPoint, SVGPoint } from \"../Location/Location\";\n\nconst $ = jQuery;\n\nexport class MarkerCluster extends MapObject {\n // extends MapObject\n mapsvg: MapSVGMap;\n svgPoint: SVGPoint;\n screenPoint: ScreenPoint;\n min_x: number;\n min_y: number;\n max_x: number;\n max_y: number;\n cellX: number;\n cellY: number;\n markers: Array;\n cellSize: number;\n width: number;\n elem: HTMLElement;\n visible: boolean;\n\n constructor(\n options: {\n svgPoint: SVGPoint;\n cellX: number;\n cellY: number;\n markers: Array;\n width?: number;\n cellSize?: number;\n },\n mapsvg: MapSVGMap\n ) {\n super(null, mapsvg);\n\n this.svgPoint = options.svgPoint;\n this.cellX = options.cellX; // SVG-x (not pixel-x)\n this.cellY = options.cellY; // SVG-y (not pixel-y)\n this.markers = options.markers || [];\n\n this.cellSize = 50;\n this.width = 30;\n\n const _this = this;\n\n this.elem = $('
' + this.markers.length + \"
\")[0];\n $(this.elem).data(\"cluster\", this);\n\n if (this.markers.length < 2) {\n $(this.elem).hide(); // don't show cluster at the start\n }\n\n this.adjustScreenPosition();\n }\n\n /**\n * Adds marker to the cluster.\n * @param {Marker} marker\n */\n addMarker(marker: Marker) {\n this.markers.push(marker);\n if (this.markers.length > 1) {\n if (this.markers.length === 2) {\n // this.markers[0].clusterize();\n $(this.elem).show();\n }\n if (this.markers.length === 2) {\n const x = this.markers.map(function (m) {\n return m.svgPoint.x;\n });\n this.min_x = Math.min.apply(null, x);\n this.max_x = Math.max.apply(null, x);\n\n const y = this.markers.map(function (m) {\n return m.svgPoint.y;\n });\n this.min_y = Math.min.apply(null, y);\n this.max_y = Math.max.apply(null, y);\n\n this.svgPoint.x = this.min_x + (this.max_x - this.min_x) / 2;\n this.svgPoint.y = this.min_y + (this.max_y - this.min_y) / 2;\n }\n if (this.markers.length > 2) {\n if (marker.svgPoint.x < this.min_x) {\n this.min_x = marker.svgPoint.x;\n } else if (marker.svgPoint.x > this.max_x) {\n this.max_x = marker.svgPoint.x;\n }\n if (marker.svgPoint.y < this.min_y) {\n this.min_y = marker.svgPoint.y;\n } else if (marker.svgPoint.x > this.max_x) {\n this.max_y = marker.svgPoint.y;\n }\n this.svgPoint.x = this.min_x + (this.max_x - this.min_x) / 2;\n this.svgPoint.y = this.min_y + (this.max_y - this.min_y) / 2;\n }\n // marker.clusterize();\n } else {\n this.svgPoint.x = marker.svgPoint.x;\n this.svgPoint.y = marker.svgPoint.y;\n }\n\n $(this.elem).text(this.markers.length);\n this.adjustScreenPosition();\n }\n\n /**\n * Checks if provided marker should be added into this cluster.\n * @param {MapSVG.Marker} marker\n * @returns {boolean}\n */\n canTakeMarker(marker: Marker): boolean {\n const _this = this;\n\n const screenPoint = _this.mapsvg.converter.convertSVGToPixel(marker.svgPoint);\n\n return (\n this.cellX === Math.ceil(screenPoint.x / this.cellSize) &&\n this.cellY === Math.ceil(screenPoint.y / this.cellSize)\n );\n }\n\n /**\n * Destroys the cluster\n */\n destroy() {\n // this.markers.forEach(function(marker){\n // marker.unclusterize();\n // });\n this.markers = null;\n $(this.elem).remove();\n }\n\n /**\n * Adjusts position of the cluster.\n * Called on zoom and map container resize.\n */\n adjustScreenPosition() {\n const pos = this.mapsvg.converter.convertSVGToPixel(this.svgPoint);\n\n pos.x -= this.width / 2;\n pos.y -= this.width / 2;\n\n this.setScreenPosition(pos.x, pos.y);\n }\n\n /**\n * Moves cluster by given numbers.\n *\n * @param {number} deltaX\n * @param {number} deltaY\n */\n moveSrceenPositionBy(deltaX, deltaY) {\n const oldPos = this.screenPoint,\n x = oldPos.x - deltaX,\n y = oldPos.y - deltaY;\n\n this.setScreenPosition(x, y);\n }\n\n /**\n * Set cluster position.\n *\n * @param {number} x\n * @param {number} y\n */\n setScreenPosition(x, y) {\n if (this.screenPoint instanceof ScreenPoint) {\n this.screenPoint.x = x;\n this.screenPoint.y = y;\n } else {\n this.screenPoint = new ScreenPoint(x, y);\n }\n\n this.updateVisibility();\n\n if (this.visible === true) {\n this.elem.style.transform = \"translate(\" + x + \"px,\" + y + \"px)\";\n }\n }\n\n /**\n * Check if the cluster is inside of the viewBox\n *\n * @return boolean\n */\n inViewBox() {\n const x = this.screenPoint.x,\n y = this.screenPoint.y,\n mapFullWidth = this.mapsvg.containers.map.offsetWidth,\n mapFullHeight = this.mapsvg.containers.map.offsetHeight;\n\n return (\n x - this.width / 2 < mapFullWidth &&\n x + this.width / 2 > 0 &&\n y - this.width / 2 < mapFullHeight &&\n y + this.width / 2 > 0\n );\n }\n\n /**\n * Set visibility of the marker\n *\n */\n updateVisibility() {\n if (this.inViewBox() === true) {\n this.visible = true;\n\n this.elem.classList.remove(\"mapsvg-out-of-sight\");\n } else {\n this.visible = false;\n\n this.elem.classList.add(\"mapsvg-out-of-sight\");\n }\n\n return this.visible;\n }\n\n /**\n * Get SVG bounding box of the MarkersCluster\n * @returns {*[]} - [x,y,width,height]\n */\n getBBox(): ViewBox {\n let bbox = {\n x: this.svgPoint.x,\n y: this.svgPoint.y,\n width: this.cellSize / this.mapsvg.getScale(),\n height: this.cellSize / this.mapsvg.getScale(),\n };\n bbox = $.extend(true, {}, bbox);\n\n return new ViewBox(bbox.x, bbox.y, bbox.width, bbox.height);\n }\n\n getData() {\n return this.markers.map((m) => m.object);\n }\n}\n","import { MapSVGMap } from \"../Map/Map.js\";\nimport { MapSVG } from \"../Core/globals.js\";\nimport { tinycolor } from \"../Vendor/tinycolor.js\";\nimport { MapObject } from \"../MapObject/MapObject.js\";\nimport { ViewBox } from \"../Map/MapOptionsInterface.js\";\nimport { SVGPoint } from \"../Location/Location.js\";\nimport { CustomObject } from \"../Object/CustomObject\";\nimport { ArrayIndexed } from \"../Core/ArrayIndexed\";\nimport { transform } from \"@babel/core\";\nconst $ = jQuery;\n\n/**\n * Region class. Contains a reference to an SVG element.\n * @extends MapObject\n * @param {element} SVGElement\n * @param {string} regionID - Region ID\n * @param {Map} mapsvg - MapSVG instance\n */\nexport class Region extends MapObject {\n id: string;\n title?: string;\n id_no_spaces: string;\n disabled: boolean;\n selected: boolean;\n status: number;\n default_attr: any;\n selected_attr: any;\n hover_attr: any;\n initialState: string;\n elemOriginal: SVGGraphicsElement;\n elem: SVGGraphicsElement;\n style: {\n fill?: string;\n stroke?: string;\n \"stroke-width\"?: number;\n [key: string]: string | number;\n };\n choroplethValue: number;\n customAttrs: Array;\n fill?: string;\n center?: SVGPoint;\n label: HTMLElement;\n bubble: HTMLElement;\n data: CustomObject;\n\n gaugeValue: number;\n\n constructor(element: SVGElement, mapsvg: MapSVGMap) {\n super(element, mapsvg);\n this.id = this.element.getAttribute(\"id\");\n if (this.id && this.mapsvg.options.regionPrefix) {\n this.setId(this.id.replace(this.mapsvg.options.regionPrefix, \"\"));\n }\n\n this.id_no_spaces = this.id.replace(/\\s/g, \"_\");\n\n this.element.setAttribute(\"class\", (this.element.className || \"\") + \" mapsvg-region\");\n\n this.setStyleInitial();\n\n const regionOptions =\n this.mapsvg.options.regions && this.mapsvg.options.regions[this.id]\n ? this.mapsvg.options.regions[this.id]\n : null;\n\n this.disabled = this.getDisabledState();\n this.disabled && this.attr(\"class\", this.attr(\"class\") + \" mapsvg-disabled\");\n\n this.default_attr = {};\n this.selected_attr = {};\n this.hover_attr = {};\n let selected = false;\n if (regionOptions && regionOptions.selected) {\n selected = true;\n delete regionOptions.selected;\n }\n regionOptions && this.update(regionOptions);\n this.setFill();\n if (selected) {\n this.setSelected();\n }\n this.saveState();\n }\n\n adjustStroke(scale: number): void {\n $(this.element).css({ \"stroke-width\": this.style[\"stroke-width\"] / scale });\n }\n\n /**\n * Sets initial style of a Region, computed from SVG\n * @private\n */\n setStyleInitial(): void {\n this.style = { fill: this.getComputedStyle(\"fill\") };\n this.style.stroke = this.getComputedStyle(\"stroke\") || \"\";\n let w;\n w = this.getComputedStyle(\"stroke-width\");\n w = w ? w.replace(\"px\", \"\") : \"1\";\n w = parseFloat(w);\n this.style[\"stroke-width\"] = w;\n $(this.element).attr(\"data-stroke-width\", w);\n }\n /**\n * Save state of a Region (all parameters)\n * @private\n */\n saveState(): void {\n this.initialState = JSON.stringify(this.getOptions());\n }\n /**\n * Returns SVG bounding box of the Region\n * @returns {[number,number,number,number]} - [x,y,width,height]\n */\n getBBox(): ViewBox {\n // @ts-ignore\n const _bbox = this.element.getBBox();\n const bbox = new ViewBox(_bbox.x, _bbox.y, _bbox.width, _bbox.height);\n\n // @ts-ignore (TS doesn't recognize getTransformToElement() method from SVGGraphicsElement)\n const matrix = this.element.getTransformToElement(this.mapsvg.containers.svg);\n if (!matrix) {\n return _bbox;\n }\n\n const x2 = bbox.x + bbox.width;\n const y2 = bbox.y + bbox.height;\n\n // transform a point using the transformed matrix\n let position = this.mapsvg.containers.svg.createSVGPoint();\n position.x = bbox.x;\n position.y = bbox.y;\n position = position.matrixTransform(matrix);\n bbox.x = position.x;\n bbox.y = position.y;\n // var position = this.mapsvg.containers.svg.createSVGPoint();\n position.x = x2;\n position.y = y2;\n position = position.matrixTransform(matrix);\n bbox.width = position.x - bbox.x;\n bbox.height = position.y - bbox.y;\n\n return bbox;\n }\n /**\n * Checks whether the Region was changed from the initial state\n * @returns {boolean}\n * @private\n */\n changed(): boolean {\n return JSON.stringify(this.getOptions()) != this.initialState;\n }\n /**\n * Saves a copy of the Region SVG elem.\n * Used in Map Editor by \"Edit SVG file\" mode.\n * @private\n */\n edit(): void {\n this.elemOriginal = $(this.element).clone()[0];\n }\n /**\n * Deletes the copy of the Region SVG elem created by .edit() method.\n * Used in Map Editor by \"Edit SVG file\" mode.\n * @private\n */\n editCommit(): void {\n this.elemOriginal = null;\n }\n /**\n * Restores SVG elem.\n * Used in Map Editor by \"Edit SVG file\" mode.\n * @private\n */\n editCancel(): void {\n this.mapsvg.containers.svg.appendChild(this.elemOriginal);\n this.element = this.elemOriginal;\n this.elemOriginal = null;\n }\n /**\n * Returns Region properties\n * @param {boolean} forTemplate - adds special properties for use in a template\n * @returns {object}\n */\n getOptions(forTemplate?: boolean): { [key: string]: any } {\n let o: any;\n o = {\n id: this.id,\n id_no_spaces: this.id_no_spaces,\n title: this.title,\n fill: this.mapsvg.options.regions[this.id] && this.mapsvg.options.regions[this.id].fill,\n data: this.data,\n choroplethValue: this.choroplethValue,\n };\n if (forTemplate) {\n o.disabled = this.disabled;\n }\n for (const key in o) {\n if (typeof o[key] === \"undefined\") {\n delete o[key];\n }\n }\n if (this.customAttrs) {\n const that = this;\n this.customAttrs.forEach(function (attr) {\n o[attr] = that[attr];\n });\n }\n return o;\n }\n /**\n * Returns an object with properties of the Region formatted for a template\n * @returns {object}\n */\n forTemplate(): any {\n const data = {\n id: this.id,\n title: this.title,\n objects: this.objects,\n data: this.data,\n };\n if (this.data) {\n for (const key in this.data) {\n if (key != \"title\" && key != \"id\") data[key] = this.data[key];\n }\n }\n\n return data;\n }\n getData(): any {\n return this.forTemplate();\n }\n /**\n * Updates the Region\n * @param {object} options\n *\n * @example\n * var region = mapsvg.getRegion(\"US-TX\");\n * region.update({\n * fill: \"#FF3322\"\n * });\n */\n update(options): void {\n for (const key in options) {\n // check if there's a setter for a property\n const setter = \"set\" + MapSVG.ucfirst(key);\n if (setter in this) this[setter](options[key]);\n else {\n this[key] = options[key];\n this.customAttrs = this.customAttrs || [];\n this.customAttrs.push(key);\n }\n }\n }\n /**\n * Sets Title of the Region\n * @param {string} title\n */\n setTitle(title?: string): void {\n if (title) {\n this.title = title;\n }\n\n this.element.setAttribute(\"title\", this.title);\n }\n\n /**\n * Sets CSS style of the Region\n * @param {object} style - CSS-format styles\n * @private\n */\n setStyle(style: any): void {\n $.extend(true, this.style, style);\n this.setFill();\n }\n\n /**\n * Returns color of the Region for choropleth map\n * @returns {string} color\n */\n getChoroplethColor() {\n const o = this.mapsvg.options.choropleth;\n let color = \"\";\n\n if (\n this.data &&\n (this.data[this.mapsvg.options.regionChoroplethField] ||\n this.data[this.mapsvg.options.regionChoroplethField] === 0)\n ) {\n const w =\n o.maxAdjusted === 0\n ? 0\n : (parseFloat(this.data[this.mapsvg.options.regionChoroplethField]) - o.min) /\n o.maxAdjusted;\n\n const c = {\n r: Math.round(o.colors.diffRGB.r * w + o.colors.lowRGB.r),\n g: Math.round(o.colors.diffRGB.g * w + o.colors.lowRGB.g),\n b: Math.round(o.colors.diffRGB.b * w + o.colors.lowRGB.b),\n a: (o.colors.diffRGB.a * w + o.colors.lowRGB.a).toFixed(2),\n };\n color = \"rgba(\" + c.r + \",\" + c.g + \",\" + c.b + \",\" + c.a + \")\";\n } else {\n color = o.colors.noData;\n }\n\n return color;\n }\n\n _new_getChoroplethColor() {\n let regionValue = parseFloat(this.data[this.mapsvg.options.choropleth.sourceField]),\n color;\n\n if (!regionValue) {\n color = this.mapsvg.options.choropleth.coloring.noData.color;\n } else if (this.mapsvg.options.choropleth.coloring.mode === \"gradient\") {\n // Gradient mode\n const gradient = this.mapsvg.options.choropleth.coloring.gradient,\n w =\n gradient.values.maxAdjusted === 0\n ? 0\n : (regionValue - gradient.values.min) / gradient.values.maxAdjusted,\n r = Math.round(gradient.colors.diffRGB.r * w + gradient.colors.lowRGB.r),\n g = Math.round(gradient.colors.diffRGB.g * w + gradient.colors.lowRGB.g),\n b = Math.round(gradient.colors.diffRGB.b * w + gradient.colors.lowRGB.b),\n a = (gradient.colors.diffRGB.a * w + gradient.colors.lowRGB.a).toFixed(2);\n\n color = \"rgba(\" + r + \",\" + g + \",\" + b + \",\" + a + \")\";\n } else {\n // Palette mode\n const paletteColors = this.mapsvg.options.choropleth.coloring.palette.colors;\n\n if (!paletteColors[0].valueFrom && regionValue < paletteColors[0].valueTo) {\n color = paletteColors[0].color;\n } else if (\n !paletteColors[paletteColors.length - 1].valueTo &&\n regionValue > paletteColors[paletteColors.length - 1].valueFrom\n ) {\n color = paletteColors[paletteColors.length - 1].color;\n } else {\n paletteColors.forEach(function (paletteColor) {\n if (\n regionValue >= paletteColor.valueFrom &&\n regionValue < paletteColor.valueTo\n ) {\n color = paletteColor.color;\n }\n });\n\n color = color\n ? color\n : this.mapsvg.options.choropleth.coloring.palette.outOfRange.color;\n }\n }\n\n return color;\n }\n\n /**\n * Returns size of the choropleth bubble\n */\n getBubbleSize() {\n let bubbleSize;\n\n if (this.data[this.mapsvg.options.choropleth.sourceField]) {\n const maxBubbleSize = Number(this.mapsvg.options.choropleth.bubbleSize.max),\n minBubbleSize = Number(this.mapsvg.options.choropleth.bubbleSize.min),\n maxSourceFieldvalue = this.mapsvg.options.choropleth.coloring.gradient.values.max,\n minSourceFieldvalue = this.mapsvg.options.choropleth.coloring.gradient.values.min,\n sourceFieldvalue = parseFloat(\n this.data[this.mapsvg.options.choropleth.sourceField]\n );\n\n bubbleSize =\n ((sourceFieldvalue - minSourceFieldvalue) /\n (maxSourceFieldvalue - minSourceFieldvalue)) *\n (maxBubbleSize - minBubbleSize) +\n minBubbleSize;\n } else {\n bubbleSize = false;\n }\n\n return bubbleSize;\n }\n /**\n * Sets fill color of the Region\n * @param {string} fill - color in a CSS format\n * @example\n * region.setFill(\"#FF2233\");\n * region.setFill(\"rgba(255,255,100,0.5\");\n */\n setFill(fill?: string) {\n if (this.mapsvg.options.colorsIgnore) {\n $(this.element).css(this.style);\n return;\n }\n\n if (fill) {\n const regions = {};\n regions[this.id] = { fill: fill };\n $.extend(true, this.mapsvg.options, { regions: regions });\n } else if (\n !fill &&\n fill !== undefined &&\n this.mapsvg.options.regions &&\n this.mapsvg.options.regions[this.id] &&\n this.mapsvg.options.regions[this.id].fill\n ) {\n delete this.mapsvg.options.regions[this.id].fill;\n }\n\n // Priority: choropleth > status > options.fill > disabled > base > svg\n if (\n this.mapsvg.options.choropleth.on\n // TODO: choropleth new\n // &&\n // this.mapsvg.options.choropleth.source === \"regions\" &&\n // this.mapsvg.options.choropleth.sourceField &&\n // this.mapsvg.options.choropleth.bubbleMode === false &&\n // this.data &&\n // typeof this.data[this.mapsvg.options.choropleth.sourceField] !== \"undefined\"\n ) {\n this.default_attr[\"fill\"] = this.getChoroplethColor();\n } else if (\n this.status !== undefined &&\n this.mapsvg.regions &&\n this.mapsvg.regionsRepository.getSchema().getFieldByType(\"status\") &&\n this.mapsvg.regionsRepository.getSchema().getFieldByType(\"status\").optionsDict &&\n this.mapsvg.regionsRepository.getSchema().getFieldByType(\"status\").optionsDict[\n this.status\n ] &&\n this.mapsvg.regionsRepository.getSchema().getFieldByType(\"status\").optionsDict[\n this.status\n ].color\n ) {\n this.default_attr[\"fill\"] = this.mapsvg.regionsRepository\n .getSchema()\n .getFieldByType(\"status\").optionsDict[this.status].color;\n } else if (\n this.mapsvg.options.regions[this.id] &&\n this.mapsvg.options.regions[this.id].fill\n ) {\n this.default_attr[\"fill\"] = this.mapsvg.options.regions[this.id].fill;\n\n // }else if(this.disabled && this.mapsvg.options.colors.disabled){\n // this.default_attr['fill'] = this.mapsvg.options.colors.disabled;\n } else if (this.mapsvg.options.colors.base) {\n this.default_attr[\"fill\"] = this.mapsvg.options.colors.base;\n } else if (this.style.fill != \"none\") {\n this.default_attr[\"fill\"] = this.style.fill\n ? this.style.fill\n : this.mapsvg.options.colors.baseDefault;\n } else {\n this.default_attr[\"fill\"] = \"none\";\n }\n\n if (MapSVG.isNumber(this.mapsvg.options.colors.selected))\n this.selected_attr[\"fill\"] = tinycolor(this.default_attr.fill)\n .lighten(parseFloat(\"\" + this.mapsvg.options.colors.selected))\n .toRgbString();\n else this.selected_attr[\"fill\"] = this.mapsvg.options.colors.selected;\n\n if (MapSVG.isNumber(this.mapsvg.options.colors.hover))\n this.hover_attr[\"fill\"] = tinycolor(this.default_attr.fill)\n .lighten(parseFloat(\"\" + this.mapsvg.options.colors.hover))\n .toRgbString();\n else this.hover_attr[\"fill\"] = this.mapsvg.options.colors.hover;\n\n $(this.element).css(\"fill\", this.default_attr[\"fill\"]);\n this.fill = this.default_attr[\"fill\"];\n\n if (this.style.stroke != \"none\" && this.mapsvg.options.colors.stroke != undefined) {\n $(this.element).css(\"stroke\", this.mapsvg.options.colors.stroke);\n } else {\n const s = this.style.stroke == undefined ? \"\" : this.style.stroke;\n $(this.element).css(\"stroke\", s);\n }\n\n if (this.selected) this.setSelected();\n }\n /**\n * Disables the Region.\n * @param {boolean} on - true/false = disable/enable\n * @param {boolean} skipSetFill - If false, color of the Region will not be changed\n */\n setDisabled(on?: boolean, skipSetFill?: boolean) {\n on = on !== undefined ? MapSVG.parseBoolean(on) : this.getDisabledState(); // get default disabled state if undefined\n const prevDisabled = this.disabled;\n this.disabled = on;\n this.attr(\"class\", this.attr(\"class\").replace(\"mapsvg-disabled\", \"\"));\n if (on) {\n this.attr(\"class\", this.attr(\"class\") + \" mapsvg-disabled\");\n }\n if (this.disabled != prevDisabled) this.mapsvg.deselectRegion(this);\n !skipSetFill && this.setFill();\n }\n /**\n * Sets status of the Region.\n * Takes the list of statuses from global MapSVG options.\n * @param {number} status\n */\n setStatus(status: number) {\n const statusOptions =\n this.mapsvg.options.regionStatuses && this.mapsvg.options.regionStatuses[status];\n if (statusOptions) {\n this.status = status;\n if (this.data) {\n this.data.status = status;\n this.data.status_text = statusOptions.label;\n }\n this.setDisabled(statusOptions.disabled, true);\n } else {\n this.status = undefined;\n if (this.data) {\n this.data.status = undefined;\n this.data.status_text = undefined;\n }\n this.setDisabled(false, true);\n }\n this.setFill();\n }\n /**\n * Selects the Region.\n */\n setSelected() {\n this.mapsvg.selectRegion(this);\n }\n /**\n * Set Region choropleth value. Used to calculate color of the Region.\n * @param {number} val\n */\n setchoroplethValue(val: number) {\n if ($.isNumeric(val)) {\n if (typeof val === \"string\") {\n val = parseFloat(val);\n }\n this.choroplethValue = val;\n } else {\n this.choroplethValue = undefined;\n }\n }\n /**\n * Checks if Region should be disabled\n * @param {boolean} asDefault\n * @returns {boolean}\n */\n getDisabledState(asDefault?: boolean): boolean {\n const opts = this.mapsvg.options.regions[this.id];\n if (!asDefault && opts && opts.disabled !== undefined) {\n return opts.disabled;\n } else {\n return (\n this.mapsvg.options.disableAll ||\n this.style.fill === \"none\" ||\n this.id == \"labels\" ||\n this.id == \"Labels\"\n );\n }\n }\n /**\n * Highlight the Region.\n * Used on mouseover.\n */\n highlight() {\n $(this.element).css({ fill: this.hover_attr.fill });\n $(this.element).addClass(\"mapsvg-region-hover\");\n }\n /**\n * Unhighlight the Region.\n * Used on mouseout.\n */\n unhighlight() {\n $(this.element).css({ fill: this.default_attr.fill });\n $(this.element).removeClass(\"mapsvg-region-hover\");\n }\n /**\n * Select the Region.\n */\n select() {\n $(this.element).css({ fill: this.selected_attr.fill });\n this.selected = true;\n $(this.element).addClass(\"mapsvg-region-active\");\n }\n /**\n * Deselect the Region.\n */\n deselect() {\n $(this.element).css({ fill: this.default_attr.fill });\n this.selected = false;\n $(this.element).removeClass(\"mapsvg-region-active\");\n }\n\n /**\n * Adds custom data loaded from server\n * @param {object} data - Any set of {key:value} pairs\n */\n setData(data: CustomObject) {\n this.data = data;\n if (typeof data.title !== \"undefined\") {\n this.setTitle(data.title);\n }\n }\n\n /**\n * Draw a choropleth bubble for the region\n */\n drawBubble() {\n if (this.data) {\n const bubbleId = \"mapsvg-bubble-\" + this.id;\n const bubbleValue = parseFloat(this.data[this.mapsvg.options.choropleth.sourceField]);\n\n if (bubbleValue) {\n if (!this.center) {\n this.center = this.getCenterSVG();\n }\n\n const pos = this.mapsvg.converter.convertSVGToPixel(this.center);\n\n if (!this.bubble) {\n this.bubble = $(\n '
'\n )[0];\n $(this.mapsvg.layers.bubbles).append(this.bubble);\n }\n\n const color = this.getChoroplethColor();\n const bubbleSize = Number(this.getBubbleSize());\n\n $(this.bubble)\n .css(\n \"transform\",\n \"translate(-50%,-50%) translate(\" + pos.x + \"px,\" + pos.y + \"px)\"\n )\n .css(\"background-color\", color)\n .css(\"width\", bubbleSize + \"px\")\n .css(\"height\", bubbleSize + \"px\")\n .css(\"lineHeight\", bubbleSize - 2 + \"px\");\n } else {\n delete this.bubble;\n }\n }\n }\n\n /**\n * Adjust position of Region Label\n *\n */\n adjustLabelScreenPosition() {\n if (this.label) {\n if (!this.center) {\n this.center = this.getCenterSVG();\n }\n\n const pos = this.mapsvg.converter.convertSVGToPixel(this.center),\n x = pos.x - this.label.offsetWidth / 2,\n y = pos.y - this.label.offsetHeight / 2;\n\n this.setLabelScreenPosition(x, y);\n }\n }\n\n /**\n * Adjust position of Region bubble\n *\n */\n adjustBubbleScreenPosition() {\n if (this.bubble) {\n if (!this.center) {\n this.center = this.getCenterSVG();\n }\n\n const pos = this.mapsvg.converter.convertSVGToPixel(this.center),\n x = pos.x - this.bubble.offsetWidth / 2,\n y = pos.y - this.bubble.offsetHeight / 2;\n\n this.setBubbleScreenPosition(x, y);\n }\n }\n\n /**\n * Set position of Region Label by given numbers\n *\n * @param {number} deltaX\n * @param {number} deltaY\n */\n moveLabelScreenPositionBy(deltaX, deltaY) {\n if (this.label) {\n const labelStyle = window.getComputedStyle(this.label),\n matrix = labelStyle.transform || labelStyle.webkitTransform,\n matrixValues = matrix.match(/matrix.*\\((.+)\\)/)[1].split(\", \"),\n x = parseFloat(matrixValues[4]) - deltaX,\n y = parseFloat(matrixValues[5]) - deltaY;\n\n this.setLabelScreenPosition(x, y);\n }\n }\n\n /**\n * Set position of Region bubble by given numbers\n *\n * @param {number} deltaX\n * @param {number} deltaY\n */\n moveBubbleScreenPositionBy(deltaX, deltaY) {\n if (this.bubble) {\n const labelStyle = window.getComputedStyle(this.bubble),\n matrix = labelStyle.transform || labelStyle.webkitTransform,\n matrixValues = matrix.match(/matrix.*\\((.+)\\)/)[1].split(\", \"),\n x = parseFloat(matrixValues[4]) - deltaX,\n y = parseFloat(matrixValues[5]) - deltaY;\n\n this.setBubbleScreenPosition(x, y);\n }\n }\n\n /**\n * Set position of Region Labels by given numbers\n *\n * @param {number} x\n * @param {number} y\n */\n setLabelScreenPosition(x, y) {\n if (this.label) {\n this.label.style.transform = \"translate(\" + x + \"px,\" + y + \"px)\";\n }\n }\n\n /**\n * Set position of Region bubble by given numbers\n *\n * @param {number} x\n * @param {number} y\n */\n setBubbleScreenPosition(x, y) {\n if (this.bubble) {\n this.bubble.style.transform = \"translate(\" + x + \"px,\" + y + \"px)\";\n }\n }\n}\n","import { Repository } from \"../../Core/Repository\";\nimport { Schema } from \"./Schema\";\nimport { MapSVGMap } from \"../../Map/Map\";\nimport { Events } from \"../../Core/Events\";\n\nexport class SchemaRepository extends Repository {\n constructor() {\n const objectName = \"schema\";\n super(objectName, +objectName + \"s\");\n this.className = \"Schema\";\n this.objectNameSingle = objectName;\n this.objectNameMany = objectName + \"s\";\n this.path = objectName + \"s/\";\n this.events = new Events(this);\n }\n\n create(schema: Schema): JQueryDeferred {\n const defer = jQuery.Deferred();\n defer.promise();\n\n const data = {};\n data[this.objectNameSingle] = this.encodeData(schema);\n\n this.server\n .post(this.path, data)\n .done((response: string) => {\n const data = this.decodeData(response);\n schema.id = data[this.objectNameSingle].id;\n this.objects.push(schema);\n\n this.events.trigger(\"created\");\n schema.events.trigger(\"created\");\n\n defer.resolve(schema);\n })\n .fail(() => {\n defer.reject();\n });\n\n return defer;\n }\n\n update(schema: Schema): JQueryDeferred {\n const defer = jQuery.Deferred();\n defer.promise();\n\n const data = {};\n data[this.objectNameSingle] = this.encodeData(schema);\n\n this.server\n .put(this.path + schema.id, data)\n .done((response: string) => {\n const data = this.decodeData(response);\n this.objects.push(schema);\n defer.resolve(schema);\n\n this.events.trigger(\"changed\");\n schema.events.trigger(\"changed\");\n })\n .fail(() => {\n defer.reject();\n });\n return defer;\n }\n\n encodeData(schema: Schema): { [key: string]: any } {\n const _schema = schema.getData();\n\n let fieldsJsonString = JSON.stringify(_schema);\n fieldsJsonString = fieldsJsonString.replace(/select/g, \"!mapsvg-encoded-slct\");\n fieldsJsonString = fieldsJsonString.replace(/table/g, \"!mapsvg-encoded-tbl\");\n fieldsJsonString = fieldsJsonString.replace(/database/g, \"!mapsvg-encoded-db\");\n fieldsJsonString = fieldsJsonString.replace(/varchar/g, \"!mapsvg-encoded-vc\");\n fieldsJsonString = fieldsJsonString.replace(/int\\(11\\)/g, \"!mapsvg-encoded-int\");\n\n const back = JSON.parse(fieldsJsonString);\n back.fields = JSON.stringify(_schema.fields);\n\n return back;\n }\n}\n","/**\n * Abstract class. Creates a scrollable controller. Extended by {@link #mapsvgpopovercontroller|PopoverController} / {@link #mapsvgdetailscontroller|DetailsController} / {@link #mapsvgdirectorycontroller|DirectoryController}\n * @abstract\n * @constructor\n * @param {object} options - List of options\n */\nimport { MapSVG } from \"./globals.js\";\nimport { MapSVGMap } from \"../Map/Map\";\n// import {Handlebars} from \"../../handlebars.js\"\n// @ts-ignore\nimport Handlebars from \"Handlebars\";\nimport { ResizeSensor } from \"./ResizeSensor.js\";\nimport { Events } from \"./Events.js\";\nconst $ = jQuery;\n\nexport class Controller {\n containers: {\n main: HTMLElement;\n view?: HTMLElement;\n toolbar?: HTMLElement;\n contentWrap?: HTMLElement;\n contentWrap2?: HTMLElement;\n contentView?: HTMLElement;\n sizer?: HTMLElement;\n };\n mapsvg: MapSVGMap;\n name: string;\n template: Function;\n scrollable: boolean;\n withToolbar: boolean;\n autoresize: boolean;\n templates: {\n toolbar: Function;\n main: Function;\n };\n data: { [key: string]: any };\n width: string;\n color: string;\n // container: HTMLElement;\n // contentWrap: HTMLElement;\n // contentWrap2: HTMLElement;\n // view: HTMLElement;\n // contentView: HTMLElement;\n // contentSizer: HTMLElement;\n // toolbarView: HTMLElement;\n resizeSensor: ResizeSensor;\n noPadding: boolean;\n events: Events;\n\n constructor(options: { [key: string]: any }) {\n this.containers = {\n main: options.container,\n };\n this.mapsvg = options.mapsvg;\n this.template = options.template || \"\";\n this.scrollable = options.scrollable === undefined ? true : options.scrollable;\n this.withToolbar = options.withToolbar === undefined ? true : options.withToolbar;\n this.autoresize = MapSVG.parseBoolean(options.autoresize);\n this.templates = {\n toolbar: Handlebars.compile(this.getToolbarTemplate()),\n main: Handlebars.compile(this.getMainTemplate()),\n };\n this.data = options.data;\n this.width = options.width;\n this.color = options.color;\n this.events = new Events(this);\n if (options.events) {\n for (const eventName in options.events) {\n if (typeof options.events[eventName] === \"function\") {\n this.events.on(eventName, options.events[eventName]);\n }\n }\n }\n //this._init();\n }\n\n /**\n * This method fires when the view is fully loaded. Can be used to do any final actions.\n * @method\n */\n viewDidLoad() {\n const _this = this;\n _this.updateScroll();\n if (this.autoresize) {\n _this.adjustHeight();\n this.resizeSensor.setScroll();\n }\n }\n\n /**\n * This method cannot be overriden and it fires always for all child classes.\n * @private\n */\n _viewDidLoad() {\n this.updateScroll();\n }\n\n /**\n * Fires when the view appears after being hidden.\n * Should be overriden by a child class.\n * @abstract\n */\n viewDidAppear() {}\n\n /**\n * This method fires when the view disappears.\n * Should be overriden by a child class.\n * @abstract\n */\n viewDidDisappear() {}\n\n /**\n * Updates the size of the scrollable container. Automatically fires when window size or content size changes.\n */\n updateScroll() {\n if (!this.scrollable) return;\n const _this = this;\n $(this.containers.contentWrap).nanoScroller({\n preventPageScrolling: true,\n // iOSNativeScrolling: true,\n });\n setTimeout(function () {\n $(_this.containers.contentWrap).nanoScroller({\n preventPageScrolling: true,\n // iOSNativeScrolling: true,\n });\n }, 300);\n }\n\n /**\n * Adjusts height of the container to fit content.\n */\n adjustHeight() {\n const _this = this;\n $(_this.containers.main).height(\n $(_this.containers.main).find(\".mapsvg-auto-height\").outerHeight() +\n (_this.containers.toolbar ? $(_this.containers.toolbar).outerHeight() : 0)\n );\n }\n\n /**\n * Initialization actions for all child classes. Should not be overriden.\n * @private\n */\n _init() {\n const _this = this;\n _this.render();\n _this.init();\n }\n\n /**\n * Initialization actions. Empty method. Can be overriden by child classes.\n */\n init() {}\n\n /**\n * This method must be overriden by a child class and return an HTML code for the toolbar.\n */\n getToolbarTemplate() {\n return \"\";\n }\n\n /**\n * Sets the template for the body\n */\n setMainTemplate(template: any) {\n return (this.templates.main = Handlebars.compile(template));\n }\n\n /**\n * This method must be overriden by a child class and to return an HTML code for the main content\n */\n getMainTemplate() {\n return this.template;\n }\n\n /**\n * Renders the content.\n */\n render() {\n const _this = this;\n this.containers.view = $(\"
\")\n .attr(\"id\", \"mapsvg-controller-\" + this.name)\n .addClass(\"mapsvg-controller-view\")[0];\n\n // Wrap cointainer, includes scrollable container\n this.containers.contentWrap = $(\"
\").addClass(\"mapsvg-controller-view-wrap\")[0];\n this.containers.contentWrap2 = $(\"
\")[0];\n\n // Scrollable container\n this.containers.sizer = $(\"
\").addClass(\"mapsvg-auto-height\")[0];\n this.containers.contentView = $(\"
\").addClass(\"mapsvg-controller-view-content\")[0];\n this.containers.sizer.appendChild(this.containers.contentView);\n\n if (this.scrollable) {\n $(this.containers.contentWrap).addClass(\"nano\");\n $(this.containers.contentWrap2).addClass(\"nano-content\");\n }\n this.containers.contentWrap.appendChild(this.containers.contentWrap2);\n this.containers.contentWrap2.appendChild(this.containers.sizer);\n\n // Add toolbar if it exists in template file\n if (this.withToolbar && this.templates.toolbar) {\n this.containers.toolbar = $(\"
\").addClass(\"mapsvg-controller-view-toolbar\")[0];\n this.containers.view.appendChild(this.containers.toolbar);\n }\n\n this.containers.view.append(this.containers.contentWrap);\n\n // Add view into container\n this.containers.main.appendChild(this.containers.view);\n $(this.containers.main).data(\"controller\", this);\n\n if (this.width) this.containers.view.style.width = this.width;\n if (this.color) this.containers.view.style[\"background-color\"] = this.color;\n\n _this.viewReadyToFill();\n this.redraw();\n\n setTimeout(function () {\n _this._viewDidLoad();\n _this.viewDidLoad();\n _this.setEventHandlersCommon();\n _this.setEventHandlers();\n }, 1);\n }\n\n /**\n * Fires right before rendering starts.\n */\n viewReadyToFill() {\n const _this = this;\n if (_this.autoresize) {\n _this.resizeSensor = new ResizeSensor(this.containers.sizer, () => {\n _this.adjustHeight();\n _this.updateScroll();\n _this.events.trigger(\"resize\", this, [this]);\n });\n }\n }\n\n /**\n * Redraws the container.\n */\n redraw(data?: { [key: string]: any }) {\n if (data !== undefined) {\n this.data = data;\n }\n\n try {\n $(this.containers.contentView).html(this.templates.main(this.data));\n } catch (err) {\n console.error(err);\n $(this.containers.contentView).html(\"\");\n }\n\n if (this.withToolbar && this.templates.toolbar)\n $(this.containers.toolbar).html(this.templates.toolbar(this.data));\n\n this.updateTopShift();\n\n if (this.noPadding) this.containers.contentView.style.padding = \"0\";\n\n this.updateScroll();\n }\n\n /**\n * Updates top shift of the main container depending on toolbar height\n */\n updateTopShift() {\n const _this = this;\n if (!this.withToolbar) return;\n // bad, i know.\n $(_this.containers.contentWrap).css({\n top: $(_this.containers.toolbar).outerHeight(true) + \"px\",\n });\n setTimeout(function () {\n $(_this.containers.contentWrap).css({\n top: $(_this.containers.toolbar).outerHeight(true) + \"px\",\n });\n }, 100);\n setTimeout(function () {\n $(_this.containers.contentWrap).css({\n top: $(_this.containers.toolbar).outerHeight(true) + \"px\",\n });\n }, 200);\n setTimeout(function () {\n $(_this.containers.contentWrap).css({\n top: $(_this.containers.toolbar).outerHeight(true) + \"px\",\n });\n _this.updateScroll();\n }, 500);\n }\n\n /**\n * Set common event handlers for all child classes\n */\n setEventHandlersCommon() {}\n\n /**\n * Set event handlers. Can be overriden by a child class.\n */\n setEventHandlers() {}\n\n /**\n * Destroys the controller.\n */\n destroy() {\n delete this.resizeSensor;\n $(this.containers.view).empty().remove();\n }\n}\n","/**\n * Creates a container with a list of objects near the map\n * @class\n * @extends Controller\n * @param options - List of options\n *\n * @example\n * var directory = mapsvg.controllers.directory;\n *\n * // Toggle map/list view on mobile devices\n * if(MapSVG.isPhone){\n * directory.toggle(true); // show directory\n * }\n */\nimport { Controller } from \"../Core/Controller.js\";\nimport { MapSVG } from \"../Core/globals.js\";\nimport { RepositoryInterface } from \"../Core/Repository.js\";\nimport { CustomObject } from \"../Object/CustomObject.js\";\nimport { Region } from \"../Region/Region.js\";\nconst $ = jQuery;\n\nexport class DirectoryController extends Controller {\n repository: RepositoryInterface;\n position: string;\n search: string;\n menuBtn: HTMLElement;\n mapBtn: HTMLElement;\n mobileButtons: HTMLElement;\n\n constructor(options: { [key: string]: any }) {\n super(options);\n this.repository = options.repository;\n this.noPadding = true;\n this.position = options.position;\n this.search = options.search;\n //this._init();\n }\n\n /**\n * Returns a HTML content for the Directory toolbar\n * @returns {string} HTML content\n */\n getToolbarTemplate() {\n let t = '
';\n t += '
';\n t += \"
\";\n t += \"
\";\n return t;\n }\n\n /**\n * Does all required actions when the view is loaded: adds mobile buttons for mobile devices.\n * @private\n */\n viewDidLoad() {\n const _this = this;\n this.menuBtn = $(\n '
' +\n this.mapsvg.options.mobileView.labelList +\n \"
\"\n )[0];\n this.mapBtn = $(\n '
' +\n this.mapsvg.options.mobileView.labelMap +\n \"
\"\n )[0];\n\n // Make directory hidden by default on mobiles\n if (MapSVG.isPhone && _this.mapsvg.options.menu.hideOnMobile) {\n if (this.mapsvg.options.menu.showFirst == \"map\") {\n this.toggle(false);\n } else {\n this.toggle(true);\n }\n }\n\n this.mobileButtons = $('
')[0];\n this.mobileButtons.append(this.menuBtn, this.mapBtn);\n\n if (this.mapsvg.options.menu.on !== false) {\n this.mapsvg.containers.wrapAll.appendChild(this.mobileButtons);\n }\n\n this.events.trigger(\"shown\", this.containers.view);\n }\n\n setEventHandlers() {\n const _this = this;\n\n $(window).on(\"resize\", function () {\n _this.updateTopShift();\n });\n\n $(this.menuBtn).on(\"click\", function () {\n _this.toggle(true);\n });\n $(this.mapBtn).on(\"click\", function () {\n _this.toggle(false);\n _this.mapsvg.redraw();\n });\n\n $(this.containers.view)\n .on(\"click.menu.mapsvg\", \".mapsvg-directory-item\", function (e) {\n if (e.target.nodeName == \"A\") {\n return;\n }\n // e.preventDefault();\n\n const objID = $(this).data(\"object-id\");\n\n let regions;\n let marker;\n let detailsViewObject;\n let eventObject;\n\n _this.deselectItems();\n _this.selectItems(objID, false);\n\n if (MapSVG.isPhone && _this.mapsvg.options.menu.showMapOnClick) {\n _this.toggle(false);\n }\n\n if (_this.mapsvg.options.menu.source == \"regions\") {\n regions = [_this.mapsvg.getRegion(objID)];\n eventObject = regions[0];\n detailsViewObject = regions[0];\n } else {\n detailsViewObject = _this.repository.getLoadedObject(objID);\n eventObject = detailsViewObject;\n const _regions = detailsViewObject.getRegions(\n _this.mapsvg.regionsRepository.schema.name\n );\n if (_regions) {\n regions = _regions\n .map(function (region) {\n return _this.mapsvg.getRegion(region.id);\n })\n .filter(function (r) {\n return r !== undefined;\n });\n }\n }\n\n if (detailsViewObject.location && detailsViewObject.location.marker)\n marker = detailsViewObject.location.marker;\n\n if (_this.mapsvg.options.actions.directoryItem.click.showDetails) {\n _this.mapsvg.loadDetailsView(detailsViewObject);\n }\n\n if (regions && regions.length > 0) {\n if (_this.mapsvg.options.actions.directoryItem.click.zoom) {\n _this.mapsvg.zoomTo(\n regions,\n _this.mapsvg.options.actions.directoryItem.click.zoomToLevel\n );\n }\n\n if (regions.length > 1) {\n _this.mapsvg.setMultiSelect(true);\n }\n regions.forEach(function (region) {\n const center = region.getCenter();\n e.clientX = center[0];\n e.clientY = center[1];\n\n if (_this.mapsvg.options.actions.directoryItem.click.selectRegion) {\n //region.setSelected(true);\n _this.mapsvg.selectRegion(region, true);\n }\n if (_this.mapsvg.options.actions.directoryItem.click.showRegionPopover) {\n if (_this.mapsvg.options.actions.directoryItem.click.zoom) {\n setTimeout(function () {\n _this.mapsvg.showPopover(region);\n }, 500);\n } else {\n _this.mapsvg.showPopover(region);\n }\n }\n if (_this.mapsvg.options.actions.directoryItem.click.fireRegionOnClick) {\n _this.mapsvg.events.trigger(\"click.region\", region, [region]);\n }\n });\n if (regions.length > 1) {\n _this.mapsvg.setMultiSelect(false, false);\n }\n }\n if (marker) {\n if (_this.mapsvg.options.actions.directoryItem.click.zoomToMarker) {\n _this.mapsvg.zoomTo(\n marker,\n _this.mapsvg.options.actions.directoryItem.click.zoomToMarkerLevel\n );\n }\n if (_this.mapsvg.options.actions.directoryItem.click.showMarkerPopover) {\n if (_this.mapsvg.options.actions.directoryItem.click.zoomToMarker) {\n setTimeout(function () {\n _this.mapsvg.showPopover(detailsViewObject);\n }, 500);\n } else {\n _this.mapsvg.showPopover(detailsViewObject);\n }\n }\n if (_this.mapsvg.options.actions.directoryItem.click.fireMarkerOnClick) {\n _this.mapsvg.events.trigger(\"click.marker\", marker, [e, _this.mapsvg]);\n }\n _this.mapsvg.selectMarker(marker);\n }\n\n _this.events.trigger(\"click\", this, [e, eventObject, _this.mapsvg]);\n\n const actions = _this.mapsvg.options.actions;\n\n if (actions.directoryItem.click.goToLink) {\n const linkParts = actions.directoryItem.click.linkField.split(\".\");\n let url;\n if (linkParts.length > 1) {\n const obj = linkParts.shift();\n const attr = \".\" + linkParts.join(\".\");\n if (obj == \"Region\") {\n if (regions[0] && regions[0].data) url = eval(\"regions[0].data\" + attr);\n } else {\n if (detailsViewObject) url = eval(\"detailsViewObject\" + attr);\n }\n\n if (url) {\n if (actions.directoryItem.click.newTab) {\n const win = window.open(url, \"_blank\");\n win.focus();\n } else {\n window.location.href = url;\n }\n }\n }\n }\n if (actions.directoryItem.click.showAnotherMap) {\n if (_this.mapsvg.editMode) {\n alert('\"Show another map\" action is disabled in the preview');\n return true;\n }\n const linkParts2 = actions.directoryItem.click.showAnotherMapField.split(\".\");\n if (linkParts2.length > 1) {\n const obj2 = linkParts2.shift();\n const attr2 = \".\" + linkParts2.join(\".\");\n let map_id;\n if (obj2 == \"Region\") {\n if (regions[0] && regions[0].data)\n map_id = eval(\"regions[0].data\" + attr2);\n } else {\n if (detailsViewObject) map_id = eval(\"detailsViewObject\" + attr2);\n }\n\n if (map_id) {\n const container = actions.directoryItem.click.showAnotherMapContainerId\n ? $(\"#\" + actions.directoryItem.click.showAnotherMapContainerId)[0]\n : $(_this.mapsvg.containers.map)[0];\n _this.mapsvg.loadMap(map_id, container);\n }\n }\n }\n })\n .on(\"mouseover.menu.mapsvg\", \".mapsvg-directory-item\", function (e) {\n const objID = $(this).data(\"object-id\");\n let regions;\n let detailsViewObject;\n let eventObject;\n let marker;\n\n if (_this.mapsvg.options.menu.source == \"regions\") {\n regions = [_this.mapsvg.getRegion(objID)];\n eventObject = regions[0];\n detailsViewObject = regions[0];\n } else {\n detailsViewObject = _this.repository.getLoadedObject(objID);\n eventObject = detailsViewObject;\n const _regions = detailsViewObject.getRegions(\n _this.mapsvg.regionsRepository.schema.name\n );\n if (_regions) {\n regions = _regions.map(function (region) {\n return _this.mapsvg.getRegion(region.id);\n });\n }\n if (detailsViewObject.location) {\n marker = detailsViewObject.location.marker;\n }\n }\n\n if (regions && regions.length) {\n _this.mapsvg.highlightRegions(regions);\n }\n if (marker) {\n _this.mapsvg.highlightMarker(marker);\n if (_this.mapsvg.options.actions.directoryItem.hover.centerOnMarker) {\n _this.mapsvg.centerOn(marker);\n }\n }\n _this.events.trigger(\"mouseover\", $(this), [e, eventObject, _this.mapsvg]);\n })\n .on(\"mouseout.menu.mapsvg\", \".mapsvg-directory-item\", function (e) {\n const objID = $(this).data(\"object-id\");\n let regions;\n let detailsViewObject;\n let eventObject;\n let marker;\n\n if (_this.mapsvg.options.menu.source == \"regions\") {\n regions = [_this.mapsvg.getRegion(objID)];\n eventObject = regions[0];\n detailsViewObject = regions[0];\n } else {\n detailsViewObject = _this.repository.getLoadedObject(objID);\n eventObject = detailsViewObject;\n const _regions = detailsViewObject.getRegions(\n _this.mapsvg.regionsRepository.schema.name\n );\n if (_regions) {\n regions = _regions.map(function (region) {\n return _this.mapsvg.getRegion(region.id);\n });\n }\n if (detailsViewObject.location) {\n marker = detailsViewObject.location.marker;\n }\n }\n\n if (regions && regions.length) {\n _this.mapsvg.unhighlightRegions();\n }\n if (marker) {\n _this.mapsvg.unhighlightMarker();\n }\n _this.events.trigger(\"mouseout\", $(this), [e, eventObject, _this.mapsvg]);\n });\n\n $(this.containers.contentView).on(\"click\", \".mapsvg-category-item\", function () {\n const panel = $(this).next(\".mapsvg-category-block\");\n\n if (panel[0].style.maxHeight || panel.hasClass(\"active\")) {\n panel[0].style.maxHeight = null;\n } else {\n panel[0].style.maxHeight = panel[0].scrollHeight + \"px\";\n }\n\n if ($(this).hasClass(\"active\")) {\n $(this).toggleClass(\"active\", false);\n $(this).next(\".mapsvg-category-block\").addClass(\"collapsed\").removeClass(\"active\");\n } else {\n if (_this.mapsvg.options.menu.categories.collapseOther) {\n $(this).parent().find(\".mapsvg-category-item.active\").removeClass(\"active\");\n $(this)\n .parent()\n .find(\".mapsvg-category-block.active\")\n .removeClass(\"active\")\n .addClass(\"collapsed\");\n }\n $(this).toggleClass(\"active\", true);\n $(this).next(\".mapsvg-category-block\").removeClass(\"collapsed\").addClass(\"active\");\n }\n\n const panels = $(\".mapsvg-category-block.collapsed\");\n panels.each(function (i, panel) {\n panel.style.maxHeight = null;\n });\n });\n }\n\n /**\n * Highlights directory items\n * @param {array} ids - A list of object IDs\n */\n highlightItems(ids) {\n const _this = this;\n if (typeof ids != \"object\") ids = [ids];\n ids.forEach(function (id) {\n $(_this.containers.view)\n .find(\"#mapsvg-directory-item-\" + _this.convertId(id))\n .addClass(\"hover\");\n });\n }\n\n /**\n * Unhighlights directory items\n */\n unhighlightItems() {\n $(this.containers.view).find(\".mapsvg-directory-item\").removeClass(\"hover\");\n }\n\n /**\n * Highlights directory items\n * @param {array} ids - A list of object IDs\n */\n selectItems(ids, scrollTo = true) {\n if (typeof ids != \"object\") ids = [ids];\n ids.forEach((id) => {\n $(this.containers.view)\n .find(\"#mapsvg-directory-item-\" + this.convertId(id))\n .addClass(\"selected\");\n });\n\n if (scrollTo && $(\"#mapsvg-directory-item-\" + ids[0]).length > 0) {\n this.scrollable &&\n $(this.containers.contentWrap).nanoScroller({\n scrollTo: $(this.containers.view).find(\n \"#mapsvg-directory-item-\" + this.convertId(ids[0])\n ),\n });\n }\n }\n\n /**\n * Deselects directory items\n */\n deselectItems() {\n $(this.containers.view).find(\".mapsvg-directory-item\").removeClass(\"selected\");\n }\n\n /**\n * Remove items\n */\n removeItems(ids) {\n $(this.containers.view)\n .find(\"#mapsvg-directory-item-\" + this.convertId(ids))\n .remove();\n }\n\n /**\n * Filter out directory items\n */\n filterOut(items) {\n const _this = this;\n\n if (this.repository.path.indexOf(\"regions\") !== -1) {\n let f: { field: string; val: number | string };\n f = {\n field: \"\",\n val: \"\",\n };\n if (_this.mapsvg.options.menu.filterout.field) {\n f.field = _this.mapsvg.options.menu.filterout.field;\n f.val = _this.mapsvg.options.menu.filterout.val;\n }\n\n items = items.filter(function (item) {\n let ok = true;\n const status = _this.mapsvg.options.regionStatuses;\n if (status[item.status]) {\n ok = !status[item.status].disabled;\n }\n\n if (ok && f.field) {\n ok = item[f.field] != f.val;\n }\n return ok;\n });\n }\n\n return items;\n }\n\n /**\n * Loads items from a source defined in settings to the directory. The source can be \"Regions\" or \"Database\".\n */\n loadItemsToDirectory() {\n let items = [];\n const _this = this;\n\n if (!_this.repository.loaded) return false;\n\n // If \"categories\" option is enabled, then:\n if (\n _this.mapsvg.options.menu.categories &&\n _this.mapsvg.options.menu.categories.on &&\n _this.mapsvg.options.menu.categories.groupBy\n ) {\n // Get category field to group objects by\n const categoryField = _this.mapsvg.options.menu.categories.groupBy;\n // Get the list of categories\n if (\n _this.repository.getSchema().getField(categoryField) === undefined ||\n _this.repository.getSchema().getField(categoryField).options === undefined\n ) {\n return false;\n }\n const categories = _this.repository.getSchema().getField(categoryField).options;\n // Get the list of items for every category\n categories.forEach(function (category) {\n let dbItems = _this.repository.getLoaded();\n dbItems = _this.filterOut(dbItems);\n const itemArr: Array = [];\n dbItems.forEach((item) => {\n itemArr.push(item);\n });\n const catItems = itemArr.filter(function (object) {\n if (categoryField === \"regions\") {\n const objectRegions =\n typeof object[categoryField] !== \"undefined\" &&\n object[categoryField].length\n ? object[categoryField]\n : [];\n const objectRegionIDs = objectRegions.map(function (region) {\n return region.id;\n });\n return objectRegionIDs.indexOf(category.id) !== -1;\n } else {\n return object[categoryField] == category.value;\n }\n });\n category.counter = catItems.length;\n if (categoryField === \"regions\") {\n category.label = category.title;\n category.value = category.id;\n }\n\n catItems.sort(function (a, b) {\n const field = _this.mapsvg.options.menu.sortBy;\n return a[field] == b[field]\n ? 0\n : (_this.mapsvg.options.menu.sortDirection === \"asc\"\n ? +(a[field] > [field])\n : +(a[field] < [field])) || -1;\n });\n\n items.push({ category: category, items: catItems });\n });\n // Filter out empty categories, if needed:\n if (_this.mapsvg.options.menu.categories.hideEmpty) {\n items = items.filter(function (item) {\n return item.category.counter > 0;\n });\n }\n } else {\n // If categories are not enabled then just get the list of DB items:\n if (_this.mapsvg.options.menu.source === \"regions\") {\n items = _this.repository.getLoaded().map((r) => {\n const data = r.getData();\n data.objects = _this.mapsvg.getRegion(data.id).objects;\n data.id_no_spaces = data.id.split(\" \").join(\"_\");\n return data;\n });\n items = _this.filterOut(items);\n } else {\n items = _this.repository\n .getLoaded()\n .map((r) => r.getData(_this.mapsvg.regionsRepository.schema.name));\n }\n }\n\n try {\n $(this.containers.contentView).html(this.templates.main({ items: items }));\n } catch (err) {\n console.error('MapSVG: Error in the \"Directory item\" template');\n console.error(err);\n }\n if (items.length === 0) {\n $(this.containers.contentView).html(\n '
' +\n this.mapsvg.options.menu.noResultsText +\n \"
\"\n );\n }\n\n if (_this.mapsvg.options.menu.categories.on) {\n if (_this.mapsvg.options.menu.categories.collapse && items.length > 1) {\n $(this.containers.contentView).find(\".mapsvg-category-block\").addClass(\"collapsed\");\n } else if (_this.mapsvg.options.menu.categories.collapse && items.length === 1) {\n $(this.containers.contentView).find(\".mapsvg-category-item\").addClass(\"active\");\n $(this.containers.contentView).find(\".mapsvg-category-block\").addClass(\"active\");\n const panel = $(this.containers.contentView).find(\".mapsvg-category-block\")[0];\n if (panel) panel.style.maxHeight = panel.scrollHeight + \"px\";\n } else if (!_this.mapsvg.options.menu.categories.collapse) {\n $(this.containers.contentView).find(\".mapsvg-category-item\").addClass(\"active\");\n $(this.containers.contentView).find(\".mapsvg-category-block\").addClass(\"active\");\n const panels = $(this.containers.contentView).find(\".mapsvg-category-block\");\n if (panels.length)\n panels.each(function (i, panel) {\n panel.style.maxHeight = panel.scrollHeight + \"px\";\n });\n }\n }\n this.updateTopShift();\n this.updateScroll();\n }\n\n /**\n * Toggles view between map and directory on mobile devices\n * @param {boolean} on - If \"true\", directory is shown and map is hidden, and vice-versa.\n */\n toggle(on?: boolean) {\n const _this = this;\n if (on) {\n $(this.containers.main).parent().show();\n $(_this.mapsvg.containers.mapContainer).hide();\n // _this.mapsvg.$wrapAll.toggleClass('mapsvg-mobile-show-map', true);\n // _this.mapsvg.$wrapAll.toggleClass('mapsvg-mobile-show-directory', ƒalse);\n $(this.menuBtn).addClass(\"active\");\n $(this.mapBtn).removeClass(\"active\");\n // redraw?\n } else {\n $(this.containers.main).parent().hide();\n $(_this.mapsvg.containers.mapContainer).show();\n // _this.mapsvg.$wrapAll.toggleClass('mapsvg-mobile-show-map', false);\n // _this.mapsvg.$wrapAll.toggleClass('mapsvg-mobile-show-directory', true);\n $(this.menuBtn).removeClass(\"active\");\n $(this.mapBtn).addClass(\"active\");\n }\n\n if (!$(this.containers.main).parent().is(\":visible\")) {\n if (MapSVG.isPhone) {\n $(_this.mapsvg.containers.wrap).css(\"height\", \"auto\");\n _this.updateScroll();\n }\n } else {\n if (\n MapSVG.isPhone &&\n $(this.containers.main).height() < parseInt(this.mapsvg.options.menu.minHeight)\n ) {\n $(_this.mapsvg.containers.wrap).css(\n \"height\",\n parseInt(this.mapsvg.options.menu.minHeight) + \"px\"\n );\n _this.updateScroll();\n }\n }\n\n this.updateTopShift();\n }\n\n /**\n * Adds pagination buttons to the directory.\n * @param {string} pager - HTML string with the buttons\n */\n addPagination(pager) {\n $(this.containers.contentView).append('
');\n $(this.containers.contentView).find(\".mapsvg-pagination-container\").html(pager);\n }\n\n convertId(id) {\n return (id + \"\")\n .split(\" \")\n .join(\"_\")\n .replace(/(:|\\(|\\)|\\.|\\[|\\]|,|=|@)/g, \"\\\\$1\");\n }\n}\n","/**\n * Details View controller. Large scrollable window with content and \"X\" close button\n * that can be placed in the map container, header/footer/sidebar or in a custom DIV container outside of the map.\n * @param {object} options\n * @extends Controller\n * @constructor\n */\nimport { MapSVG } from \"../Core/globals.js\";\nimport { Controller } from \"../Core/Controller\";\nconst $ = jQuery;\n\nexport class DetailsController extends Controller {\n modal: boolean;\n mobileCloseBtn: HTMLElement;\n\n constructor(options: { [key: string]: any }) {\n super(options);\n this.modal = options.modal;\n //this._init();\n }\n\n /**\n * Returns toolbar for the Details View\n * @returns {string}\n * @private\n */\n getToolbarTemplate() {\n if (this.withToolbar)\n return '
';\n else return \"\";\n }\n\n /**\n * Fires when view is fully rendered. Intended for final actions.\n * @private\n */\n viewDidLoad() {\n const _this = this;\n this.events.trigger(\"shown\", _this, [_this]);\n if (\n this.modal &&\n MapSVG.isPhone &&\n this.mapsvg.options.detailsView.mobileFullscreen &&\n !this.mobileCloseBtn\n ) {\n this.mobileCloseBtn = $(\n '\"\n )[0];\n this.containers.view.appendChild(this.mobileCloseBtn);\n }\n }\n\n /**\n * Sets event handlers\n * @private\n */\n setEventHandlers() {\n const _this = this;\n $(this.containers.toolbar).on(\"click touchend\", \".mapsvg-popover-close\", function (e) {\n e.stopPropagation();\n _this.destroy();\n _this.events.trigger(\"closed\", _this, [_this]);\n });\n $(this.containers.view).on(\"click touchend\", \".mapsvg-mobile-modal-close\", function (e) {\n e.stopPropagation();\n _this.destroy();\n _this.events.trigger(\"closed\", _this, [_this]);\n });\n }\n}\n","/// \n\nimport { FormBuilder } from \"../FormBuilder\";\nimport { FormElementInterface } from \"./FormElementInterface\";\n// import {Handlebars} from \"../../../handlebars.js\"\n// @ts-ignore\nimport Handlebars from \"Handlebars\";\nimport { Events } from \"../../Core/Events\";\nimport { SchemaField } from \"../../Infrastructure/Server/SchemaField\";\n\nconst $ = jQuery;\n\nexport class FormElement implements FormElementInterface {\n name: string;\n label: string;\n type: string;\n db_type: string;\n value: any;\n domElements: {\n main?: HTMLElement;\n edit?: HTMLElement;\n // fields?: {[key:string]: HTMLInputElement},\n [key: string]: HTMLElement;\n };\n inputs: {\n [key: string]:\n | HTMLInputElement\n | HTMLSelectElement\n | HTMLTextAreaElement\n | HTMLButtonElement\n | RadioNodeList;\n };\n templates: {\n main?: Function;\n edit?: Function;\n [key: string]: Function;\n };\n formBuilder: FormBuilder;\n searchable?: boolean;\n options?: Array;\n optionsDict?: { [key: string]: any };\n help?: string;\n placeholder?: string;\n parameterName?: string;\n parameterNameShort?: string;\n nameChanged: boolean;\n visible?: boolean;\n readonly?: boolean;\n protected?: boolean;\n auto_increment?: boolean;\n not_null?: boolean;\n external: { [key: string]: any };\n\n mapIsGeo: boolean;\n events: Events;\n namespace: string;\n editMode: boolean;\n filtersMode: boolean;\n private _isInputChangedByUser: boolean;\n\n constructor(options: SchemaField, formBuilder: FormBuilder, external: { [key: string]: any }) {\n this.readonly = typeof options.readonly !== \"undefined\" ? options.readonly : false;\n this.protected = typeof options.protected !== \"undefined\" ? options.protected : false;\n this.auto_increment =\n typeof options.auto_increment !== \"undefined\" ? options.auto_increment : false;\n this.not_null = typeof options.not_null !== \"undefined\" ? options.not_null : false;\n this.searchable = typeof options.searchable !== \"undefined\" ? options.searchable : false;\n this.visible = typeof options.visible !== \"undefined\" ? options.visible : true;\n\n this.formBuilder = formBuilder;\n this.events = new Events(this);\n this.type = options.type;\n this.value = options.value;\n this.db_type = options.db_type || \"varchar(255)\";\n this.label = this.label || (options.label === undefined ? \"Label\" : options.label);\n this.name = this.name || options.name || \"label\";\n this.help = options.help || \"\";\n this.placeholder = options.placeholder;\n // this.databaseFields = options.databaseFields;\n // this.databaseFieldsFilterableShort = options.databaseFieldsFilterableShort;\n // this.regionFields = options.regionFields;\n\n this.setExternal(external);\n\n let t = this.type;\n if (t === \"marker\" && this.mapIsGeo) {\n t = \"marker-geo\";\n }\n if (t === \"location\" && this.mapIsGeo) {\n t = \"location-geo\";\n }\n\n if (this.filtersMode) {\n this.parameterName = options.parameterName || \"\";\n this.parameterNameShort = this.parameterName.split(\".\")[1];\n this.name = this.parameterNameShort;\n this.placeholder = options.placeholder || \"\";\n this.templates = {\n main: Handlebars.compile($(\"#mapsvg-filters-tmpl-\" + t + \"-view\").html()),\n };\n } else {\n this.templates = {\n main: Handlebars.compile($(\"#mapsvg-data-tmpl-\" + t + \"-view\").html()),\n };\n }\n\n this.inputs = {};\n }\n\n init() {\n this.setDomElements();\n this.setEventHandlers();\n }\n\n setDomElements() {\n this.domElements = {\n main: $(this.templates.main(this.getDataForTemplate()))[0],\n };\n // this.domElements.markerSelector = $(this.domElements.main).find(\".mapsvg-marker-image-selector\")[0];\n $(this.domElements.main).data(\"formElement\", this);\n this.addSelect2();\n }\n\n setEventHandlers() {\n const _this = this;\n if (this.formBuilder.editMode) {\n $(this.domElements.main).on(\"click\", function () {\n _this.events.trigger(\"click\", _this, [_this]);\n });\n }\n }\n\n addSelect2() {\n if ($().mselect2) {\n $(this.domElements.main)\n .find(\"select\")\n .css({ width: \"100%\", display: \"block\" })\n .mselect2()\n .on(\"select2:focus\", function () {\n $(this).mselect2(\"open\");\n });\n $(this.domElements.main)\n .find(\".select2-selection--multiple .select2-search__field\")\n .css(\"width\", \"100%\");\n }\n }\n\n setEditorEventHandlers() {\n const _this = this;\n\n $(this.domElements.edit).on(\"click\", \"button.mapsvg-remove\", function () {\n $(_this.domElements.main).empty().remove();\n $(_this.domElements.edit).empty().remove();\n _this.events.trigger(\"delete\", _this, [_this]);\n });\n\n $(this.domElements.edit).on(\"click\", \".mapsvg-filter-insert-options\", function () {\n const objType = _this.parameterName.split(\".\")[0];\n const fieldName = _this.parameterName.split(\".\")[1];\n let field;\n if (objType == \"Object\") {\n field = _this.formBuilder.mapsvg.objectsRepository.getSchema().getField(fieldName);\n } else {\n if (fieldName == \"id\") {\n const options = [];\n _this.formBuilder.mapsvg.regions.forEach(function (r) {\n options.push({ label: r.id, value: r.id });\n });\n field = {\n options: options,\n };\n } else if (fieldName === \"title\") {\n const options = [];\n _this.formBuilder.mapsvg.regions.forEach(function (r) {\n options.push({ label: r.title, value: r.title });\n });\n field = { options: options };\n } else {\n field = _this.formBuilder.mapsvg.regionsRepository\n .getSchema()\n .getField(fieldName);\n }\n }\n if ((field && field.options) || fieldName === \"regions\") {\n let options;\n if (fieldName == \"regions\") {\n const _options = _this.formBuilder.mapsvg.regions.map((r) => {\n return { id: r.id, title: r.title };\n });\n _options.sort(function (a, b) {\n if (a.title < b.title) return -1;\n if (a.title > b.title) return 1;\n return 0;\n });\n options = _options.map(function (o) {\n return (o.title || o.id) + \":\" + o.id;\n });\n } else {\n options = field.options.map(function (o) {\n return o.label + \":\" + o.value;\n });\n }\n $(this)\n .closest(\".form-group\")\n .find(\"textarea\")\n .val(options.join(\"\\n\"))\n .trigger(\"change\");\n }\n });\n\n $(this.domElements.edit).on(\"keyup change paste\", \"input, textarea, select\", function () {\n const prop = $(this).attr(\"name\");\n\n const array = $(this).data(\"array\");\n if (_this.type === \"status\" && array) {\n const param = $(this).data(\"param\");\n const index = $(this).closest(\"tr\").index();\n _this.options[index] = _this.options[index] || {\n label: \"\",\n value: \"\",\n color: \"\",\n disabled: false,\n };\n _this.options[index][param] = $(this).is(\":checkbox\")\n ? $(this).prop(\"checked\")\n : $(this).val();\n _this.redraw();\n } else if (_this.type === \"distance\" && array) {\n const param = $(this).data(\"param\");\n const index = $(this).closest(\"tr\").index();\n if (!_this.options[index]) {\n _this.options[index] = { value: \"\", default: false };\n }\n if (param === \"default\") {\n _this.options.forEach(function (option) {\n option.default = false;\n });\n _this.options[index].default = $(this).prop(\"checked\");\n } else {\n _this.options[index].value = $(this).val();\n }\n _this.redraw();\n } else if (prop == \"label\" || prop == \"name\") {\n return false;\n } else {\n let value;\n value =\n $(this).attr(\"type\") == \"checkbox\" ? $(this).prop(\"checked\") : $(this).val();\n if ($(this).attr(\"type\") == \"radio\") {\n const name = $(this).attr(\"name\");\n value = $('input[name=\"' + name + '\"]:checked').val();\n }\n _this.update(prop, value);\n }\n });\n\n $(this.domElements.edit).on(\"keyup change paste\", 'input[name=\"label\"]', function () {\n if (!_this.nameChanged) {\n // _this.update('name',str);\n _this.label = $(this).val() + \"\";\n if (_this.type != \"region\" && _this.type != \"location\" && _this.type != \"title\") {\n let str = $(this).val() + \"\";\n str = str.toLowerCase().replace(/ /g, \"_\").replace(/\\W/g, \"\");\n if (str.length < 64) {\n $(_this.domElements.edit).find('input[name=\"name\"]').val(str);\n }\n _this.name = str + \"\";\n }\n $(_this.domElements.main).find(\"label\").first().html(_this.label);\n if (!_this.filtersMode) {\n $(_this.domElements.main)\n .find(\"label\")\n .first()\n .append('
' + _this.name + \"
\");\n }\n }\n });\n $(this.domElements.edit).on(\"keyup change paste\", 'input[name=\"name\"]', function (e) {\n if (e.target.value) {\n if (e.target.value.match(/[^a-zA-Z0-9_]/g)) {\n e.target.value = e.target.value.replace(/[^a-zA-Z0-9_]/g, \"\");\n $(e.target).trigger(\"change\");\n }\n if (e.target.value[0].match(/[^a-zA-Z_]/g)) {\n e.target.value =\n e.target.value[0].replace(/[^a-zA-Z_]/g, \"\") + e.target.value.slice(1);\n $(e.target).trigger(\"change\");\n }\n }\n if (_this.type != \"region\") _this.name = e.target.value;\n $(_this.domElements.main)\n .find(\"label\")\n .html(_this.label + '
' + _this.name + \"
\");\n _this.nameChanged = true;\n });\n $(this.domElements.edit).on(\"keyup change paste\", 'textarea[name=\"help\"]', function (e) {\n $(_this.domElements.main).find(\".form-text\").text(e.target.value);\n });\n }\n\n getEditor() {\n // if(!this.domElements.edit){\n if (!this.filtersMode) {\n this.templates.edit =\n this.templates.edit ||\n Handlebars.compile($(\"#mapsvg-data-tmpl-\" + this.type + \"-control\").html());\n } else {\n this.templates.edit =\n this.templates.edit ||\n Handlebars.compile($(\"#mapsvg-filters-tmpl-\" + this.type + \"-control\").html());\n }\n this.domElements.edit = $(\n \"
\" + this.templates.edit(this.getDataForTemplate()) + \"
\"\n )[0];\n // }\n return this.domElements.edit;\n }\n\n destroyEditor() {\n // this.domElements.edit.find('select').mselect2('destroy');\n $(this.domElements.edit).empty().remove();\n }\n\n initEditor() {\n $(this.domElements.edit).find(\"input\").first().select();\n\n if ($().colorpicker) {\n $(this.domElements.edit)\n .find(\".cpicker\")\n .colorpicker()\n .on(\"changeColor.colorpicker\", function (event) {\n const input = $(this).find(\"input\");\n if (input.val() == \"\") $(this).find(\"i\").css({ \"background-color\": \"\" });\n });\n }\n\n if ($().mselect2) {\n if (this.type !== \"distance\") {\n $(this.domElements.edit)\n .find(\"select\")\n .css({ width: \"100%\", display: \"block\" })\n .mselect2();\n }\n }\n this.setEditorEventHandlers();\n }\n\n getSchema(): { [key: string]: any } {\n let data: { [key: string]: any };\n\n data = {\n type: this.type,\n db_type: this.db_type,\n label: this.label,\n name: this.name,\n value: this.value,\n searchable: this.searchable,\n help: this.help,\n visible: this.visible === undefined ? true : this.visible,\n readonly: this.readonly,\n placeholder: this.placeholder,\n protected: this.protected,\n auto_increment: this.auto_increment,\n not_null: this.not_null,\n };\n if (this.options) {\n data.options = this.getSchemaFieldOptionsList();\n }\n if (this.filtersMode) {\n data.parameterName = this.parameterName;\n data.parameterNameShort = this.parameterName.split(\".\")[1];\n }\n\n return data;\n }\n\n getSchemaFieldOptionsList(): any[] {\n const _this = this;\n const options = [];\n this.options.forEach((option, index) => {\n if (this.options[index].value !== \"\") {\n options.push(this.options[index]);\n // this.options.splice(index, 1);\n }\n });\n\n return options;\n }\n\n getDataForTemplate(): { [key: string]: any } {\n const data = this.getSchema();\n\n // Add namespace to names\n data._name = data.name;\n if (this.namespace) {\n data.name = this.name.split(\"[\")[0];\n let suffix = this.name.split(\"[\")[1] || \"\";\n if (suffix) suffix = \"[\" + suffix;\n data.name = this.namespace + \"[\" + data.name + \"]\" + suffix;\n }\n\n data.external = this.external;\n\n return data;\n }\n\n update(prop, value) {\n const _this = this;\n if (prop == \"options\") {\n const options = [];\n value = value.split(\"\\n\").forEach(function (row) {\n row = row.trim().split(\":\");\n if (_this.type == \"checkbox\" && row.length == 3) {\n options.push({\n label: row[0],\n name: row[1],\n value: row[2],\n });\n } else if (\n (_this.type == \"radio\" ||\n _this.type == \"select\" ||\n _this.type == \"checkboxes\") &&\n row.length == 2\n ) {\n options.push({\n label: row[0],\n value: row[1],\n });\n }\n });\n this.options = options;\n } else {\n this[prop] = value;\n }\n if (prop == \"parameterName\") {\n $(this.domElements.edit).find(\".mapsvg-filter-param-name\").text(value);\n }\n }\n\n redraw() {\n const _this = this;\n const newView = $(this.templates.main(this.getDataForTemplate()));\n $(this.domElements.main).html(newView.html());\n if ($().mselect2) {\n if (this.type !== \"distance\") {\n $(this.domElements.main)\n .find(\"select\")\n .css({ width: \"100%\", display: \"block\" })\n .mselect2()\n .on(\"select2:focus\", function () {\n $(this).mselect2(\"open\");\n });\n } else {\n $(this.domElements.main)\n .find(\"select\")\n .mselect2()\n .on(\"select2:focus\", function () {\n $(this).mselect2(\"open\");\n });\n }\n }\n }\n\n redrawEditor() {\n if (this.domElements.edit) {\n $(this.domElements.edit).empty();\n $(this.domElements.edit).html(\n \"
\" + this.templates.edit(this.getDataForTemplate()) + \"
\"\n );\n this.initEditor();\n }\n }\n\n setOptions(options?: any[]): any[] {\n if (options) {\n this.options = [];\n this.optionsDict = {};\n options.forEach((value, key) => {\n this.options.push(value);\n this.optionsDict[key] = value;\n });\n return this.options;\n } else {\n return this.setOptions([\n { label: \"Option one\", name: \"option_one\", value: 1 },\n { label: \"Option two\", name: \"option_two\", value: 2 },\n ]);\n }\n }\n\n getData(): { name: string; value: any } {\n return { name: this.name, value: this.getValue() };\n }\n\n destroy(): void {\n if ($().mselect2) {\n const sel = $(this.domElements.main).find(\".mapsvg-select2\");\n if (sel.length) {\n sel.mselect2(\"destroy\");\n }\n }\n }\n\n show(): void {\n $(this.domElements.main).show();\n }\n\n hide(): void {\n $(this.domElements.main).hide();\n }\n\n setExternal(params) {\n this.external = params;\n if (typeof this.external.mapIsGeo !== \"undefined\") {\n this.mapIsGeo = this.external.mapIsGeo;\n }\n if (typeof this.external.editMode !== \"undefined\") {\n this.editMode = this.external.editMode;\n }\n if (typeof this.external.filtersMode !== \"undefined\") {\n this.filtersMode = this.external.filtersMode;\n }\n if (typeof this.external.namespace !== \"undefined\") {\n this.namespace = this.external.namespace;\n }\n }\n\n getValue(): any {\n return this.value;\n }\n\n setValue(value: any, updateInput = true): void {\n this.value = value;\n if (updateInput) {\n this.setInputValue(value);\n }\n }\n\n setInputValue(value: any): void {\n return;\n }\n\n triggerChanged() {\n this.events.trigger(\"changed\", this, [this]);\n }\n}\n","import { FormElement } from \"../FormElement\";\nimport { FormBuilder } from \"../../FormBuilder.js\";\nimport { SchemaField } from \"../../../Infrastructure/Server/SchemaField\";\n\nconst $ = jQuery;\n\nexport class CheckboxFormElement extends FormElement {\n checkboxLabel: string;\n checkboxValue: string;\n showAsSwitch: boolean;\n inputs: { checkbox: HTMLInputElement; switch: HTMLInputElement };\n\n constructor(options: SchemaField, formBuilder: FormBuilder, external: { [key: string]: any }) {\n super(options, formBuilder, external);\n if (typeof options.showAsSwitch === \"undefined\") {\n this.showAsSwitch = true;\n } else {\n this.showAsSwitch = options.showAsSwitch;\n }\n this.db_type = \"tinyint(1)\";\n this.checkboxLabel = options.checkboxLabel;\n this.checkboxValue = options.checkboxValue;\n }\n\n setDomElements() {\n super.setDomElements();\n this.inputs.checkbox = $(this.domElements.main).find(\"input\")[0];\n this.inputs.switch = $(this.domElements.main).find(\"input\")[0];\n }\n\n setEventHandlers() {\n super.setEventHandlers();\n $(this.inputs.checkbox).on(\"change\", (e) => {\n this.setValue(e.target.checked, false);\n this.triggerChanged();\n });\n }\n\n setEditorEventHandlers() {\n super.setEditorEventHandlers();\n\n $(this.domElements.edit).on(\"change\", \"[name='showAsSwitch']\", (e) => {\n if (this.showAsSwitch) {\n $(this.domElements.main)\n .find(\"[name='checkboxToSwitch']\")\n .addClass(\"form-switch form-switch-md\");\n }\n if (!this.showAsSwitch) {\n $(this.domElements.main)\n .find(\"[name='checkboxToSwitch']\")\n .removeClass(\"form-switch form-switch-md\");\n }\n });\n\n $(this.domElements.edit).on(\"keyup change paste\", '[name=\"checkboxLabel\"]', (e) => {\n $(this.domElements.main).find(\".form-check-label\").text(e.target.value);\n });\n }\n\n getSchema(): { [p: string]: any } {\n const schema = super.getSchema();\n if (this.checkboxLabel) {\n schema.checkboxLabel = this.checkboxLabel;\n }\n if (this.checkboxValue) {\n schema.checkboxValue = this.checkboxValue;\n }\n\n schema.showAsSwitch = this.showAsSwitch;\n\n return schema;\n }\n\n setInputValue(value: boolean): void {\n this.inputs.checkbox.checked = value === true;\n }\n}\n","import { FormElement } from \"../FormElement\";\nimport { FormBuilder } from \"../../FormBuilder\";\nimport { SchemaField } from \"../../../Infrastructure/Server/SchemaField\";\n\nconst $ = jQuery;\n\n// TODO add checkboxes to regions as well\n\nexport class CheckboxesFormElement extends FormElement {\n checkboxLabel: string;\n checkboxValue: string;\n $checkboxes: any;\n\n constructor(options: SchemaField, formBuilder: FormBuilder, external: { [key: string]: any }) {\n super(options, formBuilder, external);\n\n this.db_type = \"text\";\n this.checkboxLabel = options.checkboxLabel;\n\n this.setOptions(options.options);\n }\n\n setDomElements() {\n super.setDomElements();\n this.$checkboxes = $(this.domElements.main).find('input[type=\"checkbox\"]');\n this.setInputValue(this.value || []);\n }\n\n setEventHandlers() {\n super.setEventHandlers();\n this.$checkboxes.on(\"change\", (e) => {\n const values = [];\n $(this.domElements.main)\n .find(\"input:checked\")\n .each((i, el) => {\n values.push(jQuery(el).attr(\"value\"));\n });\n this.setValue(values, false);\n this.triggerChanged();\n });\n }\n\n setInputValue(values: string[] | null): void {\n if (values === null) {\n $(this.domElements.main).find(`input`).prop(\"checked\", false);\n } else {\n values.forEach((value: string) => {\n $(this.domElements.main).find(`input[value=\"${value}\"]`).prop(\"checked\", true);\n });\n }\n }\n}\n","import { FormElement } from \"../FormElement\";\nimport { FormBuilder } from \"../../FormBuilder\";\nimport { SchemaField } from \"../../../Infrastructure/Server/SchemaField\";\n\nconst $ = jQuery;\n\nexport class DateFormElement extends FormElement {\n languages: string[];\n language: string;\n\n constructor(options: SchemaField, formBuilder: FormBuilder, external: { [key: string]: any }) {\n super(options, formBuilder, external);\n\n if (this.formBuilder.admin) {\n this.languages = [\n \"en-GB\",\n \"ar\",\n \"az\",\n \"bg\",\n \"bs\",\n \"ca\",\n \"cs\",\n \"cy\",\n \"da\",\n \"de\",\n \"el\",\n \"es\",\n \"et\",\n \"eu\",\n \"fa\",\n \"fi\",\n \"fo\",\n \"fr\",\n \"gl\",\n \"he\",\n \"hr\",\n \"hu\",\n \"hy\",\n \"id\",\n \"is\",\n \"it\",\n \"ja\",\n \"ka\",\n \"kh\",\n \"kk\",\n \"kr\",\n \"lt\",\n \"lv\",\n \"mk\",\n \"ms\",\n \"nb\",\n \"nl\",\n \"nl-BE\",\n \"no\",\n \"pl\",\n \"pt-BR\",\n \"pt\",\n \"ro\",\n \"rs\",\n \"rs-latin\",\n \"ru\",\n \"sk\",\n \"sl\",\n \"sq\",\n \"sr\",\n \"sr-latin\",\n \"sv\",\n \"sw\",\n \"th\",\n \"tr\",\n \"uk\",\n \"vi\",\n \"zh-CN\",\n \"zh-TW\",\n ];\n }\n this.db_type = \"varchar(50)\";\n this.language = options.language;\n }\n\n setDomElements() {\n super.setDomElements();\n this.inputs.date = $(this.domElements.main).find(\"input\")[0];\n }\n\n setEventHandlers() {\n super.setEventHandlers();\n $(this.inputs.date).on(\"change\", (e) => {\n this.setValue(e.target.value, false);\n this.triggerChanged();\n });\n }\n\n getSchema(): { [p: string]: any } {\n const schema = super.getSchema();\n schema.language = this.language;\n return schema;\n }\n\n getDataForTemplate(): { [p: string]: any } {\n const data = super.getDataForTemplate();\n if (this.formBuilder.admin) data.languages = this.languages;\n data.language = this.language;\n return data;\n }\n}\n","import { FormElement } from \"../FormElement.js\";\nimport { FormBuilder } from \"../../FormBuilder.js\";\nimport { MapSVG } from \"../../../Core/globals.js\";\n// @ts-ignore\nimport Bloodhound from \"Bloodhound\";\nimport { SchemaField } from \"../../../Infrastructure/Server/SchemaField\";\nimport { Server } from \"../../../Infrastructure/Server/Server\";\nimport { Location } from \"../../../Location/Location\";\nimport GeocoderRequest = google.maps.GeocoderRequest;\n\nconst $ = jQuery;\n\nexport class DistanceFormElement extends FormElement {\n inputs: {\n units: HTMLInputElement;\n geoPoint: HTMLInputElement;\n length: HTMLInputElement;\n address: HTMLInputElement;\n country: HTMLInputElement;\n };\n value: {\n units: string;\n geoPoint: { lat: string | number; lng: string | number };\n length: number;\n address: string;\n country: string;\n };\n distanceControl: string;\n distanceUnits: string;\n distanceUnitsLabel: string;\n fromLabel: string;\n placeholder: string;\n userLocationButton: boolean;\n addressField: boolean;\n addressFieldPlaceholder: string;\n languages: { [key: string]: string }[];\n countries: string[];\n country: string;\n language: string;\n searchByZip: boolean;\n zipLength: number;\n isGeo: boolean;\n defaultLength: number;\n spinner: HTMLElement;\n\n constructor(options: SchemaField, formBuilder: FormBuilder, external: { [key: string]: any }) {\n super(options, formBuilder, external);\n\n this.name = \"distance\";\n\n this.label = this.label || (options.label === undefined ? \"Search radius\" : options.label);\n this.distanceControl = options.distanceControl || \"select\";\n this.distanceUnits = options.distanceUnits || \"km\";\n this.distanceUnitsLabel = options.distanceUnitsLabel || \"km\";\n this.fromLabel = options.fromLabel || \"from\";\n this.placeholder = options.placeholder;\n this.userLocationButton = options.userLocationButton || false;\n this.type = options.type;\n this.addressField = options.addressField || true;\n this.addressFieldPlaceholder = options.addressFieldPlaceholder || \"Address\";\n this.languages = [\n { value: \"sq\", label: \"Albanian\" },\n { value: \"ar\", label: \"Arabic\" },\n {\n value: \"eu\",\n label: \"Basque\",\n },\n { value: \"be\", label: \"Belarusian\" },\n { value: \"bg\", label: \"Bulgarian\" },\n {\n value: \"my\",\n label: \"Burmese\",\n },\n { value: \"bn\", label: \"Bengali\" },\n { value: \"ca\", label: \"Catalan\" },\n {\n value: \"zh-cn\",\n label: \"Chinese (simplified)\",\n },\n { value: \"zh-tw\", label: \"Chinese (traditional)\" },\n {\n value: \"hr\",\n label: \"Croatian\",\n },\n { value: \"cs\", label: \"Czech\" },\n { value: \"da\", label: \"Danish\" },\n {\n value: \"nl\",\n label: \"Dutch\",\n },\n { value: \"en\", label: \"English\" },\n {\n value: \"en-au\",\n label: \"English (australian)\",\n },\n { value: \"en-gb\", label: \"English (great Britain)\" },\n {\n value: \"fa\",\n label: \"Farsi\",\n },\n { value: \"fi\", label: \"Finnish\" },\n { value: \"fil\", label: \"Filipino\" },\n {\n value: \"fr\",\n label: \"French\",\n },\n { value: \"gl\", label: \"Galician\" },\n { value: \"de\", label: \"German\" },\n {\n value: \"el\",\n label: \"Greek\",\n },\n { value: \"gu\", label: \"Gujarati\" },\n { value: \"iw\", label: \"Hebrew\" },\n {\n value: \"hi\",\n label: \"Hindi\",\n },\n { value: \"hu\", label: \"Hungarian\" },\n { value: \"id\", label: \"Indonesian\" },\n {\n value: \"it\",\n label: \"Italian\",\n },\n { value: \"ja\", label: \"Japanese\" },\n { value: \"kn\", label: \"Kannada\" },\n {\n value: \"kk\",\n label: \"Kazakh\",\n },\n { value: \"ko\", label: \"Korean\" },\n { value: \"ky\", label: \"Kyrgyz\" },\n {\n value: \"lt\",\n label: \"Lithuanian\",\n },\n { value: \"lv\", label: \"Latvian\" },\n { value: \"mk\", label: \"Macedonian\" },\n {\n value: \"ml\",\n label: \"Malayalam\",\n },\n { value: \"mr\", label: \"Marathi\" },\n { value: \"no\", label: \"Norwegian\" },\n {\n value: \"pl\",\n label: \"Polish\",\n },\n { value: \"pt\", label: \"Portuguese\" },\n {\n value: \"pt-br\",\n label: \"Portuguese (brazil)\",\n },\n { value: \"pt-pt\", label: \"Portuguese (portugal)\" },\n {\n value: \"pa\",\n label: \"Punjabi\",\n },\n { value: \"ro\", label: \"Romanian\" },\n { value: \"ru\", label: \"Russian\" },\n {\n value: \"sr\",\n label: \"Serbian\",\n },\n { value: \"sk\", label: \"Slovak\" },\n { value: \"sl\", label: \"Slovenian\" },\n {\n value: \"es\",\n label: \"Spanish\",\n },\n { value: \"sv\", label: \"Swedish\" },\n { value: \"tl\", label: \"Tagalog\" },\n {\n value: \"ta\",\n label: \"Tamil\",\n },\n { value: \"te\", label: \"Telugu\" },\n { value: \"th\", label: \"Thai\" },\n {\n value: \"tr\",\n label: \"Turkish\",\n },\n { value: \"uk\", label: \"Ukrainian\" },\n { value: \"uz\", label: \"Uzbek\" },\n {\n value: \"vi\",\n label: \"Vietnamese\",\n },\n ];\n // @ts-ignore\n this.countries = MapSVG.countries;\n this.country = options.country;\n this.language = options.language;\n this.searchByZip = options.searchByZip;\n this.zipLength = parseInt(options.zipLength) || 5;\n this.userLocationButton = MapSVG.parseBoolean(options.userLocationButton);\n this.options = options.options || [\n { value: \"10\", default: true },\n { value: \"30\", default: false },\n { value: \"50\", default: false },\n { value: \"100\", default: false },\n ];\n\n let defOption: { value: number };\n if (this.value) {\n this.options.forEach((option) => {\n if (option.value === this.value.length) {\n defOption = option;\n }\n });\n }\n if (!defOption) {\n defOption = this.options.find(function (option) {\n return option.default === true;\n });\n }\n if (!defOption) {\n defOption = this.options[0];\n }\n const defLengthOption = this.options.find((opt) => opt.selected === true);\n this.defaultLength = defOption.value;\n this.setDefaultValue();\n }\n\n private setDefaultValue(): void {\n this.value = {\n units: this.distanceUnits,\n geoPoint: { lat: null, lng: null },\n length: this.defaultLength,\n address: \"\",\n country: this.country,\n };\n }\n\n setDomElements(): void {\n super.setDomElements();\n\n this.inputs.units = (\n $(this.domElements.main).find('[name=\"distanceUnits\"]')[0]\n );\n this.inputs.geoPoint = (\n $(this.domElements.main).find('[name=\"distanceGeoPoint\"]')[0]\n );\n this.inputs.length = (\n $(this.domElements.main).find('[name=\"distanceLength\"]')[0]\n );\n this.inputs.address = (\n $(this.domElements.main).find('[name=\"distance\"]')[0]\n );\n }\n\n getSchema(): { [p: string]: any } {\n const schema = super.getSchema();\n schema.distanceControl = this.distanceControl;\n schema.distanceUnits = this.distanceUnits;\n schema.distanceUnitsLabel = this.distanceUnitsLabel;\n schema.fromLabel = this.fromLabel;\n schema.addressField = this.addressField;\n schema.addressFieldPlaceholder = this.addressFieldPlaceholder;\n schema.userLocationButton = this.userLocationButton;\n schema.placeholder = this.placeholder;\n schema.language = this.language;\n schema.country = this.country;\n schema.searchByZip = this.searchByZip;\n schema.zipLength = parseInt(this.zipLength + \"\");\n schema.userLocationButton = MapSVG.parseBoolean(this.userLocationButton);\n if (schema.distanceControl === \"none\") {\n schema.distanceDefault = schema.options.filter(function (o) {\n return o.default;\n })[0].value;\n }\n\n schema.options.forEach(function (option, index) {\n if (schema.options[index].value === \"\") {\n schema.options.splice(index, 1);\n } else {\n schema.options[index].default = MapSVG.parseBoolean(schema.options[index].default);\n // data.optionsDict[option.value] = option;\n }\n });\n\n return schema;\n }\n\n getDataForTemplate(): { [key: string]: any } {\n const data = super.getDataForTemplate();\n\n if (this.formBuilder.admin) {\n data.languages = this.languages;\n data.countries = this.countries;\n }\n data.language = this.language;\n data.country = this.country;\n data.searchByZip = this.searchByZip;\n data.zipLength = this.zipLength;\n data.userLocationButton = MapSVG.parseBoolean(this.userLocationButton);\n return data;\n }\n\n destroy() {\n if ($().mselect2) {\n const sel = $(this.domElements.main).find(\".mapsvg-select2\");\n if (sel.length) {\n sel.mselect2(\"destroy\");\n }\n }\n }\n\n initEditor() {\n super.initEditor();\n this.mayBeAddDistanceRow();\n if ($().mselect2) {\n $(this.domElements.edit).find(\"select\").mselect2();\n }\n }\n\n setEventHandlers() {\n super.setEventHandlers();\n\n const _this = this;\n\n $(this.domElements.edit).on(\n \"keyup change paste\",\n \".mapsvg-edit-distance-row input\",\n function () {\n _this.mayBeAddDistanceRow();\n }\n );\n\n const server = new Server();\n\n // TODO check if distance filter is working:\n // Google geocoding\n const locations = new Bloodhound({\n datumTokenizer: Bloodhound.tokenizers.obj.whitespace(\"formatted_address\"),\n queryTokenizer: Bloodhound.tokenizers.whitespace,\n remote: {\n url:\n server.getUrl(\"geocoding\") +\n \"?address=\" +\n (this.searchByZip === true ? \"zip%20\" : \"\") +\n \"%QUERY%&language=\" +\n this.language +\n (this.country ? \"&country=\" + this.country : \"\"),\n wildcard: \"%QUERY%\",\n transform: function (response) {\n if (response.error_message) {\n alert(response.error_message);\n }\n return response.results;\n },\n rateLimitWait: 600,\n },\n });\n\n const thContainer = $(this.domElements.main).find(\".typeahead\");\n this.spinner = $(\"\")[0];\n\n if (this.searchByZip) {\n // var tH = thContainer.typeahead({minLength: this.zipLength, autoselect: true}, {\n // name: 'mapsvg-addresses',\n // source: locations,\n // display: 'formatted_address',\n // });\n $(this.domElements.main).find(\".mapsvg-distance-fields\").addClass(\"search-by-zip\");\n // thContainer.on('typeahead:asyncreceive',function(ev,query,dataset){\n // console.log(ev,query,dataset);\n // });\n thContainer.on(\"change keyup\", (e) => {\n const zip = $(e.target).val().toString();\n if (zip.length === _this.zipLength) {\n $(this.spinner).appendTo($(e.target).closest(\".distance-search-wrap\"));\n this.formBuilder.setIsLoading(true);\n locations.search(\n $(e.target).val(),\n (data) => this.handleAddressFieldChange(zip, data),\n (data) => this.handleAddressFieldChange(zip, data, true)\n );\n }\n });\n } else {\n // @ts-ignore\n const tH = thContainer\n .typeahead(\n { minLength: 3 },\n {\n name: \"mapsvg-addresses\",\n display: \"formatted_address\",\n limit: 5,\n async: true,\n // @ts-ignore\n source: (query, sync, async) => {\n const request = { address: query } as GeocoderRequest;\n if (this.country) {\n request.componentRestrictions = { country: this.country };\n }\n MapSVG.geocode(request, async);\n },\n }\n )\n .on(\"typeahead:asyncrequest\", (e) => {\n $(this.spinner).appendTo($(e.target).closest(\".twitter-typeahead\"));\n this.formBuilder.setIsLoading(true);\n })\n .on(\"typeahead:asynccancel typeahead:asyncreceive\", (e) => {\n $(this.spinner).remove();\n this.formBuilder.setIsLoading(false);\n });\n $(this.domElements.main).find(\".mapsvg-distance-fields\").removeClass(\"search-by-zip\");\n }\n\n if (_this.userLocationButton) {\n const userLocationButton = $(this.domElements.main).find(\".user-location-button\");\n userLocationButton.on(\"click\", () => {\n _this.formBuilder.mapsvg.showUserLocation((location: Location) => {\n locations.search(\n location.geoPoint.lat + \",\" + location.geoPoint.lng,\n (data) => this.setAddressByUserLocation(data, location),\n (data) => this.setAddressByUserLocation(data, location)\n );\n this.setValue({ geoPoint: location.geoPoint });\n this.triggerChanged();\n });\n });\n }\n\n thContainer.on(\"change keyup\", (e) => {\n const input = e.target;\n if (input.value === \"\" && this.getValue() !== null) {\n this.setValue(null);\n this.triggerChanged();\n }\n });\n thContainer.on(\"typeahead:select\", (ev, item) => {\n this.setValue({\n address: item.formatted_address,\n geoPoint: item.geometry.location.toJSON(),\n });\n this.triggerChanged();\n thContainer.blur();\n });\n\n $(this.inputs.geoPoint).on(\"change\", (e) => {\n const geoPoint = e.target.value.split(\",\").map((value) => parseFloat(value));\n this.setValue({ geoPoint: { lat: geoPoint[0], lng: geoPoint[1] } }, false);\n this.triggerChanged();\n });\n $(this.inputs.length).on(\"change\", (e) => {\n this.setLength(parseInt(e.target.value), false);\n this.triggerChanged();\n });\n }\n setAddressByUserLocation(data, location): void {\n if (data && data[0]) {\n this.setAddress(data[0].formatted_address);\n } else {\n this.setAddress(location.geoPoint.lat + \",\" + location.geoPoint.lng);\n }\n }\n handleAddressFieldChange(zip: string, data, removeSpinner = false): void {\n if (removeSpinner) {\n $(this.spinner).remove();\n this.formBuilder.setIsLoading(false);\n }\n if (data && data[0]) {\n this.setValue({ address: zip, geoPoint: data[0].geometry.location }, false);\n this.triggerChanged();\n }\n }\n\n addSelect2(): void {\n if ($().mselect2) {\n $(this.domElements.main)\n .find(\"select\")\n .mselect2()\n .on(\"select2:focus\", function () {\n $(this).mselect2(\"open\");\n });\n }\n }\n\n mayBeAddDistanceRow(): void {\n const _this = this;\n const editDistanceRow = $($(\"#mapsvg-edit-distance-row\").html());\n // if there's something in the last status edit field, add +1 status row\n const z = $(_this.domElements.edit).find(\".mapsvg-edit-distance-row:last-child input\");\n if (z && z.last() && z.last().val() && z.last().val().toString().trim().length) {\n const newRow = editDistanceRow.clone();\n newRow.insertAfter(\n $(_this.domElements.edit).find(\".mapsvg-edit-distance-row:last-child\")\n );\n }\n const rows = $(_this.domElements.edit).find(\".mapsvg-edit-distance-row\");\n const row1 = rows.eq(rows.length - 2);\n const row2 = rows.eq(rows.length - 1);\n\n if (\n row1.length &&\n row2.length &&\n !row1.find(\"input:eq(0)\").val().toString().trim() &&\n !row2.find(\"input:eq(0)\").val().toString().trim()\n ) {\n row2.remove();\n }\n }\n\n setValue(value: any, updateInput = true): void {\n if (value === null) {\n this.setGeoPoint(null);\n this.setAddress(\"\");\n } else {\n for (const key in value) {\n if (typeof this.value[key] !== undefined) {\n const method = \"set\" + MapSVG.ucfirst(key);\n if (typeof this[method] === \"function\") {\n this[method](value[key], updateInput);\n }\n }\n }\n }\n }\n\n setGeoPoint(geoPoint: { lat: number; lng: number }, updateInput = true): void {\n this.value.geoPoint = geoPoint === null ? { lat: null, lng: null } : geoPoint;\n if (updateInput) {\n this.setInputGeoPointValue(geoPoint);\n }\n }\n\n setInputGeoPointValue(geoPoint: { lat: number; lng: number }): void {\n this.inputs.geoPoint.value = geoPoint ? geoPoint.lat + \",\" + geoPoint.lng : \"\";\n }\n\n setLength(length: number | string, updateInput = true): void {\n this.value.length = parseInt(length.toString());\n this.defaultLength = this.value.length;\n if (updateInput) {\n this.setInputLengthValue(this.value.length);\n }\n }\n\n setInputLengthValue(length: number): void {\n this.inputs.length.value = length.toString();\n }\n\n setAddress(address: string, updateInput = true): void {\n this.value.address = address !== null ? address : \"\";\n if (updateInput) {\n this.setInputAddressValue(this.value.address);\n }\n }\n\n setInputAddressValue(address: string): void {\n this.inputs.address.value = address;\n }\n\n getValue(): any {\n return this.value.geoPoint.lat === null ? null : this.value;\n }\n}\n","import { FormElement } from \"../FormElement\";\nimport { FormBuilder } from \"../../FormBuilder\";\nimport { SchemaField } from \"../../../Infrastructure/Server/SchemaField\";\n\nconst $ = jQuery;\n\nexport class EmptyFormElement extends FormElement {\n constructor(options: SchemaField, formBuilder: FormBuilder, external: { [key: string]: any }) {\n super(options, formBuilder, external);\n this.readonly = true;\n }\n}\n","import { FormElement } from \"../FormElement\";\nimport { FormBuilder } from \"../../FormBuilder\";\nimport { SchemaField } from \"../../../Infrastructure/Server/SchemaField\";\n\nexport class IdFormElement extends FormElement {\n constructor(options: SchemaField, formBuilder: FormBuilder, external: { [key: string]: any }) {\n super(options, formBuilder, external);\n }\n\n getData(): any {\n return { name: \"id\", value: this.value };\n }\n}\n","/**!\n * Sortable\n * @author\tRubaXa \n * @license MIT\n */\n\n(function sortableModule(factory) {\n \"use strict\";\n\n if (typeof define === \"function\" && define.amd) {\n define(factory);\n } else if (typeof module != \"undefined\" && typeof module.exports != \"undefined\") {\n module.exports = factory();\n } else if (typeof Package !== \"undefined\") {\n //noinspection JSUnresolvedVariable\n Sortable = factory(); // export for Meteor.js\n } else {\n /* jshint sub:true */\n window[\"Sortable\"] = factory();\n }\n})(function sortableFactory() {\n \"use strict\";\n\n if (typeof window == \"undefined\" || !window.document) {\n return function sortableError() {\n throw new Error(\"Sortable.js requires a window with a document\");\n };\n }\n\n var dragEl,\n parentEl,\n ghostEl,\n cloneEl,\n rootEl,\n nextEl,\n scrollEl,\n scrollParentEl,\n scrollCustomFn,\n lastEl,\n lastCSS,\n lastParentCSS,\n oldIndex,\n newIndex,\n activeGroup,\n putSortable,\n autoScroll = {},\n tapEvt,\n touchEvt,\n moved,\n /** @const */\n RSPACE = /\\s+/g,\n expando = \"Sortable\" + new Date().getTime(),\n win = window,\n document = win.document,\n parseInt = win.parseInt,\n $ = win.jQuery || win.Zepto,\n Polymer = win.Polymer,\n supportDraggable = !!(\"draggable\" in document.createElement(\"div\")),\n supportCssPointerEvents = (function (el) {\n // false when IE11\n if (navigator.userAgent.match(/Trident.*rv[ :]?11\\./)) {\n return false;\n }\n el = document.createElement(\"x\");\n el.style.cssText = \"pointer-events:auto\";\n return el.style.pointerEvents === \"auto\";\n })(),\n _silent = false,\n abs = Math.abs,\n min = Math.min,\n slice = [].slice,\n touchDragOverListeners = [],\n _autoScroll = _throttle(function (\n /**Event*/ evt,\n /**Object*/ options,\n /**HTMLElement*/ rootEl\n ) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (rootEl && options.scroll) {\n var el,\n rect,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n x = evt.clientX,\n y = evt.clientY,\n winWidth = window.innerWidth,\n winHeight = window.innerHeight,\n vx,\n vy,\n scrollOffsetX,\n scrollOffsetY;\n\n // Delect scrollEl\n if (scrollParentEl !== rootEl) {\n scrollEl = options.scroll;\n scrollParentEl = rootEl;\n scrollCustomFn = options.scrollFn;\n\n if (scrollEl === true) {\n scrollEl = rootEl;\n\n do {\n if (\n scrollEl.offsetWidth < scrollEl.scrollWidth ||\n scrollEl.offsetHeight < scrollEl.scrollHeight\n ) {\n break;\n }\n /* jshint boss:true */\n } while ((scrollEl = scrollEl.parentNode));\n }\n }\n\n if (scrollEl) {\n el = scrollEl;\n rect = scrollEl.getBoundingClientRect();\n vx = (abs(rect.right - x) <= sens) - (abs(rect.left - x) <= sens);\n vy = (abs(rect.bottom - y) <= sens) - (abs(rect.top - y) <= sens);\n }\n\n if (!(vx || vy)) {\n vx = (winWidth - x <= sens) - (x <= sens);\n vy = (winHeight - y <= sens) - (y <= sens);\n\n /* jshint expr:true */\n (vx || vy) && (el = win);\n }\n\n if (autoScroll.vx !== vx || autoScroll.vy !== vy || autoScroll.el !== el) {\n autoScroll.el = el;\n autoScroll.vx = vx;\n autoScroll.vy = vy;\n\n clearInterval(autoScroll.pid);\n\n if (el) {\n autoScroll.pid = setInterval(function () {\n scrollOffsetY = vy ? vy * speed : 0;\n scrollOffsetX = vx ? vx * speed : 0;\n\n if (\"function\" === typeof scrollCustomFn) {\n return scrollCustomFn.call(\n _this,\n scrollOffsetX,\n scrollOffsetY,\n evt\n );\n }\n\n if (el === win) {\n win.scrollTo(\n win.pageXOffset + scrollOffsetX,\n win.pageYOffset + scrollOffsetY\n );\n } else {\n el.scrollTop += scrollOffsetY;\n el.scrollLeft += scrollOffsetX;\n }\n }, 24);\n }\n }\n }\n },\n 30),\n _prepareGroup = function (options) {\n function toFn(value, pull) {\n if (value === void 0 || value === true) {\n value = group.name;\n }\n\n if (typeof value === \"function\") {\n return value;\n } else {\n return function (to, from) {\n var fromGroup = from.options.group.name;\n\n return pull\n ? value\n : value &&\n (value.join ? value.indexOf(fromGroup) > -1 : fromGroup == value);\n };\n }\n }\n\n var group = {};\n var originalGroup = options.group;\n\n if (!originalGroup || typeof originalGroup != \"object\") {\n originalGroup = { name: originalGroup };\n }\n\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n\n options.group = group;\n };\n /**\n * @class Sortable\n * @param {HTMLElement} el\n * @param {Object} [options]\n */\n function Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be HTMLElement, and not \" + {}.toString.call(el);\n }\n\n this.el = el; // root element\n this.options = options = _extend({}, options);\n\n // Export instance\n el[expando] = this;\n\n // Default options\n var defaults = {\n group: Math.random(),\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n scroll: true,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n draggable: /[uo]l/i.test(el.nodeName) ? \"li\" : \">*\",\n ghostClass: \"sortable-ghost\",\n chosenClass: \"sortable-chosen\",\n dragClass: \"sortable-drag\",\n ignore: \"a, img\",\n filter: null,\n animation: 0,\n setData: function (dataTransfer, dragEl) {\n dataTransfer.setData(\"Text\", dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: \"data-id\",\n delay: 0,\n forceFallback: false,\n fallbackClass: \"sortable-fallback\",\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: { x: 0, y: 0 },\n };\n\n // Set default options\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n\n _prepareGroup(options);\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === \"_\" && typeof this[fn] === \"function\") {\n this[fn] = this[fn].bind(this);\n }\n }\n\n // Setup drag mode\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n\n // Bind events\n _on(el, \"mousedown\", this._onTapStart);\n _on(el, \"touchstart\", this._onTapStart);\n\n if (this.nativeDraggable) {\n _on(el, \"dragover\", this);\n _on(el, \"dragenter\", this);\n }\n\n touchDragOverListeners.push(this._onDragOver);\n\n // Restore sorting\n options.store && this.sort(options.store.get(this));\n }\n\n Sortable.prototype = /** @lends Sortable.prototype */ {\n constructor: Sortable,\n\n _onTapStart: function (/** Event|TouchEvent */ evt) {\n if (evt.target.tagName == \"i\" || evt.target.tagName == \"I\") {\n evt.target.click();\n return;\n }\n var _this = this,\n el = this.el,\n options = this.options,\n type = evt.type,\n touch = evt.touches && evt.touches[0],\n target = (touch || evt).target,\n originalTarget = (evt.target.shadowRoot && evt.path[0]) || target,\n filter = options.filter,\n startIndex;\n\n // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n if (dragEl) {\n return;\n }\n\n if ((type === \"mousedown\" && evt.button !== 0) || options.disabled) {\n return; // only left button or enabled\n }\n\n if (options.handle && !_closest(originalTarget, options.handle, el)) {\n return;\n }\n\n target = _closest(target, options.draggable, el);\n\n if (!target) {\n return;\n }\n\n // Get the index of the dragged element within its parent\n startIndex = _index(target, options.draggable);\n\n // Check filter\n if (typeof filter === \"function\") {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent(_this, originalTarget, \"filter\", target, el, startIndex);\n evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(\",\").some(function (criteria) {\n criteria = _closest(originalTarget, criteria.trim(), el);\n\n if (criteria) {\n _dispatchEvent(_this, criteria, \"filter\", target, el, startIndex);\n return true;\n }\n });\n\n if (filter) {\n evt.preventDefault();\n return; // cancel dnd\n }\n }\n\n // Prepare `dragstart`\n this._prepareDragStart(evt, touch, target, startIndex);\n },\n\n _prepareDragStart: function (\n /** Event */ evt,\n /** Touch */ touch,\n /** HTMLElement */ target,\n /** Number */ startIndex\n ) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n\n if (target && !dragEl && target.parentNode === el) {\n tapEvt = evt;\n\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n activeGroup = options.group;\n oldIndex = startIndex;\n\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n\n dragEl.style[\"will-change\"] = \"transform\";\n\n dragStartFn = function () {\n // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n _this._disableDelayedDrag();\n\n // Make the element draggable\n dragEl.draggable = _this.nativeDraggable;\n\n // Chosen item\n _toggleClass(dragEl, options.chosenClass, true);\n\n // Bind the events: dragstart/dragend\n _this._triggerDragStart(touch);\n\n // Drag start event\n _dispatchEvent(_this, rootEl, \"choose\", dragEl, rootEl, oldIndex);\n };\n\n // Disable \"draggable\"\n options.ignore.split(\",\").forEach(function (criteria) {\n _find(dragEl, criteria.trim(), _disableDraggable);\n });\n\n _on(ownerDocument, \"mouseup\", _this._onDrop);\n _on(ownerDocument, \"touchend\", _this._onDrop);\n _on(ownerDocument, \"touchcancel\", _this._onDrop);\n\n if (options.delay) {\n // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n _on(ownerDocument, \"mouseup\", _this._disableDelayedDrag);\n _on(ownerDocument, \"touchend\", _this._disableDelayedDrag);\n _on(ownerDocument, \"touchcancel\", _this._disableDelayedDrag);\n _on(ownerDocument, \"mousemove\", _this._disableDelayedDrag);\n _on(ownerDocument, \"touchmove\", _this._disableDelayedDrag);\n\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n\n _disableDelayedDrag: function () {\n var ownerDocument = this.el.ownerDocument;\n\n clearTimeout(this._dragStartTimer);\n _off(ownerDocument, \"mouseup\", this._disableDelayedDrag);\n _off(ownerDocument, \"touchend\", this._disableDelayedDrag);\n _off(ownerDocument, \"touchcancel\", this._disableDelayedDrag);\n _off(ownerDocument, \"mousemove\", this._disableDelayedDrag);\n _off(ownerDocument, \"touchmove\", this._disableDelayedDrag);\n },\n\n _triggerDragStart: function (/** Touch */ touch) {\n if (touch) {\n // Touch device support\n tapEvt = {\n target: dragEl,\n clientX: touch.clientX,\n clientY: touch.clientY,\n };\n\n this._onDragStart(tapEvt, \"touch\");\n } else if (!this.nativeDraggable) {\n this._onDragStart(tapEvt, true);\n } else {\n _on(dragEl, \"dragend\", this);\n _on(rootEl, \"dragstart\", this._onDragStart);\n }\n\n try {\n if (document.selection) {\n // Timeout neccessary for IE9\n setTimeout(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n\n _dragStarted: function () {\n if (rootEl && dragEl) {\n var options = this.options;\n\n // Apply effect\n _toggleClass(dragEl, options.ghostClass, true);\n _toggleClass(dragEl, options.dragClass, false);\n\n Sortable.active = this;\n\n // Drag start event\n _dispatchEvent(this, rootEl, \"start\", dragEl, rootEl, oldIndex);\n }\n },\n\n _emulateDragOver: function () {\n if (touchEvt) {\n if (this._lastX === touchEvt.clientX && this._lastY === touchEvt.clientY) {\n return;\n }\n\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n\n if (!supportCssPointerEvents) {\n _css(ghostEl, \"display\", \"none\");\n }\n\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY),\n parent = target,\n i = touchDragOverListeners.length;\n\n if (parent) {\n do {\n if (parent[expando]) {\n while (i--) {\n touchDragOverListeners[i]({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent,\n });\n }\n\n break;\n }\n\n target = parent; // store last element\n } while (\n /* jshint boss:true */\n (parent = parent.parentNode)\n );\n }\n\n if (!supportCssPointerEvents) {\n _css(ghostEl, \"display\", \"\");\n }\n }\n },\n\n _onTouchMove: function (/**TouchEvent*/ evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n dx = touch.clientX - tapEvt.clientX + fallbackOffset.x,\n dy = touch.clientY - tapEvt.clientY + fallbackOffset.y,\n translate3d = evt.touches\n ? \"translate3d(\" + dx + \"px,\" + dy + \"px,0)\"\n : \"translate(\" + dx + \"px,\" + dy + \"px)\";\n\n // only set the status to dragging, when we are actually dragging\n if (!Sortable.active) {\n if (\n fallbackTolerance &&\n min(abs(touch.clientX - this._lastX), abs(touch.clientY - this._lastY)) <\n fallbackTolerance\n ) {\n return;\n }\n\n this._dragStarted();\n }\n\n // as well as creating the ghost element on the document body\n this._appendGhost();\n\n moved = true;\n touchEvt = touch;\n\n _css(ghostEl, \"webkitTransform\", translate3d);\n _css(ghostEl, \"mozTransform\", translate3d);\n _css(ghostEl, \"msTransform\", translate3d);\n _css(ghostEl, \"transform\", translate3d);\n\n evt.preventDefault();\n }\n },\n\n _appendGhost: function () {\n if (!ghostEl) {\n var rect = dragEl.getBoundingClientRect(),\n css = _css(dragEl),\n options = this.options,\n ghostRect;\n\n ghostEl = dragEl.cloneNode(true);\n\n _toggleClass(ghostEl, options.ghostClass, false);\n _toggleClass(ghostEl, options.fallbackClass, true);\n _toggleClass(ghostEl, options.dragClass, true);\n\n _css(ghostEl, \"top\", rect.top - parseInt(css.marginTop, 10));\n _css(ghostEl, \"left\", rect.left - parseInt(css.marginLeft, 10));\n _css(ghostEl, \"width\", rect.width);\n _css(ghostEl, \"height\", rect.height);\n _css(ghostEl, \"opacity\", \"0.8\");\n _css(ghostEl, \"position\", \"fixed\");\n _css(ghostEl, \"zIndex\", \"100000\");\n _css(ghostEl, \"pointerEvents\", \"none\");\n\n (options.fallbackOnBody && document.body.appendChild(ghostEl)) ||\n rootEl.appendChild(ghostEl);\n\n // Fixing dimensions.\n ghostRect = ghostEl.getBoundingClientRect();\n _css(ghostEl, \"width\", rect.width * 2 - ghostRect.width);\n _css(ghostEl, \"height\", rect.height * 2 - ghostRect.height);\n }\n },\n\n _onDragStart: function (/**Event*/ evt, /**boolean*/ useFallback) {\n var dataTransfer = evt.dataTransfer,\n options = this.options;\n\n this._offUpEvents();\n\n if (activeGroup.checkPull(this, this, dragEl, evt) == \"clone\") {\n cloneEl = _clone(dragEl);\n _css(cloneEl, \"display\", \"none\");\n rootEl.insertBefore(cloneEl, dragEl);\n _dispatchEvent(this, rootEl, \"clone\", dragEl);\n }\n\n _toggleClass(dragEl, options.dragClass, true);\n\n if (useFallback) {\n if (useFallback === \"touch\") {\n // Bind touch events\n _on(document, \"touchmove\", this._onTouchMove);\n _on(document, \"touchend\", this._onDrop);\n _on(document, \"touchcancel\", this._onDrop);\n } else {\n // Old brwoser\n _on(document, \"mousemove\", this._onTouchMove);\n _on(document, \"mouseup\", this._onDrop);\n }\n\n this._loopId = setInterval(this._emulateDragOver, 50);\n } else {\n if (dataTransfer) {\n dataTransfer.effectAllowed = \"move\";\n options.setData && options.setData.call(this, dataTransfer, dragEl);\n }\n\n _on(document, \"drop\", this);\n setTimeout(this._dragStarted, 0);\n }\n },\n\n _onDragOver: function (/**Event*/ evt) {\n var el = this.el,\n target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort;\n\n if (evt.preventDefault !== void 0) {\n evt.preventDefault();\n !options.dragoverBubble && evt.stopPropagation();\n }\n\n moved = true;\n\n if (\n activeGroup &&\n !options.disabled &&\n (isOwner\n ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list\n : putSortable === this ||\n (activeGroup.checkPull(this, activeSortable, dragEl, evt) &&\n group.checkPut(this, activeSortable, dragEl, evt))) &&\n (evt.rootEl === void 0 || evt.rootEl === this.el) // touch fallback\n ) {\n // Smart auto-scrolling\n _autoScroll(evt, options, this.el);\n\n if (_silent) {\n return;\n }\n\n target = _closest(evt.target, options.draggable, el);\n dragRect = dragEl.getBoundingClientRect();\n putSortable = this;\n\n if (revert) {\n _cloneHide(true);\n parentEl = rootEl; // actualization\n\n if (cloneEl || nextEl) {\n rootEl.insertBefore(dragEl, cloneEl || nextEl);\n } else if (!canSort) {\n rootEl.appendChild(dragEl);\n }\n\n return;\n }\n\n if (\n el.children.length === 0 ||\n el.children[0] === ghostEl ||\n (el === evt.target && (target = _ghostIsLast(el, evt)))\n ) {\n if (target) {\n if (target.animated) {\n return;\n }\n\n targetRect = target.getBoundingClientRect();\n }\n\n _cloneHide(isOwner);\n\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt) !== false) {\n if (!dragEl.contains(el)) {\n el.appendChild(dragEl);\n parentEl = el; // actualization\n }\n\n this._animate(dragRect, dragEl);\n target && this._animate(targetRect, target);\n }\n } else if (\n target &&\n !target.animated &&\n target !== dragEl &&\n target.parentNode[expando] !== void 0\n ) {\n if (lastEl !== target) {\n lastEl = target;\n lastCSS = _css(target);\n lastParentCSS = _css(target.parentNode);\n }\n\n targetRect = target.getBoundingClientRect();\n\n var width = targetRect.right - targetRect.left,\n height = targetRect.bottom - targetRect.top,\n floating =\n /left|right|inline/.test(lastCSS.cssFloat + lastCSS.display) ||\n (lastParentCSS.display == \"flex\" &&\n lastParentCSS[\"flex-direction\"].indexOf(\"row\") === 0),\n isWide = target.offsetWidth > dragEl.offsetWidth,\n isLong = target.offsetHeight > dragEl.offsetHeight,\n halfway =\n (floating\n ? (evt.clientX - targetRect.left) / width\n : (evt.clientY - targetRect.top) / height) > 0.5,\n nextSibling = target.nextElementSibling,\n moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt),\n after;\n\n if (moveVector !== false) {\n _silent = true;\n setTimeout(_unsilent, 30);\n\n _cloneHide(isOwner);\n\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n } else if (floating) {\n var elTop = dragEl.offsetTop,\n tgTop = target.offsetTop;\n\n if (elTop === tgTop) {\n after =\n (target.previousElementSibling === dragEl && !isWide) ||\n (halfway && isWide);\n } else if (\n target.previousElementSibling === dragEl ||\n dragEl.previousElementSibling === target\n ) {\n after = (evt.clientY - targetRect.top) / height > 0.5;\n } else {\n after = tgTop > elTop;\n }\n } else {\n after = (nextSibling !== dragEl && !isLong) || (halfway && isLong);\n }\n\n if (!dragEl.contains(el)) {\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(\n dragEl,\n after ? nextSibling : target\n );\n }\n }\n\n parentEl = dragEl.parentNode; // actualization\n\n this._animate(dragRect, dragEl);\n this._animate(targetRect, target);\n }\n }\n }\n },\n\n _animate: function (prevRect, target) {\n var ms = this.options.animation;\n\n if (ms) {\n var currentRect = target.getBoundingClientRect();\n\n _css(target, \"transition\", \"none\");\n _css(\n target,\n \"transform\",\n \"translate3d(\" +\n (prevRect.left - currentRect.left) +\n \"px,\" +\n (prevRect.top - currentRect.top) +\n \"px,0)\"\n );\n\n target.offsetWidth; // repaint\n\n _css(target, \"transition\", \"all \" + ms + \"ms\");\n _css(target, \"transform\", \"translate3d(0,0,0)\");\n\n clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n _css(target, \"transition\", \"\");\n _css(target, \"transform\", \"\");\n target.animated = false;\n }, ms);\n }\n },\n\n _offUpEvents: function () {\n var ownerDocument = this.el.ownerDocument;\n\n _off(document, \"touchmove\", this._onTouchMove);\n _off(ownerDocument, \"mouseup\", this._onDrop);\n _off(ownerDocument, \"touchend\", this._onDrop);\n _off(ownerDocument, \"touchcancel\", this._onDrop);\n },\n\n _onDrop: function (/**Event*/ evt) {\n var el = this.el,\n options = this.options;\n\n clearInterval(this._loopId);\n clearInterval(autoScroll.pid);\n clearTimeout(this._dragStartTimer);\n\n // Unbind events\n _off(document, \"mousemove\", this._onTouchMove);\n\n if (this.nativeDraggable) {\n _off(document, \"drop\", this);\n _off(el, \"dragstart\", this._onDragStart);\n }\n\n this._offUpEvents();\n\n if (evt) {\n if (moved) {\n evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n\n ghostEl && ghostEl.parentNode.removeChild(ghostEl);\n\n if (dragEl) {\n if (this.nativeDraggable) {\n _off(dragEl, \"dragend\", this);\n }\n\n _disableDraggable(dragEl);\n dragEl.style[\"will-change\"] = \"\";\n\n // Remove class's\n _toggleClass(dragEl, this.options.ghostClass, false);\n _toggleClass(dragEl, this.options.chosenClass, false);\n\n if (rootEl !== parentEl) {\n newIndex = _index(dragEl, options.draggable);\n\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent(\n null,\n parentEl,\n \"add\",\n dragEl,\n rootEl,\n oldIndex,\n newIndex\n );\n\n // Remove event\n _dispatchEvent(\n this,\n rootEl,\n \"remove\",\n dragEl,\n rootEl,\n oldIndex,\n newIndex\n );\n\n // drag from one list and drop into another\n _dispatchEvent(\n null,\n parentEl,\n \"sort\",\n dragEl,\n rootEl,\n oldIndex,\n newIndex\n );\n _dispatchEvent(\n this,\n rootEl,\n \"sort\",\n dragEl,\n rootEl,\n oldIndex,\n newIndex\n );\n }\n } else {\n // Remove clone\n cloneEl && cloneEl.parentNode.removeChild(cloneEl);\n\n if (dragEl.nextSibling !== nextEl) {\n // Get the index of the dragged element within its parent\n newIndex = _index(dragEl, options.draggable);\n\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent(\n this,\n rootEl,\n \"update\",\n dragEl,\n rootEl,\n oldIndex,\n newIndex\n );\n _dispatchEvent(\n this,\n rootEl,\n \"sort\",\n dragEl,\n rootEl,\n oldIndex,\n newIndex\n );\n }\n }\n }\n\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n }\n\n _dispatchEvent(this, rootEl, \"end\", dragEl, rootEl, oldIndex, newIndex);\n\n // Save sorting\n this.save();\n }\n }\n }\n\n this._nulling();\n },\n\n _nulling: function () {\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = scrollEl = scrollParentEl = tapEvt = touchEvt = moved = newIndex = lastEl = lastCSS = putSortable = activeGroup = Sortable.active = null;\n },\n\n handleEvent: function (/**Event*/ evt) {\n var type = evt.type;\n\n if (type === \"dragover\" || type === \"dragenter\") {\n if (dragEl) {\n this._onDragOver(evt);\n _globalDragOver(evt);\n }\n } else if (type === \"drop\" || type === \"dragend\") {\n this._onDrop(evt);\n }\n },\n\n /**\n * Serializes the item into an array of string.\n * @returns {String[]}\n */\n toArray: function () {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n\n for (; i < n; i++) {\n el = children[i];\n if (_closest(el, options.draggable, this.el)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n\n return order;\n },\n\n /**\n * Sorts the elements according to the array.\n * @param {String[]} order order of the items\n */\n sort: function (order) {\n var items = {},\n rootEl = this.el;\n\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n\n if (_closest(el, this.options.draggable, rootEl)) {\n items[id] = el;\n }\n }, this);\n\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n },\n\n /**\n * Save the current sorting\n */\n save: function () {\n var store = this.options.store;\n store && store.set(this);\n },\n\n /**\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\n * @param {HTMLElement} el\n * @param {String} [selector] default: `options.draggable`\n * @returns {HTMLElement|null}\n */\n closest: function (el, selector) {\n return _closest(el, selector || this.options.draggable, this.el);\n },\n\n /**\n * Set/get option\n * @param {string} name\n * @param {*} [value]\n * @returns {*}\n */\n option: function (name, value) {\n var options = this.options;\n\n if (value === void 0) {\n return options[name];\n } else {\n options[name] = value;\n\n if (name === \"group\") {\n _prepareGroup(options);\n }\n }\n },\n\n /**\n * Destroy\n */\n destroy: function () {\n var el = this.el;\n\n el[expando] = null;\n\n _off(el, \"mousedown\", this._onTapStart);\n _off(el, \"touchstart\", this._onTapStart);\n\n if (this.nativeDraggable) {\n _off(el, \"dragover\", this);\n _off(el, \"dragenter\", this);\n }\n\n // Remove draggable attributes\n Array.prototype.forEach.call(el.querySelectorAll(\"[draggable]\"), function (el) {\n el.removeAttribute(\"draggable\");\n });\n\n touchDragOverListeners.splice(touchDragOverListeners.indexOf(this._onDragOver), 1);\n\n this._onDrop();\n\n this.el = el = null;\n },\n };\n\n function _cloneHide(state) {\n if (cloneEl && cloneEl.state !== state) {\n _css(cloneEl, \"display\", state ? \"none\" : \"\");\n !state && cloneEl.state && rootEl.insertBefore(cloneEl, dragEl);\n cloneEl.state = state;\n }\n }\n\n function _closest(/**HTMLElement*/ el, /**String*/ selector, /**HTMLElement*/ ctx) {\n if (el) {\n ctx = ctx || document;\n\n do {\n if ((selector === \">*\" && el.parentNode === ctx) || _matches(el, selector)) {\n return el;\n }\n /* jshint boss:true */\n } while ((el = _getParentOrHost(el)));\n }\n\n return null;\n }\n\n function _getParentOrHost(el) {\n var parent = el.host;\n\n return parent && parent.nodeType ? parent : el.parentNode;\n }\n\n function _globalDragOver(/**Event*/ evt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = \"move\";\n }\n evt.preventDefault();\n }\n\n function _on(el, event, fn) {\n el.addEventListener(event, fn, false);\n }\n\n function _off(el, event, fn) {\n el.removeEventListener(event, fn, false);\n }\n\n function _toggleClass(el, name, state) {\n if (el) {\n if (el.classList) {\n el.classList[state ? \"add\" : \"remove\"](name);\n } else {\n var className = (\" \" + el.className + \" \")\n .replace(RSPACE, \" \")\n .replace(\" \" + name + \" \", \" \");\n el.className = (className + (state ? \" \" + name : \"\")).replace(RSPACE, \" \");\n }\n }\n }\n\n function _css(el, prop, val) {\n var style = el && el.style;\n\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, \"\");\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style)) {\n prop = \"-webkit-\" + prop;\n }\n\n style[prop] = val + (typeof val === \"string\" ? \"\" : \"px\");\n }\n }\n }\n\n function _find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n\n return list;\n }\n\n return [];\n }\n\n function _dispatchEvent(sortable, rootEl, name, targetEl, fromEl, startIndex, newIndex) {\n sortable = sortable || rootEl[expando];\n\n var evt = document.createEvent(\"Event\"),\n options = sortable.options,\n onName = \"on\" + name.charAt(0).toUpperCase() + name.substr(1);\n\n evt.initEvent(name, true, true);\n\n evt.to = rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n\n evt.oldIndex = startIndex;\n evt.newIndex = newIndex;\n\n rootEl.dispatchEvent(evt);\n\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n }\n\n function _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvt) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal;\n\n evt = document.createEvent(\"Event\");\n evt.initEvent(\"move\", true, true);\n\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || toEl.getBoundingClientRect();\n\n fromEl.dispatchEvent(evt);\n\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvt);\n }\n\n return retVal;\n }\n\n function _disableDraggable(el) {\n el.draggable = false;\n }\n\n function _unsilent() {\n _silent = false;\n }\n\n /** @returns {HTMLElement|false} */\n function _ghostIsLast(el, evt) {\n var lastEl = el.lastElementChild,\n rect = lastEl.getBoundingClientRect();\n\n // 5 — min delta\n // abs — нельзя добавлять, а то глюки при наведении сверху\n return (\n (evt.clientY - (rect.top + rect.height) > 5 ||\n evt.clientX - (rect.right + rect.width) > 5) &&\n lastEl\n );\n }\n\n /**\n * Generate id\n * @param {HTMLElement} el\n * @returns {String}\n * @private\n */\n function _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n\n while (i--) {\n sum += str.charCodeAt(i);\n }\n\n return sum.toString(36);\n }\n\n /**\n * Returns the index of an element within its parent for a selected set of\n * elements\n * @param {HTMLElement} el\n * @param {selector} selector\n * @return {number}\n */\n function _index(el, selector) {\n var index = 0;\n\n if (!el || !el.parentNode) {\n return -1;\n }\n\n while (el && (el = el.previousElementSibling)) {\n if (\n el.nodeName.toUpperCase() !== \"TEMPLATE\" &&\n (selector === \">*\" || _matches(el, selector))\n ) {\n index++;\n }\n }\n\n return index;\n }\n\n function _matches(/**HTMLElement*/ el, /**String*/ selector) {\n if (el) {\n selector = selector.split(\".\");\n\n var tag = selector.shift().toUpperCase(),\n re = new RegExp(\"\\\\s(\" + selector.join(\"|\") + \")(?=\\\\s)\", \"g\");\n\n return (\n (tag === \"\" || el.nodeName.toUpperCase() == tag) &&\n (!selector.length ||\n ((\" \" + el.className + \" \").match(re) || []).length == selector.length)\n );\n }\n\n return false;\n }\n\n function _throttle(callback, ms) {\n var args, _this;\n\n return function () {\n if (args === void 0) {\n args = arguments;\n _this = this;\n\n setTimeout(function () {\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n\n args = void 0;\n }, ms);\n }\n };\n }\n\n function _extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n\n return dst;\n }\n\n function _clone(el) {\n return $\n ? $(el).clone(true)[0]\n : Polymer && Polymer.dom\n ? Polymer.dom(el).cloneNode(true)\n : el.cloneNode(true);\n }\n\n // Export utils\n Sortable.utils = {\n on: _on,\n off: _off,\n css: _css,\n find: _find,\n is: function (el, selector) {\n return !!_closest(el, selector, el);\n },\n extend: _extend,\n throttle: _throttle,\n closest: _closest,\n toggleClass: _toggleClass,\n clone: _clone,\n index: _index,\n };\n\n /**\n * Create sortable instance\n * @param {HTMLElement} el\n * @param {Object} [options]\n */\n Sortable.create = function (el, options) {\n return new Sortable(el, options);\n };\n\n // Export\n Sortable.version = \"1.4.2\";\n return Sortable;\n});\n","import { FormElement } from \"../FormElement\";\nimport { FormBuilder } from \"../../FormBuilder\";\nimport { MapSVG } from \"../../../Core/globals.js\";\nimport Sortable from \"../../../../vendor/sortable/sortable.min.js\";\nimport { SchemaField } from \"../../../Infrastructure/Server/SchemaField\";\n\nconst $ = jQuery;\n\nexport class ImagesFormElement extends FormElement {\n searchType: string;\n images: { [key: string]: string }[];\n mediaUploader: any;\n button_text: string;\n sortable: Sortable;\n\n constructor(options: SchemaField, formBuilder: FormBuilder, external: { [key: string]: any }) {\n super(options, formBuilder, external);\n\n this.searchType = options.searchType || \"fulltext\";\n this.mediaUploader = external.mediaUploader;\n\n this.button_text = options.button_text || \"Browse...\";\n this.db_type = \"text\";\n this.label = options.label || \"Images\";\n this.name = options.name || \"images\";\n\n this.images = this.value || [];\n this.value = JSON.stringify(this.value);\n }\n\n init() {\n super.init();\n this.redrawImages();\n }\n\n setDomElements() {\n super.setDomElements();\n // this.domElements.btnUpload = $(this.domElements.main).find('.mapsvg-upload-image')[0];\n // this.domElements.btnImageDelete = $(this.domElements.main).find('.mapsvg-upload-image')[0];\n // this.inputs.text = $(this.domElements.main).find('input[type=\"text\"]')[0];\n }\n\n getData(): { name: string; value: any } {\n this.updateData();\n // if(this.images && this.images.length && this.images[0]!=null){\n // var newList = [];\n // $(this.domElements.main).find('.mapsvg-thumbnail-wrap').each(function(index, el){\n // var imageData = $(el).data('image');\n // newList.push(imageData);\n // });\n // this.images = newList;\n // // data[control.name] = data[control.name].concat(control.images);\n // }\n return { name: this.name, value: this.images };\n }\n\n getSchema(): { [p: string]: any } {\n const schema = super.getSchema();\n schema.button_text = this.button_text;\n return schema;\n }\n\n updateData() {\n const newListOfImages = [];\n\n $(this.domElements.main)\n .find(\".mapsvg-thumbnail-wrap\")\n .each(function (index, el) {\n const imageData = $(el).data(\"image\");\n newListOfImages.push(imageData);\n });\n this.images = newListOfImages;\n this.value = JSON.stringify(this.images);\n $(this.domElements.main).find(\"input\").val(this.value);\n }\n\n setEventHandlers() {\n super.setEventHandlers();\n\n if (this.formBuilder.editMode) {\n return;\n }\n\n const _this = this;\n\n const imageDOM = $(this.domElements.main).find(\".mapsvg-data-images\");\n\n // this.external.mediaUploader.off(\"select\");\n\n // When a file is selected, grab the URL and set it as the text field's value\n this.external.mediaUploader.on(\"select\", () => {\n if (_this.formBuilder.mediaUploaderisOpenedFor !== _this) return false;\n const attachments = _this.external.mediaUploader.state().get(\"selection\").toJSON();\n attachments.forEach(function (img) {\n const image: any = { sizes: {} };\n for (const type in img.sizes) {\n image[type] = img.sizes[type].url\n .replace(\"http://\", \"//\")\n .replace(\"https://\", \"//\");\n image.sizes[type] = {\n width: img.sizes[type].width,\n height: img.sizes[type].height,\n };\n }\n if (!image.thumbnail) {\n image.thumbnail = image.full;\n image.sizes.thumbnail = {\n width: img.sizes.full.width,\n height: img.sizes.full.height,\n };\n }\n if (!image.medium) {\n image.medium = image.full;\n image.sizes.medium = {\n width: img.sizes.full.width,\n height: img.sizes.full.height,\n };\n }\n\n // image.title = img.title;\n image.caption = img.caption;\n image.description = img.description;\n\n _this.images.push(image);\n });\n this.setValue(this.images);\n _this.redrawImages();\n });\n $(_this.domElements.main).on(\"click\", \".mapsvg-upload-image\", function (e) {\n e.preventDefault();\n // Open the uploader dialog\n _this.formBuilder.mediaUploaderisOpenedFor = _this;\n _this.external.mediaUploader.open();\n });\n $(_this.domElements.main).on(\"click\", \".mapsvg-image-delete\", function (e) {\n e.preventDefault();\n $(this).closest(\".mapsvg-thumbnail-wrap\").remove();\n _this.updateData();\n // _this.images = [];\n // $(_this.domElements.main).find('img').each(function (i, image) {\n // _this.images.push($(image).data('image'));\n // });\n // $(_this.domElements.main).find('input').val(JSON.stringify(_this.images));\n });\n\n _this.sortable = new Sortable(imageDOM[0], {\n animation: 150,\n onStart: function () {\n $(_this.domElements.main).addClass(\"sorting\");\n },\n onEnd: function (evt) {\n _this.images = [];\n $(_this.domElements.main)\n .find(\"img\")\n .each(function (i, image) {\n _this.images.push($(image).data(\"image\"));\n });\n this.value = JSON.stringify(_this.images);\n $(_this.domElements.main).find(\"input\").val(this.value);\n $(_this.domElements.main).removeClass(\"sorting\");\n },\n });\n }\n\n redrawImages() {\n const _this = this;\n const imageDOM = $(this.domElements.main).find(\".mapsvg-data-images\");\n imageDOM.empty();\n this.images &&\n this.images.forEach(function (image) {\n const img = $('')\n .attr(\"src\", image.thumbnail)\n .data(\"image\", image);\n const imgContainer = $('
').data(\n \"image\",\n image\n );\n imgContainer.append(img);\n imgContainer.append('');\n imageDOM.append(imgContainer);\n });\n $(this.domElements.main).find(\"input\").val(this.value);\n }\n\n destroy() {\n super.destroy();\n this.external.mediaUploader.off(\"select\");\n }\n}\n","import { MapSVG } from \"../../../Core/globals.js\";\nimport { FormElement } from \"../FormElement.js\";\nimport { FormBuilder } from \"../../FormBuilder.js\";\nimport { GeoPoint, Location } from \"../../../Location/Location.js\";\nimport { Marker } from \"../../../Marker/Marker.js\";\n// import {Handlebars} from \"../../../handlebars.js\";\n// @ts-ignore\nimport Handlebars from \"Handlebars\";\n// @ts-ignore\nimport Bloodhound from \"Bloodhound\";\nimport { SchemaField } from \"../../../Infrastructure/Server/SchemaField\";\nimport { Server } from \"../../../Infrastructure/Server/Server\";\n\nconst $ = jQuery;\n\nexport class LocationFormElement extends FormElement {\n language: string;\n markerImages: Array;\n markersByField: { [key: string]: any };\n markerField: string;\n markersByFieldEnabled: boolean;\n defaultMarkerPath: string;\n location: Location;\n marker: Marker;\n languages: { label: string; value: string }[];\n backupData?: {\n location: Location;\n Marker: Marker;\n };\n isGeo: boolean;\n\n constructor(options: SchemaField, formBuilder: FormBuilder, external: { [key: string]: any }) {\n super(options, formBuilder, external);\n\n this.label = this.label || (options.label === undefined ? \"Location\" : options.label);\n this.name = \"location\";\n this.db_type = \"text\";\n this.languages = [\n { value: \"sq\", label: \"Albanian\" },\n { value: \"ar\", label: \"Arabic\" },\n {\n value: \"eu\",\n label: \"Basque\",\n },\n { value: \"be\", label: \"Belarusian\" },\n { value: \"bg\", label: \"Bulgarian\" },\n {\n value: \"my\",\n label: \"Burmese\",\n },\n { value: \"bn\", label: \"Bengali\" },\n { value: \"ca\", label: \"Catalan\" },\n {\n value: \"zh-cn\",\n label: \"Chinese (simplified)\",\n },\n { value: \"zh-tw\", label: \"Chinese (traditional)\" },\n {\n value: \"hr\",\n label: \"Croatian\",\n },\n { value: \"cs\", label: \"Czech\" },\n { value: \"da\", label: \"Danish\" },\n {\n value: \"nl\",\n label: \"Dutch\",\n },\n { value: \"en\", label: \"English\" },\n {\n value: \"en-au\",\n label: \"English (australian)\",\n },\n { value: \"en-gb\", label: \"English (great Britain)\" },\n {\n value: \"fa\",\n label: \"Farsi\",\n },\n { value: \"fi\", label: \"Finnish\" },\n { value: \"fil\", label: \"Filipino\" },\n {\n value: \"fr\",\n label: \"French\",\n },\n { value: \"gl\", label: \"Galician\" },\n { value: \"de\", label: \"German\" },\n {\n value: \"el\",\n label: \"Greek\",\n },\n { value: \"gu\", label: \"Gujarati\" },\n { value: \"iw\", label: \"Hebrew\" },\n {\n value: \"hi\",\n label: \"Hindi\",\n },\n { value: \"hu\", label: \"Hungarian\" },\n { value: \"id\", label: \"Indonesian\" },\n {\n value: \"it\",\n label: \"Italian\",\n },\n { value: \"ja\", label: \"Japanese\" },\n { value: \"kn\", label: \"Kannada\" },\n {\n value: \"kk\",\n label: \"Kazakh\",\n },\n { value: \"ko\", label: \"Korean\" },\n { value: \"ky\", label: \"Kyrgyz\" },\n {\n value: \"lt\",\n label: \"Lithuanian\",\n },\n { value: \"lv\", label: \"Latvian\" },\n { value: \"mk\", label: \"Macedonian\" },\n {\n value: \"ml\",\n label: \"Malayalam\",\n },\n { value: \"mr\", label: \"Marathi\" },\n { value: \"no\", label: \"Norwegian\" },\n {\n value: \"pl\",\n label: \"Polish\",\n },\n { value: \"pt\", label: \"Portuguese\" },\n {\n value: \"pt-br\",\n label: \"Portuguese (brazil)\",\n },\n { value: \"pt-pt\", label: \"Portuguese (portugal)\" },\n {\n value: \"pa\",\n label: \"Punjabi\",\n },\n { value: \"ro\", label: \"Romanian\" },\n { value: \"ru\", label: \"Russian\" },\n {\n value: \"sr\",\n label: \"Serbian\",\n },\n { value: \"sk\", label: \"Slovak\" },\n { value: \"sl\", label: \"Slovenian\" },\n {\n value: \"es\",\n label: \"Spanish\",\n },\n { value: \"sv\", label: \"Swedish\" },\n { value: \"tl\", label: \"Tagalog\" },\n {\n value: \"ta\",\n label: \"Tamil\",\n },\n { value: \"te\", label: \"Telugu\" },\n { value: \"th\", label: \"Thai\" },\n {\n value: \"tr\",\n label: \"Turkish\",\n },\n { value: \"uk\", label: \"Ukrainian\" },\n { value: \"uz\", label: \"Uzbek\" },\n {\n value: \"vi\",\n label: \"Vietnamese\",\n },\n ];\n this.language = options.language;\n // @ts-ignore\n this.markerImages = MapSVG.markerImages;\n this.markersByField = options.markersByField;\n this.markerField = options.markerField;\n this.markersByFieldEnabled = MapSVG.parseBoolean(options.markersByFieldEnabled);\n this.defaultMarkerPath =\n options.defaultMarkerPath ||\n this.formBuilder.mapsvg.getData().options.defaultMarkerImage;\n\n this.templates.marker = Handlebars.compile($(\"#mapsvg-data-tmpl-marker\").html());\n }\n\n init() {\n super.init();\n if (this.value) {\n this.renderMarker();\n }\n\n this.renderMarkerSelector();\n }\n\n getSchema(): { [p: string]: any } {\n const schema = super.getSchema();\n schema.language = this.language;\n schema.defaultMarkerPath = this.defaultMarkerPath;\n schema.markersByField = this.markersByField;\n schema.markerField = this.markerField;\n schema.markersByFieldEnabled = MapSVG.parseBoolean(this.markersByFieldEnabled);\n return schema;\n }\n\n getData(): { name: string; value: any } {\n return { name: this.name, value: this.value };\n }\n\n getDataForTemplate(): { [p: string]: any } {\n const data = super.getDataForTemplate();\n\n if (this.formBuilder.admin) {\n data.languages = this.languages;\n data.markerImages = MapSVG.markerImages;\n data.markersByField = this.markersByField;\n data.markerField = this.markerField;\n data.markersByFieldEnabled = MapSVG.parseBoolean(this.markersByFieldEnabled);\n const _this = this;\n data.markerImages.forEach(function (m) {\n if (m.relativeUrl === _this.defaultMarkerPath) {\n m.default = true;\n } else {\n m.default = false;\n }\n });\n }\n data.language = this.language;\n\n if (this.value) {\n data.location = this.value;\n if (data.location.marker) {\n data.location.img =\n (this.value.marker.src.indexOf(MapSVG.urls.uploads) === 0 ? \"uploads/\" : \"\") +\n this.value.marker.src.split(\"/\").pop();\n }\n }\n\n data.showUploadBtn = data.external.filtersMode;\n\n return data;\n }\n\n initEditor() {\n super.initEditor();\n this.renderMarkerSelector();\n this.fillMarkersByFieldOptions(this.markerField);\n }\n\n setDomElements() {\n super.setDomElements();\n\n this.domElements.markerImageButton = $(this.domElements.main).find(\"img\")[0];\n }\n\n setEventHandlers() {\n super.setEventHandlers();\n\n const _this = this;\n\n // Google geocoding\n const server = new Server();\n\n if (_this.formBuilder.mapsvg.isGeo()) {\n const locations = new Bloodhound({\n datumTokenizer: Bloodhound.tokenizers.obj.whitespace(\"formatted_address\"),\n queryTokenizer: Bloodhound.tokenizers.whitespace,\n remote: {\n url: server.getUrl(\"geocoding\") + \"?address=%QUERY%&language=\" + this.language,\n wildcard: \"%QUERY%\",\n transform: function (response) {\n if (response.error_message) {\n alert(response.error_message);\n }\n return response.results;\n },\n rateLimitWait: 600,\n },\n });\n const thContainer = $(this.domElements.main).find(\".typeahead\");\n const tH = thContainer\n .typeahead(\n { minLength: 3 },\n {\n name: \"mapsvg-addresses\",\n display: \"formatted_address\",\n async: true,\n // @ts-ignore\n source: (query, sync, async) => {\n const preg = new RegExp(\n /^[-+]?([1-8]?\\d(\\.\\d+)?|90(\\.0+)?),\\s*[-+]?(180(\\.0+)?|((1[0-7]\\d)|([1-9]?\\d))(\\.\\d+)?)$/\n );\n\n if (preg.test(query)) {\n const latlng = query.split(\",\").map((item) => item.trim());\n const item = {\n formatted_address: latlng.join(\",\"),\n address_components: [],\n geometry: {\n location: {\n lat: () => latlng[0],\n lng: () => latlng[1],\n },\n },\n };\n sync([item]);\n return;\n }\n\n MapSVG.geocode({ address: query }, async);\n },\n }\n )\n .on(\"typeahead:asyncrequest\", function (e) {\n $(e.target).addClass(\"tt-loading\");\n })\n .on(\"typeahead:asynccancel typeahead:asyncreceive\", function (e) {\n $(e.target).removeClass(\"tt-loading\");\n });\n\n thContainer.on(\"typeahead:select\", (ev, item) => {\n this.setValue(null, false);\n\n const address: { [key: string]: string } = {};\n address.formatted = item.formatted_address;\n item.address_components.forEach((addr_item) => {\n const type = addr_item.types[0];\n address[type] = addr_item.long_name;\n if (addr_item.short_name != addr_item.long_name) {\n address[type + \"_short\"] = addr_item.short_name;\n }\n });\n\n const locationData = {\n address: address,\n geoPoint: new GeoPoint(\n item.geometry.location.lat(),\n item.geometry.location.lng()\n ),\n img: this.getMarkerImage(this.formBuilder.getData()),\n imagePath: this.getMarkerImage(this.formBuilder.getData()),\n };\n\n this.setValue(locationData, false);\n thContainer.typeahead(\"val\", \"\");\n this.triggerChanged();\n });\n }\n\n $(this.domElements.main).on(\"change\", \".marker-file-uploader\", function () {\n _this.markerIconUpload(this);\n });\n\n $(this.domElements.main).on(\"click\", \".mapsvg-marker-image-btn-trigger\", function (e) {\n e.preventDefault();\n\n $(this).toggleClass(\"active\");\n _this.toggleMarkerSelector();\n });\n\n $(this.domElements.main).on(\"click\", \".mapsvg-marker-delete\", function (e) {\n e.preventDefault();\n _this.setValue(null);\n _this.triggerChanged();\n });\n }\n\n setEditorEventHandlers() {\n super.setEditorEventHandlers();\n\n const _this = this;\n\n $(this.domElements.edit).on(\"change\", \".marker-file-uploader\", function () {\n _this.markerIconUpload(this);\n });\n\n $(this.domElements.edit).on(\"change\", 'select[name=\"markerField\"]', function () {\n const fieldName = $(this).val();\n _this.resetMarkersByField();\n const newOptions = _this.fillMarkersByFieldOptions(fieldName);\n _this.setMarkersByField(newOptions);\n });\n $(this.domElements.edit).on(\"click\", \".mapsvg-marker-image-selector button\", function (e) {\n e.preventDefault();\n const src = $(this).find(\"img\").attr(\"src\");\n $(this).parent().find(\"button\").removeClass(\"active\");\n $(this).addClass(\"active\");\n _this.setDefaultMarkerPath(src);\n });\n $(this.domElements.edit).on(\"click\", \".mapsvg-marker-image-btn-trigger\", function (e) {\n $(this).toggleClass(\"active\");\n _this.toggleMarkerSelectorInLocationEditor.call(_this, $(this), e);\n });\n }\n\n /**\n * Upload new marker icon\n *\n * @param {HTMLInputElement} input\n */\n markerIconUpload(input) {\n const uploadBtn = $(input).closest(\".btn-file\").buttonLoading(true);\n\n for (let i = 0; i < input.files.length; i++) {\n const data = new FormData();\n\n data.append(\"file\", input.files[0]);\n\n const server = new Server();\n\n server\n .ajax(\"markers\", {\n type: \"POST\",\n data: data,\n processData: false,\n contentType: false,\n })\n .done((resp) => {\n if (resp.error) {\n alert(resp.error);\n } else {\n const marker = resp.marker;\n const newMarker = `\n \n \n `;\n\n $(this.domElements.markerSelector)\n .find(\".mapsvg-marker-image-btn.active\")\n .removeClass(\"active\");\n $(newMarker).appendTo(this.domElements.markerSelector);\n\n this.setMarkerImage(marker.relativeUrl);\n MapSVG.markerImages.push(marker);\n }\n })\n .always(function () {\n uploadBtn.buttonLoading(false);\n });\n }\n }\n\n mayBeAddDistanceRow() {\n const _this = this;\n if (!this.domElements.editDistanceRow) {\n this.domElements.editDistanceRow = $($(\"#mapsvg-edit-distance-row\").html())[0];\n }\n // if there's something in the last status edit field, add +1 status row\n const z = $(this.domElements.edit).find(\".mapsvg-edit-distance-row:last-child input\");\n if (z && z.last() && z.last().val() && (z.last().val() + \"\").trim().length) {\n const newRow = $(this.templates.editDistanceRow).clone();\n newRow.insertAfter(\n $(_this.domElements.edit).find(\".mapsvg-edit-distance-row:last-child\")\n );\n }\n const rows = $(_this.domElements.edit).find(\".mapsvg-edit-distance-row\");\n const row1 = rows.eq(rows.length - 2);\n const row2 = rows.eq(rows.length - 1);\n\n if (\n row1.length &&\n row2.length &&\n !row1.find(\"input:eq(0)\").val().toString().trim() &&\n !row2.find(\"input:eq(0)\").val().toString().trim()\n ) {\n row2.remove();\n }\n }\n\n fillMarkersByFieldOptions(fieldName) {\n const _this = this;\n const field = _this.formBuilder.mapsvg.objectsRepository.getSchema().getField(fieldName);\n const options = {};\n\n if (field) {\n const markerImg = _this.formBuilder.mapsvg.options.defaultMarkerImage;\n const rows = [];\n field.options.forEach(function (option) {\n const value = field.type === \"region\" ? option.id : option.value;\n const label = field.type === \"region\" ? option.title || option.id : option.label;\n const img =\n _this.markersByField && _this.markersByField[value]\n ? _this.markersByField[value]\n : markerImg;\n rows.push(\n '' +\n label +\n ''\n );\n options[value] = img;\n });\n $(\"#markers-by-field\").empty().append(rows);\n }\n return options;\n }\n\n renderMarker(marker?: Marker) {\n // if (!this.value && !(marker && marker.location)) {\n // return false;\n // }\n if (marker && marker.location) {\n this.value = marker.location.getData();\n }\n this.renderMarkerHtml();\n }\n\n renderMarkerHtml() {\n if (!this.value) {\n $(this.domElements.main).find(\".mapsvg-new-marker\").hide();\n } else {\n $(this.domElements.main)\n .find(\".mapsvg-new-marker\")\n .show()\n .html(this.templates.marker(this.value));\n }\n }\n\n toggleMarkerSelector() {\n if (\n this.domElements.markerSelectorWrap &&\n $(this.domElements.markerSelectorWrap).is(\":visible\")\n ) {\n $(this.domElements.markerSelectorWrap).hide();\n return;\n }\n if (\n this.domElements.markerSelectorWrap &&\n $(this.domElements.markerSelectorWrap).not(\":visible\")\n ) {\n $(this.domElements.markerSelector).find(\".active\").removeClass(\"active\");\n if (this.value && this.value.markerImagePath) {\n $(this.domElements.markerSelector)\n .find('[src=\"' + this.value.markerImagePath + '\"]')\n .parent()\n .addClass(\"active\");\n }\n $(this.domElements.markerSelectorWrap).show();\n return;\n }\n }\n\n renderMarkerSelector() {\n const _this = this;\n const view = this.formBuilder.editMode ? this.domElements.edit : this.domElements.main;\n if (!view) return;\n const currentImage = this.value ? this.value.markerImagePath : null;\n const images = MapSVG.markerImages.map(function (image) {\n return (\n ''\n );\n });\n\n this.domElements.markerSelectorWrap = $(view).find(\".mapsvg-marker-image-selector\")[0];\n this.domElements.markerSelector = $(this.domElements.markerSelectorWrap).find(\n \".mapsvg-marker-images\"\n )[0];\n\n // delete previous marker image selector and reset events\n if (this.domElements.markerSelector) {\n $(this.domElements.markerSelector).empty();\n }\n\n if (!this.formBuilder.editMode) {\n this.domElements.markerSelectorWrap.style.display = \"none\";\n $(this.domElements.markerSelector).on(\n \"click\",\n \".mapsvg-marker-image-btn-choose\",\n function (e) {\n e.preventDefault();\n const src = $(this).find(\"img\").attr(\"src\");\n\n $(_this.domElements.markerSelectorWrap).hide();\n $(_this.domElements.markerSelector).find(\".active\").removeClass(\"active\");\n $(this).addClass(\"active\");\n $(_this.domElements.main)\n .find(\".mapsvg-marker-image-btn-trigger\")\n .toggleClass(\"active\", false);\n $(_this.domElements.markerImageButton).attr(\"src\", src);\n\n _this.setMarkerImage(src);\n }\n );\n }\n $(this.domElements.markerSelector).html(images.join(\"\"));\n }\n\n private setMarkerImage(src: string) {\n this.setDefaultMarkerPath(src);\n const value = this.value;\n if (value) {\n value.img = src;\n value.imagePath = src;\n this.setValue(value);\n this.triggerChanged();\n this.renderMarker();\n }\n }\n\n toggleMarkerSelectorInLocationEditor(jQueryObj, e) {\n e.preventDefault();\n const _this = this;\n if (jQueryObj.data(\"markerSelector\") && jQueryObj.data(\"markerSelector\").is(\":visible\")) {\n jQueryObj.data(\"markerSelector\").hide();\n return;\n }\n if (jQueryObj.data(\"markerSelector\") && jQueryObj.data(\"markerSelector\").not(\":visible\")) {\n jQueryObj.data(\"markerSelector\").show();\n return;\n }\n\n const markerBtn = $(this).closest(\"td\").find(\".mapsvg-marker-image-btn-trigger\");\n const currentImage = markerBtn.attr(\"src\");\n const images = MapSVG.markerImages.map(function (image) {\n return (\n ''\n );\n });\n\n if (!jQueryObj.data(\"markerSelector\")) {\n const ms = $('
');\n jQueryObj.closest(\"td\").append(ms);\n jQueryObj.data(\"markerSelector\", ms);\n } else {\n jQueryObj.data(\"markerSelector\").empty();\n }\n\n jQueryObj.data(\"markerSelector\").html(images.join(\"\"));\n\n jQueryObj\n .data(\"markerSelector\")\n .on(\"click\", \".mapsvg-marker-image-btn-choose\", function (e) {\n e.preventDefault();\n const src = $(this).find(\"img\").attr(\"src\");\n jQueryObj.data(\"markerSelector\").hide();\n const td = $(this).closest(\"td\");\n const fieldId = $(this).closest(\"tr\").data(\"option-id\");\n const btn = td.find(\".mapsvg-marker-image-btn-trigger\");\n btn.toggleClass(\"active\", false);\n btn.find(\"img\").attr(\"src\", src);\n _this.setMarkerByField(fieldId, src);\n });\n }\n\n setMarkersByField(options: { [key: string]: string }): void {\n this.markersByField = options;\n }\n resetMarkersByField() {\n this.markersByField = {};\n }\n setMarkerByField(fieldId, markerImg) {\n this.markersByField = this.markersByField || {};\n this.markersByField[fieldId] = markerImg;\n }\n\n deleteMarker() {\n const _this = this;\n\n $(this.domElements.main).find(\".mapsvg-new-marker\").hide();\n $(this.domElements.main).find(\".mapsvg-marker-id\").attr(\"disabled\", \"disabled\");\n }\n\n destroy() {\n if ($().mselect2) {\n const sel = $(this.domElements.main).find(\".mapsvg-select2\");\n if (sel.length) {\n sel.mselect2(\"destroy\");\n }\n }\n this.domElements.markerSelector && $(this.domElements.markerSelector).popover(\"dispose\");\n }\n\n setDefaultMarkerPath(path: string): void {\n this.defaultMarkerPath = path;\n this.formBuilder.mapsvg.setDefaultMarkerImage(path);\n }\n\n getMarkerImage(data: { [key: string]: any }): string {\n let fieldValue;\n\n if (this.markersByFieldEnabled) {\n fieldValue = data[this.markerField];\n if (!fieldValue) {\n return this.defaultMarkerPath || MapSVG.defaultMarkerImage;\n } else {\n if (this.markerField === \"regions\") {\n fieldValue = fieldValue[0] && fieldValue[0].id;\n } else if (typeof fieldValue === \"object\" && fieldValue.length) {\n fieldValue = fieldValue[0].value;\n }\n if (this.markersByField[fieldValue]) {\n return (\n this.markersByField[fieldValue] ||\n this.defaultMarkerPath ||\n MapSVG.defaultMarkerImage\n );\n }\n }\n } else {\n return this.defaultMarkerPath || MapSVG.defaultMarkerImage;\n }\n }\n\n setValue(value: any, updateInput = true): void {\n this.value = value;\n if (this.value) {\n if (!this.value.address) {\n this.value.address = {};\n }\n if (Object.keys(this.value.address).length < 2 && this.value.geoPoint) {\n this.value.address.formatted =\n this.value.geoPoint.lat + \",\" + this.value.geoPoint.lng;\n }\n }\n this.renderMarker();\n }\n}\n","import { FormElement } from \"../FormElement\";\nimport { FormBuilder } from \"../../FormBuilder\";\nimport { SchemaField } from \"../../../Infrastructure/Server/SchemaField\";\n\nconst $ = jQuery;\n\nexport class ModalFormElement extends FormElement {\n showButtonText: boolean;\n\n constructor(options: SchemaField, formBuilder: FormBuilder, external: { [key: string]: any }) {\n super(options, formBuilder, external);\n\n this.showButtonText = options.showButtonText;\n }\n\n getSchema(): { [p: string]: any } {\n const schema = super.getSchema();\n schema.showButtonText = this.showButtonText;\n return schema;\n }\n}\n","import { FormElement } from \"../FormElement\";\nimport { FormBuilder } from \"../../FormBuilder\";\nimport { MapSVG } from \"../../../Core/globals.js\";\nimport { SchemaField } from \"../../../Infrastructure/Server/SchemaField\";\nimport { Server } from \"../../../Infrastructure/Server/Server\";\nimport { PostInterface } from \"../../../Post/PostInterface\";\n\nconst $ = jQuery;\n\nexport class PostFormElement extends FormElement {\n id: number;\n post?: PostInterface;\n inputs: { postSelect: HTMLSelectElement };\n add_fields: boolean;\n post_type: boolean;\n post_types: string[];\n\n constructor(options: SchemaField, formBuilder: FormBuilder, external: { [key: string]: any }) {\n super(options, formBuilder, external);\n\n if (this.formBuilder.admin) this.post_types = this.formBuilder.admin.getPostTypes();\n this.post_type = options.post_type || this.post_types[0];\n this.add_fields = MapSVG.parseBoolean(options.add_fields);\n this.db_type = \"int(11)\";\n this.name = \"post\";\n this.post = options.post;\n }\n\n setDomElements() {\n super.setDomElements();\n this.inputs.postSelect = (\n $(this.domElements.main).find(\".mapsvg-find-post\")[0]\n );\n }\n\n getSchema(): { [p: string]: any } {\n const schema = super.getSchema();\n schema.post_type = this.post_type;\n schema.add_fields = this.add_fields;\n return schema;\n }\n\n destroy() {\n // @ts-ignore\n if ($().mselect2) {\n const sel = $(this.domElements.main).find(\".mapsvg-select2\");\n if (sel.length) {\n //@ts-ignore\n sel.mselect2(\"destroy\");\n }\n }\n }\n\n getDataForTemplate(): { [p: string]: any } {\n const data = super.getDataForTemplate();\n\n if (this.formBuilder.admin) data.post_types = this.formBuilder.admin.getPostTypes();\n data.post_type = this.post_type;\n data.post = this.post;\n data.add_fields = this.add_fields || 0;\n return data;\n }\n\n setEventHandlers() {\n super.setEventHandlers();\n\n const server = new Server();\n\n // @ts-ignore\n $(this.inputs.postSelect)\n .mselect2({\n placeholder: \"Search post by title\",\n allowClear: true,\n disabled: this.readonly,\n ajax: {\n url: server.getUrl(\"posts\"), //MapSVG.urls.ajaxurl + '?action=mapsvg_search_posts&post_type=' + this.post_type,\n dataType: \"json\",\n delay: 250,\n data: (params) => {\n return {\n filters: { post_type: this.post_type },\n search: params.term, // search term\n page: params.page,\n };\n },\n processResults: (data, params) => {\n // parse the results into the format expected by Select2\n // since we are using custom formatting functions we do not need to\n // alter the remote JSON data, except to indicate that infinite\n // scrolling can be used\n params.page = params.page || 1;\n\n return {\n results: data.posts ? data.posts : [],\n pagination: {\n more: false, //(params.page * 30) < data.total_count\n },\n };\n },\n cache: true,\n },\n escapeMarkup: (markup) => {\n return markup;\n }, // let our custom formatter work\n minimumInputLength: 1,\n templateResult: this.formatRepo, // omitted for brevity, see the source of this page\n templateSelection: this.formatRepoSelection, // omitted for brevity, see the source of this page\n })\n .on(\"select2:select\", (e) => {\n const post = e.params.data;\n this.setValue(post);\n this.setInputValue(post);\n this.triggerChanged();\n })\n .on(\"change\", (e) => {\n if (e.target.value === \"\") {\n $(this.domElements.main).find(\".mapsvg-post-id\").text(\"\");\n $(this.domElements.main).find(\".mapsvg-post-url\").text(\"\");\n this.setValue(null, false);\n this.triggerChanged();\n }\n });\n }\n\n formatRepo(repo): string {\n if (repo.loading) {\n return repo.text;\n } else {\n return \"
\" + repo.post_title + \"
\";\n }\n }\n\n formatRepoSelection(repo): string {\n return repo.post_title || repo.text;\n }\n\n setValue(post: PostInterface, updateInput = true) {\n this.value = post;\n if (updateInput) {\n this.setInputValue(post);\n }\n }\n\n setInputValue(post: PostInterface): void {\n $(this.domElements.main).find(\".mapsvg-post-id\").text(post.id);\n $(this.domElements.main).find(\".mapsvg-post-url\").text(post.url).attr(\"href\", post.url);\n }\n}\n","import { FormElement } from \"../FormElement\";\nimport { FormBuilder } from \"../../FormBuilder\";\nimport { SchemaField } from \"../../../Infrastructure/Server/SchemaField\";\n\nconst $ = jQuery;\n\nexport class RadioFormElement extends FormElement {\n inputs: { radios: RadioNodeList };\n $radios: any;\n\n constructor(options: SchemaField, formBuilder: FormBuilder, external: { [key: string]: any }) {\n super(options, formBuilder, external);\n this.setOptions(options.options);\n }\n\n setDomElements(): void {\n super.setDomElements();\n this.inputs.radios = this.formBuilder.getForm().elements[this.name];\n this.$radios = $(this.domElements.main).find('input[type=\"radio\"]');\n }\n\n setEventHandlers(): void {\n super.setEventHandlers();\n\n this.$radios.on(\"change\", (e) => {\n this.setValue(e.target.value, false);\n this.triggerChanged();\n });\n }\n\n setInputValue(value: string | null): void {\n if (value === null) {\n this.$radios.prop(\"checked\", false);\n } else {\n this.inputs.radios.value = value;\n }\n }\n}\n","import { FormElement } from \"../FormElement.js\";\nimport { FormBuilder } from \"../../FormBuilder.js\";\nimport { MapSVG } from \"../../../Core/globals.js\";\nimport { SchemaField } from \"../../../Infrastructure/Server/SchemaField\";\n\nconst $ = jQuery;\n\n// TODO extend RegionsFormElement from the (not yet created) MultiselectFormElement\n\nexport class RegionsFormElement extends FormElement {\n inputs: { select: HTMLSelectElement };\n regionsTableName: string;\n\n constructor(options: SchemaField, formBuilder: FormBuilder, external: { [key: string]: any }) {\n super(options, formBuilder, external);\n this.searchable = MapSVG.parseBoolean(options.searchable);\n this.options = this.formBuilder.getRegionsList();\n this.label = options.label === undefined ? \"Regions\" : options.label;\n this.name = \"regions\";\n this.db_type = \"text\";\n if (typeof this.value === \"undefined\") {\n this.value = [];\n }\n // TODO inject the table name as a dependency\n this.regionsTableName = this.formBuilder.mapsvg.regionsRepository.getSchema().name;\n }\n\n setDomElements() {\n super.setDomElements();\n this.inputs.select = $(this.domElements.main).find(\"select\")[0];\n }\n\n getData(): { name: string; value: any } {\n return { name: \"regions\", value: this.value };\n }\n\n getSchema(): { [p: string]: any } {\n const schema = super.getSchema();\n if (schema.multiselect) schema.db_type = \"text\";\n const opts = $.extend(true, {}, { options: this.options });\n schema.options = opts.options;\n schema.optionsDict = {};\n schema.options.forEach(function (option) {\n schema.optionsDict[option.id] = option.title || option.id;\n });\n\n return schema;\n }\n\n getDataForTemplate(): { [p: string]: any } {\n const data = super.getDataForTemplate();\n data.regionsTableName = this.regionsTableName;\n data.regionsFromCurrentTable = this.getRegionsForCurrentTable();\n return data;\n }\n\n getRegionsForCurrentTable(): Array<{ id: string; title: string; tableName: string }> {\n return this.value\n ? this.value.filter((region) => region.tableName === this.regionsTableName)\n : [];\n }\n\n setEventHandlers(): void {\n super.setEventHandlers();\n $(this.inputs.select).on(\"change\", (e) => {\n const selectedOptions = Array.from(this.inputs.select.selectedOptions);\n const selectedValues = selectedOptions.map((option) => option.value);\n this.setValue(selectedValues, false);\n this.triggerChanged();\n });\n }\n\n destroy(): void {\n if ($().mselect2) {\n const sel = $(this.domElements.main).find(\".mapsvg-select2\");\n if (sel.length) {\n //@ts-ignore\n sel.mselect2(\"destroy\");\n }\n }\n }\n\n setValue(regionIds: string[], updateInput = true) {\n const regionsFromOtherTables = this.value.filter(\n (region) => region.tableName !== this.regionsTableName\n );\n const regions = [];\n regionIds.forEach((regionId: string) => {\n const region = this.formBuilder.mapsvg.getRegion(regionId);\n regions.push({ id: region.id, title: region.title, tableName: this.regionsTableName });\n });\n this.value = regions.concat(regionsFromOtherTables);\n if (updateInput) {\n this.setInputValue(regionIds);\n }\n }\n\n // TODO add setInpuValue\n}\n","import { FormElement } from \"../FormElement.js\";\nimport { FormBuilder } from \"../../FormBuilder.js\";\nimport { SchemaField } from \"../../../Infrastructure/Server/SchemaField\";\n\nconst $ = jQuery;\n\nexport class SaveFormElement extends FormElement {\n constructor(options: SchemaField, formBuilder: FormBuilder, external: { [key: string]: any }) {\n super(options, formBuilder, external);\n this.readonly = true;\n }\n\n setDomElements() {\n super.setDomElements();\n this.inputs.btnSave = $(this.domElements.main).find(\".btn-save\")[0];\n this.inputs.btnClose = $(this.domElements.main).find(\".mapsvg-close\")[0];\n }\n\n setEventHandlers() {\n super.setEventHandlers();\n $(this.inputs.btnSave).on(\"click\", (e) => {\n e.preventDefault();\n this.events.trigger(\"click.btn.save\");\n });\n $(this.inputs.btnClose).on(\"click\", (e) => {\n e.preventDefault();\n this.events.trigger(\"click.btn.close\");\n });\n }\n}\n","import { FormElement } from \"../FormElement\";\nimport { FormBuilder } from \"../../FormBuilder\";\nimport { MapSVG } from \"../../../Core/globals.js\";\nimport { SchemaField } from \"../../../Infrastructure/Server/SchemaField\";\n\nconst $ = jQuery;\n\nexport class SearchFormElement extends FormElement {\n searchFallback: boolean;\n width: string;\n\n constructor(options: SchemaField, formBuilder: FormBuilder, external: { [key: string]: any }) {\n super(options, formBuilder, external);\n\n this.searchFallback = MapSVG.parseBoolean(options.searchFallback) || false;\n this.width = options.width || \"100%\";\n this.name = \"search\";\n }\n\n setDomElements() {\n super.setDomElements();\n this.inputs.text = $(this.domElements.main).find(\"input\")[0];\n }\n\n setEventHandlers(): void {\n super.setEventHandlers();\n $(this.inputs.text).on(\"change keyup paste\", (e) => {\n this.setValue(e.target.value, false);\n this.triggerChanged();\n });\n }\n\n setInputValue(value: string | null): void {\n this.inputs.text.value = value;\n }\n\n getSchema(): { [p: string]: any } {\n const schema = super.getSchema();\n schema.searchFallback = MapSVG.parseBoolean(this.searchFallback);\n schema.placeholder = this.placeholder;\n schema.width = this.width;\n return schema;\n }\n}\n","/// \nimport { FormElement } from \"../FormElement.js\";\nimport { FormBuilder } from \"../../FormBuilder.js\";\nimport { MapSVG } from \"../../../Core/globals.js\";\nimport { SchemaField } from \"../../../Infrastructure/Server/SchemaField\";\n\nconst $ = jQuery;\n\n// TODO extract \"multiselect\" class and make it inherited from SelectFormElement\n\nexport class SelectFormElement extends FormElement {\n multiselect: boolean;\n optionsGrouped: any;\n inputs: { select: HTMLSelectElement };\n\n constructor(options: SchemaField, formBuilder: FormBuilder, external: { [key: string]: any }) {\n super(options, formBuilder, external);\n this.searchable = MapSVG.parseBoolean(options.searchable);\n this.multiselect = MapSVG.parseBoolean(options.multiselect);\n this.optionsGrouped = options.optionsGrouped;\n this.db_type = this.multiselect ? \"text\" : \"varchar(255)\";\n\n this.setOptions(options.options);\n }\n\n setDomElements() {\n super.setDomElements();\n this.inputs.select = $(this.domElements.main).find(\"select\")[0];\n }\n\n getSchema(): { [p: string]: any } {\n const schema = super.getSchema();\n schema.multiselect = MapSVG.parseBoolean(this.multiselect);\n if (schema.multiselect) schema.db_type = \"text\";\n schema.optionsGrouped = this.optionsGrouped;\n const opts = $.extend(true, {}, { options: this.options });\n schema.options = opts.options || [];\n schema.optionsDict = {};\n schema.options.forEach(function (option) {\n schema.optionsDict[option.value] = option.label;\n });\n\n return schema;\n }\n\n // getData(){\n // TODO check this and uncomment maybe\n // data[control.name] = data[control.name].map(function(value){\n // return {value: value, label: control.optionsDict[value]};\n // });\n\n // TODO: check about multiselect\n // return {value: value, label: control.optionsDict[value]};\n // }\n\n setEventHandlers() {\n super.setEventHandlers();\n\n // TODO: check about multiselect\n $(this.inputs.select).on(\"change\", (e) => {\n if (this.multiselect) {\n // Comment by Roman: AirBNB JS guide suggest using a spread operator:\n // [...this.inputs.select.selectedOptions]\n // instead of\n // Array.from(this.inputs.select.selectedOptions)\n // but Typescript compiler thinks it's incorrect and underlines that code\n // with a red line - so I'm using Array.from()\n const selectedOptions = Array.from(this.inputs.select.selectedOptions);\n const selectedValues = selectedOptions.map((option) => {\n return { label: option.label, value: option.value };\n });\n this.setValue(selectedValues, false);\n this.triggerChanged();\n } else {\n this.setValue(this.inputs.select.value, false);\n this.triggerChanged();\n }\n });\n }\n\n addSelect2() {\n if ($().mselect2) {\n const select2Options: { placeholder?: string; allowClear?: boolean } = {};\n if (this.formBuilder.filtersMode && this.type == \"select\") {\n select2Options.placeholder = this.placeholder;\n if (!this.multiselect) {\n select2Options.allowClear = true;\n }\n }\n $(this.domElements.main)\n .find(\"select\")\n .css({ width: \"100%\", display: \"block\" })\n .mselect2(select2Options)\n .on(\"select2:focus\", function () {\n $(this).mselect2(\"open\");\n });\n $(this.domElements.main)\n .find(\".select2-selection--multiple .select2-search__field\")\n .css(\"width\", \"100%\");\n }\n }\n\n setOptions(options?: any[]): any[] {\n if (options) {\n this.options = [];\n this.optionsDict = {};\n options.forEach((value, key) => {\n this.options.push(value);\n if (this.optionsGrouped) {\n value.options.forEach((value2, key2) => {\n this.optionsDict[value2.value] = value2;\n });\n } else {\n this.optionsDict[key] = value;\n }\n });\n return this.options;\n } else {\n return this.setOptions([\n { label: \"Option one\", name: \"option_one\", value: 1 },\n { label: \"Option two\", name: \"option_two\", value: 2 },\n ]);\n }\n }\n\n setInputValue(value: string | Array<{ label: string; value: string | number }>): void {\n if (this.multiselect) {\n if (this.value) {\n $(this.inputs.select).val(this.value.map((el) => el.value));\n } else {\n $(this.inputs.select).val([]);\n }\n } else {\n this.inputs.select.value = this.value;\n }\n $(this.inputs.select).trigger(\"change.select2\");\n }\n}\n","/// \n\nimport {FormElement} from \"../FormElement\";\nimport {FormBuilder} from \"../../FormBuilder\";\nimport {MapSVG} from \"../../../Core/globals.js\";\nimport {SchemaField} from \"../../../Infrastructure/Server/SchemaField\";\n\nconst $ = jQuery;\n\nexport class StatusFormElement extends FormElement {\n inputs: { select: HTMLSelectElement };\n\n constructor(options: SchemaField, formBuilder: FormBuilder, external: { [key: string]: any }) {\n super(options, formBuilder, external);\n this.label = options.label || \"Status\";\n this.name = \"status\";\n this.setOptions(options.options);\n }\n\n setDomElements() {\n super.setDomElements();\n this.inputs.select = $(this.domElements.main).find(\"select\")[0];\n if ($().colorpicker) {\n $(this.domElements.main)\n .find(\".cpicker\")\n .colorpicker()\n .on(\"changeColor.colorpicker\", function (event) {\n const input = $(this).find(\"input\");\n if (input.val() == \"\") $(this).find(\"i\").css({\"background-color\": \"\"});\n });\n this.domElements.edit &&\n $(this.domElements.edit)\n .find(\".cpicker\")\n .colorpicker()\n .on(\"changeColor.colorpicker\", function (event) {\n const input = $(this).find(\"input\");\n if (input.val() == \"\") $(this).find(\"i\").css({\"background-color\": \"\"});\n });\n }\n }\n\n destroy() {\n if ($().mselect2) {\n const sel = $(this.domElements.main).find(\".mapsvg-select2\");\n if (sel.length) {\n sel.mselect2(\"destroy\");\n }\n }\n }\n\n setEditorEventHandlers() {\n super.setEditorEventHandlers();\n const _this = this;\n $(this.domElements.edit).on(\n \"keyup change paste\",\n \".mapsvg-edit-status-row input\",\n function () {\n _this.mayBeAddStatusRow();\n }\n );\n }\n\n initEditor() {\n super.initEditor();\n const _this = this;\n $(_this.domElements.edit)\n .find(\".cpicker\")\n .colorpicker()\n .on(\"changeColor.colorpicker\", function (event) {\n const input = $(this).find(\"input\");\n const index = $(this).closest(\"tr\").index();\n if (input.val() == \"\") $(this).find(\"i\").css({\"background-color\": \"\"});\n _this.options[index] = _this.options[index] || {\n label: \"\",\n value: \"\",\n color: \"\",\n disabled: false,\n };\n _this.options[index][\"color\"] = input.val();\n });\n _this.mayBeAddStatusRow();\n }\n\n mayBeAddStatusRow(): void {\n const _this = this;\n const editStatusRow = $($(\"#mapsvg-edit-status-row\").html());\n // if there's something in the last status edit field, add +1 status row\n const z = $(_this.domElements.edit).find(\".mapsvg-edit-status-label:last-child\");\n if (z && z.last() && z.last().val() && (z.last().val() + \"\").trim().length) {\n const newRow = editStatusRow.clone();\n newRow.insertAfter(\n $(_this.domElements.edit).find(\".mapsvg-edit-status-row:last-child\")\n );\n newRow\n .find(\".cpicker\")\n .colorpicker()\n .on(\"changeColor.colorpicker\", function (event) {\n const input = $(this).find(\"input\");\n const index = $(this).closest(\"tr\").index();\n if (input.val() == \"\") $(this).find(\"i\").css({\"background-color\": \"\"});\n _this.options[index] = _this.options[index] || {\n label: \"\",\n value: \"\",\n color: \"\",\n disabled: false,\n };\n _this.options[index][\"color\"] = input.val();\n });\n }\n const rows = $(_this.domElements.edit).find(\".mapsvg-edit-status-row\");\n const row1 = rows.eq(rows.length - 2);\n const row2 = rows.eq(rows.length - 1);\n\n if (\n row1.length &&\n row2.length &&\n !(\n row1.find(\"input:eq(0)\").val().toString().trim() ||\n row1.find(\"input:eq(1)\").val().toString().trim() ||\n row1.find(\"input:eq(2)\").val().toString().trim()\n ) &&\n !(\n row2.find(\"input:eq(0)\").val().toString().trim() ||\n row2.find(\"input:eq(1)\").val().toString().trim() ||\n row2.find(\"input:eq(2)\").val().toString().trim()\n )\n ) {\n row2.remove();\n }\n }\n\n setEventHandlers(): void {\n super.setEventHandlers();\n $(this.inputs.select).on(\"change keyup paste\", (e) => {\n this.setValue(e.target.value, false);\n this.triggerChanged();\n });\n }\n\n getSchema(): { [p: string]: any } {\n const schema = super.getSchema();\n\n const opts = $.extend(true, {}, {options: this.options});\n schema.options = opts.options;\n schema.optionsDict = {};\n\n schema.options.forEach(function (option, index) {\n if (schema.options[index].value === \"\") {\n schema.options.splice(index, 1);\n } else {\n schema.options[index].disabled = MapSVG.parseBoolean(\n schema.options[index].disabled\n );\n schema.optionsDict[option.value] = option;\n }\n });\n\n return schema;\n }\n\n setInputValue(value: string): void {\n this.inputs.select.value = value;\n }\n}\n","import { FormElement } from \"../FormElement\";\nimport { FormBuilder } from \"../../FormBuilder\";\nimport { MapSVG } from \"../../../Core/globals.js\";\nimport * as CodeMirror from \"CodeMirror\";\nimport { SchemaField } from \"../../../Infrastructure/Server/SchemaField\";\n\nconst $ = jQuery;\n\nexport class TextareaFormElement extends FormElement {\n searchType: string;\n html: boolean;\n htmlEditor: any;\n autobr: boolean;\n editor: CodeMirror.Editor;\n inputs: { textarea: HTMLTextAreaElement };\n\n constructor(options: SchemaField, formBuilder: FormBuilder, external: { [key: string]: any }) {\n super(options, formBuilder, external);\n this.searchType = options.searchType || \"fulltext\";\n this.searchable = MapSVG.parseBoolean(options.searchable);\n this.autobr = options.autobr;\n this.html = options.html;\n this.db_type = \"text\";\n }\n\n setDomElements() {\n super.setDomElements();\n this.inputs.textarea = $(this.domElements.main).find(\"textarea\")[0];\n\n if (this.html) {\n this.editor = CodeMirror.fromTextArea(this.inputs.textarea, {\n mode: { name: \"handlebars\", base: \"text/html\" },\n //@ts-ignore\n matchBrackets: true,\n lineNumbers: true,\n });\n if (this.formBuilder.admin) {\n this.editor.on(\"change\", this.setTextareaValue);\n }\n }\n }\n\n setEventHandlers() {\n super.setEventHandlers();\n $(this.inputs.textarea).on(\"change keyup paste\", (e) => {\n this.setValue(e.target.value, false);\n this.triggerChanged();\n });\n }\n\n getSchema(): { [p: string]: any } {\n const schema = super.getSchema();\n schema.autobr = this.autobr;\n schema.html = this.html;\n return schema;\n }\n\n getDataForTemplate(): { [p: string]: any } {\n const data = super.getDataForTemplate();\n data.html = this.html;\n return data;\n }\n\n setTextareaValue(codemirror, changeobj) {\n const handler = codemirror.getValue();\n const textarea = $(codemirror.getTextArea());\n textarea.val(handler).trigger(\"change\");\n }\n\n destroy() {\n const cm = $(this.domElements.main).find(\".CodeMirror\");\n if (cm.length) {\n cm.empty().remove();\n }\n }\n}\n","import { FormElement } from \"../FormElement.js\";\nimport { FormBuilder } from \"../../FormBuilder.js\";\nimport { MapSVG } from \"../../../Core/globals.js\";\nimport { SchemaField } from \"../../../Infrastructure/Server/SchemaField\";\n\nconst $ = jQuery;\n\nexport class TextFormElement extends FormElement {\n searchType: string;\n searchFallback: boolean;\n placeholder: string;\n noResultsText: string;\n width: string;\n inputs: { text: HTMLInputElement };\n\n constructor(options: SchemaField, formBuilder: FormBuilder, external: { [key: string]: any }) {\n super(options, formBuilder, external);\n this.searchFallback = MapSVG.parseBoolean(options.searchFallback);\n this.searchType = options.searchType;\n this.width =\n this.formBuilder.filtersHide && !this.formBuilder.modal\n ? null\n : options.width || \"100%\";\n this.db_type = \"varchar(255)\";\n }\n\n setDomElements() {\n super.setDomElements();\n this.inputs.text = $(this.domElements.main).find('input[type=\"text\"]')[0];\n }\n\n getSchema(): { [p: string]: any } {\n const schema = super.getSchema();\n schema.searchType = this.searchType;\n return schema;\n }\n\n setEventHandlers() {\n super.setEventHandlers();\n $(this.inputs.text).on(\"change keyup paste\", (e) => {\n this.setValue(e.target.value, false);\n this.triggerChanged();\n });\n }\n\n setInputValue(value: string): void {\n this.inputs.text.value = value;\n }\n}\n","import { FormElement } from \"../FormElement.js\";\nimport { FormBuilder } from \"../../FormBuilder.js\";\nimport { MapSVG } from \"../../../Core/globals.js\";\nimport { SchemaField } from \"../../../Infrastructure/Server/SchemaField\";\n\nconst $ = jQuery;\n\nexport class TitleFormElement extends FormElement {\n searchType: string;\n searchFallback: boolean;\n placeholder: string;\n noResultsText: string;\n width: string;\n inputs: { text: HTMLInputElement };\n\n constructor(options: SchemaField, formBuilder: FormBuilder, external: { [key: string]: any }) {\n super(options, formBuilder, external);\n this.searchFallback = MapSVG.parseBoolean(options.searchFallback);\n this.width =\n this.formBuilder.filtersHide && !this.formBuilder.modal\n ? null\n : options.width || \"100%\";\n this.db_type = \"varchar(255)\";\n }\n\n setDomElements() {\n super.setDomElements();\n this.inputs.text = $(this.domElements.main).find('input[type=\"text\"]')[0];\n }\n\n getSchema(): { [p: string]: any } {\n const schema = super.getSchema();\n schema.searchType = this.searchType;\n return schema;\n }\n\n setEventHandlers() {\n super.setEventHandlers();\n $(this.inputs.text).on(\"change keyup paste\", (e) => {\n this.setValue(e.target.value, false);\n this.triggerChanged();\n });\n }\n\n setInputValue(value: string): void {\n this.inputs.text.value = value;\n }\n}\n","import { FormElement } from \"../FormElement.js\";\nimport { FormBuilder } from \"../../FormBuilder.js\";\nimport { MapSVG } from \"../../../Core/globals.js\";\nimport { SchemaField } from \"../../../Infrastructure/Server/SchemaField\";\n\nconst $ = jQuery;\n\nexport class ColorPickerFormElement extends FormElement {\n searchType: string;\n searchFallback: boolean;\n placeholder: string;\n noResultsText: string;\n width: string;\n inputs: { text: HTMLInputElement };\n\n constructor(options: SchemaField, formBuilder: FormBuilder, external: { [key: string]: any }) {\n super(options, formBuilder, external);\n this.searchFallback = MapSVG.parseBoolean(options.searchFallback);\n this.width =\n this.formBuilder.filtersHide && !this.formBuilder.modal\n ? null\n : options.width || \"100%\";\n this.db_type = \"varchar(255)\";\n }\n\n setDomElements() {\n super.setDomElements();\n this.inputs.text = $(this.domElements.main).find(\"input.cpicker\")[0];\n $(this.domElements.main).find(\".colorpicker-element\").colorpicker();\n }\n\n getSchema(): { [p: string]: any } {\n const schema = super.getSchema();\n schema.searchType = this.searchType;\n return schema;\n }\n\n setEventHandlers() {\n super.setEventHandlers();\n $(this.inputs.text).on(\"change keyup paste\", (e) => {\n this.setValue(e.target.value, false);\n this.triggerChanged();\n });\n $(this.domElements.main).find(\".colorpicker-element\").colorpicker().on(\n \"changeColor.colorpicker\",\n (e) => {\n this.setValue(this.inputs.text.value, false);\n this.triggerChanged();\n }\n );\n }\n\n setInputValue(value: string): void {\n this.inputs.text.value = value;\n }\n}\n","import * as FormElementTypes from \"./index.js\";\nimport { MapSVGMap } from \"../../Map/Map\";\nimport { FormBuilder } from \"../FormBuilder\";\nimport { SchemaField } from \"../../Infrastructure/Server/SchemaField\";\nimport { ArrayIndexed } from \"../../Core/ArrayIndexed\";\n\nconst $ = jQuery;\n\nexport class FormElementFactory {\n mapsvg: MapSVGMap;\n formBuilder: FormBuilder;\n namespace: string;\n editMode: boolean;\n filtersMode: boolean;\n mediaUploader: any;\n showNames: boolean;\n\n constructor(options: {\n mapsvg: MapSVGMap;\n formBuilder: FormBuilder;\n editMode: boolean;\n filtersMode: boolean;\n namespace: string;\n mediaUploader: any;\n showNames?: boolean;\n }) {\n this.mapsvg = options.mapsvg;\n this.editMode = options.editMode;\n this.filtersMode = options.filtersMode;\n this.namespace = options.namespace;\n this.mediaUploader = options.mediaUploader;\n this.formBuilder = options.formBuilder;\n this.showNames = options.showNames !== false;\n }\n\n create(options: SchemaField): FormElementTypes.FormElementInterface {\n const types = {\n checkbox: FormElementTypes.CheckboxFormElement,\n checkboxes: FormElementTypes.CheckboxesFormElement,\n date: FormElementTypes.DateFormElement,\n distance: FormElementTypes.DistanceFormElement,\n empty: FormElementTypes.EmptyFormElement,\n id: FormElementTypes.IdFormElement,\n image: FormElementTypes.ImagesFormElement,\n location: FormElementTypes.LocationFormElement,\n modal: FormElementTypes.ModalFormElement,\n post: FormElementTypes.PostFormElement,\n radio: FormElementTypes.RadioFormElement,\n region: FormElementTypes.RegionsFormElement,\n save: FormElementTypes.SaveFormElement,\n search: FormElementTypes.SearchFormElement,\n select: FormElementTypes.SelectFormElement,\n status: FormElementTypes.StatusFormElement,\n text: FormElementTypes.TextFormElement,\n textarea: FormElementTypes.TextareaFormElement,\n title: FormElementTypes.TitleFormElement,\n colorpicker: FormElementTypes.ColorPickerFormElement,\n };\n\n const formElement = new types[options.type](\n options,\n this.formBuilder,\n this.getExtraParams()\n );\n formElement.init();\n return formElement;\n }\n\n getExtraParams() {\n const databaseFields = [];\n const databaseFieldsFilterable = [];\n const databaseFieldsFilterableShort = [];\n const regionFields = [];\n const regionFieldsFilterable = [];\n const regions = new ArrayIndexed(\"id\");\n let mapIsGeo = false;\n\n if (this.mapsvg) {\n mapIsGeo = this.mapsvg.isGeo();\n const schemaObjects = this.mapsvg.objectsRepository.getSchema();\n if (schemaObjects) {\n schemaObjects.getFields().forEach(function (obj) {\n if (\n obj.type == \"text\" ||\n obj.type == \"region\" ||\n obj.type == \"textarea\" ||\n obj.type == \"post\" ||\n obj.type == \"select\" ||\n obj.type == \"radio\" ||\n obj.type == \"checkbox\"\n ) {\n if (obj.type == \"post\") {\n databaseFields.push(\"Object.post.post_title\");\n } else {\n databaseFields.push(\"Object.\" + obj.name);\n }\n }\n if (obj.type == \"region\" || obj.type == \"select\" || obj.type == \"radio\") {\n databaseFieldsFilterable.push(\"Object.\" + obj.name);\n databaseFieldsFilterableShort.push(obj.name);\n }\n });\n }\n\n const schemaRegions = this.mapsvg.regionsRepository.getSchema();\n\n if (schemaRegions) {\n schemaRegions.getFieldsAsArray().forEach(function (obj) {\n if (\n obj.type == \"status\" ||\n obj.type == \"text\" ||\n obj.type == \"textarea\" ||\n obj.type == \"post\" ||\n obj.type == \"select\" ||\n obj.type == \"radio\" ||\n obj.type == \"checkbox\"\n ) {\n if (obj.type == \"post\") {\n regionFields.push(\"Region.post.post_title\");\n } else {\n regionFields.push(\"Region.\" + obj.name);\n }\n }\n if (obj.type == \"status\" || obj.type == \"select\" || obj.type == \"radio\") {\n regionFieldsFilterable.push(\"Region.\" + obj.name);\n }\n });\n }\n\n this.mapsvg.regions.forEach((region) => {\n regions.push({ id: region.id, title: region.title });\n });\n }\n\n return {\n databaseFields: databaseFields,\n databaseFieldsFilterable: databaseFieldsFilterable,\n databaseFieldsFilterableShort: databaseFieldsFilterableShort,\n regionFields: regionFields,\n regionFieldsFilterable: regionFieldsFilterable,\n regions: regions,\n mapIsGeo: mapIsGeo,\n mediaUploader: this.mediaUploader,\n filtersMode: this.filtersMode,\n showNames: this.showNames,\n };\n }\n}\n","/// \nimport { MapSVG } from \"../Core/globals.js\";\nimport { MapSVGMap } from \"../Map/Map\";\nimport { Schema } from \"../Infrastructure/Server/Schema\";\n// import {Handlebars} from \"../../handlebars.js\"\n// @ts-ignore\nimport Handlebars from \"Handlebars\";\nimport { ResizeSensor } from \"../Core/ResizeSensor\";\nimport { Events } from \"../Core/Events\";\nimport * as FormElementTypes from \"./FormElements/index.js\";\nimport { FormElementFactory } from \"./FormElements/FormElementFactory.js\";\nimport { GeoPoint, Location, SVGPoint } from \"../Location/Location.js\";\nimport { Marker } from \"../Marker/Marker.js\";\nimport { Region } from \"../Region/Region.js\";\nimport { FormElementInterface, LocationFormElement } from \"./FormElements/index.js\";\nimport { ArrayIndexed } from \"../Core/ArrayIndexed\";\nimport { SchemaField } from \"../Infrastructure/Server/SchemaField\";\nimport { FormElement } from \"./FormElements/FormElement\";\nconst $ = jQuery;\n\nexport class FormBuilder {\n container: HTMLElement;\n namespace: string;\n mediaUploader: any; // WP Media uploader class\n schema: Schema;\n events: Events;\n formElementFactory: FormElementFactory;\n\n structureChanged: boolean;\n\n isLoading: boolean;\n\n editMode: boolean;\n filtersMode: boolean;\n filtersHide: boolean;\n showFiltersButton: FormElementTypes.FormElementInterface;\n modal: boolean;\n admin: any; // MapSVG Admin class?\n mapsvg: MapSVGMap;\n data: { [key: string]: any };\n clearButton: boolean;\n clearButtonText: string;\n searchButton: boolean;\n searchButtonText: string;\n showButtonText: string;\n template: string;\n closeOnSave: boolean;\n newRecord: boolean;\n types: string[];\n sortable: any;\n saved: boolean;\n scrollable: boolean;\n showNames: boolean;\n\n templates: { [key: string]: Function };\n elements: { [key: string]: { [key: string]: HTMLElement } };\n form: HTMLFormElement;\n formEditor: HTMLFormElement;\n view: HTMLElement;\n\n formElements: ArrayIndexed;\n currentlyEditing: FormElementTypes.FormElementInterface;\n markerBackup: { id: string; src: string; svgPoint: SVGPoint; geoPoint: GeoPoint };\n location: Location;\n scrollApi: any; // jScrollPane instance\n\n backupData?: {\n location: Location;\n marker: Marker;\n };\n editingMarker?: Marker;\n mediaUploaderisOpenedFor: FormElementInterface;\n\n constructor(options: { [key: string]: any }) {\n // schema, editMode, mapsvg, mediaUploader, data, admin, namespace\n const _this = this;\n\n this.events = new Events();\n\n // options\n this.container = options.container;\n this.namespace = options.namespace;\n this.mediaUploader = options.mediaUploader;\n this.schema = options.schema || [];\n this.editMode = options.editMode == undefined ? false : options.editMode;\n this.filtersMode = options.filtersMode == undefined ? false : options.filtersMode;\n this.filtersHide = options.filtersHide == undefined ? false : options.filtersHide;\n this.modal = options.modal == undefined ? false : options.modal;\n this.admin = options.admin;\n this.mapsvg = options.mapsvg;\n this.data = options.data || {};\n this.clearButton = options.clearButton || false;\n this.clearButtonText = options.clearButtonText || \"\";\n this.searchButton = options.searchButton || false;\n this.searchButtonText = options.searchButtonText || \"\";\n this.showButtonText = options.showButtonText || \"\";\n this.scrollable =\n typeof options.scrollable !== \"undefined\"\n ? options.scrollable\n : !_this.editMode && !_this.filtersMode;\n this.showNames = typeof options.showNames !== \"undefined\" ? options.showNames : true;\n\n this.formElementFactory = new FormElementFactory({\n mapsvg: this.mapsvg,\n formBuilder: this,\n mediaUploader: this.mediaUploader,\n editMode: this.editMode,\n filtersMode: this.filtersMode,\n namespace: this.namespace,\n showNames: this.showNames,\n });\n\n this.events = new Events(this);\n if (options.events && Object.keys(options.events).length > 0) {\n for (const eventName in options.events) {\n this.events.on(eventName, options.events[eventName]);\n }\n }\n this.template = \"form-builder\";\n this.closeOnSave = options.closeOnSave === true;\n this.newRecord = options.newRecord === true;\n this.types = options.types || [\n \"text\",\n \"textarea\",\n \"checkbox\",\n \"radio\",\n \"select\",\n \"image\",\n \"region\",\n \"location\",\n \"post\",\n \"date\",\n ];\n\n this.templates = {};\n this.elements = {};\n this.view = $(\"
\").addClass(\"mapsvg-form-builder\")[0];\n if (this.editMode) $(this.view).addClass(\"full-flex\");\n if (!this.showNames) {\n $(this.view).addClass(\"hide-names\");\n }\n\n this.formElements = new ArrayIndexed(\"name\");\n\n if (!MapSVG.templatesLoaded[this.template]) {\n this.loadTemplates(() => this.init());\n } else {\n this.init();\n }\n }\n\n private loadTemplates(callback: () => void): void {\n $.get(MapSVG.urls.root + \"dist/\" + this.template + \".html?v=\" + MapSVG.version, (data) => {\n $(data).appendTo(\"body\");\n MapSVG.templatesLoaded[this.template] = true;\n Handlebars.registerPartial(\"dataMarkerPartial\", $(\"#mapsvg-data-tmpl-marker\").html());\n if (this.editMode) {\n Handlebars.registerPartial(\n \"markerByFieldPartial\",\n $(\"#mapsvg-markers-by-field-tmpl-partial\").html()\n );\n }\n callback();\n });\n }\n\n init() {\n const _this = this;\n\n // The global formBuilder property is needed to handle hotkeys (close / OK buttons)\n // @ts-ignore\n MapSVG.formBuilder = this;\n\n this.form = document.createElement(\"form\");\n this.form.className = \"mapsvg-data-form-view\";\n if (!this.filtersMode) {\n this.form.classList.add(\"form-horizontal\");\n }\n\n if (this.editMode) {\n const template = document.getElementById(\"mapsvg-form-editor-tmpl-ui\").innerHTML;\n const templateCompiled = Handlebars.compile(template);\n this.view.innerHTML = templateCompiled({ types: this.types });\n this.view.classList.add(\"edit\");\n this.form.classList.add(\"mapsvg-data-flex-full\");\n this.form.classList.add(\"mapsvg-data-container\");\n $(this.view).find(\".mapsvg-data-preview\").prepend(this.form);\n this.formEditor = $(this.view).find(\"#mapsvg-data-form-edit\")[0];\n } else {\n this.view.appendChild(this.form);\n }\n\n _this.elements = {\n buttons: {\n text: $(_this.view).find(\"#mapsvg-data-btn-text\")[0],\n textarea: $(_this.view).find(\"#mapsvg-data-btn-textarea\")[0],\n checkbox: $(_this.view).find(\"#mapsvg-data-btn-checkbox\")[0],\n radio: $(_this.view).find(\"#mapsvg-data-btn-radio\")[0],\n select: $(_this.view).find(\"#mapsvg-data-btn-select\")[0],\n image: $(_this.view).find(\"#mapsvg-data-btn-image\")[0],\n region: $(_this.view).find(\"#mapsvg-data-btn-region\")[0],\n marker: $(_this.view).find(\"#mapsvg-data-btn-marker\")[0],\n saveSchema: $(_this.view).find(\"#mapsvg-data-btn-save-schema\")[0],\n },\n containers: {\n buttons_add: $(_this.view).find(\"#mapsvg-data-buttons-add\")[0],\n },\n };\n\n _this.redraw();\n }\n\n getForm(): HTMLFormElement {\n return this.form;\n }\n getFormEditor(): HTMLFormElement {\n return this.formEditor;\n }\n\n viewDidLoad() {}\n\n setEventHandlers() {\n const _this = this;\n\n $(this.getForm()).on(\"submit\", (e) => {\n e.preventDefault();\n });\n\n if (this.filtersMode && this.clearButton) {\n $(this.elements.buttons.clearButton).on(\"click\", (e) => {\n e.preventDefault();\n this.clearAllFields();\n });\n }\n\n $(window)\n .off(\"keydown.form.mapsvg\")\n .on(\"keydown.form.mapsvg\", function (e) {\n // @ts-ignore\n if (MapSVG.formBuilder) {\n if ((e.metaKey || e.ctrlKey) && e.keyCode == 13)\n // @ts-ignore\n MapSVG.formBuilder.save();\n else if (e.keyCode == 27)\n // @ts-ignore\n MapSVG.formBuilder.close();\n }\n });\n\n if (this.editMode) {\n $(this.view).on(\"click\", \"#mapsvg-data-buttons-add button\", function (e) {\n e.preventDefault();\n const type = $(this).data(\"create\");\n const formElement = _this.formElementFactory.create({ type: type });\n _this.addField(formElement);\n });\n $(this.view).on(\"click\", \"#mapsvg-data-btn-save-schema\", function (e) {\n e.preventDefault();\n const fields = _this.getSchema();\n\n const counts = {};\n _this.formElements.forEach(function (elem) {\n counts[elem.name] = (counts[elem.name] || 0) + 1;\n });\n\n $(_this.getForm()).find(\".form-group\").removeClass(\"has-error\");\n const errors = [];\n\n const reservedFields = [\n \"lat\",\n \"lon\",\n \"lng\",\n \"location\",\n \"location_lat\",\n \"location_lon\",\n \"location_lng\",\n \"location_address\",\n \"location_img\",\n \"marker\",\n \"marker_id\",\n \"regions\",\n \"region_id\",\n \"post\",\n \"post_title\",\n \"post_url\",\n \"keywords\",\n \"status\",\n ];\n const reservedFieldsToTypes = {\n regions: \"region\",\n status: \"status\",\n post: \"post\",\n marker: \"marker\",\n location: \"location\",\n };\n\n let errUnique, errEmpty;\n\n _this.formElements.forEach(function (\n formElement: FormElementTypes.FormElementInterface,\n index\n ) {\n let err = false;\n\n // If that's not Form Builder for Filters (when there is no \"name\" parameter)\n // we should check if names are non-empty and unique\n if (!_this.filtersMode) {\n if (counts[formElement.name] > 1) {\n if (!errUnique) {\n errUnique = \"Field names should be unique\";\n errors.push(errUnique);\n err = true;\n }\n } else if (formElement.name.length === 0) {\n if (!errEmpty) {\n errEmpty = \"Field name can't be empty\";\n errors.push(errEmpty);\n err = true;\n }\n } else if (reservedFields.indexOf(formElement.name) != -1) {\n // if reserved field name is for proper type of object then it's OK\n if (\n !reservedFieldsToTypes[formElement.name] ||\n (reservedFieldsToTypes[formElement.name] &&\n reservedFieldsToTypes[formElement.name] != formElement.type)\n ) {\n const msg =\n 'Field name \"' +\n formElement.name +\n '\" is reserved, please set another name';\n errors.push(msg);\n err = true;\n }\n }\n }\n\n if (\n formElement.options &&\n formElement.type != \"region\" &&\n formElement.type != \"marker\"\n ) {\n const vals = formElement.options.map(function (obj: {\n label: string;\n value: string;\n }) {\n return obj.value;\n });\n const uniq = [...Array.from(new Set(vals).values())];\n if (vals.length != uniq.length) {\n errors.push('Check \"Options\" list - values should not repeat');\n err = true;\n }\n }\n\n err && $(formElement.domElements.main).addClass(\"has-error\");\n });\n\n if (errors.length === 0) {\n _this.events.trigger(\"saveSchema\", _this, [_this, fields]);\n } else {\n jQuery.growl.error({ title: \"Errors\", message: errors.join(\"
\") });\n }\n });\n setTimeout(function () {\n const el = _this.getForm();\n // @ts-ignore\n _this.sortable = new Sortable(el, {\n animation: 150,\n onStart: function () {\n $(_this.getForm()).addClass(\"sorting\");\n },\n onEnd: function () {\n setTimeout(function () {\n $(_this.getForm()).removeClass(\"sorting\");\n _this.formElements.clear();\n $(el)\n .find(\".form-group\")\n .each(function (index, elem) {\n _this.formElements.push($(elem).data(\"formElement\"));\n });\n }, 500);\n },\n });\n }, 1000);\n } else {\n // Save\n // $(_this.view).on('click','button.btn-save',function(e){\n // e.preventDefault();\n // _this.save();\n // });\n // Close\n // jQuery(_this.view).on('click','button.btn-close', function(){\n // alert(1);\n // });\n // $(_this.view).on('click','button.btn-close',function(e){\n // e.preventDefault();\n // _this.close();\n // });\n }\n\n new ResizeSensor(this.view, function () {\n _this.scrollApi && _this.scrollApi.reinitialise();\n });\n }\n\n private clearAllFields() {\n this.formElements.forEach((f) => f.setValue(null));\n // $(this.getForm())\n // .find(\"input\")\n // .not(\":button, :submit, :reset, :hidden, :checkbox, :radio\")\n // .val(\"\")\n // .prop(\"selected\", false);\n // $(this.getForm()).find('input[type=\"radio\"]').prop(\"checked\", false);\n // $(this.getForm()).find('input[type=\"checkbox\"]').prop(\"checked\", false);\n // $(this.getForm()).find(\"select\").val(\"\").trigger(\"change.select2\");\n this.events.trigger(\"cleared\");\n }\n\n setFormElementEventHandlers(formElement: FormElementTypes.FormElementInterface) {\n const _this = this;\n\n if (this.editMode) {\n formElement.events.on(\"click\", (elem) => {\n this.edit(elem);\n });\n formElement.events.on(\"delete\", (elem) => {\n this.deleteField(elem);\n });\n } else {\n formElement.events.on(\"changed\", (_formElement) => {\n const name = _formElement.name;\n const value = _formElement.getValue();\n // TODO check how this works with names like name[a][b][c]\n if (_formElement.type !== \"search\") {\n this.events.trigger(\"changed.field\", _formElement, [_formElement, name, value]);\n } else {\n this.events.trigger(\"changed.search\", _formElement, [_formElement, value]);\n }\n });\n\n /*\n const locationField =\n _this.mapsvg &&\n _this.mapsvg.objectsRepository &&\n _this.mapsvg.objectsRepository.getSchema() &&\n _this.mapsvg.objectsRepository.getSchema().getField(\"location\");\n // @ts-ignore\n if (\n locationField &&\n locationField.markersByFieldEnabled &&\n locationField.markerField &&\n formElement.name == locationField.markerField &&\n Object.values(locationField.markersByField).length > 0\n ) {\n formElement.events.on(\"changed\", (_formElement) => {\n const name = _formElement.name;\n const value = _formElement.value;\n // @ts-ignore\n const src = locationField.markersByField[value];\n if (src) {\n if (_this.markerBackup) {\n const marker = _this.mapsvg.getMarker(_this.markerBackup.id);\n marker.setImage(src);\n $(_this.view).find(\".mapsvg-marker-image-btn img\").attr(\"src\", src);\n }\n // _this.markerBackupImageButton.attr('src',src);\n }\n });\n }\n\n */\n }\n }\n\n save() {\n const _this = this;\n\n if (_this.markerBackup) {\n const marker = _this.mapsvg.getEditingMarker();\n marker.events.off(\"change\");\n _this.markerBackup = marker.getOptions();\n _this.mapsvg.unsetEditingMarker();\n }\n\n const data = _this.getData();\n _this.saved = true;\n\n this.events.trigger(\"save\", _this, [_this, data]);\n }\n\n getFormElementByType(type: string): FormElementTypes.FormElementInterface {\n return this.formElements.find((el) => el.type === type);\n }\n\n getData(): { [key: string]: any } {\n const data = {};\n this.formElements.forEach((formElement) => {\n if (formElement.readonly === false || formElement.type === \"id\") {\n const _formElementData = formElement.getData();\n data[_formElementData.name] = _formElementData.value;\n }\n });\n return data;\n }\n\n reset(): void {\n this.formElements.forEach((formElement) => {\n formElement.setValue(null);\n });\n }\n\n update(data: { [key: string]: any }): void {\n this.schema.getFields().forEach((field) => {\n const formElement = this.formElements.get(field.name);\n if (formElement) {\n if (typeof data[field.name] !== \"undefined\") {\n if (formElement.getValue() !== data[field.name]) {\n formElement.setValue(data[field.name]);\n }\n } else {\n formElement.setValue(null);\n }\n }\n });\n }\n\n redraw(): void {\n const _this = this;\n\n delete _this.markerBackup;\n\n $(this.container).empty();\n $(this.getForm()).empty();\n this.formElements.clear();\n\n this.schema &&\n this.schema.fields.length > 0 &&\n this.schema.fields.forEach((fieldSettings: SchemaField) => {\n if (this.filtersMode) {\n if (fieldSettings.type == \"distance\") {\n fieldSettings.value = this.data.distance\n ? this.data.distance\n : fieldSettings.value !== undefined\n ? fieldSettings.value\n : null;\n } else {\n fieldSettings.value = this.data[fieldSettings.parameterNameShort];\n }\n } else {\n fieldSettings.value = this.data\n ? this.data[fieldSettings.name]\n : fieldSettings.value !== undefined\n ? fieldSettings.value\n : null;\n }\n\n if (fieldSettings.type == \"location\" && !this.editMode) {\n // add Marker Object into formElement\n if (\n fieldSettings.value &&\n fieldSettings.value.marker &&\n fieldSettings.value.marker.id\n ) {\n //this.markerBackup = fieldSettings.value.marker.getOptions();\n //this.mapsvg.setEditingMarker(fieldSettings.value.marker);\n }\n this.admin && this.admin.setMode && this.admin.setMode(\"editMarkers\");\n this.admin && this.admin.enableMarkersMode(true);\n } else if (fieldSettings.type == \"post\") {\n fieldSettings.post = this.data[\"post\"];\n } else if (fieldSettings.type === \"region\") {\n fieldSettings.options = new ArrayIndexed(\"id\", this.getRegionsList());\n }\n\n const formElement = this.formElementFactory.create(fieldSettings);\n if (this.filtersMode) {\n if (\n !this.filtersHide ||\n (this.filtersHide && this.modal && fieldSettings.type !== \"search\") ||\n (!this.modal && fieldSettings.type === \"search\")\n ) {\n this.addField(formElement);\n }\n } else {\n this.addField(formElement);\n }\n });\n\n if (!_this.editMode) {\n if (this.schema.fields.length === 0 && !this.filtersMode) {\n const formElement = this.formElementFactory.create({ type: \"empty\" });\n _this.addField(formElement);\n } else {\n if (_this.admin && !_this.admin.isMetabox) {\n const formElement = this.formElementFactory.create({ type: \"save\" });\n formElement.events.on(\"click.btn.save\", () => {\n this.save();\n });\n formElement.events.on(\"click.btn.close\", () => {\n this.close();\n });\n _this.addField(formElement);\n }\n }\n }\n\n // If part of filters is hidden in a modal, and what is showing now is NOT a modal,\n // then add a \"Show filters\" button that opens a modal with remaining filers.\n if (_this.filtersMode && _this.filtersHide && !_this.modal) {\n const formElement = this.formElementFactory.create({\n type: \"modal\",\n showButtonText: _this.showButtonText,\n });\n this.showFiltersButton = _this.addField(formElement);\n }\n\n if (this.scrollable) {\n const nano = $('
');\n const nanoContent = $('
');\n nano.append(nanoContent);\n // nanoContent.html(this.view);\n // $(_this.container).html(nano.html());\n nanoContent.append(this.view);\n $(_this.container).append(nano);\n\n // @ts-ignore\n nano.jScrollPane({ contentWidth: \"0px\", mouseWheelSpeed: 30 });\n _this.scrollApi = nano.data(\"jsp\");\n } else {\n // $(_this.container).html(this.view);\n $(_this.container).append(this.view);\n }\n\n // If FormBuilder is used to create filters and \"Add clear button\" option is \"on\"\n // then add the \"Clear all\" button\n if (_this.filtersMode && _this.clearButton) {\n _this.elements.buttons.clearButton = $(\n '
' +\n '
\"\n )[0];\n $(this.getForm()).append(_this.elements.buttons.clearButton);\n }\n if (_this.filtersMode && _this.searchButton) {\n _this.elements.buttons.searchButton = $(\n '
\"\n )[0];\n $(this.getForm()).append(_this.elements.buttons.searchButton);\n }\n\n if (!this.editMode && !_this.filtersMode)\n $(this.view).find(\"input:visible,textarea:visible\").not(\".tt-hint\").first().focus();\n\n const cm = $(this.container).find(\".CodeMirror\");\n\n cm.each(function (index, el) {\n // @ts-ignore\n el && el.CodeMirror.refresh();\n });\n _this.setEventHandlers();\n this.events.trigger(\"init\", this, [this, this.getData()]);\n this.events.trigger(\"loaded\", this, [this]);\n }\n\n updateExtraParamsInFormElements() {\n this.formElements.forEach((formElement) => {\n formElement.setExternal(this.formElementFactory.getExtraParams());\n if (formElement.type === \"location\") {\n formElement.redraw();\n }\n });\n }\n\n deleteField(formElement) {\n const _this = this;\n _this.formElements.delete(formElement.name);\n // _this.formElements.forEach(function(fc, index){\n // if(fc === formElement){\n // _this.formElements.splice(index,1);\n // _this.structureChanged = true;\n // }\n // });\n }\n\n getExtraParams() {\n const databaseFields = [];\n this.mapsvg.objectsRepository\n .getSchema()\n .getFields()\n .forEach(function (obj) {\n if (\n obj.type == \"text\" ||\n obj.type == \"region\" ||\n obj.type == \"textarea\" ||\n obj.type == \"post\" ||\n obj.type == \"select\" ||\n obj.type == \"radio\" ||\n obj.type == \"checkbox\"\n ) {\n if (obj.type == \"post\") {\n databaseFields.push(\"Object.post.post_title\");\n } else {\n databaseFields.push(\"Object.\" + obj.name);\n }\n }\n });\n let databaseFieldsFilterableShort = [];\n databaseFieldsFilterableShort = this.mapsvg.objectsRepository\n .getSchema()\n .getFieldsAsArray()\n .filter(function (obj) {\n return obj.type == \"select\" || obj.type == \"radio\" || obj.type == \"region\";\n })\n .map(function (obj) {\n return obj.name;\n });\n let markerFieldsShort = [];\n markerFieldsShort = databaseFieldsFilterableShort.filter(\n (o) => o.type === \"select\" || o.type === \"radio\"\n );\n const regionFields = this.mapsvg.regionsRepository\n .getSchema()\n .getFieldsAsArray()\n .map(function (obj) {\n if (\n obj.type == \"status\" ||\n obj.type == \"text\" ||\n obj.type == \"textarea\" ||\n obj.type == \"post\" ||\n obj.type == \"select\" ||\n obj.type == \"radio\" ||\n obj.type == \"checkbox\"\n ) {\n if (obj.type == \"post\") {\n return \"Region.post.post_title\";\n } else {\n return \"Region.\" + obj.name;\n }\n }\n });\n return {\n databaseFields: databaseFields,\n databaseFieldsFilterableShort: databaseFieldsFilterableShort,\n regionFields: regionFields,\n markerFieldsShort: markerFieldsShort,\n };\n }\n\n addField(formElement: FormElementTypes.FormElementInterface) {\n const _this = this;\n\n // Check if field can be added - some fields can be added only once:\n if (\n [\"region\", \"marker\", \"post\", \"status\", \"distance\", \"location\", \"search\"].indexOf(\n formElement.type\n ) != -1\n ) {\n let repeat = false;\n _this.formElements.forEach(function (control) {\n if (control.type == formElement.type) repeat = true;\n });\n if (repeat) {\n jQuery.growl.error({\n title: \"Error\",\n message: 'You can add only 1 \"' + MapSVG.ucfirst(formElement.type) + '\" field',\n });\n return;\n }\n }\n\n _this.formElements.push(formElement);\n\n _this.getForm().append(formElement.domElements.main);\n\n this.setFormElementEventHandlers(formElement);\n\n if (this.editMode) {\n if (formElement.protected) {\n formElement.hide();\n } else {\n this.edit(formElement);\n }\n }\n return formElement;\n }\n\n edit(formElement: FormElementTypes.FormElementInterface) {\n const _this = this;\n\n // destroy previous editor\n _this.currentlyEditing && _this.currentlyEditing.destroyEditor();\n\n // create new editor\n this.getFormEditor().appendChild(formElement.getEditor());\n // setTimeout(function(){\n formElement.initEditor();\n _this.currentlyEditing = formElement;\n $(_this.getForm()).find(\".form-group.active\").removeClass(\"active\");\n $(formElement.domElements.main).addClass(\"active\");\n // }, 500);\n }\n\n get() {\n // return this.formElements.map(function(c){\n // return c.get();\n // });\n }\n\n getSchema() {\n return this.formElements.map(function (formElement) {\n return formElement.getSchema();\n });\n }\n\n close() {\n const _this = this;\n\n // $('body').off('keydown.mapsvg');\n\n this.formElements.forEach((formElement) => formElement.destroy());\n this.mediaUploader && this.mediaUploader.off(\"select\");\n\n MapSVG.formBuilder = null;\n this.events.trigger(\"close\", this, [this]);\n }\n\n destroy() {\n $(this.view).empty().remove();\n this.sortable = null;\n }\n\n toJSON(addEmpty) {\n const obj = {};\n\n function add(obj, name, value) {\n if (!addEmpty && !value) return false;\n if (name.length == 1) {\n obj[name[0]] = value;\n } else {\n if (obj[name[0]] == null) {\n if (name[1] === \"\") {\n obj[name[0]] = [];\n } else {\n obj[name[0]] = {};\n }\n }\n\n if (obj[name[0]].length !== undefined) {\n obj[name[0]].push(value);\n } else {\n add(obj[name[0]], name.slice(1), value);\n }\n }\n }\n\n $(this.elements.containers.formView)\n .find(\"input, textarea, select\")\n .each(function () {\n if (\n !$(this).data(\"skip\") &&\n !$(this).prop(\"disabled\") &&\n $(this).attr(\"name\") &&\n !(\n !addEmpty &&\n $(this).attr(\"type\") == \"checkbox\" &&\n $(this).attr(\"checked\") == undefined\n ) &&\n !($(this).attr(\"type\") == \"radio\" && $(this).attr(\"checked\") == undefined)\n ) {\n let value;\n if ($(this).attr(\"type\") == \"checkbox\") {\n value = $(this).prop(\"checked\");\n } else {\n value = $(this).val();\n }\n add(obj, $(this).attr(\"name\").replace(/]/g, \"\").split(\"[\"), value);\n }\n });\n\n return obj;\n }\n\n getRegionsList(): { id: string; title: string }[] {\n return this.mapsvg.regions.map(function (r) {\n return { id: r.id, title: r.title };\n });\n }\n getRegionsAsArray(): Region[] {\n return this.mapsvg.regions;\n }\n\n private setRegions(location: Location) {\n const regionsFormElement = this.formElements.get(\"regions\");\n\n if (this.mapsvg.options.source.indexOf(\"/geo-calibrated/usa.svg\") !== -1) {\n // If this is the map of USA, choose the corresponding state by region ID in the \"regions\" field\n regionsFormElement.setValue([\"US-\" + location.address.state_short]);\n } else if (this.mapsvg.options.source.indexOf(\"/geo-calibrated/world.svg\") !== -1) {\n // If this is the world.svg map, choose the corresponding country by country ID in the \"regions\" field\n if (location.address.country_short) {\n regionsFormElement.setValue([location.address.country_short]);\n }\n } else {\n if (location.address.administrative_area_level_1) {\n this.mapsvg.regions.forEach((_region: Region) => {\n if (\n _region.title === location.address.administrative_area_level_1 ||\n _region.title === location.address.administrative_area_level_2 ||\n _region.id ===\n location.address.country_short +\n \"-\" +\n location.address.administrative_area_level_1_short\n ) {\n regionsFormElement.setValue([_region.id]);\n }\n });\n }\n }\n }\n\n setIsLoading(value: boolean): void {\n this.isLoading = value;\n if (this.searchButton) {\n if (this.isLoading) {\n $(this.elements.buttons.searchButton).find(\"button\").attr(\"disabled\", \"disabled\");\n } else {\n $(this.elements.buttons.searchButton).find(\"button\").removeAttr(\"disabled\");\n }\n }\n }\n}\n","/**\n * FiltersController class adds filters for the database.\n * @param options\n * @constructor\n */\nimport { DetailsController } from \"../Details/Details.js\";\nimport { FormBuilder } from \"../FormBuilder/FormBuilder.js\";\nimport { Schema } from \"../Infrastructure/Server/Schema.js\";\nimport { Query } from \"../Infrastructure/Server/Query.js\";\n// import {RepositoryInterface} from \"../Core/Repository.js\";\nconst $ = jQuery;\n\nexport class FiltersController extends DetailsController {\n schema: Schema;\n hideFilters: boolean;\n query: Query;\n source: string;\n location: string;\n width: string;\n filteredRegionsStatus: number;\n modalLocation: string;\n hideOnMobile: boolean;\n hide: boolean;\n padding: string;\n showButtonText: boolean;\n clearButton: boolean;\n clearButtonText: string;\n searchButton: boolean;\n searchButtonText: string;\n\n // repository: RepositoryInterface;\n formBuilder: FormBuilder;\n\n constructor(options: { [key: string]: any }) {\n super(options);\n\n this.showButtonText = options.showButtonText;\n this.clearButton = options.clearButton;\n this.clearButtonText = options.clearButtonText;\n this.searchButton = options.searchButton;\n this.searchButtonText = options.searchButtonText;\n this.padding = options.padding;\n this.schema = options.schema;\n this.hideFilters = options.hide;\n this.query = options.query;\n }\n\n viewDidLoad(): void {\n super.viewDidLoad();\n const _this = this;\n\n this.formBuilder = new FormBuilder({\n container: this.containers.contentView,\n filtersMode: true,\n schema: this.schema,\n modal: this.modal,\n filtersHide: this.hideFilters,\n showButtonText: this.showButtonText,\n clearButton: this.clearButton,\n clearButtonText: this.clearButtonText,\n searchButton: this.searchButton,\n searchButtonText: this.searchButtonText,\n editMode: false,\n mapsvg: this.mapsvg,\n data: {}, //this.query,\n admin: false,\n events: {\n \"changed.field\": (formElement, field, value) => {\n const filters: any = {};\n let _value = value;\n if (field === \"regions\") {\n _value = {};\n _value.region_ids = value instanceof Array ? value : [value];\n _value.table_name = this.mapsvg.options.database.regionsTableName;\n if (_value.region_ids.length === 0 || _value.region_ids[0] === \"\") {\n _value = null;\n }\n }\n filters[field] = _value;\n this.query.setFilters(filters);\n _this.events.trigger(\"changed.field\", _this, [field, value]);\n _this.events.trigger(\"changed.fields\", _this, [field, value]);\n },\n \"changed.search\": (formElement, value) => {\n this.query.setSearch(value);\n _this.events.trigger(\"changed.search\", _this, [value]);\n },\n cleared: (formBuilder) => {\n this.query.clearFilters();\n this.events.trigger(\"cleared\", _this, []);\n },\n loaded: (formBuilder) => {\n $(formBuilder.container).find(\".mapsvg-form-builder\").css({\n padding: _this.padding,\n });\n this.updateScroll();\n this.events.trigger(\"loaded\");\n },\n },\n });\n }\n\n reset(): void {\n this.formBuilder && this.formBuilder.reset();\n }\n\n update(query: Query): void {\n const _query = Object.assign({}, query.filters);\n _query.search = query.search;\n this.formBuilder && this.formBuilder.update(_query);\n }\n\n /**\n * Sets filters counter on the \"Show filters\" button when compact mode is enabled and filters are hidden\n */\n setFiltersCounter(): void {\n if (this.hideFilters) {\n // Don't include \"search\" filter into counter since it's always outside of the modal\n const filtersCounter = Object.keys(this.query.filters).length;\n\n const filtersCounterString = filtersCounter === 0 ? \"\" : filtersCounter.toString();\n this.formBuilder &&\n this.formBuilder.showFiltersButton &&\n $(this.formBuilder.showFiltersButton.domElements.main)\n .find(\"button\")\n .html(this.showButtonText + \" \" + filtersCounterString + \"\");\n }\n }\n\n setEventHandlers(): void {\n super.setEventHandlers();\n\n const _this = this;\n\n $(this.containers.view).on(\"click\", \".mapsvg-btn-show-filters\", function () {\n _this.events.trigger(\"click.btn.showFilters\");\n });\n $(this.containers.view).on(\"click\", \"#mapsvg-search-container button\", function () {\n _this.events.trigger(\"click.btn.searchButton\");\n });\n\n // var filterDatabase = _this.repository;\n\n // Handle search separately with throttle 400ms\n // $(this.containers.view).on('paste keyup','input[data-parameter-name=\"search\"]',function(){\n // _this.throttle(_this.textSearch, 600, _this, $(this));\n // });\n\n // TODO may need the code below\n /*\n $(this.containers.view).on('change paste keyup','select,input[type=\"radio\"],input',function(){\n\n if($(this).data('ignoreSelect2Change')){\n $(this).data('ignoreSelect2Change', false);\n return;\n }\n\n var filter = {};\n var field = $(this).data('parameter-name');\n\n if($(this).attr('data-parameter-name')==\"search\"){\n return;\n }\n\n if($(this).attr('name') === 'distance' || field == \"search\"){\n return;\n }\n if($(this).attr('name') === 'distanceLatLng' || $(this).attr('name') === 'distanceLength'){\n // var distanceData = {\n // units: formBuilder.view.find('[name=\"distanceUnits\"]').val(),\n // latlng: formBuilder.view.find('[name=\"distanceLatLng\"]').val(),\n // length: formBuilder.view.find('[name=\"distanceLength\"]').val(),\n // address: formBuilder.view.find('[name=\"distance\"]').val()\n // };\n // var field = formBuilder.mapsvg.filtersSchema.schema.find(function(field){\n // return field.type === 'distance';\n // });\n // if(field.country){\n // distanceData.country = field.country;\n // }\n // if(distanceData.units && distanceData.length && distanceData.latlng){\n // filter.distance = distanceData;\n // var latlng = distanceData.latlng.split(',');\n // latlng = {lat: parseFloat(latlng[0]), lng: parseFloat(latlng[1])};\n // MapSVG.distanceSearch = {\n // latlng: latlng,\n // units: field.distanceUnits,\n // unitsLabel: field.distanceUnitsLabel\n // };\n // } else {\n // filter.distance = null;\n // MapSVG.distanceSearch = null;\n // }\n } else if ($(this).closest('.mapsvg-checkbox-group').length > 0){\n\n filter[field] = []\n $(this).closest('.mapsvg-checkbox-group').find('input[type=\"checkbox\"]:checked').each(function(i,el){\n filter[field].push($(el).val());\n });\n\n\n } else {\n filter[field] = $(this).val();\n }\n\n filterDatabase.query.setFilters(filter);\n\n // _this.formBuilder.view.find('select,input[type=\"radio\"]').each(function(index){\n // var field = $(this).data('parameter-name');\n // var val = $(this).val();\n // filters[field] = val;\n // });\n\n // var data = {\n // filters: filter\n // };\n // if(_this.options.menu.searchFallback){\n // data.searchFallback = true;\n // }\n\n // filterDatabase.getAll(data);\n });\n */\n }\n}\n","import { MapSVG } from \"../Core/globals.js\";\nimport { Controller } from \"../Core/Controller\";\nimport { ScreenPoint, SVGPoint } from \"../Location/Location\";\nimport { Marker } from \"../Marker/Marker\";\nimport { Region } from \"../Region/Region\";\nconst $ = jQuery;\n\n/**\n * Creates a scrollable popover in a map container.\n * @extends Controller\n * @param options\n * @constructor\n */\nexport class PopoverController extends Controller {\n point: SVGPoint;\n screenPoint: ScreenPoint;\n mapObject: Marker | Region;\n yShift: number;\n id: string;\n mobileCloseBtn: HTMLElement;\n\n constructor(options) {\n super(options);\n this.autoresize = true;\n this.point = options.point;\n this.yShift = options.yShift;\n this.mapObject = options.mapObject;\n this.id = this.mapObject.id + \"_\" + Math.random();\n $(this.containers.main).data(\"popover-id\", this.id);\n //this._init();\n }\n\n /**\n * Sets a point where the popover should be shown\n * @param {ScreenPoint} point - [x,y]\n */\n setPoint(point: SVGPoint): void {\n this.point = point;\n }\n\n /**\n * Returns HTML template for the popover toolbar\n * @returns {string}\n */\n getToolbarTemplate(): string {\n if (this.withToolbar) return '
';\n else return \"\";\n }\n\n /**\n * Final rendering steps of the popover\n * @private\n */\n viewDidLoad(): void {\n super.viewDidLoad.call(this);\n if (\n MapSVG.isPhone &&\n this.mapsvg.options.popovers.mobileFullscreen &&\n !this.mobileCloseBtn\n ) {\n this.mobileCloseBtn = $(\n '\"\n )[0];\n $(this.containers.view).append(this.mobileCloseBtn);\n }\n this.adjustScreenPosition();\n $(this.containers.main).toggleClass(\"mapsvg-popover-animate\", true);\n $(this.containers.main).toggleClass(\"mapsvg-popover-visible\", true);\n this.adjustHeight();\n this.updateScroll();\n this.autoresize && this.resizeSensor.setScroll();\n this.events.trigger(\"shown\", this, [this]);\n }\n\n /**\n * Adjusts height of the popover\n */\n adjustHeight(): void {\n $(this.containers.main).height(\n $(this.containers.main).find(\".mapsvg-auto-height\").outerHeight() +\n (this.containers.toolbar ? $(this.containers.toolbar).outerHeight() : 0)\n );\n }\n\n /**\n * Adjsuts position of the popver.\n *\n */\n adjustScreenPosition(): void {\n if (this.point) {\n const pos = this.mapsvg.converter.convertSVGToPixel(this.point);\n\n pos.y -= this.yShift;\n pos.x = Math.round(pos.x);\n pos.y = Math.round(pos.y);\n\n this.setScreenPosition(pos.x, pos.y);\n }\n }\n\n /**\n * Moves popover by given numbers\n *\n * @param {number} deltaX\n * @param {number} deltaY\n */\n moveSrceenPositionBy(deltaX: number, deltaY: number): void {\n const oldPos = this.screenPoint,\n x = oldPos.x - deltaX,\n y = oldPos.y - deltaY;\n\n this.setScreenPosition(x, y);\n }\n\n /**\n * Set popover position by given numbers\n *\n * @param {number} x\n * @param {number} y\n */\n setScreenPosition(x: number, y: number): void {\n this.screenPoint = new ScreenPoint(x, y);\n $(this.containers.main).css({\n transform: \"translateX(-50%) translate(\" + x + \"px,\" + y + \"px)\",\n });\n }\n\n /**\n * Sets event handlers for the popover\n */\n setEventHandlers(): void {\n $(\"body\").off(\".popover.mapsvg\");\n\n $(this.containers.view).on(\n \"click touchend\",\n \".mapsvg-popover-close, .mapsvg-mobile-modal-close\",\n (e) => {\n e.stopImmediatePropagation();\n this.close();\n }\n );\n\n $(\"body\").on(\"mouseup.popover.mapsvg touchend.popover.mapsvg\", (e) => {\n if (\n this.mapsvg.isScrolling ||\n $(e.target).closest(\".mapsvg-directory\").length ||\n $(e.target).closest(\".mapsvg-popover\").length ||\n $(e.target).hasClass(\"mapsvg-btn-map\")\n )\n return;\n this.close();\n });\n }\n\n /**\n * Closes the popover\n */\n close(): void {\n if (\n $(this.containers.main).data(\"popover-id\") != this.id ||\n !$(this.containers.main).is(\":visible\")\n )\n return;\n this.destroy();\n if (this.mapObject instanceof Region) {\n this.mapsvg.deselectRegion(this.mapObject);\n }\n if (this.mapObject instanceof Marker) {\n this.mapsvg.deselectAllMarkers();\n }\n\n this.events.trigger(\"closed\", this, [this]);\n }\n\n /**\n * Destroys the popover\n */\n destroy(): void {\n $(this.containers.main).toggleClass(\"mapsvg-popover-animate\", false);\n $(this.containers.main).toggleClass(\"mapsvg-popover-visible\", false);\n super.destroy.call(this);\n }\n\n /**\n * Shows the popover\n */\n show(): void {\n $(this.containers.main).toggleClass(\"mapsvg-popover-animate\", true);\n $(this.containers.main).toggleClass(\"mapsvg-popover-visible\", true);\n }\n}\n","import { MapSVG } from \"../Core/globals.js\";\nimport { Controller } from \"../Core/Controller\";\nimport { ScreenPoint, SVGPoint } from \"../Location/Location\";\nconst $ = jQuery;\n\n/**\n * Creates a scrollable popover in a map container.\n * @extends Controller\n * @param options\n * @constructor\n */\nexport class Tooltip extends Controller {\n screenPoint: ScreenPoint;\n\n minWidth: number;\n maxWidth: number;\n\n posOriginal: { [key: string]: string };\n posShifted: { [key: string]: string };\n posShiftedPrev: { [key: string]: string };\n mirror: { [key: string]: number };\n\n constructor(options) {\n super(options);\n\n this.scrollable = false;\n this.withToolbar = false;\n this.autoresize = false;\n this.screenPoint = new ScreenPoint(0, 0);\n\n this.posOriginal = {};\n this.posShifted = {};\n this.posShiftedPrev = {};\n this.mirror = {};\n this.noPadding = true;\n\n this.setPosition(options.position);\n this.setSize(options.minWidth, options.maxWidth);\n }\n\n setSize(minWidth: number, maxWidth: number): void {\n this.minWidth = minWidth;\n this.maxWidth = maxWidth;\n this.containers.main.style[\"min-width\"] = this.minWidth + \"px\";\n this.containers.main.style[\"max-width\"] = this.maxWidth + \"px\";\n }\n\n setPosition(position: string): void {\n const ex = position.split(\"-\");\n if (ex[0].indexOf(\"top\") != -1 || ex[0].indexOf(\"bottom\") != -1) {\n this.posOriginal.topbottom = ex[0];\n }\n if (ex[0].indexOf(\"left\") != -1 || ex[0].indexOf(\"right\") != -1) {\n this.posOriginal.leftright = ex[0];\n }\n if (ex[1]) {\n this.posOriginal.leftright = ex[1];\n }\n\n this.containers.main.className = this.containers.main.className.replace(\n /(^|\\s)mapsvg-tt-\\S+/g,\n \"\"\n );\n\n this.containers.main.classList.add(\"mapsvg-tt-\" + position);\n }\n\n /**\n * Sets a point where the popover should be shown\n */\n setScreenPoint(x: number, y: number): void {\n this.screenPoint.x = x;\n this.screenPoint.y = y;\n }\n\n /**\n * Final rendering steps of the popover\n * @private\n */\n viewDidLoad(): void {\n super.viewDidLoad.call(this);\n }\n\n /**\n * Called when tooltip is shown\n * @private\n */\n viewDidAppear(): void {\n super.viewDidAppear();\n this.events.trigger(\"shown\", this, [this]);\n }\n\n /**\n * Set tooltip position by given coordinates\n */\n setScreenPosition(x: number, y: number): void {\n this.setScreenPoint(x, y);\n this.containers.main.style.transform =\n \"translateX(-50%) translate(\" + x + \"px,\" + y + \"px)\";\n }\n\n /**\n * Sets event handlers for the popover\n */\n setEventHandlers(): void {\n const event = \"mousemove.tooltip.mapsvg-\" + this.mapsvg.id;\n\n $(\"body\")\n .off(event)\n .on(event, (e) => {\n MapSVG.mouse = MapSVG.mouseCoords(e);\n\n this.containers.main.style.left =\n e.clientX +\n $(window).scrollLeft() -\n $(this.mapsvg.containers.map).offset().left +\n \"px\";\n this.containers.main.style.top =\n e.clientY +\n $(window).scrollTop() -\n $(this.mapsvg.containers.map).offset().top +\n \"px\";\n\n const m = new ScreenPoint(\n e.clientX + $(window).scrollLeft(),\n e.clientY + $(window).scrollTop()\n );\n const _tbbox = this.containers.main.getBoundingClientRect();\n const _mbbox = this.mapsvg.containers.map.getBoundingClientRect();\n const tbbox = {\n top: _tbbox.top + $(window).scrollTop(),\n bottom: _tbbox.bottom + $(window).scrollTop(),\n left: _tbbox.left + $(window).scrollLeft(),\n right: _tbbox.right + $(window).scrollLeft(),\n width: _tbbox.width,\n height: _tbbox.height,\n };\n const mbbox = {\n top: _mbbox.top + $(window).scrollTop(),\n bottom: _mbbox.bottom + $(window).scrollTop(),\n left: _mbbox.left + $(window).scrollLeft(),\n right: _mbbox.right + $(window).scrollLeft(),\n width: _mbbox.width,\n height: _mbbox.height,\n };\n\n if (\n m.x > mbbox.right ||\n m.y > mbbox.bottom ||\n m.x < mbbox.left ||\n m.y < mbbox.top\n ) {\n return;\n }\n\n if (this.mirror.top || this.mirror.bottom) {\n // may be cancel mirroring\n if (this.mirror.top && m.y > this.mirror.top) {\n this.mirror.top = 0;\n delete this.posShifted.topbottom;\n } else if (this.mirror.bottom && m.y < this.mirror.bottom) {\n this.mirror.bottom = 0;\n delete this.posShifted.topbottom;\n }\n } else {\n // may be need mirroring\n\n if (tbbox.bottom < mbbox.top + tbbox.height) {\n this.posShifted.topbottom = \"bottom\";\n this.mirror.top = m.y;\n } else if (tbbox.top > mbbox.bottom - tbbox.height) {\n this.posShifted.topbottom = \"top\";\n this.mirror.bottom = m.y;\n }\n }\n\n if (this.mirror.right || this.mirror.left) {\n // may be cancel mirroring\n\n if (this.mirror.left && m.x > this.mirror.left) {\n this.mirror.left = 0;\n delete this.posShifted.leftright;\n } else if (this.mirror.right && m.x < this.mirror.right) {\n this.mirror.right = 0;\n delete this.posShifted.leftright;\n }\n } else {\n // may be need mirroring\n if (tbbox.right < mbbox.left + tbbox.width) {\n this.posShifted.leftright = \"right\";\n this.mirror.left = m.x;\n } else if (tbbox.left > mbbox.right - tbbox.width) {\n this.posShifted.leftright = \"left\";\n this.mirror.right = m.x;\n }\n }\n\n let pos = $.extend({}, this.posOriginal, this.posShifted);\n const _pos = [];\n pos.topbottom && _pos.push(pos.topbottom);\n pos.leftright && _pos.push(pos.leftright);\n // @ts-ignore\n pos = _pos.join(\"-\");\n\n if (\n this.posShifted.topbottom != this.posOriginal.topbottom ||\n this.posShifted.leftright != this.posOriginal.leftright\n ) {\n this.containers.main.className = this.containers.main.className.replace(\n /(^|\\s)mapsvg-tt-\\S+/g,\n \"\"\n );\n this.containers.main.classList.add(\"mapsvg-tt-\" + pos);\n this.posShiftedPrev = pos;\n }\n });\n }\n\n /**\n *\n * @param content\n */\n setContent(template: any, data: any): Tooltip {\n this.containers.main.innerHTML = template(data);\n return this;\n }\n\n /**\n * Shows the tooltip\n */\n show(): Tooltip {\n this.containers.main.classList.add(\"mapsvg-tooltip-visible\");\n return this;\n }\n /**\n * Hides the tooltip\n */\n hide(): Tooltip {\n this.containers.main.classList.remove(\"mapsvg-tooltip-visible\");\n return this;\n }\n}\n","/// \nimport { MapSVG } from \"../Core/globals.js\";\nimport { DefaultOptions } from \"./default-options.js\";\nimport { tinycolor } from \"../Vendor/tinycolor.js\";\nimport { MapsRepository } from \"./MapsRepository\";\nimport { MapsV2Repository } from \"./MapsV2Repository\";\nimport { Converter } from \"./Converter\";\n\n// import {Handlebars} from \"../../handlebars.js\"\n// @ts-ignore\nimport Handlebars from \"Handlebars\";\nimport {} from \"googlemaps\";\nimport { ResizeSensor } from \"../Core/ResizeSensor\";\nimport {\n GroupOptionsInterface,\n GalleryOptionsInterface,\n LayersControlOptionsInterface,\n MapOptionsInterface,\n ViewBox,\n GeoViewBox,\n} from \"./MapOptionsInterface\";\n\nimport {\n Location,\n GeoPoint,\n ScreenPoint,\n LocationOptionsInterface,\n SVGPoint,\n} from \"../Location/Location\";\nimport { Marker } from \"../Marker/Marker\";\nimport { MarkerCluster } from \"../MarkerCluster/MarkerCluster\";\nimport { Region } from \"../Region/Region\";\nimport { Query } from \"../Infrastructure/Server/Query\";\nimport { CustomObject } from \"../Object/CustomObject\";\nimport { Schema } from \"../Infrastructure/Server/Schema\";\nimport { SchemaField } from \"../Infrastructure/Server/SchemaField\";\nimport { SchemaRepository } from \"../Infrastructure/Server/SchemaRepository\";\nimport { DirectoryController } from \"../Directory/Directory\";\nimport { Events } from \"../Core/Events\";\nimport { Repository } from \"../Core/Repository\";\nimport { CustomObjectsRepository } from \"../Object/CustomObjectsRepository\";\nimport { FiltersController } from \"../Filters/Filters\";\nimport { MapObject } from \"../MapObject/MapObject\";\nimport { DetailsController } from \"../Details/Details\";\nimport { PopoverController } from \"../Popover/Popover\";\nimport { FormBuilder } from \"../FormBuilder/FormBuilder\";\nimport { ArrayIndexed } from \"../Core/ArrayIndexed\";\nimport { Server } from \"../Infrastructure/Server/Server\";\nimport htmlString = JQuery.htmlString;\nimport { RegionsRepository } from \"../Region/RegionsRepository\";\nimport { Tooltip } from \"../Tooltips/Tooltip\";\n\nconst $ = jQuery;\n\n/**\n * MapSVG.Map class. Creates a new map inside of the given HTML container, which is typically a DIV element.\n * @constructor\n *\n * @param {string} id - ID of the map container\n * @param {MapOptionsInterface} options - map settings\n *\n * @example\n * // Create the map in
:\n * var mapsvg = new MapSVGMap(\"my-container-id\", {\n * source: \"/path/to/map.svg\",\n * zoom: {on: true},\n * scroll: {on: true}\n * });\n *\n * // Get map instance by container ID\n * var mapsvg = MapSVG.getById(\"my-container-id\");\n *\n * // Get map instance by index number\n * var mapsvg_1 = MapSVG.get(0); // first map on the page\n * var mapsvg_2 = MapSVG.get(1); // second map.\n *\n */\nclass MapSVGMap {\n //static MapSVG = MapSVG;\n\n id: number;\n containerId: string;\n markerOptions: Record = { src: MapSVG.urls.root + \"markers/pin1_red.png\" };\n\n converter: Converter;\n\n dirtyFields: string[];\n\n regions: ArrayIndexed;\n objects: ArrayIndexed;\n\n regionsRepository: Repository;\n objectsRepository: Repository;\n filtersRepository: Repository;\n schemaRepository: SchemaRepository;\n\n events: Events;\n\n resizeSensor: ResizeSensor;\n\n liveCss: HTMLStyleElement;\n\n defaults: MapOptionsInterface;\n options: MapOptionsInterface;\n optionsDelta: { [key: string]: any };\n\n mapIsGeo: boolean;\n geoCoordinates: boolean;\n editMode: boolean;\n highlightedRegions: Array;\n editRegions: { on: boolean };\n editMarkers: { on: boolean };\n clickAddsMarker: boolean;\n editData: { on: boolean };\n disableLinks: boolean;\n markerEditHandler: (location: Location) => void;\n regionEditHandler: () => void;\n objectClickedBeforeScroll: Region | Marker | MarkerCluster;\n highlighted_marker: Marker;\n\n googleMaps?: {\n loaded: boolean;\n map: google.maps.Map;\n zoomLimit?: boolean;\n overlay?: any;\n initialized: boolean;\n maxZoomService?: google.maps.MaxZoomService;\n currentMaxZoom?: number;\n };\n\n groups: ArrayIndexed;\n galleries: ArrayIndexed;\n\n svgDefault: {\n viewBox?: ViewBox;\n geoViewBox?: GeoViewBox;\n width?: number;\n height?: number;\n };\n\n viewBox: ViewBox;\n _viewBox: ViewBox;\n viewBoxFull: ViewBox;\n viewBoxFake: ViewBox;\n whRatioFull: number;\n geoViewBox?: GeoViewBox;\n\n mapLonDelta: number;\n mapLatBottomDegree: number;\n\n zoomLevel: number;\n zoomLevels: ArrayIndexed<{\n zoomLevel: number;\n viewBox: ViewBox;\n _scale: number;\n }>;\n isZooming: boolean;\n touchZoomStart: boolean;\n scaleDistStart: number;\n scrollStarted: boolean;\n\n isScrolling: boolean;\n zoomDelta: number;\n whRatio: number;\n vbStart: boolean;\n\n scale: number;\n _scale: number;\n superScale: number;\n scroll: {\n tx?: number;\n ty?: number;\n vxi?: number;\n vyi?: number; // initial viewbox when scrollning started\n x?: number;\n y?: number; // mouse coordinates when scrolling started\n dx?: number;\n dy?: number; // mouse delta\n vx?: number;\n vy?: number; // new viewbox x/y\n gx?: number;\n gy?: number; // for google maps scroll\n touchScrollStart: number;\n };\n\n iosDownscaleFactor: number;\n\n containers: {\n svg?: SVGSVGElement;\n map?: HTMLElement;\n googleMaps?: HTMLElement;\n mapContainer?: HTMLElement;\n scrollpane?: HTMLElement;\n scrollpaneWrap?: HTMLElement;\n wrap?: HTMLElement;\n wrapAll?: HTMLElement;\n loading?: HTMLElement;\n directory?: HTMLElement;\n filters?: HTMLElement;\n detailsView?: HTMLElement;\n popover?: HTMLElement;\n tooltip?: HTMLElement;\n layers?: HTMLElement;\n layersControl?: HTMLElement;\n layersControlLabel?: HTMLElement;\n layersControlList?: HTMLElement;\n layersControlListNano?: HTMLElement;\n pagerMap?: HTMLElement;\n pagerDir?: HTMLElement;\n leftSidebar?: HTMLElement;\n rightSidebar?: HTMLElement;\n header?: HTMLElement;\n footer?: HTMLElement;\n filterTags?: HTMLElement;\n filtersModal?: HTMLElement;\n clustersCss?: HTMLStyleElement;\n clustersHoverCss?: HTMLStyleElement;\n markersCss?: HTMLStyleElement;\n controls?: HTMLElement;\n zoomButtons?: HTMLElement;\n legend?: {\n title: HTMLElement;\n text: HTMLElement;\n coloring: HTMLElement;\n description: HTMLElement;\n container: HTMLElement;\n };\n choroplethSourceSelect?: {\n container: HTMLElement;\n //label: HTMLElement,\n select: HTMLElement;\n options: Array;\n };\n };\n containersCreated: boolean;\n\n controllers: {\n detailsView?: DetailsController;\n popover?: PopoverController;\n directory?: DirectoryController;\n // TODO add tooltip controller\n tooltip?: Tooltip;\n filters?: FiltersController;\n };\n\n templates: {\n [key: string]: any; // returned by Handlebars.compile()\n };\n\n markers: ArrayIndexed;\n clusters: Record;\n markersClusters: ArrayIndexed;\n firstDataLoad: boolean;\n clustersByZoom: Array;\n selected_id: Array;\n selected_marker: Marker;\n clusterizerWorker: Worker;\n editingMarker: Marker;\n\n filtersSchema: Schema;\n\n layers: {\n [key: string]: HTMLElement;\n };\n controls: {\n zoom: HTMLElement;\n userLocation: HTMLElement;\n zoomReset: HTMLElement;\n previousMap: HTMLElement;\n };\n formBuilder: any;\n tooltip: {\n posOriginal: { [key: string]: string };\n posShifted: { [key: string]: string };\n posShiftedPrev: { [key: string]: string };\n mirror: { [key: string]: number };\n };\n firefoxScroll: {\n insideIframe: boolean;\n scrollX: number;\n scrollY: number;\n };\n canZoom: boolean;\n eventsPreventList: { [key: string]: boolean };\n googleMapsScript: HTMLScriptElement;\n\n fitOnDataLoadDone: boolean;\n fitDelta: number;\n lastTimeFitWas: number;\n userLocation: Location;\n userLocationMarker: Marker;\n setMarkersByField: boolean;\n locationField: SchemaField;\n popoverShowingFor: MapObject;\n\n svgFileLastChanged: number;\n\n changedFields: any;\n changedSearch: any;\n\n /* This property comes from v5 without any changes */\n $gauge: any;\n\n /**\n * AfterLoad event can be blocked by:\n * 1. Loading Google API JS files\n * 2. Loading filters controller\n * When a blocker is introduced, it increases the number of afterLoadBlockers\n * when mapsvg.finalizeMapLoading is called, it checks if afterLoadBlockers = 0\n */\n afterLoadBlockers: number;\n loaded: boolean;\n\n /**\n *\n * @param containerId\n * @param mapParams\n * @param externalParams\n */\n\n constructor(\n containerId: string,\n mapParams: {\n id: number;\n options: MapOptionsInterface;\n svgFileLastChanged: number;\n version: string;\n },\n externalParams?: { [key: string]: any }\n ) {\n const options = mapParams.options;\n\n this.updateOutdatedOptions(options);\n\n this.dirtyFields = [];\n\n this.containerId = containerId;\n this.options = $.extend(true, {}, DefaultOptions, options);\n\n this.options.source = this.urlToRelativePath(this.options.source);\n\n this.editMode = this.options.editMode;\n delete this.options.editMode;\n\n this.id = mapParams.id;\n this.svgFileLastChanged = mapParams.svgFileLastChanged;\n\n this.regions = new ArrayIndexed(\"id\");\n this.objects = new ArrayIndexed(\"id\");\n\n this.events = new Events(this);\n\n this.highlightedRegions = [];\n this.editRegions = { on: false };\n this.editMarkers = { on: false };\n this.editData = { on: false };\n\n this.controllers = {};\n\n // Set containers\n this.containers = {\n map: document.getElementById(this.containerId),\n scrollpane: $('
')[0],\n scrollpaneWrap: $('
')[0],\n layers: $('
')[0],\n };\n\n this.containers.map.appendChild(this.containers.layers);\n this.containers.map.appendChild(this.containers.scrollpaneWrap);\n this.containers.scrollpaneWrap.appendChild(this.containers.scrollpane);\n\n this.whRatio = 0;\n this.isScrolling = false;\n this.markerOptions = {};\n this.svgDefault = {};\n this.scale = 1; // absolute scale\n this._scale = 1; // relative scale starting from current zoom level\n this.selected_id = [];\n\n this.regions = new ArrayIndexed(\"id\");\n\n if (!this.options.database.regionsTableName) {\n this.options.database.regionsTableName = \"regions_\" + this.id;\n }\n if (!this.options.database.objectsTableName) {\n this.options.database.objectsTableName = \"objects_\" + this.id;\n }\n\n this.regionsRepository = new Repository(\n \"region\",\n \"regions/\" + this.options.database.regionsTableName\n );\n // Turn off pagination for Regions:\n this.regionsRepository.query.update({ perpage: 0 });\n\n this.objectsRepository = new Repository(\n \"object\",\n \"objects/\" + this.options.database.objectsTableName\n );\n if (this.options.database.noFiltersNoLoad) {\n this.objectsRepository.setNoFiltersNoLoad(true);\n }\n\n this.objectsRepository.query.update({\n perpage: this.options.database.pagination.on\n ? this.options.database.pagination.perpage\n : 0,\n });\n\n this.schemaRepository = new SchemaRepository();\n\n this.markers = new ArrayIndexed(\"id\");\n this.markersClusters = new ArrayIndexed(\"id\");\n this._viewBox = new ViewBox(0, 0, 0, 0); // initial viewBox\n this.viewBox = new ViewBox(0, 0, 0, 0); // current viewBox\n this.zoomLevel = 0;\n this.scroll = {\n tx: 0,\n ty: 0,\n vxi: 0,\n vyi: 0, // initial viewbox when scrollning started\n x: 0,\n y: 0, // mouse coordinates when scrolling started\n dx: 0,\n dy: 0, // mouse delta\n vx: 0,\n vy: 0, // new viewbox x/y\n gx: 0,\n gy: 0, // for google maps scroll\n touchScrollStart: 0,\n };\n this.layers = {};\n this.geoCoordinates = false;\n this.geoViewBox = new GeoViewBox(new GeoPoint(0, 0), new GeoPoint(0, 0));\n this.eventsPreventList = {};\n this.googleMaps = {\n loaded: false,\n initialized: false,\n map: null,\n zoomLimit: true,\n maxZoomService: null,\n };\n\n // Set 3 blockers initially:\n // 1. The map loading process itself\n this.afterLoadBlockers = 1;\n this.loaded = false;\n\n // 2. Regions loading\n // 3. Objects loading\n if (this.id) {\n this.afterLoadBlockers += 2;\n }\n\n // 4. Google maps API blocker?\n if (this.options.googleMaps.on) {\n this.afterLoadBlockers++;\n }\n // 5. Filters may block too because the load remote HTML filters which is async process\n if (this.filtersShouldBeShown()) {\n this.afterLoadBlockers++;\n }\n\n // if (MapSVG && externalParams) {\n // for (const i in externalParams) {\n // MapSVG[i] = externalParams[i];\n // window.MapSVG[i] = externalParams[i];\n // }\n // }\n\n this.init();\n }\n\n /**\n * Return relative path part of the URL\n * @param {string} url\n * @returns string\n * @private\n */\n urlToRelativePath(url: string): string {\n if (url.indexOf(\"//\") === 0) url = url.replace(/^\\/\\/[^/]+/, \"\").replace(\"//\", \"/\");\n else url = url.replace(/^.*:\\/\\/[^/]+/, \"\").replace(\"//\", \"/\");\n return url;\n }\n\n /**\n * Sets visiblity switches for groups of SVG objects\n * @private\n */\n setGroups(groups?: GroupOptionsInterface[]): void {\n const _this = this;\n\n if (!this.groups) {\n _this.groups = new ArrayIndexed(\"id\", _this.options.groups, {\n autoId: true,\n unique: true,\n });\n } else {\n this.options.groups = this.groups;\n }\n\n _this.groups.forEach(function (g: GroupOptionsInterface) {\n g.objects &&\n g.objects.length &&\n g.objects.forEach(function (obj) {\n _this.containers.svg\n .querySelector(\"#\" + obj.value)\n .classList.toggle(\"mapsvg-hidden\", !g.visible);\n });\n });\n }\n\n /**\n * Returns the list of options for visibility settings in admin.js\n */\n getGroupSelectOptions(): any[] {\n const _this = this;\n let id;\n const optionGroups = [];\n const options = [];\n const options2 = [];\n\n $(_this.containers.svg)\n .find(\"g\")\n .each(function (index) {\n const id = $(this)[0].getAttribute(\"id\");\n if (id) {\n const title = $(this)[0].getAttribute(\"title\");\n options.push({ label: title || id, value: id });\n }\n });\n optionGroups.push({ title: \"SVG Layers / Groups\", options: options });\n\n $(_this.containers.svg)\n .find(\"path,ellipse,circle,polyline,polygon,rectangle,img,text\")\n .each(function (index) {\n const id = $(this)[0].getAttribute(\"id\");\n if (id) {\n const title = $(this)[0].getAttribute(\"title\");\n options2.push({ label: title || id, value: id });\n }\n });\n optionGroups.push({ title: \"Other SVG objects\", options: options2 });\n\n return optionGroups;\n }\n\n /**\n * Sets visibility switches\n * @param {object} options - Options\n * @private\n */\n setLayersControl(options?: LayersControlOptionsInterface): void {\n const _this = this;\n\n if (options) $.extend(true, this.options.layersControl, options);\n\n if (this.options.layersControl.on) {\n if (!this.containers.layersControl) {\n this.containers.layersControl = document.createElement(\"div\");\n this.containers.layersControl.classList.add(\"mapsvg-layers-control\");\n\n this.containers.layersControlLabel = document.createElement(\"div\");\n this.containers.layersControlLabel.classList.add(\"mapsvg-layers-label\");\n this.containers.layersControl.appendChild(this.containers.layersControlLabel);\n\n const layersControlWrap = document.createElement(\"div\");\n layersControlWrap.classList.add(\"mapsvg-layers-list-wrap\");\n this.containers.layersControl.appendChild(layersControlWrap);\n\n this.containers.layersControlListNano = document.createElement(\"div\");\n this.containers.layersControlListNano.classList.add(\"nano\");\n layersControlWrap.appendChild(this.containers.layersControlListNano);\n\n this.containers.layersControlList = document.createElement(\"div\");\n this.containers.layersControlList.classList.add(\"mapsvg-layers-list\");\n this.containers.layersControlList.classList.add(\"nano-content\");\n this.containers.layersControlListNano.appendChild(\n this.containers.layersControlList\n );\n\n this.containers.mapContainer.appendChild(this.containers.layersControl);\n }\n this.containers.layersControl.style.display = \"block\";\n this.containers.layersControlLabel.innerHTML = this.options.layersControl.label;\n\n this.containers.layersControlLabel.style.display = \"block\";\n this.containers.layersControlList.innerHTML = \"\";\n while (this.containers.layersControlList.firstChild) {\n this.containers.layersControlList.removeChild(\n this.containers.layersControlList.firstChild\n );\n }\n this.containers.layersControl.classList.remove(\n \"mapsvg-top-left\",\n \"mapsvg-top-right\",\n \"mapsvg-bottom-left\",\n \"mapsvg-bottom-right\"\n );\n this.containers.layersControl.classList.add(\n \"mapsvg-\" + this.options.layersControl.position\n );\n if (\n this.options.menu.on &&\n !this.options.menu.customContainer &&\n this.options.layersControl.position.indexOf(\"left\") !== -1\n ) {\n this.containers.layersControl.style.left = this.options.menu.width;\n }\n\n this.containers.layersControl.style.maxHeight = this.options.layersControl.maxHeight;\n\n this.options.groups.forEach((g) => {\n const item = document.createElement(\"div\");\n item.classList.add(\"mapsvg-layers-item\");\n item.setAttribute(\"data-group-id\", g.id);\n item.innerHTML =\n '\";\n this.containers.layersControlList.appendChild(item);\n });\n\n // @ts-ignore\n $(this.containers.layersControlListNano).nanoScroller({\n preventPageScrolling: true,\n iOSNativeScrolling: true,\n });\n\n $(this.containers.layersControl).off();\n $(this.containers.layersControl).on(\"click\", \".mapsvg-layers-item\", function () {\n const id = $(this).data(\"group-id\");\n const input = $(this).find(\"input\");\n input.prop(\"checked\", !input.prop(\"checked\"));\n _this.groups.forEach(function (g) {\n if (g.id === id) g.visible = !g.visible;\n });\n _this.setGroups();\n });\n $(this.containers.layersControlLabel).off();\n $(this.containers.layersControlLabel).on(\"click\", () => {\n $(_this.containers.layersControl).toggleClass(\"closed\");\n });\n\n $(this.containers.layersControl).toggleClass(\n \"closed\",\n !this.options.layersControl.expanded\n );\n } else {\n if (this.containers.layersControl) {\n this.containers.layersControl.style.display = \"none\";\n }\n }\n }\n\n loadDataObjects(params?: any): JQueryDeferred {\n return this.objectsRepository.find(params);\n }\n\n loadDirectory(): void {\n // If \"Load DB on start\" is off then\n // don't load directory to prevent 'no records found' message from appearing\n if (\n !this.editMode &&\n this.options.menu.source === \"database\" &&\n !this.objectsRepository.loaded\n ) {\n return;\n }\n if (this.options.menu.on) {\n this.controllers.directory.loadItemsToDirectory();\n }\n this.setPagination();\n }\n\n /**\n * Adds pagination controls to the map and/or directory\n */\n setPagination() {\n const _this = this;\n\n this.containers.pagerMap && $(this.containers.pagerMap).empty().remove();\n this.containers.pagerDir && $(this.containers.pagerDir).empty().remove();\n\n if (\n _this.options.database.pagination.on &&\n _this.options.database.pagination.perpage !== 0\n ) {\n this.containers.directory.classList.toggle(\n \"mapsvg-with-pagination\",\n [\"directory\", \"both\"].indexOf(_this.options.database.pagination.showIn) !== -1\n );\n this.containers.map.classList.toggle(\n \"mapsvg-with-pagination\",\n [\"map\", \"both\"].indexOf(_this.options.database.pagination.showIn) !== -1\n );\n\n if (_this.options.menu.on) {\n this.containers.pagerDir = _this.getPagination();\n _this.controllers.directory.addPagination(this.containers.pagerDir);\n }\n this.containers.pagerMap = _this.getPagination();\n this.containers.map.appendChild(this.containers.pagerMap);\n }\n }\n /**\n * Generates HTML with pagination buttons and attaches callback event on button click\n * @param {function} callback - Callback function that should be called on click on a next/prev page button\n */\n getPagination(callback?: () => void): HTMLElement {\n const _this = this;\n\n // pager && (pager.empty().remove());\n const pager = $(\n ''\n );\n\n if (this.objectsRepository.onFirstPage() && this.objectsRepository.onLastPage()) {\n pager.hide();\n } else {\n pager.find(\".mapsvg-prev\").removeClass(\"disabled\");\n pager.find(\".mapsvg-first\").removeClass(\"disabled\");\n pager.find(\".mapsvg-last\").removeClass(\"disabled\");\n pager.find(\".mapsvg-next\").removeClass(\"disabled\");\n\n this.objectsRepository.onLastPage() &&\n pager.find(\".mapsvg-next\").addClass(\"disabled\") &&\n pager.find(\".mapsvg-last\").addClass(\"disabled\");\n\n this.objectsRepository.onFirstPage() &&\n pager.find(\".mapsvg-prev\").addClass(\"disabled\") &&\n pager.find(\".mapsvg-first\").addClass(\"disabled\");\n }\n\n pager\n .on(\"click\", \".mapsvg-next:not(.disabled)\", (e) => {\n e.preventDefault();\n if (this.objectsRepository.onLastPage()) return;\n const query = new Query({ page: this.objectsRepository.query.page + 1 });\n this.objectsRepository.find(query).done(function () {\n callback && callback();\n });\n })\n .on(\"click\", \".mapsvg-prev:not(.disabled)\", function (e) {\n e.preventDefault();\n if (_this.objectsRepository.onFirstPage()) return;\n const query = new Query({ page: _this.objectsRepository.query.page - 1 });\n _this.objectsRepository.find(query).done(function () {\n callback && callback();\n });\n })\n .on(\"click\", \".mapsvg-first:not(.disabled)\", function (e) {\n e.preventDefault();\n if (_this.objectsRepository.onFirstPage()) return;\n const query = new Query({ page: 1 });\n _this.objectsRepository.find(query).done(function () {\n callback && callback();\n });\n })\n .on(\"click\", \".mapsvg-last:not(.disabled)\", function (e) {\n e.preventDefault();\n if (_this.objectsRepository.onLastPage()) return;\n const query = new Query({ lastpage: true });\n _this.objectsRepository.find(query).done(function () {\n callback && callback();\n });\n });\n\n return pager[0];\n }\n\n /**\n * Deletes all markers from the map\n */\n deleteMarkers() {\n while (this.markers.length) {\n this.markerDelete(this.markers[0]);\n }\n }\n\n /**\n * Deletes all markers from the map\n */\n deleteClusters(): void {\n if (this.markersClusters) {\n this.markersClusters.forEach(function (markerCluster) {\n markerCluster.destroy();\n });\n this.markersClusters.clear();\n }\n }\n\n /**\n * Adds locations from the database to the map - as markers or as clusters if clustering is enabled.\n * @private\n */\n addLocations(): void {\n const _this = this;\n this.firstDataLoad = this.firstDataLoad === undefined;\n\n let locationField = this.objectsRepository.getSchema().getFieldByType(\"location\");\n if (!locationField) {\n return;\n }\n locationField = locationField.name;\n\n if (locationField) {\n if (this.firstDataLoad) {\n this.setMarkerImagesDependency();\n }\n\n _this.deleteMarkers();\n _this.deleteClusters();\n\n _this.clusters = {};\n _this.clustersByZoom = [];\n\n if (this.objectsRepository.getLoaded().length > 0) {\n this.objectsRepository.getLoaded().forEach(function (object) {\n if (object[locationField]) {\n if (\n object[locationField].img &&\n (object[locationField].geoPoint || object[locationField].svgPoint)\n ) {\n new Marker({\n location: object[locationField],\n object: object,\n mapsvg: _this,\n });\n }\n }\n });\n if (_this.options.clustering.on) {\n _this.startClusterizer();\n } else {\n this.objectsRepository.getLoaded().forEach(function (object) {\n if (object.location && object.location.marker) {\n _this.markerAdd(object.location.marker);\n }\n });\n _this.mayBeFitMarkers();\n }\n }\n }\n }\n /**\n * Stores a set of markers/clusters for a certain zoom level for later use.\n * This method gets called by a worker thread that calculates markers/clusters for all zoom levels.\n * @param zoomLevel\n * @param clusters\n * @private\n */\n addClustersFromWorker(zoomLevel: number, clusters): void {\n const _this = this;\n\n _this.clustersByZoom[zoomLevel] = [];\n for (const cell in clusters) {\n const markers = clusters[cell].markers.map(function (marker) {\n return _this.objectsRepository.objects.findById(marker.id).location.marker;\n });\n _this.clustersByZoom[zoomLevel].push(\n new MarkerCluster(\n {\n markers: markers,\n svgPoint: new SVGPoint(clusters[cell].x, clusters[cell].y),\n cellX: clusters[cell].cellX,\n cellY: clusters[cell].cellY,\n },\n _this\n )\n );\n }\n if (_this.zoomLevel === zoomLevel) {\n _this.clusterizeMarkers();\n }\n }\n /**\n * Starts clusterizer worker in a separate thread\n * @private\n */\n startClusterizer(): void | boolean {\n if (!this.objectsRepository || this.objectsRepository.getLoaded().length === 0) {\n return;\n }\n const locationField = this.objectsRepository.getSchema().getFieldByType(\"location\");\n if (!locationField) {\n return false;\n }\n\n if (!this.clusterizerWorker) {\n this.clusterizerWorker = new Worker(MapSVG.urls.root + \"js/mapsvg/Core/clustering.js\");\n\n // Receive messages from postMessage() calls in the Worker\n this.clusterizerWorker.onmessage = (evt) => {\n if (evt.data.clusters) {\n this.addClustersFromWorker(evt.data.zoomLevel, evt.data.clusters);\n }\n };\n }\n\n // Pass data to the WebWorker\n const objectsData = [];\n this.objectsRepository\n .getLoaded()\n .filter((o) => {\n return o.location && o.location.marker;\n })\n .forEach((o) => {\n objectsData.push({\n id: o.id,\n x: o.location.marker.svgPoint.x,\n y: o.location.marker.svgPoint.y,\n });\n });\n this.clusterizerWorker.postMessage({\n objects: objectsData,\n cellSize: 50,\n mapWidth: this.containers.map.clientWidth,\n zoomLevels: this.zoomLevels,\n zoomLevel: this.zoomLevel,\n zoomDelta: this.zoomDelta,\n svgViewBox: this.svgDefault.viewBox,\n });\n\n this.events.on(\"zoom\", () => {\n this.clusterizerWorker.postMessage({\n message: \"zoom\",\n zoomLevel: this.zoomLevel,\n });\n });\n }\n /**\n * Starts clustering markers on the map\n * @property {boolean} skipFitMarkers - Don't do \"fit markers\" action. Used to prevent fitting markers\n * on changinh zoom level.\n * @private\n */\n clusterizeMarkers(skipFitMarkers?: boolean): void {\n $(this.layers.markers)\n .children()\n .each((i, obj) => {\n $(obj).detach();\n });\n this.markers.clear();\n this.markersClusters.clear();\n\n // $(this.containers.map).addClass('no-transitions-markers');\n\n this.clustersByZoom &&\n this.clustersByZoom[this.zoomLevel] &&\n this.clustersByZoom[this.zoomLevel].forEach((cluster) => {\n // Don't clusterize on google maps with zoom level >= 17\n if (\n this.options.googleMaps.on &&\n this.googleMaps.map &&\n this.googleMaps.map.getZoom() >= 17\n ) {\n this.markerAdd(cluster.markers[0]);\n } else {\n if (cluster.markers.length > 1) {\n this.markersClusterAdd(cluster);\n } else {\n this.markerAdd(cluster.markers[0]);\n }\n }\n });\n\n if (this.editingMarker) {\n this.markerAdd(this.editingMarker);\n }\n\n if (!skipFitMarkers) {\n this.mayBeFitMarkers();\n }\n\n if (this.options.labelsMarkers.on) {\n this.setLabelsMarkers();\n }\n\n // $(_this.containers.map).removeClass('no-transitions-markers');\n }\n /**\n * Returns URL of the mapsvg.css file\n * @returns {string} URL\n * @private\n */\n getCssUrl(): string {\n return MapSVG.urls.root + \"css/mapsvg.css\";\n }\n /**\n * Checks if the map is geo-calibrated\n * @returns {boolean}\n */\n isGeo(): boolean {\n return this.mapIsGeo;\n }\n /**\n * Converts a string to function\n * @param string\n * @returns {function|object} Function or object {error: \"error text\"}\n * @private\n *\n */\n functionFromString(string: string): SyntaxError | TypeError {\n let func;\n let error;\n const fn = string.trim();\n if (fn.indexOf(\"{\") == -1 || fn.indexOf(\"function\") !== 0 || fn.indexOf(\"(\") == -1) {\n return new SyntaxError(\"MapSVG user function error: no function body.\");\n }\n const fnBody = fn.substring(fn.indexOf(\"{\") + 1, fn.lastIndexOf(\"}\"));\n const params = fn.substring(fn.indexOf(\"(\") + 1, fn.indexOf(\")\"));\n try {\n func = new Function(params, fnBody);\n } catch (err) {\n error = err;\n }\n\n if (!error) return func;\n else return error;\n }\n /**\n * Returns map options.\n * @param {bool} forTemplate - If options should be formatted for use in a template\n * @param {bool} forWeb - If options should be formatted for use in the web\n * @param {object} optionsDelta - used by backend WP admin only, part of options from the previous view mode\n * @returns {object}\n */\n getOptions(forTemplate: boolean, forWeb: boolean) {\n const options = $.extend(true, {}, this.options);\n\n function clearEmpties(o) {\n for (const k in o) {\n if (!o[k] || typeof o[k] !== \"object\") {\n continue;\n }\n\n clearEmpties(o[k]);\n if (Object.keys(o[k]).length === 0) {\n delete o[k];\n }\n }\n }\n\n clearEmpties(options.regions);\n\n $.extend(true, options, this.optionsDelta);\n\n options.viewBox = this._viewBox.toArray();\n options.filtersSchema = this.filtersSchema.getFieldsAsArray();\n if (options.filtersSchema.length > 0) {\n options.filtersSchema.forEach((field) => {\n if (field.type === \"distance\") {\n field.value = \"\";\n }\n });\n }\n\n // @ts-ignore - old options field from MapSVG versions <5.x\n delete options.markers;\n\n if (forTemplate) {\n // @ts-ignore - may this needs to be removed?\n options.svgFilename = options.source.split(\"/\").pop();\n // @ts-ignore - may this needs to be removed?\n options.svgFiles = MapSVG.svgFiles;\n }\n\n if (forWeb)\n $.each(options, (key, val) => {\n if (JSON.stringify(val) == JSON.stringify(this.defaults[key])) delete options[key];\n });\n delete options.backend;\n\n return options;\n }\n\n /**\n * Restore delta options, used by MapSVG-Admin\n * @private\n */\n restoreDeltaOptions(): void {\n this.update(this.optionsDelta);\n this.optionsDelta = {};\n }\n\n /**\n * Sets event handlers\n * @param {object} functions - Callbacks {eventName, eventName, ...}\n */\n setEvents(functions: { [key: string]: string }) {\n // TODO add namespaces for events as done in jQuery\n\n let compiledFunction;\n\n for (const eventName in functions) {\n if (typeof functions[eventName] === \"string\") {\n compiledFunction =\n functions[eventName] != \"\"\n ? this.functionFromString(functions[eventName])\n : null;\n if (\n !compiledFunction ||\n compiledFunction.error ||\n compiledFunction instanceof TypeError ||\n compiledFunction instanceof SyntaxError\n ) {\n continue;\n }\n } else if (typeof functions[eventName] === \"function\") {\n compiledFunction = functions[eventName];\n }\n\n // Reset events\n this.events.off(eventName);\n // Set new event\n this.events.on(eventName, compiledFunction);\n\n if (eventName.indexOf(\"directory\") !== -1) {\n const event = eventName.split(\".\")[0];\n\n if (this.controllers && this.controllers.directory) {\n this.controllers.directory.events.off(event);\n this.controllers.directory.events.on(event, compiledFunction);\n }\n }\n }\n\n $.extend(true, this.options.events, functions);\n }\n /**\n * Sets map actions that should be performed on Region click. Marker click, etc.\n * @param options\n *\n * @example\n * mapsvg.setActions({\n * \"click.region\": {\n * showPopover: true,\n * showDetails: false\n * }\n * })\n */\n setActions(options): void {\n $.extend(true, this.options.actions, options);\n }\n /**\n * Sets Details View options\n * @param {object} options - Options\n */\n setDetailsView(options?: { [key: string]: any }) {\n options = options || this.options.detailsView || {};\n $.extend(true, this.options.detailsView, options);\n\n // Since 5.0.0: no top/near locations.\n if (this.options.detailsView.location === \"top\" && this.options.menu.position === \"left\") {\n this.options.detailsView.location = \"leftSidebar\";\n } else if (\n this.options.detailsView.location === \"top\" &&\n this.options.menu.position === \"right\"\n ) {\n this.options.detailsView.location = \"rightSidebar\";\n }\n if (\n this.options.detailsView.location === \"near\" ||\n this.options.detailsView.location === \"mapContainer\"\n ) {\n this.options.detailsView.location = \"map\";\n }\n\n if (!this.containers.detailsView) {\n this.containers.detailsView = $('
')[0];\n }\n\n $(this.containers.detailsView).toggleClass(\n \"mapsvg-details-container-relative\",\n !(MapSVG.isPhone && this.options.detailsView.mobileFullscreen) &&\n !this.shouldBeScrollable(this.options.detailsView.location)\n );\n\n if (this.options.detailsView.location === \"custom\") {\n $(\"#\" + this.options.detailsView.containerId).append($(this.containers.detailsView));\n } else {\n if (MapSVG.isPhone && this.options.detailsView.mobileFullscreen) {\n $(\"body\").append($(this.containers.detailsView));\n $(this.containers.detailsView).addClass(\"mapsvg-container-fullscreen\");\n } else {\n this.containers[this.options.detailsView.location].append(\n this.containers.detailsView\n );\n }\n if (this.options.detailsView.margin) {\n $(this.containers.detailsView).css(\"margin\", this.options.detailsView.margin);\n }\n $(this.containers.detailsView).css(\"width\", this.options.detailsView.width);\n }\n }\n /**\n * Sets mobile view options\n * @param options\n */\n setMobileView(options): void {\n $.extend(true, this.options.mobileView, options);\n }\n /**\n * Attaches DB Objects to Regions\n * @param object\n */\n attachDataToRegions(object?: any) {\n this.regions.forEach(function (region) {\n region.objects = [];\n });\n\n this.objectsRepository.getLoaded().forEach((obj, index) => {\n const regions = obj.getRegionsForTable(this.options.database.regionsTableName);\n if (regions && regions.length) {\n regions.forEach((region) => {\n const r = this.getRegion(region.id);\n if (r) r.objects.push(obj);\n });\n }\n });\n }\n /**\n * Sets templates body\n * @param {object} templates - Key:value pairs of template names and HTML content\n */\n setTemplates(templates): void {\n this.templates = this.templates || {};\n for (let name in templates) {\n if (name != undefined) {\n this.options.templates[name] = templates[name];\n let t = this.options.templates[name];\n if (name == \"directoryItem\" || name == \"directoryCategoryItem\") {\n const dirItemTemplate = this.options.templates.directoryItem;\n t =\n '{{#each items}}
' +\n dirItemTemplate +\n \"
{{/each}}\";\n if (\n this.options.menu.categories &&\n this.options.menu.categories.on &&\n this.options.menu.categories.groupBy\n ) {\n const t2 = this.options.templates[\"directoryCategoryItem\"];\n t =\n '{{#each items}}{{#with category}}
' +\n t2 +\n '
{{/with}}' +\n t +\n \"
{{/each}}\";\n }\n name = \"directory\";\n }\n\n try {\n this.options.templates[name] = t;\n this.templates[name] = Handlebars.compile(t, { strict: false });\n } catch (err) {\n console.error(err);\n this.templates[name] = Handlebars.compile(\"\", { strict: false });\n }\n\n if (\n this.editMode &&\n (name == \"directory\" || name == \"directoryCategoryItem\") &&\n this.controllers &&\n this.controllers.directory\n ) {\n this.controllers.directory.templates.main = this.templates[name];\n this.loadDirectory();\n }\n }\n }\n }\n /**\n * Updates map settings.\n * @param {object} options - Map options\n *\n * @example\n * mapsvg.update({\n * popovers: {on: true},\n * colors: {\n * background: \"red\"\n * }\n * });\n */\n update(options): void {\n for (const key in options) {\n if (key == \"regions\") {\n // TODO options.regions for different regions tables (add regionTableName into options)\n for (const id in options.regions) {\n const region = this.getRegion(id);\n region && region.update(options.regions[id]);\n if (options.regions[id].disabled != undefined) {\n this.deselectRegion(region);\n // @ts-ignore\n this.options.regions[id] = this.options.regions[id] || {};\n this.options.regions[id].disabled = region.disabled;\n }\n }\n } else {\n const setter = \"set\" + MapSVG.ucfirst(key);\n if (typeof this[setter] == \"function\") this[setter](options[key]);\n else {\n this.options[key] = options[key];\n }\n }\n }\n }\n\n getDirtyFields(): { [key: string]: any } {\n return this.getData();\n }\n clearDirtyFields(): void {\n this.dirtyFields = [];\n }\n\n /**\n * Sets map title\n * @param {string} title - Map title\n * @private\n */\n setTitle(title: string): void {\n title && (this.options.title = title);\n }\n /**\n * Adds MapSVG add-ons\n * @param extension\n * @private\n */\n setExtension(extension): void {\n if (extension) {\n this.options.extension = extension;\n } else {\n delete this.options.extension;\n }\n }\n /**\n * Disables/enables redirection by link on click on a region or marker\n * when \"Go to link...\" feature is enabled\n * Used to prevent redirection in the map editor.\n * @param {boolean} on - true (enable redirection) of false (disable)\n */\n setDisableLinks(on: boolean): void {\n on = MapSVG.parseBoolean(on);\n if (on) {\n $(this.containers.map).on(\"click.a.mapsvg\", \"a\", function (e) {\n e.preventDefault();\n });\n } else {\n $(this.containers.map).off(\"click.a.mapsvg\");\n }\n this.disableLinks = on;\n }\n /**\n * Sets loading text message\n * @param {string} val - \"Loading map...\" text\n */\n setLoadingText(val): void {\n this.options.loadingText = val;\n }\n /**\n * Enable or disable lock aspect ratio. Used in Map Editor.\n * @param {boolean} onoff\n * @private\n */\n setLockAspectRatio(onoff: boolean): void {\n this.options.lockAspectRatio = MapSVG.parseBoolean(onoff);\n }\n /**\n * Sets callback for marker click. Used in Map Editor to show an object editing window.\n * @private\n */\n setMarkerEditHandler(handler: (location: Location) => void): void {\n this.markerEditHandler = handler;\n }\n /**\n * Sets the field that is used for choropleth map\n * @param {string} field - field name\n */\n setChoroplethSourceField(field): void {\n this.options.choropleth.sourceField = field;\n this.redrawChoropleth();\n }\n /**\n * Sets callback function that is called on click on a Region.\n * Used in the Map Editor on click on a Region in the \"Edit regions\" map mode.\n * @param {Function} handler\n */\n setRegionEditHandler(handler: () => void): void {\n this.regionEditHandler = handler;\n }\n /**\n * Disables all Regions if \"true\" is passed.\n * @param {boolean} on\n */\n setDisableAll(on: boolean) {\n on = MapSVG.parseBoolean(on);\n $.extend(true, this.options, { disableAll: on });\n $(this.containers.map).toggleClass(\"mapsvg-disabled-regions\", on);\n }\n /**\n * @private\n */\n setRegionStatuses(_statuses: ArrayIndexed): void {\n // @ts-ignore\n this.options.regionStatuses = {};\n const colors = {};\n _statuses.forEach((statusOptions) => {\n this.options.regionStatuses[statusOptions.value] = statusOptions;\n colors[statusOptions.value] = statusOptions.color.length\n ? statusOptions.color\n : undefined;\n });\n this.setColors({ status: colors });\n }\n /**\n * @deprecated\n * @private\n */\n setColorsIgnore(val): void {\n this.options.colorsIgnore = MapSVG.parseBoolean(val);\n this.regionsRedrawColors();\n }\n /**\n * Sets color settings (background, regions, containers, etc.)\n * @param {object} colors\n *\n * @example\n * mapsvg.setColors({\n * background: \"#EEEEEE\",\n * hover: \"10\",\n * selected: \"20\",\n * leftSidebar: \"#FF2233\",\n * detailsView: \"#FFFFFF\"\n * });\n */\n setColors(colors?: { [key: string]: string | number | Record }): void {\n for (const i in colors) {\n if (i === \"status\") {\n // @ts-ignore\n for (const s in colors[i]) {\n MapSVG.fixColorHash(colors[i][s]);\n }\n } else {\n if (typeof colors[i] == \"string\") {\n MapSVG.fixColorHash(colors[i]);\n }\n }\n }\n\n $.extend(true, this.options, { colors: colors });\n\n if (colors && colors.status) this.options.colors.status = colors.status;\n\n if (this.options.colors.markers) {\n for (const z in this.options.colors.markers) {\n for (const x in this.options.colors.markers[z]) {\n this.options.colors.markers[z][x] = parseInt(this.options.colors.markers[z][x]);\n }\n }\n }\n\n if (this.options.colors.background)\n $(this.containers.map).css({ background: this.options.colors.background });\n if (this.options.colors.hover) {\n // Typescript compiler thinks isNaN can't accept strings\n // @ts-ignore\n this.options.colors.hover = !isNaN(this.options.colors.hover)\n ? parseInt(this.options.colors.hover + \"\")\n : this.options.colors.hover;\n }\n if (this.options.colors.selected) {\n // Typescript compiler thinks isNaN can't accept strings\n // @ts-ignore\n this.options.colors.selected = !isNaN(this.options.colors.selected)\n ? parseInt(this.options.colors.selected + \"\")\n : this.options.colors.selected;\n }\n\n $(this.containers.leftSidebar).css({\n \"background-color\": this.options.colors.leftSidebar,\n });\n $(this.containers.rightSidebar).css({\n \"background-color\": this.options.colors.rightSidebar,\n });\n $(this.containers.header).css({ \"background-color\": this.options.colors.header });\n $(this.containers.footer).css({ \"background-color\": this.options.colors.footer });\n\n if ($(this.containers.detailsView) && this.options.colors.detailsView !== undefined) {\n $(this.containers.detailsView).css({\n \"background-color\": this.options.colors.detailsView,\n });\n }\n if ($(this.containers.directory) && this.options.colors.directory !== undefined) {\n $(this.containers.directory).css({\n \"background-color\": this.options.colors.directory,\n });\n }\n if ($(this.containers.filtersModal) && this.options.colors.modalFilters !== undefined) {\n $(this.containers.filtersModal).css({\n \"background-color\": this.options.colors.modalFilters,\n });\n }\n\n if ($(this.containers.filters) && this.options.colors.directorySearch) {\n $(this.containers.filters).css({\n \"background-color\": this.options.colors.directorySearch,\n });\n } else if ($(this.containers.filters)) {\n $(this.containers.filters).css({\n \"background-color\": \"\",\n });\n }\n\n if (!this.containers.clustersCss) {\n this.containers.clustersCss = (\n $(\"\").appendTo(\"body\")[0]\n );\n }\n let css = \"\";\n if (this.options.colors.clusters) {\n css += \"background-color: \" + this.options.colors.clusters + \";\";\n }\n if (this.options.colors.clustersBorders) {\n css += \"border-color: \" + this.options.colors.clustersBorders + \";\";\n }\n if (this.options.colors.clustersText) {\n css += \"color: \" + this.options.colors.clustersText + \";\";\n }\n $(this.containers.clustersCss).html(\".mapsvg-marker-cluster {\" + css + \"}\");\n\n if (!this.containers.clustersHoverCss) {\n this.containers.clustersHoverCss = (\n $(\"\").appendTo(\"body\")[0]\n );\n }\n let cssHover = \"\";\n if (this.options.colors.clustersHover) {\n cssHover += \"background-color: \" + this.options.colors.clustersHover + \";\";\n }\n if (this.options.colors.clustersHoverBorders) {\n cssHover += \"border-color: \" + this.options.colors.clustersHoverBorders + \";\";\n }\n if (this.options.colors.clustersHoverText) {\n cssHover += \"color: \" + this.options.colors.clustersHoverText + \";\";\n }\n $(this.containers.clustersHoverCss).html(\".mapsvg-marker-cluster:hover {\" + cssHover + \"}\");\n\n if (!this.containers.markersCss) {\n this.containers.markersCss = $(\"\").appendTo(\"head\")[0];\n }\n const markerCssText =\n \".mapsvg-with-marker-active .mapsvg-marker {\\n\" +\n \" opacity: \" +\n this.options.colors.markers.inactive.opacity / 100 +\n \";\\n\" +\n \" -webkit-filter: grayscale(\" +\n (100 - this.options.colors.markers.inactive.saturation) +\n \"%);\\n\" +\n \" filter: grayscale(\" +\n (100 - this.options.colors.markers.inactive.saturation) +\n \"%);\\n\" +\n \"}\\n\" +\n \".mapsvg-with-marker-active .mapsvg-marker-active {\\n\" +\n \" opacity: \" +\n this.options.colors.markers.active.opacity / 100 +\n \";\\n\" +\n \" -webkit-filter: grayscale(\" +\n (100 - this.options.colors.markers.active.saturation) +\n \"%);\\n\" +\n \" filter: grayscale(\" +\n (100 - this.options.colors.markers.active.saturation) +\n \"%);\\n\" +\n \"}\\n\" +\n \".mapsvg-with-marker-hover .mapsvg-marker {\\n\" +\n \" opacity: \" +\n this.options.colors.markers.unhovered.opacity / 100 +\n \";\\n\" +\n \" -webkit-filter: grayscale(\" +\n (100 - this.options.colors.markers.unhovered.saturation) +\n \"%);\\n\" +\n \" filter: grayscale(\" +\n (100 - this.options.colors.markers.unhovered.saturation) +\n \"%);\\n\" +\n \"}\\n\" +\n \".mapsvg-with-marker-hover .mapsvg-marker-hover {\\n\" +\n \" opacity: \" +\n this.options.colors.markers.hovered.opacity / 100 +\n \";\\n\" +\n \" -webkit-filter: grayscale(\" +\n (100 - this.options.colors.markers.hovered.saturation) +\n \"%);\\n\" +\n \" filter: grayscale(\" +\n (100 - this.options.colors.markers.hovered.saturation) +\n \"%);\\n\" +\n \"}\\n\";\n $(this.containers.markersCss).html(markerCssText);\n\n $.each(this.options.colors, (key, color) => {\n if (color === null || color == \"\") delete this.options.colors[key];\n });\n\n this.regionsRedrawColors();\n }\n /**\n * Sets tooltips options.\n * @param {object} options\n * @example\n * mapsvg.setTooltips({\n * on: true,\n * position: \"bottom-left\",\n * maxWidth: \"300\"\n * })\n */\n setTooltips(options: { on: boolean }): void {\n if (options.on !== undefined) options.on = MapSVG.parseBoolean(options.on);\n\n $.extend(true, this.options, { tooltips: options });\n\n if (!this.containers.tooltip) {\n this.containers.tooltip = $(\"
\").addClass(\"mapsvg-tooltip\")[0];\n $(this.containers.map).append(this.containers.tooltip);\n this.controllers.tooltip = new Tooltip({\n mapsvg: this,\n container: this.containers.tooltip,\n position: this.options.tooltips.position,\n maxWidth: this.options.tooltips.maxWidth,\n minWidth: this.options.tooltips.minWidth,\n });\n this.controllers.tooltip._init();\n }\n\n if (typeof this.options.tooltips.position !== \"undefined\") {\n this.controllers.tooltip.setPosition(this.options.tooltips.position);\n }\n\n if (\n typeof this.options.tooltips.maxWidth !== \"undefined\" ||\n typeof this.options.tooltips.minWidth !== \"undefined\"\n ) {\n this.controllers.tooltip.setSize(\n this.options.tooltips.minWidth,\n this.options.tooltips.maxWidth\n );\n }\n }\n /**\n * Sets popover options.\n * @param {object} options\n * @example\n * mapsvg.setPopovers({\n * on: true,\n * width: 300, // pixels\n * maxWidth: 70, // percents of map container\n * maxHeight: 70, // percents of map container\n * mobileFullscreen: true\n * });\n */\n setPopovers(options) {\n if (options.on !== undefined) options.on = MapSVG.parseBoolean(options.on);\n\n $.extend(this.options.popovers, options);\n\n if (!this.containers.popover) {\n this.containers.popover = $(\"
\").addClass(\"mapsvg-popover\")[0];\n this.layers.popovers.append(this.containers.popover);\n }\n $(this.containers.popover).css({\n width:\n this.options.popovers.width + (this.options.popovers.width == \"auto\" ? \"\" : \"px\"),\n \"max-width\": this.options.popovers.maxWidth + \"%\",\n \"max-height\":\n (this.options.popovers.maxHeight * $(this.containers.wrap).outerHeight()) / 100 +\n \"px\",\n });\n\n if (this.options.popovers.mobileFullscreen && MapSVG.isPhone) {\n $(\"body\").toggleClass(\"mapsvg-fullscreen-popovers\", true);\n $(this.containers.popover).appendTo(\"body\");\n }\n }\n /**\n * Sets region prefix\n * @param {string} prefix\n * @private\n */\n setRegionPrefix(prefix) {\n this.options.regionPrefix = prefix;\n }\n /**\n * Sets initial viewbox\n * @param {array} v - [x,y,width,height]\n * @private\n */\n setInitialViewBox(v) {\n if (typeof v == \"string\")\n v = v\n .trim()\n .split(\" \")\n .map(function (v) {\n return parseFloat(v);\n });\n this._viewBox.update(new ViewBox(v));\n if (this.options.googleMaps.on) {\n this.options.googleMaps.center = this.googleMaps.map.getCenter().toJSON();\n this.options.googleMaps.zoom = this.googleMaps.map.getZoom();\n }\n this.zoomLevel = 0;\n this.setZoomLevels();\n }\n /**\n * Sets viewbox on map start and calculates initial width/height ratio\n * @private\n */\n setViewBoxOnStart() {\n this.viewBoxFull = this.svgDefault.viewBox;\n this.viewBoxFake = this.viewBox;\n this.whRatioFull = this.viewBoxFull.width / this.viewBox.width;\n this.containers.svg.setAttribute(\"viewBox\", this.viewBoxFull.toString());\n\n this.iosDownscaleFactor = 1;\n\n if (MapSVG.device.ios || MapSVG.device.android || MapSVG.browser.safari) {\n // if (\n // MapSVG.device.ios ||\n // (MapSVG.device.android && this.svgDefault.viewBox.width > 1500)\n // ) {\n // this.iosDownscaleFactor = this.svgDefault.viewBox.width > 9999 ? 100 : 10;\n this.iosDownscaleFactor = 0.1;\n // } else if (MapSVG.browser.safari) {\n // this.iosDownscaleFactor = 0.1;\n // }\n }\n this.containers.svg.style.width =\n (this.svgDefault.viewBox.width / this.iosDownscaleFactor).toString() + \"px\";\n\n this.vbStart = true;\n }\n /**\n * Sets map viewbox\n * @param {ViewBox} viewBox\n * @param {boolean} adjustGoogleMap\n */\n setViewBox(viewBox?: ViewBox, adjustGoogleMap = true): boolean {\n let initial = false;\n\n if (typeof viewBox === \"undefined\" || (viewBox.width === 0 && viewBox.height === 0)) {\n viewBox = this.svgDefault.viewBox;\n initial = true;\n }\n const isZooming =\n viewBox.width != this.viewBox.width || viewBox.height != this.viewBox.height;\n\n this.viewBox.update(viewBox);\n\n this.whRatio = this.viewBox.width / this.viewBox.height;\n\n !this.vbStart && this.setViewBoxOnStart();\n\n if (initial) {\n if (this._viewBox.width === 0 && this._viewBox.height === 0) {\n this._viewBox.update(this.viewBox);\n }\n this._scale = 1;\n }\n\n this.scale = this.getScale();\n this.superScale = (this.whRatioFull * this.svgDefault.viewBox.width) / this.viewBox.width;\n\n const w = this.svgDefault.viewBox.width / this.containers.map.clientWidth;\n this.superScale = this.superScale / w;\n\n if (this.iosDownscaleFactor) {\n this.superScale *= this.iosDownscaleFactor;\n }\n\n this.scroll.tx = Math.round((this.svgDefault.viewBox.x - this.viewBox.x) * this.scale);\n this.scroll.ty = Math.round((this.svgDefault.viewBox.y - this.viewBox.y) * this.scale);\n\n // Changing Google Map boundaries will call this method again with adjustGoogleMap=false\n if (this.googleMaps.map && adjustGoogleMap !== false) {\n // We don't know if there are more zoom levels for Google Map\n // So we just zoom-in and then check if zoom has changed.\n // If it's changed then we set the center point\n const googlePrevZoom = this.googleMaps.map.getZoom();\n this.googleMaps.map.setCenter(this.getCenterGeoPoint());\n this.googleMaps.map.setZoom(this.getZoomForGoogle());\n // if (googlePrevZoom !== this.googleMaps.map.getZoom()) {\n // }\n } else {\n this.containers.scrollpane.style.transform =\n \"translate(\" + this.scroll.tx + \"px,\" + this.scroll.ty + \"px)\";\n this.containers.svg.style.transform = \"scale(\" + this.superScale + \")\";\n this.syncZoomLevelWithGoogle();\n }\n\n this.movingItemsAdjustScreenPosition();\n\n if (isZooming) {\n this.adjustStrokes();\n this.toggleSvgLayerOnZoom();\n if (this.options.clustering.on) {\n // Google Maps is calling setViewBox 20-30 times per zoom cycle (400ms)\n // until the animation finishes. So we have to use .throttle to avoid calling\n // the expensive operation multiple times.\n this.throttle(this.clusterizeOnZoom, 400, this);\n } else {\n this.events.trigger(\"zoom\");\n }\n }\n\n return true;\n }\n\n /**\n * Google Maps max zoom level is inconsistent for satellite view map type:\n * depending on the location it can be from 17 to 22.\n * It's hard to tell if user can zoom in Google Map more before actual zoom occurs.\n * So we are letting them to zoom and then, if Google Map isn't zoomed then MapSVG and\n * Google Maps levels would be out of sync.\n * In this method we check if MapSVG zoom and Google Zoom levels are out of sync\n * and then synchronize them.\n */\n private syncZoomLevelWithGoogle(): void {\n if (\n this.googleMaps.map &&\n this.googleMaps.map.getZoom() !== this.getZoomForGoogle() &&\n typeof this.zoomDelta !== \"undefined\"\n ) {\n this.zoomLevel = this.googleMaps.map.getZoom() - this.zoomDelta;\n }\n }\n\n /**\n * Returns lat,lng coordinates of center of the current view\n */\n getCenterGeoPoint(): GeoPoint {\n return this.converter.convertSVGToGeo(this.getCenterSvgPoint());\n }\n\n /**\n * Returns SVG coordinates of the center of current map position\n */\n getCenterSvgPoint(): SVGPoint {\n return new SVGPoint(\n this.viewBox.x + this.viewBox.width / 2,\n this.viewBox.y + this.viewBox.height / 2\n );\n }\n\n /**\n * Returns zoom level adjusted for Google Maps\n */\n getZoomForGoogle(): number {\n if (typeof this.zoomLevel === \"string\") {\n this.zoomLevel = parseInt(this.zoomLevel);\n }\n return this.zoomLevel + this.zoomDelta;\n }\n getZoomRange(): { min: number; max: number } {\n const range = { min: 0, max: 0 };\n\n if (this.options.googleMaps.on) {\n range.min = Math.max(0, this.options.zoom.limit[0] + this.zoomDelta) - this.zoomDelta;\n range.max = Math.min(22, this.options.zoom.limit[1] + this.zoomDelta) - this.zoomDelta;\n } else {\n range.min = this.options.zoom.limit[0];\n range.max = this.options.zoom.limit[1];\n }\n return range;\n }\n /**\n * Turns on marker animations\n * @private\n */\n enableMovingElementsAnimation(): void {\n $(this.containers.map).removeClass(\n \"no-transitions-markers no-transitions-labels no-transitions-bubbles\"\n );\n }\n /**\n * Turns off marker animations\n * @private\n */\n disableMovingElementsAnimation(): void {\n $(this.containers.map).addClass(\n \"no-transitions-markers no-transitions-labels no-transitions-bubbles\"\n );\n }\n /**\n * Event handler that clusterizes markers on zoom\n * @private\n */\n\n clusterizeOnZoom(): void {\n if (this.options.googleMaps.on && this.googleMaps.map && this.zoomDelta) {\n this.zoomLevel = this.googleMaps.map.getZoom() - this.zoomDelta;\n }\n this.events.trigger(\"zoom\");\n this.clusterizeMarkers(true);\n }\n /**\n * Delays method execution.\n * For example, it can be used in search input fields to prevent sending\n * an ajax request on each key press.\n * @param {function} method\n * @param {number} delay\n * @param {object} scope\n * @param {array} params\n * @private\n */\n throttle(method: (params: any) => void, delay: number, scope: any, params?: any): void {\n // @ts-ignore\n clearTimeout(method._tId);\n // @ts-ignore\n method._tId = setTimeout(function () {\n method.apply(scope, params);\n }, delay);\n }\n /**\n * Sets SVG viewBox by Google Maps bounds.\n * Used to overlay SVG map on Google Map.\n */\n setViewBoxByGoogleMapBounds(): void {\n const googleMapBounds = this.googleMaps.map.getBounds();\n if (!googleMapBounds) return;\n const googleMapBoundsJSON = googleMapBounds.toJSON();\n\n if (googleMapBoundsJSON.west == -180 && googleMapBoundsJSON.east == 180) {\n const center = this.googleMaps.map.getCenter().toJSON();\n }\n const ne = new GeoPoint(\n googleMapBounds.getNorthEast().lat(),\n googleMapBounds.getNorthEast().lng()\n );\n const sw = new GeoPoint(\n googleMapBounds.getSouthWest().lat(),\n googleMapBounds.getSouthWest().lng()\n );\n\n const xyNE = this.converter.convertGeoToSVG(ne);\n const xySW = this.converter.convertGeoToSVG(sw);\n\n // Check if map is on border between 180/-180 longitude\n if (xyNE.x < xySW.y) {\n const mapPointsWidth =\n (this.svgDefault.viewBox.width / this.converter.mapLonDelta) * 360;\n xySW.x = -(mapPointsWidth - xySW.y);\n }\n\n const width = xyNE.x - xySW.x;\n const height = xySW.y - xyNE.y;\n const viewBox = new ViewBox(xySW.x, xyNE.y, width, height);\n this.setViewBox(viewBox);\n }\n /**\n * Redraws the map.\n * Must be called when the map is shown after being hidden.\n */\n redraw(): void {\n this.disableAnimation();\n if (MapSVG.browser.ie) {\n $(this.containers.svg).css({ height: this.svgDefault.viewBox.height });\n }\n\n if (this.options.googleMaps.on && this.googleMaps.map) {\n // var center = this.googleMaps.map.getCenter();\n google.maps.event.trigger(this.googleMaps.map, \"resize\");\n // this.googleMaps.map.setCenter(center);\n // this.setViewBoxByGoogleMapBounds();\n } else {\n this.setViewBox(this.viewBox);\n }\n $(this.containers.popover) &&\n $(this.containers.popover).css({\n \"max-height\":\n (this.options.popovers.maxHeight * $(this.containers.wrap).outerHeight()) /\n 100 +\n \"px\",\n });\n if (this.controllers && this.controllers.directory) {\n this.controllers.directory.updateTopShift();\n this.controllers.directory.updateScroll();\n }\n this.movingItemsAdjustScreenPosition();\n this.adjustStrokes();\n this.enableAnimation();\n }\n\n /**\n * Sets map size.\n * Can accept both or just 1 parameter - width or height. The missing parameter will be calcualted.\n * @param {number} width\n * @param {number} height\n * @param {boolean} responsive\n * @returns {number[]} - [width, height]\n */\n setSize(width: number, height: number, responsive?: boolean): void {\n // Convert strings to numbers\n this.options.width = width;\n this.options.height = height;\n this.options.responsive =\n responsive != null && responsive != undefined\n ? MapSVG.parseBoolean(responsive)\n : this.options.responsive;\n\n // Calculate width and height\n if (!this.options.width && !this.options.height) {\n this.options.width = this.svgDefault.width;\n this.options.height = this.svgDefault.height;\n } else if (!this.options.width && this.options.height) {\n this.options.width =\n (this.options.height * this.svgDefault.width) / this.svgDefault.height;\n } else if (this.options.width && !this.options.height) {\n this.options.height =\n (this.options.width * this.svgDefault.height) / this.svgDefault.width;\n }\n\n this.whRatio = this.options.width / this.options.height;\n this.scale = this.getScale();\n\n this.setResponsive(responsive);\n\n if (this.options.choropleth.on && this.options.choropleth.bubbleMode) {\n this.redrawBubbles();\n }\n\n this.movingItemsAdjustScreenPosition();\n }\n /**\n * Sets map responsiveness on/off. When map is responsive, it takes the full width of the parent container.\n * @param {bool} on\n */\n setResponsive(on: boolean): void {\n on = on != undefined ? MapSVG.parseBoolean(on) : this.options.responsive;\n\n $(this.containers.map).css({\n width: \"100%\",\n height: \"0\",\n \"padding-bottom\": (this.viewBox.height * 100) / this.viewBox.width + \"%\",\n });\n if (on) {\n $(this.containers.wrap).css({\n width: \"100%\",\n height: \"auto\",\n });\n } else {\n $(this.containers.wrap).css({\n width: this.options.width + \"px\",\n height: this.options.height + \"px\",\n });\n }\n $.extend(true, this.options, { responsive: on });\n\n if (!this.resizeSensor) {\n this.resizeSensor = new ResizeSensor(this.containers.map, () => {\n this.redraw();\n });\n }\n\n this.redraw();\n }\n /**\n * Sets map scroll options.\n * @param {object} options - scroll options\n * @param {bool} skipEvents - used by Map Editor to prevent re-setting event handlers.\n * @example\n * mapsvg.setScroll({\n * on: true,\n * limit: false // limit scroll to map bounds\n * });\n */\n setScroll(options, skipEvents): void {\n options.on != undefined && (options.on = MapSVG.parseBoolean(options.on));\n options.limit != undefined && (options.limit = MapSVG.parseBoolean(options.limit));\n $.extend(true, this.options, { scroll: options });\n !skipEvents && this.setEventHandlers();\n }\n /**\n * Sets map zoom options.\n * @param {object} options - zoom options\n * @example\n * mapsvg.setZoom({\n * on: true,\n * mousewheel: true,\n * limit: [-5,10], // allow -5 zoom steps back and +20 zoom steps up from initial position.\n * });\n */\n setZoom(options): void {\n options = options || {};\n options.on != undefined && (options.on = MapSVG.parseBoolean(options.on));\n options.fingers != undefined && (options.fingers = MapSVG.parseBoolean(options.fingers));\n options.mousewheel != undefined &&\n (options.mousewheel = MapSVG.parseBoolean(options.mousewheel));\n\n // delta = 1.2 changed to delta = 2 since introducing Google Maps + smooth zoom\n options.delta = 2;\n\n // options.delta && (options.delta = parseFloat(options.delta));\n\n if (options.limit) {\n if (typeof options.limit == \"string\") options.limit = options.limit.split(\";\");\n options.limit = [parseInt(options.limit[0]), parseInt(options.limit[1])];\n }\n if (!this.zoomLevels) {\n this.setZoomLevels();\n }\n\n $.extend(true, this.options, { zoom: options });\n //(options.buttons && options.buttons.on) && (options.buttons.on = MapSVG.parseBoolean(options.buttons.on));\n $(this.containers.scrollpaneWrap).off(\"wheel.mapsvg\");\n\n if (this.options.zoom.mousewheel) {\n // var lastZoomTime = 0;\n // var zoomTimeDelta = 0;\n\n if (MapSVG.browser.firefox) {\n this.firefoxScroll = { insideIframe: false, scrollX: 0, scrollY: 0 };\n\n $(this.containers.scrollpaneWrap)\n .on(\"mouseenter\", () => {\n this.firefoxScroll.insideIframe = true;\n this.firefoxScroll.scrollX = window.scrollX;\n this.firefoxScroll.scrollY = window.scrollY;\n })\n .on(\"mouseleave\", () => {\n this.firefoxScroll.insideIframe = false;\n });\n\n $(document).scroll(() => {\n if (this.firefoxScroll.insideIframe)\n window.scrollTo(this.firefoxScroll.scrollX, this.firefoxScroll.scrollY);\n });\n }\n\n $(this.containers.scrollpaneWrap).on(\"wheel.mapsvg\", (event: JQuery.MouseEventBase) => {\n event.preventDefault();\n this.mouseWheelZoom(event);\n // this.throttle(this.mouseWheelZoom, 500, this, [event]);\n return false;\n });\n $(this.layers.markers).on(\"wheel.mapsvg\", (event: JQuery.MouseEventBase) => {\n event.preventDefault();\n this.mouseWheelZoom(event);\n return false;\n });\n }\n this.canZoom = true;\n }\n\n mouseWheelZoom(event: JQuery.MouseEventBase): void {\n event.preventDefault();\n // @ts-ignore - doesn't recognize .deltaY\n const d = Math.sign(-event.originalEvent.deltaY);\n const center = this.getSvgPointAtClick(event.originalEvent);\n d > 0 ? this.zoomIn(center) : this.zoomOut(center);\n }\n\n /**\n * Sets map control buttons.\n * @param {object} options - control button options\n * @example\n * mapsvg.setControls({\n * location: 'right',\n * zoom: true,\n * zoomReset: true,\n * userLocation: true,\n * previousMap: true\n * });\n */\n setControls(options): void {\n options = options || {};\n $.extend(true, this.options, { controls: options });\n this.options.controls.zoom = MapSVG.parseBoolean(this.options.controls.zoom);\n this.options.controls.zoomReset = MapSVG.parseBoolean(this.options.controls.zoomReset);\n this.options.controls.userLocation = MapSVG.parseBoolean(\n this.options.controls.userLocation\n );\n this.options.controls.previousMap = MapSVG.parseBoolean(this.options.controls.previousMap);\n\n const loc = this.options.controls.location || \"right\";\n\n if (!this.containers.controls) {\n const buttons = $(\"
\").addClass(\"mapsvg-buttons\");\n\n const zoomGroup = $(\"
\").addClass(\"mapsvg-btn-group\").appendTo(buttons);\n const zoomIn = $(\"
\").addClass(\"mapsvg-btn-map mapsvg-in\");\n\n zoomIn.on(\"touchend click\", (e) => {\n if (e.cancelable) {\n e.preventDefault();\n }\n e.stopPropagation();\n this.zoomIn();\n });\n\n const zoomOut = $(\"
\").addClass(\"mapsvg-btn-map mapsvg-out\");\n zoomOut.on(\"touchend click\", (e) => {\n if (e.cancelable) {\n e.preventDefault();\n }\n e.stopPropagation();\n this.zoomOut();\n });\n zoomGroup.append(zoomIn).append(zoomOut);\n\n const location = $(\"
\").addClass(\"mapsvg-btn-map mapsvg-btn-location\");\n location.on(\"touchend click\", (e) => {\n if (e.cancelable) {\n e.preventDefault();\n }\n e.stopPropagation();\n this.showUserLocation((location) => {\n if (this.options.scroll.on) {\n this.centerOn(location.marker);\n }\n });\n });\n\n const userLocationIcon =\n '';\n location.html(userLocationIcon);\n\n const locationGroup = $(\"
\").addClass(\"mapsvg-btn-group\").appendTo(buttons);\n locationGroup.append(location);\n\n const zoomResetIcon =\n '';\n const zoomResetButton = $(\"
\")\n .html(zoomResetIcon)\n .addClass(\"mapsvg-btn-map mapsvg-btn-zoom-reset\");\n zoomResetButton.on(\"touchend click\", (e) => {\n if (e.cancelable) {\n e.preventDefault();\n }\n e.stopPropagation();\n this.viewBoxReset(true);\n });\n const zoomResetGroup = $(\"
\").addClass(\"mapsvg-btn-group\").appendTo(buttons);\n zoomResetGroup.append(zoomResetButton);\n\n const previousMapIcon =\n '' +\n 'image/svg+xml ' +\n ' ';\n const previousMapButton = $(\"
\")\n .html(previousMapIcon)\n .addClass(\"mapsvg-btn-map mapsvg-btn-previous-map\");\n previousMapButton.on(\"touchend click\", (e) => {\n if (e.cancelable) {\n e.preventDefault();\n }\n e.stopPropagation();\n this.loadPreviousMap();\n });\n const previousMapGroup = $(\"
\").addClass(\"mapsvg-btn-group\").appendTo(buttons);\n previousMapGroup.append(previousMapButton);\n\n this.containers.controls = buttons[0];\n this.controls = {\n zoom: zoomGroup[0],\n userLocation: locationGroup[0],\n zoomReset: zoomResetGroup[0],\n previousMap: previousMapGroup[0],\n };\n $(this.containers.map).append($(this.containers.controls));\n }\n\n $(this.controls.zoom).toggle(this.options.controls.zoom);\n $(this.controls.userLocation).toggle(this.options.controls.userLocation);\n $(this.controls.zoomReset).toggle(this.options.controls.zoomReset);\n $(this.controls.previousMap).toggle(\n this.options.controls.previousMap && this.options.previousMapsIds.length > 0\n );\n\n $(this.containers.controls).removeClass(\"left\");\n $(this.containers.controls).removeClass(\"right\");\n (loc == \"right\" && $(this.containers.controls).addClass(\"right\")) ||\n (loc == \"left\" && $(this.containers.controls).addClass(\"left\"));\n }\n /**\n * Calcualtes map viewBox parameter for each zoom level\n * @private\n */\n setZoomLevels(): void {\n if (!this.zoomLevels) {\n this.zoomLevels = new ArrayIndexed(\"zoomLevel\");\n } else {\n this.zoomLevels.clear();\n }\n\n for (let i = -20; i < 0; i++) {\n const _scale = 1 / Math.pow(this.options.zoom.delta, Math.abs(i));\n this.zoomLevels.push({\n zoomLevel: i,\n _scale: _scale,\n viewBox: new ViewBox(\n 0,\n 0,\n this._viewBox.width / _scale,\n this._viewBox.height / _scale\n ),\n });\n }\n\n for (let z = 0; z <= 20; z++) {\n const _scale = Math.pow(this.options.zoom.delta, Math.abs(z));\n this.zoomLevels.push({\n zoomLevel: z,\n _scale: _scale,\n viewBox: new ViewBox(\n 0,\n 0,\n this._viewBox.width / _scale,\n this._viewBox.height / _scale\n ),\n });\n }\n }\n /**\n * Sets mouse pointer cursor style on hover on regions / markers.\n * @param {string} type - \"pointer\" or \"default\"\n */\n setCursor(type): void {\n type = type == \"pointer\" ? \"pointer\" : \"default\";\n this.options.cursor = type;\n if (type == \"pointer\") $(this.containers.map).addClass(\"mapsvg-cursor-pointer\");\n else $(this.containers.map).removeClass(\"mapsvg-cursor-pointer\");\n }\n /**\n * Enables/disables \"multiselect\" option that allows to select multiple regions.\n * @param {boolean} on\n * @param {boolean} deselect - If true, deselects currently selected Regions\n */\n setMultiSelect(on: boolean, deselect?: boolean) {\n this.options.multiSelect = MapSVG.parseBoolean(on);\n if (deselect !== false) this.deselectAllRegions();\n }\n /**\n * Sets choropleth map options\n * @param {object} options\n *\n * @example\n * mapsvg.setChoropleth({\n * on: true,\n * colors: {\n * high: \"#FF0000\",\n * low: \"#00FF00\"\n * }\n * labels: {\n * high: \"high\",\n * low: \"low\"\n * }\n * });\n */\n _new_setChoropleth(options?: any) {\n options = options || this.options.choropleth;\n options.on != undefined && (options.on = MapSVG.parseBoolean(options.on));\n\n if (\n typeof options.coloring === \"undefined\" ||\n typeof options.coloring.palette === \"undefined\" ||\n typeof options.coloring.palette.colors === \"undefined\"\n ) {\n if (\n typeof options.sourceFieldSelect === \"undefined\" ||\n typeof options.sourceFieldSelect.variants === \"undefined\"\n ) {\n $.extend(true, this.options.choropleth, options);\n } else {\n this.options.choropleth.sourceFieldSelect.variants =\n options.sourceFieldSelect.variants;\n }\n } else {\n const paletteColorsIndexes = Object.keys(options.coloring.palette.colors);\n if (\n paletteColorsIndexes.length > 1 ||\n (paletteColorsIndexes[0] == \"0\" &&\n Object.keys(options.coloring.palette.colors[0]).length > 1)\n ) {\n this.options.choropleth.coloring.palette.colors = options.coloring.palette.colors;\n } else {\n const paletteColorIndex = Object.keys(options.coloring.palette.colors)[0];\n $.extend(\n true,\n this.options.choropleth.coloring.palette.colors[paletteColorIndex],\n options.coloring.palette.colors[paletteColorIndex]\n );\n }\n }\n\n this.updateChoroplethMinMax();\n\n if (\n this.options.choropleth.on &&\n this.options.choropleth.sourceFieldSelect.on &&\n this.options.choropleth.sourceFieldSelect.variants\n ) {\n if (!this.containers.choroplethSourceSelect) {\n const sourceSelectOptions = [];\n this.options.choropleth.sourceFieldSelect.variants.forEach((variant) => {\n sourceSelectOptions.push(\n $(\n '\"\n )\n );\n });\n\n this.containers.choroplethSourceSelect = {\n container: $('
')[0],\n select: $(\n ''\n )[0],\n options: sourceSelectOptions,\n };\n\n $(this.containers.choroplethSourceSelect.select).append(\n this.containers.choroplethSourceSelect.options\n );\n //$(this.containers.choroplethSourceSelect.container).append($(this.containers.choroplethSourceSelect.label));\n $(this.containers.choroplethSourceSelect.container).append(\n $(this.containers.choroplethSourceSelect.select)\n );\n\n $(this.containers.map).append($(this.containers.choroplethSourceSelect.container));\n\n $(this.containers.choroplethSourceSelect.select).mselect2();\n\n //select2 lib bug workaround. Should be on('change'...)\n $(this.containers.choroplethSourceSelect.select)\n .mselect2()\n .on(\"select2:select select2:unselecting\", (e) => {\n if (e.cancelable) {\n e.preventDefault();\n }\n e.stopPropagation();\n this.setChoropleth({ sourceField: $(e.target).mselect2().val() });\n });\n } else {\n $(this.containers.choroplethSourceSelect.select).mselect2(\"destroy\");\n $(this.containers.choroplethSourceSelect.select).find(\"option\").remove();\n this.containers.choroplethSourceSelect.options = [];\n this.options.choropleth.sourceFieldSelect.variants.forEach((variant) => {\n this.containers.choroplethSourceSelect.options.push(\n $(\n '\"\n )[0]\n );\n });\n $(this.containers.choroplethSourceSelect.select).append(\n this.containers.choroplethSourceSelect.options\n );\n $(this.containers.choroplethSourceSelect.select).mselect2({ width: \"100%\" });\n }\n }\n\n if (\n (!this.options.choropleth.on || !this.options.choropleth.sourceFieldSelect.on) &&\n this.containers.choroplethSourceSelect &&\n $(this.containers.choroplethSourceSelect.container).is(\":visible\")\n ) {\n $(this.containers.choroplethSourceSelect.container).hide();\n } else if (\n this.options.choropleth.on &&\n this.options.choropleth.sourceFieldSelect.on &&\n this.containers.choroplethSourceSelect &&\n !$(this.containers.choroplethSourceSelect.container).is(\":visible\")\n ) {\n $(this.containers.choroplethSourceSelect.container).show();\n }\n\n $(this.containers.map).find(\".mapsvg-choropleth-legend\").remove();\n\n if (this.options.choropleth.on && this.options.choropleth.coloring.legend.on) {\n const legend = this.options.choropleth.coloring.legend;\n let coloring = \"\";\n\n if (this.options.choropleth.coloring.mode === \"gradient\") {\n //Gradient mode\n coloring +=\n '
' +\n this.options.choropleth.coloring.noData.description +\n \"
\";\n\n let legendGradient = \"\";\n\n for (let chunkIdx = 1; chunkIdx < 5; chunkIdx++) {\n legendGradient +=\n '
' +\n ((this.options.choropleth.coloring.gradient.values.maxAdjusted * chunkIdx) /\n 5 +\n this.options.choropleth.coloring.gradient.values.min) +\n \"
\";\n }\n\n coloring +=\n '
' +\n legendGradient +\n \"
\";\n } else {\n //Palette mode\n\n coloring +=\n '
' +\n '
' +\n '
' +\n this.options.choropleth.coloring.noData.description +\n \"
\" +\n \"
\";\n\n coloring +=\n '
' +\n '
' +\n '
' +\n this.options.choropleth.coloring.palette.outOfRange.description +\n \"
\" +\n \"
\";\n\n const paletteColors = this.options.choropleth.coloring.palette.colors;\n\n paletteColors.forEach((paletteColor, idx) => {\n let paletteColorElementText = \"\";\n if (paletteColor.description) {\n paletteColorElementText = paletteColor.description;\n } else {\n if (idx === 0 && !paletteColor.valueFrom && paletteColor.valueFrom !== 0) {\n if (legend.layout === \"vertical\") {\n paletteColorElementText = \"Less then \" + paletteColor.valueTo;\n } else {\n paletteColorElementText = \"< \" + paletteColor.valueTo;\n }\n } else if (idx === paletteColors.length - 1 && !paletteColor.valueTo) {\n if (legend.layout === \"vertical\") {\n paletteColorElementText = paletteColor.valueFrom + \" or more\";\n } else {\n paletteColorElementText = paletteColor.valueFrom + \" <\";\n }\n } else {\n paletteColorElementText =\n paletteColor.valueFrom + \" ≤ \" + paletteColor.valueTo;\n }\n }\n\n coloring +=\n '
' +\n '
' +\n '
' +\n paletteColorElementText +\n \"
\" +\n \"
\";\n });\n }\n\n this.containers.legend = {\n title: $(\n '
' + legend.title + \"
\"\n )[0],\n text: $('
' + legend.text + \"
\")[0],\n coloring: $(\n '
' +\n coloring +\n \"
\"\n )[0],\n description: $(\n '
' +\n legend.description +\n \"
\"\n )[0],\n container: $(\"
\").addClass(\n \"mapsvg-choropleth-legend mapsvg-choropleth-legend-\" +\n legend.layout +\n \" mapsvg-choropleth-legend-container-\" +\n legend.container\n )[0],\n };\n\n $(this.containers.legend.container)\n .append(this.containers.legend.title)\n .append(this.containers.legend.text)\n .append(this.containers.legend.coloring)\n .append(this.containers.legend.description);\n $(this.containers.map).append(this.containers.legend.container);\n\n this.setChoroplethLegendCSS();\n\n this.regionsRepository.events.on(\"updated\", () => {\n this.redrawChoropleth();\n });\n\n this.objectsRepository.events.on(\"updated\", () => {\n this.redrawChoropleth();\n });\n }\n\n if (this.options.choropleth.on && this.options.choropleth.coloring.mode === \"gradient\") {\n const colors = this.options.choropleth.coloring.gradient.colors;\n if (colors) {\n colors.lowRGB = tinycolor(colors.low).toRgb();\n colors.highRGB = tinycolor(colors.high).toRgb();\n colors.diffRGB = {\n r: colors.highRGB.r - colors.lowRGB.r,\n g: colors.highRGB.g - colors.lowRGB.g,\n b: colors.highRGB.b - colors.lowRGB.b,\n a: colors.highRGB.a - colors.lowRGB.a,\n };\n this.containers.legend && this.setChoroplethLegendCSS();\n }\n }\n\n this.redrawChoropleth();\n }\n /**\n * Redraws choropleth map colors\n * @private\n */\n redrawChoropleth() {\n this.updateChoroplethMinMax();\n this.redrawBubbles();\n this.regionsRedrawColors();\n }\n /**\n * Updates min/max values of choropleth fields\n * @private\n */\n updateChoroplethMinMax() {\n if (this.options.choropleth.on) {\n const gradient = this.options.choropleth.coloring.gradient,\n values = [];\n\n gradient.values.min = 0;\n gradient.values.max = null;\n\n if (this.options.choropleth.source === \"regions\") {\n this.regions.forEach((region) => {\n const choropleth =\n region.data && region.data[this.options.choropleth.sourceField];\n choropleth != undefined && choropleth !== \"\" && values.push(choropleth);\n });\n } else {\n this.objectsRepository.objects.forEach((object) => {\n const choropleth = object[this.options.choropleth.sourceField];\n choropleth != undefined && choropleth !== \"\" && values.push(choropleth);\n });\n }\n\n if (values.length > 0) {\n gradient.values.min = Math.min.apply(null, values);\n gradient.values.max = Math.max.apply(null, values);\n gradient.values.maxAdjusted = gradient.values.max - gradient.values.min;\n }\n }\n }\n /**\n * Sets gradient for choropleth map\n * @private\n */\n setChoroplethLegendCSS(): void {\n const gradient = this.options.choropleth.coloring.gradient,\n legend = this.options.choropleth.coloring.legend,\n noData = this.options.choropleth.coloring.noData,\n outOfRange = this.options.choropleth.coloring.palette.outOfRange;\n\n $(\".mapsvg-choropleth-legend\").css({\n width: legend.width,\n height: legend.height,\n });\n\n if (this.options.choropleth.coloring.mode === \"gradient\") {\n if (legend.layout === \"horizontal\") {\n // horizontal legend\n $(\n \".mapsvg-choropleth-legend-horizontal .mapsvg-choropleth-legend-gradient-colors\"\n ).css({\n background:\n \"linear-gradient(to right,\" +\n gradient.colors.low +\n \" 1%,\" +\n gradient.colors.high +\n \" 100%)\",\n });\n } else {\n // vertical legend\n $(\n \".mapsvg-choropleth-legend-vertical .mapsvg-choropleth-legend-gradient-colors\"\n ).css({\n background:\n \"linear-gradient(to bottom,\" +\n gradient.colors.low +\n \" 1%,\" +\n gradient.colors.high +\n \" 100%)\",\n });\n }\n\n $(\".mapsvg-choropleth-legend-gradient-no-data\").css({\n \"background-color\": noData.color,\n });\n } else {\n const paletteColors = this.options.choropleth.coloring.palette.colors;\n\n paletteColors.forEach(function (paletteColor, idx) {\n $(\n '.mapsvg-choropleth-legend-palette-color-wrap[data-idx=\"' +\n idx +\n '\"] .mapsvg-choropleth-legend-palette-color'\n ).css({\n \"background-color\": paletteColor.color,\n });\n });\n\n $(\n '.mapsvg-choropleth-legend-palette-color-wrap[data-idx=\"no-data\"] .mapsvg-choropleth-legend-palette-color'\n ).css({\n \"background-color\": noData.color,\n });\n\n $(\n '.mapsvg-choropleth-legend-palette-color-wrap[data-idx=\"out-of-range\"] .mapsvg-choropleth-legend-palette-color'\n ).css({\n \"background-color\": outOfRange.color,\n });\n }\n }\n /**\n * Sets custom map CSS.\n * CSS is added as tag in the page
\n * @param {string} css\n * @private\n */\n setCss(css?: string): void {\n this.options.css =\n css || (this.options.css ? this.options.css.replace(/%id%/g, \"\" + this.id) : \"\");\n this.liveCss = this.liveCss || $(\"\").appendTo(\"head\")[0];\n $(this.liveCss).html(this.options.css);\n }\n /**\n * Sets filter options\n * @param {object} options\n * @example\n * mapsvg.setFilters{{\n * on: true,\n * location: \"leftSidebar\"\n * }};\n */\n setFilters(options?: { [key: string]: any }): void {\n options = options || this.options.filters;\n options.on != undefined && (options.on = MapSVG.parseBoolean(options.on));\n options.hide != undefined && (options.hide = MapSVG.parseBoolean(options.hide));\n $.extend(true, this.options, { filters: options });\n\n const scrollable = false;\n\n if (\n !MapSVG.googleMapsApiLoaded &&\n this.options.filters.on &&\n this.filtersSchema.getField(\"distance\")\n ) {\n this.loadGoogleMapsAPI(\n () => {\n return 1;\n },\n () => {\n return 1;\n }\n );\n }\n\n if (\n [\"leftSidebar\", \"rightSidebar\", \"header\", \"footer\", \"custom\", \"map\"].indexOf(\n this.options.filters.location\n ) === -1\n ) {\n this.options.filters.location = \"leftSidebar\";\n }\n\n if (this.options.filters.on) {\n if (this.formBuilder) {\n this.formBuilder.destroy();\n }\n\n if (!this.containers.filters) {\n this.containers.filters = $('
')[0];\n } else {\n $(this.containers.filters).empty();\n $(this.containers.filters).show();\n }\n\n $(this.containers.filters).css({\n \"background-color\": this.options.colors.directorySearch,\n });\n\n if ($(this.containers.filtersModal)) {\n $(this.containers.filtersModal).css({ width: this.options.filters.width });\n }\n\n if (this.options.filters.location === \"custom\") {\n $(this.containers.filters)\n .removeClass(\"mapsvg-filter-container-custom\")\n .addClass(\"mapsvg-filter-container-custom\");\n if ($(\"#\" + this.options.filters.containerId).length) {\n $(\"#\" + this.options.filters.containerId).append(this.containers.filters);\n } else {\n $(this.containers.filters).hide();\n console.error(\n \"MapSVG: filter container #\" +\n this.options.filters.containerId +\n \" does not exists\"\n );\n }\n } else {\n if (MapSVG.isPhone) {\n $(this.containers.header).append($(this.containers.filters));\n this.setContainers({ header: { on: true } });\n } else {\n const location = MapSVG.isPhone ? \"header\" : this.options.filters.location;\n if (\n this.options.menu.on &&\n this.controllers.directory &&\n this.options.menu.location === this.options.filters.location\n ) {\n $(this.controllers.directory.containers.view)\n .find(\".mapsvg-directory-filter-wrap\")\n .append($(this.containers.filters));\n this.controllers.directory.updateTopShift();\n } else {\n $(this.containers[location]).append($(this.containers.filters));\n this.controllers.directory && this.controllers.directory.updateTopShift();\n }\n }\n }\n\n this.loadFiltersController(this.containers.filters, false);\n\n this.updateFiltersState();\n } else {\n if ($(this.containers.filters)) {\n $(this.containers.filters).empty();\n $(this.containers.filters).hide();\n }\n }\n\n if (\n this.options.menu.on &&\n this.controllers.directory &&\n this.options.menu.location === this.options.filters.location\n ) {\n this.controllers.directory.updateTopShift();\n }\n }\n /**\n * Updates filters in drop-downs. For example, when region is clicked and data is filtered -\n * it selects corresponding region in the drop-down filter\n * @private\n */\n updateFiltersState() {\n if (this.options.filters && this.options.filters.on && this.controllers.filters) {\n //this.controllers.filters.reset();\n this.controllers.filters.update(this.objectsRepository.query);\n this.updateFilterTags();\n }\n }\n\n private setGlobalDistanceFilter(): void {\n if (\n this.objectsRepository &&\n this.objectsRepository.query.filters &&\n this.objectsRepository.query.filters.distance\n ) {\n const dist = this.objectsRepository.query.filters.distance;\n MapSVG.distanceSearch = this.objectsRepository.query.filters.distance;\n } else {\n MapSVG.distanceSearch = null;\n }\n }\n\n private updateFilterTags() {\n $(this.containers.filterTags) && $(this.containers.filterTags).empty();\n\n // TODO get field difference\n\n for (const field_name in this.objectsRepository.query.filters) {\n let field_value = this.objectsRepository.query.filters[field_name];\n let _field_name = field_name;\n const filterField = this.filtersSchema.getField(_field_name);\n\n if (field_name == \"regions\") {\n // check if there is such filter. If there is then change its value\n // if there isn't then add a tag with close button\n _field_name = \"\";\n field_value = field_value.region_ids.map((id) => this.getRegion(id).title);\n } else {\n _field_name = filterField && filterField.label;\n }\n\n if (field_name !== \"distance\") {\n if (!this.containers.filterTags) {\n this.containers.filterTags = $('
')[0];\n // TODO If filtersmodeal on then dont append\n if ($(this.containers.filters)) {\n // $(this.containers.filters).append($(this.containers.filterTags));\n } else {\n if (this.options.menu.on && this.controllers.directory) {\n $(this.controllers.directory.containers.toolbar).append(\n this.containers.filterTags\n );\n this.controllers.directory.updateTopShift();\n } else {\n $(this.containers.map).append(this.containers.filterTags);\n if (this.options.zoom.buttons.on) {\n if (this.options.layersControl.on) {\n if (this.options.layersControl.position == \"top-left\") {\n $(this.containers.filterTags).css({\n right: 0,\n bottom: 0,\n });\n } else {\n $(this.containers.filterTags).css({\n bottom: 0,\n });\n }\n } else {\n if (this.options.zoom.buttons.location == \"left\") {\n $(this.containers.filterTags).css({\n right: 0,\n });\n }\n }\n }\n }\n }\n\n $(this.containers.filterTags).on(\n \"click\",\n \".mapsvg-filter-delete\",\n (e: JQuery.MouseEventBase) => {\n const filterField = $(e.target).data(\"filter\");\n $(e.target).parent().remove();\n this.objectsRepository.query.removeFilter(filterField);\n this.deselectAllRegions();\n this.loadDataObjects();\n }\n );\n }\n $(this.containers.filterTags).append(\n '
' +\n (_field_name ? _field_name + \": \" : \"\") +\n field_value +\n ' ×
'\n );\n }\n }\n }\n\n /**\n * Sets container options: leftSidebar, rightSidebar, header, footer.\n * @param {object} options\n *\n * @example\n * mapsvg.setContainers({\n * leftSidebar: {\n * on: true,\n * width: \"300px\"\n * }\n * });\n */\n setContainers(options) {\n const _this = this;\n\n if (!this.containersCreated) {\n this.containers.wrapAll = document.createElement(\"div\");\n this.containers.wrapAll.classList.add(\"mapsvg-wrap-all\");\n this.containers.wrapAll.id = \"mapsvg-map-\" + this.id;\n this.containers.wrapAll.setAttribute(\"data-map-id\", this.id ? this.id.toString() : \"\");\n\n this.containers.wrap = document.createElement(\"div\");\n this.containers.wrap.classList.add(\"mapsvg-wrap\");\n\n this.containers.mapContainer = document.createElement(\"div\");\n this.containers.mapContainer.classList.add(\"mapsvg-map-container\");\n\n this.containers.leftSidebar = document.createElement(\"div\");\n this.containers.leftSidebar.className =\n \"mapsvg-sidebar mapsvg-top-container mapsvg-sidebar-left\";\n this.containers.rightSidebar = document.createElement(\"div\");\n this.containers.rightSidebar.className =\n \"mapsvg-sidebar mapsvg-top-container mapsvg-sidebar-right\";\n\n this.containers.header = document.createElement(\"div\");\n this.containers.header.className = \"mapsvg-header mapsvg-top-container\";\n this.containers.footer = document.createElement(\"div\");\n this.containers.footer.className = \"mapsvg-footer mapsvg-top-container\";\n\n _this.containers.wrapAll = $('
')\n .attr(\"id\", \"mapsvg-map-\" + this.id)\n .attr(\"data-map-id\", this.id)[0];\n _this.containers.wrap = $('
')[0];\n _this.containers.mapContainer = $('
')[0];\n _this.containers.leftSidebar = $(\n '
'\n )[0];\n _this.containers.rightSidebar = $(\n '
'\n )[0];\n _this.containers.header = $(\n '
'\n )[0];\n _this.containers.footer = $(\n ''\n )[0];\n\n $(_this.containers.wrapAll).insertBefore(_this.containers.map);\n $(_this.containers.wrapAll).append(_this.containers.header);\n $(_this.containers.wrapAll).append(_this.containers.wrap);\n $(_this.containers.wrapAll).append(_this.containers.footer);\n\n $(_this.containers.mapContainer).append(_this.containers.map);\n\n $(_this.containers.wrap).append(_this.containers.leftSidebar);\n $(_this.containers.wrap).append(_this.containers.mapContainer);\n $(_this.containers.wrap).append(_this.containers.rightSidebar);\n _this.containersCreated = true;\n }\n\n options = options || _this.options.containers || {};\n\n for (const contName in options) {\n if (options[contName].on !== undefined) {\n options[contName].on = MapSVG.parseBoolean(options[contName].on);\n }\n\n if (options[contName].width) {\n if (\n typeof options[contName].width != \"string\" ||\n (options[contName].width.indexOf(\"px\") === -1 &&\n options[contName].width.indexOf(\"%\") === -1 &&\n options[contName].width !== \"auto\")\n ) {\n options[contName].width = options[contName].width + \"px\";\n }\n $(_this.containers[contName]).css({ \"flex-basis\": options[contName].width });\n }\n if (options[contName].height) {\n if (\n typeof options[contName].height != \"string\" ||\n (options[contName].height.indexOf(\"px\") === -1 &&\n options[contName].height.indexOf(\"%\") === -1 &&\n options[contName].height !== \"auto\")\n ) {\n options[contName].height = options[contName].height + \"px\";\n }\n $(_this.containers[contName]).css({\n \"flex-basis\": options[contName].height,\n height: options[contName].height,\n });\n }\n\n $.extend(true, _this.options, { containers: options });\n\n let on = _this.options.containers[contName].on;\n\n if (\n MapSVG.isPhone &&\n _this.options.menu.hideOnMobile &&\n _this.options.menu.location === contName &&\n [\"leftSidebar\", \"rightSidebar\"].indexOf(contName) !== -1\n ) {\n on = false;\n } else if (\n MapSVG.isPhone &&\n _this.options.menu.location === \"custom\" &&\n [\"leftSidebar\", \"rightSidebar\"].indexOf(contName) !== -1\n ) {\n // hide sidebars on mobiles if there's no directory in there because filters are always moved to header (or custom) on mobiles\n on = false;\n $(_this.containers.wrapAll).addClass(\"mapsvg-hide-map-list-buttons\");\n } else if (\n MapSVG.isPhone &&\n !_this.options.menu.hideOnMobile &&\n _this.options.menu.location === contName &&\n [\"leftSidebar\", \"rightSidebar\"].indexOf(contName) !== -1\n ) {\n $(_this.containers.wrapAll).addClass(\"mapsvg-hide-map-list-buttons\");\n $(_this.containers.wrapAll).addClass(\"mapsvg-directory-visible\");\n }\n $(_this.containers[contName]).toggle(on);\n }\n\n _this.setDetailsView();\n }\n /**\n * Checks if container should be scrollable\n * @param {string} container - mapContainer / leftSidebar / rightSidebar / custom / header / footer\n * @returns {boolean}\n * @private\n */\n shouldBeScrollable(container) {\n const _this = this;\n\n switch (container) {\n case \"map\":\n case \"leftSidebar\":\n case \"rightSidebar\":\n return true;\n break;\n case \"custom\":\n return false;\n break;\n case \"header\":\n case \"footer\":\n if (\n _this.options.containers[container].height &&\n _this.options.containers[container].height !== \"auto\" &&\n _this.options.containers[container].height !== \"100%\"\n ) {\n return true;\n } else {\n return false;\n }\n break;\n default:\n return false;\n break;\n }\n }\n /**\n * Sets directory options.\n * @alias setMenu\n * @param {object} options\n * @returns {*|void}\n *\n * @example\n * mapsvg.setDirectory({\n * on: true,\n * container: \"leftSidebar\"\n * });\n */\n setDirectory(options) {\n return this.setMenu(options);\n }\n /**\n * Sets menu (directory) options\n * @param options\n * @private\n */\n setMenu(options?: { [key: string]: any }) {\n const _this = this;\n\n options = options || this.options.menu;\n options.on != undefined && (options.on = MapSVG.parseBoolean(options.on));\n options.search != undefined && (options.search = MapSVG.parseBoolean(options.search));\n options.showMapOnClick != undefined &&\n (options.showMapOnClick = MapSVG.parseBoolean(options.showMapOnClick));\n options.searchFallback != undefined &&\n (options.searchFallback = MapSVG.parseBoolean(options.searchFallback));\n options.customContainer != undefined &&\n (options.customContainer = MapSVG.parseBoolean(options.customContainer));\n\n $.extend(true, this.options, { menu: options });\n\n this.controllers = this.controllers || {};\n\n if (!this.containers.directory) {\n this.containers.directory = $('
')[0];\n }\n\n // If directory will be scrollable make it absolutely positioned, fill the parent container.\n $(this.containers.directory).toggleClass(\n \"flex\",\n this.shouldBeScrollable(this.options.menu.location)\n );\n\n if (this.options.menu.on) {\n if (!this.controllers.directory) {\n this.controllers.directory = new DirectoryController({\n container: this.containers.directory,\n template: this.options.templates.directory,\n mapsvg: this,\n repository:\n this.options.menu.source === \"regions\"\n ? this.regionsRepository\n : this.objectsRepository,\n scrollable: this.shouldBeScrollable(this.options.menu.location), //this.options.menu.location === 'leftSidebar' || this.options.menu.location === 'rightSidebar',\n // position: this.options.menu.position,\n // search: this.options.menu.search,\n events: {\n click: (e, regionOrObject, mapsvg) => {\n this.events.trigger(\"click.directoryItem\", this, [\n e,\n regionOrObject,\n mapsvg,\n ]);\n },\n mouseover: (e, regionOrObject, mapsvg) => {\n this.events.trigger(\"mouseover.directoryItem\", this, [\n e,\n regionOrObject,\n mapsvg,\n ]);\n },\n mouseout: (e, regionOrObject, mapsvg) => {\n this.events.trigger(\"mouseout.directoryItem\", this, [\n e,\n regionOrObject,\n mapsvg,\n ]);\n },\n },\n });\n this.controllers.directory._init();\n }\n if (options.source) {\n this.controllers.directory.repository =\n this.options.menu.source === \"regions\"\n ? this.regionsRepository\n : this.objectsRepository;\n }\n if (options.sortBy || options.sortDirection) {\n this.controllers.directory.repository.query.update({\n sort: [\n {\n field: this.options.menu.sortBy,\n order: this.options.menu.sortDirection,\n },\n ],\n });\n }\n\n this.setFilterOut();\n\n if (options.location) {\n this.controllers.directory.scrollable = this.shouldBeScrollable(\n this.options.menu.location\n );\n }\n\n let $container;\n if (MapSVG.isPhone && this.options.menu.hideOnMobile) {\n $container = $(this.containers.leftSidebar);\n } else {\n $container =\n this.options.menu.location !== \"custom\"\n ? $(this.containers[this.options.menu.location])\n : $(\"#\" + this.options.menu.containerId);\n }\n $container.append(this.containers.directory);\n\n if (this.options.colors.directory) {\n $(this.containers.directory).css({\n \"background-color\": this.options.colors.directory,\n });\n }\n this.setFilters();\n this.setTemplates({ directoryItem: this.options.templates.directoryItem });\n if (\n (this.options.menu.source === \"regions\" && this.regionsRepository.loaded) ||\n (this.options.menu.source === \"database\" && this.objectsRepository.loaded)\n ) {\n if (\n this.editMode &&\n (options.sortBy || options.sortDirection || options.filterout)\n ) {\n this.controllers.directory.repository.reload();\n }\n this.loadDirectory();\n }\n } else {\n this.controllers.directory && this.controllers.directory.destroy();\n this.controllers.directory = null;\n }\n }\n /**\n * Sets database options.\n * @param {object} options\n * @example\n * mapsvg.setDatabase({\n * pagination: {on: true, perpage: 30}\n * });\n */\n setDatabase(options) {\n options = options || this.options.database;\n\n if (options.pagination) {\n if (options.pagination.on != undefined) {\n options.pagination.on = MapSVG.parseBoolean(options.pagination.on);\n }\n if (options.pagination.perpage != undefined) {\n options.pagination.perpage = parseInt(options.pagination.perpage);\n }\n }\n $.extend(true, this.options, { database: options });\n if (options.pagination) {\n if (options.pagination.on !== undefined || options.pagination.perpage) {\n const query = new Query({\n perpage: this.options.database.pagination.on\n ? this.options.database.pagination.perpage\n : 0,\n });\n\n this.objectsRepository.find(query);\n } else {\n this.setPagination();\n }\n }\n }\n updateGoogleMapsMaxZoom(geoPoint: GeoPoint): void {\n this.googleMaps.maxZoomService.getMaxZoomAtLatLng(\n geoPoint,\n (result: google.maps.MaxZoomResult) => {\n if (result.status === \"OK\") {\n this.googleMaps.currentMaxZoom = result.zoom;\n }\n }\n );\n }\n /**\n * Sets Google Map options.\n * @param {object} options\n * @example\n * mapsvg.setGoogleMaps({\n * on: true,\n * type: \"terrain\"\n * });\n *\n * // Get Google Maps instance:\n * var gm = mapsvg.googleMaps.map;\n */\n setGoogleMaps(options?: any) {\n options = options || this.options.googleMaps;\n options.on != undefined && (options.on = MapSVG.parseBoolean(options.on));\n\n if (!this.googleMaps) {\n this.googleMaps = { loaded: false, initialized: false, map: null, overlay: null };\n }\n\n $.extend(true, this.options, { googleMaps: options });\n\n if (this.options.googleMaps.on) {\n $(this.containers.map).toggleClass(\"mapsvg-with-google-map\", true);\n if (!MapSVG.googleMapsApiLoaded) {\n this.loadGoogleMapsAPI(\n () => {\n this.setGoogleMaps();\n },\n () => {\n this.setGoogleMaps({ on: false });\n }\n );\n } else {\n if (!this.googleMaps.map) {\n this.containers.googleMaps = $(\n '
'\n ).prependTo(this.containers.map)[0];\n $(this.containers.googleMaps).css({\n position: \"absolute\",\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n \"z-index\": \"0\",\n });\n this.googleMaps.map = new google.maps.Map(this.containers.googleMaps, {\n mapTypeId: options.type,\n fullscreenControl: false,\n keyboardShortcuts: false,\n mapTypeControl: false,\n scaleControl: false,\n scrollwheel: false,\n streetViewControl: false,\n zoomControl: false,\n styles: options.styleJSON,\n tilt: 0,\n });\n let overlay;\n\n const southWest = new google.maps.LatLng(\n this.geoViewBox.sw.lat,\n this.geoViewBox.sw.lng\n );\n const northEast = new google.maps.LatLng(\n this.geoViewBox.ne.lat,\n this.geoViewBox.ne.lng\n );\n const bounds = new google.maps.LatLngBounds(southWest, northEast);\n\n this.googleMaps.overlay = this.createGoogleMapOverlay(\n bounds,\n this.googleMaps.map\n );\n\n let needToSetZoomLevels = false;\n\n if (!this.options.googleMaps.center || !this.options.googleMaps.zoom) {\n // var southWest = new google.maps.LatLng(this.geoViewBox.bottomLat, this.geoViewBox.leftLon);\n // var northEast = new google.maps.LatLng(this.geoViewBox.topLat, this.geoViewBox.rightLon);\n // var bounds = new google.maps.LatLngBounds(southWest,northEast);\n this.googleMaps.map.fitBounds(bounds, 0);\n needToSetZoomLevels = true;\n } else {\n this.googleMaps.map.setZoom(this.options.googleMaps.zoom);\n // this.options.googleMaps.center.lat = parseFloat(this.options.googleMaps.center.lat);\n // this.options.googleMaps.center.lng = parseFloat(this.options.googleMaps.center.lng);\n this.googleMaps.map.setCenter(this.options.googleMaps.center);\n }\n this.googleMaps.initialized = true;\n this.googleMaps.maxZoomService = new google.maps.MaxZoomService();\n\n this.googleMaps.map.addListener(\"idle\", () => {\n this.isZooming = false;\n });\n google.maps.event.addListenerOnce(this.googleMaps.map, \"idle\", () => {\n setTimeout(() => {\n $(this.containers.map).addClass(\"mapsvg-fade-in\");\n setTimeout(() => {\n $(this.containers.map).removeClass(\"mapsvg-google-map-loading\");\n $(this.containers.map).removeClass(\"mapsvg-fade-in\");\n // this.googleMaps.overlay.draw();\n if (\n !this.options.googleMaps.center ||\n !this.options.googleMaps.zoom\n ) {\n this.options.googleMaps.center = this.googleMaps.map\n .getCenter()\n .toJSON();\n this.options.googleMaps.zoom = this.googleMaps.map.getZoom();\n }\n this.zoomDelta = this.options.googleMaps.zoom - this.zoomLevel;\n this.updateGoogleMapsMaxZoom(this.options.googleMaps.center);\n // if (needToSetZoomLevels) {\n this.setInitialViewBox(this.viewBox);\n this.toggleSvgLayerOnZoom();\n // }\n this.events.trigger(\"googleMapsLoaded\");\n this.afterLoadBlockers--;\n this.finalizeMapLoading();\n }, 300);\n }, 1);\n });\n this.events.on(\"googleMapsBoundsChanged\", (bounds) => {\n this.setViewBoxByGoogleMapsOverlay();\n });\n } else {\n $(this.containers.map).toggleClass(\"mapsvg-with-google-map\", true);\n $(this.containers.googleMaps) && $(this.containers.googleMaps).show();\n if (options.type) {\n this.googleMaps.map.setMapTypeId(options.type);\n }\n this.setViewBoxByGoogleMapsOverlay();\n }\n }\n } else {\n // TODO: destroy google maps\n $(this.containers.map).toggleClass(\"mapsvg-with-google-map\", false);\n $(this.containers.googleMaps) && $(this.containers.googleMaps).hide();\n this.googleMaps.initialized = false;\n }\n if (this.converter) {\n this.converter.setWorldShift(this.options.googleMaps.on);\n }\n }\n createGoogleMapOverlay(bounds, map) {\n class GoogleMapsOverlay extends google.maps.OverlayView {\n bounds_: google.maps.LatLngBounds;\n map_: google.maps.Map;\n prevCoords: {\n sw: { x: number; y: number };\n sw2: { x: number; y: number };\n ne: { x: number; y: number };\n ne2: { x: number; y: number };\n };\n element: HTMLElement;\n mapsvg: MapSVGMap;\n\n constructor(bounds, googleMapInstance, mapsvg: MapSVGMap) {\n super();\n // Initialize all properties.\n this.bounds_ = bounds;\n this.map_ = googleMapInstance;\n this.mapsvg = mapsvg;\n this.setMap(googleMapInstance);\n this.prevCoords = {\n sw: { x: 0, y: 0 },\n sw2: { x: 0, y: 0 },\n ne: { x: 0, y: 0 },\n ne2: { x: 0, y: 0 },\n };\n }\n\n draw(): void {\n this.mapsvg.events.trigger(\"googleMapsBoundsChanged\", this.map_, [\n this.getPixelBounds(),\n this.map_,\n ]);\n }\n\n onAdd(): void {\n this.element = document.createElement(\"div\");\n this.element.style.borderStyle = \"none\";\n this.element.style.borderWidth = \"0px\";\n this.element.style.position = \"absolute\";\n\n // Add the element to the \"overlayLayer\" pane.\n const panes = this.getPanes();\n panes.overlayLayer.appendChild(this.element);\n }\n\n getPixelBounds(): { sw: google.maps.Point; ne: google.maps.Point } {\n const overlayProjection = this.getProjection();\n if (!overlayProjection) return;\n\n const geoSW = this.bounds_.getSouthWest();\n const geoNE = this.bounds_.getNorthEast();\n\n const coords = {\n sw: overlayProjection.fromLatLngToDivPixel(geoSW),\n ne: overlayProjection.fromLatLngToDivPixel(geoNE),\n sw2: overlayProjection.fromLatLngToContainerPixel(geoSW),\n ne2: overlayProjection.fromLatLngToContainerPixel(geoNE),\n };\n\n // check if map on border between 180/-180 longitude\n // if(ne.x < sw.x){\n // sw.x = sw.x - overlayProjection.getWorldWidth();\n // }\n // console.log('NOW sw:'+sw.x+' and ne:'+ne.x+'and W-width:'+overlayProjection.getWorldWidth());\n\n // if(ne2.x < sw2.x){\n // sw2.x = sw2.x - overlayProjection.getWorldWidth();\n // }\n\n const ww = overlayProjection.getWorldWidth();\n\n if (this.prevCoords.sw) {\n if (coords.ne.x < coords.sw.x) {\n if (\n Math.abs(this.prevCoords.sw.x - coords.sw.x) >\n Math.abs(this.prevCoords.ne.x - coords.ne.x)\n ) {\n coords.sw.x = coords.sw.x - ww;\n } else {\n coords.ne.x = coords.ne.x + ww;\n }\n if (\n Math.abs(this.prevCoords.sw2.x - coords.sw2.x) >\n Math.abs(this.prevCoords.ne2.x - coords.ne2.x)\n ) {\n coords.sw2.x = coords.sw2.x - ww;\n } else {\n coords.ne2.x = coords.ne2.x + ww;\n }\n }\n }\n\n this.prevCoords = coords;\n\n // div.style.background = 'rgba(255,0,0,.5)';\n // div.style.left = coords.sw.x + 'px';\n // div.style.top = coords.ne.y + 'px';\n // div.style.width = (coords.ne.x - coords.sw.x) + 'px';\n // div.style.height = (coords.sw.y - coords.ne.y) + 'px';\n\n return { sw: coords.sw2, ne: coords.ne2 };\n }\n }\n return new GoogleMapsOverlay(bounds, map, this);\n }\n /**\n * Loads Google Maps API (js file)\n * @param {function} callback - called on file load\n * @param fail\n * @private\n */\n loadGoogleMapsAPI(callback: () => void, fail: () => void): void {\n if (!this.options.googleMaps.apiKey) {\n console.error(\"MapSVG: can't load Google API because no API key has been provided\");\n return;\n }\n if (window.google !== undefined && google.maps) {\n MapSVG.googleMapsApiLoaded = true;\n }\n\n if (MapSVG.googleMapsApiLoaded) {\n if (typeof callback == \"function\") {\n callback();\n }\n return;\n }\n\n MapSVG.googleMapsLoadCallbacks = MapSVG.googleMapsLoadCallbacks || [];\n if (typeof callback == \"function\") {\n MapSVG.googleMapsLoadCallbacks.push(callback);\n }\n\n if (MapSVG.googleMapsApiIsLoading) {\n return;\n }\n MapSVG.googleMapsApiIsLoading = true;\n\n // @ts-ignore\n window.gm_authFailure = () => {\n if (MapSVG.GoogleMapBadApiKey) {\n MapSVG.GoogleMapBadApiKey();\n } else {\n if (this.editMode) {\n alert(\"Google maps API key is incorrect.\");\n } else {\n console.error(\"MapSVG: Google maps API key is incorrect.\");\n }\n }\n };\n this.googleMapsScript = document.createElement(\"script\");\n this.googleMapsScript.onload = () => {\n MapSVG.googleMapsApiLoaded = true;\n MapSVG.googleMapsLoadCallbacks.forEach((_callback) => {\n if (typeof callback == \"function\") _callback();\n });\n };\n const gmLibraries = [];\n if (this.options.googleMaps.drawingTools) {\n gmLibraries.push(\"drawing\");\n }\n if (this.options.googleMaps.geometry) {\n gmLibraries.push(\"geometry\");\n }\n let libraries = \"\";\n if (gmLibraries.length > 0) {\n libraries = \"&libraries=\" + gmLibraries.join(\",\");\n }\n this.googleMapsScript.src =\n \"https://maps.googleapis.com/maps/api/js?language=\" +\n this.options.googleMaps.language +\n \"&key=\" +\n this.options.googleMaps.apiKey +\n libraries;\n\n document.head.appendChild(this.googleMapsScript);\n }\n /**\n * Loads Details View for an object (Region or DB Object)\n * @param {Region|object} obj\n *\n * @example\n * var region = mapsvg.getRegion(\"US-TX\");\n * mapsvg.loadDetailsView(region);\n *\n * var object = mapsvg.database.getLoadedObject(12);\n * mapsvg.loadDetailsView(object);\n */\n loadDetailsView(obj: Region | CustomObject): void {\n this.controllers.popover && this.controllers.popover.close();\n if (this.controllers.detailsView) this.controllers.detailsView.destroy();\n\n this.controllers.detailsView = new DetailsController({\n // color: this.options.colors.detailsView,\n autoresize:\n MapSVG.isPhone &&\n this.options.detailsView.mobileFullscreen &&\n this.options.detailsView.location !== \"custom\"\n ? false\n : this.options.detailsView.autoresize,\n container: this.containers.detailsView,\n template:\n obj instanceof Region\n ? this.options.templates.detailsViewRegion\n : this.options.templates.detailsView,\n mapsvg: this,\n data: obj.getData(),\n modal:\n MapSVG.isPhone &&\n this.options.detailsView.mobileFullscreen &&\n this.options.detailsView.location !== \"custom\",\n scrollable:\n (MapSVG.isPhone &&\n this.options.detailsView.mobileFullscreen &&\n this.options.detailsView.location !== \"custom\") ||\n this.shouldBeScrollable(this.options.detailsView.location), //['custom','header','footer'].indexOf(this.options.detailsView.location) === -1,\n withToolbar:\n !(\n MapSVG.isPhone &&\n this.options.detailsView.mobileFullscreen &&\n this.options.detailsView.location !== \"custom\"\n ) && this.shouldBeScrollable(this.options.detailsView.location), //['custom','header','footer'].indexOf(this.options.detailsView.location) === -1,\n // width: this.options.detailsView.width,\n events: {\n shown: (detailsController: DetailsController) => {\n this.events.trigger(\"shown.detailsView\", this, [this, detailsController]);\n $(window).trigger(\"shown.detailsView\", [this, detailsController]);\n },\n closed: (detailsController: DetailsController) => {\n this.deselectAllRegions();\n this.deselectAllMarkers();\n this.controllers &&\n this.controllers.directory &&\n this.controllers.directory.deselectItems();\n this.events.trigger(\"closed.detailsView\", [this, detailsController]);\n },\n },\n });\n this.controllers.detailsView._init();\n }\n /**\n * Loads modal window with filters\n * @private\n */\n loadFiltersModal(): void {\n if (this.options.filters.modalLocation != \"custom\") {\n if (!this.containers.filtersModal) {\n this.containers.filtersModal = $(\n '
'\n )[0];\n }\n this.setColors();\n $(this.containers.filtersModal).css({ width: this.options.filters.width });\n if (MapSVG.isPhone) {\n $(\"body\").append($(this.containers.filtersModal));\n $(this.containers.filtersModal).css({ width: \"\" });\n } else {\n $(this.containers[this.options.filters.modalLocation]).append(\n $(this.containers.filtersModal)\n );\n }\n } else {\n this.containers.filtersModal = $(\"#\" + this.options.filters.containerId)[0];\n $(this.containers.filtersModal).css({ width: \"\" });\n }\n\n this.loadFiltersController(this.containers.filtersModal, true);\n }\n /**\n * Loads filters controller into a provided container\n * @param {HTMLElement} container - Container, jQuery object\n * @param {boolean} modal - If filter should be in a modal window\n */\n loadFiltersController(container: HTMLElement, modal = false): void {\n if (!this.filtersShouldBeShown()) {\n return;\n }\n\n let filtersInDirectory: boolean, filtersHide: boolean;\n\n if (MapSVG.isPhone) {\n filtersInDirectory = true;\n filtersHide = this.options.filters.hideOnMobile; //this.filtersSchema.schema.length > 2;\n } else {\n filtersInDirectory =\n this.options.menu.on &&\n this.controllers.directory &&\n this.options.menu.location === this.options.filters.location;\n filtersHide = this.options.filters.hide;\n }\n const scrollable =\n modal ||\n (!filtersInDirectory &&\n [\"leftSidebar\", \"rightSidebar\"].indexOf(this.options.filters.location) !== -1);\n\n this.filtersRepository =\n this.options.filters.source === \"regions\"\n ? this.regionsRepository\n : this.objectsRepository;\n\n if (this.options.filters.searchButton) {\n this.changedFields = null;\n this.changedSearch = null;\n } else {\n this.changedSearch = () => {\n this.filtersRepository.query.searchFallback = this.filtersSchema.getFieldByType(\n \"search\"\n ).searchFallback;\n this.throttle(this.filtersRepository.reload, 400, this.filtersRepository);\n };\n this.changedFields = () => {\n this.throttle(this.filtersRepository.reload, 400, this.filtersRepository);\n };\n }\n\n this.controllers.filters = new FiltersController({\n container: container,\n query: this.filtersRepository.query,\n mapsvg: this,\n schema: this.filtersSchema,\n template: '
',\n scrollable: scrollable,\n modal: modal,\n withToolbar: MapSVG.isPhone ? false : modal,\n width: $(container).hasClass(\"mapsvg-map-container\")\n ? this.options.filters.width\n : \"100%\",\n hide: this.options.filters.hide,\n hideOnMobile: this.options.filters.hideOnMobile,\n showButtonText: this.options.filters.showButtonText,\n clearButton: this.options.filters.clearButton,\n clearButtonText: this.options.filters.clearButtonText,\n searchButton: this.options.filters.searchButton,\n searchButtonText: this.options.filters.searchButtonText,\n padding: this.options.filters.padding,\n events: {\n cleared: () => {\n this.deselectAllRegions();\n this.filtersRepository.reload();\n },\n \"changed.fields\": this.changedFields,\n\n \"changed.search\": this.changedSearch,\n\n \"click.btn.searchButton\": () => {\n this.filtersRepository.reload();\n },\n loaded: () => {\n // TODO add resize sensor to directory instead of this:\n this.controllers.directory && this.controllers.directory.updateTopShift();\n this.afterLoadBlockers--;\n this.finalizeMapLoading();\n },\n \"click.btn.showFilters\": () => {\n this.loadFiltersModal();\n },\n },\n });\n this.controllers.filters._init();\n }\n\n private filtersShouldBeShown() {\n return (\n this.options.filters.on &&\n this.options.filtersSchema &&\n this.options.filtersSchema.length > 0\n );\n }\n\n /**\n * Event handler for text search input\n * @param {string} text\n * @param {boolean} fallback\n * @private\n */\n textSearch(text: string, fallback = false): void {\n const query = new Query({\n filters: { search: text },\n searchFallback: fallback,\n });\n\n this.filtersRepository.find(query);\n }\n /**\n * Finds a Region by ID\n * @param {string} id - Region ID\n * @returns {Region}\n\n * @example\n * var region = mapsvg.getRegion(\"US-TX\");\n */\n getRegion(id: string): Region {\n return this.regions.findById(id);\n }\n /**\n * Returns all Regions\n * @returns {Region[]}\n */\n getRegions(): ArrayIndexed {\n return this.regions;\n }\n /**\n * Finds a Marker by ID\n * @param {string} id - Marker ID\n * @returns {Marker}\n\n * @example\n * var marker = mapsvg.getMarker(\"marker_12\");\n */\n getMarker(id: string): Marker {\n return this.markers.findById(id);\n }\n /**\n * Checks if IDs is unique\n * @param id\n * @returns {bool|string} - true if ID is available, {error: \"error text\"} if not.\n * @private\n */\n checkId(id: string): { canUse: boolean; error: string } {\n if (this.getRegion(id))\n return { canUse: false, error: \"This ID is already being used by a Region\" };\n else if (this.getMarker(id))\n return { canUse: false, error: \"This ID is already being used by another Marker\" };\n else return { canUse: true, error: \"\" };\n }\n /**\n * Redraws colors of regions.\n * Used when Region statuses are loaded from the database or when choropleth map is enabled.\n */\n regionsRedrawColors(): void {\n this.regions.forEach((region: Region) => {\n region.setFill();\n });\n }\n /**\n * Redraws choropleth bubbles.\n */\n redrawBubbles(): void {\n $(this.containers.map).removeClass(\"bubbles-regions-on bubbles-database-on\");\n\n if (this.options.choropleth.on && this.options.choropleth.bubbleMode) {\n $(this.containers.map).addClass(\"bubbles-\" + this.options.choropleth.source + \"-on\");\n }\n\n this.regions.forEach(function (region) {\n region.drawBubble();\n });\n\n const markersBubbleMode =\n this.options.choropleth.on &&\n this.options.choropleth.source == \"database\" &&\n this.options.choropleth.bubbleMode;\n this.markers.forEach(function (marker) {\n marker.setBubbleMode(markersBubbleMode);\n });\n }\n /**\n * Destroys the map and all related containers.\n * @returns {Map}\n */\n destroy(): void {\n if (this.controllers && this.controllers.directory) {\n this.controllers.directory.mobileButtons.remove();\n }\n $(this.containers.map)\n .empty()\n .insertBefore($(this.containers.wrapAll))\n .attr(\"style\", \"\")\n .removeClass(\"mapsvg mapsvg-responsive\");\n\n this.controllers.popover && this.controllers.popover.close();\n\n if (this.controllers.detailsView) this.controllers.detailsView.destroy();\n\n $(this.containers.detailsView).remove();\n $(this.containers.popover).remove();\n $(this.containers.tooltip).remove();\n\n $(this.containers.wrapAll).remove();\n }\n /**\n * Was used previously to return _data that contained all map properties.\n * Now properties are stored in the map instance itself.\n * @returns {Map}\n */\n getData(): { id: number; title: string; options: { [key: string]: any } } {\n return {\n id: this.id,\n title: this.options.title,\n options: this.getOptions(false, false),\n };\n }\n /**\n * Checks if fitmarkers() action can be performed and does it\n * @private\n */\n mayBeFitMarkers(): void {\n if (!this.lastTimeFitWas) {\n this.lastTimeFitWas = Date.now() - 99999;\n }\n\n this.fitDelta = Date.now() - this.lastTimeFitWas;\n\n if (\n this.fitDelta > 1000 &&\n !this.firstDataLoad &&\n !this.fitOnDataLoadDone &&\n this.options.fitMarkers\n ) {\n this.fitMarkers();\n this.fitOnDataLoadDone = true;\n }\n if (\n this.firstDataLoad &&\n (this.options.fitMarkersOnStart ||\n (this.options.fitMarkers && this.options.database.loadOnStart === false))\n ) {\n this.firstDataLoad = false;\n if (this.options.googleMaps.on && !this.googleMaps.map) {\n this.events.on(\"googleMapsLoaded\", () => {\n this.fitMarkers();\n });\n } else {\n this.fitMarkers();\n }\n }\n\n this.lastTimeFitWas = Date.now();\n }\n /**\n * Changes maps viewBox to fit loaded markers.\n */\n fitMarkers(): void {\n const dbObjects = this.objectsRepository.getLoaded();\n\n if (!dbObjects || dbObjects.length === 0) {\n return;\n }\n\n if (this.options.googleMaps.on && typeof google !== \"undefined\") {\n const lats = [];\n const lngs = [];\n\n if (dbObjects.length > 1) {\n dbObjects.forEach((object) => {\n if (object.location && object.location.geoPoint) {\n lats.push(object.location.geoPoint.lat);\n lngs.push(object.location.geoPoint.lng);\n }\n });\n\n // calc the min and max lng and lat\n const minlat = Math.min.apply(null, lats),\n maxlat = Math.max.apply(null, lats);\n const minlng = Math.min.apply(null, lngs),\n maxlng = Math.max.apply(null, lngs);\n\n const bbox = new google.maps.LatLngBounds(\n { lat: minlat, lng: minlng },\n { lat: maxlat, lng: maxlng }\n );\n this.googleMaps.map.fitBounds(bbox, 0);\n } else {\n if (\n dbObjects[0].location &&\n dbObjects[0].location.geoPoint.lat &&\n dbObjects[0].location.geoPoint.lng\n ) {\n const coords = {\n lat: dbObjects[0].location.geoPoint.lat,\n lng: dbObjects[0].location.geoPoint.lng,\n };\n if (this.googleMaps.map) {\n this.googleMaps.map.setCenter(coords);\n this.googleMaps.map.setZoom(this.options.fitSingleMarkerZoom);\n }\n }\n }\n } else {\n if (this.options.clustering.on) {\n const arr = [];\n this.markersClusters.forEach((c) => {\n arr.push(c);\n });\n this.markers.forEach((m) => {\n arr.push(m);\n });\n this.zoomTo(arr);\n return;\n } else {\n this.zoomTo(this.markers);\n return;\n }\n }\n }\n\n setFitSingleMarkerZoom(zoom) {\n this.options.fitSingleMarkerZoom = parseInt(zoom);\n }\n /**\n * Shows user current location\n * Works only under HTTPS connection\n * @returns {boolean|object} - \"false\" if geolocation is unavailable, or {lat: float, lng: float} if it's available\n */\n showUserLocation(callback: (location: Location) => void): void {\n this.getUserLocation((geoPoint: GeoPoint) => {\n this.userLocation = null;\n this.userLocation = new Location({\n geoPoint: geoPoint,\n img: MapSVG.urls.root + \"/markers/user-location.svg\",\n });\n this.userLocationMarker && this.userLocationMarker.delete();\n this.userLocationMarker = new Marker({\n location: this.userLocation,\n mapsvg: this,\n width: 15,\n height: 15,\n });\n $(this.userLocationMarker.element).addClass(\"mapsvg-user-location\");\n this.userLocationMarker.centered = true;\n this.getLayer(\"markers\").append(this.userLocationMarker.element);\n this.userLocationMarker.adjustScreenPosition();\n callback && callback(this.userLocation);\n });\n }\n /**\n * Gets user's current location by using browser's HTML5 geolocation feature.\n * Works only under HTTPS connection!\n * @returns {boolean|object} - \"false\" if geolocation is unavailable, or {lat: float, lng: float} if it's available\n */\n getUserLocation(callback: (coordinates: GeoPoint) => void): boolean {\n if (navigator.geolocation) {\n navigator.geolocation.getCurrentPosition(function (position) {\n const pos = new GeoPoint(position.coords.latitude, position.coords.longitude);\n callback && callback(pos);\n });\n } else {\n return false;\n }\n }\n /**\n * Returns current SVG scale related to screen - map screen pixels to SVG points ratio.\n * Example: if SVG current viewBox width is 600 and the map is shown in a 300px container,\n * the map scale is 0.5 (300/600 = 0.5)\n * @returns {number}\n */\n getScale(): number {\n const scale2 = this.containers.map.clientWidth / this.viewBox.width;\n return scale2 || 1;\n }\n\n /**\n * Returns current viewBox\n * @returns {array} - [x,y,width,height]\n */\n getViewBox(): ViewBox {\n return this.viewBox;\n }\n /**\n * Sets map container size and viewBox size.\n * This method should be used when you need to change both map container size and viewBox size.\n * @param {number} width\n * @param {number} height\n * @returns {Array} - viewBox, [x,y,width,height]\n */\n viewBoxSetBySize(width: number, height: number): ViewBox {\n this.setSize(width, height);\n this._viewBox.update(this.viewBoxGetBySize(width, height));\n this.setViewBox(this._viewBox);\n $(window).trigger(\"resize\");\n this.setSize(width, height);\n this.setZoomLevels();\n\n return this.viewBox;\n }\n /**\n * Returns viewBox for a provided width/height\n * @param width\n * @param height\n * @returns {Array} - viewBox, [x,y,width,height]\n * @private\n */\n viewBoxGetBySize(width: number, height: number): ViewBox {\n const new_ratio = width / height;\n const old_ratio = this.svgDefault.viewBox.width / this.svgDefault.viewBox.height;\n\n const vb = this.svgDefault.viewBox.clone();\n\n if (new_ratio != old_ratio) {\n if (new_ratio > old_ratio) {\n vb.width = this.svgDefault.viewBox.height * new_ratio;\n vb.x = this.svgDefault.viewBox.x - (vb.width - this.svgDefault.viewBox.width) / 2;\n } else {\n vb.height = this.svgDefault.viewBox.width / new_ratio;\n vb.y = this.svgDefault.viewBox.y - (vb.height - this.svgDefault.viewBox.height) / 2;\n }\n }\n\n return vb;\n }\n /**\n * Resets map zoom and scroll to initial position.\n * @param {bool} toInitial - Set to \"true\" if you want to reset to initial viewBox that was set by user;\n * set to \"false\" to reset to original SVG viewBox as defined in the SVG file\n * @returns {Array} - viewBox, [x,y,width,height]\n */\n viewBoxReset(toInitial: boolean): ViewBox {\n if (this.options.googleMaps.on && this.googleMaps.map) {\n if (!toInitial) {\n this.options.googleMaps.center = null;\n this.options.googleMaps.zoom = null;\n }\n if (!this.options.googleMaps.center || !this.options.googleMaps.zoom) {\n const southWest = new google.maps.LatLng(\n this.geoViewBox.sw.lat,\n this.geoViewBox.sw.lng\n );\n const northEast = new google.maps.LatLng(\n this.geoViewBox.ne.lat,\n this.geoViewBox.ne.lng\n );\n const bounds = new google.maps.LatLngBounds(southWest, northEast);\n this.googleMaps.map.fitBounds(bounds, 0);\n this.options.googleMaps.center = this.googleMaps.map.getCenter().toJSON();\n this.options.googleMaps.zoom = this.googleMaps.map.getZoom();\n } else {\n this.googleMaps.map.setZoom(this.options.googleMaps.zoom);\n this.googleMaps.map.setCenter(this.options.googleMaps.center);\n }\n } else {\n if (toInitial) {\n const v = this._viewBox || this.svgDefault.viewBox;\n this.zoomLevel = 0;\n this._scale = 1;\n this.setViewBox(v);\n } else {\n this.setViewBox();\n }\n }\n return this.viewBox;\n }\n\n /**\n * Returns geo-bounds of the map.\n * @returns {number[]} - [leftLon, topLat, rightLon, bottomLat]\n */\n getGeoViewBox(): number[] {\n const v = this.viewBox;\n const p1 = new SVGPoint(v.x, v.y);\n const p2 = new SVGPoint(v.x + v.width, v.y);\n const p3 = new SVGPoint(v.x, v.y);\n const p4 = new SVGPoint(v.x, v.y + v.height);\n\n const leftLon = this.converter.convertSVGToGeo(p1).lng;\n const rightLon = this.converter.convertSVGToGeo(p2).lng;\n const topLat = this.converter.convertSVGToGeo(p3).lat;\n const bottomLat = this.converter.convertSVGToGeo(p4).lat;\n\n return [leftLon, topLat, rightLon, bottomLat];\n }\n\n private setStrokes() {\n $(this.containers.svg)\n .find(\"path, polygon, circle, ellipse, rect, line, polyline\")\n .each((index, elem) => {\n const width = MapObject.getComputedStyle(\"stroke-width\", elem);\n if (width) {\n $(elem).attr(\"data-stroke-width\", width.replace(\"px\", \"\"));\n }\n });\n }\n\n /**\n * Adjusts stroke thickness on zoom change\n */\n adjustStrokes(): void {\n $(this.containers.svg)\n .find(\"path, polygon, circle, ellipse, rect, line, polyline\")\n .each((index, elem) => {\n const width = elem.getAttribute(\"data-stroke-width\");\n if (width) {\n $(elem).css(\"stroke-width\", Number(width) / this.scale);\n }\n });\n }\n /**\n * Zooms-in the map\n * @param {SVGPoint} center - if provided, zoom will shift the center point\n */\n zoomIn(center?: SVGPoint): void {\n if (this.canZoom) {\n this.isZooming = true;\n this.canZoom = false;\n setTimeout(() => {\n this.isZooming = false;\n this.canZoom = true;\n }, 700);\n this.zoom(1, center);\n }\n }\n /**\n * Zooms-out the map\n * @param {SVGPoint} center - [x,y] center point (optional)\n */\n zoomOut(center?: SVGPoint): void {\n if (this.canZoom) {\n this.isZooming = true;\n this.canZoom = false;\n setTimeout(() => {\n this.isZooming = false;\n this.canZoom = true;\n }, 700);\n this.zoom(-1, center);\n }\n }\n /**\n * Zooms to Region, Marker or array of Markers.\n * @param {String|Region|Marker|Marker[]|MarkersCluster[]} mapObjects - Region ID, Region, Marker, array of Markers, array of MarkerClusters\n * @param {number} zoomToLevel - Zoom level\n *\n * @example\n * var region = mapsvg.getRegion(\"US-TX\");\n * mapsvg.zoomTo(region);\n */\n zoomTo(\n mapObjects: Region | Marker | MarkerCluster | Marker[] | Region[] | MarkerCluster[],\n zoomToLevel?: number\n ): boolean {\n // If a single object Marker | Region | Cluster is passed, convert it to array\n if (mapObjects instanceof Marker || mapObjects instanceof MarkerCluster) {\n return this.zoomToMarkerOrCluster(mapObjects, zoomToLevel);\n } else {\n const convertedObjects = !Array.isArray(mapObjects) ? [mapObjects] : mapObjects;\n const bbox = this.getGroupBBox(convertedObjects);\n return this.fitViewBox(bbox, zoomToLevel);\n }\n }\n\n /**\n * Zooms to a single marker or cluster\n * @private\n */\n zoomToMarkerOrCluster(mapObject: Marker | MarkerCluster, zoomToLevel?: number): boolean {\n this.zoomLevel = zoomToLevel || 1;\n const foundZoomLevel = this.zoomLevels.get(this.zoomLevel);\n if (!foundZoomLevel) {\n return false;\n }\n const vb = foundZoomLevel.viewBox;\n\n if (this.canZoom) {\n this.isZooming = true;\n this.canZoom = false;\n setTimeout(() => {\n this.isZooming = false;\n this.canZoom = true;\n }, 700);\n const vbNew = new ViewBox(\n mapObject.svgPoint.x - vb.width / 2,\n mapObject.svgPoint.y - vb.height / 2,\n vb.width,\n vb.height\n );\n this.setViewBox(vbNew);\n this._scale = foundZoomLevel._scale;\n return true;\n }\n\n return false;\n }\n\n getGroupBBox(mapObjects: (Marker | Region | MarkerCluster)[]): ViewBox {\n let _bbox, bbox;\n const xmax: number[] = [];\n const ymax: number[] = [];\n const xmin: number[] = [];\n const ymin: number[] = [];\n\n for (let i = 0; i < mapObjects.length; i++) {\n _bbox = mapObjects[i].getBBox();\n xmin.push(_bbox.x);\n ymin.push(_bbox.y);\n const _w = _bbox.x + _bbox.width;\n const _h = _bbox.y + _bbox.height;\n xmax.push(_w);\n ymax.push(_h);\n }\n const _xmin = Math.min(...xmin);\n const _ymin = Math.min(...ymin);\n const width = Math.max(...xmax) - _xmin;\n const height = Math.max(...ymax) - _ymin;\n\n let padding = 10;\n const point1 = new ScreenPoint(padding, 0);\n const point2 = new ScreenPoint(0, 0);\n padding =\n this.converter.convertPixelToSVG(point1).x - this.converter.convertPixelToSVG(point2).x;\n\n return new ViewBox(\n _xmin - padding,\n _ymin - padding,\n width + padding * 2,\n height + padding * 2\n );\n }\n\n fitViewBox(fitViewBox: ViewBox, forceZoomLevel: number): boolean {\n let viewBoxPrev: ViewBox;\n let foundZoomLevelNumber = 0;\n let foundZoomLevel: { zoomLevel: number; viewBox: ViewBox; _scale: number };\n let newViewBox: ViewBox;\n\n this.zoomLevels.forEach((zoomLevel) => {\n if (viewBoxPrev && viewBoxPrev.x !== undefined) {\n if (\n fitViewBox.fitsInViewBox(viewBoxPrev) &&\n zoomLevel.viewBox.fitsInViewBox(fitViewBox, true)\n ) {\n foundZoomLevelNumber = forceZoomLevel ? forceZoomLevel : zoomLevel.zoomLevel;\n foundZoomLevel = this.zoomLevels.get(foundZoomLevelNumber);\n\n newViewBox = new ViewBox(\n fitViewBox.x - foundZoomLevel.viewBox.width / 2 + fitViewBox.width / 2,\n fitViewBox.y - foundZoomLevel.viewBox.height / 2 + fitViewBox.height / 2,\n foundZoomLevel.viewBox.width,\n foundZoomLevel.viewBox.height\n );\n }\n }\n viewBoxPrev = zoomLevel && zoomLevel.viewBox;\n });\n if (foundZoomLevel) {\n if (this.canZoom) {\n this.isZooming = true;\n this.canZoom = false;\n setTimeout(() => {\n this.isZooming = false;\n this.canZoom = true;\n }, 700);\n this.zoomLevel = foundZoomLevelNumber;\n this._scale = foundZoomLevel._scale;\n this.setViewBox(newViewBox);\n return true;\n }\n } else {\n return false;\n }\n }\n\n /**\n * Zooms to a single region\n * @param region\n * @param zoomToLevel\n *\n * @private\n */\n zoomToRegion(region: Region, zoomToLevel?: number): boolean {\n this.fitViewBox(region.getBBox(), zoomToLevel);\n return true;\n }\n\n /**\n * Centers map on Region or Marker.\n * @param {Region|Marker} region - Region or Marker\n * @param {number} yShift - Vertical shift from center. Used by showPopover method to fit popover in the map container\n */\n centerOn(region: Region | Marker, yShift?: number): void {\n if (this.options.googleMaps.on) {\n yShift = yShift ? (yShift + 12) / this.getScale() : 0;\n $(this.containers.map).addClass(\"scrolling\");\n const latLng = region.getCenterLatLng(yShift);\n this.googleMaps.map.panTo(latLng);\n setTimeout(() => {\n $(this.containers.map).removeClass(\"scrolling\");\n }, 100);\n } else {\n yShift = yShift ? (yShift + 12) / this.getScale() : 0;\n const bbox = region.getBBox();\n const vb = this.viewBox;\n const newViewBox = new ViewBox(\n bbox.x - vb.width / 2 + bbox.width / 2,\n bbox.y - vb.height / 2 + bbox.height / 2 - yShift,\n vb.width,\n vb.height\n );\n this.setViewBox(newViewBox);\n }\n }\n /**\n * Zooms the map\n * @param {number} delta - 1/-1\n * @param {SVGPoint} center - [x,y] zoom center point\n * @returns {boolean}\n */\n zoom(delta: number, center?: SVGPoint): void {\n let newViewBox = new ViewBox(0, 0, 0, 0);\n\n const d = delta > 0 ? 1 : -1;\n\n if (!this.zoomLevels.get(this.zoomLevel + d)) return;\n\n const newZoomLevel = this.zoomLevel + d;\n const zoomIn = d > 0;\n const zoomOut = d < 0;\n\n const zoomRange = this.getZoomRange();\n\n const isInZoomRange = this.zoomLevel >= zoomRange.min && this.zoomLevel <= zoomRange.max;\n\n const goingOutOfZoomRange =\n isInZoomRange && (newZoomLevel > zoomRange.max || newZoomLevel < zoomRange.min);\n\n const outOfRangeAndMovingAway =\n !isInZoomRange &&\n ((zoomIn && newZoomLevel > zoomRange.max) || (zoomOut && newZoomLevel < zoomRange.min));\n\n if (goingOutOfZoomRange || outOfRangeAndMovingAway) {\n return;\n }\n\n this.zoomLevel = newZoomLevel;\n\n const z = this.zoomLevels.get(this.zoomLevel);\n this._scale = z._scale;\n newViewBox = z.viewBox;\n\n let shift = [];\n if (center) {\n const koef = zoomIn ? 0.5 : -1; // 1/2 * (d=1) || 2 * (d=-1)\n // shift = [(center.x - this.viewBox.x) * koef, (center.y - this.viewBox.y) * koef];\n // shift = newNewBox.width/2 - (center.x - this.viewBox.x)\n\n newViewBox.x = this.viewBox.x + (center.x - this.viewBox.x) * koef;\n newViewBox.y = this.viewBox.y + (center.y - this.viewBox.y) * koef;\n\n // newViewBox.x =\n // this.svgDefault.viewBox.x + (center.x - this.svgDefault.viewBox.x) * koef;\n //\n // newViewBox.y =\n // this.svgDefault.viewBox.y + (center.y - this.svgDefault.viewBox.y) * koef;\n // shift = newNewBox.width/2 - ()\n // newViewBox.x -= this.viewBox.x + shift[0];\n // newViewBox.y -= this.viewBox.y + shift[1];\n } else {\n shift = [\n (this.viewBox.width - newViewBox.width) / 2,\n (this.viewBox.height - newViewBox.height) / 2,\n ];\n newViewBox.x = this.viewBox.x + shift[0];\n newViewBox.y = this.viewBox.y + shift[1];\n }\n\n this.shiftViewBoxToScrollBoundaries(newViewBox);\n\n this.setViewBox(newViewBox);\n\n // this.events.trigger('zoom');\n }\n\n private toggleSvgLayerOnZoom(): void {\n if (\n this.options.googleMaps.on &&\n this.googleMaps.map &&\n this.options.zoom.hideSvg &&\n this.googleMaps.map.getZoom() >= this.options.zoom.hideSvgZoomLevel\n ) {\n if (!$(this.containers.svg).hasClass(\"mapsvg-invisible\")) {\n $(this.containers.svg).animate({ opacity: 0 }, 400, \"linear\", () => {\n $(this.containers.svg).addClass(\"mapsvg-invisible\");\n });\n }\n } else {\n if ($(this.containers.svg).hasClass(\"mapsvg-invisible\")) {\n $(this.containers.svg).animate({ opacity: 1 }, 400, \"linear\", () => {\n $(this.containers.svg).removeClass(\"mapsvg-invisible\");\n });\n }\n }\n }\n\n private shiftViewBoxToScrollBoundaries(newViewBox: ViewBox): ViewBox {\n if (this.options.scroll.limit) {\n if (newViewBox.x < this.svgDefault.viewBox.x) newViewBox.x = this.svgDefault.viewBox.x;\n else if (\n newViewBox.x + newViewBox.width >\n this.svgDefault.viewBox.x + this.svgDefault.viewBox.width\n )\n newViewBox.x =\n this.svgDefault.viewBox.x + this.svgDefault.viewBox.width - newViewBox.width;\n\n if (newViewBox.y < this.svgDefault.viewBox.y) newViewBox.y = this.svgDefault.viewBox.y;\n else if (\n newViewBox.y + newViewBox.height >\n this.svgDefault.viewBox.y + this.svgDefault.viewBox.height\n )\n newViewBox.y =\n this.svgDefault.viewBox.y + this.svgDefault.viewBox.height - newViewBox.height;\n }\n return newViewBox;\n }\n\n /**\n * Deletes a marker\n * @param {Marker} marker\n */\n markerDelete(marker: Marker): void {\n if (this.editingMarker && this.editingMarker.id == marker.id) {\n this.unsetEditingMarker();\n }\n\n if (this.markers.findById(marker.id)) {\n this.markers.delete(marker.id);\n }\n marker.delete();\n marker = null;\n\n if (this.markers.length === 0) this.options.markerLastID = 0;\n }\n /**\n * Adds a marker cluster\n * @param {MarkerCluster} markersCluster\n */\n markersClusterAdd(markersCluster: MarkerCluster): void {\n this.layers.markers.append(markersCluster.elem);\n this.markersClusters.push(markersCluster);\n markersCluster.adjustScreenPosition();\n }\n /** Adds a marker to the map.\n * @param {Marker} marker\n * @example\n */\n markerAdd(marker): void {\n $(marker.element).hide();\n marker.adjustScreenPosition();\n // marker.setImage(this.getMarkerImage(marker.object, marker.location), true);\n this.layers.markers.append(marker.element);\n this.markers.push(marker);\n marker.mapped = true;\n\n setTimeout(function () {\n $(marker.element).show();\n }, 100);\n }\n /**\n * Removes marker from the map\n * @param marker\n */\n markerRemove(marker: Marker): void {\n if (this.editingMarker && this.editingMarker.id == marker.id) {\n this.editingMarker = null;\n delete this.editingMarker;\n }\n\n if (this.markers.findById(marker.id)) {\n this.markers.findById(marker.id).element.remove();\n this.markers.delete(marker.id);\n marker = null;\n }\n if (this.markers.length === 0) this.options.markerLastID = 0;\n }\n /**\n * Generates new Marker ID\n * @returns {*}\n * @private\n */\n markerId(): string {\n this.options.markerLastID = this.options.markerLastID + 1;\n const id = \"marker_\" + this.options.markerLastID;\n if (this.getMarker(id)) return this.markerId();\n else return id;\n }\n\n /**\n * Adjust positions of all movable objects (markers, clusters, popovers, labels)\n *\n */\n movingItemsAdjustScreenPosition() {\n this.markersAdjustScreenPosition();\n\n this.popoverAdjustScreenPosition();\n\n this.bubblesRegionsAdjustScreenPosition();\n\n this.labelsRegionsAdjustScreenPosition();\n }\n\n /**\n * Move all movable objects (markers, clusters, popovers, labels) by given values\n *\n * @param {number} deltaX\n * @param {number} deltaY\n */\n movingItemsMoveScreenPositionBy(deltaX, deltaY) {\n this.markersMoveScreenPositionBy(deltaX, deltaY);\n\n this.popoverMoveScreenPositionBy(deltaX, deltaY);\n\n this.bubblesRegionsMoveScreenPositionBy(deltaX, deltaY);\n\n this.labelsRegionsMoveScreenPositionBy(deltaX, deltaY);\n }\n\n /**\n * Adjusts position of Region Labels\n */\n labelsRegionsAdjustScreenPosition() {\n if ($(this.containers.map).is(\":visible\")) {\n this.regions.forEach(function (region) {\n region.adjustLabelScreenPosition();\n });\n }\n }\n\n /**\n * Adjusts position of Regions bubbles\n */\n bubblesRegionsAdjustScreenPosition() {\n if ($(this.containers.map).is(\":visible\")) {\n this.regions.forEach(function (region) {\n region.adjustBubbleScreenPosition();\n });\n }\n }\n\n /**\n * Move position of Region Labels by given numbers\n *\n * @param {number} deltaX\n * @param {number} deltaY\n */\n labelsRegionsMoveScreenPositionBy(deltaX: number, deltaY: number): void {\n if ($(this.containers.map).is(\":visible\")) {\n this.regions.forEach(function (region) {\n region.moveLabelScreenPositionBy(deltaX, deltaY);\n });\n }\n }\n\n /**\n * Move position of Regions bubbles by given numbers\n *\n * @param {number} deltaX\n * @param {number} deltaY\n */\n bubblesRegionsMoveScreenPositionBy(deltaX: number, deltaY: number): void {\n if ($(this.containers.map).is(\":visible\")) {\n this.regions.forEach((region) => {\n region.moveBubbleScreenPositionBy(deltaX, deltaY);\n });\n }\n }\n\n /**\n * Adjusts position of Markers and MarkerClusters.\n * This method is called on zoom or when map container is resized.\n */\n markersAdjustScreenPosition(): void {\n this.markers.forEach((marker: Marker) => {\n marker.adjustScreenPosition();\n });\n this.markersClusters.forEach((cluster: MarkerCluster) => {\n cluster.adjustScreenPosition();\n });\n if (this.userLocationMarker) {\n this.userLocationMarker.adjustScreenPosition();\n }\n }\n\n /**\n * Move Markers and clusters by given numbers.\n *\n * @param {number} deltaX\n * @param {number} deltaY\n */\n markersMoveScreenPositionBy(deltaX: number, deltaY: number): void {\n this.markers.forEach((marker) => {\n marker.moveSrceenPositionBy(deltaX, deltaY);\n });\n\n this.markersClusters.forEach((cluster: MarkerCluster) => {\n cluster.moveSrceenPositionBy(deltaX, deltaY);\n });\n\n if (this.userLocationMarker) {\n this.userLocationMarker.moveSrceenPositionBy(deltaX, deltaY);\n }\n }\n\n /**\n * Sets marker into \"edit mode\".\n * Used in Map Editor.\n * @param {Marker} marker\n * @private\n */\n setEditingMarker(marker: Marker): void {\n this.editingMarker = marker;\n if (!this.editingMarker.mapped) {\n this.editingMarker.needToRemove = true;\n // this.editingMarker.node.addClass(\"mapsvg-editing-marker\");\n this.markerAdd(this.editingMarker);\n }\n }\n /**\n * Disables marker \"edit mode\".\n * Used in Map Editor.\n * @private\n */\n unsetEditingMarker(): void {\n if (this.editingMarker && this.editingMarker.needToRemove) {\n this.markerRemove(this.editingMarker);\n }\n this.editingMarker = null;\n }\n /**\n * Returns marker that is currently in the \"edit mode\"\n * Used in Map Editor.\n * @private\n */\n getEditingMarker(): Marker {\n return this.editingMarker;\n }\n /**\n * Event handler - called when map scroll starts\n * @param e\n * @param mapsvg\n * @returns {boolean}\n * @private\n */\n scrollStart(e: JQuery.TouchEventBase, mapsvg: MapSVGMap): void {\n if (\n $(e.target).hasClass(\"mapsvg-btn-map\") ||\n $(e.target).closest(\".mapsvg-choropleth\").length\n )\n return;\n\n if (this.editMarkers.on && $(e.target).hasClass(\"mapsvg-marker\")) return;\n\n e.preventDefault();\n\n $(this.containers.map).addClass(\"no-transitions\");\n\n const ce =\n e.originalEvent && e.originalEvent.touches && e.originalEvent.touches[0]\n ? e.originalEvent.touches[0]\n : e;\n\n this.scrollStarted = true;\n\n this.scroll = {\n tx: this.scroll.tx || 0,\n ty: this.scroll.ty || 0,\n // initial viewbox when scrollning started\n vxi: this.viewBox.x,\n vyi: this.viewBox.y,\n // mouse coordinates when scrolling started\n x: ce.clientX,\n y: ce.clientY,\n // mouse delta\n dx: 0,\n dy: 0,\n // new viewbox x/y\n vx: 0,\n vy: 0,\n // for google maps scroll\n gx: ce.clientX,\n gy: ce.clientY,\n touchScrollStart: 0,\n };\n\n if (e.type.indexOf(\"mouse\") === 0) {\n $(document).on(\"mousemove.scroll.mapsvg\", (e: JQuery.TouchEventBase) => {\n this.scrollMove(e);\n });\n if (this.options.scroll.spacebar) {\n $(document).on(\"keyup.scroll.mapsvg\", (e: JQuery.TouchEventBase) => {\n if (e.keyCode == 32) {\n this.scrollEnd(e, mapsvg);\n }\n });\n } else {\n $(document).on(\"mouseup.scroll.mapsvg\", (e: JQuery.TouchEventBase) => {\n this.scrollEnd(e, mapsvg);\n });\n }\n }\n }\n /**\n * Event handler - called when map scroll moves\n * @param e\n * @event\n * @private\n */\n scrollMove(e: JQuery.TouchEventBase): void {\n e.preventDefault();\n\n if (!this.isScrolling) {\n this.isScrolling = true;\n // $(this.containers.map).css('pointer-events','none');\n $(this.containers.map).addClass(\"scrolling\");\n }\n\n const ce =\n e.originalEvent && e.originalEvent.touches && e.originalEvent.touches[0]\n ? e.originalEvent.touches[0]\n : e;\n\n this.panBy(this.scroll.gx - ce.clientX, this.scroll.gy - ce.clientY);\n\n this.scroll.gx = ce.clientX;\n this.scroll.gy = ce.clientY;\n\n // delta x/y\n this.scroll.dx = this.scroll.x - ce.clientX;\n this.scroll.dy = this.scroll.y - ce.clientY;\n\n // new viewBox x/y\n let vx = this.scroll.vxi + this.scroll.dx / this.scale;\n let vy = this.scroll.vyi + this.scroll.dy / this.scale;\n\n // Limit scroll to map boundaries\n if (this.options.scroll.limit) {\n if (vx < this.svgDefault.viewBox.x) vx = this.svgDefault.viewBox.x;\n else if (\n this.viewBox.width + vx >\n this.svgDefault.viewBox.x + this.svgDefault.viewBox.width\n )\n vx = this.svgDefault.viewBox.x + this.svgDefault.viewBox.width - this.viewBox.width;\n\n if (vy < this.svgDefault.viewBox.y) vy = this.svgDefault.viewBox.y;\n else if (\n this.viewBox.height + vy >\n this.svgDefault.viewBox.y + this.svgDefault.viewBox.height\n )\n vy =\n this.svgDefault.viewBox.y +\n this.svgDefault.viewBox.height -\n this.viewBox.height;\n }\n\n this.scroll.vx = vx;\n this.scroll.vy = vy;\n }\n /**\n * Event handler - called when map scroll ends\n * @param {JQuery.TriggeredEvent} e\n * @param {MapSVGMap} mapsvg\n * @param {boolean} noClick\n * @returns {boolean}\n * @event\n * @private\n */\n scrollEnd(e: JQuery.TouchEventBase, mapsvg: MapSVGMap, noClick?: boolean): void {\n setTimeout(() => {\n this.enableAnimation();\n this.scrollStarted = false;\n this.isScrolling = false;\n }, 100);\n if (this.googleMaps && this.googleMaps.overlay) {\n this.googleMaps.overlay.draw();\n }\n\n $(this.containers.map).removeClass(\"scrolling\");\n $(document).off(\"keyup.scroll.mapsvg\");\n $(document).off(\"mousemove.scroll.mapsvg\");\n $(document).off(\"mouseup.scroll.mapsvg\");\n\n // call regionClickHandler if mouse did not move more than 5 pixels\n if (noClick !== true && Math.abs(this.scroll.dx) < 5 && Math.abs(this.scroll.dy) < 5) {\n // this.controllers.popoverOffHandler(e);\n /*\n if (this.editMarkers.on && this.clickAddsMarker) this.markerAddClickHandler(e);\n this.events.trigger(\"click\", this, [e, this, this]);\n if (this.objectClickedBeforeScroll) {\n const objectType =\n this.objectClickedBeforeScroll instanceof Marker\n ? \"marker\"\n : this.objectClickedBeforeScroll instanceof Region\n ? \"region\"\n : \"markerCluster\";\n this.events.trigger(\"click.\" + objectType, this, [\n e,\n this.objectClickedBeforeScroll,\n this,\n ]);\n }\n */\n if (this.editMarkers.on) this.clickAddsMarker && this.markerAddClickHandler(e);\n else if (this.objectClickedBeforeScroll)\n if (this.objectClickedBeforeScroll instanceof Marker) {\n this.markerClickHandler(e, this.objectClickedBeforeScroll);\n } else if (this.objectClickedBeforeScroll instanceof Region) {\n this.regionClickHandler(e, this.objectClickedBeforeScroll);\n } else if (this.objectClickedBeforeScroll instanceof MarkerCluster) {\n this.markerClusterClickHandler(e, this.objectClickedBeforeScroll);\n }\n }\n\n this.viewBox.x = this.scroll.vx || this.viewBox.x;\n this.viewBox.y = this.scroll.vy || this.viewBox.y;\n }\n\n setViewBoxByGoogleMapsOverlay(): void {\n const bounds = this.googleMaps.overlay.getPixelBounds();\n const scale = (bounds.ne.x - bounds.sw.x) / this.svgDefault.viewBox.width;\n\n const vb = new ViewBox(\n this.svgDefault.viewBox.x - bounds.sw.x / scale,\n this.svgDefault.viewBox.y - bounds.ne.y / scale,\n this.containers.map.offsetWidth / scale,\n this.containers.map.offsetHeight / scale\n );\n this.setViewBox(vb, false);\n }\n\n /**\n * Shift the map by x,y pixels\n * @param {number} x\n * @param {number} y\n */\n panBy(x: number, y: number): { x: boolean; y: boolean } {\n let tx = this.scroll.tx - x;\n let ty = this.scroll.ty - y;\n\n const scrolled = { x: true, y: true };\n\n if (this.options.scroll.limit) {\n const svg = $(this.containers.svg)[0].getBoundingClientRect();\n const bounds = $(this.containers.map)[0].getBoundingClientRect();\n if ((svg.left - x > bounds.left && x < 0) || (svg.right - x < bounds.right && x > 0)) {\n tx = this.scroll.tx;\n scrolled.x = false;\n }\n if ((svg.top - y > bounds.top && y < 0) || (svg.bottom - y < bounds.bottom && y > 0)) {\n ty = this.scroll.ty;\n scrolled.y = false;\n }\n }\n\n $(this.containers.scrollpane).css({\n transform: \"translate(\" + tx + \"px,\" + ty + \"px)\",\n });\n\n this.scroll.tx = tx;\n this.scroll.ty = ty;\n\n if (scrolled.x || scrolled.y) {\n const moveX = scrolled.x ? x : 0;\n const moveY = scrolled.y ? y : 0;\n\n this.movingItemsMoveScreenPositionBy(moveX, moveY);\n\n if (this.googleMaps.map) {\n let point = this.googleMaps.map.getCenter();\n\n const projection = this.googleMaps.overlay.getProjection();\n\n const pixelpoint = projection.fromLatLngToDivPixel(point);\n pixelpoint.x += moveX;\n pixelpoint.y += moveY;\n\n point = projection.fromDivPixelToLatLng(pixelpoint);\n\n this.googleMaps.map.setCenter(point);\n }\n }\n\n return scrolled;\n }\n /**\n * Save the Region ID that was clicked before starting map scroll.\n * It is used to trigger .regionClickHandler() later if scroll was less than 5px\n */\n setObjectClickedBeforeScroll(object: Region | Marker | MarkerCluster): void {\n this.objectClickedBeforeScroll = object;\n }\n /**\n * Event hanlder\n * @param _e\n * @param mapsvg\n * @private\n * @event\n */\n touchStart(_e: JQuery.TouchEventBase, mapsvg: MapSVGMap): void {\n _e.preventDefault();\n\n // stop scroll and cancel click event\n if (this.scrollStarted) {\n this.scrollEnd(_e, mapsvg, true);\n }\n const e = _e.originalEvent;\n\n if (this.options.zoom.fingers && e.touches && e.touches.length == 2) {\n // this.touchZoomStartViewBox = this.viewBox;\n // this.touchZoomStartScale = this.scale;\n this.touchZoomStart = true;\n this.scaleDistStart = Math.hypot(\n e.touches[0].pageX - e.touches[1].pageX,\n e.touches[0].pageY - e.touches[1].pageY\n );\n } else if (e.touches && e.touches.length == 1) {\n this.scrollStart(_e, mapsvg);\n }\n\n $(document)\n .on(\"touchmove.scroll.mapsvg\", (e: JQuery.TouchEventBase) => {\n e.preventDefault();\n this.touchMove(e, this);\n })\n .on(\"touchend.scroll.mapsvg\", (e: JQuery.TouchEventBase) => {\n e.preventDefault();\n this.touchEnd(e, this);\n });\n }\n /**\n * Event hanlder\n * @param {JQuery.TriggeredEvent} _e\n * @param mapsvg\n * @private\n */\n touchMove(_e: JQuery.TouchEventBase, mapsvg: MapSVGMap): void {\n _e.preventDefault();\n const e = _e.originalEvent;\n\n if (this.options.zoom.fingers && e.touches && e.touches.length == 2) {\n if (!MapSVG.ios) {\n // e.scale is present on iOS devices only so we need to add \"ts-ignore\"\n // @ts-ignore\n e.scale =\n Math.hypot(\n e.touches[0].pageX - e.touches[1].pageX,\n e.touches[0].pageY - e.touches[1].pageY\n ) / this.scaleDistStart;\n }\n\n // e.scale is present on iOS devices only so we need to add \"ts-ignore\"\n // @ts-ignore\n if (e.scale != 1 && this.canZoom) {\n // @ts-ignore\n const d = e.scale > 1 ? 1 : -1;\n\n const cx =\n e.touches[0].pageX >= e.touches[1].pageX\n ? e.touches[0].pageX -\n (e.touches[0].pageX - e.touches[1].pageX) / 2 -\n $(this.containers.map).offset().left\n : e.touches[1].pageX -\n (e.touches[1].pageX - e.touches[0].pageX) / 2 -\n $(this.containers.map).offset().left;\n const cy =\n e.touches[0].pageY >= e.touches[1].pageY\n ? e.touches[0].pageY -\n (e.touches[0].pageY - e.touches[1].pageY) -\n $(this.containers.map).offset().top\n : e.touches[1].pageY -\n (e.touches[1].pageY - e.touches[0].pageY) -\n $(this.containers.map).offset().top;\n\n const center = this.converter.convertPixelToSVG(new ScreenPoint(cx, cy));\n\n if (d > 0) this.zoomIn(center);\n else this.zoomOut(center);\n }\n } else if (e.touches && e.touches.length == 1) {\n this.scrollMove(_e);\n }\n }\n /**\n * Event hanlder\n * @param _e\n * @param mapsvg\n * @private\n */\n touchEnd(_e: JQuery.TouchEventBase, mapsvg: MapSVGMap): void {\n _e.preventDefault();\n const e = _e.originalEvent;\n if (this.touchZoomStart) {\n this.touchZoomStart = false;\n } else if (this.scrollStarted) {\n this.scrollEnd(_e, mapsvg);\n }\n\n $(document).off(\"touchmove.scroll.mapsvg\");\n $(document).off(\"touchend.scroll.mapsvg\");\n }\n /**\n * Returns array of IDs of selected Regions\n * @returns {String[]}\n */\n getSelected(): string[] {\n return this.selected_id;\n }\n /**\n * Selects a Region\n * @param {Region|string} id - Region or ID\n * @param {bool} skipDirectorySelection\n * @returns {boolean}\n */\n selectRegion(id: string | Region, skipDirectorySelection?: boolean): void {\n let region: Region;\n\n // this.hidePopover();\n if (typeof id == \"string\") {\n region = this.getRegion(id);\n } else {\n region = id;\n }\n if (!region) return;\n\n let ids: Array;\n\n if (this.options.multiSelect && !this.editRegions.on) {\n if (region.selected) {\n this.deselectRegion(region);\n if (!skipDirectorySelection && this.options.menu.on) {\n if (this.options.menu.source == \"database\") {\n if (region.objects && region.objects.length) {\n ids = region.objects.map((obj: CustomObject) => {\n return obj.id.toString();\n });\n }\n } else {\n ids = [region.id];\n }\n this.controllers.directory.deselectItems();\n }\n\n return;\n }\n } else if (this.selected_id.length > 0) {\n this.deselectAllRegions();\n if (!skipDirectorySelection && this.options.menu.on) {\n if (this.options.menu.source == \"database\") {\n if (region.objects && region.objects.length) {\n ids = region.objects.map((obj: CustomObject) => {\n return obj.id.toString();\n });\n }\n } else {\n ids = [region.id];\n }\n this.controllers.directory.deselectItems();\n }\n }\n\n this.selected_id.push(region.id);\n region.select();\n\n const skip = this.options.actions.region.click.filterDirectory;\n\n if (\n !skip &&\n !skipDirectorySelection &&\n this.options.menu.on &&\n this.controllers &&\n this.controllers.directory\n ) {\n if (this.options.menu.source == \"database\") {\n if (region.objects && region.objects.length) {\n ids = region.objects.map((obj: CustomObject) => {\n return obj.id.toString();\n });\n } else {\n ids = [region.id];\n }\n } else {\n ids = [region.id];\n }\n this.controllers.directory.selectItems(ids);\n }\n\n if (\n this.options.actions.region.click.addIdToUrl &&\n !this.options.actions.region.click.showAnotherMap\n ) {\n window.location.hash = \"/m/\" + region.id;\n // history.replaceState(null, null, region.id);\n // history.replaceState(\"\", document.title, window.location.pathname\n // + window.location.search + '#m_'+region.id);\n }\n }\n /**\n * Deselects all Regions\n */\n deselectAllRegions(): void {\n $.each(this.selected_id, (index, id) => {\n this.deselectRegion(this.getRegion(id));\n });\n }\n /**\n * Deselects one Region\n * @param {Region} region\n */\n deselectRegion(region: Region): void {\n if (!region) region = this.getRegion(this.selected_id[0]);\n if (region) {\n region.deselect();\n const i = $.inArray(region.id, this.selected_id);\n this.selected_id.splice(i, 1);\n // if(MapSVG.browser.ie)//|| MapSVG.browser.firefox)\n // this.mapAdjustStrokes();\n }\n if (this.options.actions.region.click.addIdToUrl) {\n // window.location.hash = ' '; //window.location.hash.replace(region.id,'');\n // history.replaceState(\"\", document.title, window.location.pathname\n // + window.location.search);\n if (window.location.hash.indexOf(region.id) !== -1) {\n history.replaceState(null, null, \" \");\n }\n }\n }\n /**\n * Highlights an array of Regions (used on mouseover)\n * @param {Region[]} regions\n */\n highlightRegions(regions: Region[]): void {\n regions.forEach((region) => {\n if (region && !region.selected && !region.disabled) {\n this.highlightedRegions.push(region);\n region.highlight();\n }\n });\n }\n /**\n * Unhighlights all Regions (used on mouseout)\n */\n unhighlightRegions(): void {\n this.highlightedRegions.forEach((region: Region) => {\n if (region && !region.selected && !region.disabled) region.unhighlight();\n });\n this.highlightedRegions = [];\n }\n /**\n * Selects a Marker\n * @param {Marker} marker\n */\n selectMarker(marker: Marker): void {\n if (!(marker instanceof Marker)) return;\n\n this.deselectAllMarkers();\n marker.select();\n this.selected_marker = marker;\n\n $(this.layers.markers).addClass(\"mapsvg-with-marker-active\");\n\n if (this.options.menu.on && this.options.menu.source == \"database\") {\n this.controllers.directory.deselectItems();\n this.controllers.directory.selectItems(marker.object.id);\n }\n }\n\n /**\n * Deselects all Markers\n */\n deselectAllMarkers(): void {\n this.selected_marker && this.selected_marker.deselect();\n $(this.layers.markers).removeClass(\"mapsvg-with-marker-active\");\n }\n\n /**\n * Deselects one Marker\n * @param {Marker} marker\n */\n deselectMarker(marker: Marker): void {\n if (marker) {\n marker.deselect();\n }\n }\n /**\n * Highlight marker\n * @param {Marker} marker\n */\n highlightMarker(marker: Marker): void {\n $(this.layers.markers).addClass(\"mapsvg-with-marker-hover\");\n marker.highlight();\n this.highlighted_marker = marker;\n }\n /**\n * Unhighlights all Regions (used on mouseout)\n */\n unhighlightMarker(): void {\n $(this.layers.markers).removeClass(\"mapsvg-with-marker-hover\");\n this.highlighted_marker && this.highlighted_marker.unhighlight();\n }\n /**\n * Converts mouse pointer coordinates to SVG coordinates\n * @param {object} e - Event object\n * @returns {Array} - [x,y] SVG coordinates\n */\n convertMouseToSVG(e: JQuery.TriggeredEvent): SVGPoint {\n const mc = MapSVG.mouseCoords(e);\n const x = mc.x - $(this.containers.map).offset().left;\n const y = mc.y - $(this.containers.map).offset().top;\n const screenPoint = new ScreenPoint(x, y);\n return this.converter.convertPixelToSVG(screenPoint);\n }\n\n /**\n * Converts map geo-boundaries to viewBox\n * @param sw\n * @param ne\n * @returns {*[]}\n *\n * @private\n * @deprecated\n */\n /*\n convertGeoBoundsToViewBox (geoViewBox: GeoViewBox): ViewBox {\n //sw, ne\n\n var lat = parseFloat(coords[0]);\n var lon = parseFloat(coords[1]);\n var x = (lon - this.geoViewBox.leftLon) * (this.svgDefault.viewBox.width / this.converter.mapLonDelta);\n\n var lat = lat * 3.14159 / 180;\n // var worldMapWidth = ((this.svgDefault.width / this.converter.mapLonDelta) * 360) / (2 * 3.14159);\n var worldMapWidth = ((this.svgDefault.viewBox.width / this.converter.mapLonDelta) * 360) / (2 * 3.14159);\n var mapOffsetY = (worldMapWidth / 2 * Math.log((1 + Math.sin(this.mapLatBottomDegree)) / (1 - Math.sin(this.mapLatBottomDegree))));\n var y = this.svgDefault.viewBox.height - ((worldMapWidth / 2 * Math.log((1 + Math.sin(lat)) / (1 - Math.sin(lat)))) - mapOffsetY);\n\n x += this.svgDefault.viewBox.x;\n y += this.svgDefault.viewBox.y;\n\n return [x, y];\n }\n */\n\n /**\n * For choropleth map: returns color for given number value\n * @param {number} choroplethValue - Number value\n * @returns {{r: number, g: number, b: number, a: number}} - Color values, 0-255.\n */\n pickChoroplethColor(choroplethValue: number): { r: number; g: number; b: number; a: number } {\n const w =\n (choroplethValue - this.options.choropleth.coloring.gradient.values.min) /\n this.options.choropleth.coloring.gradient.values.maxAdjusted;\n const rgba = {\n r: Math.round(\n this.options.choropleth.coloring.gradient.colors.diffRGB.r * w +\n this.options.choropleth.coloring.gradient.colors.lowRGB.r\n ),\n g: Math.round(\n this.options.choropleth.coloring.gradient.colors.diffRGB.g * w +\n this.options.choropleth.coloring.gradient.colors.lowRGB.g\n ),\n b: Math.round(\n this.options.choropleth.coloring.gradient.colors.diffRGB.b * w +\n this.options.choropleth.coloring.gradient.colors.lowRGB.b\n ),\n a: Math.round(\n this.options.choropleth.coloring.gradient.colors.diffRGB.a * w +\n this.options.choropleth.coloring.gradient.colors.lowRGB.a\n ),\n };\n return rgba;\n }\n /**\n * Checks if Region should be disabled\n * @param {string} id - Region ID\n * @param {string} svgfill - Region color (\"fill\" attribute)\n * @returns {boolean} - \"true\" if Region should be disabled.\n */\n isRegionDisabled(id: string, svgfill: string): boolean {\n if (this.options.regions[id] && (this.options.regions[id].disabled || svgfill == \"none\")) {\n return true;\n } else if (\n (this.options.regions[id] == undefined ||\n MapSVG.parseBoolean(this.options.regions[id].disabled)) &&\n (this.options.disableAll || svgfill == \"none\" || id == \"labels\" || id == \"Labels\")\n ) {\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * Gets map settings from the server\n */\n loadMap(id: number | string, container: HTMLElement): void {\n if (!(container instanceof HTMLElement)) {\n console.error(\"Can't load a new map: container was not provided.\");\n return;\n }\n\n const previousMapsIds = [...this.options.previousMapsIds];\n const currentMapId = this.id;\n if (previousMapsIds[previousMapsIds.length - 1] !== id) {\n previousMapsIds.push(currentMapId);\n } else {\n previousMapsIds.pop();\n }\n\n let showPreviousMapButton;\n if (\n typeof this.options.actions.region.click.showAnotherMapContainerId !== \"undefined\" &&\n this.options.actions.region.click.showAnotherMapContainerId !== \"\"\n ) {\n showPreviousMapButton = false;\n } else {\n showPreviousMapButton = this.options.controls.previousMap;\n }\n\n const mapsRepo = new MapsRepository();\n const sameContainer = container === this.containers.map;\n\n mapsRepo.findById(id).done((map) => {\n sameContainer && this.destroy();\n const newMap = new MapSVGMap(container.getAttribute(\"id\"), map);\n newMap.events.on(\"afterLoad\", function () {\n this.options.previousMapsIds = previousMapsIds;\n this.options.controls.previousMap = showPreviousMapButton;\n this.setControls(this.options.controls);\n });\n });\n }\n\n /**\n * Load previous map from the history (MapSVGMap.options.previousMapsIds)\n */\n loadPreviousMap(): void {\n const previousMapId = this.options.previousMapsIds[this.options.previousMapsIds.length - 1];\n const container: HTMLElement = document.getElementById(this.containerId);\n\n this.loadMap(previousMapId, container);\n }\n markerClusterClickHandler(e: JQuery.TriggeredEvent, markerCluster: MarkerCluster): void {\n this.objectClickedBeforeScroll = null;\n if (this.eventsPreventList[\"click\"]) return;\n this.zoomTo(markerCluster.markers);\n return;\n }\n regionClickHandler(e: JQuery.TriggeredEvent, region: Region): void {\n this.objectClickedBeforeScroll = null;\n if (this.eventsPreventList[\"click\"]) return;\n\n this.selectRegion(region.id);\n\n if (this.editRegions.on) {\n this.regionEditHandler.call(region);\n return;\n }\n\n const actions = this.options.actions;\n\n if (actions.region.click.zoom) {\n this.zoomTo(region, parseInt(actions.region.click.zoomToLevel));\n }\n\n if (actions.region.click.filterDirectory) {\n const query = new Query({\n filters: {\n regions: {\n table_name: this.regionsRepository.getSchema().name,\n region_ids: [region.id],\n },\n },\n });\n\n this.objectsRepository.query.resetFilters();\n this.setFilterOut();\n\n this.objectsRepository.find(query).done(() => {\n if (this.controllers.popover) {\n this.controllers.popover.redraw(region.forTemplate());\n }\n if (this.controllers.detailsView) {\n this.controllers.detailsView.redraw(region.forTemplate());\n }\n });\n this.updateFiltersState();\n }\n\n if (actions.region.click.showDetails) {\n this.loadDetailsView(region);\n }\n\n if (actions.region.click.showPopover) {\n if (actions.region.click.zoom) {\n setTimeout(() => {\n this.showPopover(region);\n }, 400);\n } else {\n this.showPopover(region);\n }\n } else if (e && e.type.indexOf(\"touch\") !== -1 && actions.region.touch.showPopover) {\n if (actions.region.click.zoom) {\n setTimeout(() => {\n this.showPopover(region);\n }, 400);\n } else {\n this.showPopover(region);\n }\n }\n\n if (actions.region.click.goToLink) {\n const linkParts = actions.region.click.linkField.split(\".\");\n let url;\n if (linkParts.length > 1) {\n const obj = linkParts.shift();\n const attr = \".\" + linkParts.join(\".\");\n if (obj == \"Region\") {\n if (region.data) {\n try {\n url = eval(\"region.data\" + attr);\n } catch (err) {\n console.log(\"No such field as region.data\" + attr);\n }\n }\n } else {\n if (region.objects && region.objects[0]) {\n try {\n url = eval(\"region.objects[0]\" + attr);\n } catch (err) {\n console.log(\"No such field as region.objects[0]\" + attr);\n }\n }\n }\n\n if (url && !this.disableLinks) {\n if (this.editMode) {\n alert(\"Redirect: \" + url + \"\\nLinks are disabled in the preview.\");\n return;\n }\n if (actions.region.click.newTab) {\n const win = window.open(url, \"_blank\");\n win.focus();\n } else {\n window.location.href = url;\n }\n }\n }\n }\n if (actions.region.click.showAnotherMap) {\n if (this.editMode) {\n alert('\"Show another map\" action is disabled in the preview');\n return;\n }\n const linkParts = actions.region.click.showAnotherMapField.split(\".\");\n let url;\n if (linkParts.length > 1) {\n const obj = linkParts.shift();\n const attr = \".\" + linkParts.join(\".\");\n let map_id;\n if (obj == \"Region\") {\n if (region.data) map_id = eval(\"region.data\" + attr);\n } else {\n if (region.objects && region.objects[0])\n map_id = eval(\"region.objects[0]\" + attr);\n }\n\n if (map_id) {\n const container = actions.region.click.showAnotherMapContainerId\n ? $(\"#\" + actions.region.click.showAnotherMapContainerId)[0]\n : $(this.containers.map)[0];\n this.loadMap(map_id, container);\n }\n }\n }\n this.events.trigger(\"click.region\", region, [e, region, this]);\n }\n markerClickHandler(e: JQuery.TriggeredEvent, marker: Marker): void {\n this.objectClickedBeforeScroll = null;\n if (this.eventsPreventList[\"click\"]) return;\n\n const actions = this.options.actions;\n\n this.selectMarker(marker);\n const passingObject = marker.object;\n\n if (actions.marker.click.zoom) {\n this.zoomTo(marker, parseInt(actions.marker.click.zoomToLevel));\n }\n\n if (actions.marker.click.filterDirectory) {\n const query = new Query({ filters: { id: marker.object.id } });\n this.objectsRepository.find(query);\n this.updateFiltersState();\n }\n\n if (actions.marker.click.showDetails) this.loadDetailsView(passingObject);\n if (actions.marker.click.showPopover) {\n if (actions.marker.click.zoom) {\n setTimeout(() => {\n this.showPopover(passingObject);\n }, 500);\n } else {\n this.showPopover(passingObject);\n }\n } else if (e && e.type.indexOf(\"touch\") !== -1 && actions.marker.touch.showPopover) {\n if (actions.marker.click.zoom) {\n setTimeout(() => {\n this.showPopover(passingObject);\n }, 500);\n } else {\n this.showPopover(passingObject);\n }\n }\n if (actions.marker.click.goToLink) {\n const linkParts = actions.marker.click.linkField.split(\".\");\n let url;\n if (linkParts.length > 1) {\n const obj = linkParts.shift();\n const attr = \".\" + linkParts.join(\".\");\n try {\n url = eval(\"passingObject\" + attr);\n } catch (err) {\n console.log(\"MapSVG: No such field as passingObject\" + attr);\n }\n if (url && !this.disableLinks)\n if (this.editMode) {\n alert(\"Redirect: \" + url + \"\\nLinks are disabled in the preview.\");\n return;\n }\n if (actions.marker.click.newTab) {\n const win = window.open(url, \"_blank\");\n win.focus();\n } else {\n window.location.href = url;\n }\n }\n }\n this.events.trigger(\"click.marker\", marker, [e, marker, this]);\n }\n /**\n * Checks if file exists by provided URL.\n * @param {string} url\n * @returns {boolean}\n *\n * @private\n */\n fileExists(url: string): boolean {\n if (url.substr(0, 4) == \"data\") return true;\n const http = new XMLHttpRequest();\n http.open(\"HEAD\", url, false);\n http.send();\n return http.status != 404;\n }\n\n /**\n * Hides all markers\n * @private\n */\n hideMarkers(): void {\n this.markers.forEach(function (marker) {\n marker.hide();\n });\n $(this.containers.wrap).addClass(\"mapsvg-edit-marker-mode\");\n }\n /**\n * Hides all markers except one.\n * Used in Map Editor.\n * @param {string} id - ID of the Marker\n * @private\n */\n hideMarkersExceptOne(id: string): void {\n this.markers.forEach(function (marker) {\n if (typeof id === \"undefined\" || (marker.object && id != marker.object.id)) {\n marker.hide();\n }\n });\n\n $(this.containers.wrap).addClass(\"mapsvg-edit-marker-mode\");\n }\n /**\n * Shows all markers after .hideMarkersExceptOne()\n * Used in Map Editor.\n * @private\n */\n showMarkers(): void {\n this.markers.forEach(function (m) {\n m.show();\n });\n this.deselectAllMarkers();\n // $(this.containers.wrap).removeClass('mapsvg-clusters-hidden');\n $(this.containers.wrap).removeClass(\"mapsvg-edit-marker-mode\");\n }\n /**\n * Event handler that creates marker on click on the map.\n * Used in the Map Editor.\n * @param {object} e - Event object\n * @returns {boolean}\n */\n markerAddClickHandler(e: JQuery.TriggeredEvent): void {\n // Don't add marker if marker was clicked\n if ($(e.target).hasClass(\"mapsvg-marker\")) return;\n const svgPoint = this.getSvgPointAtClick(e);\n const geoPoint = this.isGeo() ? this.converter.convertSVGToGeo(svgPoint) : null;\n\n if (!$.isNumeric(svgPoint.x) || !$.isNumeric(svgPoint.y)) return;\n\n if (this.editingMarker) {\n if (geoPoint) {\n this.editingMarker.location.setGeoPoint(geoPoint);\n } else {\n this.editingMarker.location.setSvgPoint(svgPoint);\n }\n return;\n }\n const location = new Location({\n svgPoint: svgPoint,\n geoPoint: geoPoint,\n img: this.options.defaultMarkerImage,\n });\n\n const marker = new Marker({\n location: location,\n mapsvg: this,\n });\n this.markerAdd(marker);\n\n this.markerEditHandler && this.markerEditHandler.call(location, location);\n }\n\n private getSvgPointAtClick(\n e: JQuery.TriggeredEvent | JQuery.MouseEventBase | MouseEvent\n ): SVGPoint {\n const mc = MapSVG.mouseCoords(e);\n const x = mc.x - $(this.containers.map).offset().left;\n const y = mc.y - $(this.containers.map).offset().top;\n const screenPoint = new ScreenPoint(x, y);\n return this.converter.convertPixelToSVG(screenPoint);\n }\n\n /**\n * Sets default marker image.\n * Used in Map Editor.\n * @param {string} src - Image URL\n * @private\n */\n setDefaultMarkerImage(src: string): void {\n this.options.defaultMarkerImage = src;\n }\n\n /**\n * Checks and remebers if marker images should be set by a field value\n * @private\n */\n setMarkerImagesDependency(): void {\n this.locationField = this.objectsRepository.schema.getFieldByType(\"location\");\n // @ts-ignore\n if (\n this.locationField &&\n this.locationField.markersByFieldEnabled &&\n this.locationField.markerField &&\n Object.values(this.locationField.markersByField).length > 0\n ) {\n this.setMarkersByField = true;\n } else {\n this.setMarkersByField = false;\n }\n }\n\n /**\n * Returns default marker image or marker image by field value if such option is enabled\n * @param {Number|String} fieldValue\n * @returns {String} URL of marker image\n * @private\n */\n getMarkerImage(fieldValueOrObject: any, location?: Location): string {\n let fieldValue;\n\n if (this.setMarkersByField) {\n if (typeof fieldValueOrObject === \"object\") {\n // @ts-ignore\n fieldValue = fieldValueOrObject[this.locationField.markerField];\n if (this.locationField.markerField === \"regions\") {\n fieldValue = fieldValue[0] && fieldValue[0].id;\n } else if (typeof fieldValue === \"object\" && fieldValue.length) {\n fieldValue = fieldValue[0].value;\n }\n } else {\n fieldValue = fieldValueOrObject;\n }\n // @ts-ignore\n if (this.locationField.markersByField[fieldValue]) {\n // @ts-ignore\n return this.locationField.markersByField[fieldValue];\n }\n }\n\n return location && location.imagePath\n ? location.imagePath\n : this.options.defaultMarkerImage\n ? this.options.defaultMarkerImage\n : MapSVG.urls.root + \"markers/_pin_default.png\";\n }\n\n /**\n * Sets on/off \"edit markers\" mode\n * @param {bool} on - on/off\n * @param {bool} clickAddsMarker - defines if click on the map should add a marker\n * @private\n */\n setMarkersEditMode(on: boolean, clickAddsMarker: boolean): void {\n this.editMarkers.on = MapSVG.parseBoolean(on);\n this.clickAddsMarker = this.editMarkers.on;\n this.setEventHandlers();\n }\n\n /**\n * Sets on/off \"edit regions\" mode\n * Used in Map Editor.\n * @param {bool} on - on/off\n *\n * @private\n */\n setRegionsEditMode(on: boolean): void {\n this.editRegions.on = MapSVG.parseBoolean(on);\n this.deselectAllRegions();\n this.setEventHandlers();\n }\n\n /**\n * Enables edit mode (which means that the map is going to be shown in the Map Editor)\n * Used in the Map Editor.\n * @param {bool} on\n * @private\n */\n setEditMode(on: boolean): void {\n this.editMode = on;\n }\n\n /**\n * Enables \"Edit objects\" mode\n * Used in the Map Editor.\n * @param {bool} on\n * @private\n */\n setDataEditMode(on: boolean): void {\n this.editData.on = MapSVG.parseBoolean(on);\n this.deselectAllRegions();\n this.setEventHandlers();\n }\n\n /**\n * Downloads SVG file.\n * @private\n */\n download() {\n window.location.href = window.location.origin + this.options.source;\n }\n\n /**\n * Adjusts popover position. User on zoom and when map container is resized.\n *\n */\n popoverAdjustScreenPosition(): void {\n if (this.controllers.popover instanceof PopoverController) {\n this.controllers.popover.adjustScreenPosition();\n }\n }\n\n /**\n * Moves popover position. User on zoom and when map container is resized.\n *\n * @param {number} deltaX\n * @param {number} deltaY\n */\n popoverMoveScreenPositionBy(deltaX: number, deltaY: number): void {\n if (this.controllers.popover instanceof PopoverController) {\n this.controllers.popover.moveSrceenPositionBy(deltaX, deltaY);\n }\n }\n\n /**\n * Shows a popover for provided Region or DB Object.\n * @param {Region|object} object - Region or DB Object\n *\n * @example\n * var region = mapsvg.getRegion(\"US-TX\");\n * mapsvg.showPopover(region);\n */\n showPopover(object: Region | CustomObject): void {\n const mapObject =\n object instanceof Region\n ? object\n : object.location && object.location.marker\n ? object.location.marker\n : null;\n if (!mapObject) return;\n\n let point;\n if (mapObject instanceof Marker) {\n point = mapObject.svgPoint;\n } else {\n point = mapObject.getCenterSVG();\n }\n this.controllers.popover && this.controllers.popover.destroy();\n this.controllers.popover = new PopoverController({\n container: this.containers.popover,\n point: point,\n yShift: mapObject instanceof Marker ? mapObject.height : 0,\n template:\n object instanceof Region\n ? this.options.templates.popoverRegion\n : this.options.templates.popoverMarker,\n mapsvg: this,\n data: object.getData(),\n mapObject: mapObject,\n scrollable: true,\n withToolbar: !(MapSVG.isPhone && this.options.popovers.mobileFullscreen),\n events: {\n shown: (popover: PopoverController) => {\n if (this.options.popovers.centerOn) {\n const shift = popover.containers.main.offsetHeight / 2;\n if (\n this.options.popovers.centerOn &&\n !(MapSVG.isPhone && this.options.popovers.mobileFullscreen)\n ) {\n this.centerOn(mapObject, shift);\n }\n }\n this.popoverShowingFor = mapObject;\n this.events.trigger(\"shown.popover\", this, [this, popover]);\n $(window).trigger(\"shown.popover\", [this, popover]);\n },\n closed: (popover: PopoverController) => {\n this.options.popovers.resetViewboxOnClose && this.viewBoxReset(true);\n this.popoverShowingFor = null;\n this.events.trigger(\"closed.popover\", this, [this, popover]);\n },\n resize: (popover: PopoverController) => {\n if (this.options.popovers.centerOn) {\n const shift = popover.containers.main.offsetHeight / 2;\n if (\n this.options.popovers.centerOn &&\n !(MapSVG.isPhone && this.options.popovers.mobileFullscreen)\n ) {\n this.centerOn(mapObject, shift);\n }\n }\n },\n },\n });\n this.controllers.popover._init();\n }\n\n /**\n * Hides the popover\n */\n hidePopover(): void {\n this.controllers.popover && this.controllers.popover.close();\n }\n\n /**\n * Event handler that catches clicks outside of the popover and closes the popover.\n * @param {object} e - Event object\n */\n popoverOffHandler(e: JQuery.TriggeredEvent): void {\n if (\n this.isScrolling ||\n $(e.target).closest(\".mapsvg-popover\").length ||\n $(e.target).hasClass(\"mapsvg-btn-map\")\n )\n return;\n this.controllers.popover && this.controllers.popover.close();\n }\n\n /**\n * Mouseover event handler for Regions and Markers\n * @param {object} e - Event object\n * @param {Marker|Region} object\n * @private\n */\n mouseOverHandler(e: JQuery.TriggeredEvent, object: Marker | Region | MarkerCluster): void {\n if (this.eventsPreventList[\"mouseover\"]) {\n return;\n }\n\n if (object instanceof Marker) {\n if (this.options.actions.marker.mouseover.showTooltip) {\n this.showTooltip(object);\n }\n }\n\n if (object instanceof Region) {\n if (this.options.actions.region.mouseover.showTooltip) {\n this.showTooltip(object);\n }\n }\n\n let ids: any[];\n if (this.options.menu.on) {\n if (this.options.menu.source == \"database\") {\n if (object instanceof Region && object.objects.length) {\n ids = object.objects.map((obj) => {\n return obj.id;\n });\n }\n if (object instanceof Marker) {\n ids = object.object ? [object.object.id] : [];\n }\n } else {\n if (object instanceof Region) {\n ids = [object.id];\n }\n if (\n this instanceof Marker &&\n // @ts-ignore\n object.object.regions &&\n // @ts-ignore\n object.object.regions.length\n ) {\n // @ts-ignore\n ids = object.object.regions.map((obj) => {\n return obj.id;\n });\n }\n }\n this.controllers.directory.highlightItems(ids);\n }\n\n if (object instanceof Region) {\n if (!object.selected) object.highlight();\n this.events.trigger(\"mouseover.region\", object, [e, this]);\n } else {\n this.highlightMarker(object);\n this.events.trigger(\"mouseover.marker\", object, [e, this]);\n }\n }\n\n public showTooltip(object: Marker | Region | MarkerCluster): void {\n let name, _object;\n if (object instanceof Region) {\n name = \"tooltipRegion\";\n _object = object;\n } else if (object instanceof Marker) {\n name = \"tooltipMarker\";\n _object = object.object;\n } else {\n name = \"tooltipMarker\";\n _object = object;\n }\n if (_object != null && this.popoverShowingFor !== object) {\n this.controllers.tooltip.setMainTemplate(this.options.templates[name]);\n this.controllers.tooltip.redraw(_object.getData());\n this.controllers.tooltip.show();\n }\n }\n\n /**\n * Mouseout event handler for Regions and Markers\n * @param {object} e - Event object\n * @param {Marker|Region} object\n * @private\n */\n mouseOutHandler(e: JQuery.TriggeredEvent, object: Marker | Region | MarkerCluster): void {\n if (this.eventsPreventList[\"mouseout\"]) {\n return;\n }\n\n if (this.controllers.tooltip) this.controllers.tooltip.hide();\n\n if (object instanceof Region) {\n if (!object.selected) object.unhighlight();\n this.events.trigger(\"mouseout.region\", object, [e, this]);\n } else {\n this.unhighlightMarker();\n this.events.trigger(\"mouseout.marker\", object, [e, this]);\n }\n\n let ids: any[];\n if (this.options.menu.on) {\n if (this.options.menu.source == \"database\") {\n if (object instanceof Marker) {\n const marker = object;\n ids = marker.object ? [marker.object.id] : [];\n }\n }\n this.controllers.directory.unhighlightItems();\n }\n }\n\n /**\n * Prevents provided event from being fired\n * @param {string} event - Event name\n * @private\n */\n eventsPrevent(event: string): void {\n this.eventsPreventList[event] = true;\n }\n\n /**\n * Restores event disabled by .eventsPrevent()\n * @param {string} event - Event name\n * @private\n */\n eventsRestore(event: string): void {\n if (event) {\n this.eventsPreventList[event] = false;\n } else {\n this.eventsPreventList = {};\n }\n }\n\n /**\n * Sets all event handlers\n * @private\n */\n setEventHandlers() {\n const _this = this;\n\n $(_this.containers.map).off(\".common.mapsvg\");\n $(_this.containers.scrollpane).off(\".common.mapsvg\");\n $(document).off(\".scroll.mapsvg\");\n $(document).off(\".scrollInit.mapsvg\");\n\n if (_this.editMarkers.on) {\n $(_this.containers.map).on(\n \"touchstart.common.mapsvg mousedown.common.mapsvg\",\n \".mapsvg-marker\",\n function (e) {\n e.originalEvent.preventDefault();\n const marker = _this.getMarker($(this).attr(\"id\"));\n const startCoords = MapSVG.mouseCoords(e);\n marker.drag(startCoords, _this.scale);\n\n /*\n marker.drag(startCoords, _this.scale, function() {\n if (_this.mapIsGeo){\n var svgPoint = new SVGPoint(this.x + this.width / 2, this.y + (this.height-1));\n this.geoCoords = _this.converter.convertSVGToGeo(svgPoint);\n }\n //_this.markerEditHandler && _this.markerEditHandler.call(this,true);\n },function(){\n //_this.markerEditHandler && _this.markerEditHandler.call(this);\n });\n\n */\n }\n );\n }\n\n // REGIONS\n if (!_this.editMarkers.on) {\n $(_this.containers.map)\n .on(\"mouseover.common.mapsvg\", \".mapsvg-region\", function (e) {\n const id = $(this).attr(\"id\");\n _this.mouseOverHandler.call(_this, e, _this.getRegion(id));\n })\n .on(\"mouseleave.common.mapsvg\", \".mapsvg-region\", function (e) {\n const id = $(this).attr(\"id\");\n _this.mouseOutHandler.call(_this, e, _this.getRegion(id));\n });\n }\n if (!_this.editRegions.on) {\n $(_this.containers.map)\n .on(\"mouseover.common.mapsvg\", \".mapsvg-marker\", function (e) {\n const id = $(this).attr(\"id\");\n _this.mouseOverHandler.call(_this, e, _this.getMarker(id));\n })\n .on(\"mouseleave.common.mapsvg\", \".mapsvg-marker\", function (e) {\n const id = $(this).attr(\"id\");\n _this.mouseOutHandler.call(_this, e, _this.getMarker(id));\n });\n }\n\n if (_this.options.scroll.spacebar) {\n $(document).on(\"keydown.scroll.mapsvg\", function (e) {\n if (\n !(\n document.activeElement.tagName === \"INPUT\" &&\n $(document.activeElement).attr(\"type\") === \"text\"\n ) &&\n !_this.isScrolling &&\n e.keyCode == 32\n ) {\n e.preventDefault();\n $(_this.containers.map).addClass(\"mapsvg-scrollable\");\n $(document)\n .on(\"mousemove.scrollInit.mapsvg\", function (e: JQuery.TouchEventBase) {\n _this.isScrolling = true;\n $(document).off(\"mousemove.scrollInit.mapsvg\");\n _this.scrollStart(e, _this);\n })\n .on(\"keyup.scroll.mapsvg\", function (e: JQuery.TouchEventBase) {\n if (e.keyCode == 32) {\n $(document).off(\"mousemove.scrollInit.mapsvg\");\n $(_this.containers.map).removeClass(\"mapsvg-scrollable\");\n }\n });\n }\n });\n } else if (!_this.options.scroll.on) {\n if (!_this.editMarkers.on) {\n $(_this.containers.map).on(\n \"touchstart.common.mapsvg\",\n \".mapsvg-region\",\n function (e) {\n _this.scroll.touchScrollStart = $(window).scrollTop();\n }\n );\n $(_this.containers.map).on(\n \"touchstart.common.mapsvg\",\n \".mapsvg-marker\",\n function (e) {\n _this.scroll.touchScrollStart = $(window).scrollTop();\n }\n );\n\n $(_this.containers.map).on(\n \"touchend.common.mapsvg mouseup.common.mapsvg\",\n \".mapsvg-region\",\n function (e) {\n if (e.cancelable) {\n e.preventDefault();\n }\n if (\n !_this.scroll.touchScrollStart ||\n _this.scroll.touchScrollStart === $(window).scrollTop()\n ) {\n _this.regionClickHandler(e, _this.getRegion($(this).attr(\"id\")));\n }\n }\n );\n $(_this.containers.map).on(\n \"touchend.common.mapsvg mouseup.common.mapsvg\",\n \".mapsvg-marker\",\n function (e) {\n if (e.cancelable) {\n e.preventDefault();\n }\n if (\n !_this.scroll.touchScrollStart ||\n _this.scroll.touchScrollStart === $(window).scrollTop()\n ) {\n _this.markerClickHandler.call(\n _this,\n e,\n _this.getMarker($(this).attr(\"id\"))\n );\n }\n }\n );\n $(_this.containers.map).on(\n \"touchend.common.mapsvg mouseup.common.mapsvg\",\n \".mapsvg-marker-cluster\",\n function (e) {\n if (e.cancelable) {\n e.preventDefault();\n }\n if (\n !_this.scroll.touchScrollStart ||\n _this.scroll.touchScrollStart == $(window).scrollTop()\n ) {\n const cluster = $(this).data(\"cluster\");\n _this.zoomTo(cluster.markers);\n }\n }\n );\n // }\n } else {\n if (_this.clickAddsMarker)\n $(_this.containers.map).on(\n \"touchend.common.mapsvg mouseup.common.mapsvg\",\n function (e) {\n // e.stopImmediatePropagation();\n if (e.cancelable) {\n e.preventDefault();\n }\n _this.markerAddClickHandler(e);\n }\n );\n }\n } else {\n $(_this.containers.map).on(\n \"touchstart.common.mapsvg mousedown.common.mapsvg\",\n function (e: JQuery.TouchEventBase) {\n if (\n $(e.target).hasClass(\"mapsvg-popover\") ||\n $(e.target).closest(\".mapsvg-popover\").length\n ) {\n // Prevent even dobule firing touchstart+mousedown on clicking popover close button\n if ($(e.target).hasClass(\"mapsvg-popover-close\")) {\n if (e.type == \"touchstart\") {\n if (e.cancelable) {\n e.preventDefault();\n }\n }\n }\n return;\n }\n\n if (e.type == \"touchstart\") {\n if (e.cancelable) {\n e.preventDefault();\n }\n }\n\n let obj: any;\n\n if (\n e.target &&\n $(e.target).attr(\"class\") &&\n $(e.target).attr(\"class\").indexOf(\"mapsvg-region\") != -1\n ) {\n obj = _this.getRegion($(e.target).attr(\"id\"));\n _this.setObjectClickedBeforeScroll(obj);\n } else if (\n e.target &&\n $(e.target).attr(\"class\") &&\n $(e.target).attr(\"class\").indexOf(\"mapsvg-marker\") != -1 &&\n $(e.target).attr(\"class\").indexOf(\"mapsvg-marker-cluster\") === -1\n ) {\n if (_this.editMarkers.on) {\n return;\n }\n obj = _this.getMarker($(e.target).attr(\"id\"));\n _this.setObjectClickedBeforeScroll(obj);\n } else if (\n e.target &&\n $(e.target).attr(\"class\") &&\n $(e.target).attr(\"class\").indexOf(\"mapsvg-marker-cluster\") != -1\n ) {\n if (_this.editMarkers.on) {\n return;\n }\n obj = $(e.target).data(\"cluster\");\n _this.setObjectClickedBeforeScroll(obj);\n }\n if (e.type == \"mousedown\") {\n _this.scrollStart(e, _this);\n } else {\n _this.touchStart(e, _this);\n }\n }\n );\n }\n\n //TODO Vyacheslav - переделать под новый choropleth\n /*\n $(_this.containers.map).on('mouseover.common.mapsvg', '.mapsvg-choropleth-gradient-wrap', function(e){\n let currentSegment = _this.options.choropleth.segments[$(e.target).parents('.mapsvg-choropleth-gradient-wrap').data('idx')];\n\n if (currentSegment.description){\n _this.showTooltip(currentSegment.description);\n }\n });\n */\n\n $(_this.containers.map).on(\n \"mouseleave.common.mapsvg\",\n \".mapsvg-choropleth-gradient-wrap\",\n (e) => {\n this.controllers.tooltip.hide();\n }\n );\n }\n\n setLabelsRegions(options?: any): void {\n options = options || this.options.labelsRegions;\n options.on != undefined && (options.on = MapSVG.parseBoolean(options.on));\n $.extend(true, this.options, { labelsRegions: options });\n\n if (this.options.labelsRegions.on) {\n this.regions.forEach((region) => {\n if (!region.label) {\n region.label = jQuery('
')[0];\n $(this.layers.labels).append(region.label);\n }\n try {\n $(region.label).html(this.templates.labelRegion(region.forTemplate()));\n } catch (err) {\n console.error('MapSVG: Error in the \"Region Label\" template');\n }\n });\n this.labelsRegionsAdjustScreenPosition();\n } else {\n this.regions.forEach((region) => {\n if (region.label) {\n $(region.label).remove();\n region.label = null;\n delete region.label;\n }\n });\n }\n }\n\n /**\n * Sets Marker labels\n * @param {object} options\n */\n setLabelsMarkers(options?: any): void {\n options = options || this.options.labelsMarkers;\n options.on != undefined && (options.on = MapSVG.parseBoolean(options.on));\n $.extend(true, this.options, { labelsMarkers: options });\n\n if (this.options.labelsMarkers.on) {\n this.markers.forEach((marker: Marker) => {\n try {\n marker.setLabel(this.templates.labelMarker(marker.object));\n } catch (err) {\n console.error('MapSVG: Error in the \"Marker Label\" template');\n }\n });\n } else {\n this.markers.forEach((marker: Marker) => {\n marker.setLabel(\"\");\n });\n }\n }\n\n /**\n * Adds a layer to the map that may contain some objects.\n * @private\n */\n addLayer(name: string): HTMLElement {\n this.layers[name] = $('
')[0];\n this.containers.layers.appendChild(this.layers[name]);\n return this.layers[name];\n }\n\n /**\n * Returns layer by provided name\n * @param name\n */\n getLayer(name: string): HTMLElement {\n return this.layers[name];\n }\n\n /**\n * Returns Database\n * @example\n * var objects = mapsvg.getDb().getLoaded();\n * var object = mapsvg.getDb().getLoadedObject(12);\n *\n * // Filter DB by region \"US-TX\". This automatically triggers markers and directory reloading\n * mapsvg.getDatabase().getAll({filters: {regions: \"US-TX\"}});\n */\n getDb(): CustomObjectsRepository {\n return this.objectsRepository;\n }\n\n /**\n * Returns Regions database\n */\n getDbRegions(): RegionsRepository {\n return this.regionsRepository;\n }\n\n /**\n * Adds an SVG object as Region to MapSVG\n * @param {object} svgObject - SVG Object\n * @returns {Region}\n * @private\n */\n regionAdd(\n svgObject:\n | SVGPathElement\n | SVGCircleElement\n | SVGEllipseElement\n | SVGRectElement\n | SVGPolygonElement\n | SVGPolylineElement\n ) {\n const region = new Region(svgObject, this);\n region.setStatus(1);\n this.regions.push(region);\n this.regions.sort(function (a, b) {\n return a.id == b.id ? 0 : +(a.id > b.id) || -1;\n });\n return region;\n }\n\n /**\n * Deletes a Region from the map\n * @param {string} id - Region ID\n * @private\n */\n regionDelete(id: string): void {\n if (this.regions.findById(id)) {\n this.regions.findById(id).elem.remove();\n this.regions.delete(id);\n } else if ($(\"#\" + id).length) {\n $(\"#\" + id).remove();\n }\n }\n /**\n * Reloads Regions from SVG file\n */\n reloadRegions(): void {\n // this.regions.forEach(function (r: Region) {\n // $(r.element).css({ \"stroke-width\": r.style[\"stroke-width\"] });\n // });\n this.regions.clear();\n $(this.containers.svg).find(\".mapsvg-region\").removeClass(\"mapsvg-region\");\n $(this.containers.svg)\n .find(\".mapsvg-region-disabled\")\n .removeClass(\"mapsvg-region-disabled\");\n $(this.containers.svg)\n .find(\"path, polygon, circle, ellipse, rect\")\n .each((index: number, element: HTMLElement) => {\n // @ts-ignore\n const elem = element;\n if ($(elem).closest(\"defs\").length) return;\n if (elem.getAttribute(\"data-stroke-width\")) {\n elem.style[\"stroke-width\"] = elem.getAttribute(\"data-stroke-width\");\n }\n if (elem.getAttribute(\"id\")) {\n if (\n !this.options.regionPrefix ||\n (this.options.regionPrefix &&\n elem.getAttribute(\"id\").indexOf(this.options.regionPrefix) === 0)\n ) {\n const region = new Region(elem, this);\n this.regions.push(region);\n }\n }\n });\n }\n /**\n * Reloads Regions data\n */\n reloadRegionsFull(): void {\n const statuses = this.regionsRepository.getSchema().getFieldByType(\"status\");\n\n this.regions.forEach((region) => {\n const _region = this.regionsRepository.getLoaded().findById(region.id);\n\n if (_region) {\n region.setData(_region);\n if (statuses && _region.status !== undefined && _region.status !== null) {\n region.setStatus(_region.status);\n }\n } else {\n if (\n this.options.filters.filteredRegionsStatus ||\n this.options.filters.filteredRegionsStatus === 0 ||\n (this.options.menu.source === \"regions\" &&\n this.options.menu.filterout &&\n this.options.menu.filterout.field === \"status\" &&\n this.options.menu.filterout.val) ||\n this.options.menu.filterout.val === 0\n ) {\n const status =\n this.options.filters.filteredRegionsStatus ||\n this.options.filters.filteredRegionsStatus === 0\n ? this.options.filters.filteredRegionsStatus\n : this.options.menu.filterout.val;\n region.setStatus(status);\n }\n }\n });\n\n this.loadDirectory();\n this.setChoropleth();\n this.setLayersControl();\n this.setGroups();\n if (this.options.labelsRegions.on) {\n this.setLabelsRegions();\n }\n }\n\n /**\n * Fix \"fit markers\" view world screen offset\n * @private\n */\n fixMarkersWorldScreen(): void {\n if (this.googleMaps.map)\n setTimeout(() => {\n const markers = { left: 0, right: 0, leftOut: 0, rightOut: 0 };\n if (this.markers.length > 1) {\n this.markers.forEach((m: Marker) => {\n if (\n $(m.element).offset().left <\n $(this.containers.map).offset().left +\n this.containers.map.clientWidth / 2\n ) {\n markers.left++;\n if ($(m.element).offset().left < $(this.containers.map).offset().left) {\n markers.leftOut++;\n }\n } else {\n markers.right++;\n if (\n $(m.element).offset().left >\n $(this.containers.map).offset().left +\n this.containers.map.clientWidth\n ) {\n markers.rightOut++;\n }\n }\n });\n\n if (\n (markers.left === 0 && markers.rightOut) ||\n (markers.right === 0 && markers.leftOut)\n ) {\n const k = markers.left === 0 ? 1 : -1;\n const ww =\n (this.svgDefault.viewBox.width / this.converter.mapLonDelta) *\n 360 *\n this.getScale();\n this.googleMaps.map.panBy(k * ww, 0);\n }\n }\n }, 600);\n }\n\n /**\n * Updates map options from old version of MapSVG\n * @param options\n * @private\n */\n updateOutdatedOptions(options) {\n // Fix Directory options\n if (options.menu && (options.menu.position || options.menu.customContainer)) {\n if (options.menu.customContainer) {\n options.menu.location = \"custom\";\n } else {\n options.menu.position = options.menu.position === \"left\" ? \"left\" : \"right\";\n options.menu.location =\n options.menu.position === \"left\" ? \"leftSidebar\" : \"rightSidebar\";\n if (!options.containers || !options.containers[options.menu.location]) {\n options.containers = options.containers || {};\n options.containers[options.menu.location] = { on: false, width: \"200px\" };\n }\n options.containers[options.menu.location].width = options.menu.width;\n if (MapSVG.parseBoolean(options.menu.on)) {\n options.containers[options.menu.location].on = true;\n }\n }\n delete options.menu.position;\n delete options.menu.width;\n delete options.menu.customContainer;\n }\n // Fix Details View options\n if (\n options.detailsView &&\n (options.detailsView.location === \"mapContainer\" ||\n options.detailsView.location === \"near\" ||\n options.detailsView.location === \"top\")\n ) {\n options.detailsView.location = \"map\";\n }\n // Transfer zoom options to controls options\n if (!options.controls) {\n options.controls = {};\n options.controls.zoom =\n options.zoom &&\n options.zoom.on &&\n (!options.zoom.buttons || options.zoom.buttons.location !== \"hide\");\n options.controls.location =\n options.zoom && options.zoom.buttons && options.zoom.buttons.location !== \"hide\"\n ? options.zoom.buttons.location\n : \"right\";\n }\n // Transfer zoom options to controls options\n if (options.colors && !options.colors.markers) {\n options.colors.markers = {\n base: { opacity: 100, saturation: 100 },\n hovered: { opacity: 100, saturation: 100 },\n unhovered: { opacity: 100, saturation: 100 },\n active: { opacity: 100, saturation: 100 },\n inactive: { opacity: 100, saturation: 100 },\n };\n }\n if (options.tooltipsMode) {\n options.tooltips.mode = options.tooltipsMode;\n delete options.tooltipsMode;\n }\n if (options.popover) {\n options.popovers = options.popover;\n delete options.popover;\n }\n }\n\n /**\n * Initialization. Map rendering happens here. Gets called on map creation.\n * @param {MapOptionsInterface} options - Map options\n * @param {HTMLElement} elem\n * @returns {*}\n * @private\n */\n init(): MapSVGMap {\n MapSVG.addInstance(this);\n\n if (this.options.source === \"\") {\n throw new Error(\"MapSVG: please provide SVG file source.\");\n }\n\n this.disableAnimation();\n\n this.setEvents(this.options.events);\n this.events.trigger(\"beforeLoad\");\n\n // TODO load only when filters are on\n if (\n this.options.googleMaps.apiKey &&\n (this.editMode ||\n this.options.googleMaps.on ||\n (this.options.filters.on &&\n this.options.filtersSchema &&\n this.options.filtersSchema.find((f) => f.type === \"distance\")))\n ) {\n this.loadGoogleMapsAPI(\n () => {\n return 1;\n },\n () => {\n return 1;\n }\n );\n }\n\n this.containers.map.classList.add(\"mapsvg\");\n\n this.setCss();\n\n if (this.options.colors && this.options.colors.background) {\n this.containers.map.style.background = this.options.colors.background;\n }\n\n this.setContainers(this.options.containers);\n this.setColors();\n\n this.addLoadingMessage();\n\n this.addLayer(\"markers\");\n this.addLayer(\"labels\");\n this.addLayer(\"bubbles\");\n this.addLayer(\"popovers\");\n this.addLayer(\"scrollpane\");\n\n this.loadExtensions();\n\n // GET the map by ajax request\n $.ajax({ url: this.options.source + \"?v=\" + this.svgFileLastChanged })\n .fail((resp) => {\n this.svgLoadingFailed(resp);\n })\n .done((xmlData) => {\n this.renderSvgData(xmlData);\n });\n\n return this;\n }\n\n getContainer(name: string): HTMLElement {\n return this.containers[name];\n }\n\n private renderSvgData(xmlData) {\n // Default width/height/viewBox from SVG\n const svgTag = $(xmlData).find(\"svg\");\n this.containers.svg = svgTag[0];\n\n if (svgTag.attr(\"width\") && svgTag.attr(\"height\")) {\n this.svgDefault.width = parseFloat(svgTag.attr(\"width\").replace(/px/g, \"\"));\n this.svgDefault.height = parseFloat(svgTag.attr(\"height\").replace(/px/g, \"\"));\n this.svgDefault.viewBox = svgTag.attr(\"viewBox\")\n ? new ViewBox(svgTag.attr(\"viewBox\").split(\" \"))\n : new ViewBox(0, 0, this.svgDefault.width, this.svgDefault.height);\n } else if (svgTag.attr(\"viewBox\")) {\n this.svgDefault.viewBox = new ViewBox(svgTag.attr(\"viewBox\").split(\" \"));\n this.svgDefault.width = this.svgDefault.viewBox.width;\n this.svgDefault.height = this.svgDefault.viewBox.height;\n } else {\n const msg =\n \"MapSVG: width/height and viewBox are missing in the SVG file. Can't parse the file because of that.\";\n if (this.editMode) {\n alert(msg);\n } else {\n console.error(msg);\n }\n return false;\n }\n\n this.geoViewBox = this.getGeoViewBoxFromSvgTag(this.containers.svg);\n\n if (this.options.viewBox && this.options.viewBox.length == 4) {\n this._viewBox = new ViewBox(this.options.viewBox);\n } else {\n this._viewBox = new ViewBox(this.svgDefault.viewBox);\n }\n\n svgTag.attr(\"preserveAspectRatio\", \"xMidYMid meet\");\n svgTag.removeAttr(\"width\");\n svgTag.removeAttr(\"height\");\n $(this.containers.scrollpane).append(svgTag);\n this.setStrokes();\n\n this.reloadRegions();\n\n this.setSize(this.options.width, this.options.height, this.options.responsive);\n\n if (this.options.disableAll) {\n this.setDisableAll(true);\n }\n\n this.setViewBox(this._viewBox);\n\n // Create Converter instance\n this.converter = new Converter(this.containers.map, this.svgDefault.viewBox, this.viewBox);\n if (this.geoViewBox) {\n this.converter.setGeoViewBox(this.geoViewBox);\n }\n\n this.setResponsive(this.options.responsive);\n this.setScroll(this.options.scroll, true);\n this.setZoom(this.options.zoom);\n this.setControls(this.options.controls);\n this.setGoogleMaps();\n this.setTooltips(this.options.tooltips);\n this.setPopovers(this.options.popovers);\n if (this.options.cursor) this.setCursor(this.options.cursor);\n this.setTemplates(this.options.templates);\n this.loadExtensions();\n\n this.filtersSchema = new Schema({ fields: this.options.filtersSchema });\n\n this.objectsRepository.events.on(\"load\", () => {\n this.showLoadingMessage();\n });\n this.objectsRepository.events.on(\"loaded\", () => {\n this.setGlobalDistanceFilter();\n this.fitOnDataLoadDone = false;\n this.addLocations();\n this.fixMarkersWorldScreen();\n // this.addDataObjectsAsMarkers();\n this.attachDataToRegions();\n this.loadDirectory();\n if (this.options.labelsMarkers.on) {\n this.setLabelsMarkers();\n }\n // Check if there's a call to \"{{objects}}\" inside of the labelRegion template\n // and if it's found then reload Region Labels\n if (this.options.templates.labelRegion.indexOf(\"{{objects\") !== -1) {\n this.setLabelsRegions();\n }\n if (\n this.options.filters.on &&\n this.options.filters.source === \"database\" &&\n this.controllers.filters &&\n this.controllers.filters.hideFilters\n ) {\n this.controllers.filters.setFiltersCounter();\n }\n this.hideLoadingMessage();\n this.events.trigger(\"databaseLoaded\");\n\n this.updateFiltersState();\n this.setChoropleth();\n });\n this.objectsRepository.events.on(\"schemaChanged\", () => {\n this.objectsRepository.reload();\n });\n this.objectsRepository.events.on(\"updated\", (obj) => {\n this.attachDataToRegions(obj);\n this.reloadRegionsFull();\n });\n this.objectsRepository.events.on(\"created\", (obj: CustomObject) => {\n this.attachDataToRegions(obj);\n this.reloadRegionsFull();\n });\n this.objectsRepository.events.on(\"deleted\", (id: number) => {\n this.attachDataToRegions();\n this.reloadRegionsFull();\n });\n\n this.regionsRepository.events.on(\"load\", () => {\n this.showLoadingMessage();\n });\n this.regionsRepository.events.on(\"loaded\", () => {\n this.hideLoadingMessage();\n\n this.reloadRegionsFull();\n if (\n this.options.filters.on &&\n this.options.filters.source === \"regions\" &&\n this.controllers.filters &&\n this.controllers.filters.hideFilters\n ) {\n this.controllers.filters.setFiltersCounter();\n }\n this.events.trigger(\"regionsLoaded\");\n });\n this.regionsRepository.events.on(\"updated\", (regionData) => {\n this.reloadRegionsFull();\n });\n this.regionsRepository.events.on(\"created\", (regionData) => {\n this.reloadRegionsFull();\n });\n this.regionsRepository.events.on(\"deleted\", (regionData) => {\n this.reloadRegionsFull();\n });\n\n this.setMenu();\n this.setFilters();\n this.setFilterOut();\n\n this.setEventHandlers();\n\n // The initial map loading process is finished, remove the first afterLoad blocker\n this.afterLoadBlockers--;\n\n if (!this.id) {\n this.finalizeMapLoading();\n return;\n }\n\n if (!this.options.data_regions) {\n this.regionsRepository.find().done((data) => {\n this.afterLoadBlockers--;\n this.finalizeMapLoading();\n });\n } else {\n this.regionsRepository.loadDataFromResponse(this.options.data_regions);\n this.afterLoadBlockers--;\n }\n\n if (!this.options.data_objects) {\n if (this.options.database.loadOnStart || this.editMode) {\n this.objectsRepository.find().done((data) => {\n this.afterLoadBlockers--;\n this.finalizeMapLoading();\n });\n } else {\n this.afterLoadBlockers--;\n this.finalizeMapLoading();\n }\n } else {\n if (this.editMode || this.options.database.loadOnStart) {\n this.objectsRepository.loadDataFromResponse(this.options.data_objects);\n this.afterLoadBlockers--;\n } else {\n this.afterLoadBlockers--;\n }\n delete this.options.data_regions;\n delete this.options.data_objects;\n this.finalizeMapLoading();\n }\n }\n\n private setFilterOut() {\n if (this.options.menu.filterout.field) {\n const f = {};\n f[this.options.menu.filterout.field] = this.options.menu.filterout.val;\n if (this.options.menu.source == \"regions\") {\n // this.regionsRepository.query.setFilterOut(f);\n } else {\n this.objectsRepository.query.setFilterOut(f);\n }\n } else {\n this.objectsRepository.query.setFilterOut(null);\n }\n }\n\n private getGeoViewBoxFromSvgTag(svgTag: SVGSVGElement): GeoViewBox | null {\n const geo = $(svgTag).attr(\"mapsvg:geoViewBox\") || $(svgTag).attr(\"mapsvg:geoviewbox\");\n if (geo) {\n const geoParts = geo.split(\" \").map((p) => parseFloat(p));\n if (geoParts.length == 4) {\n this.mapIsGeo = true;\n this.geoCoordinates = true;\n\n const sw = new GeoPoint(geoParts[3], geoParts[0]);\n const ne = new GeoPoint(geoParts[1], geoParts[2]);\n return new GeoViewBox(sw, ne);\n }\n } else {\n return null;\n }\n }\n\n private svgLoadingFailed(resp: JQueryXHR) {\n if (resp.status == 404) {\n let msg =\n \"MapSVG: file not found - \" +\n this.options.source +\n \"\\n\\nIf you moved MapSVG from another server please read the following docs page: https://mapsvg.com/docs/installation/moving\";\n if (this.editMode) {\n msg +=\n \"\\n\\nIf you know the correct path for the SVG file, please write it and press OK:\";\n const oldSvgPath = this.options.source;\n const userSvgPath = prompt(msg, oldSvgPath);\n if (userSvgPath !== null) {\n $.ajax({ url: userSvgPath + \"?v=\" + this.svgFileLastChanged })\n .fail(function () {\n location.reload();\n })\n .done((xmlData) => {\n this.options.source = userSvgPath;\n this.renderSvgData(xmlData);\n const mapsRepo = new MapsRepository();\n mapsRepo.update(this);\n });\n } else {\n location.reload();\n }\n } else {\n console.error(msg);\n }\n } else {\n const msg =\n \"MapSVG: can't load SVG file for unknown reason. Please contact support: https://mapsvg.ticksy.com\";\n if (this.editMode) {\n alert(msg);\n } else {\n console.error(msg);\n }\n }\n }\n\n private addLoadingMessage() {\n this.containers.loading = document.createElement(\"div\");\n this.containers.loading.className = \"mapsvg-loading\";\n\n const loadingTextBlock = document.createElement(\"div\");\n loadingTextBlock.className = \"mapsvg-loading-text\";\n loadingTextBlock.innerHTML = this.options.loadingText;\n\n const spinner = document.createElement(\"div\");\n spinner.className = \"spinner-border spinner-border-sm\";\n\n this.containers.loading.appendChild(spinner);\n this.containers.loading.appendChild(loadingTextBlock);\n\n this.containers.map.appendChild(this.containers.loading);\n\n if (this.options.googleMaps.on) {\n $(this.containers.map).addClass(\"mapsvg-google-map-loading\");\n }\n }\n private hideLoadingMessage() {\n $(this.containers.loading).hide();\n }\n private showLoadingMessage() {\n $(this.containers.loading).show();\n }\n\n private disableAnimation() {\n this.containers.map.classList.add(\"no-transitions\");\n }\n private enableAnimation() {\n $(this.containers.map).removeClass(\"no-transitions\");\n }\n\n private loadExtensions() {\n // Load extension (common things)\n // @ts-ignore\n if (\n this.options.extension &&\n // @ts-ignore\n $().mapSvg.extensions &&\n // @ts-ignore\n $().mapSvg.extensions[_this.options.extension]\n ) {\n // @ts-ignore\n const ext = $().mapSvg.extensions[_this.options.extension];\n ext && ext.common(this);\n }\n }\n\n /**\n * Final stage of initialization.\n * Initialization is split into 2 steps because the 1st step contains async ajax request.\n * When the ajax requires is done, the final initialization step is called.\n * @private\n */\n finalizeMapLoading(): void {\n if (this.afterLoadBlockers > 0 || this.loaded) {\n return;\n }\n\n this.selectRegionByIdFromUrl();\n\n setTimeout(() => {\n this.movingItemsAdjustScreenPosition();\n this.adjustStrokes();\n setTimeout(() => {\n this.hideLoadingMessage();\n $(this.containers.loading).find(\".mapsvg-loading-text\").hide();\n this.enableAnimation();\n }, 200);\n }, 100);\n\n this.loaded = true;\n this.events.trigger(\"afterLoad\");\n }\n\n private selectRegionByIdFromUrl() {\n const match = RegExp(\"[?&]mapsvg_select=([^&]*)\").exec(window.location.search);\n if (match) {\n const select = decodeURIComponent(match[1].replace(/\\+/g, \" \"));\n this.selectRegion(select);\n }\n if (window.location.hash) {\n const query = window.location.hash.replace(\"#/m/\", \"\");\n const region = this.getRegion(query);\n if (region && this.options.actions.map.afterLoad.selectRegion) {\n this.regionClickHandler(null, region);\n }\n }\n }\n\n createForm(options): FormBuilder {\n return new FormBuilder(options);\n }\n getApiUrl(path: string): string {\n const server = new Server();\n return server.getUrl(path);\n }\n getConverter(): Converter {\n return this.converter;\n }\n\n /**\n * Old choropleth methods\n */\n\n /**\n * Sets choropleth map options\n * @param {object} options\n *\n * @example\n * mapsvg.setGauge({\n * on: true,\n * colors: {\n * high: \"#FF0000\",\n * low: \"#00FF00\"\n * }\n * labels: {\n * high: \"high\",\n * low: \"low\"\n * }\n * });\n */\n setChoropleth(options?: any) {\n const _this = this;\n\n options = options || _this.options.choropleth;\n options.on != undefined && (options.on = MapSVG.parseBoolean(options.on));\n $.extend(true, _this.options, { choropleth: options });\n\n let needsRedraw = false;\n\n if (!_this.$gauge) {\n _this.$gauge = {};\n _this.$gauge.gradient = $(\" \").addClass(\"mapsvg-gauge-gradient\");\n _this.setGaugeGradientCSS();\n _this.$gauge.container = $(\"
\").addClass(\"mapsvg-gauge\").hide();\n _this.$gauge.table = $(\"\");\n const tr = $(\"\");\n _this.$gauge.labelLow = $(\"\");\n _this.$gauge.labelHigh = $(\"\");\n tr.append(_this.$gauge.labelLow);\n tr.append(_this.$gauge.gradient);\n tr.append(_this.$gauge.labelHigh);\n _this.$gauge.table.append(tr);\n _this.$gauge.container.append(_this.$gauge.table);\n $(_this.containers.map).append(_this.$gauge.container);\n }\n\n if (!_this.options.choropleth.on && _this.$gauge.container.is(\":visible\")) {\n _this.$gauge.container.hide();\n needsRedraw = true;\n } else if (_this.options.choropleth.on && !_this.$gauge.container.is(\":visible\")) {\n _this.$gauge.container.show();\n needsRedraw = true;\n _this.regionsRepository.events.on(\"change\", function () {\n _this.redrawGauge();\n });\n }\n\n if (options.colors) {\n _this.options.choropleth.colors.lowRGB = tinycolor(\n _this.options.choropleth.colors.low\n ).toRgb();\n _this.options.choropleth.colors.highRGB = tinycolor(\n _this.options.choropleth.colors.high\n ).toRgb();\n _this.options.choropleth.colors.diffRGB = {\n r:\n _this.options.choropleth.colors.highRGB.r -\n _this.options.choropleth.colors.lowRGB.r,\n g:\n _this.options.choropleth.colors.highRGB.g -\n _this.options.choropleth.colors.lowRGB.g,\n b:\n _this.options.choropleth.colors.highRGB.b -\n _this.options.choropleth.colors.lowRGB.b,\n a:\n _this.options.choropleth.colors.highRGB.a -\n _this.options.choropleth.colors.lowRGB.a,\n };\n needsRedraw = true;\n _this.$gauge && _this.setGaugeGradientCSS();\n }\n\n if (options.labels) {\n _this.$gauge.labelLow.html(_this.options.choropleth.labels.low);\n _this.$gauge.labelHigh.html(_this.options.choropleth.labels.high);\n }\n\n needsRedraw && _this.redrawGauge();\n }\n\n /**\n * Redraws choropleth map colors\n * @private\n */\n redrawGauge() {\n const _this = this;\n\n _this.updateGaugeMinMax();\n _this.regionsRedrawColors();\n }\n\n /**\n * Updates min/max values of Region choropleth fields\n * @private\n */\n updateGaugeMinMax() {\n const _this = this;\n\n _this.options.choropleth.min = 0;\n _this.options.choropleth.max = false;\n const values = [];\n _this.regions.forEach(function (r) {\n const gauge = r.data && r.data[_this.options.regionChoroplethField];\n gauge != undefined && values.push(gauge);\n });\n if (values.length > 0) {\n _this.options.choropleth.min = values.length == 1 ? 0 : Math.min.apply(null, values);\n _this.options.choropleth.max = Math.max.apply(null, values);\n _this.options.choropleth.maxAdjusted =\n _this.options.choropleth.max - _this.options.choropleth.min;\n }\n }\n /**\n * Sets gradient for choropleth map\n * @private\n */\n setGaugeGradientCSS() {\n const _this = this;\n\n _this.$gauge.gradient.css({\n background:\n \"linear-gradient(to right,\" +\n _this.options.choropleth.colors.low +\n \" 1%,\" +\n _this.options.choropleth.colors.high +\n \" 100%)\",\n filter:\n 'progid:DXImageTransform.Microsoft.gradient( startColorstr=\"' +\n _this.options.choropleth.colors.low +\n '\", endColorstr=\"' +\n _this.options.choropleth.colors.high +\n '\",GradientType=1 )',\n });\n }\n\n /**\n * Below is a set of getters and methods for backward compatibility\n */\n\n get $map() {\n return $(this.getContainer(\"map\"));\n }\n\n get $svg() {\n return $(this.getContainer(\"svg\"));\n }\n\n get $popover() {\n return $(this.getContainer(\"popover\"));\n }\n\n get $details() {\n return $(this.getContainer(\"detailsView\"));\n }\n\n get $directory() {\n return $(this.getContainer(\"directory\"));\n }\n\n get database() {\n return this.objectsRepository;\n }\n\n get regionsDatabase() {\n return this.regionsRepository;\n }\n}\n\nexport {\n MapSVGMap as map,\n MapSVGMap as MapSVGMap,\n MapsRepository as mapsRepository,\n MapsV2Repository as mapsV2Repository,\n Repository as repository,\n SchemaRepository as schemaRepository,\n MapSVG as globals,\n Marker as marker,\n Location as location,\n Server as server,\n ArrayIndexed as arrayIndexed,\n Schema as schema,\n Query as query,\n ScreenPoint as screenPoint,\n SVGPoint as svgPoint,\n GeoPoint as geoPoint,\n FormBuilder as formBuilder,\n CustomObject as customObject,\n};\n"],"names":["$","Sortable","CodeMirror.fromTextArea","FormElementTypes.CheckboxFormElement","FormElementTypes.CheckboxesFormElement","FormElementTypes.DateFormElement","FormElementTypes.DistanceFormElement","FormElementTypes.EmptyFormElement","FormElementTypes.IdFormElement","FormElementTypes.ImagesFormElement","FormElementTypes.LocationFormElement","FormElementTypes.ModalFormElement","FormElementTypes.PostFormElement","FormElementTypes.RadioFormElement","FormElementTypes.RegionsFormElement","FormElementTypes.SaveFormElement","FormElementTypes.SearchFormElement","FormElementTypes.SelectFormElement","FormElementTypes.StatusFormElement","FormElementTypes.TextFormElement","FormElementTypes.TextareaFormElement","FormElementTypes.TitleFormElement","FormElementTypes.ColorPickerFormElement"],"mappings":"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"}
\" + _this.options.choropleth.labels.low + \"\" + _this.options.choropleth.labels.high + \"