president/public/js/manager/travel.js

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');
});