fhemweb_iconSwitch.js 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. FW_version["fhemweb_iconSwitch.js"] = "$Id: fhemweb_iconSwitch.js 15404 2017-11-06 14:47:33Z Ellert $";
  2. FW_widgets['iconSwitch'] = {
  3. createFn:FW_iconSwitchCreate,
  4. };
  5. /********* iconSwitch *********/
  6. function
  7. FW_iconSwitchCreate(elName, devName, vArr, currVal, set, params, cmd)
  8. {
  9. if( 0 ) {
  10. console.log( "elName: "+elName );
  11. console.log( "devName: "+devName );
  12. console.log( "vArr: "+vArr );
  13. console.log( "currVal: "+currVal );
  14. console.log( "set: "+set );
  15. console.log( "params: "+params );
  16. console.log( "cmd: "+cmd );
  17. }
  18. if(vArr.length<1 || vArr[0] != "iconSwitch")
  19. return undefined;
  20. var newEl = $("<div style='display:inline-block;'>").get(0);
  21. var ipar = 2;
  22. var iconclass = "";
  23. if(vArr[1].match(/class.*?@/)) {
  24. var m = vArr[1].match(/class(.*?)@/);
  25. iconclass = m && m[1] ? m[1] : "";
  26. vArr[1] = vArr[1].replace(/class.*?@/,"");
  27. }
  28. for( var i = 1; i < (vArr.length); i+=ipar ) {
  29. vArr[i] = vArr[i].replace(/#/g," ");
  30. }
  31. var hidden;
  32. if(elName)
  33. hidden = $('<input type="hidden" name="'+elName+'" value="'+currVal+'">');
  34. $(newEl).append(hidden);
  35. var button = $('<input type="checkbox">').uniqueId();
  36. var label = $('<label for="'+button.attr("id")+'">');
  37. $(newEl).append(button);
  38. $(newEl).append(label);
  39. button.button();
  40. $(newEl).change(function(arg) { var new_val = newEl.getValueFn();
  41. newEl.setValueFn( new_val );
  42. if( cmd )
  43. cmd(new_val);
  44. } );
  45. newEl.getValueFn = function(arg){ if( !currVal )
  46. currVal = vArr[1] ? vArr[1] : "???";
  47. var imax = vArr.length - 2;
  48. var istart = 1;
  49. var ilast = 0;
  50. for (var i=1;i < vArr.length-1;i+=ipar) {
  51. if (isNaN(parseFloat(vArr[i])) && currVal === vArr[i] || !isNaN(parseFloat(vArr[i])) && parseFloat(currVal) <= parseFloat(vArr[i])) {
  52. ilast = i;
  53. break;
  54. }
  55. }
  56. if(ilast > 0) {
  57. if(ilast + ipar > imax) {
  58. i = istart;
  59. } else {
  60. i+= ipar;
  61. }
  62. currVal = vArr[i];
  63. return vArr[i];
  64. } else {
  65. currVal = ilast > 0 ? vArr[ilast] : vArr[istart];
  66. return ilast > 0 ? vArr[ilast] : vArr[istart];
  67. }
  68. };
  69. newEl.setValueFn = function(arg){ if( !arg )
  70. arg = vArr[1] ? vArr[1] : "???";
  71. if( hidden )
  72. hidden.attr("value", arg);
  73. $(newEl).find("span").attr("style","padding:0.0em 0.3em;");
  74. $(newEl).find("label").attr("style","background:none; border:none; font-size: inherit;");
  75. var imax = vArr.length - 2, istart = 1, ilast = 0,ico, col;
  76. for (var i=1;i < vArr.length-1;i+=ipar) {
  77. if (isNaN(parseFloat(vArr[i])) && arg === vArr[i] || !isNaN(parseFloat(vArr[i])) && parseFloat(arg) <= parseFloat(vArr[i])) {
  78. ilast = i;
  79. break;
  80. }
  81. }
  82. if(ilast > 0) {
  83. if(ilast + ipar > imax) {
  84. i = istart;
  85. } else {
  86. i += ipar;
  87. }
  88. if (vArr[i+1] && vArr[i+1].indexOf("@") == 0) { //text only with color
  89. col = vArr[i+1].replace(/@/,'');
  90. if( col.match(/^[A-F0-9]{6}$/i))
  91. col = "#"+col;
  92. $(newEl).find("span").html(vArr[i]+"")
  93. .attr("style","color: "+col+" !important; padding:0.0em 0.3em ")
  94. .attr("title",arg);
  95. $(newEl).find("label").attr("style","border-style:solid; background-color:#f6f6f6; background-image:none; font-size: inherit;");
  96. } else if( vArr[i+1] && vArr[i+1].indexOf("@") == -1) { //text or image no color
  97. ico = vArr[i+1];
  98. FW_cmd(FW_root+"?cmd={FW_makeImage('"+ico+"','"+arg+"',"+(iconclass.length > 0 ? "'"+iconclass+"'" :'')+")}&XHR=1",function(data){
  99. data = data.replace(/\n$/,'');
  100. $(newEl).find("span").html(data+"")
  101. .attr("title",arg);
  102. if (data.indexOf("<svg") == -1 && data.indexOf("<img") == -1)
  103. $(newEl).find("label").attr("style","border-style:solid; background-color:#f6f6f6; background-image:none;font-size: inherit;");
  104. });
  105. } else if (vArr[i+1] && vArr[i+1].indexOf("@") > 0) { //text or image with color
  106. ico = vArr[i+1].split("@");
  107. if( ico[1] && ico[1].match(/^[A-F0-9]{6}$/i))
  108. ico[1] = "#"+ico[1];
  109. FW_cmd(FW_root+"?cmd={FW_makeImage('"+vArr[i+1]+"','"+arg+"',"+(iconclass.length > 0 ? "'"+iconclass+"'" :'')+")}&XHR=1",function(data){
  110. data = data.replace(/\n$/,'');
  111. $(newEl).find("span").html((vArr[i+1] == data ? ico[0] : data )+"")
  112. .attr("title",arg)
  113. .attr("style","color: "+ico[1]+" !important; padding:0.0em 0.3em");
  114. if (data.indexOf("<svg") == -1 && data.indexOf("<img") == -1)
  115. $(newEl).find("label").attr("style","border-style:solid; background-color:#f6f6f6; background-image:none;font-size: inherit;");
  116. });
  117. } else { // text only
  118. $(newEl).find("span").html(vArr[i])
  119. .attr("title", arg);
  120. $(newEl).find("label").attr("style","border-style:solid; background-color:#f6f6f6; background-image:none;font-size: inherit;");
  121. }
  122. }
  123. button.button("refresh");
  124. };
  125. newEl.setValueFn( currVal );
  126. return newEl;
  127. }
  128. /*
  129. =pod
  130. =begin html
  131. =end html
  132. =begin html_DE
  133. =end html_DE
  134. =cut
  135. */