president/public/js/universal.js

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 = {};