diff --git a/application/src/main/data/json/system/widget_types/image_map.json b/application/src/main/data/json/system/widget_types/image_map.json index 3330045721..27af2bc724 100644 --- a/application/src/main/data/json/system/widget_types/image_map.json +++ b/application/src/main/data/json/system/widget_types/image_map.json @@ -11,13 +11,13 @@ "resources": [], "templateHtml": "\n", "templateCss": "", - "controllerScript": "self.onInit = function() {\n self.ctx.$scope.mapWidget.onInit();\n};\n\nself.typeParameters = function() {\n return {\n hideDataTab: true,\n hideDataSettings: true,\n previewWidth: '80%',\n embedTitlePanel: true,\n datasourcesOptional: true\n };\n}\n\nself.actionSources = function() {\n return {\n markerClick: {\n name: 'widget-action.marker-click',\n multiple: false\n },\n polygonClick: {\n name: 'widget-action.polygon-click',\n multiple: false\n },\n circleClick: {\n name: 'widget-action.circle-click',\n multiple: false\n },\n tooltipAction: {\n name: 'widget-action.tooltip-tag-action',\n multiple: true\n }\n };\n}\n", + "controllerScript": "self.onInit = function() {\n self.ctx.$scope.mapWidget.onInit();\n};\n\nself.typeParameters = function() {\n return {\n hideDataTab: true,\n hideDataSettings: true,\n previewWidth: '80%',\n embedTitlePanel: true,\n datasourcesOptional: true\n };\n}\n\nself.actionSources = function() {\n return {\n tooltipAction: {\n name: 'widget-action.tooltip-tag-action',\n multiple: true\n }\n };\n}\n", "settingsForm": [], "dataKeySettingsForm": [], "settingsDirective": "tb-map-widget-settings", "hasBasicMode": true, "basicModeDirective": "tb-map-basic-config", - "defaultConfig": "{\"datasources\":[],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"rgba(0, 0, 0, 0)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"mapType\":\"image\",\"layers\":[],\"imageSource\":{\"sourceType\":\"image\",\"url\":\"tb-image;/api/images/system/image_map_system_widget_map_image.svg\",\"entityAliasId\":null,\"entityKey\":null},\"markers\":[{\"dsType\":\"function\",\"dsLabel\":\"First point\",\"dsDeviceId\":null,\"dsEntityAliasId\":null,\"dsFilterId\":null,\"additionalDataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"temperature\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.8239425680406081,\"funcBody\":\"var value = prevValue + Math.random() * 40 - 20;\\nif (value < -60) {\\n\\tvalue = -60;\\n} else if (value > 60) {\\n\\tvalue = 60;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"label\":{\"show\":true,\"type\":\"pattern\",\"pattern\":\"${entityName}\"},\"tooltip\":{\"show\":true,\"type\":\"pattern\",\"pattern\":\"${entityName}X Pos: ${xPos:2}Y Pos: ${yPos:2}Temperature: ${temperature} °CSee tooltip settings for details\",\"patternFunction\":null,\"trigger\":\"click\",\"autoclose\":true,\"offsetX\":0,\"offsetY\":-1},\"groups\":null,\"xKey\":{\"name\":\"f(x)\",\"label\":\"latitude\",\"type\":\"function\",\"funcBody\":\"var value = prevValue || 0.2;\\nif (time % 5000 < 500) {\\n value += Math.random() * 0.05 - 0.025;\\n}\\nreturn value;\",\"settings\":{},\"color\":\"#2196f3\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null},\"yKey\":{\"name\":\"f(x)\",\"label\":\"longitude\",\"type\":\"function\",\"funcBody\":\"var value = prevValue || 0.3;\\nif (time % 5000 < 500) {\\n value += Math.random() * 0.05 - 0.025;\\n}\\nreturn value;\",\"settings\":{},\"color\":\"#2196f3\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null},\"markerType\":\"shape\",\"markerShape\":{\"shape\":\"markerShape1\",\"size\":34,\"color\":{\"type\":\"function\",\"color\":\"#307FE5\",\"colorFunction\":\"var temperature = data.temperature;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\\n\"}},\"markerIcon\":{\"icon\":\"mdi:lightbulb-on\",\"size\":34,\"color\":{\"type\":\"constant\",\"color\":\"#307FE5\"}},\"markerImage\":{\"type\":\"image\",\"image\":\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii0xOTEuMzUgLTM1MS4xOCAxMDgzLjU4IDE3MzAuNDYiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsPSIjZmU3NTY5IiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMzciIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTTM1MS44MzMgMTM2MC43OGMtMzguNzY2LTE5MC4zLTEwNy4xMTYtMzQ4LjY2NS0xODkuOTAzLTQ5NS40NEMxMDAuNTIzIDc1Ni40NjkgMjkuMzg2IDY1NS45NzgtMzYuNDM0IDU1MC40MDRjLTIxLjk3Mi0zNS4yNDQtNDAuOTM0LTcyLjQ3Ny02Mi4wNDctMTA5LjA1NC00Mi4yMTYtNzMuMTM3LTc2LjQ0NC0xNTcuOTM1LTc0LjI2OS0yNjcuOTMyIDIuMTI1LTEwNy40NzMgMzMuMjA4LTE5My42ODUgNzguMDMtMjY0LjE3M0MtMjEtMjA2LjY5IDEwMi40ODEtMzAxLjc0NSAyNjguMTY0LTMyNi43MjRjMTM1LjQ2Ni0yMC40MjUgMjYyLjQ3NSAxNC4wODIgMzUyLjU0MyA2Ni43NDcgNzMuNiA0My4wMzggMTMwLjU5NiAxMDAuNTI4IDE3My45MiAxNjguMjggNDUuMjIgNzAuNzE2IDc2LjM2IDE1NC4yNiA3OC45NzEgMjYzLjIzMyAxLjMzNyA1NS44My03LjgwNSAxMDcuNTMyLTIwLjY4NCAxNTAuNDE3LTEzLjAzNCA0My40MS0zMy45OTYgNzkuNjk1LTUyLjY0NiAxMTguNDU1LTM2LjQwNiA3NS42NTktODIuMDQ5IDE0NC45ODEtMTI3Ljg1NSAyMTQuMzQ1LTEzNi40MzcgMjA2LjYwNi0yNjQuNDk2IDQxNy4zMS0zMjAuNTggNzA2LjAyOHoiLz48Y2lyY2xlIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBjeD0iMzUyLjg5MSIgY3k9IjIyNS43NzkiIHI9IjE4My4zMzIiLz48L3N2Zz4=\",\"imageSize\":34},\"markerOffsetX\":0.5,\"markerOffsetY\":1,\"positionFunction\":\"return {x: origXPos, y: origYPos};\",\"markerClustering\":{\"enable\":false,\"zoomOnClick\":true,\"maxZoom\":null,\"maxClusterRadius\":80,\"zoomAnimation\":true,\"showCoverageOnHover\":true,\"spiderfyOnMaxZoom\":false,\"chunkedLoad\":false,\"lazyLoad\":true,\"useClusterMarkerColorFunction\":false,\"clusterMarkerColorFunction\":null}},{\"dsType\":\"function\",\"dsLabel\":\"Second point\",\"dsDeviceId\":null,\"dsEntityAliasId\":null,\"dsFilterId\":null,\"additionalDataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"temperature\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.7826299113906372,\"funcBody\":\"var value = prevValue + Math.random() * 40 - 20;\\nif (value < -60) {\\n\\tvalue = -60;\\n} else if (value > 60) {\\n\\tvalue = 60;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"label\":{\"show\":true,\"type\":\"pattern\",\"pattern\":\"${entityName}\"},\"tooltip\":{\"show\":true,\"type\":\"pattern\",\"pattern\":\"${entityName}X Pos: ${xPos:2}Y Pos: ${yPos:2}Temperature: ${temperature} °CSee tooltip settings for details\",\"patternFunction\":null,\"trigger\":\"click\",\"autoclose\":true,\"offsetX\":0,\"offsetY\":-1},\"groups\":null,\"xKey\":{\"name\":\"f(x)\",\"label\":\"latitude\",\"type\":\"function\",\"funcBody\":\"var value = prevValue || 0.6;\\nif (time % 4000 < 500) {\\n value += Math.random() * 0.05 - 0.025;\\n}\\nreturn value;\",\"settings\":{},\"color\":\"#2196f3\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null},\"yKey\":{\"name\":\"f(x)\",\"label\":\"longitude\",\"type\":\"function\",\"funcBody\":\"var value = prevValue || 0.7;\\nif (time % 4000 < 500) {\\n value += Math.random() * 0.05 - 0.025;\\n}\\nreturn value;\",\"settings\":{},\"color\":\"#2196f3\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null},\"markerType\":\"image\",\"markerShape\":{\"shape\":\"markerShape1\",\"size\":34,\"color\":{\"type\":\"constant\",\"color\":\"#307FE5\"}},\"markerIcon\":{\"icon\":\"\",\"size\":34,\"color\":{\"type\":\"constant\",\"color\":\"#307FE5\"}},\"markerImage\":{\"type\":\"function\",\"image\":\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzNCIgaGVpZ2h0PSIzNCIgdmlld0JveD0iMCAwIDM0IDM0IiBmaWxsPSJub25lIj4KICA8ZyBmaWx0ZXI9InVybCgjZmlsdGVyMF9iZl84ODE2XzI2Mzg4NykiPgogICAgPHBhdGggZD0iTTE5IDI0LjVDMTcuNDA3NSAyNy40MTI1IDE3IDMzIDE3IDMzQzE3IDMzIDI3LjA4NTggMzIuMTk1NSAzMC45OTkyIDI3LjQ5OThDMzQgMjMuODk5MiAzMS45OTkyIDE5IDI3Ljk5OTIgMTlDMjMuOTk5MyAxOSAyMS4xOTI5IDIwLjQ4OTQgMTkgMjQuNVoiIGZpbGw9ImJsYWNrIiBmaWxsLW9wYWNpdHk9IjAuMjQiLz4KICA8L2c+CiAgPG1hc2sgaWQ9InBhdGgtMi1pbnNpZGUtMV84ODE2XzI2Mzg4NyIgZmlsbD0id2hpdGUiPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yOCAxMS45QzI4LjAwMzcgNS4zMjc2MSAyNC4yOTAyIDAgMTcgMEM5LjcwOTgzIDAgNS45OTYzIDUuMzI3NjEgNiAxMS45QzYuMDA0NzMgMjAuMjkzNyAxNyAzNCAxNyAzNEMxNyAzNCAyNy45OTUzIDIwLjI5MzcgMjggMTEuOVpNMjEuMjUgMTAuNjI1QzIxLjI1IDEyLjk3MjIgMTkuMzQ3MiAxNC44NzUgMTcgMTQuODc1QzE0LjY1MjggMTQuODc1IDEyLjc1IDEyLjk3MjIgMTIuNzUgMTAuNjI1QzEyLjc1IDguMjc3NzkgMTQuNjUyOCA2LjM3NSAxNyA2LjM3NUMxOS4zNDcyIDYuMzc1IDIxLjI1IDguMjc3NzkgMjEuMjUgMTAuNjI1WiIvPgogIDwvbWFzaz4KICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTI4IDExLjlDMjguMDAzNyA1LjMyNzYxIDI0LjI5MDIgMCAxNyAwQzkuNzA5ODMgMCA1Ljk5NjMgNS4zMjc2MSA2IDExLjlDNi4wMDQ3MyAyMC4yOTM3IDE3IDM0IDE3IDM0QzE3IDM0IDI3Ljk5NTMgMjAuMjkzNyAyOCAxMS45Wk0yMS4yNSAxMC42MjVDMjEuMjUgMTIuOTcyMiAxOS4zNDcyIDE0Ljg3NSAxNyAxNC44NzVDMTQuNjUyOCAxNC44NzUgMTIuNzUgMTIuOTcyMiAxMi43NSAxMC42MjVDMTIuNzUgOC4yNzc3OSAxNC42NTI4IDYuMzc1IDE3IDYuMzc1QzE5LjM0NzIgNi4zNzUgMjEuMjUgOC4yNzc3OSAyMS4yNSAxMC42MjVaIiBmaWxsPSIjMzA3ZmU1Ii8+CiAgPHBhdGggZD0iTTI4IDExLjlMMjkuMDYyNSAxMS45MDA2TDI4IDExLjlaTTYgMTEuOUw3LjA2MjUgMTEuODk5NEw2IDExLjlaTTE3IDM0TDE2LjE3MTIgMzQuNjY0OUwxNyAzNS42OThMMTcuODI4OCAzNC42NjQ5TDE3IDM0Wk0xNyAxLjA2MjVDMjAuMzY0MSAxLjA2MjUgMjIuODA4NSAyLjI4MDA2IDI0LjQyNzMgNC4xNzUzOUMyNi4wNjUyIDYuMDkzMjMgMjYuOTM5MiA4LjgwMzMxIDI2LjkzNzUgMTEuODk5NEwyOS4wNjI1IDExLjkwMDZDMjkuMDY0NCA4LjQyNDMgMjguMDgzNSA1LjE4NDM4IDI2LjA0MzEgMi43OTUzMkMyMy45ODM1IDAuMzgzNzQyIDIwLjkyNjEgLTEuMDYyNSAxNyAtMS4wNjI1VjEuMDYyNVpNNy4wNjI1IDExLjg5OTRDNy4wNjA3NiA4LjgwMzMxIDcuOTM0NzcgNi4wOTMyMyA5LjU3Mjc0IDQuMTc1MzlDMTEuMTkxNSAyLjI4MDA2IDEzLjYzNTkgMS4wNjI1IDE3IDEuMDYyNVYtMS4wNjI1QzEzLjA3MzkgLTEuMDYyNSAxMC4wMTY1IDAuMzgzNzQxIDcuOTU2ODYgMi43OTUzMkM1LjkxNjQ1IDUuMTg0MzggNC45MzU1NSA4LjQyNDMgNC45Mzc1IDExLjkwMDZMNy4wNjI1IDExLjg5OTRaTTE3IDM0QzE3LjgyODggMzMuMzM1MSAxNy44Mjg4IDMzLjMzNTIgMTcuODI4OCAzMy4zMzUyQzE3LjgyODggMzMuMzM1MiAxNy44Mjg4IDMzLjMzNTEgMTcuODI4NyAzMy4zMzVDMTcuODI4NSAzMy4zMzQ4IDE3LjgyODEgMzMuMzM0MyAxNy44Mjc2IDMzLjMzMzZDMTcuODI2NSAzMy4zMzIzIDE3LjgyNDggMzMuMzMwMSAxNy44MjI0IDMzLjMyNzFDMTcuODE3NiAzMy4zMjEyIDE3LjgxMDMgMzMuMzEyIDE3LjgwMDQgMzMuMjk5NUMxNy43ODA3IDMzLjI3NDcgMTcuNzUwOSAzMy4yMzcxIDE3LjcxMTggMzMuMTg3NEMxNy42MzM1IDMzLjA4NzggMTcuNTE3OCAzMi45Mzk1IDE3LjM3IDMyLjc0NzJDMTcuMDc0MiAzMi4zNjI0IDE2LjY1MDMgMzEuODAxNyAxNi4xNDA5IDMxLjEwMTlDMTUuMTIxNCAyOS43MDE0IDEzLjc2MzQgMjcuNzQ5NSAxMi40MDcxIDI1LjU0MTVDMTEuMDQ5IDIzLjMzMDYgOS43MDM4OCAyMC44ODEzIDguNzAwOTEgMTguNDg0MUM3LjY5MTA5IDE2LjA3MDYgNy4wNjM1NyAxMy43OTIxIDcuMDYyNSAxMS44OTk0TDQuOTM3NSAxMS45MDA2QzQuOTM4OCAxNC4yMDQ4IDUuNjg3NDYgMTYuNzg3MyA2Ljc0MDU4IDE5LjMwNDNDNy44MDA1NSAyMS44Mzc4IDkuMjA1MTYgMjQuMzg4OSAxMC41OTY0IDI2LjY1MzhDMTEuOTg5NSAyOC45MjE2IDEzLjM4MDcgMzAuOTIwOSAxNC40MjI5IDMyLjM1MjZDMTQuOTQ0NCAzMy4wNjg5IDE1LjM3OTUgMzMuNjQ0NiAxNS42ODUxIDM0LjA0MjJDMTUuODM3OSAzNC4yNDEgMTUuOTU4NCAzNC4zOTU0IDE2LjA0MTIgMzQuNTAwN0MxNi4wODI2IDM0LjU1MzQgMTYuMTE0NiAzNC41OTM4IDE2LjEzNjUgMzQuNjIxM0MxNi4xNDc0IDM0LjYzNTEgMTYuMTU1OSAzNC42NDU2IDE2LjE2MTcgMzQuNjUyOUMxNi4xNjQ2IDM0LjY1NjYgMTYuMTY2OCAzNC42NTk0IDE2LjE2ODQgMzQuNjYxNEMxNi4xNjkyIDM0LjY2MjQgMTYuMTY5OSAzNC42NjMyIDE2LjE3MDMgMzQuNjYzN0MxNi4xNzA2IDM0LjY2NCAxNi4xNzA4IDM0LjY2NDMgMTYuMTcwOSAzNC42NjQ1QzE2LjE3MTEgMzQuNjY0NyAxNi4xNzEyIDM0LjY2NDkgMTcgMzRaTTI2LjkzNzUgMTEuODk5NEMyNi45MzY0IDEzLjc5MjEgMjYuMzA4OSAxNi4wNzA2IDI1LjI5OTEgMTguNDg0MUMyNC4yOTYxIDIwLjg4MTMgMjIuOTUxIDIzLjMzMDYgMjEuNTkyOSAyNS41NDE1QzIwLjIzNjYgMjcuNzQ5NSAxOC44Nzg2IDI5LjcwMTQgMTcuODU5MSAzMS4xMDE5QzE3LjM0OTcgMzEuODAxNyAxNi45MjU4IDMyLjM2MjQgMTYuNjMgMzIuNzQ3MkMxNi40ODIyIDMyLjkzOTUgMTYuMzY2NSAzMy4wODc4IDE2LjI4ODIgMzMuMTg3NEMxNi4yNDkxIDMzLjIzNzEgMTYuMjE5MyAzMy4yNzQ3IDE2LjE5OTYgMzMuMjk5NUMxNi4xODk3IDMzLjMxMiAxNi4xODI0IDMzLjMyMTIgMTYuMTc3NiAzMy4zMjcxQzE2LjE3NTIgMzMuMzMwMSAxNi4xNzM1IDMzLjMzMjMgMTYuMTcyNCAzMy4zMzM2QzE2LjE3MTkgMzMuMzM0MyAxNi4xNzE1IDMzLjMzNDggMTYuMTcxMyAzMy4zMzVDMTYuMTcxMiAzMy4zMzUxIDE2LjE3MTIgMzMuMzM1MiAxNi4xNzEyIDMzLjMzNTJDMTYuMTcxMiAzMy4zMzUyIDE2LjE3MTIgMzMuMzM1MSAxNyAzNEMxNy44Mjg4IDM0LjY2NDkgMTcuODI4OSAzNC42NjQ3IDE3LjgyOTEgMzQuNjY0NUMxNy44MjkyIDM0LjY2NDMgMTcuODI5NCAzNC42NjQgMTcuODI5NyAzNC42NjM3QzE3LjgzMDEgMzQuNjYzMiAxNy44MzA4IDM0LjY2MjQgMTcuODMxNiAzNC42NjE0QzE3LjgzMzIgMzQuNjU5NCAxNy44MzU0IDM0LjY1NjYgMTcuODM4MyAzNC42NTI5QzE3Ljg0NDEgMzQuNjQ1NiAxNy44NTI2IDM0LjYzNTEgMTcuODYzNSAzNC42MjEzQzE3Ljg4NTQgMzQuNTkzOCAxNy45MTc0IDM0LjU1MzQgMTcuOTU4OCAzNC41MDA3QzE4LjA0MTYgMzQuMzk1NCAxOC4xNjIxIDM0LjI0MSAxOC4zMTQ5IDM0LjA0MjJDMTguNjIwNSAzMy42NDQ2IDE5LjA1NTYgMzMuMDY4OSAxOS41NzcxIDMyLjM1MjZDMjAuNjE5MyAzMC45MjA5IDIyLjAxMDUgMjguOTIxNiAyMy40MDM2IDI2LjY1MzhDMjQuNzk0OCAyNC4zODg5IDI2LjE5OTUgMjEuODM3OCAyNy4yNTk0IDE5LjMwNDNDMjguMzEyNSAxNi43ODczIDI5LjA2MTIgMTQuMjA0OCAyOS4wNjI1IDExLjkwMDZMMjYuOTM3NSAxMS44OTk0Wk0xNyAxNS45Mzc1QzE5LjkzNCAxNS45Mzc1IDIyLjMxMjUgMTMuNTU5IDIyLjMxMjUgMTAuNjI1SDIwLjE4NzVDMjAuMTg3NSAxMi4zODU0IDE4Ljc2MDQgMTMuODEyNSAxNyAxMy44MTI1VjE1LjkzNzVaTTExLjY4NzUgIDEwLjYyNUMxMS42ODc1IDEzLjU1OSAxNC4wNjYgMTUuOTM3NSAxNyAxNS45Mzc1VjEzLjgxMjVDMTUuMjM5NiAxMy44MTI1IDEzLjgxMjUgMTIuMzg1NCAxMy44MTI1IDEwLjYyNUgxMS42ODc1Wk0xNyA1LjMxMjVDMTQuMDY2IDUuMzEyNSAxMS42ODc1IDcuNjkwOTkgMTEuNjg3NSAxMC42MjVIMTMuODEyNUMxMy44MTI1IDguODY0NTkgMTUuMjM5NiA3LjQzNzUgMTcgNy40Mzc1VjUuMzEyNVpNMjIuMzEyNSAxMC42MjVDMjIuMzEyNSA3LjY5MDk5IDE5LjkzNCA1LjMxMjUgMTcgNS4zMTI1VjcuNDM3NUMxOC43NjA0IDcuNDM3NSAyMC4xODc1IDguODY0NTkgMjAuMTg3NSAxMC42MjVIMjIuMzEyNVoiIGZpbGw9ImJsYWNrIiBmaWxsLW9wYWNpdHk9IjAuMzgiIG1hc2s9InVybCgjcGF0aC0yLWluc2lkZS0xXzg4MTZfMjYzODg3KSIvPgogIDxkZWZzPgogICAgPGZpbHRlciBpZD0iZmlsdGVyMF9iZl84ODE2XzI2Mzg4NyIgeD0iMTIuNzUiIHk9IjE0Ljc1IiB3aWR0aD0iMjMuOTQzNCIgaGVpZ2h0PSIyMi41IiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgICAgIDxmZUZsb29kIGZsb29kLW9wYWNpdHk9IjAiIHJlc3VsdD0iQmFja2dyb3VuZEltYWdlRml4Ii8+CiAgICAgIDxmZUdhdXNzaWFuQmx1ciBpbj0iQmFja2dyb3VuZEltYWdlRml4IiBzdGREZXZpYXRpb249IjIuMTI1Ii8+CiAgICAgIDxmZUNvbXBvc2l0ZSBpbjI9IlNvdXJjZUFscGhhIiBvcGVyYXRvcj0iaW4iIHJlc3VsdD0iZWZmZWN0MV9iYWNrZ3JvdW5kQmx1cl84ODE2XzI2Mzg4NyIvPgogICAgICA8ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9ImVmZmVjdDFfYmFja2dyb3VuZEJsdXJfODgxNl8yNjM4ODciIHJlc3VsdD0ic2hhcGUiLz4KICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC41IiByZXN1bHQ9ImVmZmVjdDJfZm9yZWdyb3VuZEJsdXJfODgxNl8yNjM4ODciLz4KICAgIDwvZmlsdGVyPgogIDwvZGVmcz4KPC9zdmc+\",\"imageSize\":34,\"imageFunction\":\"var res = {\\n url: images[0],\\n size: 40\\n}\\nvar temperature = data.temperature;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120;\\n var index = Math.min(3, Math.floor(4 * percent));\\n res.url = images[index];\\n}\\nreturn res;\\n\",\"images\":[\"tb-image;/api/images/system/map_marker_image_0.png\",\"tb-image;/api/images/system/map_marker_image_1.png\",\"tb-image;/api/images/system/map_marker_image_2.png\",\"tb-image;/api/images/system/map_marker_image_3.png\"]},\"markerOffsetX\":0.5,\"markerOffsetY\":1,\"positionFunction\":\"return {x: origXPos, y: origYPos};\",\"markerClustering\":{\"enable\":false,\"zoomOnClick\":true,\"maxZoom\":null,\"maxClusterRadius\":80,\"zoomAnimation\":true,\"showCoverageOnHover\":true,\"spiderfyOnMaxZoom\":false,\"chunkedLoad\":false,\"lazyLoad\":true,\"useClusterMarkerColorFunction\":false,\"clusterMarkerColorFunction\":null}}],\"polygons\":[],\"circles\":[],\"additionalDataSources\":[],\"controlsPosition\":\"topleft\",\"zoomActions\":[\"scroll\",\"doubleClick\",\"controlButtons\"],\"fitMapBounds\":true,\"useDefaultCenterPosition\":false,\"defaultCenterPosition\":\"0,0\",\"defaultZoomLevel\":null,\"mapPageSize\":16384,\"background\":{\"type\":\"color\",\"color\":\"#fff\",\"overlay\":{\"enabled\":false,\"color\":\"rgba(255,255,255,0.72)\",\"blur\":3}},\"padding\":\"8px\"},\"title\":\"Image Map\",\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"showTitleIcon\":false,\"titleTooltip\":\"\",\"dropShadow\":true,\"enableFullscreen\":true,\"widgetStyle\":{},\"widgetCss\":\"\",\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"configMode\":\"basic\",\"titleFont\":null,\"titleColor\":null,\"margin\":\"0px\",\"borderRadius\":\"0px\",\"iconSize\":\"24px\",\"titleIcon\":\"map\",\"iconColor\":\"#1F6BDD\",\"actions\":{\"tooltipAction\":[{\"name\":\"testTag\",\"icon\":\"more_horiz\",\"useShowWidgetActionFunction\":null,\"showWidgetActionFunction\":\"return true;\",\"type\":\"custom\",\"customFunction\":\"console.log('It works!!!');\\n\\nconsole.log(entityName);\\n\\nconsole.log(additionalParams);\",\"openInSeparateDialog\":false,\"openInPopover\":false,\"id\":\"f9b4925a-818c-15d2-6220-cf2f317bc7fe\"}]}}" + "defaultConfig": "{\"datasources\":[],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"rgba(0, 0, 0, 0)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"mapType\":\"image\",\"layers\":[],\"markers\":[{\"dsType\":\"function\",\"dsLabel\":\"First point\",\"dsDeviceId\":null,\"dsEntityAliasId\":null,\"dsFilterId\":null,\"additionalDataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"temperature\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.8239425680406081,\"funcBody\":\"var value = prevValue + Math.random() * 40 - 20;\\nif (value < -60) {\\n\\tvalue = -60;\\n} else if (value > 60) {\\n\\tvalue = 60;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"label\":{\"show\":true,\"type\":\"pattern\",\"pattern\":\"${entityName}\"},\"tooltip\":{\"show\":true,\"type\":\"pattern\",\"pattern\":\"${entityName}X Pos: ${xPos:2}Y Pos: ${yPos:2}Temperature: ${temperature} °CSee tooltip settings for details\",\"patternFunction\":null,\"trigger\":\"click\",\"autoclose\":true,\"offsetX\":0,\"offsetY\":-1},\"groups\":null,\"xKey\":{\"name\":\"f(x)\",\"label\":\"latitude\",\"type\":\"function\",\"funcBody\":\"var value = prevValue || 0.2;\\nif (time % 5000 < 500) {\\n value += Math.random() * 0.05 - 0.025;\\n}\\nreturn value;\",\"settings\":{},\"color\":\"#2196f3\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null},\"yKey\":{\"name\":\"f(x)\",\"label\":\"longitude\",\"type\":\"function\",\"funcBody\":\"var value = prevValue || 0.3;\\nif (time % 5000 < 500) {\\n value += Math.random() * 0.05 - 0.025;\\n}\\nreturn value;\",\"settings\":{},\"color\":\"#2196f3\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null},\"markerType\":\"shape\",\"markerShape\":{\"shape\":\"markerShape1\",\"size\":34,\"color\":{\"type\":\"function\",\"color\":\"#307FE5\",\"colorFunction\":\"var temperature = data.temperature;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\\n\"}},\"markerIcon\":{\"icon\":\"mdi:lightbulb-on\",\"size\":34,\"color\":{\"type\":\"constant\",\"color\":\"#307FE5\"}},\"markerImage\":{\"type\":\"image\",\"image\":\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii0xOTEuMzUgLTM1MS4xOCAxMDgzLjU4IDE3MzAuNDYiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsPSIjZmU3NTY5IiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMzciIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTTM1MS44MzMgMTM2MC43OGMtMzguNzY2LTE5MC4zLTEwNy4xMTYtMzQ4LjY2NS0xODkuOTAzLTQ5NS40NEMxMDAuNTIzIDc1Ni40NjkgMjkuMzg2IDY1NS45NzgtMzYuNDM0IDU1MC40MDRjLTIxLjk3Mi0zNS4yNDQtNDAuOTM0LTcyLjQ3Ny02Mi4wNDctMTA5LjA1NC00Mi4yMTYtNzMuMTM3LTc2LjQ0NC0xNTcuOTM1LTc0LjI2OS0yNjcuOTMyIDIuMTI1LTEwNy40NzMgMzMuMjA4LTE5My42ODUgNzguMDMtMjY0LjE3M0MtMjEtMjA2LjY5IDEwMi40ODEtMzAxLjc0NSAyNjguMTY0LTMyNi43MjRjMTM1LjQ2Ni0yMC40MjUgMjYyLjQ3NSAxNC4wODIgMzUyLjU0MyA2Ni43NDcgNzMuNiA0My4wMzggMTMwLjU5NiAxMDAuNTI4IDE3My45MiAxNjguMjggNDUuMjIgNzAuNzE2IDc2LjM2IDE1NC4yNiA3OC45NzEgMjYzLjIzMyAxLjMzNyA1NS44My03LjgwNSAxMDcuNTMyLTIwLjY4NCAxNTAuNDE3LTEzLjAzNCA0My40MS0zMy45OTYgNzkuNjk1LTUyLjY0NiAxMTguNDU1LTM2LjQwNiA3NS42NTktODIuMDQ5IDE0NC45ODEtMTI3Ljg1NSAyMTQuMzQ1LTEzNi40MzcgMjA2LjYwNi0yNjQuNDk2IDQxNy4zMS0zMjAuNTggNzA2LjAyOHoiLz48Y2lyY2xlIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBjeD0iMzUyLjg5MSIgY3k9IjIyNS43NzkiIHI9IjE4My4zMzIiLz48L3N2Zz4=\",\"imageSize\":34},\"markerOffsetX\":0.5,\"markerOffsetY\":1,\"positionFunction\":\"return {x: origXPos, y: origYPos};\",\"markerClustering\":{\"enable\":false,\"zoomOnClick\":true,\"maxZoom\":null,\"maxClusterRadius\":80,\"zoomAnimation\":true,\"showCoverageOnHover\":true,\"spiderfyOnMaxZoom\":false,\"chunkedLoad\":false,\"lazyLoad\":true,\"useClusterMarkerColorFunction\":false,\"clusterMarkerColorFunction\":null}},{\"dsType\":\"function\",\"dsLabel\":\"Second point\",\"dsDeviceId\":null,\"dsEntityAliasId\":null,\"dsFilterId\":null,\"additionalDataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"temperature\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.7826299113906372,\"funcBody\":\"var value = prevValue + Math.random() * 40 - 20;\\nif (value < -60) {\\n\\tvalue = -60;\\n} else if (value > 60) {\\n\\tvalue = 60;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"label\":{\"show\":true,\"type\":\"pattern\",\"pattern\":\"${entityName}\"},\"tooltip\":{\"show\":true,\"type\":\"pattern\",\"pattern\":\"${entityName}X Pos: ${xPos:2}Y Pos: ${yPos:2}Temperature: ${temperature} °CSee tooltip settings for details\",\"patternFunction\":null,\"trigger\":\"click\",\"autoclose\":true,\"offsetX\":0,\"offsetY\":-1},\"groups\":null,\"xKey\":{\"name\":\"f(x)\",\"label\":\"latitude\",\"type\":\"function\",\"funcBody\":\"var value = prevValue || 0.6;\\nif (time % 4000 < 500) {\\n value += Math.random() * 0.05 - 0.025;\\n}\\nreturn value;\",\"settings\":{},\"color\":\"#2196f3\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null},\"yKey\":{\"name\":\"f(x)\",\"label\":\"longitude\",\"type\":\"function\",\"funcBody\":\"var value = prevValue || 0.7;\\nif (time % 4000 < 500) {\\n value += Math.random() * 0.05 - 0.025;\\n}\\nreturn value;\",\"settings\":{},\"color\":\"#2196f3\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null},\"markerType\":\"image\",\"markerShape\":{\"shape\":\"markerShape1\",\"size\":34,\"color\":{\"type\":\"constant\",\"color\":\"#307FE5\"}},\"markerIcon\":{\"icon\":\"\",\"size\":34,\"color\":{\"type\":\"constant\",\"color\":\"#307FE5\"}},\"markerImage\":{\"type\":\"function\",\"image\":\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzNCIgaGVpZ2h0PSIzNCIgdmlld0JveD0iMCAwIDM0IDM0IiBmaWxsPSJub25lIj4KICA8ZyBmaWx0ZXI9InVybCgjZmlsdGVyMF9iZl84ODE2XzI2Mzg4NykiPgogICAgPHBhdGggZD0iTTE5IDI0LjVDMTcuNDA3NSAyNy40MTI1IDE3IDMzIDE3IDMzQzE3IDMzIDI3LjA4NTggMzIuMTk1NSAzMC45OTkyIDI3LjQ5OThDMzQgMjMuODk5MiAzMS45OTkyIDE5IDI3Ljk5OTIgMTlDMjMuOTk5MyAxOSAyMS4xOTI5IDIwLjQ4OTQgMTkgMjQuNVoiIGZpbGw9ImJsYWNrIiBmaWxsLW9wYWNpdHk9IjAuMjQiLz4KICA8L2c+CiAgPG1hc2sgaWQ9InBhdGgtMi1pbnNpZGUtMV84ODE2XzI2Mzg4NyIgZmlsbD0id2hpdGUiPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yOCAxMS45QzI4LjAwMzcgNS4zMjc2MSAyNC4yOTAyIDAgMTcgMEM5LjcwOTgzIDAgNS45OTYzIDUuMzI3NjEgNiAxMS45QzYuMDA0NzMgMjAuMjkzNyAxNyAzNCAxNyAzNEMxNyAzNCAyNy45OTUzIDIwLjI5MzcgMjggMTEuOVpNMjEuMjUgMTAuNjI1QzIxLjI1IDEyLjk3MjIgMTkuMzQ3MiAxNC44NzUgMTcgMTQuODc1QzE0LjY1MjggMTQuODc1IDEyLjc1IDEyLjk3MjIgMTIuNzUgMTAuNjI1QzEyLjc1IDguMjc3NzkgMTQuNjUyOCA2LjM3NSAxNyA2LjM3NUMxOS4zNDcyIDYuMzc1IDIxLjI1IDguMjc3NzkgMjEuMjUgMTAuNjI1WiIvPgogIDwvbWFzaz4KICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTI4IDExLjlDMjguMDAzNyA1LjMyNzYxIDI0LjI5MDIgMCAxNyAwQzkuNzA5ODMgMCA1Ljk5NjMgNS4zMjc2MSA2IDExLjlDNi4wMDQ3MyAyMC4yOTM3IDE3IDM0IDE3IDM0QzE3IDM0IDI3Ljk5NTMgMjAuMjkzNyAyOCAxMS45Wk0yMS4yNSAxMC42MjVDMjEuMjUgMTIuOTcyMiAxOS4zNDcyIDE0Ljg3NSAxNyAxNC44NzVDMTQuNjUyOCAxNC44NzUgMTIuNzUgMTIuOTcyMiAxMi43NSAxMC42MjVDMTIuNzUgOC4yNzc3OSAxNC42NTI4IDYuMzc1IDE3IDYuMzc1QzE5LjM0NzIgNi4zNzUgMjEuMjUgOC4yNzc3OSAyMS4yNSAxMC42MjVaIiBmaWxsPSIjMzA3ZmU1Ii8+CiAgPHBhdGggZD0iTTI4IDExLjlMMjkuMDYyNSAxMS45MDA2TDI4IDExLjlaTTYgMTEuOUw3LjA2MjUgMTEuODk5NEw2IDExLjlaTTE3IDM0TDE2LjE3MTIgMzQuNjY0OUwxNyAzNS42OThMMTcuODI4OCAzNC42NjQ5TDE3IDM0Wk0xNyAxLjA2MjVDMjAuMzY0MSAxLjA2MjUgMjIuODA4NSAyLjI4MDA2IDI0LjQyNzMgNC4xNzUzOUMyNi4wNjUyIDYuMDkzMjMgMjYuOTM5MiA4LjgwMzMxIDI2LjkzNzUgMTEuODk5NEwyOS4wNjI1IDExLjkwMDZDMjkuMDY0NCA4LjQyNDMgMjguMDgzNSA1LjE4NDM4IDI2LjA0MzEgMi43OTUzMkMyMy45ODM1IDAuMzgzNzQyIDIwLjkyNjEgLTEuMDYyNSAxNyAtMS4wNjI1VjEuMDYyNVpNNy4wNjI1IDExLjg5OTRDNy4wNjA3NiA4LjgwMzMxIDcuOTM0NzcgNi4wOTMyMyA5LjU3Mjc0IDQuMTc1MzlDMTEuMTkxNSAyLjI4MDA2IDEzLjYzNTkgMS4wNjI1IDE3IDEuMDYyNVYtMS4wNjI1QzEzLjA3MzkgLTEuMDYyNSAxMC4wMTY1IDAuMzgzNzQxIDcuOTU2ODYgMi43OTUzMkM1LjkxNjQ1IDUuMTg0MzggNC45MzU1NSA4LjQyNDMgNC45Mzc1IDExLjkwMDZMNy4wNjI1IDExLjg5OTRaTTE3IDM0QzE3LjgyODggMzMuMzM1MSAxNy44Mjg4IDMzLjMzNTIgMTcuODI4OCAzMy4zMzUyQzE3LjgyODggMzMuMzM1MiAxNy44Mjg4IDMzLjMzNTEgMTcuODI4NyAzMy4zMzVDMTcuODI4NSAzMy4zMzQ4IDE3LjgyODEgMzMuMzM0MyAxNy44Mjc2IDMzLjMzMzZDMTcuODI2NSAzMy4zMzIzIDE3LjgyNDggMzMuMzMwMSAxNy44MjI0IDMzLjMyNzFDMTcuODE3NiAzMy4zMjEyIDE3LjgxMDMgMzMuMzEyIDE3LjgwMDQgMzMuMjk5NUMxNy43ODA3IDMzLjI3NDcgMTcuNzUwOSAzMy4yMzcxIDE3LjcxMTggMzMuMTg3NEMxNy42MzM1IDMzLjA4NzggMTcuNTE3OCAzMi45Mzk1IDE3LjM3IDMyLjc0NzJDMTcuMDc0MiAzMi4zNjI0IDE2LjY1MDMgMzEuODAxNyAxNi4xNDA5IDMxLjEwMTlDMTUuMTIxNCAyOS43MDE0IDEzLjc2MzQgMjcuNzQ5NSAxMi40MDcxIDI1LjU0MTVDMTEuMDQ5IDIzLjMzMDYgOS43MDM4OCAyMC44ODEzIDguNzAwOTEgMTguNDg0MUM3LjY5MTA5IDE2LjA3MDYgNy4wNjM1NyAxMy43OTIxIDcuMDYyNSAxMS44OTk0TDQuOTM3NSAxMS45MDA2QzQuOTM4OCAxNC4yMDQ4IDUuNjg3NDYgMTYuNzg3MyA2Ljc0MDU4IDE5LjMwNDNDNy44MDA1NSAyMS44Mzc4IDkuMjA1MTYgMjQuMzg4OSAxMC41OTY0IDI2LjY1MzhDMTEuOTg5NSAyOC45MjE2IDEzLjM4MDcgMzAuOTIwOSAxNC40MjI5IDMyLjM1MjZDMTQuOTQ0NCAzMy4wNjg5IDE1LjM3OTUgMzMuNjQ0NiAxNS42ODUxIDM0LjA0MjJDMTUuODM3OSAzNC4yNDEgMTUuOTU4NCAzNC4zOTU0IDE2LjA0MTIgMzQuNTAwN0MxNi4wODI2IDM0LjU1MzQgMTYuMTE0NiAzNC41OTM4IDE2LjEzNjUgMzQuNjIxM0MxNi4xNDc0IDM0LjYzNTEgMTYuMTU1OSAzNC42NDU2IDE2LjE2MTcgMzQuNjUyOUMxNi4xNjQ2IDM0LjY1NjYgMTYuMTY2OCAzNC42NTk0IDE2LjE2ODQgMzQuNjYxNEMxNi4xNjkyIDM0LjY2MjQgMTYuMTY5OSAzNC42NjMyIDE2LjE3MDMgMzQuNjYzN0MxNi4xNzA2IDM0LjY2NCAxNi4xNzA4IDM0LjY2NDMgMTYuMTcwOSAzNC42NjQ1QzE2LjE3MTEgMzQuNjY0NyAxNi4xNzEyIDM0LjY2NDkgMTcgMzRaTTI2LjkzNzUgMTEuODk5NEMyNi45MzY0IDEzLjc5MjEgMjYuMzA4OSAxNi4wNzA2IDI1LjI5OTEgMTguNDg0MUMyNC4yOTYxIDIwLjg4MTMgMjIuOTUxIDIzLjMzMDYgMjEuNTkyOSAyNS41NDE1QzIwLjIzNjYgMjcuNzQ5NSAxOC44Nzg2IDI5LjcwMTQgMTcuODU5MSAzMS4xMDE5QzE3LjM0OTcgMzEuODAxNyAxNi45MjU4IDMyLjM2MjQgMTYuNjMgMzIuNzQ3MkMxNi40ODIyIDMyLjkzOTUgMTYuMzY2NSAzMy4wODc4IDE2LjI4ODIgMzMuMTg3NEMxNi4yNDkxIDMzLjIzNzEgMTYuMjE5MyAzMy4yNzQ3IDE2LjE5OTYgMzMuMjk5NUMxNi4xODk3IDMzLjMxMiAxNi4xODI0IDMzLjMyMTIgMTYuMTc3NiAzMy4zMjcxQzE2LjE3NTIgMzMuMzMwMSAxNi4xNzM1IDMzLjMzMjMgMTYuMTcyNCAzMy4zMzM2QzE2LjE3MTkgMzMuMzM0MyAxNi4xNzE1IDMzLjMzNDggMTYuMTcxMyAzMy4zMzVDMTYuMTcxMiAzMy4zMzUxIDE2LjE3MTIgMzMuMzM1MiAxNi4xNzEyIDMzLjMzNTJDMTYuMTcxMiAzMy4zMzUyIDE2LjE3MTIgMzMuMzM1MSAxNyAzNEMxNy44Mjg4IDM0LjY2NDkgMTcuODI4OSAzNC42NjQ3IDE3LjgyOTEgMzQuNjY0NUMxNy44MjkyIDM0LjY2NDMgMTcuODI5NCAzNC42NjQgMTcuODI5NyAzNC42NjM3QzE3LjgzMDEgMzQuNjYzMiAxNy44MzA4IDM0LjY2MjQgMTcuODMxNiAzNC42NjE0QzE3LjgzMzIgMzQuNjU5NCAxNy44MzU0IDM0LjY1NjYgMTcuODM4MyAzNC42NTI5QzE3Ljg0NDEgMzQuNjQ1NiAxNy44NTI2IDM0LjYzNTEgMTcuODYzNSAzNC42MjEzQzE3Ljg4NTQgMzQuNTkzOCAxNy45MTc0IDM0LjU1MzQgMTcuOTU4OCAzNC41MDA3QzE4LjA0MTYgMzQuMzk1NCAxOC4xNjIxIDM0LjI0MSAxOC4zMTQ5IDM0LjA0MjJDMTguNjIwNSAzMy42NDQ2IDE5LjA1NTYgMzMuMDY4OSAxOS41NzcxIDMyLjM1MjZDMjAuNjE5MyAzMC45MjA5IDIyLjAxMDUgMjguOTIxNiAyMy40MDM2IDI2LjY1MzhDMjQuNzk0OCAyNC4zODg5IDI2LjE5OTUgMjEuODM3OCAyNy4yNTk0IDE5LjMwNDNDMjguMzEyNSAxNi43ODczIDI5LjA2MTIgMTQuMjA0OCAyOS4wNjI1IDExLjkwMDZMMjYuOTM3NSAxMS44OTk0Wk0xNyAxNS45Mzc1QzE5LjkzNCAxNS45Mzc1IDIyLjMxMjUgMTMuNTU5IDIyLjMxMjUgMTAuNjI1SDIwLjE4NzVDMjAuMTg3NSAxMi4zODU0IDE4Ljc2MDQgMTMuODEyNSAxNyAxMy44MTI1VjE1LjkzNzVaTTExLjY4NzUgIDEwLjYyNUMxMS42ODc1IDEzLjU1OSAxNC4wNjYgMTUuOTM3NSAxNyAxNS45Mzc1VjEzLjgxMjVDMTUuMjM5NiAxMy44MTI1IDEzLjgxMjUgMTIuMzg1NCAxMy44MTI1IDEwLjYyNUgxMS42ODc1Wk0xNyA1LjMxMjVDMTQuMDY2IDUuMzEyNSAxMS42ODc1IDcuNjkwOTkgMTEuNjg3NSAxMC42MjVIMTMuODEyNUMxMy44MTI1IDguODY0NTkgMTUuMjM5NiA3LjQzNzUgMTcgNy40Mzc1VjUuMzEyNVpNMjIuMzEyNSAxMC42MjVDMjIuMzEyNSA3LjY5MDk5IDE5LjkzNCA1LjMxMjUgMTcgNS4zMTI1VjcuNDM3NUMxOC43NjA0IDcuNDM3NSAyMC4xODc1IDguODY0NTkgMjAuMTg3NSAxMC42MjVIMjIuMzEyNVoiIGZpbGw9ImJsYWNrIiBmaWxsLW9wYWNpdHk9IjAuMzgiIG1hc2s9InVybCgjcGF0aC0yLWluc2lkZS0xXzg4MTZfMjYzODg3KSIvPgogIDxkZWZzPgogICAgPGZpbHRlciBpZD0iZmlsdGVyMF9iZl84ODE2XzI2Mzg4NyIgeD0iMTIuNzUiIHk9IjE0Ljc1IiB3aWR0aD0iMjMuOTQzNCIgaGVpZ2h0PSIyMi41IiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgICAgIDxmZUZsb29kIGZsb29kLW9wYWNpdHk9IjAiIHJlc3VsdD0iQmFja2dyb3VuZEltYWdlRml4Ii8+CiAgICAgIDxmZUdhdXNzaWFuQmx1ciBpbj0iQmFja2dyb3VuZEltYWdlRml4IiBzdGREZXZpYXRpb249IjIuMTI1Ii8+CiAgICAgIDxmZUNvbXBvc2l0ZSBpbjI9IlNvdXJjZUFscGhhIiBvcGVyYXRvcj0iaW4iIHJlc3VsdD0iZWZmZWN0MV9iYWNrZ3JvdW5kQmx1cl84ODE2XzI2Mzg4NyIvPgogICAgICA8ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9ImVmZmVjdDFfYmFja2dyb3VuZEJsdXJfODgxNl8yNjM4ODciIHJlc3VsdD0ic2hhcGUiLz4KICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC41IiByZXN1bHQ9ImVmZmVjdDJfZm9yZWdyb3VuZEJsdXJfODgxNl8yNjM4ODciLz4KICAgIDwvZmlsdGVyPgogIDwvZGVmcz4KPC9zdmc+\",\"imageSize\":34,\"imageFunction\":\"var res = {\\n url: images[0],\\n size: 40\\n}\\nvar temperature = data.temperature;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120;\\n var index = Math.min(3, Math.floor(4 * percent));\\n res.url = images[index];\\n}\\nreturn res;\\n\",\"images\":[\"tb-image;/api/images/system/map_marker_image_0.png\",\"tb-image;/api/images/system/map_marker_image_1.png\",\"tb-image;/api/images/system/map_marker_image_2.png\",\"tb-image;/api/images/system/map_marker_image_3.png\"]},\"markerOffsetX\":0.5,\"markerOffsetY\":1,\"positionFunction\":\"return {x: origXPos, y: origYPos};\",\"markerClustering\":{\"enable\":false,\"zoomOnClick\":true,\"maxZoom\":null,\"maxClusterRadius\":80,\"zoomAnimation\":true,\"showCoverageOnHover\":true,\"spiderfyOnMaxZoom\":false,\"chunkedLoad\":false,\"lazyLoad\":true,\"useClusterMarkerColorFunction\":false,\"clusterMarkerColorFunction\":null}}],\"polygons\":[],\"circles\":[],\"additionalDataSources\":[],\"controlsPosition\":\"topleft\",\"zoomActions\":[\"scroll\",\"doubleClick\",\"controlButtons\"],\"fitMapBounds\":true,\"useDefaultCenterPosition\":false,\"defaultCenterPosition\":\"0,0\",\"defaultZoomLevel\":null,\"minZoomLevel\":16,\"mapPageSize\":16384,\"background\":{\"type\":\"color\",\"color\":\"#fff\",\"overlay\":{\"enabled\":false,\"color\":\"rgba(255,255,255,0.72)\",\"blur\":3}},\"padding\":\"8px\",\"imageSource\":{\"sourceType\":\"image\",\"url\":\"tb-image;/api/images/system/image_map_system_widget_map_image.svg\",\"entityAliasId\":null,\"entityKey\":null}},\"title\":\"Image Map\",\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"showTitleIcon\":false,\"titleTooltip\":\"\",\"dropShadow\":true,\"enableFullscreen\":true,\"widgetStyle\":{},\"widgetCss\":\"\",\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"configMode\":\"basic\",\"titleFont\":null,\"titleColor\":null,\"margin\":\"0px\",\"borderRadius\":\"0px\",\"iconSize\":\"24px\",\"titleIcon\":\"map\",\"iconColor\":\"#1F6BDD\",\"actions\":{\"tooltipAction\":[]}}" }, "resources": [ { diff --git a/application/src/main/data/json/system/widget_types/map.json b/application/src/main/data/json/system/widget_types/map.json index e4aba10c61..8fecb89f70 100644 --- a/application/src/main/data/json/system/widget_types/map.json +++ b/application/src/main/data/json/system/widget_types/map.json @@ -11,13 +11,13 @@ "resources": [], "templateHtml": "\n", "templateCss": "", - "controllerScript": "self.onInit = function() {\n self.ctx.$scope.mapWidget.onInit();\n};\n\nself.typeParameters = function() {\n return {\n hideDataTab: true,\n hideDataSettings: true,\n previewWidth: '80%',\n embedTitlePanel: true,\n datasourcesOptional: true\n };\n}\n\nself.actionSources = function() {\n return {\n markerClick: {\n name: 'widget-action.marker-click',\n multiple: false\n },\n polygonClick: {\n name: 'widget-action.polygon-click',\n multiple: false\n },\n circleClick: {\n name: 'widget-action.circle-click',\n multiple: false\n },\n tooltipAction: {\n name: 'widget-action.tooltip-tag-action',\n multiple: true\n }\n };\n}\n", + "controllerScript": "self.onInit = function() {\n self.ctx.$scope.mapWidget.onInit();\n};\n\nself.typeParameters = function() {\n return {\n hideDataTab: true,\n hideDataSettings: true,\n previewWidth: '80%',\n embedTitlePanel: true,\n datasourcesOptional: true\n };\n}\n\nself.actionSources = function() {\n return {\n tooltipAction: {\n name: 'widget-action.tooltip-tag-action',\n multiple: true\n }\n };\n}\n", "settingsForm": [], "dataKeySettingsForm": [], "settingsDirective": "tb-map-widget-settings", "hasBasicMode": true, "basicModeDirective": "tb-map-basic-config", - "defaultConfig": "{\"datasources\":[],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"rgba(0, 0, 0, 0)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"mapType\":\"geoMap\",\"layers\":[{\"provider\":\"openstreet\",\"layerType\":\"OpenStreetMap.Mapnik\"},{\"provider\":\"openstreet\",\"layerType\":\"OpenStreetMap.HOT\"},{\"provider\":\"openstreet\",\"layerType\":\"Esri.WorldStreetMap\"},{\"provider\":\"openstreet\",\"layerType\":\"Esri.WorldTopoMap\"},{\"provider\":\"openstreet\",\"layerType\":\"Esri.WorldImagery\"},{\"provider\":\"openstreet\",\"layerType\":\"CartoDB.Positron\"},{\"provider\":\"openstreet\",\"layerType\":\"CartoDB.DarkMatter\"}],\"imageSourceType\":null,\"imageUrl\":null,\"imageEntityAlias\":null,\"imageUrlAttribute\":null,\"markers\":[{\"dsType\":\"function\",\"dsLabel\":\"First point\",\"dsDeviceId\":null,\"dsEntityAliasId\":null,\"dsFilterId\":null,\"additionalDataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"temperature\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.8239425680406081,\"funcBody\":\"var value = prevValue + Math.random() * 40 - 20;\\nif (value < -60) {\\n\\tvalue = -60;\\n} else if (value > 60) {\\n\\tvalue = 60;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"label\":{\"show\":true,\"type\":\"pattern\",\"pattern\":\"${entityName}\"},\"tooltip\":{\"show\":true,\"trigger\":\"click\",\"autoclose\":true,\"type\":\"pattern\",\"pattern\":\"${entityName}Latitude: ${latitude:7}Longitude: ${longitude:7}Temperature: ${temperature} °CSee tooltip settings for details\",\"offsetX\":0,\"offsetY\":-1},\"groups\":null,\"xKey\":{\"name\":\"f(x)\",\"label\":\"latitude\",\"type\":\"function\",\"funcBody\":\"var value = prevValue || 15.833293;\\nif (time % 500 < 500) {\\n value += Math.random() * 0.05 - 0.025;\\n}\\nreturn value;\",\"settings\":{},\"color\":\"#2196f3\"},\"yKey\":{\"name\":\"f(x)\",\"label\":\"longitude\",\"type\":\"function\",\"funcBody\":\"var value = prevValue || -90.454350;\\nif (time % 500 < 500) {\\n value += Math.random() * 0.05 - 0.025;\\n}\\nreturn value;\",\"settings\":{},\"color\":\"#2196f3\"},\"markerType\":\"shape\",\"markerShape\":{\"shape\":\"markerShape1\",\"size\":34,\"color\":{\"type\":\"function\",\"color\":\"#307FE5\",\"colorFunction\":\"var temperature = data.temperature;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\\n\"}},\"markerIcon\":{\"icon\":\"mdi:lightbulb-on\",\"size\":34,\"color\":{\"type\":\"constant\",\"color\":\"#307FE5\"}},\"markerImage\":{\"type\":\"image\",\"image\":\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii0xOTEuMzUgLTM1MS4xOCAxMDgzLjU4IDE3MzAuNDYiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsPSIjZmU3NTY5IiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMzciIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTTM1MS44MzMgMTM2MC43OGMtMzguNzY2LTE5MC4zLTEwNy4xMTYtMzQ4LjY2NS0xODkuOTAzLTQ5NS40NEMxMDAuNTIzIDc1Ni40NjkgMjkuMzg2IDY1NS45NzgtMzYuNDM0IDU1MC40MDRjLTIxLjk3Mi0zNS4yNDQtNDAuOTM0LTcyLjQ3Ny02Mi4wNDctMTA5LjA1NC00Mi4yMTYtNzMuMTM3LTc2LjQ0NC0xNTcuOTM1LTc0LjI2OS0yNjcuOTMyIDIuMTI1LTEwNy40NzMgMzMuMjA4LTE5My42ODUgNzguMDMtMjY0LjE3M0MtMjEtMjA2LjY5IDEwMi40ODEtMzAxLjc0NSAyNjguMTY0LTMyNi43MjRjMTM1LjQ2Ni0yMC40MjUgMjYyLjQ3NSAxNC4wODIgMzUyLjU0MyA2Ni43NDcgNzMuNiA0My4wMzggMTMwLjU5NiAxMDAuNTI4IDE3My45MiAxNjguMjggNDUuMjIgNzAuNzE2IDc2LjM2IDE1NC4yNiA3OC45NzEgMjYzLjIzMyAxLjMzNyA1NS44My03LjgwNSAxMDcuNTMyLTIwLjY4NCAxNTAuNDE3LTEzLjAzNCA0My40MS0zMy45OTYgNzkuNjk1LTUyLjY0NiAxMTguNDU1LTM2LjQwNiA3NS42NTktODIuMDQ5IDE0NC45ODEtMTI3Ljg1NSAyMTQuMzQ1LTEzNi40MzcgMjA2LjYwNi0yNjQuNDk2IDQxNy4zMS0zMjAuNTggNzA2LjAyOHoiLz48Y2lyY2xlIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBjeD0iMzUyLjg5MSIgY3k9IjIyNS43NzkiIHI9IjE4My4zMzIiLz48L3N2Zz4=\",\"imageSize\":34},\"markerOffsetX\":0.5,\"markerOffsetY\":1},{\"dsType\":\"function\",\"dsLabel\":\"Second point\",\"dsDeviceId\":null,\"dsEntityAliasId\":null,\"dsFilterId\":null,\"additionalDataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"temperature\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.7826299113906372,\"funcBody\":\"var value = prevValue + Math.random() * 40 - 20;\\nif (value < -60) {\\n\\tvalue = -60;\\n} else if (value > 60) {\\n\\tvalue = 60;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"label\":{\"show\":true,\"type\":\"pattern\",\"pattern\":\"${entityName}\"},\"tooltip\":{\"show\":true,\"trigger\":\"click\",\"autoclose\":true,\"type\":\"pattern\",\"pattern\":\"${entityName}Latitude: ${latitude:7}Longitude: ${longitude:7}Temperature: ${temperature} °CSee tooltip settings for details\",\"offsetX\":0,\"offsetY\":-1},\"groups\":null,\"xKey\":{\"name\":\"f(x)\",\"label\":\"latitude\",\"type\":\"function\",\"funcBody\":\"var value = prevValue || 14.450463;\\nif (time % 500 < 500) {\\n value += Math.random() * 0.05 - 0.025;\\n}\\nreturn value;\",\"settings\":{},\"color\":\"#2196f3\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null},\"yKey\":{\"name\":\"f(x)\",\"label\":\"longitude\",\"type\":\"function\",\"funcBody\":\"var value = prevValue || -84.845334;\\nif (time % 500 < 500) {\\n value += Math.random() * 0.05 - 0.025;\\n}\\nreturn value;\",\"settings\":{},\"color\":\"#2196f3\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null},\"markerType\":\"image\",\"markerShape\":{\"shape\":\"markerShape1\",\"size\":34,\"color\":{\"type\":\"constant\",\"color\":\"#307FE5\"}},\"markerIcon\":{\"icon\":\"\",\"size\":34,\"color\":{\"type\":\"constant\",\"color\":\"#307FE5\"}},\"markerImage\":{\"type\":\"function\",\"image\":\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzNCIgaGVpZ2h0PSIzNCIgdmlld0JveD0iMCAwIDM0IDM0IiBmaWxsPSJub25lIj4KICA8ZyBmaWx0ZXI9InVybCgjZmlsdGVyMF9iZl84ODE2XzI2Mzg4NykiPgogICAgPHBhdGggZD0iTTE5IDI0LjVDMTcuNDA3NSAyNy40MTI1IDE3IDMzIDE3IDMzQzE3IDMzIDI3LjA4NTggMzIuMTk1NSAzMC45OTkyIDI3LjQ5OThDMzQgMjMuODk5MiAzMS45OTkyIDE5IDI3Ljk5OTIgMTlDMjMuOTk5MyAxOSAyMS4xOTI5IDIwLjQ4OTQgMTkgMjQuNVoiIGZpbGw9ImJsYWNrIiBmaWxsLW9wYWNpdHk9IjAuMjQiLz4KICA8L2c+CiAgPG1hc2sgaWQ9InBhdGgtMi1pbnNpZGUtMV84ODE2XzI2Mzg4NyIgZmlsbD0id2hpdGUiPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yOCAxMS45QzI4LjAwMzcgNS4zMjc2MSAyNC4yOTAyIDAgMTcgMEM5LjcwOTgzIDAgNS45OTYzIDUuMzI3NjEgNiAxMS45QzYuMDA0NzMgMjAuMjkzNyAxNyAzNCAxNyAzNEMxNyAzNCAyNy45OTUzIDIwLjI5MzcgMjggMTEuOVpNMjEuMjUgMTAuNjI1QzIxLjI1IDEyLjk3MjIgMTkuMzQ3MiAxNC44NzUgMTcgMTQuODc1QzE0LjY1MjggMTQuODc1IDEyLjc1IDEyLjk3MjIgMTIuNzUgMTAuNjI1QzEyLjc1IDguMjc3NzkgMTQuNjUyOCA2LjM3NSAxNyA2LjM3NUMxOS4zNDcyIDYuMzc1IDIxLjI1IDguMjc3NzkgMjEuMjUgMTAuNjI1WiIvPgogIDwvbWFzaz4KICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTI4IDExLjlDMjguMDAzNyA1LjMyNzYxIDI0LjI5MDIgMCAxNyAwQzkuNzA5ODMgMCA1Ljk5NjMgNS4zMjc2MSA2IDExLjlDNi4wMDQ3MyAyMC4yOTM3IDE3IDM0IDE3IDM0QzE3IDM0IDI3Ljk5NTMgMjAuMjkzNyAyOCAxMS45Wk0yMS4yNSAxMC42MjVDMjEuMjUgMTIuOTcyMiAxOS4zNDcyIDE0Ljg3NSAxNyAxNC44NzVDMTQuNjUyOCAxNC44NzUgMTIuNzUgMTIuOTcyMiAxMi43NSAxMC42MjVDMTIuNzUgOC4yNzc3OSAxNC42NTI4IDYuMzc1IDE3IDYuMzc1QzE5LjM0NzIgNi4zNzUgMjEuMjUgOC4yNzc3OSAyMS4yNSAxMC42MjVaIiBmaWxsPSIjMzA3ZmU1Ii8+CiAgPHBhdGggZD0iTTI4IDExLjlMMjkuMDYyNSAxMS45MDA2TDI4IDExLjlaTTYgMTEuOUw3LjA2MjUgMTEuODk5NEw2IDExLjlaTTE3IDM0TDE2LjE3MTIgMzQuNjY0OUwxNyAzNS42OThMMTcuODI4OCAzNC42NjQ5TDE3IDM0Wk0xNyAxLjA2MjVDMjAuMzY0MSAxLjA2MjUgMjIuODA4NSAyLjI4MDA2IDI0LjQyNzMgNC4xNzUzOUMyNi4wNjUyIDYuMDkzMjMgMjYuOTM5MiA4LjgwMzMxIDI2LjkzNzUgMTEuODk5NEwyOS4wNjI1IDExLjkwMDZDMjkuMDY0NCA4LjQyNDMgMjguMDgzNSA1LjE4NDM4IDI2LjA0MzEgMi43OTUzMkMyMy45ODM1IDAuMzgzNzQyIDIwLjkyNjEgLTEuMDYyNSAxNyAtMS4wNjI1VjEuMDYyNVpNNy4wNjI1IDExLjg5OTRDNy4wNjA3NiA4LjgwMzMxIDcuOTM0NzcgNi4wOTMyMyA5LjU3Mjc0IDQuMTc1MzlDMTEuMTkxNSAyLjI4MDA2IDEzLjYzNTkgMS4wNjI1IDE3IDEuMDYyNVYtMS4wNjI1QzEzLjA3MzkgLTEuMDYyNSAxMC4wMTY1IDAuMzgzNzQxIDcuOTU2ODYgMi43OTUzMkM1LjkxNjQ1IDUuMTg0MzggNC45MzU1NSA4LjQyNDMgNC45Mzc1IDExLjkwMDZMNy4wNjI1IDExLjg5OTRaTTE3IDM0QzE3LjgyODggMzMuMzM1MSAxNy44Mjg4IDMzLjMzNTIgMTcuODI4OCAzMy4zMzUyQzE3LjgyODggMzMuMzM1MiAxNy44Mjg4IDMzLjMzNTEgMTcuODI4NyAzMy4zMzVDMTcuODI4NSAzMy4zMzQ4IDE3LjgyODEgMzMuMzM0MyAxNy44Mjc2IDMzLjMzMzZDMTcuODI2NSAzMy4zMzIzIDE3LjgyNDggMzMuMzMwMSAxNy44MjI0IDMzLjMyNzFDMTcuODE3NiAzMy4zMjEyIDE3LjgxMDMgMzMuMzEyIDE3LjgwMDQgMzMuMjk5NUMxNy43ODA3IDMzLjI3NDcgMTcuNzUwOSAzMy4yMzcxIDE3LjcxMTggMzMuMTg3NEMxNy42MzM1IDMzLjA4NzggMTcuNTE3OCAzMi45Mzk1IDE3LjM3IDMyLjc0NzJDMTcuMDc0MiAzMi4zNjI0IDE2LjY1MDMgMzEuODAxNyAxNi4xNDA5IDMxLjEwMTlDMTUuMTIxNCAyOS43MDE0IDEzLjc2MzQgMjcuNzQ5NSAxMi40MDcxIDI1LjU0MTVDMTEuMDQ5IDIzLjMzMDYgOS43MDM4OCAyMC44ODEzIDguNzAwOTEgMTguNDg0MUM3LjY5MTA5IDE2LjA3MDYgNy4wNjM1NyAxMy43OTIxIDcuMDYyNSAxMS44OTk0TDQuOTM3NSAxMS45MDA2QzQuOTM4OCAxNC4yMDQ4IDUuNjg3NDYgMTYuNzg3MyA2Ljc0MDU4IDE5LjMwNDNDNy44MDA1NSAyMS44Mzc4IDkuMjA1MTYgMjQuMzg4OSAxMC41OTY0IDI2LjY1MzhDMTEuOTg5NSAyOC45MjE2IDEzLjM4MDcgMzAuOTIwOSAxNC40MjI5IDMyLjM1MjZDMTQuOTQ0NCAzMy4wNjg5IDE1LjM3OTUgMzMuNjQ0NiAxNS42ODUxIDM0LjA0MjJDMTUuODM3OSAzNC4yNDEgMTUuOTU4NCAzNC4zOTU0IDE2LjA0MTIgMzQuNTAwN0MxNi4wODI2IDM0LjU1MzQgMTYuMTE0NiAzNC41OTM4IDE2LjEzNjUgMzQuNjIxM0MxNi4xNDc0IDM0LjYzNTEgMTYuMTU1OSAzNC42NDU2IDE2LjE2MTcgMzQuNjUyOUMxNi4xNjQ2IDM0LjY1NjYgMTYuMTY2OCAzNC42NTk0IDE2LjE2ODQgMzQuNjYxNEMxNi4xNjkyIDM0LjY2MjQgMTYuMTY5OSAzNC42NjMyIDE2LjE3MDMgMzQuNjYzN0MxNi4xNzA2IDM0LjY2NCAxNi4xNzA4IDM0LjY2NDMgMTYuMTcwOSAzNC42NjQ1QzE2LjE3MTEgMzQuNjY0NyAxNi4xNzEyIDM0LjY2NDkgMTcgMzRaTTI2LjkzNzUgMTEuODk5NEMyNi45MzY0IDEzLjc5MjEgMjYuMzA4OSAxNi4wNzA2IDI1LjI5OTEgMTguNDg0MUMyNC4yOTYxIDIwLjg4MTMgMjIuOTUxIDIzLjMzMDYgMjEuNTkyOSAyNS41NDE1QzIwLjIzNjYgMjcuNzQ5NSAxOC44Nzg2IDI5LjcwMTQgMTcuODU5MSAzMS4xMDE5QzE3LjM0OTcgMzEuODAxNyAxNi45MjU4IDMyLjM2MjQgMTYuNjMgMzIuNzQ3MkMxNi40ODIyIDMyLjkzOTUgMTYuMzY2NSAzMy4wODc4IDE2LjI4ODIgMzMuMTg3NEMxNi4yNDkxIDMzLjIzNzEgMTYuMjE5MyAzMy4yNzQ3IDE2LjE5OTYgMzMuMjk5NUMxNi4xODk3IDMzLjMxMiAxNi4xODI0IDMzLjMyMTIgMTYuMTc3NiAzMy4zMjcxQzE2LjE3NTIgMzMuMzMwMSAxNi4xNzM1IDMzLjMzMjMgMTYuMTcyNCAzMy4zMzM2QzE2LjE3MTkgMzMuMzM0MyAxNi4xNzE1IDMzLjMzNDggMTYuMTcxMyAzMy4zMzVDMTYuMTcxMiAzMy4zMzUxIDE2LjE3MTIgMzMuMzM1MiAxNi4xNzEyIDMzLjMzNTJDMTYuMTcxMiAzMy4zMzUyIDE2LjE3MTIgMzMuMzM1MSAxNyAzNEMxNy44Mjg4IDM0LjY2NDkgMTcuODI4OSAzNC42NjQ3IDE3LjgyOTEgMzQuNjY0NUMxNy44MjkyIDM0LjY2NDMgMTcuODI5NCAzNC42NjQgMTcuODI5NyAzNC42NjM3QzE3LjgzMDEgMzQuNjYzMiAxNy44MzA4IDM0LjY2MjQgMTcuODMxNiAzNC42NjE0QzE3LjgzMzIgMzQuNjU5NCAxNy44MzU0IDM0LjY1NjYgMTcuODM4MyAzNC42NTI5QzE3Ljg0NDEgMzQuNjQ1NiAxNy44NTI2IDM0LjYzNTEgMTcuODYzNSAzNC42MjEzQzE3Ljg4NTQgMzQuNTkzOCAxNy45MTc0IDM0LjU1MzQgMTcuOTU4OCAzNC41MDA3QzE4LjA0MTYgMzQuMzk1NCAxOC4xNjIxIDM0LjI0MSAxOC4zMTQ5IDM0LjA0MjJDMTguNjIwNSAzMy42NDQ2IDE5LjA1NTYgMzMuMDY4OSAxOS41NzcxIDMyLjM1MjZDMjAuNjE5MyAzMC45MjA5IDIyLjAxMDUgMjguOTIxNiAyMy40MDM2IDI2LjY1MzhDMjQuNzk0OCAyNC4zODg5IDI2LjE5OTUgMjEuODM3OCAyNy4yNTk0IDE5LjMwNDNDMjguMzEyNSAxNi43ODczIDI5LjA2MTIgMTQuMjA0OCAyOS4wNjI1IDExLjkwMDZMMjYuOTM3NSAxMS44OTk0Wk0xNyAxNS45Mzc1QzE5LjkzNCAxNS45Mzc1IDIyLjMxMjUgMTMuNTU5IDIyLjMxMjUgMTAuNjI1SDIwLjE4NzVDMjAuMTg3NSAxMi4zODU0IDE4Ljc2MDQgMTMuODEyNSAxNyAxMy44MTI1VjE1LjkzNzVaTTExLjY4NzUgIDEwLjYyNUMxMS42ODc1IDEzLjU1OSAxNC4wNjYgMTUuOTM3NSAxNyAxNS45Mzc1VjEzLjgxMjVDMTUuMjM5NiAxMy44MTI1IDEzLjgxMjUgMTIuMzg1NCAxMy44MTI1IDEwLjYyNUgxMS42ODc1Wk0xNyA1LjMxMjVDMTQuMDY2IDUuMzEyNSAxMS42ODc1IDcuNjkwOTkgMTEuNjg3NSAxMC42MjVIMTMuODEyNUMxMy44MTI1IDguODY0NTkgMTUuMjM5NiA3LjQzNzUgMTcgNy40Mzc1VjUuMzEyNVpNMjIuMzEyNSAxMC42MjVDMjIuMzEyNSA3LjY5MDk5IDE5LjkzNCA1LjMxMjUgMTcgNS4zMTI1VjcuNDM3NUMxOC43NjA0IDcuNDM3NSAyMC4xODc1IDguODY0NTkgMjAuMTg3NSAxMC42MjVIMjIuMzEyNVoiIGZpbGw9ImJsYWNrIiBmaWxsLW9wYWNpdHk9IjAuMzgiIG1hc2s9InVybCgjcGF0aC0yLWluc2lkZS0xXzg4MTZfMjYzODg3KSIvPgogIDxkZWZzPgogICAgPGZpbHRlciBpZD0iZmlsdGVyMF9iZl84ODE2XzI2Mzg4NyIgeD0iMTIuNzUiIHk9IjE0Ljc1IiB3aWR0aD0iMjMuOTQzNCIgaGVpZ2h0PSIyMi41IiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgICAgIDxmZUZsb29kIGZsb29kLW9wYWNpdHk9IjAiIHJlc3VsdD0iQmFja2dyb3VuZEltYWdlRml4Ii8+CiAgICAgIDxmZUdhdXNzaWFuQmx1ciBpbj0iQmFja2dyb3VuZEltYWdlRml4IiBzdGREZXZpYXRpb249IjIuMTI1Ii8+CiAgICAgIDxmZUNvbXBvc2l0ZSBpbjI9IlNvdXJjZUFscGhhIiBvcGVyYXRvcj0iaW4iIHJlc3VsdD0iZWZmZWN0MV9iYWNrZ3JvdW5kQmx1cl84ODE2XzI2Mzg4NyIvPgogICAgICA8ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9ImVmZmVjdDFfYmFja2dyb3VuZEJsdXJfODgxNl8yNjM4ODciIHJlc3VsdD0ic2hhcGUiLz4KICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC41IiByZXN1bHQ9ImVmZmVjdDJfZm9yZWdyb3VuZEJsdXJfODgxNl8yNjM4ODciLz4KICAgIDwvZmlsdGVyPgogIDwvZGVmcz4KPC9zdmc+\",\"imageSize\":34,\"imageFunction\":\"var res = {\\n url: images[0],\\n size: 40\\n}\\nvar temperature = data.temperature;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120;\\n var index = Math.min(3, Math.floor(4 * percent));\\n res.url = images[index];\\n}\\nreturn res;\\n\",\"images\":[\"tb-image;/api/images/system/map_marker_image_0.png\",\"tb-image;/api/images/system/map_marker_image_1.png\",\"tb-image;/api/images/system/map_marker_image_2.png\",\"tb-image;/api/images/system/map_marker_image_3.png\"]},\"markerOffsetX\":0.5,\"markerOffsetY\":1}],\"polygons\":[],\"circles\":[],\"additionalDataSources\":[],\"controlsPosition\":\"topleft\",\"zoomActions\":[\"scroll\",\"doubleClick\",\"controlButtons\"],\"fitMapBounds\":true,\"useDefaultCenterPosition\":false,\"defaultCenterPosition\":\"0,0\",\"defaultZoomLevel\":null,\"mapPageSize\":16384,\"background\":{\"type\":\"color\",\"color\":\"#fff\",\"overlay\":{\"enabled\":false,\"color\":\"rgba(255,255,255,0.72)\",\"blur\":3}},\"padding\":\"8px\"},\"title\":\"Map\",\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"showTitleIcon\":false,\"titleTooltip\":\"\",\"dropShadow\":true,\"enableFullscreen\":true,\"widgetStyle\":{},\"widgetCss\":\"\",\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"configMode\":\"basic\",\"titleFont\":null,\"titleColor\":null,\"margin\":\"0px\",\"borderRadius\":\"0px\",\"iconSize\":\"24px\",\"titleIcon\":\"map\",\"iconColor\":\"#1F6BDD\",\"actions\":{\"tooltipAction\":[{\"name\":\"testTag\",\"icon\":\"more_horiz\",\"useShowWidgetActionFunction\":null,\"showWidgetActionFunction\":\"return true;\",\"type\":\"custom\",\"customFunction\":\"console.log('It works!!!');\\n\\nconsole.log(entityName);\\n\\nconsole.log(additionalParams);\",\"openInSeparateDialog\":false,\"openInPopover\":false,\"id\":\"f9b4925a-818c-15d2-6220-cf2f317bc7fe\"}]}}" + "defaultConfig": "{\"datasources\":[],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"rgba(0, 0, 0, 0)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"mapType\":\"geoMap\",\"layers\":[{\"provider\":\"openstreet\",\"layerType\":\"OpenStreetMap.Mapnik\"},{\"provider\":\"openstreet\",\"layerType\":\"OpenStreetMap.HOT\"},{\"provider\":\"openstreet\",\"layerType\":\"Esri.WorldStreetMap\"},{\"provider\":\"openstreet\",\"layerType\":\"Esri.WorldTopoMap\"},{\"provider\":\"openstreet\",\"layerType\":\"Esri.WorldImagery\"},{\"provider\":\"openstreet\",\"layerType\":\"CartoDB.Positron\"},{\"provider\":\"openstreet\",\"layerType\":\"CartoDB.DarkMatter\"}],\"markers\":[{\"dsType\":\"function\",\"dsLabel\":\"First point\",\"dsDeviceId\":null,\"dsEntityAliasId\":null,\"dsFilterId\":null,\"additionalDataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"temperature\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.8239425680406081,\"funcBody\":\"var value = prevValue + Math.random() * 40 - 20;\\nif (value < -60) {\\n\\tvalue = -60;\\n} else if (value > 60) {\\n\\tvalue = 60;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"label\":{\"show\":true,\"type\":\"pattern\",\"pattern\":\"${entityName}\"},\"tooltip\":{\"show\":true,\"trigger\":\"click\",\"autoclose\":true,\"type\":\"pattern\",\"pattern\":\"${entityName}Latitude: ${latitude:7}Longitude: ${longitude:7}Temperature: ${temperature} °CSee tooltip settings for details\",\"offsetX\":0,\"offsetY\":-1},\"groups\":null,\"xKey\":{\"name\":\"f(x)\",\"label\":\"latitude\",\"type\":\"function\",\"funcBody\":\"var value = prevValue || 15.833293;\\nif (time % 500 < 500) {\\n value += Math.random() * 0.05 - 0.025;\\n}\\nreturn value;\",\"settings\":{},\"color\":\"#2196f3\"},\"yKey\":{\"name\":\"f(x)\",\"label\":\"longitude\",\"type\":\"function\",\"funcBody\":\"var value = prevValue || -90.454350;\\nif (time % 500 < 500) {\\n value += Math.random() * 0.05 - 0.025;\\n}\\nreturn value;\",\"settings\":{},\"color\":\"#2196f3\"},\"markerType\":\"shape\",\"markerShape\":{\"shape\":\"markerShape1\",\"size\":34,\"color\":{\"type\":\"function\",\"color\":\"#307FE5\",\"colorFunction\":\"var temperature = data.temperature;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120 * 100;\\n return tinycolor.mix('blue', 'red', percent).toHexString();\\n}\\nreturn 'blue';\\n\"}},\"markerIcon\":{\"icon\":\"mdi:lightbulb-on\",\"size\":34,\"color\":{\"type\":\"constant\",\"color\":\"#307FE5\"}},\"markerImage\":{\"type\":\"image\",\"image\":\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii0xOTEuMzUgLTM1MS4xOCAxMDgzLjU4IDE3MzAuNDYiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsPSIjZmU3NTY5IiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMzciIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTTM1MS44MzMgMTM2MC43OGMtMzguNzY2LTE5MC4zLTEwNy4xMTYtMzQ4LjY2NS0xODkuOTAzLTQ5NS40NEMxMDAuNTIzIDc1Ni40NjkgMjkuMzg2IDY1NS45NzgtMzYuNDM0IDU1MC40MDRjLTIxLjk3Mi0zNS4yNDQtNDAuOTM0LTcyLjQ3Ny02Mi4wNDctMTA5LjA1NC00Mi4yMTYtNzMuMTM3LTc2LjQ0NC0xNTcuOTM1LTc0LjI2OS0yNjcuOTMyIDIuMTI1LTEwNy40NzMgMzMuMjA4LTE5My42ODUgNzguMDMtMjY0LjE3M0MtMjEtMjA2LjY5IDEwMi40ODEtMzAxLjc0NSAyNjguMTY0LTMyNi43MjRjMTM1LjQ2Ni0yMC40MjUgMjYyLjQ3NSAxNC4wODIgMzUyLjU0MyA2Ni43NDcgNzMuNiA0My4wMzggMTMwLjU5NiAxMDAuNTI4IDE3My45MiAxNjguMjggNDUuMjIgNzAuNzE2IDc2LjM2IDE1NC4yNiA3OC45NzEgMjYzLjIzMyAxLjMzNyA1NS44My03LjgwNSAxMDcuNTMyLTIwLjY4NCAxNTAuNDE3LTEzLjAzNCA0My40MS0zMy45OTYgNzkuNjk1LTUyLjY0NiAxMTguNDU1LTM2LjQwNiA3NS42NTktODIuMDQ5IDE0NC45ODEtMTI3Ljg1NSAyMTQuMzQ1LTEzNi40MzcgMjA2LjYwNi0yNjQuNDk2IDQxNy4zMS0zMjAuNTggNzA2LjAyOHoiLz48Y2lyY2xlIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBjeD0iMzUyLjg5MSIgY3k9IjIyNS43NzkiIHI9IjE4My4zMzIiLz48L3N2Zz4=\",\"imageSize\":34},\"markerOffsetX\":0.5,\"markerOffsetY\":1},{\"dsType\":\"function\",\"dsLabel\":\"Second point\",\"dsDeviceId\":null,\"dsEntityAliasId\":null,\"dsFilterId\":null,\"additionalDataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"temperature\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.7826299113906372,\"funcBody\":\"var value = prevValue + Math.random() * 40 - 20;\\nif (value < -60) {\\n\\tvalue = -60;\\n} else if (value > 60) {\\n\\tvalue = 60;\\n}\\nreturn value;\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null}],\"label\":{\"show\":true,\"type\":\"pattern\",\"pattern\":\"${entityName}\"},\"tooltip\":{\"show\":true,\"trigger\":\"click\",\"autoclose\":true,\"type\":\"pattern\",\"pattern\":\"${entityName}Latitude: ${latitude:7}Longitude: ${longitude:7}Temperature: ${temperature} °CSee tooltip settings for details\",\"offsetX\":0,\"offsetY\":-1},\"groups\":null,\"xKey\":{\"name\":\"f(x)\",\"label\":\"latitude\",\"type\":\"function\",\"funcBody\":\"var value = prevValue || 14.450463;\\nif (time % 500 < 500) {\\n value += Math.random() * 0.05 - 0.025;\\n}\\nreturn value;\",\"settings\":{},\"color\":\"#2196f3\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null},\"yKey\":{\"name\":\"f(x)\",\"label\":\"longitude\",\"type\":\"function\",\"funcBody\":\"var value = prevValue || -84.845334;\\nif (time % 500 < 500) {\\n value += Math.random() * 0.05 - 0.025;\\n}\\nreturn value;\",\"settings\":{},\"color\":\"#2196f3\",\"aggregationType\":null,\"units\":null,\"decimals\":null,\"usePostProcessing\":null,\"postFuncBody\":null},\"markerType\":\"image\",\"markerShape\":{\"shape\":\"markerShape1\",\"size\":34,\"color\":{\"type\":\"constant\",\"color\":\"#307FE5\"}},\"markerIcon\":{\"icon\":\"\",\"size\":34,\"color\":{\"type\":\"constant\",\"color\":\"#307FE5\"}},\"markerImage\":{\"type\":\"function\",\"image\":\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzNCIgaGVpZ2h0PSIzNCIgdmlld0JveD0iMCAwIDM0IDM0IiBmaWxsPSJub25lIj4KICA8ZyBmaWx0ZXI9InVybCgjZmlsdGVyMF9iZl84ODE2XzI2Mzg4NykiPgogICAgPHBhdGggZD0iTTE5IDI0LjVDMTcuNDA3NSAyNy40MTI1IDE3IDMzIDE3IDMzQzE3IDMzIDI3LjA4NTggMzIuMTk1NSAzMC45OTkyIDI3LjQ5OThDMzQgMjMuODk5MiAzMS45OTkyIDE5IDI3Ljk5OTIgMTlDMjMuOTk5MyAxOSAyMS4xOTI5IDIwLjQ4OTQgMTkgMjQuNVoiIGZpbGw9ImJsYWNrIiBmaWxsLW9wYWNpdHk9IjAuMjQiLz4KICA8L2c+CiAgPG1hc2sgaWQ9InBhdGgtMi1pbnNpZGUtMV84ODE2XzI2Mzg4NyIgZmlsbD0id2hpdGUiPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yOCAxMS45QzI4LjAwMzcgNS4zMjc2MSAyNC4yOTAyIDAgMTcgMEM5LjcwOTgzIDAgNS45OTYzIDUuMzI3NjEgNiAxMS45QzYuMDA0NzMgMjAuMjkzNyAxNyAzNCAxNyAzNEMxNyAzNCAyNy45OTUzIDIwLjI5MzcgMjggMTEuOVpNMjEuMjUgMTAuNjI1QzIxLjI1IDEyLjk3MjIgMTkuMzQ3MiAxNC44NzUgMTcgMTQuODc1QzE0LjY1MjggMTQuODc1IDEyLjc1IDEyLjk3MjIgMTIuNzUgMTAuNjI1QzEyLjc1IDguMjc3NzkgMTQuNjUyOCA2LjM3NSAxNyA2LjM3NUMxOS4zNDcyIDYuMzc1IDIxLjI1IDguMjc3NzkgMjEuMjUgMTAuNjI1WiIvPgogIDwvbWFzaz4KICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTI4IDExLjlDMjguMDAzNyA1LjMyNzYxIDI0LjI5MDIgMCAxNyAwQzkuNzA5ODMgMCA1Ljk5NjMgNS4zMjc2MSA2IDExLjlDNi4wMDQ3MyAyMC4yOTM3IDE3IDM0IDE3IDM0QzE3IDM0IDI3Ljk5NTMgMjAuMjkzNyAyOCAxMS45Wk0yMS4yNSAxMC42MjVDMjEuMjUgMTIuOTcyMiAxOS4zNDcyIDE0Ljg3NSAxNyAxNC44NzVDMTQuNjUyOCAxNC44NzUgMTIuNzUgMTIuOTcyMiAxMi43NSAxMC42MjVDMTIuNzUgOC4yNzc3OSAxNC42NTI4IDYuMzc1IDE3IDYuMzc1QzE5LjM0NzIgNi4zNzUgMjEuMjUgOC4yNzc3OSAyMS4yNSAxMC42MjVaIiBmaWxsPSIjMzA3ZmU1Ii8+CiAgPHBhdGggZD0iTTI4IDExLjlMMjkuMDYyNSAxMS45MDA2TDI4IDExLjlaTTYgMTEuOUw3LjA2MjUgMTEuODk5NEw2IDExLjlaTTE3IDM0TDE2LjE3MTIgMzQuNjY0OUwxNyAzNS42OThMMTcuODI4OCAzNC42NjQ5TDE3IDM0Wk0xNyAxLjA2MjVDMjAuMzY0MSAxLjA2MjUgMjIuODA4NSAyLjI4MDA2IDI0LjQyNzMgNC4xNzUzOUMyNi4wNjUyIDYuMDkzMjMgMjYuOTM5MiA4LjgwMzMxIDI2LjkzNzUgMTEuODk5NEwyOS4wNjI1IDExLjkwMDZDMjkuMDY0NCA4LjQyNDMgMjguMDgzNSA1LjE4NDM4IDI2LjA0MzEgMi43OTUzMkMyMy45ODM1IDAuMzgzNzQyIDIwLjkyNjEgLTEuMDYyNSAxNyAtMS4wNjI1VjEuMDYyNVpNNy4wNjI1IDExLjg5OTRDNy4wNjA3NiA4LjgwMzMxIDcuOTM0NzcgNi4wOTMyMyA5LjU3Mjc0IDQuMTc1MzlDMTEuMTkxNSAyLjI4MDA2IDEzLjYzNTkgMS4wNjI1IDE3IDEuMDYyNVYtMS4wNjI1QzEzLjA3MzkgLTEuMDYyNSAxMC4wMTY1IDAuMzgzNzQxIDcuOTU2ODYgMi43OTUzMkM1LjkxNjQ1IDUuMTg0MzggNC45MzU1NSA4LjQyNDMgNC45Mzc1IDExLjkwMDZMNy4wNjI1IDExLjg5OTRaTTE3IDM0QzE3LjgyODggMzMuMzM1MSAxNy44Mjg4IDMzLjMzNTIgMTcuODI4OCAzMy4zMzUyQzE3LjgyODggMzMuMzM1MiAxNy44Mjg4IDMzLjMzNTEgMTcuODI4NyAzMy4zMzVDMTcuODI4NSAzMy4zMzQ4IDE3LjgyODEgMzMuMzM0MyAxNy44Mjc2IDMzLjMzMzZDMTcuODI2NSAzMy4zMzIzIDE3LjgyNDggMzMuMzMwMSAxNy44MjI0IDMzLjMyNzFDMTcuODE3NiAzMy4zMjEyIDE3LjgxMDMgMzMuMzEyIDE3LjgwMDQgMzMuMjk5NUMxNy43ODA3IDMzLjI3NDcgMTcuNzUwOSAzMy4yMzcxIDE3LjcxMTggMzMuMTg3NEMxNy42MzM1IDMzLjA4NzggMTcuNTE3OCAzMi45Mzk1IDE3LjM3IDMyLjc0NzJDMTcuMDc0MiAzMi4zNjI0IDE2LjY1MDMgMzEuODAxNyAxNi4xNDA5IDMxLjEwMTlDMTUuMTIxNCAyOS43MDE0IDEzLjc2MzQgMjcuNzQ5NSAxMi40MDcxIDI1LjU0MTVDMTEuMDQ5IDIzLjMzMDYgOS43MDM4OCAyMC44ODEzIDguNzAwOTEgMTguNDg0MUM3LjY5MTA5IDE2LjA3MDYgNy4wNjM1NyAxMy43OTIxIDcuMDYyNSAxMS44OTk0TDQuOTM3NSAxMS45MDA2QzQuOTM4OCAxNC4yMDQ4IDUuNjg3NDYgMTYuNzg3MyA2Ljc0MDU4IDE5LjMwNDNDNy44MDA1NSAyMS44Mzc4IDkuMjA1MTYgMjQuMzg4OSAxMC41OTY0IDI2LjY1MzhDMTEuOTg5NSAyOC45MjE2IDEzLjM4MDcgMzAuOTIwOSAxNC40MjI5IDMyLjM1MjZDMTQuOTQ0NCAzMy4wNjg5IDE1LjM3OTUgMzMuNjQ0NiAxNS42ODUxIDM0LjA0MjJDMTUuODM3OSAzNC4yNDEgMTUuOTU4NCAzNC4zOTU0IDE2LjA0MTIgMzQuNTAwN0MxNi4wODI2IDM0LjU1MzQgMTYuMTE0NiAzNC41OTM4IDE2LjEzNjUgMzQuNjIxM0MxNi4xNDc0IDM0LjYzNTEgMTYuMTU1OSAzNC42NDU2IDE2LjE2MTcgMzQuNjUyOUMxNi4xNjQ2IDM0LjY1NjYgMTYuMTY2OCAzNC42NTk0IDE2LjE2ODQgMzQuNjYxNEMxNi4xNjkyIDM0LjY2MjQgMTYuMTY5OSAzNC42NjMyIDE2LjE3MDMgMzQuNjYzN0MxNi4xNzA2IDM0LjY2NCAxNi4xNzA4IDM0LjY2NDMgMTYuMTcwOSAzNC42NjQ1QzE2LjE3MTEgMzQuNjY0NyAxNi4xNzEyIDM0LjY2NDkgMTcgMzRaTTI2LjkzNzUgMTEuODk5NEMyNi45MzY0IDEzLjc5MjEgMjYuMzA4OSAxNi4wNzA2IDI1LjI5OTEgMTguNDg0MUMyNC4yOTYxIDIwLjg4MTMgMjIuOTUxIDIzLjMzMDYgMjEuNTkyOSAyNS41NDE1QzIwLjIzNjYgMjcuNzQ5NSAxOC44Nzg2IDI5LjcwMTQgMTcuODU5MSAzMS4xMDE5QzE3LjM0OTcgMzEuODAxNyAxNi45MjU4IDMyLjM2MjQgMTYuNjMgMzIuNzQ3MkMxNi40ODIyIDMyLjkzOTUgMTYuMzY2NSAzMy4wODc4IDE2LjI4ODIgMzMuMTg3NEMxNi4yNDkxIDMzLjIzNzEgMTYuMjE5MyAzMy4yNzQ3IDE2LjE5OTYgMzMuMjk5NUMxNi4xODk3IDMzLjMxMiAxNi4xODI0IDMzLjMyMTIgMTYuMTc3NiAzMy4zMjcxQzE2LjE3NTIgMzMuMzMwMSAxNi4xNzM1IDMzLjMzMjMgMTYuMTcyNCAzMy4zMzM2QzE2LjE3MTkgMzMuMzM0MyAxNi4xNzE1IDMzLjMzNDggMTYuMTcxMyAzMy4zMzVDMTYuMTcxMiAzMy4zMzUxIDE2LjE3MTIgMzMuMzM1MiAxNi4xNzEyIDMzLjMzNTJDMTYuMTcxMiAzMy4zMzUyIDE2LjE3MTIgMzMuMzM1MSAxNyAzNEMxNy44Mjg4IDM0LjY2NDkgMTcuODI4OSAzNC42NjQ3IDE3LjgyOTEgMzQuNjY0NUMxNy44MjkyIDM0LjY2NDMgMTcuODI5NCAzNC42NjQgMTcuODI5NyAzNC42NjM3QzE3LjgzMDEgMzQuNjYzMiAxNy44MzA4IDM0LjY2MjQgMTcuODMxNiAzNC42NjE0QzE3LjgzMzIgMzQuNjU5NCAxNy44MzU0IDM0LjY1NjYgMTcuODM4MyAzNC42NTI5QzE3Ljg0NDEgMzQuNjQ1NiAxNy44NTI2IDM0LjYzNTEgMTcuODYzNSAzNC42MjEzQzE3Ljg4NTQgMzQuNTkzOCAxNy45MTc0IDM0LjU1MzQgMTcuOTU4OCAzNC41MDA3QzE4LjA0MTYgMzQuMzk1NCAxOC4xNjIxIDM0LjI0MSAxOC4zMTQ5IDM0LjA0MjJDMTguNjIwNSAzMy42NDQ2IDE5LjA1NTYgMzMuMDY4OSAxOS41NzcxIDMyLjM1MjZDMjAuNjE5MyAzMC45MjA5IDIyLjAxMDUgMjguOTIxNiAyMy40MDM2IDI2LjY1MzhDMjQuNzk0OCAyNC4zODg5IDI2LjE5OTUgMjEuODM3OCAyNy4yNTk0IDE5LjMwNDNDMjguMzEyNSAxNi43ODczIDI5LjA2MTIgMTQuMjA0OCAyOS4wNjI1IDExLjkwMDZMMjYuOTM3NSAxMS44OTk0Wk0xNyAxNS45Mzc1QzE5LjkzNCAxNS45Mzc1IDIyLjMxMjUgMTMuNTU5IDIyLjMxMjUgMTAuNjI1SDIwLjE4NzVDMjAuMTg3NSAxMi4zODU0IDE4Ljc2MDQgMTMuODEyNSAxNyAxMy44MTI1VjE1LjkzNzVaTTExLjY4NzUgIDEwLjYyNUMxMS42ODc1IDEzLjU1OSAxNC4wNjYgMTUuOTM3NSAxNyAxNS45Mzc1VjEzLjgxMjVDMTUuMjM5NiAxMy44MTI1IDEzLjgxMjUgMTIuMzg1NCAxMy44MTI1IDEwLjYyNUgxMS42ODc1Wk0xNyA1LjMxMjVDMTQuMDY2IDUuMzEyNSAxMS42ODc1IDcuNjkwOTkgMTEuNjg3NSAxMC42MjVIMTMuODEyNUMxMy44MTI1IDguODY0NTkgMTUuMjM5NiA3LjQzNzUgMTcgNy40Mzc1VjUuMzEyNVpNMjIuMzEyNSAxMC42MjVDMjIuMzEyNSA3LjY5MDk5IDE5LjkzNCA1LjMxMjUgMTcgNS4zMTI1VjcuNDM3NUMxOC43NjA0IDcuNDM3NSAyMC4xODc1IDguODY0NTkgMjAuMTg3NSAxMC42MjVIMjIuMzEyNVoiIGZpbGw9ImJsYWNrIiBmaWxsLW9wYWNpdHk9IjAuMzgiIG1hc2s9InVybCgjcGF0aC0yLWluc2lkZS0xXzg4MTZfMjYzODg3KSIvPgogIDxkZWZzPgogICAgPGZpbHRlciBpZD0iZmlsdGVyMF9iZl84ODE2XzI2Mzg4NyIgeD0iMTIuNzUiIHk9IjE0Ljc1IiB3aWR0aD0iMjMuOTQzNCIgaGVpZ2h0PSIyMi41IiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CiAgICAgIDxmZUZsb29kIGZsb29kLW9wYWNpdHk9IjAiIHJlc3VsdD0iQmFja2dyb3VuZEltYWdlRml4Ii8+CiAgICAgIDxmZUdhdXNzaWFuQmx1ciBpbj0iQmFja2dyb3VuZEltYWdlRml4IiBzdGREZXZpYXRpb249IjIuMTI1Ii8+CiAgICAgIDxmZUNvbXBvc2l0ZSBpbjI9IlNvdXJjZUFscGhhIiBvcGVyYXRvcj0iaW4iIHJlc3VsdD0iZWZmZWN0MV9iYWNrZ3JvdW5kQmx1cl84ODE2XzI2Mzg4NyIvPgogICAgICA8ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9ImVmZmVjdDFfYmFja2dyb3VuZEJsdXJfODgxNl8yNjM4ODciIHJlc3VsdD0ic2hhcGUiLz4KICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMC41IiByZXN1bHQ9ImVmZmVjdDJfZm9yZWdyb3VuZEJsdXJfODgxNl8yNjM4ODciLz4KICAgIDwvZmlsdGVyPgogIDwvZGVmcz4KPC9zdmc+\",\"imageSize\":34,\"imageFunction\":\"var res = {\\n url: images[0],\\n size: 40\\n}\\nvar temperature = data.temperature;\\nif (typeof temperature !== undefined) {\\n var percent = (temperature + 60)/120;\\n var index = Math.min(3, Math.floor(4 * percent));\\n res.url = images[index];\\n}\\nreturn res;\\n\",\"images\":[\"tb-image;/api/images/system/map_marker_image_0.png\",\"tb-image;/api/images/system/map_marker_image_1.png\",\"tb-image;/api/images/system/map_marker_image_2.png\",\"tb-image;/api/images/system/map_marker_image_3.png\"]},\"markerOffsetX\":0.5,\"markerOffsetY\":1}],\"polygons\":[],\"circles\":[],\"additionalDataSources\":[],\"controlsPosition\":\"topleft\",\"zoomActions\":[\"scroll\",\"doubleClick\",\"controlButtons\"],\"fitMapBounds\":true,\"useDefaultCenterPosition\":false,\"defaultCenterPosition\":\"0,0\",\"defaultZoomLevel\":null,\"minZoomLevel\":16,\"mapPageSize\":16384,\"background\":{\"type\":\"color\",\"color\":\"#fff\",\"overlay\":{\"enabled\":false,\"color\":\"rgba(255,255,255,0.72)\",\"blur\":3}},\"padding\":\"8px\",\"imageSourceType\":null,\"imageUrl\":null,\"imageEntityAlias\":null,\"imageUrlAttribute\":null},\"title\":\"Map\",\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"showTitleIcon\":false,\"titleTooltip\":\"\",\"dropShadow\":true,\"enableFullscreen\":true,\"widgetStyle\":{},\"widgetCss\":\"\",\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"configMode\":\"basic\",\"titleFont\":null,\"titleColor\":null,\"margin\":\"0px\",\"borderRadius\":\"0px\",\"iconSize\":\"24px\",\"titleIcon\":\"map\",\"iconColor\":\"#1F6BDD\",\"actions\":{\"tooltipAction\":[]}}" }, "resources": [ { diff --git a/ui-ngx/src/app/core/api/widget-api.models.ts b/ui-ngx/src/app/core/api/widget-api.models.ts index 82ac4e299c..10656b0c9b 100644 --- a/ui-ngx/src/app/core/api/widget-api.models.ts +++ b/ui-ngx/src/app/core/api/widget-api.models.ts @@ -93,7 +93,7 @@ export interface IWidgetUtils { export interface WidgetActionsApi { actionDescriptorsBySourceId: {[sourceId: string]: Array}; getActionDescriptors: (actionSourceId: string) => Array; - handleWidgetAction: ($event: Event, descriptor: WidgetActionDescriptor, + handleWidgetAction: ($event: Event, descriptor: WidgetAction, entityId?: EntityId, entityName?: string, additionalParams?: any, entityLabel?: string) => void; onWidgetAction: ($event: Event, action: WidgetAction) => void; elementClick: ($event: Event) => void; diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/maps/data-layer/circles-data-layer.ts b/ui-ngx/src/app/modules/home/components/widget/lib/maps/data-layer/circles-data-layer.ts index f7580b313d..c70ad98e8f 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/maps/data-layer/circles-data-layer.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/maps/data-layer/circles-data-layer.ts @@ -16,7 +16,9 @@ import { CirclesDataLayerSettings, - defaultBaseCirclesDataLayerSettings, isJSON, TbCircleData, + defaultBaseCirclesDataLayerSettings, + isJSON, + TbCircleData, TbMapDatasource } from '@home/components/widget/lib/maps/models/map.models'; import L from 'leaflet'; @@ -59,10 +61,6 @@ class TbCircleDataLayerItem extends TbDataLayerItem, _dsData: FormattedData[]): void { - this.dataLayer.getMap().circleClick(this, data.$datasource); - } - protected unbindLabel() { this.circle.unbindTooltip(); } diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/maps/data-layer/map-data-layer.ts b/ui-ngx/src/app/modules/home/components/widget/lib/maps/data-layer/map-data-layer.ts index 393131e932..861c02a560 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/maps/data-layer/map-data-layer.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/maps/data-layer/map-data-layer.ts @@ -29,7 +29,7 @@ import { TbMapDatasource } from '@home/components/widget/lib/maps/models/map.models'; import { TbMap } from '@home/components/widget/lib/maps/map'; -import { FormattedData } from '@shared/models/widget.models'; +import { FormattedData, WidgetActionType } from '@shared/models/widget.models'; import { forkJoin, Observable, of } from 'rxjs'; import { createLabelFromPattern, @@ -64,7 +64,6 @@ export abstract class TbDataLayerItem, dsData: FormattedData[]): void; - protected abstract addItemClass(clazz: string): void; protected abstract removeItemClass(clazz: string): void; @@ -103,6 +100,12 @@ export abstract class TbDataLayerItem { + this.dataLayer.getMap().dataItemClick(event.originalEvent, clickAction, this.data.$datasource); + }); + } } protected enableEdit(): void { diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/maps/data-layer/markers-data-layer.ts b/ui-ngx/src/app/modules/home/components/widget/lib/maps/data-layer/markers-data-layer.ts index a466d1ec3f..fde9c97f1c 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/maps/data-layer/markers-data-layer.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/maps/data-layer/markers-data-layer.ts @@ -91,10 +91,6 @@ class TbMarkerDataLayerItem extends TbDataLayerItem, _dsData: FormattedData[]): void { - this.dataLayer.getMap().markerClick(this, data.$datasource); - } - protected unbindLabel() { this.marker.unbindTooltip(); } diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/maps/data-layer/polygons-data-layer.ts b/ui-ngx/src/app/modules/home/components/widget/lib/maps/data-layer/polygons-data-layer.ts index b6ca13d555..b2dd4c94a2 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/maps/data-layer/polygons-data-layer.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/maps/data-layer/polygons-data-layer.ts @@ -64,10 +64,6 @@ class TbPolygonDataLayerItem extends TbDataLayerItem, _dsData: FormattedData[]): void { - this.dataLayer.getMap().polygonClick(this, data.$datasource); - } - protected unbindLabel() { this.polygonContainer.unbindTooltip(); } diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/maps/map.ts b/ui-ngx/src/app/modules/home/components/widget/lib/maps/map.ts index 16eb3ddd58..58f042f475 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/maps/map.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/maps/map.ts @@ -20,8 +20,8 @@ import { DataKeyValuePair, MapActionHandler, MapType, - mergeUnplacedDataItemsArrays, mergeMapDatasources, + mergeUnplacedDataItemsArrays, parseCenterPosition, TbCircleData, TbMapDatasource, @@ -38,10 +38,11 @@ import '@home/components/widget/lib/maps/leaflet/leaflet-tb'; import { MapDataLayerType, TbDataLayerItem, - TbMapDataLayer, UnplacedMapDataItem, + TbMapDataLayer, + UnplacedMapDataItem, } from '@home/components/widget/lib/maps/data-layer/map-data-layer'; import { IWidgetSubscription, WidgetSubscriptionOptions } from '@core/api/widget-api.models'; -import { FormattedData, WidgetActionDescriptor, widgetType } from '@shared/models/widget.models'; +import { FormattedData, WidgetAction, WidgetActionDescriptor, widgetType } from '@shared/models/widget.models'; import { EntityDataPageLink } from '@shared/models/query/query.models'; import { CustomTranslatePipe } from '@shared/pipe/custom-translate.pipe'; import { TbMarkersDataLayer } from '@home/components/widget/lib/maps/data-layer/markers-data-layer'; @@ -50,8 +51,6 @@ import { TbCirclesDataLayer } from '@home/components/widget/lib/maps/data-layer/ import { AttributeService } from '@core/http/attribute.service'; import { AttributeData, AttributeScope, DataKeyType, LatestTelemetry } from '@shared/models/telemetry/telemetry.models'; import { EntityId } from '@shared/models/id/entity-id'; -import ITooltipsterInstance = JQueryTooltipster.ITooltipsterInstance; -import TooltipPositioningSide = JQueryTooltipster.TooltipPositioningSide; import { TbPopoverService } from '@shared/components/popover.service'; import { SelectMapEntityPanelComponent @@ -61,6 +60,8 @@ import { createColorMarkerShapeURI, MarkerShape } from '@home/components/widget/ import { MatIconRegistry } from '@angular/material/icon'; import { DomSanitizer } from '@angular/platform-browser'; import tinycolor from 'tinycolor2'; +import ITooltipsterInstance = JQueryTooltipster.ITooltipsterInstance; +import TooltipPositioningSide = JQueryTooltipster.TooltipPositioningSide; type TooltipInstancesData = {root: HTMLElement, instances: ITooltipsterInstance[]}; @@ -99,9 +100,6 @@ export abstract class TbMap { private readonly mapResize$: ResizeObserver; private readonly tooltipActions: { [name: string]: MapActionHandler }; - private readonly markerClickActions: { [name: string]: MapActionHandler }; - private readonly polygonClickActions: { [name: string]: MapActionHandler }; - private readonly circleClickActions: { [name: string]: MapActionHandler }; private tooltipInstances: TooltipInstancesData[] = []; @@ -118,9 +116,6 @@ export abstract class TbMap { this.settings = mergeDeepIgnoreArray({} as S, this.defaultSettings(), this.inputSettings as S); this.tooltipActions = this.loadActions('tooltipAction'); - this.markerClickActions = this.loadActions('markerClick'); - this.polygonClickActions = this.loadActions('polygonClick'); - this.circleClickActions = this.loadActions('circleClick'); $(containerElement).empty(); $(containerElement).addClass('tb-map-layout'); @@ -698,6 +693,18 @@ export abstract class TbMap { this.updateAddButtonsStates(); } + public dataItemClick($event: Event, action: WidgetAction, entityInfo: TbMapDatasource) { + if ($event) { + $event.preventDefault(); + $event.stopPropagation(); + } + const { entityId, entityName, entityLabel, entityType } = entityInfo; + this.ctx.actionsApi.handleWidgetAction($event, action, { + entityType, + id: entityId + }, entityName, null, entityLabel); + } + public tooltipElementClick(element: HTMLElement, action: string, datasource: TbMapDatasource): void { if (element && this.tooltipActions[action]) { element.onclick = ($event) => @@ -708,42 +715,6 @@ export abstract class TbMap { } } - public markerClick(marker: TbDataLayerItem, datasource: TbMapDatasource): void { - if (Object.keys(this.markerClickActions).length) { - marker.getLayer().on('click', (event: L.LeafletMouseEvent) => { - if (!marker.isEditing()) { - for (const action in this.markerClickActions) { - this.markerClickActions[action](event.originalEvent, datasource); - } - } - }); - } - } - - public polygonClick(polygon: TbDataLayerItem, datasource: TbMapDatasource): void { - if (Object.keys(this.polygonClickActions).length) { - polygon.getLayer().on('click', (event: L.LeafletMouseEvent) => { - if (!polygon.isEditing()) { - for (const action in this.polygonClickActions) { - this.polygonClickActions[action](event.originalEvent, datasource); - } - } - }); - } - } - - public circleClick(circle: TbDataLayerItem, datasource: TbMapDatasource): void { - if (Object.keys(this.circleClickActions).length) { - circle.getLayer().on('click', (event: L.LeafletMouseEvent) => { - if (!circle.isEditing()) { - for (const action in this.circleClickActions) { - this.circleClickActions[action](event.originalEvent, datasource); - } - } - }); - } - } - public selectItem(item: TbDataLayerItem, cancel = false, force = false): boolean { if (this.isPlacingItem) { return false; diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/maps/models/map.models.ts b/ui-ngx/src/app/modules/home/components/widget/lib/maps/models/map.models.ts index aa343e6520..76b8566692 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/maps/models/map.models.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/maps/models/map.models.ts @@ -14,12 +14,19 @@ /// limitations under the License. /// -import { DataKey, Datasource, DatasourceType, FormattedData } from '@shared/models/widget.models'; +import { + DataKey, + Datasource, + DatasourceType, + FormattedData, + WidgetAction, + WidgetActionType +} from '@shared/models/widget.models'; import { DataKeyType } from '@shared/models/telemetry/telemetry.models'; import { guid, hashCode, isDefinedAndNotNull, isNotEmptyStr, isString, mergeDeep } from '@core/utils'; import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms'; import { materialColors } from '@shared/models/material.models'; -import L, { LatLngExpression } from 'leaflet'; +import L from 'leaflet'; import { TbFunction } from '@shared/models/js-function.models'; import { Observable, Observer, of, switchMap } from 'rxjs'; import { map } from 'rxjs/operators'; @@ -117,6 +124,7 @@ export interface MapDataLayerSettings extends MapDataSourceSettings { additionalDataKeys?: DataKey[]; label: DataLayerPatternSettings; tooltip: DataLayerTooltipSettings; + click: WidgetAction; groups?: string[]; edit: DataLayerEditSettings; } @@ -138,6 +146,9 @@ export const defaultBaseDataLayerSettings = (mapType: MapType): Partial diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/map/map-data-layer-dialog.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/map/map-data-layer-dialog.component.html index cc17006027..aaf04f5550 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/map/map-data-layer-dialog.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/map/map-data-layer-dialog.component.html @@ -252,6 +252,18 @@ formControlName="tooltip"> + + widgets.maps.data-layer.behavior + + widgets.maps.data-layer.on-click + + + + {{ 'widgets.maps.data-layer.groups' | translate }}