mirror of https://github.com/arendst/Tasmota.git
62 lines
2.9 KiB
C
62 lines
2.9 KiB
C
const char HTTP_SCRIPT_CONSOL[] PROGMEM =
|
|
"var sn=0,id=0,ft,ltm=%d;" // Scroll position, Get most of weblog initially
|
|
"function l(p){" // Console log and command service
|
|
"var c,o='';"
|
|
"clearTimeout(lt);"
|
|
"clearTimeout(ft);"
|
|
"t=eb('t1');"
|
|
"if(p==1){"
|
|
"c=eb('c1');" // Console command id
|
|
"o='&c1='+encodeURIComponent(c.value);"
|
|
"c.value='';"
|
|
"t.scrollTop=1e8;"
|
|
"sn=t.scrollTop;"
|
|
"}"
|
|
"if(t.scrollTop>=sn){" // User scrolled back so no updates
|
|
"if(x!=null){x.abort();}" // Abort if no response within 2 seconds (happens on restart 1)
|
|
"x=new XMLHttpRequest();"
|
|
"x.onreadystatechange=()=>{"
|
|
"if(x.readyState==4&&x.status==200){"
|
|
"var z,d;"
|
|
"d=x.responseText.split(/}1/);" // Field separator
|
|
"id=d.shift();"
|
|
"if(d.shift()==0){t.value='';}"
|
|
"z=d.shift();"
|
|
"if(z.length>0){t.value+=z;}"
|
|
"t.scrollTop=1e8;"
|
|
"sn=t.scrollTop;"
|
|
"clearTimeout(ft);"
|
|
"lt=setTimeout(l,ltm);" // webrefresh timer....
|
|
"}"
|
|
"};"
|
|
"x.open('GET','cs?c2='+id+o,true);" // Related to Webserver->hasArg("c2") and WebGetArg("c2", stmp, sizeof(stmp))
|
|
"x.send();"
|
|
"ft=setTimeout(l,2e4);" // fail timeout, triggered 20s after asking for XHR
|
|
"}else{"
|
|
"lt=setTimeout(l,ltm);" // webrefresh timer....
|
|
"}"
|
|
"return false;"
|
|
"}"
|
|
"wl(l);" // Load initial console text
|
|
|
|
// Console command history
|
|
"var hc=[],cn=0;" // hc = History commands, cn = Number of history being shown
|
|
"function h(){"
|
|
// "if(!(navigator.maxTouchPoints||'ontouchstart'in document.documentElement)){eb('c1').autocomplete='off';}" // No touch so stop browser autocomplete
|
|
"eb('c1').addEventListener('keydown',e=>{"
|
|
"var b=eb('c1'),c=e.keyCode;" // c1 = Console command id
|
|
"if(38==c||40==c){" // ArrowUp or ArrowDown
|
|
"b.autocomplete='off';" // ArrowUp or ArrowDown must be a keyboard so stop browser autocomplete
|
|
"setTimeout(b=>{" // for best compatibility (chrome) we need to schedule this function
|
|
"b.focus();" // for best compatibility (chrome) we need to (re)focus the input element
|
|
"b.setSelectionRange(1e9,1e9)" // move cursor to the end (hopefully) of the command inserted from history
|
|
"},0,b)"
|
|
"}"
|
|
"38==c?(++cn>hc.length&&(cn=hc.length),b.value=hc[cn-1]||''):" // ArrowUp
|
|
"40==c?(0>--cn&&(cn=0),b.value=hc[cn-1]||''):" // ArrowDown
|
|
"13==c&&(hc.length>19&&hc.pop(),hc.unshift(b.value),cn=0)" // Enter, 19 = Max number -1 of commands in history
|
|
"});"
|
|
"}"
|
|
"wl(h);"; // Add console command key eventlistener after name has been synced with id (= wl(jd))
|
|
|