/*************** LONGPOLL START **************/ var FW_pollConn; var FW_curLine; // Number of the next line in FW_pollConn.responseText to parse var FW_widgets = new Object(); // to be filled by fhemweb_*.js var FW_leaving; function FW_cmd(arg) /* see also FW_devState */ { var req = new XMLHttpRequest(); req.open("GET", arg, true); req.send(null); } function FW_doUpdate() { if(FW_pollConn.readyState == 4 && !FW_leaving) { var errdiv = document.createElement('div'); errdiv.innerHTML = "Connection lost, reconnecting in 5 seconds..."; errdiv.setAttribute("id","connect_err"); document.body.appendChild(errdiv); setTimeout("FW_longpoll()", 5000); return; // some problem connecting } if(FW_pollConn.readyState != 3) return; var lines = FW_pollConn.responseText.split("\n"); //Pop the last (maybe empty) line after the last "\n" //We wait until it is complete, i.e. terminated by "\n" lines.pop(); var devs = new Array(); for(var i=FW_curLine; i < lines.length; i++) { var d = lines[i].split("<<", 3); // Complete arg console.log("Got "+lines[i]); if(d.length != 3) continue; var elArr = document.querySelectorAll("[informId='"+d[0]+"']"); for(var k=0; k= 0) cmd = l[i].substring(0, off); if(cmd == sel) { if(off >= 0) value = l[i].substring(off+1); } } var el = document.getElementsByName(elName)[0]; var qFn, qArg; var devName=""; if(elName.indexOf("val.attr")==0) devName = elName.substring(8); if(elName.indexOf("val.set") ==0) devName = elName.substring(7); var o; if(value==undefined) { o = new Object(); o.newEl = document.createElement('input'); o.newEl.type='text'; o.newEl.size=30; o.qFn = 'qArg.setAttribute("value", "%")'; o.qArg = o.newEl; } else { var vArr = value.split(","); for(var w in FW_widgets) { if(FW_widgets[w].selChange) { o = FW_widgets[w].selChange(elName, devName, vArr); if(o) break; } } if(!o) { o = new Object(); o.newEl = document.createElement('select'); for(var j=0; j < vArr.length; j++) { o.newEl.options[j] = new Option(vArr[j], vArr[j]); } o.qFn = 'FW_querySetSelected(qArg, "%")'; o.qArg = o.newEl; } } o.newEl.setAttribute('class', el.getAttribute('class')); o.newEl.setAttribute('name', elName); el.parentNode.replaceChild(o.newEl, el); if((typeof o.qFn == "string")) { if(elName.indexOf("val.attr")==0) FW_queryValue('{AttrVal("'+devName+'","'+sel+'","")}', o.qFn, o.qArg); if(elName.indexOf("val.set")==0) { qArg = o.qArg; eval(o.qFn.replace("%", "")); FW_queryValue('{ReadingsVal("'+devName+'","'+sel+'","")}', o.qFn, o.qArg); } } } /*************** Fill attribute **************/ function FW_queryValue(cmd, qFn, qArg) { var qConn = new XMLHttpRequest(); qConn.onreadystatechange = function() { if(qConn.readyState != 3) return; var qResp = qConn.responseText.replace(/[\r\n]/g, "") .replace(/"/g, "\\\""); eval(qFn.replace("%", qResp)); delete qConn; } qConn.open("GET", document.location.pathname+"?cmd="+cmd+"&XHR=1", true); qConn.send(null); } function FW_querySetSelected(el, val) { if(typeof el == 'string') el = document.getElementById(el); for(var j=0;j