2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-03 16:56:54 +00:00

01_FHEMWEB.pm: optional floating point slider (Forum #27051)

git-svn-id: https://svn.fhem.de/fhem/trunk@6804 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
rudolfkoenig 2014-10-24 08:56:35 +00:00
parent 1233e3055b
commit 602c3b1549
2 changed files with 21 additions and 12 deletions

View File

@ -2439,9 +2439,10 @@ FW_sliderFn($$$$$)
{
my ($FW_wname, $d, $FW_room, $cmd, $values) = @_;
return undef if($values !~ m/^slider,(.*),(.*),(.*)$/);
return undef if($values !~ m/^slider,([\d.]*),([\d.]*),([\d.]*)(,1)?$/);
return "" if($cmd =~ m/ /); # webCmd pct 30 should generate a link
my ($min,$stp, $max) = ($1, $2, $3);
my ($min,$stp, $max, $flt) = ($1, $2, $3, $4);
$flt = ($flt ? 1 : 0);
my $srf = $FW_room ? "&room=$FW_room" : "";
my $cv = ReadingsVal($d, $cmd, Value($d));
my $id = ($cmd eq "state") ? "" : "-$cmd";
@ -2450,7 +2451,7 @@ FW_sliderFn($$$$$)
$cv = 0 if($cv !~ m/\d/);
return "<td colspan='2'>".
"<div class='slider' id='slider.$d$id' min='$min' stp='$stp' ".
"max='$max' cmd='$FW_ME?cmd=set $d $cmd %$srf'>".
"max='$max' cmd='$FW_ME?cmd=set $d $cmd %$srf' flt='$flt'>".
"<div class='handle'>$min</div>".
"</div>".
"<script type=\"text/javascript\">".
@ -3085,8 +3086,10 @@ FW_widgetOverride($$)
displayed.</li>
<li>if the modifier is ":textField", an input field is displayed.</li>
<li>if the modifier is of the form
":slider,&lt;min&gt;,&lt;step&gt;,&lt;max&gt;", then a javascript
driven slider is displayed</li>
":slider,&lt;min&gt;,&lt;step&gt;,&lt;max&gt;[,1]", then a
javascript driven slider is displayed. The optional ,1 at the end
avoids the rounding of floating-point numbers.</li>
<li>if the modifier is of the form ":multiple,val1,val2,...", then
multiple values can be selected and own values can be written, the
result is comma separated.</li>
@ -3651,8 +3654,9 @@ FW_widgetOverride($$)
angezeigt.</li>
<li>Ist der Modifier in der Form
":slider,&lt;min&gt;,&lt;step&gt;,&lt;max&gt;", so wird ein in
JavaScript programmierter Slider angezeigt</li>
":slider,&lt;min&gt;,&lt;step&gt;,&lt;max&gt;[,1]", so wird ein in
JavaScript programmierter Slider angezeigt. Das optionale 1
(isFloat) vermeidet eine Rundung der Fliesskommazahlen </li>
<li>Ist der Modifier ":multiple,val1,val2,...", dann ist eine
Mehrfachauswahl m&ouml;glich und es k&ouml;nnen neue Werte gesetzt

View File

@ -36,6 +36,7 @@ FW_sliderCreate(slider, curr)
var min = parseFloat(slider.getAttribute("min"));
var stp = parseFloat(slider.getAttribute("stp"));
var max = parseFloat(slider.getAttribute("max"));
var flt = parseFloat(slider.getAttribute("flt"));
var cmd = slider.getAttribute("cmd");
function
@ -78,7 +79,8 @@ FW_sliderCreate(slider, curr)
if(offX < 0) offX = 0;
if(offX > maxX) offX = maxX;
val = min+(offX/maxX * (max-min));
val = Math.floor(Math.floor(val/stp)*stp);
val = (flt ? Math.floor(val/stp)*stp :
Math.floor(Math.floor(val/stp)*stp));
sh.innerHTML = val;
sh.setAttribute('style', 'left:'+offX+'px;');
if(cmd && cmd.substring(0,3) == "js:") {
@ -112,17 +114,20 @@ FW_sliderCreate(slider, curr)
function
FW_sliderSelChange(name, devName, vArr)
{
if(vArr.length != 4 || vArr[0] != "slider")
if(vArr.length < 4 || vArr.length > 5 || vArr[0] != "slider")
return undefined;
var o = new Object();
var min=parseFloat(vArr[1]),
stp=parseFloat(vArr[2]),
max=parseFloat(vArr[3]);
max=parseFloat(vArr[3]),
flt=parseFloat(vArr[4]);
if(!flt) flt=0;
o.newEl = document.createElement('div');
o.newEl.innerHTML =
'<div class="slider" id="slider.'+devName+'" min="'+min+'" stp="'+stp+
'" max="'+max+'"><div class="handle">'+min+'</div></div>'+
'<div class="slider" id="slider.'+devName+
'" min="'+min+'" stp="'+stp+'" max="'+max+'" flt="'+flt+
'"><div class="handle">'+min+'</div></div>'+
'<input type="hidden" name="'+name+'" value="'+min+'">';
FW_sliderCreate(o.newEl.firstChild, undefined);