var prevTag; function removeOverlay() { $("#loading_overlay").removeClass("overlay"); } function reload() { location.reload(); } function storageComp() { if (typeof(Storage) !== "undefined") return true; return false; } function getStorage(item, session) { if(storageComp()) { if(session === true) return sessionStorage.getItem(item); else return localStorage.getItem(item); } return null; } function setStorage(item, value, session) { if(storageComp()) { if(session === true) sessionStorage.setItem(item, value); else localStorage.setItem(item, value); } } function debugMessage(msg) { if (debugMessagesActive) { console.log(msg); } } function validateDuration(d) { if(typeof d === "undefined" || d < 0) return d = 0; else return d *= 1000; } function getHashtag() { if(getStorage('lasthashtag', true) != null) return getStorage('lasthashtag', true); else { var tag = document.URL; tag = tag.substr(tag.indexOf("#") + 1); if(tag == "" || typeof tag === "undefined" || tag.startsWith("http")) tag = "dashboard" return tag; } } function loadContent(event) { var tag; if(typeof event != "undefined") { tag = event.currentTarget.hash; tag = tag.substr(tag.indexOf("#") + 1); setStorage('lasthashtag', tag, true); } else tag = getHashtag(); if(prevTag != tag) { prevTag = tag; $("#page-content").off(); $("#page-content").load("/content/"+tag+".html", function(response,status,xhr){ if(status == "error") $("#page-content").html('

'+$.i18n('info_404')+'

'); removeOverlay(); }); } } function loadContentTo(containerId, fileName) { $(containerId).load("/content/"+fileName+".html"); } function toggleClass(obj,class1,class2) { if ( $(obj).hasClass(class1)) { $(obj).removeClass(class1); $(obj).addClass(class2); } else { $(obj).removeClass(class2); $(obj).addClass(class1); } } function setClassByBool(obj,enable,class1,class2) { if (enable) { $(obj).removeClass(class1); $(obj).addClass(class2); } else { $(obj).removeClass(class2); $(obj).addClass(class1); } } function showInfoDialog(type,header,message) { if (type=="success"){ $('#id_body').html(''); if(header == "") $('#id_body').append('

'+$.i18n('infoDialog_general_success_title')+'

'); $('#id_footer').html(''); } else if (type=="warning"){ $('#id_body').html(''); if(header == "") $('#id_body').append('

'+$.i18n('infoDialog_general_warning_title')+'

'); $('#id_footer').html(''); } else if (type=="error"){ $('#id_body').html(''); if(header == "") $('#id_body').append('

'+$.i18n('infoDialog_general_error_title')+'

'); $('#id_footer').html(''); } else if (type == "select"){ $('#id_body').html('Redefine ambient light!'); $('#id_footer').html(''); $('#id_footer').append(''); } else if (type == "uilock"){ $('#id_body').html('Redefine ambient light!'); $('#id_footer').html(''+$.i18n('InfoDialog_nowrite_foottext')+''); } else if (type == "import"){ $('#id_body').html(''); $('#id_footer').html(''); $('#id_footer').append(''); } else if (type == "checklist") { $('#id_body').html('Redefine ambient light!'); $('#id_body').append('

'+$.i18n('infoDialog_checklist_title')+'

'); $('#id_body').append(message); $('#id_footer').html(''); } $('#id_body').append('

'+header+'

'); $('#id_body').append(message); if(type == "select") $('#id_body').append(''); $("#modal_dialog").modal({ backdrop : "static", keyboard: false, show: true }); } function createHintH(type, text, container) { if(type = "intro") tclass = "introd"; $('#'+container).prepend('

'+text+'


'); } function createHint(type, text, container) { var fe, tclass; if(type == "intro") { fe = ''; tclass = "intro-hint"; } else if(type == "info") { fe = '
Information
'; tclass = "info-hint"; } else if(type == "wizard") { fe = '
Information
'; tclass = "wizard-hint"; } else if(type == "warning") { fe = '
Information
'; tclass = "warning-hint"; } if(fe == "") $('#'+container).prepend('
'+text+'
'); else { createTable('','htb',container, true, tclass); $('#'+container+' .htb').append(createTableRow([fe ,text],false,true)); } } function valValue(id,value,min,max) { //TODO: Do not use parser, all values are now typeof number value = parseInt(value) if(typeof value === 'number') { if(typeof max === 'undefined' || max == "") max = 999999; if(value > max) { $('#'+id).val(max); showInfoDialog("warning","",$.i18n('edt_msg_error_maximum_incl',max)); return max; } else if(value < min) { $('#'+id).val(min); showInfoDialog("warning","",$.i18n('edt_msg_error_minimum_incl',min)); return min; } return value; } return value; } function readImg(input,cb) { if (input.files && input.files[0]) { var reader = new FileReader(); reader.onload = function (e) { var i = new Image(); i.src = e.target.result; cb(i.src,i.width,i.height); } reader.readAsDataURL(input.files[0]); } } function isJsonString(str) { try { JSON.parse(str); } catch (e) { return e; } return ""; } function createJsonEditor(container,schema,setconfig,usePanel) { $('#'+container).off(); $('#'+container).html(""); var editor = new JSONEditor(document.getElementById(container), { theme: 'bootstrap3', iconlib: "fontawesome4", disable_collapse: 'true', form_name_root: 'sa', disable_edit_json: 'true', disable_properties: 'true', disable_array_reorder: 'true', no_additional_properties: 'true', disable_array_delete_all_rows: 'true', disable_array_delete_last_row: 'true', access: storedAccess, schema: { title:'', properties: schema } }); if(usePanel) { $('#'+container+' .well').first().removeClass('well well-sm'); $('#'+container+' h4').remove(); $('#'+container+' .well').first().removeClass('well well-sm'); } if (setconfig) { for(var key in editor.root.editors) { editor.getEditor("root."+key).setValue( serverConfig[key] ); } } return editor; } function rgbToHex(rgb) { if(rgb.length == 3) { return "#" + ("0" + parseInt(rgb[0],10).toString(16)).slice(-2) + ("0" + parseInt(rgb[1],10).toString(16)).slice(-2) + ("0" + parseInt(rgb[2],10).toString(16)).slice(-2); } else debugMessage('rgbToHex: Given rgb is no array or has wrong length'); } function createCP(id, color, cb) { if(Array.isArray(color)) color = rgbToHex(color); else if(color == "undefined") color = "#AA3399"; if(color.startsWith("#")) { $('#'+id).colorpicker({ format: 'rgb', customClass: 'colorpicker-2x', color: color, sliders: { saturation: { maxLeft: 200, maxTop: 200 }, hue: { maxTop: 200 }, } }); $('#'+id).colorpicker().on('changeColor', function(e) { rgb = e.color.toRGB(); hex = e.color.toHex(); cb(rgb,hex,e); }); } else debugMessage('createCP: Given color is not legit'); } // Creates a table with thead and tbody ids // @param string hid : a class for thead // @param string bid : a class for tbody // @param string cont : a container id to html() the table // @param string bless: if true the table is borderless function createTable(hid, bid, cont, bless, tclass) { var table = document.createElement('table'); var thead = document.createElement('thead'); var tbody = document.createElement('tbody'); table.className = "table"; if(bless === true) table.className += " borderless"; if(typeof tclass !== "undefined") table.className += " "+tclass; table.style.marginBottom = "0px"; if(hid != "") thead.className = hid; tbody.className = bid; if(hid != "") table.appendChild(thead); table.appendChild(tbody); $('#'+cont).append(table); } // Creates a table row // @param array list :innerHTML content for / // @param bool head :if null or false it's body // @param bool align :if null or false no alignment // // @return : with or as child(s) function createTableRow(list, head, align) { var row = document.createElement('tr'); for(var i = 0; i < list.length; i++) { if(head === true) var el = document.createElement('th'); else var el = document.createElement('td'); if(align) el.style.verticalAlign = "middle"; el.innerHTML = list[i]; row.appendChild(el); } return row; } function createRow(id) { var el = document.createElement('div'); el.className = "row"; el.setAttribute('id', id); return el; } function createOptPanel(phicon, phead, bodyid, footerid) { phead = ''+phead; pfooter = document.createElement('button'); pfooter.className = "btn btn-primary"; pfooter.setAttribute("id", footerid); pfooter.innerHTML = ''+$.i18n('general_button_savesettings'); return createPanel(phead, "", pfooter, "panel-default", bodyid); } function sortProperties(list) { for(key in list) { list[key].key = key; } list = $.map(list, function(value, index) { return [value]; }); return list.sort(function(a,b) { return a.propertyOrder - b.propertyOrder; }); } function createHelpTable(list, phead){ var table = document.createElement('table'); var thead = document.createElement('thead'); var tbody = document.createElement('tbody'); list = sortProperties(list); phead = ''+phead+' '+$.i18n("conf_helptable_expl"); table.className = 'table table-hover borderless'; thead.appendChild(createTableRow([$.i18n('conf_helptable_option'), $.i18n('conf_helptable_expl')], true, false)); for (key in list) { if(list[key].access != 'system') { var text = list[key].title.replace('title', 'expl'); tbody.appendChild(createTableRow([$.i18n(list[key].title), $.i18n(text)], false, false)); if(list[key].items && list[key].items.properties) { var ilist = sortProperties(list[key].items.properties); for (ikey in ilist) { var itext = ilist[ikey].title.replace('title', 'expl'); tbody.appendChild(createTableRow([$.i18n(ilist[ikey].title), $.i18n(itext)], false, false)); } } } } table.appendChild(thead); table.appendChild(tbody); return createPanel(phead, table); } function createPanel(head, body, footer, type, bodyid){ var cont = document.createElement('div'); var p = document.createElement('div'); var phead = document.createElement('div'); var pbody = document.createElement('div'); var pfooter = document.createElement('div'); cont.className = "col-lg-6"; if(typeof type == 'undefined') type = 'panel-default'; p.className = 'panel '+type; phead.className = 'panel-heading'; pbody.className = 'panel-body'; pfooter.className = 'panel-footer'; phead.innerHTML = head; if(typeof bodyid != 'undefined') { pfooter.style.textAlign = 'right'; pbody.setAttribute("id", bodyid) } if(typeof body != 'undefined' && body != "") pbody.appendChild(body); if(typeof footer != 'undefined') pfooter.appendChild(footer); p.appendChild(phead); p.appendChild(pbody); if(typeof footer != 'undefined') { pfooter.style.textAlign = "right"; p.appendChild(pfooter); } cont.appendChild(p); return cont; } function createSelGroup(group) { var el = document.createElement('optgroup'); el.setAttribute('label', group); return el; } function createSelOpt(opt, title) { var el = document.createElement('option'); el.setAttribute('value', opt); if (typeof title == 'undefined') el.innerHTML = opt; else el.innerHTML = title; return el; } function createSel(array, group) { if (array.length != "0") { var el = createSelGroup(group); for(var i=0; i