From 83199d8e2a59ce93c0df770d659e730f0f4df7a3 Mon Sep 17 00:00:00 2001 From: rudolfkoenig <> Date: Sat, 1 Oct 2011 10:57:31 +0000 Subject: [PATCH] User requested changes git-svn-id: https://svn.fhem.de/fhem/trunk@1031 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/webfrontend/pgm2/01_FHEMWEB.pm | 219 ++++++++++++-------- fhem/webfrontend/pgm2/style.css | 5 +- fhem/webfrontend/pgm2/style_smallscreen.css | 1 + fhem/webfrontend/pgm2/style_touchpad.css | 1 + 4 files changed, 136 insertions(+), 90 deletions(-) diff --git a/fhem/webfrontend/pgm2/01_FHEMWEB.pm b/fhem/webfrontend/pgm2/01_FHEMWEB.pm index 2f75c6d11..e41b77c25 100755 --- a/fhem/webfrontend/pgm2/01_FHEMWEB.pm +++ b/fhem/webfrontend/pgm2/01_FHEMWEB.pm @@ -12,11 +12,12 @@ sub FW_calcWeblink($$); sub FW_dev2image($); sub FW_digestCgi($); sub FW_doDetail($); +sub FW_dumpFileLog($$); sub FW_fatal($); sub FW_fileList($); sub FW_logWrapper($); sub FW_makeEdit($$$); -sub FW_makeTable($$); +sub FW_makeTable($$@); sub FW_ReadIcons(); sub FW_roomOverview($); sub FW_select($$$); @@ -531,9 +532,9 @@ FW_updateHashes() ############################## sub -FW_makeTable($$) +FW_makeTable($$@) { - my($name, $hash) = (@_); + my($name, $hash, $cmd) = (@_); return if(!$hash || !int(keys %{$hash})); pO " "; @@ -571,6 +572,9 @@ FW_makeTable($$) } } + pH "cmd.$name=$cmd $name $n&detail=$name", $cmd, 1 + if($cmd && !$FW_ss); + pO ""; } @@ -586,11 +590,14 @@ FW_makeSelect($$$) my ($d, $cmd, $list) = @_; return if(!$list || $FW_hiddenroom{input}); my @al = map { s/[:;].*//;$_ } split(" ", $list); - pO FW_submit("cmd.$cmd$d", $cmd) . - " $d" . - FW_hidden("dev.$cmd$d", $d); + + pO ""; + pO FW_hidden("detail", $d); + pO FW_hidden("dev.$cmd$d", $d); + pO FW_submit("cmd.$cmd$d", $cmd) . " $d"; pO FW_select("arg.$cmd$d",\@al,undef); pO FW_textfield("val.$cmd$d", 30); + pO ""; } @@ -612,24 +619,11 @@ FW_doDetail($) pO "Readings" if($defs{$d}{READINGS}); FW_makeTable($d, $defs{$d}{READINGS}); FW_makeSelect($d, "attr", getAllAttr($d)); - FW_makeTable($d, $attr{$d}); + FW_makeTable($d, $attr{$d}, "deleteattr"); if($t eq "FileLog" ) { pO "
"; - my $row = 1; - foreach my $f (FW_fileList($defs{$d}{logfile})) { - my $nr; - foreach my $ln (split(",", AttrVal($d, "logtype", "text"))) { - my ($lt, $name) = split(":", $ln); - $name = $lt if(!$name); - pF " ", ($row&1)?"odd":"even"; - pF "", ($nr ? "" : $f); - pH "cmd=logwrapper $d $lt $f", - "
$name
", 1, "dval"; - pO ""; - $nr++; $row++; - } - } + FW_dumpFileLog($d, 0); pO "
%s
"; } @@ -780,90 +774,106 @@ FW_showRoom() pO "
"; pO "
"; - pO " "; + pO "
"; # Need for equal width of subtables my @list = ($FW_room eq "all" ? keys %defs : keys %{$FW_rooms{$FW_room}}); my $rf = ($FW_room ? "&room=$FW_room" : ""); # stay in the room my $row=1; - foreach my $d (sort @list) { - next if(IsIgnored($d)); - my $type = $defs{$d}{TYPE}; + foreach my $type (sort keys %FW_types) { + next if(!$type || $type eq "weblink"); - my $allSets = " " . getAllSets($d) . " "; - my $hasOnOff = ($allSets =~ m/ on / && $allSets =~ m/ off /); - if(!$hasOnOff) { # Check the eventMap - my $em = AttrVal($d, "eventMap", "") . " "; - $hasOnOff = ($em =~ m/:on / && $em =~ m/:off /); - } + ################# + # Check if there is a device of this type in the room + my @devs = grep { $FW_rooms{$FW_room}{$_} && !IsIgnored($_) } + keys %{$FW_types{$type}}; + next if($FW_room && $FW_room ne "all" && !@devs); - pF " ", ($row&1)?"odd":"even"; + pO " "; + pO " "; } pO "
$type
"; + pO " "; - if($FW_hiddenroom{detail}) { - pO ""; + foreach my $d (sort @devs) { + my $type = $defs{$d}{TYPE}; - } else { - pH "detail=$d", $d, 1, "col1"; + my $allSets = " " . getAllSets($d) . " "; + my $hasOnOff = ($allSets =~ m/ on / && $allSets =~ m/ off /); + if(!$hasOnOff) { # Check the eventMap + my $em = AttrVal($d, "eventMap", "") . " "; + $hasOnOff = ($em =~ m/:on / && $em =~ m/:off /); + } - } + pF " ", ($row&1)?"odd":"even"; - $row++; + if($FW_hiddenroom{detail}) { + pO ""; - my $state = $defs{$d}{STATE}; - $state = "" if(!defined($state)); - my $txt = $state; + } else { + pH "detail=$d", $d, 1, "col1"; - if(defined(AttrVal($d, "showtime", undef))) { - $txt = $defs{$d}{READINGS}{state}{TIME}; + } - } elsif($allSets =~ m/ desired-temp /) { - $txt = ReadingsVal($d, "measured-temp", ""); - $txt =~ s/ .*//; - $txt .= "°" + $row++; - } else { - my $icon; - $icon = FW_dev2image($d); - $txt = "\"$txt\"/" if($icon); + my $state = $defs{$d}{STATE}; + $state = "" if(!defined($state)); + my $txt = $state; - } - - pO ""; + if($hasOnOff) { + pH "cmd.$d=set $d on$rf", ReplaceEventMap($d, "on", 1), 1, "col2"; + pH "cmd.$d=set $d off$rf", ReplaceEventMap($d, "off", 1), 1, "col2"; + + } elsif($allSets =~ m/ desired-temp /) { + $txt = ReadingsVal($d, "measured-temp", ""); + $txt =~ s/ .*//; + $txt = sprintf("%2.1f", int(2*$txt)/2) if($txt =~ m/[0-9.-]/); + my @tv = map { ($_.".0", $_+0.5) } (5..30); + shift(@tv); # 5.0 is not valid + $txt = int($txt*20)/$txt if($txt =~ m/^[0-9].$/); + + pO ""; + } elsif($type eq "FileLog") { + FW_dumpFileLog($d, 1); + + } + } + pO ""; } - pO ""; + pO "
$d
$d
"; - pO ""; - if($hasOnOff) { - pH "cmd.$d=set $d on$rf", ReplaceEventMap($d, "on", 1), 1, "col2"; - pH "cmd.$d=set $d off$rf", ReplaceEventMap($d, "off", 1), 1, "col2"; + if(defined(AttrVal($d, "showtime", undef))) { + $txt = $defs{$d}{READINGS}{state}{TIME}; } elsif($allSets =~ m/ desired-temp /) { $txt = ReadingsVal($d, "measured-temp", ""); $txt =~ s/ .*//; - $txt = sprintf("%2.1f", int(2*$txt)/2) if($txt =~ m/[0-9.-]/); - my @tv = map { ($_.".0", $_+0.5) } (5..30); - shift(@tv); # 5.0 is not valid - $txt = int($txt*20)/$txt if($txt =~ m/^[0-9].$/); + $txt .= "°" + + } else { + my $icon; + $icon = FW_dev2image($d); + $txt = "\"$txt\"/" if($icon); - pO ""; } - pO "
" if(!$FW_ss); - # align needed for FireFox - $txt = "
$txt
" if($FW_ss); - if($hasOnOff) { - pHPlain "cmd.$d=set $d ".($state eq "on" ? "off":"on").$rf, $txt, 0; - } else { - pO $txt; - } - - if(!$FW_ss) { - pO "
". - FW_hidden("arg.$d", "desired-temp") . - FW_hidden("dev.$d", $d) . - FW_select("val.$d", \@tv, ReadingsVal($d, "desired-temp", $txt)) . - "". - FW_submit("cmd.$d", "set"). - "
"; + + pO "
"; + # align needed for FireFox + $txt = "
$txt
" if($FW_ss); + if($hasOnOff) { + pHPlain "cmd.$d=set $d ".($state eq "on" ? "off":"on").$rf, $txt, 0; + } else { + pO $txt; + } + + if(!$FW_ss) { + pO "
". + FW_hidden("arg.$d", "desired-temp") . + FW_hidden("dev.$d", $d) . + FW_select("val.$d", \@tv, ReadingsVal($d, "desired-temp", $txt)) . + "". + FW_submit("cmd.$d", "set"). + "
"; + pO "

