Files
reap-simulator-vincent/iforte/base.js
2023-11-25 18:41:59 +01:00

557 lines
18 KiB
JavaScript

$(document).ready(function() {
initSessionStorage()
populateUIFromSessionStorage()
loopRainsSimulator()
// Sets the proper fixture name in the header and title
var fixturename = "Robin iForte - Simulated";
$('#pth').html(fixturename)
$(document).prop('title', fixturename)
// handle RDM ident
var idntb = $('#idnt img');
var idnt_status = sessionStorage.getItem('iforte_idnt')
if (idnt_status == 1) {
idntb.addClass("a");
}
$('#idnt').click(function() {
var idnt_status = sessionStorage.getItem('iforte_idnt')
if (idnt_status == 1) {
idntb.removeClass("a");
sessionStorage.setItem('iforte_idnt', '0')
} else {
idntb.addClass("a")
sessionStorage.setItem('iforte_idnt', '1')
}
});
//handle settings
$(document).on('click','#scfg',function() {
mhdr_status('');
$('#m-t').html('Site settings');
var h = '<h3>Password settings</h3>';
h += c_txt('opswd','Old password','Please put old password (four digits)','','password');
h += c_txt('npswd','New password','Please put new password (four digits)','','password');
h += c_txt('npsch','New password check','New passwords check failed','','password');
h += "<br><h3>Simulator</h3>";
h += c_btn('Reset demo values', 'btnresetdemo', ' btnresetdemo');
h += c_rad('iforte_demo_rains_age', 'RAINS tubes age', ['New', 'Average', 'Old'], '','');
h += c_rad('iforte_demo_pressure_test', 'Pressure test', ['OK', 'Failing'], '', '');
$('#m-b').html(h);
$('.sb').unbind();
copy_form_values(2);
$('#cfg-modal').modal();
$('.sb').bind('click',function() {
loader(1);
var par = ['opswd','npswd','npsch', 'iforte_demo_rains_age','iforte_demo_pressure_test'];
do_ajax('/set_cfg',pv(par),function (json) {
if (json) {
if (json['status'] == 0) {
mhdr_status('suc');
close_modal();
location = '/';
}
show_errors(json['status'],par);
loader(0);
}
});
});
});
// handle reset demo values
$(document).on('click','.btnresetdemo',function() {
$('.sb').html('OK')
sessionStorage.clear()
initSessionStorage()
populateUIFromSessionStorage()
showCustomModal('Cleared', 'Simulated page reset to default settings.')
});
});
// custom modal
function showCustomModal(title, text) {
loader(0)
$('#m-t').html(title);
var h = '<h3>' + text +'</h3>';
$('#m-b').html(h);
$('.sb').unbind();
$('#cfg-modal').modal();
$('.sb').bind('click',function() {
close_modal()
});
}
function mhdr_status(c) {
if (c.length == 0) $('#cfg-modal .modal-header').removeClass('suc err');
else $('#cfg-modal .modal-header').addClass(c);
}
function loader(showheader) {
if (showheader) $('#cfg-modal .modal-header img').addClass('loader');
else $('#cfg-modal .modal-header img').removeClass('loader');
}
function do_ajax(p_url,p_data,f,i = -1,a = true) {
loader(1);
// convert p_data to an Object
const data_object = {}
p_data.toString().split('&').forEach(element => {
var kvp = element.split('=');
data_object[kvp[0]] = kvp[1]
});
p_data = data_object
switch (p_url) {
case '/reset_hours':
if (p_data.rh == 0) {
sessionStorage.setItem('iforte_hr0', '0')
} else if (p_data.rh == 1){
sessionStorage.setItem('iforte_hr1', '0')
}
break;
case '/reset_temps':
if (p_data.rt == 0) {
sessionStorage.setItem('iforte_tmr0', sessionStorage.getItem('iforte_t0'))
} else if (p_data.rt == 3){
sessionStorage.setItem('iforte_tmr3', sessionStorage.getItem('iforte_t3'))
} else if (p_data.rt == 2){
sessionStorage.setItem('iforte_tmr2', sessionStorage.getItem('iforte_t2'))
} else if (p_data.rt == 1){
sessionStorage.setItem('iforte_tmr1', sessionStorage.getItem('iforte_t1'))
}
break;
default:
for (const [key, value] of Object.entries(p_data)) {
//sessionStorage.setItem(key, value)
console.log("key: %o", key)
console.log("val: %o", value)
if (key == 'iforte_tmpu') {
if (value == 0) {
sessionStorage.setItem('iforte_tu', 'C')
} else if (value == 1) {
sessionStorage.setItem('iforte_tu', 'F')
}
}
}
break;
}
populateUIFromSessionStorage()
loader(0)
close_modal()
}
function copy_form_values(dir) {
$('#m-b input:text, #m-b input[type=range]').each(function() {
var id = $(this).attr('id');
if (dir == 0) $('#' + id + '_v').html($('#' + id).val());
else $('#' + id).val($('#' + id + '_v').html());
});
$('#m-b select').each(function() {
var id = $(this).attr('id');
text = $('#' + id + '_v').html();
if (dir == 1) {
$(this).find('option').filter(function () { return $(this).html() == text; }).attr('selected', 'selected');
} else {
$('#' + id + '_v').html($(this).find('option:selected').html());
}
});
$('#m-b input:radio').each(function() {
var id = $(this).attr('name');
text = $('#' + id + '_v').html();
label = $(this).parent().find('label').html();
if (dir == 1) {
if (label == text) $(this).attr('checked','checked');
} else {
if ($(this).is(':checked')) $('#' + id + '_v').html(label);
}
});
if (dir == 1) {
$('#m-b div.form-group').each(function() {
var len = $(this).find('div.invalid-feedback').length;
if (len == 0) {
$(this).append('<div class="invalid-feedback">Wrong value!</div>');
}
});
}
// if opening settings window
if (dir == 2) {
$('input[name=iforte_demo_rains_age]').eq(sessionStorage.getItem('iforte_demo_rains_age')).attr('checked','checked');
$('input[name=iforte_demo_pressure_test]').eq(sessionStorage.getItem('iforte_demo_pressure_test')).attr('checked','checked');
}
}
function fill_values(d,ids) {
for (i = 0; i < ids.length; i++) {
$('#' + ids[i] + '_v').html(d[ids[i]]);
}
}
function show_errors(s,ids) {
if (s) mhdr_status('err');
for (i = 0; i < ids.length; i++) {
if (s & (1 << i)) $('#' + ids[i]).addClass('is-invalid').removeClass('is-valid');
else $('#' + ids[i]).removeClass('is-invalid').addClass('is-valid');
}
}
function close_modal() {
setTimeout(function() {
$('#m-b').empty();
$('#cfg-modal').modal('hide');
},500);
}
function pv(p) {
var s = '';
for (var i in p) {
var o = p[i];
if (i == 0) s += o + '=';
else s += '&' + o + '=';
if ($('#' + o).val() != undefined) s += $('#' + o).val();
else if ($('input[name=' + o + ']:checked').val() != undefined) s += $('input[name=' + o + ']:checked').val();
}
return s;
}
function c_txt(n,t,e,c = '',it = 'text') {
var html = '<div class="form-group' + c + '">';
html += '<label for="' + n + '" class="col-form-label">' + t + '</label>';
html += '<input type="'+ it +'" class="form-control" id="' + n + '">';
html += e.length > 0 ? '<div class="invalid-feedback">' + e + '</div>' : '';
html += '</div>';
return html;
}
function c_btn(t,v,c) {
return '<button class="btn btn-primary btn-block' + c + '" value="' + v + '">' + t + '</button>';
}
function c_opt(n,t,o,pl,vp,lp,e) {
var html = '<div class="form-group">';
html += '<label for="' + n + '" class="col-form-label">' + t + '</label>';
html += '<select class="form-control" id="' + n + '">';
var l = o.length;
var li = l;
if (l == 1) li = o[0];
for (i = 0; i < li; i++) {
if (l == 1) html += '<option value="' + (i + vp) + '">'+ pl + (i + lp) + '</option>';
else html += '<option value="' + (i + vp) + '">'+ o[i] + '</option>';
}
html += '</select>';
html += e.length > 0 ? '<div class="invalid-feedback">' + e + '</div>' : '';
html += '</div>';
return html;
}
function c_rad(name,legend,options,invalid_feedback_text,group_class) {
var html = '<div class="form-group' + group_class + '">';
html += '<legend class="col-form-label">' + legend + '</legend>';
for (i = 0; i < options.length; i++) {
html += '<div class="form-check form-check-inline">';
html += '<input class="form-check-input" type="radio" name="' + name + '" value="' + i + '" id="' + name + (i + 1) + '">';
html += '<label class="form-check-label" for="' + name + (i + 1) + '">' + options[i] + '</label>';
html += '</div>';
}
html += invalid_feedback_text.length > 0 ? '<div class="invalid-feedback">' + invalid_feedback_text + '</div>' : '';
html += '</div>';
return html;
}
var pre = '';
var dmxsnf = '';
function c_dt(n,t,e,c,it) {
var html = '<div class="form-group' + c + '">';
html += '<label for="' + n + '" class="col-form-label">' + t + '</label>';
html += '</div><div class="form-group' + c + '">';
html += '<input type="' + it + '" class="form-control" id="' + n + '" step="1">';
html += e.length > 0 ? '<div class="invalid-feedback">' + e + '</div>' : '';
html += '</div>';
return html;
}
function c_fsens(i,t,u) {
var html = '';
html += '<div class="form-row">';
html += '<div class="form-group col-auto"><label class="col-form-label" id="tl' + i + '" for="fts' + i + '">' + t + '</label></div>';
html += '<div class="form-group col-auto"><select class="form-control" id="fts' + i + '">';
html += '<option value="0">-</option><option value="1">=</option><option value="2">&lt;</option><option value="3">&gt;</option>';
html += '<option value="4">&lt;=</option><option value="5">&gt;=</option>';
html += '</select></div>';
html += '<div class="form-group col-auto"><input type="text" class="form-control" size="5" id="ftv' + i + '"></div>';
html += '<div class="form-group col-auto"><label class="col-form-label" for="ftv' + i + '">' + u + '</label></div>';
html += '</div>';
return html;
}
// add leading zeros to single digit hours, minutes, etc...
function addLeadingZeros(num) {
return String(num).padStart(2, '0');
}
function initSessionStorage() {
if (sessionStorage.getItem('iforte_dmxa') == null) {
console.log("sessionStorage empty, populating with demo data")
var currentTime = new Date();
/* CONSTANTS */
sessionStorage.setItem('iforte_ip', '2.246.16.203') // ip addr
sessionStorage.setItem('iforte_mac', '00:00:00:00:00:00') //
sessionStorage.setItem('iforte_rdmu', '52:53:00:00:00:00') //
/* DEMO */
sessionStorage.setItem('iforte_demo_rains_age', '1') // rains tubes age 0new 1avg 2old
sessionStorage.setItem('iforte_demo_pressure_test', '0') // type of pressure test, 0ok 1failing
/* VARIABLES */
sessionStorage.setItem('iforte_dmxa', '1') // dmx addr
sessionStorage.setItem('iforte_dmxp', '2') // dmx mode
sessionStorage.setItem('iforte_dmxi', '0') // input (wired0 wireless1 wirelessout2)
sessionStorage.setItem('iforte_rdmn', 'Robin iForte') // rdm name
sessionStorage.setItem('iforte_idnt', '0') // rdm idnt
sessionStorage.setItem('iforte_lwc', 'unlinked') // wireless link
sessionStorage.setItem('iforte_lws', '0') // wireless signal
sessionStorage.setItem('iforte_h0', '1206') // power on time
sessionStorage.setItem('iforte_hr0', '1206') // resetable
sessionStorage.setItem('iforte_h1', '213') // leds on time
sessionStorage.setItem('iforte_hr1', '180') // leds adaptative
sessionStorage.setItem('iforte_cdimc', '0') // dim curve
sessionStorage.setItem('iforte_fsmo', '0') // followspot mode
sessionStorage.setItem('iforte_frq', '4928') // led freq
sessionStorage.setItem('iforte_gind', '0') // gobo index mode
sessionStorage.setItem('iforte_btns', '0') // display buttons
sessionStorage.setItem('iforte_t0', '28') // leds now
sessionStorage.setItem('iforte_tm0', '62') // max
sessionStorage.setItem('iforte_tmr0', '62') // resetable
sessionStorage.setItem('iforte_t3', '26') // psu now
sessionStorage.setItem('iforte_tm3', '64') // max
sessionStorage.setItem('iforte_tmr3', '64') // resetable
sessionStorage.setItem('iforte_t1', '54') // driver now
sessionStorage.setItem('iforte_tm1', '80') // max
sessionStorage.setItem('iforte_tmr1', '80') // resetable
sessionStorage.setItem('iforte_t2', '25') // base now
sessionStorage.setItem('iforte_tm2', '56') // max
sessionStorage.setItem('iforte_tmr2', '56') // resetable
sessionStorage.setItem('iforte_fanm', '0') // iforte_fanmode 0auto 1high
sessionStorage.setItem('iforte_tmpu', '0') //temp unit 0c 1f
sessionStorage.setItem('iforte_tu', 'C') // temp unit string
sessionStorage.setItem('iforte_pr', '0') // pan rev
sessionStorage.setItem('iforte_ptf', '1') // pt feedback
sessionStorage.setItem('iforte_pte', '1') // pt EMS
sessionStorage.setItem('iforte_tr', '0') // tilt rev
sessionStorage.setItem('iforte_ptm', '0') // pt mode 0speed 1time
sessionStorage.setItem('iforte_bldmc', '0') // blackout dmc
sessionStorage.setItem('iforte_blptm', '0') // blackout pt
sessionStorage.setItem('iforte_blgwm', '0') // blackout gobo mv
sessionStorage.setItem('iforte_blprm', '0') // blackout color wheel mv
sessionStorage.setItem('iforte_dty', currentTime.getFullYear()) // date year
sessionStorage.setItem('iforte_dtmo', addLeadingZeros(currentTime.getMonth() + 1)) // date month
sessionStorage.setItem('iforte_dtd', addLeadingZeros(currentTime.getDay())) // date day
sessionStorage.setItem('iforte_dth', addLeadingZeros(currentTime.getHours())) // time hour
sessionStorage.setItem('iforte_dtmi', addLeadingZeros(currentTime.getMinutes())) // time minute
sessionStorage.setItem('iforte_dts', addLeadingZeros(currentTime.getSeconds())) // time seconds
sessionStorage.setItem('iforte_emod', '0') //ethmode 0dis 1art 2gma1 3gma2 4sacn
sessionStorage.setItem('iforte_ee2d', '0') //eth to dmx
sessionStorage.setItem('iforte_eanu', '0') //art uni
sessionStorage.setItem('iforte_emau', '1') //ma uni
sessionStorage.setItem('iforte_emas', '1') //ma session
sessionStorage.setItem('iforte_esau', '1') //sacn uni
sessionStorage.setItem('iforte_dint', '9') //disp int
sessionStorage.setItem('iforte_dsd', '0') //disp screensave
sessionStorage.setItem('iforte_dtl', '0') //disp lock
sessionStorage.setItem('iforte_dor', '2') //disp orientation 0norm 1inv 2auto
sessionStorage.setItem('iforte_mics', '9') // mic sens
}
}
function populateUIFromSessionStorage() {
for (var i = 0; i < sessionStorage.length; i++) {
var valueToLoad = '';
switch (sessionStorage.key(i)) {
case 'iforte_dmxp':
var valueToLoad = "Mode " + (parseInt(sessionStorage.getItem(sessionStorage.key(i))) + 1)
break;
case 'iforte_dmxi':
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "wired"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 1) {
var valueToLoad = "wireless"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 2) {
var valueToLoad = "wireless XLR out"
}
break;
case 'iforte_bldmc':
case 'iforte_blptm':
case 'iforte_ee2d':
case 'iforte_pr':
case 'iforte_tr':
case 'iforte_ptf':
case 'iforte_pte':
case 'iforte_hpwrm':
case 'iforte_blgwm':
case 'iforte_blprm':
case 'iforte_btns':
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "off"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 1) {
var valueToLoad = "on"
}
break;
case 'iforte_lws':
var valueToLoad = sessionStorage.getItem(sessionStorage.key(i)) + "%"
break;
case 'iforte_emod':
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "disable"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 1) {
var valueToLoad = "ArtNet"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 2) {
var valueToLoad = "gMA1"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 3) {
var valueToLoad = "gMA2"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 4) {
var valueToLoad = "sACN"
}
break;
case 'iforte_dint':
case 'iforte_mics':
var valueToLoad = (parseInt(sessionStorage.getItem(sessionStorage.key(i))) + 1)
break;
case 'iforte_dsd':
case 'iforte_dtl':
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "off"
} else {
var valueToLoad = (parseInt(sessionStorage.getItem(sessionStorage.key(i))) + " min")
}
break;
case 'iforte_dor':
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "normal"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 1) {
var valueToLoad = "inverted"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 2) {
var valueToLoad = "auto"
}
break;
case 'iforte_fanm':
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "auto"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 1) {
var valueToLoad = "high"
}
break;
case 'iforte_tmpu':
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "°C"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 1) {
var valueToLoad = "°F"
}
break;
case 'iforte_ptm':
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "speed"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 1) {
var valueToLoad = "time"
}
break;
case 'iforte_cdimc':
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "linear"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 1) {
var valueToLoad = "square law"
}
break;
case 'iforte_fsmo':
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "off"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 1) {
var valueToLoad = "soft"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 2) {
var valueToLoad = "medium"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 3) {
var valueToLoad = "hard"
}
break;
case 'iforte_gind':
if (sessionStorage.getItem(sessionStorage.key(i)) == 0) {
var valueToLoad = "max. speed & shortcut"
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 1) {
var valueToLoad = "follow spd. & dir."
} else if (sessionStorage.getItem(sessionStorage.key(i)) == 2) {
var valueToLoad = "max spd. & follow dir."
}
break;
case 'iforte_frq':
var valueToLoad = iforte_frq_s(sessionStorage.getItem('iforte_frq'))
break;
default:
var valueToLoad = sessionStorage.getItem(sessionStorage.key(i))
break;
}
console.log('key ' + i + " : " + valueToLoad);
$("#" + sessionStorage.key(i) + "_v").html(valueToLoad)
// for each element with id tu_v sets html to string of temp unit
$('div[id^="tu_v"]').html(sessionStorage.getItem('iforte_tu'))
}
}
// calc proper frequency to be displayed
function iforte_frq_s(t1_frq) {
var f = 360000000000;
var k = (0x700) - (t1_frq & 0xfff);
var arr = 465 + ((k >> 8) & 0x0f);
var x = k & 0xff;
f = f * (1 << (t1_frq >> 12)) / (arr * (256 - x) + (arr + 1) * (x));
return Math.floor(f / 10000) + '.' + ('0000' + Math.floor(f % 10000)).slice(-4)
}