// Author: Uroš Podkrižnik (1.7.2016) // Tip vprasanja = 26 //DECLARATION //GLOBALNE SPREMENLJIVKE ZA VSE SPREMENLJIVKE TIP 26 NA ENI STRANI //mej/okvira prikaza na zemljevidu objekt za vsako spremenljivko var bounds = {}, //objekt stevila vseh markerjev za vsako spremenljivk posebej st_markerjev = {}, //object of number of shapes and ID of last shape for every variable ({spr_id: {'count': 5, 'last_id': 9}, ...}) //'last_id' is not fully reliable as it is used for shapes colours // -> to make it reliable, method must be creaed to store all id's and removing last id at shame removal st_shapes = {}, //infowindow iz API-ja, za prikaz markerja in informacije o markerju infowindow, //array id-jev spremenljivk, ki so tipa moja lokacija (max 1 marker) ml_sprem = [], //array id-jev spremenljivk, ki imajo F user location usrLoc_sprem = [], geocoder, //ce je true, se do skript dostopa iz podatkov, analiz //v primeru, ko se gre za resevanje mora vedno biti false viewMode = false, //objekt id spremenljivka : boolean, kjer je true, ce spremenljivka //uporablja F z podvprasanjem v infowindow markerja podvprasanje = {}, //objekt id spremenljivka : string, kjer je naslov podvprasanja, ce //uporablja F z podvprasanjem v infowindow markerja podvprasanje_naslov = {}, //objekt id spremenljivka : int, kjer je int stevilo max //dovoljenih markerjev na mapi max_mark = {}, //objekt vseh markerjev na strani (respondetn ali branching) {spr_id:[markers array]} allMarkers = {}, //objekt id spremenljivka : marker //potrebujejo ga samo spremenljivke tipa moja lokacija (max 1 marker) //uporablja se za brisanje prejsnjega markerja na mapi mlmarker = {}, //colors for shapes - polylines and polgons mapShapeColors = ['c0504d', '4f81bd', '9bbb59', '8064a2', '4bacc6', 'f79646', '92a9cf', '8c0000', 'f00800', 'ff8a82', 'f2c4c8', '0b0387', '0400fc', '9794f2'], deleteMenu; function mapsAPIseNi(MapDeclaration) { //prveri, ce je element skripte APIja ze kreiran var google_api = document.getElementById("google_api"); //ce je ze kreiran, dodaj funkcijo v onload (da se mapa kreira, ko se api dokoncno naloada) if (google_api) { //element z apijem ze obstaja, se pravi da se se loada //deklariraj funkcijo za onload var addFunctionOnLoad = function (callback) { if (google_api.addEventListener) { google_api.addEventListener('load', callback, false); } else { google_api.attachEvent('onload', callback); } }; //dodaj funkcijo v onload addFunctionOnLoad(MapDeclaration); } //ce element skripte za API se ne obstaja, jo nalozi else loadGoogleMapsScript(function () { MapDeclaration(); initializeDeleteMenu(); }); } //includaj oz. nalozi skripno google APIja ter nastavi mapo function loadGoogleMapsScript(callback) { // Adding the script tag to the head as suggested before var head = document.getElementsByTagName('head')[0]; var script = document.createElement('script'); script.type = 'text/javascript'; script.id = 'google_api'; script.src = "https://maps.googleapis.com/maps/api/js?key="+google_maps_API_key+"&libraries=places,drawing"; // Then bind the event to the callback function. // There are several events for cross browser compatibility. script.onreadystatechange = callback; script.onload = callback; // Fire the loading head.appendChild(script); } /** * Used for clearing a map of polyline or polygon * @param {type} controlDiv - div to put in custom settings - buttons * @returns {div element} element of a control */ function drawingControl(controlDiv) { controlDiv.style.padding = '10px'; // Set CSS for the control border. var controlUI = document.createElement('div'); controlUI.style.backgroundColor = '#fff'; controlUI.style.border = '2px solid #fff'; controlUI.style.borderRadius = '3px'; controlUI.style.boxShadow = '0 2px 6px rgba(0,0,0,.3)'; controlUI.style.cursor = 'pointer'; controlUI.style.marginBottom = '22px'; controlUI.style.textAlign = 'center'; controlUI.style.display = 'inline-block'; controlUI.title = lang['srv_vprasanje_button_map_clear']; controlDiv.appendChild(controlUI); // Set CSS for the control interior. var controlText = document.createElement('div'); controlText.style.color = 'rgb(25,25,25)'; controlText.style.fontFamily = 'Roboto,Arial,sans-serif'; controlText.style.fontSize = '16px'; controlText.style.lineHeight = '28px'; controlText.style.paddingLeft = '5px'; controlText.style.paddingRight = '5px'; controlText.innerHTML = lang['srv_vprasanje_button_map_clear']; controlUI.appendChild(controlText); return controlUI; } /** * create bounds of all points of polygon/polyline * @param {type} path gon.getPath() * @param {int} spremenljivka - id spremenljivke */ function createBoundsFromPath(path, spremenljivka) { var pathArray = path.getArray(); for (var i = 0, n = pathArray.length; i < n; i++) { var latLng = pathArray[i]; bounds[spremenljivka].extend(latLng); } } //pretvori lat in lng v en string //uporabi se kot kljuc markerja za ID iz objekta markers function getMarkerUniqueId(lat, lng, spr) { var zdot = spr + '_' + lat + '_' + lng; return zdot.split('.').join("-"); } /** * Find out if marker already exist on this variable whit this address * @param {type} add - address to find if exist at some marker * @param {type} spr - variable id * @returns {type} - marker if exist, null otherwise */ function findMarkerFromAddress(add, spr) { for (var i = 0; i < allMarkers[spr].length; i++) { if (allMarkers[spr][i].address === add) return allMarkers[spr][i]; } return null; } ////////////BRISANJE TOCK function initializeDeleteMenu() { /** * A menu that lets a user delete a selected vertex of a path. * @constructor */ function DeleteMenu() { this.div_ = document.createElement('div'); this.div_.className = 'maps-delete-menu'; this.div_.innerHTML = lang['srv_vprasanje_delete_point_map']; var menu = this; google.maps.event.addDomListener(this.div_, 'click', function (e) { //this prevents to trigger click event on map (klikNaMapo.js) e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation(); //remove whole shape if(menu.get('shape') && menu.get('vertex') == undefined && menu.get('marker') == undefined) menu.removeShape(); //remove vertex in shape or marker else menu.removeVertex(); }); } DeleteMenu.prototype = new google.maps.OverlayView(); DeleteMenu.prototype.onAdd = function () { var deleteMenu = this; var map = this.getMap(); this.getPanes().floatPane.appendChild(this.div_); // mousedown anywhere on the map except on the menu div will close the // menu. this.divListener_ = google.maps.event.addDomListener(map.getDiv(), 'mousedown', function (e) { if (e.target != deleteMenu.div_) { deleteMenu.close(); } }, true); }; DeleteMenu.prototype.onRemove = function () { google.maps.event.removeListener(this.divListener_); this.div_.parentNode.removeChild(this.div_); // clean up this.set('position'); this.set('shape'); this.set('vertex'); this.set('spremenljivka'); this.set('DrawingControl'); this.set('drawingManager'); this.set('marker'); this.set('markerId'); }; DeleteMenu.prototype.close = function () { this.setMap(null); }; DeleteMenu.prototype.draw = function () { var position = this.get('position'); var projection = this.getProjection(); if (!position || !projection) { return; } var point = projection.fromLatLngToDivPixel(position); this.div_.style.top = point.y + 'px'; this.div_.style.left = point.x + 'px'; }; /** * Opens the menu at a vertex of a given path. */ DeleteMenu.prototype.open = function (map, shape, vertex, spremenljivka, DrawingControl, drawingManager, marker, markerId) { if(shape) this.set('position', shape.getPath().getAt(vertex)); else if(marker) this.set('position', marker.getPosition()); this.set('shape', shape); this.set('vertex', vertex); this.set('spremenljivka', spremenljivka); this.set('DrawingControl', DrawingControl); this.set('drawingManager', drawingManager); this.set('marker', marker); this.set('markerId', markerId); this.setMap(map); this.draw(); }; /** * Opens the menu at a geofence. */ DeleteMenu.prototype.open_shape = function (map, shape, position, spremenljivka) { this.set('position', position); this.set('shape', shape); this.set('spremenljivka', spremenljivka); this.setMap(map); this.draw(); }; /** * Deletes the vertex from the path. */ DeleteMenu.prototype.removeVertex = function () { var spremenljivka = this.get('spremenljivka'); //shape var shape = this.get('shape'); var vertex = this.get('vertex'); var DrawingControl = this.get('DrawingControl'); var drawingManager = this.get('drawingManager'); //marker var marker = this.get('marker'); var markerId = this.get('markerId'); if ((!shape || vertex == undefined) && !marker) { this.close(); return; } //removing marker if(marker){ //accessed from respondent if(markerId) removeMarker(spremenljivka, marker, markerId); //accessed from admin else removeMarkerVM(spremenljivka, marker); } //removing shape else if(shape){ shape.getPath().removeAt(vertex); if (shape.getPath().length < 2) { //accessed from respondent if(DrawingControl != null && drawingManager != null) //handle visibility of tools clearAndMakeDrawableAgain(spremenljivka, shape, DrawingControl, drawingManager); //accessed from admin else //remove shape from DB deleteLineInDB(spremenljivka, shape); } } this.close(); }; /** * Deletes the whole shape. */ DeleteMenu.prototype.removeShape = function () { //shape var shape = this.get('shape'); //removing shape from DB and map if(shape){ maza_delete_geofence(shape); } this.close(); }; deleteMenu = new DeleteMenu(); }