$(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 = '

Password settings

'; 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 += "

Simulator

"; 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 = '

' + text +'

'; $('#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('
Wrong value!
'); } }); } // 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 = '
'; html += ''; html += ''; html += e.length > 0 ? '
' + e + '
' : ''; html += '
'; return html; } function c_btn(t,v,c) { return ''; } function c_opt(n,t,o,pl,vp,lp,e) { var html = '
'; html += ''; html += ''; html += e.length > 0 ? '
' + e + '
' : ''; html += '
'; return html; } function c_rad(name,legend,options,invalid_feedback_text,group_class) { var html = '
'; html += '' + legend + ''; for (i = 0; i < options.length; i++) { html += '
'; html += ''; html += ''; html += '
'; } html += invalid_feedback_text.length > 0 ? '
' + invalid_feedback_text + '
' : ''; html += '
'; return html; } var pre = ''; var dmxsnf = ''; function c_dt(n,t,e,c,it) { var html = '
'; html += ''; html += '
'; html += ''; html += e.length > 0 ? '
' + e + '
' : ''; html += '
'; return html; } function c_fsens(i,t,u) { var html = ''; html += '
'; html += '
'; html += '
'; html += '
'; html += '
'; html += '
'; 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_hpwrm', '0') // high pwr mode 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) }