/*************** 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; var isIE = (navigator.appVersion.indexOf("MSIE") > 0); var isiOS = navigator.userAgent.match(/(iPad|iPhone|iPod)/); function log(txt) { if(typeof window.console != "undefined") // IE console.log(txt); } function FW_cmd(arg) /* see also FW_devState */ { var req = new XMLHttpRequest(); req.open("GET", arg, true); req.send(null); req.onreadystatechange = function(){ if(req.readyState == 4) FW_errmsg(req.responseText, 5000); } } function FW_errmsg(txt, timeout) { var errmsg = document.getElementById("errmsg"); if(!errmsg) { if(txt == "") return; errmsg = document.createElement('div'); errmsg.setAttribute("id","errmsg"); document.body.appendChild(errmsg); } if(txt == "") { document.body.removeChild(errmsg); return; } errmsg.innerHTML = txt; if(timeout) setTimeout("FW_errmsg('')", timeout); } function FW_doUpdate() { if(FW_pollConn.readyState == 4 && !FW_leaving) { FW_errmsg("Connection lost, trying a reconnect every 5 seconds.", 4900); 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 l = lines[i]; log("Longpoll: "+(l.length>132 ? l.substring(0,132)+"...("+l.length+")":l)); var d = l.split("<<", 3); // Complete arg if(d.length != 3) continue; var elArr = document.querySelectorAll("[informId='"+d[0]+"']"); for(var k=0; k= 0) cmd = cmd.substring(0, off); if(cmd == sel) { if(off >= 0) value = l[i].substring(off+1); break; } } 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, "\\\\") .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= 0) attr = $(this).attr("attr"); }); var ua={}; if(attr && attr != "") { try { ua=JSON.parse(attr); } catch(e){ FW_errmsg(sname+" Parameter "+e,5000); } } return ua; } // end of script functions ////////////////////////// window.onbeforeunload = function(e) { FW_leaving = 1; return undefined; }