203 lines
		
	
	
	
		
			6.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			203 lines
		
	
	
	
		
			6.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
window.onload = (e) => {
 | 
						|
	window.addEventListener('message', onMessageRecieved);
 | 
						|
};
 | 
						|
 | 
						|
let config = {
 | 
						|
	timeFormat: 0,
 | 
						|
	dateFormat: 0
 | 
						|
};
 | 
						|
let lastZoomBarLength = 243; // (243px, default for 1920:1080)
 | 
						|
const months = {
 | 
						|
	1: 'JAN', 2: 'FEB', 3: 'MAR', 4: 'APR', 5: 'MAY', 6: 'JUN', 7: 'JUL', 8: 'AUG', 9: 'SEP', 10: 'OCT', 11: 'NOV', 12: 'DEC'
 | 
						|
};
 | 
						|
 | 
						|
function FormatDate(day, month, year) {
 | 
						|
	let date;
 | 
						|
	switch(config.dateFormat) {
 | 
						|
		case 0:
 | 
						|
			date = month+"/"+day+"/"+year.slice(-2); // 0 = MM/DD/YY
 | 
						|
			break;
 | 
						|
		case 1:
 | 
						|
			date = day+"/"+month+"/"+year.slice(-2); // 1 = DD/MM/YY
 | 
						|
			break;
 | 
						|
		case 2:
 | 
						|
			date = year.slice(-2)+"/"+month+"/"+day; // 2 = YY/MM/DD
 | 
						|
			break;
 | 
						|
		case 3:
 | 
						|
			date = day+"-"+months[month]+"-"+year;  // 2 = DD-Mon-YYYY
 | 
						|
			break;
 | 
						|
		default:
 | 
						|
			console.log("Error: date format was invalid!");
 | 
						|
	}
 | 
						|
	
 | 
						|
	$("#date").text(date);
 | 
						|
};
 | 
						|
 | 
						|
function UpdateZuluTime() {
 | 
						|
	const date = new Date();
 | 
						|
	const hours = date.getUTCHours().toLocaleString('en-US', { minimumIntegerDigits: 2, useGrouping: false });
 | 
						|
	const minutes = date.getUTCMinutes().toLocaleString('en-US', { minimumIntegerDigits: 2, useGrouping: false });
 | 
						|
	const seconds = date.getUTCSeconds().toLocaleString('en-US', { minimumIntegerDigits: 2, useGrouping: false });
 | 
						|
	const time = hours+":"+minutes+":"+seconds+" Z";
 | 
						|
	$("#time").text(time);
 | 
						|
 | 
						|
	const day = date.getUTCDate().toLocaleString('en-US', { minimumIntegerDigits: 2, useGrouping: false });
 | 
						|
	let month = date.getUTCMonth()+1; month = month.toLocaleString('en-US', { minimumIntegerDigits: 2, useGrouping: false });
 | 
						|
	const year = date.getUTCFullYear().toLocaleString('en-US', { minimumIntegerDigits: 2, useGrouping: false });
 | 
						|
 | 
						|
	FormatDate(day, month, year);
 | 
						|
};
 | 
						|
 | 
						|
function UpdateOSTime() {
 | 
						|
	const date = new Date();
 | 
						|
	let hours = date.getHours().toLocaleString('en-US', { minimumIntegerDigits: 2, useGrouping: false });
 | 
						|
	let minutes = date.getMinutes().toLocaleString('en-US', { minimumIntegerDigits: 2, useGrouping: false });
 | 
						|
	let seconds = date.getSeconds().toLocaleString('en-US', { minimumIntegerDigits: 2, useGrouping: false });
 | 
						|
 | 
						|
	let time = hours+":"+minutes+":"+seconds
 | 
						|
	$("#time").text(time);
 | 
						|
};
 | 
						|
 | 
						|
function UpdateOSDate() {
 | 
						|
	const date = new Date();
 | 
						|
	const day = date.getDate().toLocaleString('en-US', { minimumIntegerDigits: 2, useGrouping: false });
 | 
						|
	let month = date.getMonth()+1; month = month.toLocaleString('en-US', { minimumIntegerDigits: 2, useGrouping: false });
 | 
						|
	const year = date.getFullYear().toLocaleString('en-US', { minimumIntegerDigits: 2, useGrouping: false });
 | 
						|
 | 
						|
	FormatDate(day, month, year);
 | 
						|
};
 | 
						|
 | 
						|
