645 lines
16 KiB
JavaScript
Executable File
645 lines
16 KiB
JavaScript
Executable File
var tree = {};
|
|
var appointment_chronicler;
|
|
var appointment_windows = {};
|
|
var errorDotTimeout;
|
|
var errorInfo = [];
|
|
$(document).ready(function() {
|
|
appointment_chron();
|
|
});
|
|
|
|
$(document).on('keyup click change,', 'textarea', function() {
|
|
var ta = $(this);
|
|
var scrollHeight = ta[0].scrollHeight;
|
|
var scrollTop = ta.scrollTop();
|
|
var height = ta.height();
|
|
|
|
if (scrollHeight > (height + 5) || scrollHeight < (height - 5)) {
|
|
if (scrollHeight < 700) {
|
|
ta.height(scrollHeight);
|
|
}
|
|
}
|
|
if (ta.val() == '') {
|
|
ta.height(30);
|
|
}
|
|
});
|
|
|
|
|
|
function appointment_chron() {
|
|
clearInterval(appointment_chronicler);
|
|
time_updater();
|
|
appointment_chronicler = setInterval(function(){
|
|
time_updater();
|
|
},1000);
|
|
function time_updater() {
|
|
$('.since, .time').each( function() {
|
|
var header = $(this);
|
|
var timestamp = $(this).attr('timestamp');
|
|
var app = $(this).attr('app');
|
|
var mode = $(this).attr('mode');
|
|
|
|
if (mode == 'fixed') {
|
|
if (!header.attr('formatted_time')) {
|
|
header.attr('formatted_time', fixedTimeString(numeral(timestamp).value()));
|
|
}
|
|
if (header.is('input') && !header.hasClass('editing')) {
|
|
header.val(header.attr('formatted_time')).css({'background-color': '#ddffee'});
|
|
}
|
|
else if (header.hasClass('editing')) {
|
|
header.css({'background-color': '#ddffee'})
|
|
}
|
|
else {
|
|
header.text(header.attr('formatted_time'));
|
|
}
|
|
}
|
|
else {
|
|
|
|
if (header.is('input') && !header.hasClass('editing')) {
|
|
header.val(quality_inventory(timestamp)).css({'background-color': '#ffffff'});
|
|
}
|
|
else if (header.hasClass('editing')) {
|
|
header.css({'background-color': '#ffffff'});
|
|
}
|
|
else {
|
|
header.text(quality_inventory(timestamp));
|
|
}
|
|
header.attr('mode', 'dynamic');
|
|
|
|
}
|
|
|
|
});
|
|
}
|
|
}
|
|
|
|
var mLastX = 0;
|
|
var mLastY = 0;
|
|
var mLastTs = Date.now();
|
|
$(document).on('mousemove', function(e) {
|
|
window.event = e;
|
|
mouse = e;
|
|
});
|
|
function mouse_position() {
|
|
var e = window.event;
|
|
var data = { 'lastX': mLastX, 'lastY': mLastY, lastTs: mLastTs };
|
|
if(e) {
|
|
mLastX = e.clientX;
|
|
mLastY = e.clientY;
|
|
mLastTs = Date.now();
|
|
}
|
|
data['x'] = mLastX;
|
|
data['y'] = mLastY;
|
|
data['ts'] = Date.now();
|
|
return data;
|
|
}
|
|
|
|
function say_it(words) {
|
|
var timestamp = Date.now();
|
|
$.ajax({
|
|
url: '/manager/say_it',
|
|
type: 'GET',
|
|
data: { 'words': words, 'timestamp': timestamp }
|
|
});
|
|
}
|
|
|
|
function quality_inventory(timestamp) {
|
|
var now = numeral(Date.now()).value();
|
|
var then = timestamp;
|
|
|
|
|
|
var since = (now - then);
|
|
var t = "";
|
|
if (now < then) { since = Math.abs(since); }
|
|
var seconds = (since / 1000);
|
|
var minutes = (seconds / 60);
|
|
var hours = (minutes / 60);
|
|
var days = numeral(hours / 24).format('0.000');
|
|
var weeks = numeral( days / 7 ).format('0.000');
|
|
var months = numeral( days / 30 ).format('0.000');
|
|
var seasons = numeral( days / 90 ).format('0.000');
|
|
var years = numeral( days / 365 ).format('0.000');
|
|
|
|
|
|
if (seconds < 60) {
|
|
t += numeral(seconds).format('10') + 's';
|
|
}
|
|
if ( seconds >= 60 && minutes < 60 ) {
|
|
t += Math.floor(minutes) + 'm';
|
|
var r = (minutes - Math.floor(minutes)) * 60;
|
|
if (Math.floor(r) > 0) {
|
|
t += ' ' + Math.floor(r) + 's';
|
|
}
|
|
}
|
|
if (minutes >= 60 && hours <= 24 ) {
|
|
t += Math.floor(hours) + 'h';
|
|
var r = (hours - Math.floor(hours)) * 60;
|
|
if (Math.floor(r) > 0) {
|
|
t += ' ' + Math.floor(r) + 'm';
|
|
}
|
|
r = r - Math.floor(r);
|
|
if (Math.floor(r) > 0) {
|
|
t += ' ' + Math.floor(r * 60) + 's';
|
|
}
|
|
}
|
|
if (hours > 24 && days <= 90) {
|
|
t += Math.floor(days) + 'd';
|
|
var r = (days - Math.floor(days)) * 24;
|
|
if (Math.floor(r) > 0) {
|
|
t += ' ' + Math.floor(r) + 'h';
|
|
}
|
|
r = (r - Math.floor(r)) * 60;
|
|
if (Math.floor(r) > 0) {
|
|
t += ' ' + Math.floor(r) + 'm';
|
|
}
|
|
|
|
}
|
|
if (days > 90 && months < 24) {
|
|
t += numeral(months).format('0,0.0000') + 'M';
|
|
}
|
|
if (years >= 2) {
|
|
t += Math.floor(years) + 'y';
|
|
var r = years - Math.floor(years);
|
|
r = r * 12;
|
|
if (Math.floor(r) > 0) {
|
|
t += ' ' + Math.floor(r) + 'M';
|
|
}
|
|
r = numeral((r - Math.floor(r)) * 30).format('0.000');
|
|
if (Math.floor(r) > 0) {
|
|
t += ' ' + Math.floor(r) + 'd';
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (now < then) { t = 'in ' + t; since = Math.abs(since); }
|
|
return t;
|
|
}
|
|
|
|
var months = [
|
|
{ 'abbrev': 'jan', name: 'January', days: 31, leap_days: 31 },
|
|
{ 'abbrev': 'feb', name: 'February', days: 28, leap_days: 29 },
|
|
{ 'abbrev': 'mar', name: 'March', days: 31, leap_days: 31 },
|
|
{ 'abbrev': 'apr', name: 'April', days: 30, leap_days: 30 },
|
|
{ 'abbrev': 'may', name: 'May', days: 31, leap_days: 31 },
|
|
{ 'abbrev': 'jun', name: 'June', days: 30, leap_days: 30 },
|
|
{ 'abbrev': 'jul', name: 'July', days: 31, leap_days: 31 },
|
|
{ 'abbrev': 'aug', name: 'August', days: 31, leap_days: 31 },
|
|
{ 'abbrev': 'sep', name: 'September', days: 30, leap_days: 30 },
|
|
{ 'abbrev': 'oct', name: 'October', days: 31, leap_days: 31 },
|
|
{ 'abbrev': 'nov', name: 'November', days: 30, leap_days: 30 },
|
|
{ 'abbrev': 'dec', name: 'December', days: 31, leap_days: 31 },
|
|
];
|
|
|
|
$(document).on('dblclick', '.time', function() {
|
|
var ago = $(this).attr('formatted_time');
|
|
console.log(ago);
|
|
$('#time_machine').val(ago);
|
|
localStorage.setItem('time_machine',ago);
|
|
});
|
|
|
|
|
|
$(document).on('click', '.time, .appointment_header, .since', function() {
|
|
var header = $(this);
|
|
if (!header.is('input')) {
|
|
console.log(header.attr('mode') + ' ' + header.attr('timestamp'));
|
|
if (header.attr('mode') == 'fixed') {
|
|
header.attr('mode', 'dynamic');
|
|
}
|
|
else {
|
|
header.attr('mode', 'fixed');
|
|
var timestamp = numeral(header.attr('timestamp')).value();
|
|
header.attr('formatted_time', fixedTimeString(timestamp));
|
|
}
|
|
appointment_chron();
|
|
}
|
|
});
|
|
|
|
function fixedTimeString(timestamp) {
|
|
const date = new Date(timestamp);
|
|
const datevalues = [
|
|
date.getFullYear(),
|
|
date.getMonth()+1,
|
|
date.getDate(),
|
|
date.getHours(),
|
|
date.getMinutes(),
|
|
date.getSeconds(),
|
|
dayProcessor(date.getDay())
|
|
];
|
|
$.each(datevalues, function(i,v) {
|
|
if (v < 10) {
|
|
datevalues[i] = '0' + v;
|
|
}
|
|
});
|
|
return datevalues[6] + ' ' + datevalues[1] + '/' + datevalues[2] + '/' + datevalues[0] + ' ' + datevalues[3] + ':' + datevalues[4] + ':' + datevalues[5]
|
|
|
|
}
|
|
|
|
function dayProcessor(day) {
|
|
var d;
|
|
if (day == 0) {
|
|
d = 'Sun';
|
|
}
|
|
else if (day == 1) {
|
|
d = 'Mon';
|
|
}
|
|
else if (day == 2) {
|
|
d = 'Tue';
|
|
}
|
|
else if (day == 3) {
|
|
d = 'Wed';
|
|
}
|
|
else if (day == 4) {
|
|
d = 'Thu';
|
|
}
|
|
else if (day == 5) {
|
|
d = 'Fri';
|
|
}
|
|
else if (day == 6) {
|
|
d = 'Sat';
|
|
}
|
|
else { d = ''; }
|
|
return d;
|
|
}
|
|
|
|
function isJson(str) {
|
|
try {
|
|
JSON.parse(str);
|
|
}
|
|
catch (e) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function timestampDater() {
|
|
$('.timestamp').each(function() {
|
|
var t = numeral($(this).text()).value();
|
|
var m = moment(t).format('M/D/YYYY');
|
|
$(this).text(m);
|
|
$(this).removeClass('timestamp');
|
|
});
|
|
}
|
|
|
|
$(document).on('click', '#error_dot', function() {
|
|
clearTimeout(errorDotTimeout);
|
|
if ($('#error_info').is(':visible')) {
|
|
$('#error_info').hide();
|
|
}
|
|
else {
|
|
$('#error_info').html('hey').show();
|
|
}
|
|
});
|
|
|
|
|
|
function settingSetter(setter) {
|
|
var app = setter['app'];
|
|
var value = setter['value'];
|
|
var setting = setter['setting'];
|
|
var timestamp = Date.now();
|
|
var device = setter['device'];
|
|
$.ajax({
|
|
url: '/manager/setting_setter',
|
|
type: 'POST',
|
|
data: { app: app, setting:setting, device: device, value:value, timestamp: timestamp},
|
|
success: function(response) {
|
|
return response;
|
|
}
|
|
});
|
|
}
|
|
|
|
function settingGrabber(setter) {
|
|
var timestamp = Date.now();
|
|
var app = setter['app'];
|
|
var setting = setter['setting'];
|
|
console.log(setter);
|
|
$.ajax({
|
|
url: '/manager/setting_grabber',
|
|
type: 'GET',
|
|
data: { app: app, setting: setting, timestamp: timestamp},
|
|
success: function(response) {
|
|
console.log(response);
|
|
if (isJson(response)) {
|
|
response = JSON.parse(response);
|
|
}
|
|
return response;
|
|
}
|
|
});
|
|
}
|
|
|
|
function settingsGrabber(setter) {
|
|
var timestamp = Date.now();
|
|
var app = setter['app'];
|
|
var device = setter['device'];
|
|
$.ajax({
|
|
url: '/manager/settings_grabber',
|
|
type: 'GET',
|
|
data: { app: app, device: device },
|
|
success: function(response) {
|
|
return response;
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
$(document).on('click', '.dot', function() {
|
|
var di = $(this).find('.dot_info');
|
|
if (di.is(':visible')) {
|
|
di.hide();
|
|
}
|
|
else {
|
|
di.show();
|
|
}
|
|
});
|
|
|
|
$.ajaxSetup({
|
|
cache: false,
|
|
data: { browser_tab_id: bti, browser_tab: bt, user_agent: navigator.userAgent },
|
|
success: function(response) {
|
|
},
|
|
|
|
error: function(e,t,r) {
|
|
console.log(e);
|
|
console.log(t);
|
|
// errorInfo.push(e);
|
|
$('#red_dot').show();
|
|
$('#red_dot').find('.dot_info').text(e.status);
|
|
errorDotTimeout = setTimeout(function() {
|
|
$('#red_dot').fadeOut();
|
|
},5000);
|
|
}
|
|
});
|
|
|
|
|
|
var padlock_jw_deg = 0;
|
|
var padlock_last = 'out';
|
|
var padlock_jw_position = 0;
|
|
var padlock_numbers = {
|
|
diffs: [],
|
|
turns: [],
|
|
sequence: [],
|
|
digits: [],
|
|
direction: '',
|
|
last_timestamp: Date.now(),
|
|
reset: '',
|
|
pulled: [],
|
|
padlock: undefined
|
|
};
|
|
|
|
$(document).on('touchmove mousemove', '.padlock_jog_wheel', function(e) {
|
|
e.preventDefault(); e.preventDefault();
|
|
var j = $(this);
|
|
var jc = j.closest('.padlock_jog_wheel_frame').find('.padlock_jog_wheel_centre');
|
|
if (e.which === 1 || e.originalEvent.type == 'touchmove') {
|
|
var x = e.originalEvent.clientX;
|
|
var y = e.originalEvent.clientY;
|
|
if (e.originalEvent.targetTouches) {
|
|
x = e.originalEvent.targetTouches[0].clientX;
|
|
y = e.originalEvent.targetTouches[0].clientY;
|
|
}
|
|
var middle_x = numeral(jc.offset().left + (jc.width() / 2)).value();
|
|
var middle_y = numeral(jc.offset().top + (jc.height() / 2)).value();
|
|
var deltaX = middle_x - x;
|
|
var deltaY = middle_y - y;
|
|
var rad = Math.atan2(deltaY, deltaX);
|
|
var deg = (rad * (180 / Math.PI) - 90);
|
|
var diff = 0;
|
|
|
|
if (padlock_last == 'in') {
|
|
diff = (deg - padlock_jw_deg);
|
|
}
|
|
padlock_jw_deg = padlock_jw_deg + diff;
|
|
padlockPicker(j,diff,'wheel');
|
|
}
|
|
});
|
|
|
|
function padlockPicker(j,diff,source) {
|
|
padlock_numbers.padlock = j;
|
|
if (diff) {
|
|
padlock_numbers.diffs.push(diff);
|
|
}
|
|
var movement_ratio = .8;
|
|
if (source == 'mouse') {
|
|
movement_ratio = .8;
|
|
}
|
|
padlock_numbers.last_timestamp = Date.now();
|
|
j.css({'rotate': padlock_jw_deg + 'deg' });
|
|
padlock_last = 'in';
|
|
|
|
var numbering = padlock_jw_deg;
|
|
if (numbering > 0) {
|
|
numbering = numbering - 360;
|
|
}
|
|
padlock_jw_position = Math.abs(numeral(numbering / 30).format('0'));
|
|
if (padlock_jw_position == 12) {
|
|
padlock_jw_position = 0;
|
|
}
|
|
padlock_numbers.sequence.push(padlock_jw_position);
|
|
var direction;
|
|
var last_value;
|
|
$.each(padlock_numbers.sequence, function(i,v) {
|
|
if (i >= 1) {
|
|
if (padlock_numbers.sequence[i] == padlock_numbers.sequence[i - 1] || padlock_numbers.sequence[i] == NaN) {
|
|
padlock_numbers.sequence.splice(i,1);
|
|
}
|
|
else if (v != 0 && v < padlock_numbers.sequence[i - 1] || (v == 11 && padlock_numbers.sequence[i - 1] == 0)) {
|
|
direction = 'negative';
|
|
}
|
|
else if (v != 11 && v > padlock_numbers.sequence[i - 1] || (v == 0 && padlock_numbers.sequence[i - 1] == 11)) {
|
|
direction = 'positive';
|
|
}
|
|
}
|
|
last_value = v;
|
|
});
|
|
var diff_total = { positive: [], negative: [], total: [] };
|
|
|
|
$.each(padlock_numbers.diffs, function(i,v) {
|
|
if (v > 0) {
|
|
diff_total.negative.push(v);
|
|
}
|
|
else if (v < 0) {
|
|
diff_total.positive.push(v);
|
|
}
|
|
diff_total.total.push(v);
|
|
});
|
|
if (diff_total.negative.length / diff_total.total.length > movement_ratio) {
|
|
direction = 'negative';
|
|
}
|
|
else if (diff_total.positive.length / diff_total.total.length > movement_ratio) {
|
|
direction = 'positive';
|
|
}
|
|
if (padlock_numbers.diffs.length > 40) {
|
|
padlock_numbers.diffs.splice(0,1);
|
|
}
|
|
|
|
|
|
if (padlock_numbers.sequence.length >= 12) {
|
|
var checks_positive = [];
|
|
var checks_negative = [];
|
|
padlock_numbers.diffs = [];
|
|
$.each(padlock_numbers.sequence, function(i,v) {
|
|
if (v != 11 && v > padlock_numbers.sequence[i - 1] || (v == 0 && padlock_numbers.sequence[i - 1] == 11)) {
|
|
checks_positive.push('yes');
|
|
checks_negative.push('no');
|
|
}
|
|
if (v != 0 && v < padlock_numbers.sequence[i - 1] || (v == 11 && padlock_numbers.sequence[i - 1] == 0)) {
|
|
checks_negative.push('yes');
|
|
checks_positive.push('no');
|
|
}
|
|
});
|
|
var positive;
|
|
var negative;
|
|
|
|
$.each(checks_positive, function(i,v) {
|
|
if (v == 'yes' && positive != 'no') {
|
|
positive = 'yes';
|
|
}
|
|
});
|
|
$.each(checks_negative, function(i,v) {
|
|
if (v == 'yes' && negative != 'no') {
|
|
negative = 'yes';
|
|
}
|
|
});
|
|
if (positive == 'yes') {
|
|
padlock_numbers.turns.push('positive');
|
|
}
|
|
if (negative == 'yes') {
|
|
padlock_numbers.turns.push('negative');
|
|
}
|
|
|
|
padlock_numbers.sequence = [];
|
|
}
|
|
if (direction == 'negative' && padlock_numbers.turns[padlock_numbers.turns.length - 1] == 'negative' &&
|
|
padlock_numbers.turns[padlock_numbers.turns.length - 2] == 'negative' &&
|
|
padlock_numbers.turns[padlock_numbers.turns.length - 3] == 'negative') {
|
|
padlockReset(j);
|
|
padlock_numbers.turns.push('negative');
|
|
padlock_numbers.turns.push('negative');
|
|
padlock_numbers.diffs = [];
|
|
$('.padlock_lock').show();
|
|
$('.padlock_unlock').hide();
|
|
}
|
|
else if (direction == 'positive' && padlock_numbers.turns[padlock_numbers.turns.length - 1] == 'negative' &&
|
|
padlock_numbers.turns[padlock_numbers.turns.length - 2] == 'negative' &&
|
|
padlock_numbers.digits.length == 0) {
|
|
padlock_numbers.digits[0] = last_value;
|
|
$('.padlock_light.blue').show();
|
|
$('.padlock_digit.blue').html(last_value).show();
|
|
padlock_numbers.sequence = [];
|
|
padlock_numbers.diffs = [];
|
|
}
|
|
else if (direction == 'negative' && padlock_numbers.turns[padlock_numbers.turns.length - 1] == 'positive' &&
|
|
padlock_numbers.turns[padlock_numbers.turns.length - 2] == 'negative' &&
|
|
padlock_numbers.digits.length == 1) {
|
|
padlock_numbers.digits[1] = last_value;
|
|
$('.padlock_light.green').show();
|
|
$('.padlock_digit.green').html(last_value).show();
|
|
padlock_numbers.sequence = [];
|
|
padlock_numbers.diffs = [];
|
|
}
|
|
else if (direction == 'positive' &&
|
|
padlock_numbers.turns[padlock_numbers.turns.length - 1] == 'negative' &&
|
|
padlock_numbers.digits.length == 2) {
|
|
padlock_numbers.digits[2] = last_value;
|
|
$('.padlock_light.red').show();
|
|
$('.padlock_digit.red').html(last_value).show();
|
|
padlock_numbers.sequence = [];
|
|
padlock_numbers.diffs = [];
|
|
padlockPull(j);
|
|
}
|
|
|
|
clearTimeout(padlock_numbers.reset);
|
|
padlock_numbers.reset = setTimeout(function() {
|
|
var timestamp = Date.now();
|
|
if (timestamp > padlock_numbers.last_timestamp + 4999) {
|
|
padlockReset(j);
|
|
clearTimeout(padlock_numbers.reset);
|
|
}
|
|
},15000);
|
|
}
|
|
var padlockInterval;
|
|
padlockInterval = setInterval(function() {
|
|
var timestamp = Date.now();
|
|
if (!$('.wind[app="security"]').is('visible') || timestamp > padlock_numbers.last_timestamp + 69999) {
|
|
clearInterval(padlockInterval);
|
|
padlock_numbers.pulled = [];
|
|
$('.padlock_light.yellow').hide();
|
|
}
|
|
}, 5000);
|
|
function padlockReset(j) {
|
|
var pulled = padlock_numbers.pulled;
|
|
padlock_numbers = {
|
|
diffs: [],
|
|
turns: [],
|
|
sequence: [],
|
|
digits: [],
|
|
direction: '',
|
|
last_timestamp: Date.now(),
|
|
reset: '',
|
|
pulled: [],
|
|
padlock: undefined
|
|
};
|
|
if (pulled.length > 0 && j.attr('mode') == 'security') {
|
|
padlock_numbers.pulled = pulled;
|
|
$('.padlock_light').hide();
|
|
$('.padlock_digit').hide();
|
|
$('.padlock_light.yellow').show();
|
|
}
|
|
else {
|
|
$('.padlock_light').hide();
|
|
$('.padlock_digit').hide();
|
|
$('.padlock_lock').show();
|
|
$('.padlock_unlock').hide();
|
|
}
|
|
}
|
|
function padlockPull(j) {
|
|
var timestamp = Date.now();
|
|
var digits = JSON.stringify(padlock_numbers.digits);
|
|
var mode = j.closest('.padlock_frame').attr('mode');
|
|
console.log(mode);
|
|
if (padlock_numbers.pulled.length == 0) {
|
|
$.ajax({
|
|
url: '/manager/security/padlock_pull',
|
|
type: 'POST',
|
|
data: { timestamp: timestamp, digits: digits, mode: mode },
|
|
success: function(response) {
|
|
if (response.status == 'success') {
|
|
$('.padlock_unlock').show();
|
|
$('.padlock_lock').hide();
|
|
$('.padlock_light.yellow').show();
|
|
padlock_numbers.pulled = JSON.parse(response.pulled);
|
|
}
|
|
else {
|
|
$('.padlock_lock').show();
|
|
$('.padlock_unlock').hide();
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
$(document).on('mouseout touchend mouseup', '.padlock_jog_wheel', function() {
|
|
padlock_last = 'out';
|
|
});
|
|
|
|
$(document).on('mousewheel', '.padlock_jog_wheel', function(e) {
|
|
var j = $(this);
|
|
var mvmt = numeral(e.originalEvent.wheelDelta).value();
|
|
|
|
var diff = numeral(mvmt / 20).value() ;
|
|
padlock_jw_deg = (padlock_jw_deg + diff);
|
|
if (padlock_jw_deg > 360 || padlock_jw_deg < -360) {
|
|
padlock_jw_deg = 0;
|
|
}
|
|
padlockPicker(j,diff,'mouse');
|
|
});
|
|
|
|
|
|
$(document).on('click', '#download_program', function() {
|
|
var text = $(this).text();
|
|
$(this).text('hold on...');
|
|
var timestamp = Date.now();
|
|
window.location='/download_program?timestamp=' + timestamp;
|
|
$(this).text(text);
|
|
});
|
|
|
|
var vidControls = {};
|