"; @@ -879,7 +889,7 @@ FW_showRoom() $defs{$d}{WLTYPE} eq "fileplot" && !AttrVal($d, "fixedrange", undef)) { - pO "
"; + pO "
" if($row > 1); $buttonsDisplayed = 1; FW_zoomLink("zoom=-1", "Zoom-in.png", "zoom in"); FW_zoomLink("zoom=1", "Zoom-out.png","zoom out"); @@ -1487,17 +1497,14 @@ pH(@) pO "" if($td); $link = ($link =~ m,^/,) ? $link : "$FW_ME?$link"; - $class = " class=\"$class\"" if($class); $class = "" if(!defined($class)); + $class = " class=\"$class\"" if($class); - if($FW_ss) { # No pointer change if using onClick - pO "
$txt
"; - - } elsif($FW_tp) { - pO "
$txt
"; + if($FW_ss || $FW_tp) { # No pointer change if using onClick + pO "$txt
"; } else { - pO "$txt"; + pO "$txt"; } pO "" if($td); } @@ -1679,4 +1686,38 @@ FW_makeEdit($$$) pO ""; } +sub +FW_dumpFileLog($$) +{ + my ($d, $oneRow) = @_; + + my $row = 1; + foreach my $f (FW_fileList($defs{$d}{logfile})) { + my $nr; + + if($oneRow) { + pF "", ($row&1)?"odd":"even"; + pF "
$f
"; + } + foreach my $ln (split(",", AttrVal($d, "logtype", "text"))) { + my ($lt, $name) = split(":", $ln); + $name = $lt if(!$name); + if(!$oneRow) { + pF "", ($row&1)?"odd":"even"; + pF "
%s
", ($nr ? "" : $f); + } + pH "cmd=logwrapper $d $lt $f", + "
$name
", 1, "dval"; + if(!$oneRow) { + pO ""; + $row++; + } + $nr++; + } + if($oneRow) { + pO ""; + $row++; + } + } +} 1; diff --git a/fhem/webfrontend/pgm2/style.css b/fhem/webfrontend/pgm2/style.css index 76c9d9318..5de1a6571 100644 --- a/fhem/webfrontend/pgm2/style.css +++ b/fhem/webfrontend/pgm2/style.css @@ -1,11 +1,14 @@ -body { background-color: #FFFFE7; font-family:Arial, sans-serif; font-size:16px;} +body { background-color: #FFFFE7; + font-family:Arial, sans-serif; font-size:16px;} input { font-family:Arial, sans-serif; font-size:16px; } select { font-family:Arial, sans-serif; font-size:16px; } + #logo { position:absolute; top:10px; left:20px; width:140px; } #menu { position:absolute; top:120px;left:20px; width:140px; } #hdr { position:absolute; top:10px; left:180px; } #content { position:absolute; top:50px; left:180px; bottom:20px; right:10px; } +.devType { padding-top:20px; } a { color: #278727; } img { border-style: none; } diff --git a/fhem/webfrontend/pgm2/style_smallscreen.css b/fhem/webfrontend/pgm2/style_smallscreen.css index 222384d8d..a9ef049b4 100644 --- a/fhem/webfrontend/pgm2/style_smallscreen.css +++ b/fhem/webfrontend/pgm2/style_smallscreen.css @@ -10,6 +10,7 @@ select { font-family:Arial, sans-serif; font-size:16px} #hdr { position:absolute; top:40px; left:65px; } #content { position:absolute; top:85px; left: 0px; right: 0px;} +.devType { padding-top:10px; } a { color: #278727; } img { border-style: none; } diff --git a/fhem/webfrontend/pgm2/style_touchpad.css b/fhem/webfrontend/pgm2/style_touchpad.css index c4c454457..ca506ec29 100644 --- a/fhem/webfrontend/pgm2/style_touchpad.css +++ b/fhem/webfrontend/pgm2/style_touchpad.css @@ -9,6 +9,7 @@ select { font-family:Arial, sans-serif; font-size:16px} #hdr { position:absolute; top:10px; left:140px; } #content { position:absolute; top:50px; left:140px; bottom:20px; right:10px; } +.devType { padding-top:20px; } a { color: #278727; } table.block { border:1px solid gray; width: 100%; background: #F8F8E0; }