function onMessageRecieved(event) {
 | 
						|
	let data = event.data;
 | 
						|
 | 
						|
	if (data != undefined) {
 | 
						|
		switch(data.action) {
 | 
						|
			case 'updateData':
 | 
						|
				$.each(data.set, function(id, value) {
 | 
						|
					$("#"+id).text(value);
 | 
						|
			 	});
 | 
						|
 | 
						|
				// Show/hide/change license plate
 | 
						|
				if (data.info.numberplate == false) {
 | 
						|
					$("#numberplate-wrapper").hide();
 | 
						|
				} else if (data.info.numberplate != undefined) {
 | 
						|
					$("#ta-numberplate").text(data.info.numberplate);
 | 
						|
					if (!$("#numberplate-wrapper").is(":visible")) {
 | 
						|
						$("#numberplate-wrapper").show();
 | 
						|
					};
 | 
						|
				};
 | 
						|
 | 
						|
				// Handle time and date
 | 
						|
				if (data.info.time) {
 | 
						|
					UpdateOSDate();
 | 
						|
					$("#time").text(data.info.time);
 | 
						|
				} else {
 | 
						|
					if (config.timeFormat == 0) {
 | 
						|
						UpdateZuluTime();
 | 
						|
					} else {
 | 
						|
						UpdateOSTime();
 | 
						|
						UpdateOSDate();
 | 
						|
					};
 | 
						|
				};
 | 
						|
				break;
 | 
						|
			case 'updateDataFrame':
 | 
						|
				// Camera Pitch
 | 
						|
				$('#pitch-line').css('transform', 'rotate(' + data.pitch + 'deg)');
 | 
						|
 | 
						|
				// Camera Relative Heading
 | 
						|
				$('#heading-line').css('transform', 'rotate(' + data.heading + 'deg)');
 | 
						|
 | 
						|
				// Bearing
 | 
						|
				$('#bearing-img').attr('src', 'images/bearing.svg#svgView(viewBox(' + (data.bearing - 89) + ', 0, 180, 8))');
 | 
						|
				$('#bearing-directions').attr('src', 'images/bearing-directions.svg#svgView(viewBox(' + (data.bearing - 90) + ', 0, 180, 10))');
 | 
						|
				break;
 | 
						|
			case 'setVisionState':
 | 
						|
				$("#vision-state").text(data.state); // Sets text in bottom left corner
 | 
						|
				break;
 | 
						|
			case 'setZoomBarLevel':
 | 
						|
				let barLength = $("#zoom-bar").width() || lastZoomBarLength;
 | 
						|
				let barPercent = barLength / 100;
 | 
						|
				if (barLength != lastZoomBarLength) {
 | 
						|
					lastZoomBarLength = barLength;
 | 
						|
				};
 | 
						|
 | 
						|
				barLength = barLength - barPercent * 17.5 // Reduce the bar length by 17.5% to compensate for overflow
 | 
						|
				let pixels = barLength / 100 * data.percentage + barPercent * 5;
 | 
						|
				$("#zoom-arrow").css("margin-left", pixels + "px");
 | 
						|
				break;
 | 
						|
			case 'open':
 | 
						|
				$("#wrapper").show();
 | 
						|
				break;
 | 
						|
			case 'close':
 | 
						|
				$("#wrapper").hide();
 | 
						|
				break;
 | 
						|
			case 'startLockScanning':
 | 
						|
				$("#lock-bar-container").show();
 | 
						|
				$("#lock-bar-progress").stop().css({"width": 0}).animate({
 | 
						|
					width: 11 +'%'
 | 
						|
					}, {
 | 
						|
					duration: parseInt(200),
 | 
						|
				});
 | 
						|
				break;
 | 
						|
			case 'updateLockScanning':
 | 
						|
				const end = data.value * 10 + 1
 | 
						|
				$("#lock-bar-progress").stop().animate({
 | 
						|
					width: end+'%'
 | 
						|
					}, {
 | 
						|
					duration: parseInt(200),
 | 
						|
					easing : "linear"
 | 
						|
				});
 | 
						|
				break;
 | 
						|
			case 'lockScanningFinished':
 | 
						|
				$("#lock-bar-container").hide();
 | 
						|
				break;
 | 
						|
			case 'setCameraLockState':
 | 
						|
				if (data.state == true) {
 | 
						|
					$("#lock-state").addClass("lock-state-active");
 | 
						|
				} else {
 | 
						|
					$("#lock-state").removeClass("lock-state-active");
 | 
						|
				};
 | 
						|
				$("#lock-type").text(data.type);
 | 
						|
				break;
 | 
						|
			case 'setCameraLabel':
 | 
						|
				$("#camera-label").text(data.label);
 | 
						|
				break;
 | 
						|
			case 'setConfigData':
 | 
						|
				$.each(data.set, function(id, value) {
 | 
						|
					$("#"+id).text(value);
 | 
						|
				});
 | 
						|
 | 
						|
				if (data.showLatitudeLongitude == true) {
 | 
						|
					$("#hi-latitude").show();
 | 
						|
					$("#hi-longitude").show();
 | 
						|
					$("#ta-latitude").show();
 | 
						|
					$("#ta-longitude").show();
 | 
						|
				} else {
 | 
						|
					$(".street").css('display', 'inline-block');
 | 
						|
				};
 | 
						|
 | 
						|
				if (data.showLicensePlate == false) {
 | 
						|
					$("#numberplate-wrapper").hide();
 | 
						|
				};
 | 
						|
 | 
						|
				if (data.hideMinimap == false) {
 | 
						|
					$("#camera-info").css("bottom", data.zoomBarOffset+"%");
 | 
						|
				};
 | 
						|
 | 
						|
				if (data.showInstructions == true) {
 | 
						|
					$("#relative-info").css("bottom", "6%");
 | 
						|
					if (data.hideMinimap == true) {
 | 
						|
						$("#camera-info").css("bottom", "6%");
 | 
						|
					};
 | 
						|
				};
 | 
						|
 | 
						|
				config.timeFormat = data.timeFormat;
 | 
						|
				config.dateFormat = data.dateFormat;
 | 
						|
				break;
 | 
						|
			default:
 | 
						|
				console.log("Error: spesifed action was not found!", data.action);
 | 
						|
		}
 | 
						|
	} else {
 | 
						|
		console.log("Error: data was not defined!");
 | 
						|
	};
 | 
						|
};
 |