{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/scripts/network/util.js","webpack:///./src/scripts/map/projection.js","webpack:///./src/scripts/models/layer/menu/model.js","webpack:///./src/scripts/models/layer/menu/pointMenu.js","webpack:///./src/scripts/models/layer/menu/rules.js","webpack:///./src/scripts/models/layer/menu/beacon.js","webpack:///./src/scripts/index.js","webpack:///./src/scripts/app.js","webpack:///./src/scripts/map/map.js","webpack:///./src/scripts/models/floor/model.js","webpack:///./src/scripts/models/layer/control/model.js","webpack:///./src/scripts/models/layer/control/undoredo.js","webpack:///./src/scripts/models/layer/menu/point.js","webpack:///./src/templates/point.handlebars","webpack:///./src/scripts/models/layer/menu/ruleMenu.js","webpack:///./src/templates/rules.handlebars","webpack:///./src/scripts/models/layer/menu/beaconMenu.js","webpack:///./src/templates/beacon.handlebars","webpack:///./src/templates/menu.handlebars","webpack:///./src/scripts/models/layer/menu/lineConfigMenu.js","webpack:///./src/templates/linemenu.handlebars","webpack:///./src/scripts/models/grid/model.js","webpack:///./src/scripts/observer.js","webpack:///./src/scripts/network/network.js","webpack:///./src/scripts/network/axiosInstance.js","webpack:///./src/scripts/i18n/i18n.js","webpack:///./src/scripts/utils.js","webpack:///./src/templates/map.handlebars","webpack:///./src/templates/loader.handlebars","webpack:///./src/templates/map-legend.handlebars","webpack:///./src/templates/header.handlebars","webpack:///./src/templates/feedback.handlebars"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","0","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","urlParam","searchParams","URL","location","href","Date","getFullYear","props","toolbar","undo","redo","asset_tracking","navigation","kiosk","extent","projection","Projection","code","units","axisOrientation","view","View","center","getCenter","zoom","minZoom","maxZoom","menuTemplate","require","Menu","map","api","siteData","this","pointMenu","PointMenu","ruleMenu","RuleMenu","beaconMenu","BeaconMenu","selectIntercation","notification","Notification","pointSelected","beaconSelected","addControl","$","append","_this","event","preventDefault","close","point","points","filter","item","_","find","toLowerCase","beacon","b","isEqual","includes","beacons","text","div","show","plan","ble_nav","feature","addClass","parent","open","isBeaconAllowed","getProperties","not_a_turn","prop","published","removeClass","selectedPoint","save","is","setProperties","getFeatures","clear","showNotification","selectedFeature","rule","menu","editMode","editNode","keywords","each","keyword","categoryDD","Choices","choices","categories","itemSelectText","toggle","removePoint","editPoint","cancelAddPoint","savePoint","hide","configRuleSection","val","description","name_ar","description_ar","visible","searchable","clickable","setChoiceByValue","category","onserver","getValue","label","Point","errors","validate","getName","html","isPointExist","slideToggle","addPoint","toString","remove","initMenu","getOrCreatePoint","onEditNode","type","isLift","NodeType","LIFT","showLifteRule","hideEscalatorRule","hideEmptyView","hideLifteRule","showEmptyView","params","console","log","categoryLabel","freeze","Rules","selectedFloors","escalator","floors","uuidValidate","Beacon","major","minor","uuid","numericality","onlyInteger","greaterThan","presence","allowEmpty","minimum","message","document","addEventListener","Application","init","mapTemplate","loaderTemplate","legendTemplate","headerTemplate","feedBackTemplate","updateMap","app","saveData","drawObserver","Observable","url","SERVICE_URL","siteIdentifier","floorIdentifier","API","buildInFlight","checkRequestparams","checkSession","then","response","getSiteData","initMap","buildAccountMenu","write","saveFeedback","setTimeout","localStorage","getItem","showTutorial","on","setItem","catch","error","status","BeCoMap","getData","getSiteIdentifier","err","getFloorIdentifier","saveMapData","email","updated_by_user","toLocalTimeZone","now","children","first","feedback","modal","map_data","setData","mod_time","build_status","initControls","markup","subscribe","setInterval","notify","driver","Driver","allowClose","animate","closeBtnText","nextBtnText","prevBtnText","attr","defineSteps","element","stageBackground","popover","className","title","position","onClose","onNext","start","lineMenu","vectorDrawLayer","vectorNodeLayer","vectorPolygonLayer","defaultControl","DrawControl","imageSize","img_size","initProjection","initView","Floors","grid","Grid","css","VectorLayer","displayInLayerSwitcher","source","VectorSource","features","style","f","getStyle","opacity","getAreaStyle","getNodeStyle","Map","layers","getLayers","target","controls","showButtons","once","ctrl","LayerSwitcher","LineMenu","evt","coordinate","addControls","assign","layer","nodeLayer","polygonLayer","toolbarConfig","tileSource","getTileSource","layerArray","getArray","mapTile","attributionOptions","collapsible","mapData","line","getSource","node","polygon","nodePoints","becons","format","GeoJSON","featureProjection","extractGeometryName","addFeatures","readFeatures","setPoints","setBeacon","geometry","unset","writeFeatures","decimals","floorTile","currentFloor","floor","floorTileSource","floorMap","set","ImageLayer","tileId","Static","attributions","attributionHtml","imageExtent","mainbar","Bar","toggleOne","_source","_nodeSource","_layer","_menu","_nodeLayer","_interactions","pointmap","DrawPoint","Draw","pedit","Toggle","interaction","x","y","Modify","e","pmodify","NodeSelect","Select","condition","doubleClick","getSelectedNodeStyle","sel","selectCtrl","selected","LineSelect","getSelectedStyle","_lineMenu","sbar","Delete","del","setActive","getMap","addInteraction","Button","handleClick","delete","getInteraction","deselected","mapBrowserEvent","dispatchEvent","click","_polygonLayer","bar","getControls","undefined","autoActivate","active","ModifySelect","ModifyFeature","getActive","DrawLine","geometryName","geometryFunction","coordinates","setCoordinates","LineString","nbpts","getCoordinates","ledit","TextButton","removeLastPoint","finishDrawing","fedit","DrawPolygon","_polygonSource","concat","Polygon","_setDrawPolygon","Split","sources","split","UndoRedo","action","group","fillColor","pointName","getPointVariable","Style","image","CircleStyle","radius","fill","Fill","color","stroke","Stroke","width","Text","offsetY","font","placement","overflow","getGeometry","styles","getType","labelTextSize","labelTextColor","labelBorderColor","direction","forEachSegment","end","dx","dy","rotation","Math","atan2","midPoint","Icon","src","anchor","rotateWithView","options","setPosition","select","addSelectControl","_setModifyInteraction","modify","addModifyControl","addPropertiesControl","addLinepropertiesControl","addLineControl","addPolygonControl","addSplitControl","addUndoRedoControl","a","pt","id","getCoordinateIdentifier","Set","JSON","stringify","parse","Feature","addFeature","splitter","Splitter","Snap","hasFeature","forEachFeatureAtPixel","getEventPixel","originalEvent","getTargetElement","cursor","ol_interaction_UndoRedo","ol_interaction_Interaction","handleEvent","_undoStack","_redoStack","_block","_record","_defs","define","undoFn","redoFn","setMap","_watchSources","_watchInteractions","_sourceListener","forEach","getVectorLayers","values_","ol_layer_Vector","_onAddRemove","blockStart","blockEnd","_interactionListener","getInteractions","_onInteraction","fn","setattributestart","newp","properties","oldp","newProperties","oldProperties","rotatestart","translatestart","scalestart","modifystart","oldFeature","clone","beforesplit","deletestart","aftersplit","deleteend","_handleDo","removeFeature","geom","setGeometry","warn","substr","pop","hasUndo","hasRedo","Handlebars","template","container","depth0","helpers","partials","configredRule","floorRule","floor_identifier","getElementById","paste","removeItemButton","setValue","getFloors","setType","setFloors","selectedData","selectedBeacon","uuidDD","uuids","removeBeacon","editBeacon","cancelAddBeacon","saveBeacon","checkValidation","validateUUID","editIsEqual","isBeaconExist","addBeacon","validateBeacon","site_identifier","org_identifier","getOrCreateBeacon","beaconCache","themes","theme","appClass","defaultRepresentation","components","preview","hue","hex","rgba","hsva","input","cancel","change","removeAttr","not","textColor","Pickr","el","default","hexaColor","toHEXA","borderColor","range","bubble","setBubble","fontSize","selectInteraction","updateAandB","disable","setColor","featureStart","getFirstCoordinate","setStyle","featureEnd","getLastCoordinate","icon","scale","crossOrigin","anchorOrigin","gridSource","class","observers","subscriber","observer","cookie","match","axiosInstance","post","floor_data","orgIdentifier","q","res","getCookie","axios","baseURL","timeout","withCredentials","interceptors","use","replace","encodeURIComponent","HOST","getRedirectUrl","Promise","reject","currentLang","i18n","dateTime","localDate","timeString","today","yesterday","setDate","getDate","isSame","getMonth","toLocaleString","hour","minute","hour12","date1","date2"],"mappings":"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","file":"js/app.ed2f7505.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t0: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([285,1]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","\nconst urlParam = new URL(window.location.href);\n\nexport function getSiteIdentifier() {\n\n\tif(urlParam.searchParams.get(\"siteIdentifier\")){\n\t\treturn urlParam.searchParams.get(\"siteIdentifier\");\n\t} else {\n\t\tthrow \"Site Identifier is missing\";\n\t}\n}\n\nexport function getFloorIdentifier() {\n\tif(urlParam.searchParams.get(\"floorIdentifier\")){\n\t\treturn urlParam.searchParams.get(\"floorIdentifier\");\n\t} else {\n\t\tthrow \"Floor Identifier is missing\";\n\t}\n}\n","import Projection from 'ol/proj/Projection.js';\nimport '../../styles/attribution/attribution.scss';\nimport View from 'ol/View.js';\nimport {getCenter} from 'ol/extent.js';\n\n//var extent = [0, 0, 2800, 1280];\nvar extent = [76.754142, 9.282574, 76.780787, 9.296956];\nvar imageSize = [1242, 674];\n\nvar projection = new Projection({\n\tcode: 'xkcd-image',\n\tunits: 'pixels',\n\textent: extent,\n\taxisOrientation:'ene'\n});\n\nvar view = new View({\n \tprojection: projection,\n \tcenter: getCenter(extent),\n \textent: extent,\n \tzoom: 2,\n \tminZoom: 2,\n \tmaxZoom: 8\n});\n\nvar target = 'beco-container';\n\nfunction attributionHtml() {\n return ' Map data ©'+ new Date().getFullYear() +' beCo Terms of Use | Report a map error';\n}\n\nfunction toolbarConfig(props){\n\n let toolbar = {undo:true, redo:true};\n\n if (props.asset_tracking){\n toolbar['point'] = true;\n }\n\n if (props.navigation){\n toolbar['select'] = true ;\n toolbar['modify'] = true ;\n toolbar['line'] = true;\n \n toolbar['split']=true;\n \n }\n\n if(props.kiosk){\n toolbar['polygon'] = true;\n }else {\n toolbar['polygon'] = false;\n }\n\n return toolbar;\n}\n\n\nexport { view, projection, extent , attributionHtml, target, imageSize, toolbarConfig };\n\n// Ref https://hackernoon.com/import-export-default-require-commandjs-javascript-nodejs-es6-vs-cheatsheet-different-tutorial-example-5a321738b50f\n// Ref https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export\n","\nimport _ from 'underscore';\n\nimport GeoJSON from 'ol/format/GeoJSON';\n\nimport Notification from 'ol-ext/control/Notification';\nimport 'ol-ext/control/Notification.css';\n\n\nimport PointMenu from './pointMenu.js';\nimport RuleMenu from './ruleMenu.js';\nimport BeaconMenu from './beaconMenu.js';\n\n\n\n\nvar menuTemplate = require(\"../../../../templates/menu.handlebars\");\n\nexport default class Menu {\n\n\tconstructor(map, api, siteData) {\n \tthis.name = 'Menu';\n this.pointMenu = new PointMenu(api, siteData); \n this.ruleMenu = new RuleMenu(api, siteData); \n this.beaconMenu = new BeaconMenu(api, siteData); \n this.selectIntercation;\n this.siteData = siteData;\n this.notification = new Notification({});\n this.pointSelected = [];\n this.beaconSelected = [];\n map.addControl(this.notification);\n\n $(\"#menu-container\").append(menuTemplate);\n\n var _this = this;\n\n $( \"#menu-close\" ).bind( \"click\", function(event) {\n event.preventDefault();\n _this.close();\n });\n $( \"#menu-save-close\" ).bind( \"click\", function(event) {\n event.preventDefault();\n _this.close();\n });\n \n \t}\n\n addPoint(point){\n this.pointSelected.push(point);\n }\n\n setPoints(points){\n this.pointSelected = points;\n }\n\n removePoint(point){ \n this.pointSelected = this.pointSelected.filter(function(item) { \n return item !== point;\n });\n }\n\n isPointExist(point){\n return _.find(this.pointSelected, function (p) { return p.toLowerCase() === point.toLowerCase(); }) ? true : false;\n }\n\n isBeaconExist(beacon){\n return _.find(this.beaconSelected, function(b) { return b.isEqual(beacon); }) ? true : false;\n }\n\n filterPoints(points){\n var _this = this;\n return (_.filter(points, function(point){ return !_this.pointSelected.includes(point.name) ; }));\n }\n\n addBeacon(beacon){\n this.beaconSelected.push(beacon);\n }\n\n setBeacon(beacons){\n this.beaconSelected = beacons;\n }\n\n removeBeacon(beacon){ \n this.beaconSelected = this.beaconSelected.filter(function(item) { \n return !item.isEqual(beacon);\n });\n }\n \n\n \ttoString() {\n return this.name;\n }\n\n showNotification(text){\n var div = $('
').text(text);\n this.notification.show(div.get(0));\n }\n\n isBeaconAllowed(){\n return this.siteData.plan.ble_nav;\n }\n\n open(feature,selectIntercation){\n this.feature = feature;\n if(feature){\n this.selectIntercation = selectIntercation;\n $(\".beco-sidebar-node\").addClass('show');\n $(\".beco-sidebar-node.show\").parent().addClass('sidebar-active');\n this.pointMenu.open(feature,this.ruleMenu,this);\n this.ruleMenu.open(feature);\n if(this.siteData && this.isBeaconAllowed()){\n this.beaconMenu.open(feature, this);\n }\n if(feature.getProperties() && feature.getProperties().not_a_turn){\n $(\"#step\").prop('checked', feature.getProperties().not_a_turn);\n }else{\n $(\"#step\").prop('checked', false);\n }\n\n if(feature.getProperties() && feature.getProperties().published){\n $(\"#published\").prop('checked', feature.getProperties().published);\n }else{\n $(\"#published\").prop('checked', true);\n }\n\n }\n \n }\n\n close(){\n $(\".beco-sidebar-node\").removeClass('show');\n $(\".beco-sidebar\").parent().removeClass('sidebar-active'); \n var selectedPoint = this.pointMenu.save();\n if(this.siteData && this.isBeaconAllowed()){\n this.beaconMenu.save();\n }\n var props = {\n not_a_turn : $(\"#step\").is(\":checked\"),\n published : $(\"#published\").is(\":checked\")\n };\n\n this.feature.setProperties(props);\n this.ruleMenu.save(selectedPoint);\n this.selectIntercation.getFeatures().clear();\n this.showNotification(\"Data saved successfully\");\n\n }\n\n}","import _ from 'underscore';\n\nimport Choices from 'choices.js/public/assets/scripts/choices.min.js';\nimport 'choices.js/public/assets/styles/choices.min.css';\n\nimport { NodeType} from './rules.js';\n\nimport Point from './point.js';\n\nvar menuTemplate = require(\"../../../../templates/point.handlebars\");\n\nconst POINT = \"location\";\n\n\nexport default class PointMenu {\n\n\tconstructor(api, siteData) {\n \tthis.name = 'PointMenu';\n this.api = api;\n this.siteData = siteData;\n this.selectedFeature;\n this.selectedPoint;\n this.rule;\n this.menu;\n this.editMode = false;\n this.editNode;\n this.keywords = [];\n \t}\n\n \ttoString() {\n return this.name;\n }\n\n\n initMenu(){\n $(\"#point-body\").append(menuTemplate);\n var _this = this;\n\n _this.keywords = [];\n _(_this.siteData.keywords).each(function (keyword) {\n _this.keywords.push(keyword.toLowerCase());\n });\n \n this.categoryDD = new Choices('#category-dropdown', {\n choices : this.siteData.categories,\n itemSelectText: 'Click to select'\n });\n\n \n\n $( \"#remove-point\" ).bind( \"click\", function(event) {\n event.preventDefault();\n $(\"#selected-point\").toggle();\n $(\"#confirm-delete\").toggle();\n $(\"#confirmback-drop\").toggle();\n });\n\n $(\"#cancel-del-cnf\").bind(\"click\", function(event) {\n $(\"#confirm-delete\").toggle();\n $(\"#selected-point\").toggle();\n $(\"#confirmback-drop\").toggle();\n });\n\n $(\"#delete-cnf\").bind(\"click\", function(event) {\n $(\"#confirm-delete\").toggle();\n $(\"#selected-point\").toggle();\n $(\"#confirmback-drop\").toggle();\n _this.removePoint();\n });\n\n\n $( \"#edit-point\" ).bind( \"click\", function(event) {\n event.preventDefault();\n _this.editMode = true;\n _this.editPoint();\n });\n \n\n $( \"#point-cancel\" ).bind( \"click\", function(event) {\n event.preventDefault();\n _this.editMode = false;\n _this.cancelAddPoint();\n });\n\n $( \"#point-save\" ).bind( \"click\", function(event) {\n event.preventDefault();\n _this.savePoint();\n });\n \n $(\"#selected-point\").hide(); // Hide the selected point section -- need conditon check here \n $(\"#confirm-delete\").hide(); // Hide confirmation box\n $(\"#confirmback-drop\").hide();\n\n }\n\n onEditNode(){\n $(\"#point-cancel\").show(); // Show cancel option on form\n $(\"#selected-point\").show(); // Show point selected\n $(\"#selected-point-name\").text(this.selectedPoint.name);\n $(\"#pointManuallySection\").hide();\n\n // populate form data \n this.configRuleSection();\n $(\"#InputPointName\").val(this.selectedPoint.name);\n $(\"#InputPointDescription\").val(this.selectedPoint.description);\n $(\"#InputPointNameAr\").val(this.selectedPoint.name_ar);\n $(\"#InputPointDescriptionAr\").val(this.selectedPoint.description_ar);\n // if(this.selectedPoint.step) $(\"#InputPointStep\").prop('checked', true);\n $(\"#visible\").prop('checked', this.selectedPoint.visible);\n $(\"#searchable\").prop('checked', this.selectedPoint.searchable);\n $(\"#clickable\").prop('checked', this.selectedPoint.clickable);\n this.categoryDD.setChoiceByValue(this.selectedPoint.category);\n this.editNode = this.selectedPoint.name;\n $( \"#edit-point\" ).show();\n this.configRuleSection();\n }\n\n async savePoint(){\n var props = {\n onserver : false,\n name : $(\"#InputPointName\").val(),\n name_ar : $(\"#InputPointNameAr\").val(),\n description : $(\"#InputPointDescription\").val(),\n description_ar : $(\"#InputPointDescriptionAr\").val(),\n category :this.categoryDD.getValue().value,\n label : this.categoryDD.getValue().label,\n visible : $(\"#visible\").is(\":checked\"),\n searchable : $(\"#searchable\").is(\":checked\"),\n clickable : $(\"#clickable\").is(\":checked\")\n };\n \n let point = new Point(props);\n var errors = point.validate();\n\n\n if(!errors){\n if(this.keywords.includes(point.getName().toLowerCase())){\n $( \".validation.point-name\" ).html(\"

\"+point.getName()+\" is reserved keyword

\" );\n $( '.validation.point-name' ).parent().addClass('validation-beco');\n return;\n }\n\n if(this.editMode && this.editNode == point.getName()){\n this.editNode = '';\n }else if(this.menu.isPointExist(point.getName())){\n $( \".validation.point-name\" ).html(\"

\"+point.getName()+\" already exist in this floor

\" );\n $( '.validation.point-name' ).parent().addClass('validation-beco');\n return;\n }else if(this.editMode){\n this.menu.removePoint(this.editNode);\n }\n\n this.selectedPoint = point;\n $(\"#selected-point\").show(); // Show point selected\n $(\"#pointManuallySection\").slideToggle(500); // Hide point add form\n $(\"#selected-point-name\").text(this.selectedPoint.name);\n $( \"#edit-point\" ).show();\n this.configRuleSection();\n this.menu.addPoint(this.selectedPoint.name);\n \n\n } else {\n\n if(errors && errors['name']){\n $( \".validation.point-name\" ).html(\"

\"+errors['name'].toString()+\"

\" );\n $( '.validation.point-name' ).parent().addClass('validation-beco');\n }else {\n $( \".validation.point-name p\" ).remove();\n $( '.validation.point-name' ).parent().removeClass('validation-beco');\n }\n\n if(errors && errors['category']){\n $( \".validation.category-sec\" ).html(\"

\"+errors['category'].toString()+\"

\");\n $( '.validation.category-sec' ).parent().addClass('validation-beco');\n }else {\n $( \".validation.category-sec p\" ).remove();\n $( '.validation.category-sec' ).parent().removeClass('validation-beco');\n }\n\n if(errors && errors['description']){\n $( \".validation.point-description\" ).html(\"

\"+errors['description'].toString()+\"

\");\n $( '.validation.point-description' ).parent().addClass('validation-beco');\n }else {\n $( \".validation.point-description p\" ).remove();\n $( '.validation.point-description' ).parent().removeClass('validation-beco');\n }\n\n if(errors && errors['name_ar']){\n $( \".validation.point-name-ar\" ).html(\"

\"+errors['name_ar'].toString()+\"

\");\n $( '.validation.point-name-ar' ).parent().addClass('validation-beco');\n }else {\n $( \".validation.point-name-ar p\" ).remove();\n $( '.validation.point-name-ar' ).parent().removeClass('validation-beco');\n }\n\n\n if(errors && errors['description_ar']){\n $( \".validation.point-description-ar\" ).html(\"

\"+errors['description_ar'].toString()+\"

\");\n $( '.validation.point-description-ar' ).parent().addClass('validation-beco');\n }else {\n $( \".validation.point-description-ar p\" ).remove();\n $( '.validation.point-description-ar' ).parent().removeClass('validation-beco');\n }\n\n\n if(errors && (errors['name'] || errors['description'])){\n $( '#nav-eng-tab' ).addClass('active');\n $( '#nav-ar-tab' ).removeClass('active');\n \n $( '#point-eng' ).addClass('show active');\n $( '#point-arab' ).removeClass('show active');\n } else {\n $( '#nav-ar-tab' ).addClass('active');\n $( '#nav-eng-tab' ).removeClass('active');\n\n $( '#point-eng' ).removeClass('show active');\n $( '#point-arab' ).addClass('show active');\n }\n }\n \n }\n\n cancelAddPoint(){\n $(\"#pointManuallySection\").slideToggle(500);\n $(\"#selected-point\").show();\n }\n\n \n getMenu() {\n return this;\n }\n\n open(feature, rule, menu){\n this.initMenu();\n this.selectedFeature = feature;\n this.rule = rule;\n this.menu = menu;\n if(feature.getProperties() && feature.getProperties().location){\n this.selectedPoint = this.getOrCreatePoint(feature.getProperties().location);\n this.onEditNode();\n }\n this.editMode = false;\n }\n\n save(){\n let props = {};\n\n if(this.selectedFeature) props['location'] = this.selectedPoint;\n this.selectedFeature.setProperties(props);\n\n var type;\n if(this.selectedPoint && this.selectedPoint.isLift()){\n type = NodeType.LIFT;\n }\n\n this.selectedFeature = null;\n this.selectedPoint = null;\n $(\"#point-side-menu\").remove();\n\n return type;\n }\n\n configRuleSection(){\n if(this.selectedPoint && this.selectedPoint.isLift()){\n this.rule.showLifteRule();\n this.rule.hideEscalatorRule();\n this.rule.hideEmptyView();\n } else {\n this.rule.hideLifteRule();\n this.rule.hideEscalatorRule();\n this.rule.showEmptyView();\n }\n }\n\n removePoint(){\n if(this.selectedPoint){\n this.menu.removePoint(this.selectedPoint.name);\n this.selectedPoint = null;\n $(\"#point-cancel\").hide();\n $(\"#pointManuallySection\").show();\n // If selected point is not in server show the add point form else the search\n\n $(\"#selected-point-name\").text(\"\"); // Reset the point name\n $(\"#selected-point\").hide(); // Hide point selected\\\n\n $(\"#InputPointName\").val(\"\"); // Reset textbox value\n this.configRuleSection();\n \n }\n }\n\n editPoint(){\n if(this.selectedPoint){\n $(\"#selected-point\").hide(); // Hide point selected\n $(\"#pointManuallySection\").slideToggle(500);\n $(\"#selected-point-name\").text(this.selectedPoint.name);\n $(\"#InputPointName\").val(this.selectedPoint.name);\n $(\"#InputPointDescription\").val(this.selectedPoint.description);\n $(\"#InputPointNameAr\").val(this.selectedPoint.name_ar);\n $(\"#InputPointDescriptionAr\").val(this.selectedPoint.description_ar);\n this.editNode = this.selectedPoint.name;\n this.configRuleSection();\n }\n }\n \n\n static get getPointVariable() {\n return POINT;\n }\n\n getOrCreatePoint(params){\n console.log(params);\n var props = {\n category : params.category,\n visible : params.visible,\n searchable : params.searchable,\n clickable : params.clickable,\n name : params.name,\n name_ar : params.name_ar,\n description : params.description,\n description_ar : params.description_ar,\n label : params.categoryLabel\n };\n\n let point = new Point(props);\n\n return point;\n }\n\n\n \n}","\n\nconst NodeType = Object.freeze({\n LIFT: \"lift\",\n});\n\nclass Rules {\n\n\tconstructor() {\n \tthis.name = 'Rules';\n \tthis.type;\n \tthis.selectedFloors;\n \tthis.escalator;\n \t}\n\n\n \ttoString() {\n return this.name;\n }\n\n setFloors(floors){\n \t this.selectedFloors = floors;\n }\n\n getFloors(){\n return this.selectedFloors;\n }\n\n setType(type){\n \t this.type = type;\n }\n\n isLift(){\n return this.type == \"lift\" ? true:false;\n }\n\n \n\n}\n\n\nexport { Rules , NodeType};","var validate = require(\"validate.js\");\nvar uuidValidate = require('uuid-validate');\n\n\nexport default class Beacon {\n\n\tconstructor(params) {\n \tthis.name = params.name;\n this.major = params.major;\n this.minor = params.minor;\n this.uuid = params.uuid;\n \n //this.uuid = \"95ecc380-afe9-11e4-9b6c-751b66dd541e\";\n \t}\n\n\n \ttoString() {\n return this.name;\n }\n\n getName(){\n \t return this.name;\n }\n\n validateUUID(){\n return uuidValidate(this.uuid); \n }\n\n isEqual(beacon){\n if(this.name.toLowerCase() == beacon.name.toLowerCase() || (this.major == beacon.major && this.minor == beacon.minor)){\n return true;\n }\n return false;\n }\n\n editIsEqual(beacon){\n if(this.name.toLowerCase() == beacon.name.toLowerCase() && (this.major == beacon.major && this.minor == beacon.minor)){\n return true;\n }\n return false;\n }\n \n validate(){\n var constraints = {\n major: {\n numericality: {\n onlyInteger: true,\n greaterThan: 0\n }\n },\n minor: {\n numericality: {\n onlyInteger: true,\n greaterThan: 0\n }\n },\n uuid: {\n presence: {\n allowEmpty: false\n },\n },\n name: {\n presence: true,\n length: {\n minimum: 2,\n message: \"must be at least 2 characters\"\n }\n }\n };\n\n return validate({\n major: this.major,\n minor: this.minor,\n uuid: this.uuid,\n name:this.name\n }, \n constraints\n );\n }\n}","import '../styles/index.scss';\n\n\nimport { getSiteIdentifier } from './network/util.js';\n\nimport Application from './app.js';\n\n\nlet app;\n\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n\n\tapp = new Application();\n\tapp.init();\n});\n\n\n\n\n\n","import BeCoMap from './map/map.js';\nimport $ from 'jquery';\nimport Observable from './observer.js';\nimport API from './network/network.js';\nimport { getSiteIdentifier, getFloorIdentifier } from './network/util.js';\nimport { t } from './i18n/i18n.js';\nimport { toLocalTimeZone } from './utils.js';\n//import 'script-loader!./externaljs/ms-dropdown/jquery.dd.min.js';\n\n\n\n//Styles\nimport 'bootstrap';\nimport 'bootstrap/dist/css/bootstrap.min.css';\n\n//Driver js\nimport Driver from 'driver.js';\nimport 'driver.js/dist/driver.min.css';\nimport '../styles/tutorial/tutorial.scss';\n\nvar mapTemplate = require(\"../templates/map.handlebars\");\nvar loaderTemplate = require(\"../templates/loader.handlebars\");\nvar legendTemplate = require(\"../templates/map-legend.handlebars\");\nvar headerTemplate = require(\"../templates/header.handlebars\");\nvar feedBackTemplate = require(\"../templates/feedback.handlebars\");\nconst updateMap = app => app.saveData();\nconst drawObserver = new Observable();\n\nconst menu = {\n\taccount :{\n\t\tname : \"My Account\",\n\t\turl : SERVICE_URL \n\t},\n\tsites :{\n\t\tname : \"Sites\",\n\t\turl : SERVICE_URL\n\t},\n\tdocs :{\n\t\tname : \"Docs\",\n\t\turl : SERVICE_URL\n\t},\n\tsupport :{\n\t\tname : \"Support\",\n\t\turl : SERVICE_URL\n\t},\n\tlogout :{\n\t\tname : \"Sign out\",\n\t\turl : SERVICE_URL\n\t}\n};\n\n\nexport default class Application {\n\n\tconstructor() {\n\t\tthis.map;\n\t\tthis.siteIdentifier;\n\t\tthis.floorIdentifier;\n\t\tthis.api = new API();\n\t\tthis.buildInFlight;\n\n\t}\n\n\tinit(){\n\t\t$( \"body\" ).append(loaderTemplate);\n\t\t\n\t\t\n\t\tif(!this.checkRequestparams()){\n\t\t\t$(\"#beco-loader\").hide();\n\t\t\t$(\"#beco-error\").show();\n\t\t\t$(\"#beco-text\").text(t('site-conf-missing'));\n\t\t}else {\n\t\t\t// Check session \n\t\t\t$(\"#beco-loader\").show();\n\t\t\t$(\"#beco-error\").hide();\n\t\t\t$(\"#beco-text\").text(t('cheking-auth'));\n\t\t\tlet _this = this;\n\t\t\tthis.api.checkSession().then(function (response) {\n\t\t\t $(\"#beco-text\").text(t('fetching-map-data'));\n\t\t\t // Load Data \n\t\t\t _this.api.getSiteData(_this.siteIdentifier, _this.floorIdentifier).then(function (response) {\n\t\t\t \t//Init map\n\t\t\t\t\t$(\".container-loader\").hide();\n\t\t\t\t\t$(\"#beco-wrapper\").append(mapTemplate);\n\t\t\t\t\t//$(\"#beco-wrapper\").append(menuTemplate);\n\t\t\t\t\t_this.initMap(response.data);\n\t\t\t\t\t$( \"body\" ).append(legendTemplate);\n\t\t\t\t\t$( \"body\" ).append(headerTemplate);\n\t\t\t\t\t$( \"body\" ).append(feedBackTemplate);\n\t\t\t\t\t$(\".error-parent\").hide();\n\t\t\t\t\t$(\".success-or-error\").hide();\n\t\t\t\t\t_this.buildAccountMenu();\n\n\t\t\t\t\tif (response.data.write){\n\t\t\t\t $( \"#save-data\" ).bind( \"click\", function(event) {\n\t\t\t\t event.preventDefault();\n\t\t\t\t _this.saveData();\n\t\t\t\t });\n\t\t\t \t} else {\n\t\t\t \t\t$( \"#save-data\" ).hide();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t$(\"#feedbackSubmit\").bind( \"click\" ,function(event){\n\t\t\t\t\t\tvar data = $(\"#message-text\").val();\n\t\t\t\t\t\t_this.saveFeedback(data);\n\t\t\t\t\t});\t\n\n\t\t\t\t\tsetTimeout(function(){ \n\t\t\t\t\t\tif(localStorage.getItem('guideUIcompleted')){\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t_this.showTutorial();\n\t\t\t\t\t\t} \n\t\t\t\t\t}, 1000);\n\t\t\t\t\t\n\t\t\t\t\t$(document).on('click',\".driver-close-btn\", function(){\n\t\t\t\t\t\tlocalStorage.setItem('guideUIcompleted',true);\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t }).catch(function (error) {\n\t\t\t\t $(\"#beco-loader\").hide();\n\t\t\t\t\t$(\"#beco-error\").show();\n\t\t\t\t\tif(error.status = 403){\n\t\t\t\t\t\t$(\"#beco-text\").text(t('permission-failed'));\n\t\t\t\t\t}else {\n\t\t\t\t\t\t$(\"#beco-text\").text(t('invalid-site-config'));\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t});\n\n\t\t\t\t\n\n\t\t\t});\n\t\t\t \n\t\t\t\n\t\t\t\n\t\t}\n\t}\n\n\tinitMap(siteData) {\n\t\tthis.map = new BeCoMap(siteData,this.api);\n\t\tthis.map.init();\n\t\tthis.getData(siteData);\n\t\t//this.attachObserver(); This need to sync data to firebase\n\t}\n\n\tcheckRequestparams(){\n\t\t \n\t\ttry {\n \t\t\tthis.siteIdentifier = getSiteIdentifier();\n\t\t}\n\t\tcatch(err) {\n\t \t\tconsole.log(err);\n\t\t} \n\n\t\ttry {\n \t\t\tthis.floorIdentifier = getFloorIdentifier();\n\t\t}\n\t\tcatch(err) {\n\t \t\tconsole.log(err);\n\t\t} \n\n\t\treturn this.siteIdentifier && this.floorIdentifier;\n\t}\n\n\tgetMap(){\n\t\treturn this.map;\n\t}\n\n\tsaveData(){\n\t\tif (this.buildInFlight) return;\n\t\tthis.buildInFlight = true;\n\t\t$(\"#save-data\").removeClass('btn-beco-save');\n\t\t$(\"#save-data\").addClass('btn-beco-saved');\n\n\t\tlet data = this.map.getFeatures();\n\t\tvar _this = this;\n\t\tthis.api.saveMapData(this.siteIdentifier, this.floorIdentifier,data).then(function (response) {\n\t\t\t\n\t\t\tif(response.status==210){\n\t\t\t\t$(\"#save-error\").append(\"

\"+t('connected-floor-save-error')+\"

\");\n\t\t\t\t// alert(t('connected-floor-save-error'));\n\t\t\t} else if(response.status==211){\n\t\t\t\t$(\"#save-error\").append(\"

\"+t('floor-build-in-progrss')+\"

\");\n\t\t\t\t// alert(t('floor-build-in-progrss'));\n\t\t\t} else if(response.status==212){\n\t\t\t\t$(\"#save-error\").append(\"

\"+t('save-error-invalid-floor')+\"

\");\n\t\t\t\t// alert(t('save-error-invalid-floor'));\n\t\t\t} else if(response.status==209){\n\t\t\t\t$(\"#save-error\").append(\"

\"+result.data.email+\" is editing this floor

\");\n\t\t\t\t// alert(result.data.email+\" is editing this floor\");\n\t\t\t}else if(response.status==200){\n\t\t\t\t$(\"#update_text\").html(\"Last saved by \"+response.data.updated_by_user+\" at \");\n\t\t\t\t$(\"#update_time\").html(toLocalTimeZone( Date.now() ));\n\t\t\t}\n\t\t\t_this.buildInFlight = false;\n\n\t\t\t$(\"#save-data\").removeClass('btn-beco-saved');\n\t\t\t$(\"#save-data\").addClass('btn-beco-save');\t\n\t\t\tsetTimeout(function() {\n\t\t \t$(\"#save-error\").children().first().remove();\n\t\t\t}, 5000);\n\t\t\t\t\t\n\t }).catch(function (error) {\n\t\t\t_this.buildInFlight = false;\n\t\t\t$(\"#save-error\").append(\"

\"+t('save-error-exception')+\"

\");\n\t\t\t$(\"#save-data\").removeClass('btn-beco-saved');\n\t\t\t$(\"#save-data\").addClass('btn-beco-save');\n\t\t\tsetTimeout(function() {\n\t\t \t$(\"#save-error\").children().first().remove();\n\t\t\t}, 5000);\n\t\t});\n\n\n\t\t\n\t\t//const result = await this.api.saveData(this.siteIdentifier, this.floorIdentifier, data);\n\t\t\n\t\t\n\t\t \n\t\t// this.buildInFlight = false;\n\n\t\t// $(\"#save-data\").removeClass('btn-beco-saved');\n\t\t// $(\"#save-data\").addClass('btn-beco-save');\n\t}\n\n\tasync saveFeedback(feedback){\n\t\tconst result = await this.api.saveFeedback(this.siteIdentifier, feedback);\n\t\t$(\"#message-text\").val('');\n\t\t$(\".feedback-form\").hide();\n\t\t$(\".success-or-error\").show();\n\t\tif(result == 200){\n\t\t\t$(\".success-parent\").show();\n\t\t\tsetTimeout(function(){ \n\t\t\t\t$(\"#myModal\").modal('toggle');\n\t\t\t\t$(\".success-parent\").hide();\n\t\t\t\t$(\".feedback-form\").show();\n\t\t\t\t$(\".success-or-error\").hide();\n\t\t\t}, 2000);\n\t\t}else{\n\t\t\t$(\".success-parent\").hide();\n\t\t\t$(\".error-parent\").show();\n\t\t\tsetTimeout(function(){ \n\t\t\t\t$(\"#myModal\").modal('toggle');\n\t\t\t\t$(\".error-parent\").hide();\n\t\t\t\t$(\".feedback-form\").show();\n\t\t\t\t$(\".success-or-error\").hide();\n\t\t\t}, 2000);\n\n\t\t}\n\t\t\n\t}\n\n\tasync getData(siteData){\n\t\tconst result = await this.api.getData(this.siteIdentifier, this.floorIdentifier);\n\t\tif(result.map_data) this.map.setData(result.map_data);\n\t\tif(result.mod_time){\n\t\t\t(result.build_status) ? $(\"#update_text\").html(\"Last built by \"+result.updated_by_user+\" at \") : $(\"#update_text\").html(\"Last saved by \"+result.updated_by_user+\" at \");\n\t\t\t$(\"#update_time\").html(toLocalTimeZone(result.mod_time));\n\t\t}\n\t\telse{\n\t\t\t$(\"#update_text\").html();\n\t\t\t$(\"#update_time\").html();\n\t\t}\n\t\t\n\t\tif (siteData.write) this.map.initControls();\n\n\t}\n\n\tbuildAccountMenu(){\n\t\tconst markup = `\n\t\t\t
${menu.account.name}\n ${menu.sites.name}\n ${menu.docs.name}\n
\n ${menu.support.name}\n ${menu.logout.name}\n\t\t\t`;\n\t\t$(\"#accounts-menu\").html(markup);\n\n\t}\n\n\tattachObserver(){\n\t\tdrawObserver.subscribe(updateMap);\n\t\tvar app = this;\n\t\twindow.setInterval(function(){\n\t\t\tdrawObserver.notify(app);\n\t\t},30000); \n\t}\n\n\tshowTutorial(){\n\t\tconst driver = new Driver({allowClose: false,animate: true,closeBtnText: '',nextBtnText: 'Next »',prevBtnText: '« Previous',});\n\t\t$('#select-button').parent().attr('id','select-c');\n\t\t$('#modify-button').parent().attr('id','modify-c');\n\t\t$('#node-config-button').parent().attr('id','node-config-c');\n\t\t$('#draw-route-button').parent().attr('id','draw-route-c');\n\t\t$('#draw-poly-button').parent().attr('id','draw-poly-c');\n\t\t$('#split-button').parent().attr('id','split-c');\n\n\t\t\n\t\t// Define the steps for introduction\n\t\tdriver.defineSteps([\n\t\t\t{\n\t\t\telement: '#select-c',\n\t\t\tstageBackground: 'transparent',\n\t\t\tpopover: {\n\t\t\t\tclassName: 'first-step-popover-class select-c',\n\t\t\t\ttitle: 'Select',\n\t\t\t\tdescription: 'Select routes and delete routes',\n\t\t\t\tposition: 'right'\n\t\t\t},\n\t\t\tonClose: () => {localStorage.setItem('guideUIcompleted',true);},\n\t\t\t},\n\t\t\t{\n\t\t\telement: '#modify-c',\n\t\t\tstageBackground: 'transparent',\n\t\t\tpopover: {\n\t\t\t\tclassName: 'modify-c',\n\t\t\t\ttitle: 'Modify',\n\t\t\t\tdescription: 'Click and drag to change or modify position of nodes.',\n\t\t\t\tposition: 'right'\n\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\telement: '#node-config-c',\n\t\t\tstageBackground: 'transparent',\n\t\t\tpopover: {\n\t\t\t\tclassName: 'node-config-c',\n\t\t\t\ttitle: 'Node Config',\n\t\t\t\tdescription: 'Configure nodes. Attribute point, becon or both to the respective node.',\n\t\t\t\tposition: 'right'\n\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\telement: '#draw-route-c',\n\t\t\tstageBackground: 'transparent',\n\t\t\tpopover: {\n\t\t\t\tclassName: 'draw-route-c',\n\t\t\t\ttitle: 'Draw Route',\n\t\t\t\tdescription: 'Plot routes on the given map.',\n\t\t\t\tposition: 'right'\n\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\telement: '#draw-poly-c',\n\t\t\tstageBackground: 'transparent',\n\t\t\tpopover: {\n\t\t\t\tclassName: 'draw-poly-c',\n\t\t\t\ttitle: 'Polygon',\n\t\t\t\tdescription: 'Draw and mark areas.',\n\t\t\t\tposition: 'right'\n\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\telement: '#split-c',\n\t\t\tstageBackground: 'transparent',\n\t\t\tpopover: {\n\t\t\t\tclassName: 'split-c',\n\t\t\t\ttitle: 'Route Points',\n\t\t\t\tdescription: 'Add additional points between two nodes.',\n\t\t\t\tposition: 'right'\n\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\telement: '#save-data',\n\t\t\tstageBackground: '#fff',\n\t\t\tpopover: {\n\t\t\t\tclassName: 'save-data-c',\n\t\t\t\ttitle: 'Save',\n\t\t\t\tdescription: 'Save current modification on the map apart from auto save.',\n\t\t\t\tposition: 'left'\n\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\telement: '#profile-c',\n\t\t\tstageBackground: '#fff',\n\t\t\tpopover: {\n\t\t\t\tclassName: 'profile-c',\n\t\t\t\ttitle: 'Profile',\n\t\t\t\tdescription: 'User/organisation infromations.',\n\t\t\t\tposition: 'left'\n\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\telement: '.map-legend',\n\t\t\tstageBackground: 'transparent',\n\t\t\tpopover: {\n\t\t\t\tclassName: 'map-legend-c',\n\t\t\t\ttitle: 'Map Legend',\n\t\t\t\tdescription: 'Map style and icon information.',\n\t\t\t\tposition: 'left'\n\t\t\t},\n\t\t\tonNext: () => {localStorage.setItem('guideUIcompleted',true);},\n\t\t\t},\n\t\t]);\n\t\t\n\t\t// Start the introduction\n\t\tdriver.start();\n\n\t}\n\n}","import _ from 'underscore';\nimport Map from 'ol/Map.js';\nimport {defaults as defaultControls, Attribution} from 'ol/control.js';\nimport {Vector as VectorLayer} from 'ol/layer.js';\nimport VectorSource from 'ol/source/Vector.js';\nimport GeoJSON from 'ol/format/GeoJSON';\nimport LineString from 'ol/geom/LineString';\nimport Projection from 'ol/proj/Projection.js';\nimport View from 'ol/View.js';\nimport {getCenter} from 'ol/extent.js';\n\nimport LayerSwitcher from 'ol-ext/control/LayerSwitcher';\nimport '../../styles/switcher/switcher.scss';\n\nimport Floors from '../models/floor/model.js';\nimport DrawControl from '../models/layer/control/model.js';\nimport Menu from '../models/layer/menu/model.js';\nimport LineMenu from '../models/layer/menu/lineConfigMenu.js';\nimport Grid from '../models/grid/model.js';\nimport { target, toolbarConfig } from './projection.js';\nimport Beacon from '../models/layer/menu/beacon.js';\n\n\nexport default class BeCoMap {\n\n\tconstructor(siteData, api){\n \n \n \n this.map = null;\n this.menu;\n this.lineMenu;\n this.projection;\n this.view;\n this.vectorDrawLayer = null;\n this.vectorNodeLayer = null;\n this.vectorPolygonLayer = null;\n this.defaultControl = new DrawControl();\n this.siteData = siteData;\n this.api = api;\n this.extent = siteData.extent;\n this.imageSize = siteData.img_size;\n this.initProjection();\n this.initView();\n this.floors = new Floors(siteData['floors'],siteData['current_map'],siteData['floor_identifier'],\n this.projection,this.imageSize,this.extent);\n this.grid = new Grid(this.projection,this.imageSize,this.extent);\n this.floors.init();\n }\n\n initProjection(){\n this.projection = new Projection({\n code: 'xkcd-image',\n units: 'pixels',\n extent: this.extent,\n axisOrientation:'ene'\n });\n }\n\n initView(){\n this.view = new View({\n projection: this.projection,\n center: getCenter(this.extent),\n extent: this.extent,\n zoom: 2,\n minZoom: 2,\n maxZoom: 8\n });\n }\n\n // initialize plugin\n init() {\n $(\"#beco-container\").css(\"background-color\",this.siteData['bg_color']);\n var defaultControl = this.defaultControl;\n this.vectorDrawLayer = new VectorLayer({\n title : \"Draw Layer\",\n displayInLayerSwitcher: false,\n source: new VectorSource({\n features: []\n }),\n style: function(f) {\n return defaultControl.getStyle(f);\n }\n });\n\n this.vectorPolygonLayer = new VectorLayer({\n title : \"Polygon Layer\",\n displayInLayerSwitcher: false,\n opacity : 0.5,\n source: new VectorSource({\n features: []\n }),\n style: function(f) {\n return defaultControl.getAreaStyle(f);\n }\n });\n\n this.vectorNodeLayer = new VectorLayer({\n title : \"Node Layer\",\n displayInLayerSwitcher: false,\n source: new VectorSource({\n features: []\n }),\n style: function(f) {\n return defaultControl.getNodeStyle(f);\n }\n });\n\n\n \n \tthis.map = new Map({\n layers : this.getLayers(),\n\t\t target: target,\n\t\t view: this.view,\n \t\tcontrols: this.showButtons(),\n \t});\n\n \n this.map.once('rendercomplete', function(event) {\n //console.log(event);\n //console.log(\"rendercomplete\");\n });\n if(this.siteData.write ) {\n var ctrl = new LayerSwitcher();\n this.map.addControl(ctrl);\n }\n \n\n this.menu = new Menu(this.map, this.api, this.siteData);\n this.lineMenu = new LineMenu();\n \n this.map.on('singleclick', function (evt) {\n console.log(evt.coordinate);\n\n // convert coordinate to EPSG-4326\n });\n\n }\n\n initControls(){\n this.defaultControl.addControls(Object.assign({\n layer : this.vectorDrawLayer,\n nodeLayer : this.vectorNodeLayer,\n polygonLayer : this.vectorPolygonLayer,\n map : this.map,\n menu : this.menu,\n lineMenu : this.lineMenu,\n },toolbarConfig(this.siteData['plan'])));\n }\n\n getLayers() {\n var tileSource = Object.assign([],[this.floors.getTileSource()]);\n tileSource.push(this.vectorDrawLayer,this.vectorNodeLayer,this.vectorPolygonLayer);\n //if(this.siteData.write ) tileSource.push(this.grid.getGridLayer());\n\n return tileSource;\n }\n\n getMapTileLabels(){\n var layerArray = this.map.getLayers().getArray();\n var mapTile = [];\n _(layerArray).each(function (layer) {\n if(layer.getProperties().displayInLayerSwitcher){\n mapTile.push(layer.getProperties());\n }\n });\n return mapTile;\n }\n\n showButtons() {\n \tvar control = defaultControls({\n\t attributionOptions: ({\n\t collapsible: false\n\t })\n \t});\n \treturn control;\n }\n\n getMap() {\n \treturn this.map;\n }\n\n \n setData(mapData){\n let line = this.vectorDrawLayer.getSource();\n let node = this.vectorNodeLayer.getSource();\n let polygon = this.vectorPolygonLayer.getSource();\n var nodePoints = [];\n var becons = [];\n var format = new GeoJSON({\n featureProjection: this.projection,\n extractGeometryName : true\n });\n line.addFeatures(format.readFeatures(mapData.line));\n node.addFeatures(format.readFeatures(mapData.node));\n if(mapData.polygon){\n polygon.addFeatures(format.readFeatures(mapData.polygon));\n }\n _(format.readFeatures(mapData.node)).each(function (feature) { \n if(feature.getProperties() && feature.getProperties().location){\n nodePoints.push(feature.getProperties().location.name); \n }\n\n if(feature.getProperties() && feature.getProperties().beacon){\n var props = {\n name : feature.getProperties().beacon.name,\n major : feature.getProperties().beacon.major,\n minor : feature.getProperties().beacon.minor,\n uuid : feature.getProperties().beacon.uuid\n };\n \n let beacon = new Beacon(props);\n becons.push(beacon);\n }\n });\n\n this.menu.setPoints(nodePoints);\n this.menu.setBeacon(becons);\n }\n\n getFeatures() {\n const format = new GeoJSON({featureProjection: this.projection});\n\n let line = this.vectorDrawLayer.getSource().getFeatures();\n let node = this.vectorNodeLayer.getSource().getFeatures();\n let polygon = this.vectorPolygonLayer.getSource().getFeatures();\n _(node).each(function(feature){\n if(feature.getProperties().geometry){\n feature.unset('undefined');\n }\n });\n\n\n \n return ({\n \"line\" : format.writeFeatures(line, {decimals: 10}),\n \"node\" : format.writeFeatures(node, {decimals: 10}),\n \"polygon\" : format.writeFeatures(polygon,{decimals:10}),\n });\n }\n\n}\n\n","import _ from 'underscore';\nimport ImageLayer from 'ol/layer/Image.js';\nimport Static from 'ol/source/ImageStatic.js';\nimport { attributionHtml } from '../../map/projection.js';\n\nexport default class Floors {\n\n\t constructor(floors, floorTile, currentFloor,projection,imageSize,extent) {\n\n \t this.name = 'Floors';\n this.floors = floors;\n this.projection = projection;\n this.extent = extent;\n this.imageSize = imageSize;\n this.floor = currentFloor;\n this.floorTileSource;\n this.floorTile = floorTile;\n this.floorMap = new Map();\n var _this = this;\n _(floors).each(function(floor){\n _this.floorMap.set(floor.value,floor);\n }); \n\n \t}\n\n \ttoString() {\n return this.name;\n }\n\n \tinit() {\n var floor = this.floorMap.get(this.floor);\n this.floorTileSource = new ImageLayer({\n title: floor.label,\n displayInLayerSwitcher: false,\n tileId : floor.value,\n source: new Static({\n attributions: attributionHtml(),\n url: this.floorTile,\n imageSize: this.imageSize,\n projection: this.projection,\n imageExtent: this.extent,\n })\n });\n\n \t}\n\n \tgetFloors() {\n return this.floors;\n \t}\n\n getFloor(floorIdentifier) {\n return this.floorMap.get(floorIdentifier);\n }\n\n getTileSource(){\n return this.floorTileSource;\n }\n\n\n}","import _ from 'underscore';\n\nimport {Circle as CircleStyle , Style, Fill, Stroke, RegularShape, Text, Icon} from 'ol/style.js';\nimport Select from 'ol/interaction/Select';\nimport click from 'ol/events/condition';\nimport Draw from 'ol/interaction/Draw';\nimport Modify from 'ol/interaction/Modify';\nimport LineString from 'ol/geom/LineString';\nimport Polygon from 'ol/geom/Polygon';\nimport Snap from 'ol/interaction/Snap';\nimport MultiPoint from 'ol/geom/MultiPoint';\nimport Feature from 'ol/Feature';\nimport Point from 'ol/geom/Point';\nimport doubleClick from 'ol/events/condition';\n\nimport Bar from 'ol-ext/control/Bar';\nimport EditBar from 'ol-ext/control/EditBar';\nimport Delete from 'ol-ext/interaction/Delete';\nimport Button from 'ol-ext/control/Button';\nimport Toggle from 'ol-ext/control/Toggle';\nimport TextButton from 'ol-ext/control/TextButton';\nimport Split from 'ol-ext/interaction/Split';\nimport UndoRedo from './undoredo';\nimport ModifyFeature from 'ol-ext/interaction/ModifyFeature';\nimport Splitter from 'ol-ext/interaction/Splitter';\n\nimport Menu from '../menu/model.js';\nimport PointMenu from '../menu/pointMenu.js';\n\n\nimport '../../../../styles/bar/bar.css';\nimport '../../../../styles/bar/edit.css';\nimport '../../../../styles/icomoon/style.css';\n\nconst uniqueArray = a => [...new Set(a.map(o => JSON.stringify(o)))].map(s => JSON.parse(s));\n\nexport default class DrawControl {\n\n\t constructor() {\n this.name = 'DrawControl';\n this.mainbar = new Bar({\n className : 'ol-editbar',\n toggleOne : true\n });\n this.position = \"top-left\";\n this.map;\n this._source;\n this._nodeSource;\n this._layer;\n this._menu;\n this._nodeLayer;\n this._interactions = {};\n this.pointmap = new Map();\n \t}\n\n \ttoString() {\n return this.name;\n }\n\n getMap() {\n return this.map;\n }\n\n\n addPointControl(){\n this._interactions.DrawPoint = new Draw({\n type: 'Point',\n source: this._source\n });\n\n var pedit = new Toggle({\n html: 'Asset',\n title: 'Asset',\n interaction: this._interactions.DrawPoint\n });\n this.mainbar.addControl(pedit);\n }\n\n getCoordinateIdentifier(x,y){\n return x>=y ? ((x * x)+x+y) :(x+(y * y));\n }\n\n addModifyControl(){\n this._interactions.Modify = new Modify({\n source: this._source,\n });\n\n this._interactions.Modify.on('modifyend', function(e) {\n //TODO update time\n //https://gis.stackexchange.com/questions/175784/openlayers-3-how-to-get-only-the-modified-feature\n });\n\n var pmodify = new Toggle({\n html: 'Modify',\n //className: 'ol-drawhole',\n title: 'Modify',\n interaction: this._interactions.Modify\n });\n this.mainbar.addControl(pmodify);\n }\n\n addPropertiesControl(){\n \n var _this = this;\n this._interactions.NodeSelect = new Select({\n condition: doubleClick,\n style : this.getSelectedNodeStyle(),\n layers : [this._nodeLayer]\n });\n var sel = this._interactions.NodeSelect;\n var selectCtrl = new Toggle({\n html: 'Node Config',\n title: \"Node Config\",\n interaction: sel\n });\n\n sel.on('change:active', function() {\n sel.getFeatures().clear();\n });\n\n sel.on('select', function(evt){\n if(evt.selected.length > 0){\n _this._menu.open(evt.selected[0], sel); }\n });\n\n this.mainbar.addControl(selectCtrl);\n }\n\n addLinepropertiesControl(){\n \n var _this = this;\n this._interactions.LineSelect = new Select({\n condition: doubleClick,\n style : this.getSelectedStyle(),\n layers : [this._layer]\n });\n var sel = this._interactions.LineSelect;\n var selectCtrl = new Toggle({\n html: 'Route Config',\n title: \"Route Config\",\n interaction: sel\n });\n\n sel.on('change:active', function() {\n sel.getFeatures().clear();\n });\n\n sel.on('select', function(evt){\n if(evt.selected.length > 0){\n _this._lineMenu.open(evt.selected[0], sel); }\n });\n\n this.mainbar.addControl(selectCtrl);\n }\n\n addSelectControl(){\n // Sub bar\n var sbar = new Bar();\n var selectCtrl;\n this._interactions.Delete = new Delete();\n var del = this._interactions.Delete;\n del.setActive(false);\n if (this.getMap()) this.getMap().addInteraction(del);\n\n sbar.addControl (new Button({\n html: '',\n // className: 'ol-delete',\n title: \"Delete\",\n handleClick: function(e) {\n // Delete selection\n del.delete(selectCtrl.getInteraction().getFeatures());\n var evt = {\n type: 'select',\n selected: [],\n deselected: selectCtrl.getInteraction().getFeatures().getArray().slice(),\n mapBrowserEvent: e.mapBrowserEvent\n };\n selectCtrl.getInteraction().getFeatures().clear();\n selectCtrl.getInteraction().dispatchEvent(evt);\n }\n }));\n\n\n this._interactions.Select = new Select({\n condition: click,\n style : this.getSelectedStyle(),\n layers : [this._layer,this._polygonLayer]\n });\n var sel = this._interactions.Select;\n selectCtrl = new Toggle({\n className: 'have-submenu',\n html: 'Select',\n title: \"Select\",\n interaction: sel,\n bar: sbar.getControls().length ? sbar : undefined,\n autoActivate:true,\n active:true\n });\n\n sel.on('change:active', function() {\n sel.getFeatures().clear();\n });\n\n this.mainbar.addControl(selectCtrl);\n }\n\n _setModifyInteraction(){\n this._interactions.ModifySelect = new ModifyFeature({\n features: this.getInteraction('Select').getFeatures()\n });\n \n if (this.getMap()) this.getMap().addInteraction(this._interactions.ModifySelect);\n // Activate with select\n this._interactions.ModifySelect.setActive(this._interactions.Select.getActive());\n this._interactions.Select.on('change:active', function() {\n this._interactions.ModifySelect.setActive(this._interactions.Select.getActive());\n }.bind(this));\n }\n\n addLineControl(){\n\n this._interactions.DrawLine = new Draw ({\n type: 'LineString',\n source: this._source,\n geometryName : 'LineString',\n // Count inserted points\n geometryFunction: function(coordinates, geometry) {\n if (geometry) geometry.setCoordinates(coordinates);\n else geometry = new LineString(coordinates);\n this.nbpts = geometry.getCoordinates().length;\n return geometry;\n }\n });\n\n var ledit = new Toggle({\n className: 'have-submenu',\n html: 'Draw Route',\n title: 'Draw Route',\n interaction: this._interactions.DrawLine,\n // Options bar associated with the control\n bar: new Bar ({\n controls:[ \n new TextButton({\n html: '',\n // className: 'ol-undo',\n title: \"delete last point\",\n handleClick: function() {\n if (ledit.getInteraction().nbpts>1) ledit.getInteraction().removeLastPoint();\n }\n }),\n new TextButton ({\n // className: 'ol-finish',\n html: '',\n title: \"finish\",\n handleClick: function() {\n // Prevent null objects on finishDrawing\n if (ledit.getInteraction().nbpts>2) ledit.getInteraction().finishDrawing();\n }\n })\n ]\n }) \n });\n\n this.mainbar.addControl(ledit);\n }\n\n _setDrawPolygon(className, interaction, title){\n var fedit = new Toggle ({\n className: 'have-submenu',\n html: 'Polygon',\n title: title,\n interaction: interaction,\n // Options bar associated with the control\n bar: new Bar({\n controls:[ \n new TextButton ({\n html: '',\n title: 'undo last point',\n handleClick: function(){\n if (fedit.getInteraction().nbpts>1) fedit.getInteraction().removeLastPoint();\n }\n }),\n new TextButton({\n html: '',\n title: 'finish',\n handleClick: function() {\n // Prevent null objects on finishDrawing\n if (fedit.getInteraction().nbpts>3) fedit.getInteraction().finishDrawing();\n }\n })\n ]\n }) \n });\n this.mainbar.addControl(fedit);\n }\n\n addPolygonControl(){\n this._interactions.DrawPolygon = new Draw ({\n type: 'Polygon',\n source: this._polygonSource,\n // Count inserted points\n geometryFunction: function(coordinates, geometry) {\n this.nbpts = coordinates[0].length;\n if (geometry) geometry.setCoordinates([coordinates[0].concat([coordinates[0][0]])]);\n else geometry = new Polygon(coordinates);\n return geometry;\n }\n });\n this._setDrawPolygon(\n 'ol-drawpolygon', \n this._interactions.DrawPolygon, \n 'Polygon'\n );\n }\n\n\n addSplitControl(){\n this._interactions.Split = new Split ({\n sources: this._source\n });\n var split = new Toggle ({\n // className: 'ol-split',\n html: 'Route Points',\n title: 'Route Points',\n interaction: this._interactions.Split\n });\n this.mainbar.addControl(split);\n }\n\n getInteraction(name){\n return this._interactions[name];\n }\n\n \taddUndoRedoControl(){\n var _this = this;\n \t this._interactions.UndoRedo = new UndoRedo ();\n if (this.getMap()) this.getMap().addInteraction(this._interactions.UndoRedo);\n // Prevent selection of a deleted feature\n this._interactions.UndoRedo.on('undo', function(e) {\n // console.log(e);\n if (e.action.type === 'addfeature') {\n _this.getInteraction('Select').getFeatures().clear();\n //_this.getInteraction('Transform').select();\n }\n });\n\n // Add buttons to the bar\n var bar = new Bar({ \n group: true,\n controls: [\n new Button({\n html: 'Undo',\n title: 'undo...',\n handleClick: function() {\n _this._interactions.UndoRedo.undo();\n }\n }),\n new Button({\n html: 'Redo',\n title: 'redo...',\n handleClick: function() {\n _this._interactions.UndoRedo.redo();\n }\n })\n ]\n });\n this.mainbar.addControl(bar);\n }\n \n getNodeStyle(feature){\n\n var fillColor = \"#26ace3\";\n if(feature.getProperties()){\n if(feature.getProperties().location && feature.getProperties().beacon){\n fillColor = \"#4A8C7A\";\n } else {\n if(feature.getProperties().location){\n fillColor = \"#546EB3\";\n }else if(feature.getProperties().beacon){\n fillColor = \"#8F7E8C\";\n }\n }\n }\n \n var pointName = \"\";\n if(feature.get(PointMenu.getPointVariable) && feature.get(PointMenu.getPointVariable).visible){\n pointName = feature.get(PointMenu.getPointVariable).name ;\n }\n return new Style({\n image: new CircleStyle({\n radius: 6,\n fill: new Fill({ color: fillColor }),\n stroke: new Stroke({\n color: '#adccd9',\n width: 1.5\n })\n }),\n text: new Text({\n offsetY: 13,\n text: pointName,\n font: 'bold 10px Open Sans,sans-serif',\n fill: new Fill({ color: '#666666' }),\n stroke: new Stroke({ color: '#666666', width: 0.5 })\n })\n });\n }\n\n getLabelstyle() {\n return new Style({\n text: new Text({\n font: 'normal 12px \"Open Sans\", \"Arial\", \"sans-serif\"',\n placement: 'line',\n fill: new Fill({\n color: '#FFFFFF'\n }),\n stroke: new Stroke({color: \"#5D5755\", width: 3}),\n overflow: true,\n })\n });\n }\n\n getSelectedNodeStyle(){\n return new Style({\n image: new CircleStyle({\n radius: 8,\n fill: new Fill({ color: '#de837a' }),\n stroke: new Stroke({\n color: '#de837a',\n width: 1\n })\n })\n });\n }\n\n getStyle(feature){\n var geometry = feature.getGeometry();\n var styles = [\n new Style({\n stroke: new Stroke({ color: '#adccd9',width: 6 }),\n fill: new Fill({ color: '#adccd9' }),\n })\n ];\n\n if(feature.getProperties().label){\n if(geometry.getType() == 'LineString'){\n styles.push(new Style({\n geometry: geometry,\n text: new Text({\n font: 'normal '+feature.getProperties().labelTextSize+'px \"Open Sans\", \"Arial\", \"sans-serif\"',\n placement: 'line',\n text:feature.getProperties().label,\n fill: new Fill({\n color: feature.getProperties().labelTextColor\n }),\n stroke: new Stroke({color: feature.getProperties().labelBorderColor, width: 3}),\n overflow: true,\n })\n }));\n }\n \n }\n if(feature.getProperties().direction){\n geometry.forEachSegment(function(start, end) {\n\n var dx, dy;\n if(feature.getProperties().direction == 1){\n dx = end[0] - start[0];\n dy = end[1] - start[1];\n }else {\n dx = start[0] - end[0];\n dy = start[1] - end[1];\n }\n \n var rotation = Math.atan2(dy, dx);\n\n var midPoint = [((start[0] + end[0]) / 2), ((start[1] + end[1]) / 2)];\n // arrows\n styles.push(new Style({\n geometry: new Point(midPoint),\n image: new Icon({\n src: 'public/images/arrow.png',\n anchor: [0.75, 0.5],\n rotateWithView: true,\n rotation: -rotation\n })\n }));\n });\n }\n\n return styles;\n }\n\n getAreaStyle(feature){\n return [\n new Style({\n stroke: new Stroke({ color: '#adccd9',width: 6 }),\n fill: new Fill({ color: '#df4a43' }),\n }),\n ];\n }\n\n getSelectedStyle(){\n return [\n new Style({\n stroke: new Stroke({ color: '#de837a',width: 6 }),\n fill: new Fill({ color: '#de837a' }),\n }),\n ];\n }\n\n /**\n * Add different draw controls to the Map.\n * First 2 only for reference : TODO remove on final build\n * @param {import {Vector as VectorLayer} from 'ol/layer.js';} Vector\n * Vector data that is rendered client-side.\n * @param {import Map from 'ol/Map.js';} map\n * Core Map layer.\n * @param {options} map\n * Settings for the draw controls.\n */\n addControls(options){\n options = options || {};\n this.map = options.map;\n this._layer = options.layer;\n this._nodeLayer = options.nodeLayer;\n this._source = options.layer.getSource();\n this._polygonSource = options.polygonLayer.getSource();\n this._polygonLayer = options.polygonLayer;\n this._nodeSource = options.nodeLayer.getSource();\n this._menu = options.menu;\n this._lineMenu = options.lineMenu;\n\n this.mainbar.setPosition(this.position);\n \n if (options.select == true) { \n this.addSelectControl();\n this._setModifyInteraction();\n }\n if (options.modify == true) { \n this.addModifyControl();\n }\n if (options.point == true) { \n //this.addPointControl();\n }\n this.addPropertiesControl();\n this.addLinepropertiesControl();\n if (options.line == true) { \n this.addLineControl();\n }\n if (options.polygon == true) { \n this.addPolygonControl();\n }\n if (options.split == true) { \n this.addSplitControl();\n }\n if (options.undo == true) { \n this.addUndoRedoControl();\n }\n\n\n var _this = this;\n this._source.on('change', function(event) {\n //console.log(\"change: \", event.target.getFeatures());\n const points = [];\n\n _(_this._nodeSource.getFeatures()).each(function (feature) {\n if(feature.getProperties()){\n if(feature.getProperties().location || feature.getProperties().beacon){\n var pt = feature.getGeometry().getCoordinates();\n var id = _this.getCoordinateIdentifier(pt[0], pt[1]);\n _this.pointmap.set(id,feature.getProperties());\n }\n }\n \n });\n\n _this._nodeSource.clear();\n _(event.target.getFeatures()).each(function (feature) {\n if(feature.getGeometry().getType() == 'LineString'){\n points.push(...feature.getGeometry().getCoordinates());\n }\n });\n\n \n\n _(uniqueArray(points)).each(function (point) {\n var feature = new Feature(\n new Point(point)\n );\n var id = _this.getCoordinateIdentifier(point[0], point[1]);\n if(_this.pointmap.get(id)){\n feature.setProperties(_this.pointmap.get(id));\n }\n _this._nodeSource.addFeature(feature);\n });\n\n\n });\n \t\n //https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set\n // Add splitter before other interaction\n var splitter = new Splitter({ source: this._source });\n this.map.addInteraction(splitter);\n\n\n this.map.addControl(this.mainbar);\n\n this.map.addInteraction(new Snap({ \n source: options.layer.getSource() \n }));\n\n this.map.on('pointermove', function(event) {\n var hasFeature = _this.map.forEachFeatureAtPixel(_this.map.getEventPixel(event.originalEvent), function(feature) {\n return true ;\n });\n\n this.getTargetElement().style.cursor = hasFeature ? 'pointer' : '';\n });\n\n }\n\n\n}","import ol_ext_inherits from 'ol-ext/util/ext';\nimport ol_interaction_Interaction from 'ol/interaction/Interaction';\nimport ol_layer_Vector from 'ol/layer/Vector';\nimport {unByKey as ol_Observable_unByKey} from 'ol/Observable';\nimport 'ol-ext/source/Vector';\n\n/** Undo/redo interaction\n * @constructor\n * @extends {ol_interaction_Interaction}\n * @fires undo\n * @fires redo\n * @param {*} options\n */\nvar ol_interaction_UndoRedo = function(options) {\n if (!options) options = {};\n\n\tol_interaction_Interaction.call(this, {\t\n handleEvent: function() { \n return true; \n }\n });\n\n this._undoStack = [];\n this._redoStack = [];\n // Block counter\n this._block = 0;\n // Start recording\n this._record = true;\n // Custom definitions\n this._defs = {};\n};\nol_ext_inherits(ol_interaction_UndoRedo, ol_interaction_Interaction);\n\n/** Add a custom undo/redo\n * @param {string} action the action key name\n * @param {function} undoFn function called when undoing\n * @param {function} redoFn function called when redoing\n * @api\n */\nol_interaction_UndoRedo.prototype.define = function(action, undoFn, redoFn) {\n this._defs['_'+action] = { undo: undoFn, redo: redoFn };\n};\n\n/** Set a custom undo/redo\n * @param {string} action the action key name\n * @param {any} prop an object that will be passed in the undo/redo fucntions of the action\n * @return {boolean} true if the action is defined\n */\nol_interaction_UndoRedo.prototype.push = function(action, prop) {\n if (this._defs['_'+action]) {\n this._undoStack.push({type: '_'+action, prop: prop });\n return true;\n } else {\n return false;\n }\n};\n\n/** Activate or deactivate the interaction, ie. records or not events on the map.\n * @param {boolean} active\n * @api stable\n */\nol_interaction_UndoRedo.prototype.setActive = function(active) {\n ol_interaction_Interaction.prototype.setActive.call (this, active);\n this._record = active;\n};\n\n/**\n * Remove the interaction from its current map, if any, and attach it to a new\n * map, if any. Pass `null` to just remove the interaction from the current map.\n * @param {ol.Map} map Map.\n * @api stable\n */\nol_interaction_UndoRedo.prototype.setMap = function(map) {\n ol_interaction_Interaction.prototype.setMap.call (this, map);\n // Watch sources\n this._watchSources();\n this._watchInteractions();\n};\n\n/** Watch for changes in the map sources\n * @private\n */\nol_interaction_UndoRedo.prototype._watchSources = function() {\n var map = this.getMap();\n // Clear listeners\n if (this._sourceListener) {\n this._sourceListener.forEach(function(l) { ol_Observable_unByKey(l); });\n }\n this._sourceListener = [];\n\n // Ges vector layers \n function getVectorLayers(layers, init) {\n if (!init) init = [];\n layers.forEach(function(l) {\n if (l.values_.title != \"Node Layer\"){\n if (l instanceof ol_layer_Vector) {\n init.push(l);\n } else if (l.getLayers) {\n getVectorLayers(l.getLayers(), init);\n }\n }\n \n });\n return init;\n }\n\n if (map) {\n // Watch the vector sources in the map \n var vectors = getVectorLayers(map.getLayers());\n vectors.forEach((function(l) {\n var s = l.getSource();\n this._sourceListener.push( s.on(['addfeature', 'removefeature'], this._onAddRemove.bind(this)) );\n this._sourceListener.push( s.on('clearstart', this.blockStart.bind(this)) );\n this._sourceListener.push( s.on('clearend', this.blockEnd.bind(this)) );\n }).bind(this));\n\n // Watch new inserted/removed\n this._sourceListener.push( map.getLayers().on(['add', 'remove'], this._watchSources.bind(this) ) );\n }\n};\n\n/** Watch for interactions\n * @private\n */\nol_interaction_UndoRedo.prototype._watchInteractions = function() {\n var map = this.getMap();\n // Clear listeners\n if (this._interactionListener) {\n this._interactionListener.forEach(function(l) { ol_Observable_unByKey(l); });\n }\n this._interactionListener = [];\n\n if (map) {\n // Watch the interactions in the map \n map.getInteractions().forEach((function(i) {\n this._interactionListener.push(i.on(\n ['setattributestart', 'modifystart', 'rotatestart', 'translatestart', 'scalestart', 'deletestart', 'deleteend', 'beforesplit', 'aftersplit'], \n this._onInteraction.bind(this)\n ));\n }).bind(this));\n\n // Watch new inserted / unwatch removed\n this._interactionListener.push( map.getInteractions().on(\n ['add', 'remove'], \n this._watchInteractions.bind(this)\n ));\n }\n};\n\n/** A feature is added / removed\n */\nol_interaction_UndoRedo.prototype._onAddRemove = function(e) {\n if (this._record) {\n this._undoStack.push({type: e.type, source: e.target, feature: e.feature });\n this._redoStack = [];\n }\n};\n\nol_interaction_UndoRedo.prototype._onInteraction = function(e) {\n var fn = this._onInteraction[e.type];\n if (fn) fn.call(this,e);\n};\n\n/** Set attribute\n * @private\n */\nol_interaction_UndoRedo.prototype._onInteraction.setattributestart = function(e) {\n this.blockStart();\n var newp = Object.assign({}, e.properties);\n e.features.forEach(function(f) {\n var oldp = {};\n for (var p in newp) {\n oldp[p] = f.get(p);\n }\n this._undoStack.push({\n type: 'changeattribute', \n feature: f, \n newProperties: newp,\n oldProperties: oldp\n });\n }.bind(this));\n this.blockEnd();\n};\n\nol_interaction_UndoRedo.prototype._onInteraction.rotatestart = \nol_interaction_UndoRedo.prototype._onInteraction.translatestart = \nol_interaction_UndoRedo.prototype._onInteraction.scalestart = \nol_interaction_UndoRedo.prototype._onInteraction.modifystart = function (e) {\n this.blockStart();\n e.features.forEach(function(m) {\n this._undoStack.push({type: 'changefeature', feature: m, oldFeature: m.clone() });\n }.bind(this));\n this.blockEnd();\n};\n\n/** Start an undo block\n * @api\n */\nol_interaction_UndoRedo.prototype.blockStart = function () {\n this._undoStack.push({ type: 'blockstart' });\n this._redoStack = [];\n};\n\n/** @private\n */\nol_interaction_UndoRedo.prototype._onInteraction.beforesplit =\nol_interaction_UndoRedo.prototype._onInteraction.deletestart =\nol_interaction_UndoRedo.prototype.blockStart;\n\n/** End an undo block\n * @api\n */\nol_interaction_UndoRedo.prototype.blockEnd = function () {\n this._undoStack.push({ type: 'blockend' });\n};\n\n/** @private\n */\nol_interaction_UndoRedo.prototype._onInteraction.aftersplit =\nol_interaction_UndoRedo.prototype._onInteraction.deleteend =\nol_interaction_UndoRedo.prototype.blockEnd;\n\n/** handle undo/redo\n * @private\n */\nol_interaction_UndoRedo.prototype._handleDo = function(e, undo) {\n // Not active\n if (!this.getActive()) return;\n\n // Stop recording while undoing\n this._record = false;\n switch (e.type) {\n case 'addfeature': {\n if (undo) e.source.removeFeature(e.feature);\n else e.source.addFeature(e.feature);\n break;\n }\n case 'removefeature': {\n if (undo) e.source.addFeature(e.feature);\n else e.source.removeFeature(e.feature);\n break;\n }\n case 'changefeature': {\n var geom = e.feature.getGeometry();\n e.feature.setGeometry(e.oldFeature.getGeometry());\n e.oldFeature.setGeometry(geom);\n break;\n }\n case 'changeattribute': {\n var newp = e.newProperties;\n var oldp = e.oldProperties;\n for (var p in oldp) {\n if (oldp === undefined) e.feature.unset(p);\n else e.feature.set(p, oldp[p]);\n }\n e.oldProperties = newp;\n e.newProperties = oldp;\n break;\n }\n case 'blockstart': {\n this._block += undo ? -1 : 1;\n break;\n }\n case 'blockend': {\n this._block += undo ? 1 : -1;\n break;\n }\n default: {\n if (this._defs[e.type]) {\n if (undo) this._defs[e.type].undo(e.prop);\n else this._defs[e.type].redo(e.prop);\n } else {\n console.warn('[UndoRedoInteraction]: \"'+e.type.substr(1)+'\" is not defined.');\n }\n }\n }\n\n // Handle block\n if (this._block<0) this._block = 0;\n if (this._block) {\n if (undo) this.undo();\n else this.redo();\n }\n this._record = true;\n\n // Dispatch event\n this.dispatchEvent( { \n type: undo ? 'undo' : 'redo',\n action: e\n });\n};\n\n/** Undo last operation\n * @api\n */\nol_interaction_UndoRedo.prototype.undo = function() {\n var e = this._undoStack.pop();\n if (!e) return;\n this._redoStack.push(e);\n this._handleDo(e, true);\n};\n\n/** Redo last operation\n * @api\n */\nol_interaction_UndoRedo.prototype.redo = function() {\n var e = this._redoStack.pop();\n if (!e) return;\n this._undoStack.push(e);\n this._handleDo(e, false);\n};\n\n/** Clear undo stack\n * @api\n */\nol_interaction_UndoRedo.prototype.clear = function() {\n this._undoStack = [];\n this._redoStack = [];\n};\n\n/** Check if undo is avaliable\n * @return {number} the number of undo \n * @api\n */\nol_interaction_UndoRedo.prototype.hasUndo = function() {\n return this._undoStack.length;\n};\n\n/** Check if redo is avaliable\n * @return {number} the number of redo\n * @api\n */\nol_interaction_UndoRedo.prototype.hasRedo = function() {\n return this._redoStack.length;\n};\n\nexport default ol_interaction_UndoRedo;\n","var validate = require(\"validate.js\");\n\nexport default class Point {\n\n\tconstructor(params) {\n \tthis.name = params.name;\n this.name_ar = params.name_ar;\n this.description = params.description;\n this.description_ar = params.description_ar;\n // this.step = params.step;\n this.category = params.category;\n this.categoryLabel = params.label;\n this.visible = params.visible;\n this.searchable = params.searchable;\n this.clickable = params.clickable;\n \t}\n\n\n \ttoString() {\n return this.name;\n }\n\n getName(){\n \t return this.name;\n }\n\n\n validate(){\n var constraints = {\n category: {\n presence: {\n allowEmpty: false\n }\n },\n name: {\n presence: true,\n length: {\n minimum: 2,\n message: \"must be at least 2 characters\"\n }\n },\n name_ar: {\n presence: true,\n length: {\n minimum: 2,\n message: \"must be at least 2 characters\"\n }\n }\n // description: {\n // presence: true,\n // length: {\n // minimum: 5,\n // maximum:120,\n // message: \"must be at minimum 5 and maximum 120 characters\"\n // }\n // },\n // description_ar: {\n // presence: true,\n // length: {\n // minimum: 5,\n // maximum:120,\n // message: \"must be at minimum 5 and maximum 120 characters\"\n // }\n // }\n };\n return validate({category: this.category,name:this.name,name_ar:this.name_ar}, constraints);\n }\n\n isLift(){\n if(!this.categoryLabel) return false;\n return this.categoryLabel.toLowerCase() == \"lift\" ? true : false;\n }\n\n \n\n\n}","var Handlebars = require(\"../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n return \"
\\n
\\n
\\n
Point
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n
\\n
\\n \\n \\n
\\n
\\n \\n \\n
\\n
\\n \\n \\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n Selected Point :
\\n Point\\n
\\n \\n \\n
\\n\\n
\\n
\\n
\\n
\\n
\\n
\\n Are you sure ? You want to delete the point !\\n
\\n
\\n \\n
\\n
\\n\\n
\";\n},\"useData\":true});","import _ from 'underscore';\n\nimport Choices from 'choices.js/public/assets/scripts/choices.min.js';\nimport 'choices.js/public/assets/styles/choices.min.css';\nimport { Rules , NodeType} from './rules.js';\n\n\nvar menuTemplate = require(\"../../../../templates/rules.handlebars\");\n\nconst RULE = \"rules\";\n\nexport default class RuleMenu {\n\n\tconstructor(api, siteData) {\n\t\tthis.name = 'RuleMenu';\n this.siteData = siteData;\n\t\tthis.selectedFeature;\n\t\tthis.configredRule;\n this.floorRule;\n this.rule;\n\t}\n\n\ttoString() {\n return this.name;\n }\n\n\n initMenu(){\n $(\"#rules-body\").html(\"\");\n \t$(\"#rules-body\").append(menuTemplate);\n this.rule = new Rules();\n var _this = this;\n var choices = _.filter(this.siteData.floors, function(floor){ return floor.value != _this.siteData.floor_identifier; });\n\n \tthis.floorRule = new Choices(document.getElementById('FloorRules'),{\n choices : choices,\n paste: false,\n removeItemButton: true\n });\n\n \n\n // rule select\n }\n\n onEditNode(){\n if(this.configredRule.type == 'lift'){\n this.floorRule.setValue(this.configredRule.getFloors());\n }\n this.configRuleSection();\n }\n\n \n configRuleSection(){\n if(this.configredRule && this.configredRule.isLift()){\n this.showLifteRule();\n this.hideEscalatorRule();\n this.hideEmptyView();\n } else {\n this.hideLifteRule();\n this.hideEscalatorRule();\n this.showEmptyView();\n }\n }\n\n showLifteRule(){\n $(\"#lift-rule\").show();\n }\n\n hideLifteRule(){\n $(\"#lift-rule\").hide();\n }\n\n showEscalatorRule(){\n $(\"#escalator-rule\").show();\n }\n\n hideEscalatorRule(){\n $(\"#escalator-rule\").hide();\n }\n\n showEmptyView(){\n $(\"#empty-view\").show();\n }\n\n hideEmptyView(){\n $(\"#empty-view\").hide();\n }\n\n open(feature){\n \tthis.initMenu();\n this.selectedFeature = feature;\n if(feature.getProperties() && feature.getProperties().rule){\n var rule = new Rules();\n rule.setType(feature.getProperties().rule.type);\n rule.setFloors(feature.getProperties().rule.selectedFloors);\n this.configredRule = rule;\n this.onEditNode();\n }\n }\n\n save(selectedPoint){\n \t$(\"#rule-side-menu\").remove();\n let props = {};\n if(this.rule && selectedPoint){\n this.rule.setType(selectedPoint);\n var selectedData = [];\n if(selectedPoint == 'lift'){\n _(this.floorRule.getValue()).each(function(floor){\n selectedData.push({\n label : floor.label,\n value : floor.value\n });\n }); \n }\n \n this.rule.setFloors(selectedData);\n if(this.selectedFeature) props['rule'] = this.rule;\n this.selectedFeature.setProperties(props);\n }\n \n }\n\n static get getRuleVariable() {\n return RULE;\n }\n\n}","var Handlebars = require(\"../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n return \"
\\n
\\n
\\n
Rule
\\n
\\n
\\n \\n \\n
\\n
\\n \\n \\n
\\n
\\n

Your point should be a lift to configure rules

\\n
\\n
\\n
\";\n},\"useData\":true});","import _ from 'underscore';\n\nimport Choices from 'choices.js/public/assets/scripts/choices.min.js';\nimport 'choices.js/public/assets/styles/choices.min.css';\n\nimport Beacon from './beacon.js';\n\nvar menuTemplate = require(\"../../../../templates/beacon.handlebars\");\n\nconst BEACON = \"beacon\";\n\n\nexport default class BeaconMenu {\n\n\tconstructor(api, siteData) {\n \tthis.name = 'BeaconMenu';\n this.api = api;\n this.siteData = siteData;\n this.selectedFeature;\n this.selectedBeacon;\n this.menu;\n this.editMode = false;\n this.editNode;\n \t}\n\n \ttoString() {\n return this.name;\n }\n\n\n initMenu(){\n $(\"#beacon-body\").append(menuTemplate);\n\n var _this = this;\n\n this.uuidDD = new Choices('#uuid-dropdown', {\n choices : this.siteData.uuids,\n itemSelectText: 'Click to select'\n });\n \n \n $( \"#remove-beacon\" ).bind( \"click\", function(event) {\n event.preventDefault();\n _this.removeBeacon();\n });\n\n\n $( \"#edit-beacon\" ).bind( \"click\", function(event) {\n event.preventDefault();\n _this.editMode = true;\n _this.editBeacon();\n });\n\n \n $( \"#beacon-cancel\" ).bind( \"click\", function(event) {\n event.preventDefault();\n _this.cancelAddBeacon();\n });\n\n $( \"#beacon-save\" ).bind( \"click\", function(event) {\n event.preventDefault();\n _this.saveBeacon();\n });\n\n $(\"#selected-beacon\").hide(); // Hide the selected beacon section -- need conditon check here \n }\n\n\n onEditNode(){\n $(\"#beacon-cancel\").show(); // Show cancel option on form\n $(\"#selected-beacon\").show(); // Show point selected\n $(\"#selected-beacon-name\").text(this.selectedBeacon.name);\n $(\"#beaconManuallySection\").hide();\n\n // populate form data \n $(\"#InputBeaconName\").val(this.selectedBeacon.name);\n $(\"#InputBeaconMajor\").val(this.selectedBeacon.major);\n $(\"#InputBeaconMinor\").val(this.selectedBeacon.minor);\n this.uuidDD.setChoiceByValue(this.selectedBeacon.uuid);\n $( \"#edit-beacon\" ).show();\n\n var props = {\n name : this.selectedBeacon.name,\n major : this.selectedBeacon.major,\n minor : this.selectedBeacon.minor,\n uuid : this.selectedBeacon.uuid\n };\n \n this.editNode = new Beacon(props);\n\n \n }\n\n async saveBeacon(){\n var props = {\n name : $(\"#InputBeaconName\").val(),\n major : $(\"#InputBeaconMajor\").val(),\n minor : $(\"#InputBeaconMinor\").val(),\n uuid : this.uuidDD.getValue().value\n };\n \n let beacon = new Beacon(props);\n var errors = beacon.validate();\n\n\n this.checkValidation(errors);\n \n if(!errors){\n\n if(!beacon.validateUUID()){\n $( \".validation.beacon-uuid\" ).html(\"

UUID invalid

\" );\n $( '.validation.beacon-uuid' ).parent().addClass('validation-beco');\n return;\n }\n\n if(this.editMode && beacon.editIsEqual(this.editNode)){\n }else if(this.editMode && beacon.isEqual(this.editNode)){\n this.menu.removeBeacon(this.editNode);\n if(this.menu.isBeaconExist(beacon)){\n this.menu.addBeacon(this.selectedBeacon);\n $( \".validation.beacon-name\" ).html(\"

Beacon Configuration already exist in this floor

\" );\n $( '.validation.beacon-name' ).parent().addClass('validation-beco');\n return;\n }\n\n }else if(this.menu.isBeaconExist(beacon)){\n $( \".validation.beacon-name\" ).html(\"

Beacon Configuration already exist in this floor

\" );\n $( '.validation.beacon-name' ).parent().addClass('validation-beco');\n return;\n }else if(this.editMode){\n this.menu.removeBeacon(this.editNode);\n }\n\n const data = await this.api.validateBeacon(this.siteData.site_identifier, this.siteData.org_identifier, this.siteData.floor_identifier, props);\n if(data){\n this.selectedBeacon = beacon;\n $(\"#selected-beacon\").show(); // Show beacon selected\n $(\"#beaconManuallySection\").slideToggle(500); // Hide beacon add form\n $(\"#selected-beacon-name\").text(this.selectedBeacon.name);\n $( \"#edit-beacon\" ).show();\n this.menu.addBeacon(this.selectedBeacon);\n } else {\n $( \".validation.beacon-name\" ).html(\"

beacon name already exist in the server

\" );\n $( '.validation.beacon-name' ).parent().addClass('validation-beco');\n }\n \n\n } \n \n }\n\n checkValidation(errors){\n if(errors && errors['name']){\n $( \".validation.beacon-name\" ).html(\"

\"+errors['name'].toString()+\"

\" );\n $( '.validation.beacon-name' ).parent().addClass('validation-beco');\n }else {\n $( \".validation.beacon-name p\" ).remove();\n $( '.validation.beacon-name' ).parent().removeClass('validation-beco');\n }\n if(errors && errors['major']){\n $( \".validation.beacon-major\" ).html(\"

\"+errors['major'].toString()+\"

\");\n $( '.validation.beacon-major' ).parent().addClass('validation-beco');\n }else {\n $( \".validation.beacon-major p\" ).remove();\n $( '.validation.beacon-major' ).parent().removeClass('validation-beco');\n }\n\n if(errors && errors['minor']){\n $( \".validation.beacon-minor\" ).html(\"

\"+errors['minor'].toString()+\"

\");\n $( '.validation.beacon-minor' ).parent().addClass('validation-beco');\n }else {\n $( \".validation.beacon-minor p\" ).remove();\n $( '.validation.beacon-minor' ).parent().removeClass('validation-beco');\n }\n\n if(errors && errors['uuid']){\n $( \".validation.beacon-uuid\" ).html(\"

\"+errors['uuid'].toString()+\"

\");\n $( '.validation.beacon-uuid' ).parent().addClass('validation-beco');\n }else {\n $( \".validation.beacon-uuid p\" ).remove();\n $( '.validation.beacon-uuid' ).parent().removeClass('validation-beco');\n }\n }\n\n\n cancelAddBeacon(){\n $(\"#beaconManuallySection\").slideToggle(500);\n $(\"#selected-beacon\").show();\n }\n\n \n getMenu() {\n return this;\n }\n\n open(feature, menu){\n this.initMenu();\n this.selectedFeature = feature;\n this.menu = menu;\n if(feature.getProperties() && feature.getProperties().beacon){\n this.selectedBeacon = this.getOrCreateBeacon(feature.getProperties().beacon);\n this.onEditNode();\n }\n this.editMode = false;\n }\n\n save(){\n let props = {};\n if(this.selectedFeature) props['beacon'] = this.selectedBeacon;\n this.selectedFeature.setProperties(props);\n\n this.selectedFeature = null;\n this.selectedBeacon = null;\n this.beaconCache = {};\n $(\"#beacon-side-menu\").remove();\n } \n\n removeBeacon(){\n if(this.selectedBeacon){\n this.menu.removeBeacon(this.selectedBeacon);\n this.selectedBeacon = null;\n\n $(\"#beacon-cancel\").hide();\n $(\"#beaconManuallySection\").show();\n $(\"#selected-beacon-name\").text(\"\"); // Reset the beacon name\n $(\"#selected-beacon\").hide(); // Hide beacon selected\n\n }\n }\n\n editBeacon(){\n if(this.selectedBeacon){\n $(\"#selected-beacon\").hide(); // Hide beacon selected\n $(\"#beaconManuallySection\").slideToggle(500);\n $(\"#selected-beacon-name\").text(this.selectedBeacon.name);\n $(\"#InputBeaconName\").val(this.selectedBeacon.name); \n\n var props = {\n name : this.selectedBeacon.name,\n major : this.selectedBeacon.major,\n minor : this.selectedBeacon.minor,\n uuid : this.selectedBeacon.uuid\n };\n \n this.editNode = new Beacon(props);\n\n }\n }\n \n\n static get getBeaconVariable() {\n return BEACON;\n }\n\n getOrCreateBeacon(params){\n var props = {\n major : params.major,\n minor : params.minor,\n uuid : params.uuid,\n name : params.name\n };\n let beacon = new Beacon(props);\n\n return beacon;\n }\n\n\n \n\n\n}","var Handlebars = require(\"../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n return \"

\\n
\\n
\\n
Beacon
\\n
\\n
\\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n Selected beacon :
\\n beacon\\n
\\n \\n \\n
\\n
\\n
\\n
\";\n},\"useData\":true});","var Handlebars = require(\"../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n return \"
\\n\t
\\n\t\t
\\n\t\t\t
Node Configuration
\\n\t\t\t\\n\t\t
\\n\t\t
\\n\t\t\t
\\n\t\t\t\t
\\n\t\t\t\t\t\\n\t\t\t\t\t\\n\t\t\t\t
\\n\t\t\t\t
\\n\t\t\t\t\t\\n\t\t\t\t\t\\n\t\t\t\t
\\n\t\t\t
\\n\t\t\t
\\n\t\t\t
\\n\t\t\t
\\n\t\t
\\n\t\t
\\n\t\t\t\\n\t\t
\\n\t
\\n\t
\\n
\";\n},\"useData\":true});","import {Icon, Style } from 'ol/style.js';\nimport Feature from 'ol/Feature';\nimport Point from 'ol/geom/Point';\n\nimport Notification from 'ol-ext/control/Notification';\nimport 'ol-ext/control/Notification.css';\n\n//Color Picker\nimport '@simonwep/pickr/dist/themes/classic.min.css';\nimport Pickr from '@simonwep/pickr';\n\n\nvar menuTemplate = require(\"../../../../templates/linemenu.handlebars\");\n\nconst themes = {\n theme: 'classic',\n appClass: 'beco-picker',\n defaultRepresentation: 'HEX',\n position: 'bottom-middle',\n\n components: {\n preview: true,\n opacity: false,\n hue: true,\n\n interaction: {\n hex: false,\n rgba: false,\n hsva: false,\n input: true,\n cancel: true,\n save: true\n }\n }\n};\n\nexport default class LineMenu {\n\n\tconstructor(){\n\t\tthis.name = 'LineMenu';\n\t\tthis.selectIntercation;\n\t\tthis.notification = new Notification({});\n this.labelTextColor = '#FFFFFF';\n this.labelBorderColor = '#5D5755';\n this.labelTextSize = 12;\n\n var _this = this;\n\n $(\"#line-sidebar\").append(menuTemplate);\n\n $( \"#line-menu-close\" ).bind( \"click\", function(event) {\n event.preventDefault();\n _this.close();\n });\n\n $( \"#line-menu-save\" ).bind( \"click\", function(event) {\n event.preventDefault();\n _this.save();\n\t\t});\n\t\t\n\t\t$('.beco-toggle-check .custom-control-input').change(function(){\n var toggle = $('.beco-toggle-check');\n\n\t\t\tif($(this).is(\":checked\")) {\n\t\t\t\ttoggle.addClass(\"show\");\n\t\t\t} else {\n\t\t\t\ttoggle.removeClass(\"show\");\n\t\t\t}\n });\n\n $('input.direction-label').change(function(){\n \n if ($(this).is(':checked')){\n $(this).prop('checked', true).attr('checked', 'checked');\n }\n else {\n $(this).prop('checked', false).removeAttr('checked');\n }\n \n $('input.direction-label').not(this).prop('checked', false).removeAttr('checked');\n });\n\n this.textColor = Pickr.create({\n el: '#textColor',\n default: this.labelTextColor,\n ...themes\n\n }).on('change', (color) => {\n // HEXA Color\n const hexaColor = color.toHEXA().toString();\n this.labelTextColor = hexaColor;\n }).on('save', () => {\n this.textColor.hide();\n });\n\n\n this.borderColor = Pickr.create({\n el: '#borderColor',\n default: this.labelBorderColor,\n ...themes\n\n }).on('change', (color) => {\n // HEXA Color\n const hexaColor = color.toHEXA().toString();\n this.labelBorderColor = hexaColor;\n\n }).on('save', () => {\n this.borderColor.hide();\n });\n\n this.range = document.getElementById(\"labelSize\");\n this.bubble = document.getElementById(\"labelBubble\");\n this.setBubble(this.range, this.bubble);\n this.range.addEventListener(\"input\", () => {\n this.setBubble(this.range, this.bubble);\n });\n\n\t}\n\n\tshowNotification(text){\n var div = $('
').text(text);\n this.notification.show(div.get(0));\n }\n\n setBubble(range, bubble) {\n this.labelTextSize = range.value;\n bubble.style.fontSize = `${this.labelTextSize}px`; \n }\n\n\topen(feature,selectInteraction){\n\t\tthis.feature = feature;\n\t\t\n\n\t\tif(feature){\n\t\t\tthis.selectIntercation = selectInteraction;\n\t\t\tthis.updateAandB(feature,selectInteraction);\n\t\t\t$(\".beco-sidebar-line\").addClass('show');\n \t$(\".beco-sidebar-line.show\").parent().addClass('sidebar-active');\n \tif(feature.getProperties() && feature.getProperties().disable){\n $(\"#disable\").prop('checked', feature.getProperties().disable);\n }else{\n $(\"#disable\").prop('checked', false);\n }\n\n if(feature.getProperties() && feature.getProperties().direction > 0){\n $(\"#oneway\").prop('checked', true);\n $('.beco-toggle-check').addClass(\"show\");\n if(feature.getProperties().direction == 1){\n \t$(\"#atob\").prop('checked', true);\n \t$(\"#btoa\").prop('checked', false);\n } else {\n \t$(\"#btoa\").prop('checked', true);\n \t$(\"#atob\").prop('checked', false);\n }\n\n }else{\n $(\"#oneway\").prop('checked', false);\n $(\"#atob\").prop('checked', true);\n $('.beco-toggle-check').removeClass(\"show\");\n }\n\n if(feature.getProperties() && feature.getProperties().label ) {\n $(\"#InputLabel\").val(feature.getProperties().label);\n }else {\n $(\"#InputLabel\").val(\"\");\n }\n\n if(feature.getProperties() && feature.getProperties().labelTextColor ) {\n this.textColor.setColor(feature.getProperties().labelTextColor);\n }\n\n if(feature.getProperties() && feature.getProperties().labelBorderColor ) {\n this.borderColor.setColor(feature.getProperties().labelBorderColor);\n }\n\n if(feature.getProperties() && feature.getProperties().labelTextSize ) {\n this.range.value = feature.getProperties().labelTextSize;\n \n }else {\n this.labelTextSize = 12;\n this.range.value = this.labelTextSize;\n }\n\n this.setBubble(this.range, this.bubble);\n\t\t}\n \n }\n\n updateAandB(feature,selectInteraction){\n\n \tvar featureStart = new Feature(\n\t\t\t new Point(feature.getGeometry().getFirstCoordinate())\n\t\t\t \t\t);\n \tfeatureStart.setStyle(this.style('a'));\n\t\tselectInteraction.getFeatures().push(featureStart);\n\n\t\tvar featureEnd = new Feature(\n\t\t\t new Point(feature.getGeometry().getLastCoordinate())\n\t\t\t \t\t);\n\t\tfeatureEnd.setStyle(this.style('b'));\n\t\tselectInteraction.getFeatures().push(featureEnd);\n }\n\n style(type) {\n\n \tvar icon = ( type == 'a' ? 'public/svg/a-icon.svg' : 'public/svg/b-icon.svg');\n \treturn new Style({\n \t\timage: new Icon(({\n\t\t\t\t//color: '#df4a43',\n\t\t\t\tscale: 1,\n\t\t\t\tcrossOrigin: null,\n\t\t\t\tsrc: icon,\n\t\t\t\tanchor :[0.5,0.5],\n\t\t\t\tanchorOrigin:'top-left'\n }))\n });\n }\n\n save(){\n\n var label = $(\"#InputLabel\").val();\n var width = $(\"#InputWidth\").val();\n\n if(label && label.length > 100) {\n $( \".validation.label-name\" ).html(\"

Length cannot be more than 100

\" );\n $( '.validation.label-name' ).parent().addClass('validation-beco');\n return;\n } else {\n $( \".validation.label-name p\" ).remove();\n $( '.validation.beacon-name' ).parent().removeClass('validation-beco');\n }\n \n\n \tvar direction = 0;\n \tif($(\"#oneway\").is(\":checked\")){ \n \t\tvar atob = $(\"#atob\").is(\":checked\");\n \t\tvar btoa = $(\"#btoa\").is(\":checked\");\n \t\tif(atob) direction = 1;\n \t\tif(btoa) direction = 2;\n \t}\n\n \tvar props = {\n disable : $(\"#disable\").is(\":checked\"),\n direction : direction,\n label : $(\"#InputLabel\").val(),\n labelTextColor : this.labelTextColor,\n labelTextSize : this.labelTextSize,\n labelBorderColor : this.labelBorderColor,\n };\n\n this.feature.setProperties(props);\n \tthis.showNotification(\"Data saved successfully\");\n \tthis.close();\n\n \n }\n\n close(){\n $(\".beco-sidebar-line\").removeClass('show');\n $(\".beco-sidebar\").parent().removeClass('sidebar-active'); \n this.selectIntercation.getFeatures().clear();\n \n }\n}","var Handlebars = require(\"../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n return \"

\\n\t
\\n\t\t
\\n\t\t\t
Route Configuration
\\n\t\t\t\\n\t\t
\\n\t\t
\\n\t\t\t
\\n\t\t\t\t
\\n\t\t\t\t\t\\n\t\t\t\t\t\\n\t\t\t\t
\\n\t\t\t\t
\\n\t\t\t\t\t
\\n\t\t\t\t\t\t\\n\t\t\t\t\t\t\\n\t\t\t\t\t
\\n\t\t\t\t\t
\\n\t\t\t\t\t\t\\n\t\t\t\t\t\t\\n\t\t\t\t\t
\\n\t\t\t\t
\\n\t\t\t\t
\\n\t\t\t\t\t
\\n\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t
Label
\\n\t\t\t\t\t\t
\\n\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t
A
\\n\\n\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t
\\n\t\t\t\t\t
\\n\t\t\t\t
\\n\t\t\t
\\n\t\t
\\n\t\t
\\n\t\t\t\\n\t\t
\\n\t
\\n
\";\n},\"useData\":true});","import ImageLayer from 'ol/layer/Image.js';\nimport Static from 'ol/source/ImageStatic.js';\n\n\nexport default class Grid {\n\n\tconstructor(projection,imageSize,extent) {\n \t this.name = 'Grid';\n \t var gridSource = new ImageLayer({\n title: this.name,\n displayInLayerSwitcher: true,\n class : 'grid',\n \t source: new Static({\n \t url: './public/svg/Grid-map.svg',\n \t imageSize: /*imageSize,*/ [2800, 1280],\n \t projection: projection,\n \t imageExtent: extent,\n \t })\n \t });\n \t this.gridSource = gridSource ;\n\n \t}\n\n \ttoString() {\n return this.name;\n }\n\n\n getGridLayer() {\n \treturn this.gridSource;\n }\n\n\n}","/**\n* Observer pattern\n* https://pawelgrzybek.com/the-observer-pattern-in-javascript-explained/\n**/\nexport default class Observable {\n /**\n * each instance of the Observer class\n * starts with an empty array of things (observers)\n * that react to a state change \n **/\n constructor() {\n this.observers = [];\n }\n\n /**\n * add the ability to subscribe to a new object / DOM element\n * essentially, add something to the observers array\n **/\n\n subscribe(f) {\n this.observers.push(f);\n }\n\n /**\n * add the ability to unsubscribe from a particular object\n * essentially, remove something from the observers array\n **/\n unsubscribe(f) {\n this.observers = this.observers.filter(subscriber => subscriber !== f);\n }\n\n /**\n * update all subscribed objects / DOM elements\n * and pass some data to each of them\n **/\n notify(data) {\n this.observers.forEach(observer => observer(data));\n }\n}","import { axiosInstance } from \"./axiosInstance.js\";\n\nexport default class API {\n\n\tconstructor(){\n this.name = \"API\";\n \n }\n\n toString() {\n return this.name;\n }\n\n getCookie(name) {\n var r = document.cookie.match(\"\\\\b\" + name + \"=([^;]*)\\\\b\");\n return r ? r[1] : null;\n }\n\n getFloorInfo() {\n return axiosInstance.get(\"api/v1/get-site-data/?site_identifier=site-2&floor_identifier=test\");\n }\n\n checkSession() {\n return axiosInstance.get(\"api/v1/editor/check-session/\");\n }\n\n getSiteData(siteIdentifier, floorIdentifier) {\n return axiosInstance.get(\"api/v1/editor/get-site/\",{\n params: {\n site_identifier: siteIdentifier,\n floor_identifier: floorIdentifier\n },\n });\n }\n\n saveMapData(siteIdentifier, floorIdentifier, mapData){\n return axiosInstance.post(\"api/v1/editor/floor-data/\",{\n site_identifier: siteIdentifier,\n floor_identifier: floorIdentifier,\n floor_data: mapData,\n });\n\n // let res = await axiosInstance.post(\"api/v1/editor/floor-data/\", data);\n // if(res.data && (res.status==209 || res.status==200) ){\n // return res;\n // }\n // return res.status;\n\n }\n\n async getPoints(siteIdentifier, orgIdentifier, q) {\n\n let res = await axiosInstance.get(\"api/v1/editor/search-point/\",{\n params: {\n site_identifier: siteIdentifier,\n org_identifier: orgIdentifier,\n q : q\n },\n });\n\n return res.data;\n }\n\n async getBeacons(siteIdentifier, orgIdentifier, q) {\n\n let res = await axiosInstance.get(\"api/v1/editor/search-beacon/\",{\n params: {\n site_identifier: siteIdentifier,\n org_identifier: orgIdentifier,\n q : q\n },\n });\n\n return res.data;\n }\n\n async validatePoint(siteIdentifier, orgIdentifier, floorIdentifier, pointName){\n var data = {\n 'site_identifier': siteIdentifier,\n 'org_identifier': orgIdentifier,\n 'floor_identifier': floorIdentifier,\n 'point_name': pointName\n };\n\n var headers = {\n 'HTTP_X_CSRFTOKEN': this.getCookie('csrftoken')\n };\n\n //let res = await axiosInstance.post(\"api/v1/editor/validate-point/\", data, {headers: headers})\n let res = await axiosInstance.post(\"api/v1/editor/validate-point/\", data);\n \n return res.status == 200 ? true : false;\n }\n\n async validateBeacon(siteIdentifier, orgIdentifier, floorIdentifier, params){\n var data = {\n 'site_identifier': siteIdentifier,\n 'org_identifier': orgIdentifier,\n 'floor_identifier': floorIdentifier,\n 'name': params.name,\n 'major': params.major,\n 'minor': params.minor\n\n };\n\n var headers = {\n 'HTTP_X_CSRFTOKEN': this.getCookie('csrftoken')\n };\n\n //let res = await axiosInstance.post(\"api/v1/editor/validate-point/\", data, {headers: headers})\n let res = await axiosInstance.post(\"api/v1/editor/validate-beacon/\", data);\n \n return res.status == 200 ? true : false;\n }\n\n async saveData(siteIdentifier, floorIdentifier, mapData){\n var data = {\n 'site_identifier': siteIdentifier,\n 'floor_identifier': floorIdentifier,\n 'floor_data': mapData,\n\n };\n\n let res = await axiosInstance.post(\"api/v1/editor/floor-data/\", data);\n if(res.data && (res.status==209 || res.status==200) ){\n return res;\n }\n return res.status;\n\n }\n\n async saveFeedback(siteIdentifier,feedback){\n var data = {\n 'site_identifier' : siteIdentifier,\n 'feedback' : feedback\n };\n let res = await axiosInstance.post(\"api/v1/editor/report-error/\", data).catch(err => {\n console.log(\"error\");\n var res = {\n status : 210\n };\n return res;\n });\n return res.status;\n }\n\n async getData(siteIdentifier, floorIdentifier){\n let res = await axiosInstance.get(\"api/v1/editor/floor-data/\",{\n params: {\n site_identifier: siteIdentifier,\n floor_identifier: floorIdentifier\n },\n });\n return res.data;\n }\n\n}","import axios from \"axios\";\nimport { getSiteIdentifier, getFloorIdentifier } from './util.js';\n\n\nexport const AUTH_FAILED = 'Authentication Failed';\nexport const NOT_FOUND = '404 - Notfound';\nexport const UNKNOWN = 'UNKNOWN';\n\n\nfunction getRedirectUrl(){\n let siteIdentifier;\n let floorIdentifier;\n try {\n siteIdentifier = getSiteIdentifier();\n }\n catch(err) {\n console.log(err);\n } \n try {\n floorIdentifier = getFloorIdentifier();\n }\n catch(err) {\n console.log(err);\n } \n return SERVICE_URL+DASHBOARD_URL + encodeURIComponent(HOST+'/?siteIdentifier='+siteIdentifier+'&floorIdentifier='+floorIdentifier);\n};\n\nconst axiosInstance = axios.create({\n baseURL: SERVICE_URL,\n timeout: 5000,\n withCredentials: true\n});\n\n\naxiosInstance.interceptors.response.use(\n response => {\n return response;\n },\n error => {\n if(error.response && error.response.status){\n if(error.response.status == 401){\n window.location.replace(getRedirectUrl());\n }\n }\n return Promise.reject(error.response);\n }\n);\n\n\n\nexport { axiosInstance };","const i18n = require('./i18n-data.json');\nlet currentLang = 'en';\n\nexport function setLanguage(id) {\n currentLang = id;\n}\nexport function t(text) {\n return (i18n[currentLang] && i18n[currentLang][text]) || text;\n}","\nconst isSame = (date1, date2) => {\n return date1.getDate() == date2.getDate() &&\n date1.getMonth() == date2.getMonth() &&\n date1.getFullYear() == date2.getFullYear();\n};\n\nfunction toLocalTimeZone(dateTime){\n var localDate = new Date(dateTime);\n var monthNames = [\n \"January\", \"February\", \"March\",\n \"April\", \"May\", \"June\", \"July\",\n \"August\", \"September\", \"October\",\n \"November\", \"December\"\n ];\n\n var timeString = '';\n var today = new Date();\n var yesterday = new Date(today);\n yesterday.setDate(today.getDate() - 1);\n\n if ( isSame(localDate, today) ){\n timeString = 'today ';\n }\n else if(isSame(localDate, yesterday)){\n timeString = 'yesterday ';\n }\n else{\n timeString = monthNames[localDate.getMonth()] + ' ' + localDate.getDate() + ' ' + localDate.getFullYear()+' ';\n }\n\n timeString += localDate.toLocaleString('en-US', { hour: 'numeric', minute:'numeric', hour12: true });\n return timeString;\n}\n\n\n\n\nexport { toLocalTimeZone };","var Handlebars = require(\"../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n return \"
\\n\t
\\n
\";\n},\"useData\":true});","var Handlebars = require(\"../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n return \"
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n

\\n
\\n
\\n
\\n
\\n
\";\n},\"useData\":true});","var Handlebars = require(\"../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n return \"
\\n\t
\\n\t\t\\n\t\t\t\\n\t\t\t\t\\n\t\t\t\t\t\\n\t\t\t\t\t\\n\t\t\t\t\\n\t\t\t\t\\n\t\t\t\t\t\\n\t\t\t\t\t\\n\t\t\t\t\\n\t\t\t\t\\n\t\t\t\t\t\\n\t\t\t\t\t\\n\t\t\t\t\\n\t\t\t\t\\n\t\t\t\t\t\\n\t\t\t\t\t\\n\t\t\t\t\\n\t\t\t\t\\n\t\t\t\t\t\\n\t\t\t\t\t\\n\t\t\t\t\\n\t\t
\\n\t\t\t\t\t\t
\\n\t\t\t\t\t
uni-direction
\\n\t\t\t\t\t\t
\\n\t\t\t\t\t
node
\\n\t\t\t\t\t\t
\\n\t\t\t\t\t
node with point
\\n\t\t\t\t\t\t
\\n\t\t\t\t\t
node with beacon
\\n\t\t\t\t\t\t
\\n\t\t\t\t\t
node with point and beacon
\\n\t
\\n
\";\n},\"useData\":true});","var Handlebars = require(\"../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n return \"
\\n \\n
\";\n},\"useData\":true});","var Handlebars = require(\"../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n return \"\\n
\\n
\\n
\\n
\\n\\n
\\n
Report a issue
\\n \\n
\\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n
\\n \\n
\\n\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n
\\n
Success!
\\n
Report has been sent.
\\n
\\n
\\n
\\n
\\n \\n \\n \\n \\n
\\n
\\n
\\n
\\n
Error!
\\n
An error Occur.
\\n
\\n
\\n
\\n
\\n\\n
\\n
\\n
\\n\\n\";\n},\"useData\":true});"],"sourceRoot":""}