415 lines
11 KiB
JavaScript
Executable File
415 lines
11 KiB
JavaScript
Executable File
var campusProxy = {};
|
|
var locationWatchers = {};
|
|
var mapData = {};
|
|
$(document).on('click', '#travel_toggle', function() {
|
|
travelToggle();
|
|
});
|
|
|
|
function travelToggle() {
|
|
var ts = Date.now();
|
|
if ($('.now').attr('presence') == 'not') {
|
|
ts = timestamp;
|
|
}
|
|
var url = '/manager/travel';
|
|
var travel_scope = localStorage.getItem('travel_scope');
|
|
$.ajax({
|
|
url: url,
|
|
type: 'GET',
|
|
data: { window_maker: 'yes', timestamp: ts },
|
|
success: function(response) {
|
|
windowMaker(response);
|
|
|
|
travelViewer(ts);
|
|
//continent_record({'app':'travel','timestamp':ts,'purpose':'travel_viewer','scope':travel_scope});
|
|
}, error: function (response) { }
|
|
});
|
|
}
|
|
|
|
|
|
function mapCampus(timestamp,response,campus) {
|
|
|
|
var canvas = document.getElementById(campus);
|
|
var win = $('#' + campus).closest('.wind');
|
|
canvas.height = win.width();
|
|
canvas.width = win.width();
|
|
|
|
var ctx = canvas.getContext('2d');
|
|
var h = response['here'];
|
|
ctx.arc(canvas.width / 2, canvas.height /2, 7, 0, (Math.PI * 2), true);
|
|
var zoom = numeral($('#travel_distance_range').val()).value();
|
|
var map_file = $('.travel_map_selector').find('option[selected]').attr('file');
|
|
|
|
var image = new Image();
|
|
var image_drawn = 0;
|
|
image.onload=function(){
|
|
|
|
canvas.width = image.width;
|
|
canvas.height = image.height;
|
|
ctx.drawImage(image,0,0,image.width, image.height);
|
|
|
|
image_drawn = 1;
|
|
};
|
|
image.src = map_file;
|
|
var tries = 0;
|
|
var map_loaded = setInterval(function() {
|
|
tries++;
|
|
if (tries > 5) { clearInterval(map_loaded); tries = 0; }
|
|
if (!map_file || ( map_file && image_drawn == 1 ) ) {
|
|
clearInterval(map_loaded);
|
|
var home_x = response['current_map']['home_plate']['x'] * (canvas.width / response['current_map']['home_plate']['width']);
|
|
var home_y = response['current_map']['home_plate']['y'] * (canvas.height / response['current_map']['home_plate']['height'] );
|
|
|
|
var original_scale = (response['current_map']['scale']['last']['x'] - response['current_map']['scale']['first']['x']);
|
|
var original_width = (response['current_map']['home_plate']['width']);
|
|
var legend = response['current_map']['scale']['legend'];
|
|
|
|
var scale_legend = legend / original_scale;
|
|
|
|
console.log(original_scale + ' ' + original_width + ' ' + scale_legend);
|
|
console.log(response['current_map']);
|
|
var dist = (legend / original_scale) * (canvas.width / original_width);
|
|
|
|
ctx.font = "400 " + ( 28 / zoom ) + "px Arial";
|
|
|
|
ctx.arc(home_x, home_y, 10, 0, (Math.PI * 2), true);
|
|
ctx.fillText(response['current_map']['home_plate']['formatted_legend'], home_x + 10, home_y + 10);
|
|
ctx.stroke();
|
|
ctx.fill();
|
|
|
|
ctx.strokeStyle = 'black';
|
|
var count = 0;
|
|
ctx.translate(home_x, home_y);
|
|
$.each(response['near'], function(i,v) {
|
|
var point = response['near'][i];
|
|
// console.log(point);
|
|
if (point['direction']) {
|
|
var lat = Math.abs((v['latitude'] + 180) / 360);
|
|
var long = Math.abs((v['longitude'] + 180) / 360);
|
|
ctx.fillStyle = point['settings']['colour'];
|
|
lat = (lat * canvas.height);
|
|
long = (long * canvas.width);
|
|
ctx.closePath();
|
|
ctx.beginPath();
|
|
|
|
ctx.save('ok');
|
|
var deg = (point['direction']);//* ((Math.PI / 2) * -1) * (180 / Math.PI) - 90));
|
|
|
|
ctx.rotate(deg);
|
|
|
|
var new_dist = ((numeral(point['distance']).value() / scale_legend) ) ;
|
|
console.log(v['app'] + ' ' + deg + ' ' + new_dist);
|
|
console.log(point['distance'] + ' ' + new_dist + ' ' + (canvas.height - new_dist) + ' ' + deg);
|
|
//console.log(canvas.height);
|
|
ctx.translate(0, new_dist);
|
|
|
|
ctx.rotate(-deg);
|
|
ctx.fillText(v['app'], 0 + 15, new_dist);
|
|
ctx.arc(0, new_dist, 7, 0, (Math.PI * 2), true);
|
|
|
|
ctx.stroke();
|
|
ctx.fill();
|
|
|
|
ctx.restore('ok');
|
|
}
|
|
count++;
|
|
});
|
|
ctx.stroke();
|
|
ctx.fill();
|
|
}
|
|
},200);
|
|
appointment_chron();
|
|
}
|
|
|
|
function travelViewer(timestamp,uuid) {
|
|
var ts = Date.now();
|
|
if ($('.now').attr('presence') == 'not') {
|
|
ts = timestamp;
|
|
}
|
|
var travel_scope = $('#travel_scope').val();
|
|
var time_scope = localStorage.getItem('scope');
|
|
var sel = $('.travel_map_selector').find('option[selected]');
|
|
var map = sel.val();
|
|
$.ajax({
|
|
url: '/manager/travel/viewer',
|
|
type: 'GET',
|
|
data: { map: map, travel_scope: travel_scope, uuid: uuid, time_scope: time_scope, timestamp: ts },
|
|
success: function(response) {
|
|
|
|
mapData = response;
|
|
$('#travel_campus').show();
|
|
$('#travel_proxy_view').html(response['html']);
|
|
mapCampus(ts, response, 'travel_campus');
|
|
}
|
|
});
|
|
}
|
|
|
|
$(document).on('click', '#travel_update', function() {
|
|
var ts = Date.now();
|
|
if ($('.now').attr('presence') == 'not') {
|
|
ts = timestamp;
|
|
}
|
|
|
|
var travel_scope = localStorage.getItem('travel_scope');
|
|
if ($('#travel_home_plate').attr('status') == 'disabled') {
|
|
// continent_record({'app':'travel','timestamp':ts,'purpose':'travel_viewer','scope':travel_scope,'navigation':'once'});
|
|
}
|
|
else {
|
|
travelViewer(ts);
|
|
}
|
|
});
|
|
|
|
$(document).on('change', '#travel_scope', function() {
|
|
var scope = $(this).val();
|
|
localStorage.setItem('travel_scope', scope);
|
|
settingSetter({ 'app': 'travel', 'setting': 'travel_scope' });
|
|
});
|
|
|
|
$(document).on('click', '#travel_home_plate', function() {
|
|
var t = $(this);
|
|
var status = 'enabled';
|
|
if (t.attr('status') == 'enabled') {
|
|
status = 'disabled';
|
|
}
|
|
else {
|
|
status = 'enabled';
|
|
}
|
|
t.attr('status',status);
|
|
settingSetter({ 'app': 'travel', 'setting': 'home_plate_enabled', 'value': t.attr('status') });
|
|
});
|
|
|
|
|
|
function continent_cancel(app) {
|
|
if (eval(navigator.geolocation) && locationWatchers[app]) {
|
|
navigator.geolocation.clearWatch(locationWatchers[app]['watch']);
|
|
// locationWatchers[app]['watch'] = null;
|
|
}
|
|
}
|
|
|
|
function continent_record(setter) {
|
|
|
|
var app = setter['app'] || 'me';
|
|
var timestamp = setter['timestamp'];
|
|
var purpose = setter['purpose'];
|
|
var scope = setter['scope'];
|
|
var device = setter['device'];
|
|
timestamp = timestamp || Date.now();
|
|
var hostname = $(location)[0]['hostname'];
|
|
var pathname = $(location)[0]['pathname'];
|
|
var protocol = $(location)[0]['protocol'];
|
|
var uuid = setter['uuid'];
|
|
var navigation = setter['navigation'];
|
|
if (!navigation) {
|
|
// navigation = $('.appointment[app="' + app + '"]').attr('navigation');
|
|
}
|
|
var now = Date.now();
|
|
if (!locationWatchers[app]) {
|
|
locationWatchers[app] = { watch: undefined, timer: (now - numeral(navigation).value()) };
|
|
}
|
|
else {
|
|
navigator.geolocation.clearWatch(locationWatchers[app]['watch'])
|
|
}
|
|
var returner;
|
|
var gotLocation = 0;
|
|
|
|
if (navigator.geolocation) {
|
|
if (navigation == 'once' || navigation == undefined || navigation == 0) {
|
|
navigator.geolocation.getCurrentPosition((position) => {
|
|
gotLocation = 1;
|
|
var data = position.coords;
|
|
$.ajax({
|
|
url: '/manager/continent/record',
|
|
type: 'POST',
|
|
data: {
|
|
latitude: data.latitude,
|
|
longitude: data.longitude,
|
|
altitude: data.altitude,
|
|
speed: data.speed,
|
|
accuracy: data.accuracy,
|
|
timestamp: timestamp,
|
|
user_agent: navigator.userAgent,
|
|
hostname: hostname,
|
|
pathname: pathname,
|
|
protocol: protocol,
|
|
purpose: purpose,
|
|
scope: scope,
|
|
app: app,
|
|
device: device,
|
|
uuid: uuid,
|
|
navigation: setter['navigation']
|
|
},
|
|
success: function(response) {
|
|
return response;
|
|
},
|
|
});
|
|
|
|
}, (error) => {
|
|
$.ajax({
|
|
url: '/manager/continent/record_anyway',
|
|
type: 'POST',
|
|
data: { app: app, uuid:uuid, scope:scope, purpose:purpose, timestamp: timestamp, device: device },
|
|
success: function(response) {
|
|
|
|
}
|
|
});
|
|
}, {
|
|
maximumAge:1_000, enableHighAccuracy: true
|
|
});
|
|
}
|
|
else {
|
|
|
|
locationWatchers[app]['watch'] = navigator.geolocation.watchPosition((position) => {
|
|
gotLocation = 1;
|
|
var data = position.coords;
|
|
|
|
var now = Date.now();
|
|
if (now > locationWatchers[app]['timer']) {
|
|
locationWatchers[app]['timer'] = (now + numeral(navigation).value());
|
|
|
|
$.ajax({
|
|
url: '/manager/continent/record',
|
|
type: 'POST',
|
|
data: {
|
|
latitude: data.latitude,
|
|
longitude: data.longitude,
|
|
altitude: data.altitude,
|
|
speed: data.speed,
|
|
accuracy: data.accuracy,
|
|
timestamp: timestamp,
|
|
user_agent: navigator.userAgent,
|
|
hostname: hostname,
|
|
pathname: pathname,
|
|
protocol: protocol,
|
|
purpose: purpose,
|
|
scope: scope,
|
|
app: app,
|
|
device: device,
|
|
uuid: uuid,
|
|
navigation: setter['navigation']
|
|
},
|
|
success: function(response) {
|
|
|
|
return response;
|
|
},
|
|
});
|
|
}
|
|
|
|
}, (error) => {
|
|
$.ajax({
|
|
url: '/manager/continent/record_anyway',
|
|
type: 'POST',
|
|
data: { app: app, scope:scope, uuid:uuid, purpose:purpose, timestamp: timestamp, device: device },
|
|
success: function(response) {
|
|
|
|
}
|
|
});
|
|
}, {
|
|
maximumAge:1_000, enableHighAccuracy: true
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
$(document).on('click', '.delete_location', function() {
|
|
var a = $(this);
|
|
var uuid = a.attr('uuid');
|
|
var server_time = a.attr('server_time');
|
|
if (a.attr('armed') == 'yes') {
|
|
$.ajax({
|
|
url: '/manager/continent/delete',
|
|
type: 'POST',
|
|
data: { uuid: uuid, server_time: server_time },
|
|
success:function(response) {
|
|
|
|
$('.appointment_distance_container[uuid="' + response.uuid + '"]').remove();
|
|
}
|
|
});
|
|
}
|
|
else {
|
|
a.attr('armed', 'yes');
|
|
var bgcolor = a.css('background-color');
|
|
a.css({'background-color': 'red' });
|
|
setTimeout(function() {
|
|
a.css({'background-color': bgcolor });
|
|
a.attr('armed', 'no');
|
|
},2000);
|
|
}
|
|
});
|
|
|
|
$(document).on('change', '.travel_map_selector', function() {
|
|
var uuid = $(this).val();
|
|
settingSetter({ 'app': 'travel', 'setting': 'current_map', 'value': uuid });
|
|
|
|
var s = $('.travel_map_selector').find('option[selected]').removeAttr('selected');
|
|
|
|
$('.travel_map_selector').find('option[value="' + uuid + '"]').attr('selected', 'yes');
|
|
|
|
setTimeout(function() {
|
|
travelViewer(Date.now());
|
|
},200);
|
|
});
|
|
|
|
|
|
$(document).on('mousemove touchmove click', '#travel_campus', function(m) {
|
|
|
|
if (m.which === 1 || m.originalEvent.type == 'touchmove') {
|
|
|
|
var x = m.originalEvent.clientX;
|
|
var y = m.originalEvent.clientY;
|
|
if (m.originalEvent.targetTouches) {
|
|
x = m.originalEvent.targetTouches[0].clientX;
|
|
y = m.originalEvent.targetTouches[0].clientY;
|
|
}
|
|
x = numeral(x - w.offset().left).value();
|
|
y = numeral(y - w.offset().top).value();
|
|
|
|
|
|
|
|
}
|
|
});
|
|
|
|
$(document).on('click', '.delete_travel_map', function() {
|
|
var a = $(this);
|
|
var sel = $('.travel_map_selector').find('option[selected]');
|
|
var uuid = sel.attr('value');
|
|
var app_uuid = sel.attr('app_uuid');
|
|
var app = sel.attr('app');
|
|
if (a.attr('armed') == 'yes') {
|
|
var obg = a.attr('obg');
|
|
a.css({'background-color': obg });
|
|
|
|
$.ajax({
|
|
url: '/manager/travel/delete_map',
|
|
type: 'POST',
|
|
data: { file_uuid: uuid, app_uuid: app_uuid, app: app },
|
|
success: function(response) {
|
|
travelToggle();
|
|
}
|
|
});
|
|
}
|
|
else {
|
|
a.attr('armed', 'yes');
|
|
var bgcolor = a.css('background-color');
|
|
a.attr('obg', bgcolor);
|
|
a.css({'background-color': 'red' });
|
|
setTimeout(function() {
|
|
a.css({'background-color': bgcolor });
|
|
a.attr('armed', 'no');
|
|
},2000);
|
|
}
|
|
});
|
|
|
|
$(document).on('change mousewheel', '#travel_distance_range', function() {
|
|
var value = $(this).val();
|
|
|
|
$('#travel_campus').css({ 'zoom': value });
|
|
settingSetter({ 'app': 'travel', 'setting': 'campus_zoom', 'value': value });
|
|
mapCampus(timestamp, mapData, 'travel_campus');
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|