fhemweb_uzsu.js 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706
  1. FW_version["fhemweb_uzsu.js"] = "$Id: fhemweb_uzsu.js 15190 2017-10-03 18:10:45Z justme1968 $";
  2. FW_widgets['uzsuToggle'] = {
  3. createFn:FW_uzsuToggleCreate,
  4. };
  5. FW_widgets['uzsuSelect'] = {
  6. createFn:FW_uzsuSelectCreate,
  7. };
  8. FW_widgets['uzsuSelectRadio'] = {
  9. createFn:FW_uzsuSelectRadioCreate,
  10. };
  11. FW_widgets['uzsuDropDown'] = {
  12. createFn:FW_uzsuDropDownCreate,
  13. };
  14. FW_widgets['uzsuTimerEntry'] = {
  15. createFn:FW_uzsuTimerEntryCreate,
  16. };
  17. FW_widgets['uzsuList'] = {
  18. createFn:FW_uzsuListCreate,
  19. };
  20. FW_widgets['uzsu'] = {
  21. createFn:FW_uzsuCreate,
  22. };
  23. function
  24. FW_uzsuDropDownCreate(elName, devName, vArr, currVal, set, params, cmd)
  25. {
  26. if( 0 ) {
  27. console.log( "elName: "+elName );
  28. console.log( "devName: "+devName );
  29. console.log( "vArr: "+vArr );
  30. console.log( "currVal: "+currVal );
  31. console.log( "set: "+set );
  32. console.log( "params: "+params );
  33. console.log( "cmd: "+cmd );
  34. }
  35. if(!vArr.length || vArr[0] != "uzsuDropDown")
  36. return undefined;
  37. //vArr[0] = 'time';
  38. //return FW_createTime(elName, devName, vArr, currVal, set, params, cmd);
  39. var newEl = $("<div style='display:inline-block;margin:2px 4px 2px 0px;'>").get(0);
  40. if( vArr[1] === undefined )
  41. vArr = ["select",
  42. "00:00","01:00","02:00","03:00","04:00","05:00","06:00","07:00","08:00","09:00",
  43. "10:00","11:00","12:00","13:00","14:00","15:00","16:00","17:00","18:00","19:00",
  44. "20:00","21:00","22:00","23:00"];
  45. else
  46. vArr[0] = 'select';
  47. $(newEl).append( FW_createSelect(elName, devName, vArr, currVal, set, params, cmd) );
  48. var select = $(newEl).find("select");
  49. select.selectmenu();
  50. select.selectmenu( "option", "width", "auto" );
  51. select.selectmenu( { change: function( event, data ) {
  52. if( cmd )
  53. cmd(data.item.value);
  54. }
  55. });
  56. newEl.getValueFn = function(arg){ return select.val(); };
  57. newEl.setValueFn = function(arg){
  58. select.val(arg);
  59. select.selectmenu("refresh");
  60. }
  61. //newEl.setValueFn(currVal);
  62. return newEl;
  63. }
  64. function
  65. FW_uzsuSelectCreate(elName, devName, vArr, currVal, set, params, cmd)
  66. {
  67. if( 0 ) {
  68. console.log( "elName: "+elName );
  69. console.log( "devName: "+devName );
  70. console.log( "vArr: "+vArr );
  71. console.log( "currVal: "+currVal );
  72. console.log( "set: "+set );
  73. console.log( "params: "+params );
  74. console.log( "cmd: "+cmd );
  75. }
  76. if(!vArr.length || vArr[0] != "uzsuSelect")
  77. return undefined;
  78. var newEl = $("<div style='display:inline-block;'>").get(0);
  79. $(newEl).addClass(vArr[0]);
  80. var hidden;
  81. if(elName)
  82. hidden = $('<input type="hidden" name="'+elName+'" value="'+currVal+'">');
  83. $(newEl).append(hidden);
  84. var clicked = function(arg) { var new_val=newEl.getValueFn(arg);
  85. newEl.setValueFn( new_val );
  86. if( cmd )
  87. cmd(new_val);
  88. };
  89. var buttons = [];
  90. for( var i = 1; i < vArr.length; ++i ) {
  91. var button = $('<input type="checkbox">').uniqueId();
  92. var label = $('<label for="'+button.attr("id")+'">'+vArr[i]+'</label>');
  93. buttons.push(button);
  94. $(newEl).append(button);
  95. $(newEl).append(label);
  96. $(button).change(clicked);
  97. }
  98. $(newEl).buttonset();
  99. if( !currVal )
  100. currVal = ",";
  101. newEl.getValueFn = function(arg) { var new_val="";
  102. for( var i = 0; i < buttons.length; ++i ) {
  103. var button = buttons[i];
  104. if( $(button).prop("checked") ) {
  105. if( new_val ) new_val += ',';
  106. new_val += $(button).button( "option", "label")
  107. }
  108. }
  109. if( !new_val ) return ',';
  110. return new_val;
  111. };
  112. newEl.setValueFn = function(arg){ if( !arg ) arg = ',';
  113. if( hidden )
  114. hidden.attr("value", arg);
  115. for( var i = 0; i < buttons.length; ++i ) {
  116. var button = buttons[i];
  117. button.prop("checked", arg.match(new RegExp('(^|,)'+vArr[i+1]+'($|,)') ) );
  118. button.button("refresh");
  119. }
  120. };
  121. newEl.setValueFn( currVal );
  122. return newEl;
  123. }
  124. function
  125. FW_uzsuSelectRadioCreate(elName, devName, vArr, currVal, set, params, cmd)
  126. {
  127. if( 0 ) {
  128. console.log( "elName: "+elName );
  129. console.log( "devName: "+devName );
  130. console.log( "vArr: "+vArr );
  131. console.log( "currVal: "+currVal );
  132. console.log( "set: "+set );
  133. console.log( "params: "+params );
  134. console.log( "cmd: "+cmd );
  135. }
  136. if(!vArr.length || vArr[0] != "uzsuSelectRadio")
  137. return undefined;
  138. var newEl = $("<div style='display:inline-block;'>").get(0);
  139. $(newEl).addClass(vArr[0]);
  140. var hidden;
  141. if(elName)
  142. hidden = $('<input type="hidden" name="'+elName+'" value="'+currVal+'">');
  143. $(newEl).append(hidden);
  144. var clicked = function(arg) { var new_val=newEl.getValueFn(arg);
  145. newEl.setValueFn( new_val );
  146. if( cmd )
  147. cmd(new_val);
  148. };
  149. var buttons = [];
  150. for( var i = 1; i < vArr.length; ++i ) {
  151. var button = $('<input type="radio" name="radio">').uniqueId();
  152. var label = $('<label for="'+button.attr("id")+'">'+vArr[i]+'</label>');
  153. buttons.push(button);
  154. $(newEl).append(button);
  155. $(newEl).append(label);
  156. $(button).change(clicked);
  157. if( currVal )
  158. button.prop("checked", currVal == vArr[i] );
  159. }
  160. $(newEl).buttonset();
  161. if( !currVal )
  162. currVal = ",";
  163. newEl.getValueFn = function(arg) { var new_val="";
  164. for( var i = 0; i < buttons.length; ++i ) {
  165. var button = buttons[i];
  166. if( $(button).prop("checked") ) {
  167. if( new_val ) new_val += ',';
  168. new_val += $(button).button( "option", "label")
  169. }
  170. }
  171. if( !new_val ) return ',';
  172. return new_val;
  173. };
  174. newEl.setValueFn = function(arg){ if( !arg ) arg = ',';
  175. if( hidden )
  176. hidden.attr("value", arg);
  177. for( var i = 0; i < buttons.length; ++i ) {
  178. var button = buttons[i];
  179. button.prop("checked", (arg == vArr[i+1]) );
  180. button.button("refresh");
  181. }
  182. };
  183. newEl.setValueFn( currVal );
  184. return newEl;
  185. }
  186. function
  187. FW_uzsuToggleCreate(elName, devName, vArr, currVal, set, params, cmd)
  188. {
  189. if( 0 ) {
  190. console.log( "elName: "+elName );
  191. console.log( "devName: "+devName );
  192. console.log( "vArr: "+vArr );
  193. console.log( "currVal: "+currVal );
  194. console.log( "set: "+set );
  195. console.log( "params: "+params );
  196. console.log( "cmd: "+cmd );
  197. }
  198. if(vArr.length<3 || vArr[0] != "uzsuToggle")
  199. return undefined;
  200. var newEl = $("<div style='display:inline-block;'>").get(0);
  201. $(newEl).addClass(vArr[0]);
  202. var hidden;
  203. if(elName)
  204. hidden = $('<input type="hidden" name="'+elName+'" value="'+currVal+'">');
  205. $(newEl).append(hidden);
  206. var button = $('<input type="checkbox">').uniqueId();
  207. var label = $('<label for="'+button.attr("id")+'"></label>');
  208. $(newEl).append(button);
  209. $(newEl).append(label);
  210. button.button();
  211. $(newEl).change(function(arg) { var new_val = newEl.getValueFn();
  212. newEl.setValueFn( new_val );
  213. if( cmd )
  214. cmd(new_val);
  215. } );
  216. newEl.getValueFn = function(arg){ return button.prop("checked")?vArr[2]:vArr[1]; };
  217. newEl.setValueFn = function(arg){ if( !arg )
  218. arg = vArr[1];
  219. if( hidden )
  220. hidden.attr("value", arg);
  221. button.button( "option", "label", arg);
  222. button.prop("checked", arg.match(new RegExp('(^|,)'+vArr[2]+'($|,)') ) );
  223. button.button("refresh");
  224. };
  225. newEl.setValueFn( currVal );
  226. return newEl;
  227. }
  228. function
  229. FW_uzsuTimerEntryCreate(elName, devName, vArr, currVal, set, params, cmd)
  230. {
  231. if( 0 ) {
  232. console.log( "elName: "+elName );
  233. console.log( "devName: "+devName );
  234. console.log( "vArr: "+vArr );
  235. console.log( "currVal: "+currVal );
  236. console.log( "set: "+set );
  237. console.log( "params: "+params );
  238. console.log( "cmd: "+cmd );
  239. }
  240. if(!vArr.length || vArr[0] != "uzsuTimerEntry")
  241. return undefined;
  242. if( !currVal )
  243. currVal = '';
  244. currVals = currVal.split('|');
  245. if( !currVals[2] );
  246. currVals[2] = "enabled";
  247. var newEl = $("<div style='display:inline-block;'>").get(0);
  248. $(newEl).addClass(vArr[0]);
  249. var hidden;
  250. if(elName)
  251. hidden = $('<input type="hidden" name="'+elName+'" value="'+currVal+'">');
  252. $(newEl).append(hidden);
  253. var changed = function(arg) { $(newEl).change();
  254. if(hidden)
  255. hidden.attr("value", newEl.getValueFn());
  256. if(cmd && newEl.getValueFn)
  257. cmd(newEl.getValueFn())};
  258. var wval;
  259. var wchanged = function(arg) { wval = arg; changed() };
  260. var days = FW_uzsuSelectCreate(undefined, devName+"Days", ["uzsuSelect","Mo","Di","Mi","Do","Fr","Sa","So"],
  261. currVals[0], undefined, params, changed);
  262. $(newEl).append(days); //days.activateFn();
  263. var time = FW_uzsuDropDownCreate(undefined, devName+"Time", ["uzsuDropDown"],
  264. currVals[1], undefined, params, changed);
  265. $(newEl).append(time); //time.activateFn();
  266. var widget;
  267. if( vArr[1] ) {
  268. var vArr = vArr;
  269. var params = vArr.slice(1).join(',').split(',');
  270. var wn = params[0];
  271. FW_callCreateFn(elName+'-'+wn, devName+'-'+wn, params,
  272. currVals[3], undefined, undefined, wchanged,
  273. function(wn, ne) {
  274. widget = ne;
  275. if( widget ) {
  276. if( widget.activateFn )
  277. widget.activateFn();
  278. wval = currVals[3];
  279. if( typeof wval == 'undefined' )
  280. wval = params[1];
  281. if( widget.setValueFn
  282. &&( typeof wval !== 'undefined' ) )
  283. widget.setValueFn(wval);
  284. $(widget).css('margin','0 8px 0 4px');
  285. $(newEl).append(widget)
  286. } else {
  287. var button = $('<button>aktion</button>');
  288. button.button();
  289. button.val(wn);
  290. button.css('margin','0 8px 0 4px');
  291. button.css('height','29px');
  292. button.button("disable");
  293. $(newEl).append(button);
  294. }
  295. });
  296. }
  297. var enabled = FW_uzsuToggleCreate(undefined, devName+"Enabled", ["uzsuToggle","disabled","enabled"],
  298. currVals[2], undefined, params, changed);
  299. $(newEl).append(enabled); //enabled.activateFn();
  300. newEl.getValueFn = function() { var ret = "";
  301. ret += days.getValueFn();
  302. ret += '|';
  303. ret += time.getValueFn();
  304. ret += '|';
  305. ret += enabled.getValueFn();
  306. if( widget
  307. && ( typeof wval !== 'undefined' ) ) {
  308. ret += '|';
  309. ret += wval;
  310. //ret += $(widget).val();
  311. }
  312. return ret;
  313. }
  314. newEl.setValueFn = function(arg){ if( hidden )
  315. hidden.attr("value", arg);
  316. var args = arg.split('|');
  317. days.setValueFn(args[0]);
  318. time.setValueFn(args[1])
  319. enabled.setValueFn(args[2])
  320. wval = args[3];
  321. if( widget && widget.setValueFn
  322. && ( typeof wval !== 'undefined' ) ) {
  323. widget.setValueFn(wval);
  324. }
  325. };
  326. if( currVal )
  327. newEl.setValueFn( currVal );
  328. return newEl;
  329. }
  330. function
  331. FW_uzsuListCreate(elName, devName, vArr, currVal, set, params, cmd)
  332. {
  333. if( 0 ) {
  334. console.log( "elName: "+elName );
  335. console.log( "devName: "+devName );
  336. console.log( "vArr: "+vArr );
  337. console.log( "currVal: "+currVal );
  338. console.log( "set: "+set );
  339. console.log( "params: "+params );
  340. console.log( "cmd: "+cmd );
  341. }
  342. if(!vArr.length || vArr[0] != "uzsuList")
  343. return undefined;
  344. var newEl = $("<div style='display:inline-block;'>").get(0);
  345. $(newEl).addClass(vArr[0]);
  346. var button = $('<button>');
  347. button.addClass("back");
  348. button.button({ icons: { primary: "ui-icon-carat-1-w", }, text: false});
  349. button.css('margin','3px');
  350. button.css('height','18px');
  351. button.hover( function() { $(this).css('background', 'red') }, function() { $(this).css('background', '') });
  352. button.click(function( event ) { event.preventDefault();
  353. var arg = $(this).attr("parent");
  354. FW_cmd(FW_root+"?cmd=get "+devName+" children "+arg+"&XHR=1",children);
  355. });
  356. $(newEl).append(button);
  357. var list = $('<ul>');
  358. list.css('overflow','auto');
  359. list.css('height','250px');
  360. list.css('width','350px');
  361. list.css('margin','0px');
  362. list.css('padding','0px');
  363. list.css('list-style','none');
  364. $(newEl).append(list);
  365. var children = function(data) {
  366. $(list).empty();
  367. var items = data.split(',');
  368. button.attr("parent", items[0]);
  369. for( var i = 1; i < items.length; ++i ) {
  370. var item = $('<li>'+items[i]+'</li>')
  371. item.css('border', '1px solid #ccc');
  372. item.css('background-color', '#222');
  373. item.css('margin', '0.25em');
  374. item.css('padding', '0.5em');
  375. item.hover( function() { $(this).css('background', 'red') }, function() { $(this).css('background', '#222') });
  376. item.click(function( event ) { event.preventDefault();
  377. var arg = $(this).text();
  378. FW_cmd(FW_root+"?cmd=get "+devName+" children "+arg+"&XHR=1",children);
  379. });
  380. $(list).append(item);
  381. }
  382. };
  383. children(currVal);
  384. return newEl;
  385. }
  386. function
  387. FW_uzsuCreate(elName, devName, vArr, currVal, set, params, cmd)
  388. {
  389. if( 0 ) {
  390. console.log( "elName: "+elName );
  391. console.log( "devName: "+devName );
  392. console.log( "vArr: "+vArr );
  393. console.log( "currVal: "+currVal );
  394. console.log( "set: "+set );
  395. console.log( "params: "+params );
  396. console.log( "cmd: "+cmd );
  397. }
  398. if(!vArr.length || vArr[0] != "uzsu")
  399. return undefined;
  400. if( !currVal )
  401. currVal = ",";
  402. var newEl = $("<div style='display:inline-block;'>").get(0);
  403. var hidden;
  404. if(elName)
  405. hidden = $('<input type="hidden" name="'+elName+'" value="'+currVal+'">');
  406. $(newEl).append(hidden);
  407. var toJson = function() { var list = [];
  408. var lines = $(newEl).find(".uzsuSelect");
  409. for( var line = 0; line < lines.length; ++line ) {
  410. var entry = {};
  411. entry['value'] = 'on';
  412. entry['time'] = '10:00';
  413. entry['rrule'] = 'FREQ=WEEKLY;BYDAY='+lines[line].getValueFn();
  414. entry['active'] = true;
  415. list.push(entry);
  416. }
  417. var ret = {};
  418. ret['list'] = list;
  419. ret['active'] = true;
  420. return ret;
  421. }
  422. var changed = function(arg) { var new_val = newEl.getValueFn();
  423. //new_val = JSON.stringify(toJson());
  424. if( hidden )
  425. hidden.attr("value", new_val);
  426. if( cmd )
  427. cmd(new_val);
  428. };
  429. var addLine = function(arg,currVal) {
  430. vArr[0] = 'uzsuTimerEntry';
  431. var entry = FW_uzsuTimerEntryCreate(undefined, devName+"UZSU", vArr,
  432. currVal, undefined, params, changed);
  433. var button = $('<button>');
  434. button.button({ icons: { primary: "ui-icon-plus", }, text: false});
  435. button.css('margin','0 0 0 10px');
  436. button.css('height','29px');
  437. button.click(function( event ) { event.preventDefault();
  438. addLine($(button).parent().index()-(hidden?1:0));
  439. changed();
  440. });
  441. $(entry).append(button);
  442. var button = $('<button>');
  443. button.addClass("trash");
  444. button.button({ icons: { primary: "ui-icon-trash", }, text: false});
  445. button.css('margin','0 0 0 10px');
  446. button.css('height','18px');
  447. button.click(function( event ) { event.preventDefault();
  448. $(button).parent().remove();
  449. if( $(newEl).children().length == 1 )
  450. $(newEl).find(".trash").button("disable");
  451. changed();
  452. });
  453. button.hover( function() { $(this).css('background', 'red') }, function() { $(this).css('background', '') });
  454. $(entry).append(button);
  455. var lines = $(newEl).find(".uzsuTimerEntry");
  456. if( !lines.length )
  457. $(newEl).append(entry);
  458. else
  459. $(entry).insertAfter($(lines[arg]));
  460. if( lines.length == 0 )
  461. $(newEl).find(".trash").button("disable");
  462. else if( lines.length == 1 )
  463. $(newEl).find(".trash").button("enable");
  464. }
  465. addLine(-1);
  466. newEl.getValueFn = function() { var ret = "";
  467. var lines = $(newEl).find(".uzsuTimerEntry");
  468. for( var line = 0; line < lines.length; ++line ) {
  469. if(ret) ret += ' ';
  470. ret += lines[line].getValueFn();
  471. }
  472. return ret;
  473. }
  474. newEl.setValueFn = function(arg){ if( hidden )
  475. hidden.attr("value", arg);
  476. var old_lines = $(newEl).find(".uzsuTimerEntry");
  477. var new_lines = arg.split(' ');
  478. for( var line = 0; line < new_lines.length; ++line ) {
  479. if( line < old_lines.length ) {
  480. old_lines[line].setValueFn(new_lines[line]);
  481. } else {
  482. addLine(line-1, new_lines[line]);
  483. }
  484. }
  485. for( var line = new_lines.length; line < old_lines.length; ++line ) {
  486. $(old_lines[line]).remove();
  487. }
  488. if( new_lines.length == 1 )
  489. $(newEl).find(".trash").button("disable");
  490. };
  491. newEl.setValueFn( currVal );
  492. return newEl;
  493. }
  494. /*
  495. =pod
  496. =begin html
  497. <li>uzsuToggle,state1,state2 - dispay a toggle button with two possible
  498. states. the first is the active state.</li>
  499. <li>uzsuSelect,val1,val2,... - display a button bar with a button per value
  500. from which multiple values can be selected. the result is comma
  501. separated.</li>
  502. <li>uzsuSelectRadio,val1,val2,... - display a button bar with a button per
  503. value from which only one value can be selected.</li>
  504. <li>uzsuDropDown,val1,val2,... - display a dropdown with all values.</li>
  505. <li>uzsuTimerEntry[,modifier2] - combine uzsuSelect, uzsuDropDown and
  506. uzsuToggle into a single line display to select a timer entry. an
  507. optional modifier can be given to select the switching value. see
  508. examples below. the result is a comma separated list of days followed by
  509. a time, an enabled indicator and the switching value all separated by a|.
  510. eg: Mo,Di,Sa,So|00:00|enabled|19.5</li>
  511. <li>uzsu[,modifier2] - combine multiple uzsuTimerEntry widets to allow the
  512. setting of multiple switching times an optional modifier can be given to
  513. select the switching value. see examples below. the result is a space
  514. separeted list of uzsuTimerEntry results. Examples:
  515. <ul>
  516. attr myToggle widgetOverride state:uzsuToggle,123,xyz<br>
  517. attr mySelect widgetOverride state:uzsuSelect,abc,123,456,xyz<br>
  518. attr myTemp widgetOverride state:uzsuDropDown,18,18.5,19,19.5,20,20.5,21,21.5,22,22.5,23<br>
  519. attr myTimerEntry widgetOverride state:uzsuTimerEntry<br>
  520. attr myTimer widgetOverride state:uzsu<br>
  521. <br>
  522. the following gives some examples of for the modifier2 parameter of uzsuTimerEntry and uzsu to
  523. combine the setting of a timer with another widget to select the switching value :
  524. <pre>
  525. ... widgetOverride state:uzsu,slider,0,5,100 -> a slider
  526. ... widgetOverride state:uzsu,uzsuToggle,off,on -> a on/off button
  527. ... widgetOverride state:uzsu,uzsuDropDown,18,19,20,21,22,23 -> a dropDownMenue
  528. ... widgetOverride state:uzsu,knob,min:18,max:24,step:0.5,linecap:round,fgColor:red -> a knob widget
  529. ... widgetOverride state:uzsu,colorpicker -> a colorpicker
  530. ... widgetOverride state:uzsu,colorpicker,CT,2700,50,5000 -> a colortemperature selector
  531. </pre>
  532. </ul>
  533. </li>
  534. =end html
  535. =begin html_DE
  536. <li>uzsuToggle,zust1,zust2 - damit ist es m&ouml;glich mit einem
  537. Toggle-Button zwischen zwei Zust&auml;nden zu w&auml;hlen. Der Erste ist
  538. der aktive Zustand.</li>
  539. <li>uzsuSelect,val1,val2,... - damit ist es m&ouml;gliche in einer
  540. Buttonleiste meherere Werte auszuw&auml;hlen. Das Ergebnis ist
  541. Komma-separiert.</li>
  542. <li>uzsuSelectRadio,val1,val2,... - damit ist es m&ouml;gliche in einer
  543. Buttonleiste einen aus meherere Werten auszuw&auml;hlen.</li>
  544. <li>uzsuDropDown,val1,val2,... - damit ist es m&ouml;gliche mit einem
  545. DropDown Men&uuml; einen der Werte auszuw&auml;hlen.</li>
  546. <li>uzsuTimerEntry[,modifier2] - damit werden je ein uzsuSelect,
  547. uzsuDropDown und uzsuToggle Widget kombiniert um einen Schaltzeitpunkt
  548. auszuw&auml;hlen. &Uuml;ber den optionalen modifier2 kann ein Widget zur
  549. Auswahl des Schaltwertes angegeben werden. Siehe Beispiele unten. Das
  550. Ergebniss is eine komma-separiert Liste von Wochentagen gefolgt vom
  551. Zeitpunkt, eine Aktiv-Indikator und dem Schaltwert, jeweils durch |
  552. abetrennt. Zum Beispiel: Mo,Di,Sa,So|00:00|enabled|19.5</li>
  553. <li>uzsu[,modifier2] - damit werden mehrere uzsuTimerEntry Widets kombiniert
  554. um eine beliebige Anzahl an Schaltzeiten einzugeben. &Uuml;ber den
  555. optionalen modifier2 kann ein Widget zur Auswahl des Schaltwertes
  556. angegeben werden. Siehe Beispiele unten. Das Ergebiss ist eine durch
  557. leerzeichen getrennte Liste von uzsuTimerEntry Ergebnissen.<br>
  558. Beispiele:
  559. <ul>
  560. attr myToggle widgetOverride state:uzsuToggle,123,xyz<br>
  561. attr mySelect widgetOverride state:uzsuSelect,abc,123,456,xyz<br>
  562. attr myTemp widgetOverride
  563. state:uzsuDropDown,18,18.5,19,19.5,20,20.5,21,21.5,22,22.5,23<br>
  564. attr myTimerEntry widgetOverride state:uzsuTimerEntry<br>
  565. attr myTimer widgetOverride state:uzsu<br>
  566. <br>
  567. Im Folgenden wird die Verwendung des modifier2 parameters von
  568. uzsuTimerEntry und uzsu gezeigt um die Auswahl des Schaltzeitpunktes
  569. mit der Auswahl des Schaltwertes zu kombinieren:
  570. <pre>
  571. ... widgetOverride state:uzsu,slider,0,5,100 -> ein slider
  572. ... widgetOverride state:uzsu,uzsuToggle,off,on -> ein on/off button
  573. ... widgetOverride state:uzsu,uzsuDropDown,18,19,20,21,22,23 -> ein dropDownMenue
  574. ... widgetOverride state:uzsu,knob,min:18,max:24,step:0.5,linecap:round,fgColor:red -> ein knob widget
  575. ... widgetOverride state:uzsu,colorpicker -> ein colorpicker
  576. ... widgetOverride state:uzsu,colorpicker,CT,2700,50,5000 -> ein colortemperature slider
  577. </pre>
  578. </ul></li>
  579. =end html_DE
  580. =cut
  581. */