var clearResult = function() {};
var mymap;
var curLevel = "";
var marker = {
'2' : [
{
level : '2',
room_id : 'B1-201',
name : '',
pos : [354, 41],
rotation : 0,
members : ``,
display : true,
modified : false
},
{
level : '2',
room_id : 'B1-202',
name : '',
pos : [338, 58],
rotation : 0,
members : ` Prof. Dr. Pauline Herzog (FNG)
Prof. Karin Handl (FNG)
Prof. Dr. Michael Lehner (FNG)
`,
display : true,
modified : false
},
{
level : '2',
room_id : 'B1-207',
name : '',
pos : [316, 165],
rotation : 0,
members : ``,
display : true,
modified : false
},
{
level : '2',
room_id : 'B1-206',
name : '',
pos : [317, 114],
rotation : 0,
members : ` Clarissa Schmitt (FNG)
Larissa Hemmerich (FNG)
Iris Hausmann (FNG)
`,
display : true,
modified : false
},
],
};
var sel_marker = null;
var map_modus = "normal";
var levels = {
"2" : { "bounds" : [612, 197], "image" : "https://meine-dienste.hs-coburg.de/raumplan/img-floor/519", "id" : 519},
};
function clickMarker(m, data){
sel_marker = m;
selectMarker(m.level, m.room_id);
}
function addMarker(level){
for(var i = 0; i < marker[level].length; i++){
var m = marker[level][i];
var className = 'marker';
if(m.members.length > 0){
className += ' staff';
}
var myIcon = L.divIcon({className: className, html: '
' + m["room_id"] + '
'});
if (m["pos"][0] == null || m["pos"][1] == null){
continue;
}
var x = m['pos'][0];
var y = m['pos'][1];
m["marker"] = L.marker({lon: x, lat: y}, {icon: myIcon});
m["marker"].on("click", clickMarker.bind(null, m));
m["marker"].addTo(mymap);
}
mymap.on('zoom', function() {
$(".marker").css("font-size", getFontSize());
});
}
function getFontSize(){
var maxZoom = mymap.getMaxZoom();
var minZoom = mymap.getMinZoom();
var zoom = mymap.getZoom();
return (1 + (zoom - minZoom) / (maxZoom - minZoom) * 0.9) * 10;
}
function selectMarker(level, room_id){
$("#rooms .room").removeClass("text-primary");
$("#room" + room_id).addClass("text-primary");
mymap.invalidateSize()
$(".marker div").removeClass("text-primary");
var divs = $(".marker div");
for(var i = 0; i < divs.length; i++){
if($(divs[i]).html() == room_id){
$(divs[i]).addClass("text-primary");
break;
}
}
var ms = marker[level];
for(var i = 0; i < ms.length; i++){
if(ms[i]['room_id'] == room_id){
var x = ms[i]['pos'][0];
var y = ms[i]['pos'][1];
var center = L.latLng(y, x);
if(map_modus == "normal"){
mymap.setView(center, mymap.getMaxZoom());
}else{
return;
}
if(ms[i].members.length > 0){
var offset_x = 0;
var offset_y = -10;
if(ms[i]["rotation"] == -90){
offset_y = -40;
offset_x = -10;
}
}else{
return;
}
var popup = ms[i].members;
if(ms[i].name){
popup = '' + ms[i].name + '
' + popup;
}
ms[i]["marker"].unbindPopup();
ms[i]["marker"].bindPopup(popup, {offset : [offset_x, offset_y]});
ms[i]["marker"].openPopup();
return;
}
}
}
function switchLevel(level){
if (level == curLevel){
return;
}
curLevel = level;
if(mymap){
mymap.off();
mymap.remove();
}
var bounds = [[0, 0], [levels[level]["bounds"][1], levels[level]["bounds"][0]]];
// set up the map
mymap = new L.Map('floor_map',{
crs: L.CRS.Simple,
maxBounds : bounds,
maxZoom: 3,
keyboard: false,
zoomSnap: 0.05
});
var image = L.imageOverlay(levels[level]["image"], bounds).addTo(mymap);
addMarker(level);
mymap.fitBounds(bounds);
$("#levels .level").removeClass("text-primary");
$("#level" + level).addClass("text-primary");
}
document.onkeydown = function(e) {
if (sel_marker == null || map_modus != 'position'){
return;
}
var x = parseInt(sel_marker.marker.getLatLng()["lng"]);
var y = parseInt(sel_marker.marker.getLatLng()["lat"]);
switch(e.which) {
case 65: // a
x -= 10;
break;
case 87: // w
y += 10;
break;
case 68: // d
x += 10;
break;
case 83: // s
y -= 10;
break;
case 37: // left
x -= 1;
break;
case 38: // up
y += 1;
break;
case 39: // right
x += 1;
break;
case 40: // down
y -= 1;
break;
case 72:
sel_marker.display = !sel_marker.display;
$(sel_marker.marker._icon).hide();
break;
case 82:
if (sel_marker.rotation == 0){
$(sel_marker.marker._icon).children("div").css("transform","rotate(-90deg)");
sel_marker.rotation = -90;
}else{
$(sel_marker.marker._icon).children("div").css("transform","rotate(0deg)");
sel_marker.rotation = 0;
}
break;
default: return; // exit this handler for other keys
}
sel_marker.marker.setLatLng({lng: x, lat: y});
sel_marker.pos = [x, y];
sel_marker.modified = true;
e.preventDefault(); // prevent the default action (scroll / move caret)
};
function startPositionMode(){
alert("Positionierungs Modus wurde aktiviert.\nDie Marker können durch klicken ausgewählt werden.\nDie grobe Positionierung erfolgt mit Hilfe der wasd-Taste.\nDie feine Positionieren erfolgt mit Hilfe der Pfeiltasten.\nMarker können mit der r-Taste rotiert werden.\nMarker können mit der h-Taste ausgeblendet werden");
map_modus = "position";
$('#position-safe-button').removeClass('d-none');
}
function endPositionMode(){
map_modus = "normal";
$('#position-safe-button').addClass('d-none');
}
function savePositions(){
var sql = "";
let store = [];
for (let level in levels) {
console.log("Iterating " + level + " found " + marker[level].length + " marker");
for (var m = 0; m < marker[level].length; m++){
if (marker[level][m]["modified"]){
let x = marker[level][m]["pos"][0];
let y = marker[level][m]["pos"][1];
let code = marker[level][m]["room_id"];
let rotation = marker[level][m].rotation;
let display = marker[level][m].display;
store.push({"pos_x" : x, "pos_y" : y, "rotation" : rotation, "display" : display, "code" : code});
}
}
}
$('#position-safe-spinner').removeClass('d-none');
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': 'EYagko5Ofbvy42zLYlH4RbU3Pppoxwzce3ucx8aN'
}
});
$.ajax('https://meine-dienste.hs-coburg.de/raumplan/admin/save-position', {
data : JSON.stringify(store),
contentType : 'application/json',
type : 'POST'
})
.done(function(data) {
if(data == "1"){
alert('Positionen wurden erfolgreich gespeichert');
}else{
alert('Positionen konnten nicht gespeichert werden. ' + data);
}
})
.fail(function(jqXHR, textStatus, errorThrown) {
alert(errorThrown + " " + jqXHR.responseText);
})
.always(function(){
$('#position-safe-spinner').addClass('d-none');
});
}