| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332 |
- //########################################################################################
- // babble.js
- // Version 1.25
- // See 95_Babble for licensing
- //########################################################################################
- //# Prof. Dr. Peter A. Henning
- //------------------------------------------------------------------------------------------------------
- // Determine csrfToken
- //------------------------------------------------------------------------------------------------------
- var req = new XMLHttpRequest();
- req.open('GET', document.location.href, false);
- req.send(null);
- var csrfToken = req.getResponseHeader('X-FHEM-csrfToken');
- if( csrfToken == null ){
- csrfToken = "null";
- }
- //------------------------------------------------------------------------------------------------------
- // encode Parameters for URL
- //------------------------------------------------------------------------------------------------------
- function encodeParm(oldval) {
- var newval;
- newval = oldval.replace(/\$/g, '\\%24');
- newval = newval.replace(/"/g, '%27');
- newval = newval.replace(/#/g, '%23');
- newval = newval.replace(/\+/g, '%2B');
- newval = newval.replace(/&/g, '%26');
- newval = newval.replace(/'/g, '%27');
- newval = newval.replace(/=/g, '%3D');
- newval = newval.replace(/\?/g, '%3F');
- newval = newval.replace(/\|/g, '%7C');
- newval = newval.replace(/\s/g, '%20');
- return newval;
- };
- //------------------------------------------------------------------------------------------------------
- // Add and remove places and verbs
- //------------------------------------------------------------------------------------------------------
- function dialog1(message) {
- $('<div></div>').appendTo('body').html('<div><h6>' + message + '</h6></div>').dialog({
- modal: true, title: 'Babble', zIndex: 10000, autoOpen: true,
- width: 'auto', resizable: false,
- buttons: {
- OK: function () {
- location.reload();
- $(this).dialog("close");
- }
- },
- close: function (event, ui) {
- $(this).remove();
- }
- });
- };
- function babble_addplace(name) {
- var place = document.getElementById('b_newplace').value;
- var location = document.location.pathname;
- if (location.substr(location.length -1, 1) == '/') {
- location = location.substr(0, location.length -1);
- }
- var url = document.location.protocol + "//" + document.location.host + location;
- FW_cmd(url + '?XHR=1&fwcsrf=' + csrfToken + '&cmd.' + name + '={Babble_ModPlace("' + name + '","' + encodeParm(place) + '",1)}');
- dialog1(tt_place + ' ' + place + ' ' + tt_added);
- };
- function babble_modplace(name, place, num) {
- var btn = document.getElementById('b_addplace');
- var divm = document.getElementById('b_chgplacediv');
- var fld = document.getElementById('b_newplace');
- fld.value = place;
- btn.value = tt_remove;
- btn.setAttribute("onclick", "babble_remplace('" + name + "','" + place + "'," + num + ")");
- var btnm = '<input type="button" id="b_canplace" onclick="babble_cancelplace(';
- btnm += "'" + name + "')";
- btnm += '" value="' + tt_cancel + '" style="height:20px; width:100px;"/>';
- divm.innerHTML = btnm;
- };
- function babble_remplace(name, place, num) {
- var location = document.location.pathname;
- if (location.substr(location.length -1, 1) == '/') {
- location = location.substr(0, location.length -1);
- }
- var url = document.location.protocol + "//" + document.location.host + location;
- FW_cmd(url + '?XHR=1&fwcsrf=' + csrfToken + '&cmd.' + name + '={Babble_ModPlace("' + name + '",' + num + ',0)}');
- dialog1(tt_place + ' ' + place + ' ' + tt_removed);
- };
- function babble_cancelplace(name) {
- var btn = document.getElementById('b_addplace');
- var fld = document.getElementById('b_newplace');
- var divm = document.getElementById('b_chgplacediv');
- fld.value = "";
- btn.value = tt_add;
- btn.setAttribute("onclick", "babble_addplace('" + name + "')");
- divm.innerHTML = '';
- }
- function babble_addverb(name) {
- var verbi = document.getElementById('b_newverbi').value;
- var verbc = document.getElementById('b_newverbc').value;
- var location = document.location.pathname;
- if (location.substr(location.length -1, 1) == '/') {
- location = location.substr(0, location.length -1);
- }
- 1
- var url = document.location.protocol + "//" + document.location.host + location;
- FW_cmd(url + '?XHR=1&fwcsrf=' + csrfToken + '&cmd.' + name + '={Babble_ModVerb("' + name + '","' + verbi + '","' + verbc + '",1)}');
- dialog1(tt_verb + ' ' + verbi + ' ' + tt_added);
- };
- function babble_modverb(name, verbi, verbc, num) {
- var btna = document.getElementById('b_addverb');
- var divm = document.getElementById('b_chgverbdiv');
- var fldi = document.getElementById('b_newverbi');
- var fldc = document.getElementById('b_newverbc');
- fldi.value = verbi;
- fldc.value = verbc;
- btna.value = tt_remove;
- btna.setAttribute("onclick", "babble_remverb('" + name + "','" + verbi + "'," + num + ")");
- var btnm = '<input type="button" id="b_chgverb" onclick="babble_chgverb(';
- btnm += "'" + name + "'," + num + ")";
- btnm += '" value="' + tt_modify + '" style="height:20px; width:100px;"/>';
- var btnm2 = '<input type="button" id="b_canverb" onclick="babble_cancelverb(';
- btnm2 += "'" + name + "')";
- btnm2 += '" value="' + tt_cancel + '" style="height:20px; width:100px;"/>';
- divm.innerHTML = btnm + btnm2;
- };
- function babble_remverb(name, verbi, num) {
- var location = document.location.pathname;
- if (location.substr(location.length -1, 1) == '/') {
- location = location.substr(0, location.length -1);
- }
- var url = document.location.protocol + "//" + document.location.host + location;
- FW_cmd(url + '?XHR=1&fwcsrf=' + csrfToken + '&cmd.' + name + '={Babble_ModVerb("' + name + '",' + num + ',"",0)}');
- dialog1(tt_verb + ' ' + verbi + ' ' + tt_removed);
- };
- function babble_chgverb(name, num) {
- var verbi = document.getElementById('b_newverbi').value;
- var verbc = document.getElementById('b_newverbc').value;
- var location = document.location.pathname;
- if (location.substr(location.length -1, 1) == '/') {
- location = location.substr(0, location.length -1);
- }
- 1
- var url = document.location.protocol + "//" + document.location.host + location;
- FW_cmd(url + '?XHR=1&fwcsrf=' + csrfToken + '&cmd.' + name + '={Babble_ModVerb("' + name + '",' + num + ',"' + verbc + '",2)}');
- dialog1(tt_verb + ' ' + verbi + ' ' + tt_modified);
- };
- function babble_cancelverb(name) {
- var btna = document.getElementById('b_addverb');
- var divm = document.getElementById('b_chgverbdiv');
- var fldi = document.getElementById('b_newverbi');
- var fldc = document.getElementById('b_newverbc');
- fldi.value = "";
- fldc.value = "";
- btna.value = tt_add;
- btna.setAttribute("onclick", "babble_addverb('" + name + "')");
- divm.innerHTML = '';
- }
- function babble_addrow(name, devx, rowx) {
- var table = document.getElementById("devstable");
- var rown = 2;
- for (i = 0; i < devx-1; i++) {
- rown += devrows[i];
- }
- var row = table.insertRow(rown)
- devrows[devx -1] = devrows[devx -1] + 1;
- var cell0 = row.insertCell(0);
- var cell1 = row.insertCell(1);
- var cell2 = row.insertCell(2);
- var cell3 = row.insertCell(3);
- var cell4 = row.insertCell(4);
- var cell5 = row.insertCell(5);
- var cell6 = row.insertCell(6);
- var cell7 = row.insertCell(7);
- //copy from existing row if such a row exists
- cell2.innerHTML = newplace;
- cell3.innerHTML = newverbs;
- cell4.innerHTML = newtargs;
- cell5.innerHTML = newfield;
- cell6.innerHTML = newcheck;
- }
- function babble_remrow(name, devx, rowx) {
- var table = document.getElementById("devstable");
- var url = document.location.protocol + "//" + document.location.host + "/fhem";
- var rown = rowx;
- var rowdev = 1;
- for (i = 0; i < devx -1; i++) {
- rowdev += devrows[i];
- }
- devrows[devx -1] = devrows[devx -1] -1;
- var bdev = table.rows[rowdev].cells[1].textContent;
- var place = '';
- var verb = '';
- var target = '';
- var cmd = '';
- var selector;
- var selectedanswer;
- //
- selector = table.rows[rown].cells[2].getElementsByTagName("select")[0];
- if( selector ){
- selectedanswer = selector.selectedIndex;
- place = selector.getElementsByTagName("option")[selectedanswer].value;
- }else{
- place = "none";
- }
- //
- selector = table.rows[rown].cells[3].getElementsByTagName("select")[0];
- if( selector ){
- selectedanswer = selector.selectedIndex;
- verb = selector.getElementsByTagName("option")[selectedanswer].value;
- }else{
- verb = "none";
- }
- //
- selector = table.rows[rown].cells[4].getElementsByTagName("select")[0];
- if( selector ){
- selectedanswer = selector.selectedIndex;
- target = selector.getElementsByTagName("option")[selectedanswer].value;
- }else{
- target = "none";
- }
- //
- cmd = '{Babble_RemCmd("' + name + '","' + bdev + '","' + place + '","' + verb + '","' + target + '")}';
- FW_cmd(url + '?XHR=1&fwcsrf=' + csrfToken + '&cmd.' + name + '=' + cmd);
- table.deleteRow(rown);
- }
- function babble_savedevs(name) {
- var table = document.getElementById("devstable");
- var url = document.location.protocol + "//" + document.location.host + "/fhem";
- for (idev = 1; idev <= devrows.length; idev++) {
- var rowdev = 1;
- for (ip = 0; ip < idev -1; ip++) {
- rowdev += devrows[ip];
- }
- var fhemdev = table.rows[rowdev].cells[0].textContent;
- var bdev = table.rows[rowdev].cells[1].textContent;
- var place = '';
- var verb = '';
- var target = '';
- var cmd = '';
- var selector;
- var selectedanswer;
- var field;
- // Help text
- field = table.rows[rowdev].cells[3].getElementsByTagName("input")[0];
- cmd = field.value;
- cmd = '{Babble_ModHlp("' + name + '","' + bdev + '","' + encodeParm(cmd) + '")}';
- FW_cmd(url + '?XHR=1&fwcsrf=' + csrfToken + '&cmd.' + name + '=' + cmd);
- // Command lines
- for (j = 1; j < devrows[idev -1]; j++) {
- //
- selector = table.rows[rowdev + j].cells[2].getElementsByTagName("select")[0];
- if( selector ){
- selectedanswer = selector.selectedIndex;
- place = selector.getElementsByTagName("option")[selectedanswer].value;
- }else{
- place = "none";
- }
- //
- selector = table.rows[rowdev + j].cells[3].getElementsByTagName("select")[0];
- if( selector ){
- selectedanswer = selector.selectedIndex;
- verb = selector.getElementsByTagName("option")[selectedanswer].value;
- }else{
- verb = "none";
- }
- //
- selector = table.rows[rowdev + j].cells[4].getElementsByTagName("select")[0];
- if( selector ){
- selectedanswer = selector.selectedIndex;
- target = selector.getElementsByTagName("option")[selectedanswer].value;
- }else{
- target = "none"
- }
- //
- field = table.rows[rowdev + j].cells[5].getElementsByTagName("input")[0];
- cmd = field.value;
- //
- field = table.rows[rowdev + j].cells[6].getElementsByTagName("input")[0];
- if( field.checked == true ){
- cmd = cmd + ";;$CONFIRM";
- }
- //
- cmd = '{Babble_ModCmd("' + name + '","' + bdev + '","' + place + '","' + verb + '","' + target + '","' + encodeParm(cmd) + '")}';
- FW_cmd(url + '?XHR=1&fwcsrf=' + csrfToken + '&cmd.' + name + '=' + cmd);
- }
- };
- FW_cmd(url + '?XHR=1&fwcsrf=' + csrfToken + '&cmd.' + name + '={Babble_savename("' + name + '")}');
- }
- var httpRequest;
- function babble_testit(name) {
- var sentence = document.getElementById("d_testcommand").value;
- var exec = document.getElementById("b_execit").checked;
- var exflag;
- if( exec ){
- exflag=1;
- }else{
- exflag=0;
- }
- var url = document.location.protocol + "//" + document.location.host + "/fhem";
- var cmd = '{Babble_DoIt("' + name + '","' + encodeParm(sentence) + '","testit",' + exflag + ')}';
-
- httpRequest = new XMLHttpRequest();
- httpRequest.open("GET", url + '?XHR=1&fwcsrf=' + csrfToken + '&cmd.' + name + '=' + cmd, true);
- httpRequest.onreadystatechange = parse;
- httpRequest.send(null);
- };
- function parse () {
- if (httpRequest.readyState != 3) {
- return;
- }
- var lines = httpRequest.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();
- document.getElementById("d_testresult").innerHTML = lines[1];
- }
|