2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-01-31 12:49:34 +00:00

01_FHEMWEB.js: on demoand loading of fhemweb_*.js: move the doc (Forum #76868)

git-svn-id: https://svn.fhem.de/fhem/trunk@15182 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
rudolfkoenig 2017-10-03 10:45:29 +00:00
parent 6c27a37800
commit 356a891dc4
8 changed files with 265 additions and 373 deletions

View File

@ -213,8 +213,6 @@ FHEMWEB_Initialize($)
$FW_fhemwebjs = join(",", map { $_ = ~m/^fhemweb_(.*).js$/; $1 }
grep { /fhemweb_(.*).js$/ }
readdir(DH));
$data{FWEXT}{"readingsGroup" }{SCRIPT} = "fhemweb_readingsGroup.js";
$data{FWEXT}{"readingsHistory"}{SCRIPT} = "fhemweb_readingsHistory.js";
@FW_fhemwebjs = ("fhemweb.js");
closedir(DH);
}
@ -3929,119 +3927,13 @@ FW_widgetOverride($$)
i.e the default http address is http://localhost:8083/fhem
</li><br>
<a name="widgetOverride"></a>
<li>widgetOverride<br>
Space spearate list of name:modifier pairs, to override the widget
Space separated list of name:modifier pairs, to override the widget
for a set/get/attribute specified by the module author.
Following is the list of known modifier:
<ul>
<li>if the modifier is ":noArg", then no further input field is
displayed </li>
<li>if the modifier is ":time", then a javascript driven timepicker is
displayed.</li>
<li>if the modifier is ":textField", an input field is displayed.</li>
<li>if the modifier is ":textFieldNL", an input field without label
is displayed.</li>
<li>if the modifier is ":textField-long", is like textField, but upon
clicking on the input field a textArea (60x25) will be opened.</li>
<li>if the modifier is ":textFieldNL-long", the behaviour is the same
as :textField-long, but no label is displayed.</li>
<li>if the modifier is of the form
":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>
<li>if the modifier is of the form ":multiple-strict,val1,val2,...",
then multiple values can be selected and no new values can be
added, the result is comma separated.</li>
<li>if the modifier is of the form ":knob,min:1,max:100,...", then
the jQuery knob widget will be displayed. The parameters are
specified as a comma separated list of key:value pairs, where key
does not have to contain the "data-" prefix.</li>
<li>if the modifier is of the form ":sortable,val1,val2,...", then
the user can create a new list from the elements of the given
list, can add new elements by entering a text, or delete some from
the list. This new list can be sorted via drag &amp; drop. The
result is a comma separated list. </li>
<li>if the modifier is of the form ":sortable-strict,val1,val2,...",
then it behaves like :sortable, without the possibility to enter
text.</li>
<li>if the modifier is of the form ":sortable-given,val1,val2,...",
then the specified list can be sorted via drag &amp; drop, no
elements can be added or deleted. </li>
<li>if the modifier is of the form ":uzsuToggle,state1,state2",
a toggle button with two possible states is displayed. the first
is the active state.</li>
<li>if the modifier is of the form ":uzsuSelect,val1,val2,...",
a button bar with a button per value is displayed from which
multiple values can be selected. the result is comma separated.</li>
<li>if the modifier is of the form ":uzsuSelectRadio,val1,val2,...",
a button bar with a button per value is displayed from which only
one value can be selected.</li>
<li>if the modifier is of the form ":uzsuDropDown,val1,val2,...",
a dropdown with all values is displayed.</li>
<li>if the modifier is of the form ":uzsuTimerEntry[,modifier2]",
uzsuSelect, uzsuDropDown and uzsuToggle are combined into a single
line display to select a timer entry. an optional modifier can be
given to select the switching value. see examples below.
the result is a comma separated list of days followed by a time,
an enabled indicator and the switching value all separated by a|.
eg: Mo,Di,Sa,So|00:00|enabled|19.5</li>
<li>if the modifier is of the form ":uzsu[,modifier2]",
multiple uzsuTimerEntry widets are combined to allow the setting
of multiple switching times an optional modifier can be
given to select the switching value. see examples below.
the result is a space separeted list of uzsuTimerEntry results.</li>
<li>if the modifier is of the form
":selectnumbers,&lt;min&gt;,&lt;step&gt;,&lt;max&gt;,&lt;number of
digits after decimal point&gt;,lin|log10",a select widget is
generated with values from min to max with step.<br>
lin generates a constantly increasing series. log10 generates an
exponentially increasing series to base 10, step is related to the
exponent, e.g. 0.0625.
</li>
<li>else a dropdown with all the modifier values is displayed</li>
</ul>
If this attribute is specified for a FHEMWEB instance, then it is
applied to all devices shown. Examples:
<ul>
attr FS20dev widgetOverride on-till:time<br>
attr WEB widgetOverride room:textField<br>
attr dimmer widgetOverride
dim:knob,min:1,max:100,step:1,linecap:round<br>
<br>
attr myToggle widgetOverride state:uzsuToggle,123,xyz<br>
attr mySelect widgetOverride state:uzsuSelect,abc,123,456,xyz<br>
attr myTemp widgetOverride state:uzsuDropDown,18,18.5,19,19.5,20,20.5,21,21.5,22,22.5,23<br>
attr myTimerEntry widgetOverride state:uzsuTimerEntry<br>
attr myTimer widgetOverride state:uzsu<br>
<br>
the following gives some examples of for the modifier2 parameter of uzsuTimerEntry and uzsu to
combine the setting of a timer with another widget to select the switching value :
<pre>
... widgetOverride state:uzsu,slider,0,5,100 -> a slider
... widgetOverride state:uzsu,uzsuToggle,off,on -> a on/off button
... widgetOverride state:uzsu,uzsuDropDown,18,19,20,21,22,23 -> a dropDownMenue
... widgetOverride state:uzsu,knob,min:18,max:24,step:0.5,linecap:round,fgColor:red -> a knob widget
... widgetOverride state:uzsu,colorpicker -> a colorpicker
... widgetOverride state:uzsu,colorpicker,CT,2700,50,5000 -> a colortemperature selector
</pre>
<!-- INSERT_DOC_FROM: www/pgm2/fhemweb.*.js -->
</ul>
</li>
<br>
@ -4718,145 +4610,11 @@ FW_widgetOverride($$)
<li>widgetOverride<br>
Leerzeichen separierte Liste von Name/Modifier Paaren, mit dem man den
vom Modulautor f&uuml;r einen bestimmten Parameter (Set/Get/Attribut)
vorgesehene Widgets &auml;ndern kann.
vorgesehene Widgets &auml;ndern kann. Folgendes ist die Liste der
bekannten Modifier:
<ul>
<li>Ist der Modifier ":noArg", wird kein weiteres Eingabefeld
angezeigt.</li>
<li>Ist der Modifier ":time", wird ein in Javaskript geschreibenes
Zeitauswahlmen&uuml; angezeigt.</li>
<li>Ist der Modifier ":textField", wird ein Eingabefeld
angezeigt.</li>
<li>Ist der Modified ":textField-long" ist wie textField, aber beim
Click im Eingabefeld ein Dialog mit einer HTML textarea
(60x25) wird ge&ouml;ffnet.</li>
<li>Ist der Modifier in der Form
":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
werden. Das Ergebnis ist Komma-separiert.</li>
<li>Ist der Modifier ":multiple-strict,val1,val2,...", dann ist eine
Mehrfachauswahl m&ouml;glich, es k&ouml;nnen jedoch keine neuen
Werte definiert werden. Das Ergebnis ist Komma-separiert.</li>
<li>Ist der Modifier ":knob,min:1,max:100,...", dass ein
jQuery knob Widget wird angezeigt. Die Parameter werden als eine
Komma separierte Liste von Key:Value Paaren spezifiziert, wobei das
data- Pr&auml;fix entf&auml;llt. </li>
<li>Ist der Modifier ":sortable,val1,val2,...", dann ist es
m&ouml;glich aus den gegebenen Werten eine Liste der
gew&uuml;nschten Werte durch Drag &amp; Drop zusammenzustellen. Die
Reihenfolge der Werte kann dabei entsprechend ge&auml;ndert werden.
Es m&uuml;ssen keine Werte explizit vorgegeben werden, das Widget
kann auch ohne vorgegebenen Werte benutzt werden. Es k&ouml;nnen
eigene Werte zur Liste hinzugef&uuml;gt und einsortiert werden.
Das Ergebnis ist Komma-separiert entsprechend aufsteigend
sortiert.</li>
<li>Ist der Modifier ":sortable-strict,val1,val2,...", dann ist es
m&ouml;glich aus den gegebenen Werten eine Liste der
gew&uuml;nschten Werte durch Drag &amp; Drop zusammenzustellen. Die
Reihenfolge der Werte kann dabei entsprechend ge&auml;ndert werden.
Es k&ouml;nnen jedoch keine eigenen Werte zur Liste
hinzugef&uuml;gt werden. Das Ergebnis ist Komma-separiert
entsprechend aufsteigend sortiert.</li>
<li>Ist der Modifier ":sortable-given,val1,val2,...", dann ist es
m&ouml;glich aus den gegebenen Werten eine sortierte Liste der
gew&uuml;nschten Werte durch Drag & Drop zusammenzustellen. Es
k&ouml;nnen keine Elemente gel&ouml;scht und hinzugef&uuml;gt
werden. Es m&uuml;ssen alle gegeben Werte benutzt und entsprechend
sortiert sein. Das Ergebnis ist Komma-separiert entsprechend
aufsteigend sortiert.</li>
<li>Ist der Modifier ":uzsuToggle,zust1,zust2", dann ist es
m&ouml;gliche mit einem Toggle-Button zwischen zwei
Zust&auml;nden zu w&auml;hlen. Der Erste ist der aktive Zustand.</li>
<li>Ist der Modifier ":uzsuSelect,val1,val2,...", dann ist es
m&ouml;gliche in einer Buttonleiste meherere Werte auszuw&auml;hlen.
Das Ergebnis ist Komma-separiert.</li>
<li>Ist der Modifier ":uzsuSelectRadio,val1,val2,...", dann ist es
m&ouml;gliche in einer Buttonleiste einen aus meherere Werten
auszuw&auml;hlen.</li>
<li>Ist der Modifier ":uzsuDropDown,val1,val2,...", dann ist es
m&ouml;gliche mit einem DropDown Men&uuml; einen der Werte
auszuw&auml;hlen.</li>
<li>Ist der Modifier ":uzsuTimerEntry[,modifier2]", werden je ein
uzsuSelect, uzsuDropDown und uzsuToggle Widget kombiniert um
einen Schaltzeitpunkt auszuw&auml;hlen. &Uuml;ber den optionalen
modifier2 kann ein Widget zur Auswahl des Schaltwertes angegeben
werden. Siehe Beispiele unten.
Das Ergebniss is eine komma-separiert Liste von Wochentagen gefolgt
vom Zeitpunkt, eine Aktiv-Indikator und dem Schaltwert, jeweils
durch | abetrennt.
Zum Beispiel: Mo,Di,Sa,So|00:00|enabled|19.5</li>
<li>Ist der Modifier ":uzsu[,modifier2]", werden mehere
uzsuTimerEntry Widets kombiniert um eine beliebige Anzahl an
Schaltzeiten einzugeben. &Uuml;ber den optionalen
modifier2 kann ein Widget zur Auswahl des Schaltwertes angegeben
werden. Siehe Beispiele unten.
Das Ergebiss ist eine durch leerzeichen getrennte Liste von
uzsuTimerEntry Ergebnissen.</li>
<li>Ist der Modifier in der Form
":selectnumbers,&lt;min&gt;,&lt;step&gt;,&lt;max&gt;,&lt;number of
digits after decimal point&gt;,lin|log10", so wird ein in
Select-Widget mit einer Zahlenreihe vom Wert min bis Wert max mit
Schritten von step angezeigt.<br>
Die Angabe lin erzeugt eine konstant ansteigende Reihe. Die Angabe
log10 erzeugt eine exponentiell ansteigende Reihe zur Basis 10,
step bezieht sich auf den Exponenten, z.B. 0.0625.
</li>
<li>In allen anderen F&auml;llen (oder falls der Modifier explizit
mit :select anfaegt) erscheint ein HTML select mit allen Modifier
Werten.</li>
</ul>
Falls das Attribut f&uuml;r eine WEB Instanz gesetzt wurde, dann wird
es bei allen von diesem Web-Instan angezeigten Ger&auml;ten angewendet.
Beispiele:
<ul>
attr FS20dev widgetOverride on-till:time<br>
attr WEB widgetOverride room:textField<br>
attr dimmer widgetOverride dim:knob,min:1,max:100,step:1,linecap:round
<br>
<br>
attr myToggle widgetOverride state:uzsuToggle,123,xyz<br>
attr mySelect widgetOverride state:uzsuSelect,abc,123,456,xyz<br>
attr myTemp widgetOverride
state:uzsuDropDown,18,18.5,19,19.5,20,20.5,21,21.5,22,22.5,23<br>
attr myTimerEntry widgetOverride state:uzsuTimerEntry<br>
attr myTimer widgetOverride state:uzsu<br>
<br>
Im Folgenden wird die Verwendung des modifier2 parameters von
uzsuTimerEntry und uzsu gezeigt um die Auswahl des Schaltzeitpunktes
mit der Auswahl des Schaltwertes zu kombinieren:
<pre>
... widgetOverride state:uzsu,slider,0,5,100 -> ein slider
... widgetOverride state:uzsu,uzsuToggle,off,on -> ein on/off button
... widgetOverride state:uzsu,uzsuDropDown,18,19,20,21,22,23 -> ein dropDownMenue
... widgetOverride state:uzsu,knob,min:18,max:24,step:0.5,linecap:round,fgColor:red -> ein knob widget
... widgetOverride state:uzsu,colorpicker -> ein colorpicker
... widgetOverride state:uzsu,colorpicker,CT,2700,50,5000 -> ein colortemperature slider
</pre>
</ul>
</li><br>
<!-- INSERT_DOC_FROM: www/pgm2/fhemweb.*.js -->
</ul></li>
</ul>
</ul>

View File

@ -1,5 +1,8 @@
#!/usr/bin/perl
# Usage:
# if called with FHEM/XX.pm, than only this file will be checked
# MAXWI
# With pre: 1320, without 1020 (content only)
# pre { white-space: pre-wrap; } : 900
@ -14,7 +17,7 @@ my ($verify) = grep $_ =~ /\.pm$/ , @ARGV;
use constant TAGS => qw{ul li code b i u table tr td div};
sub generateModuleCommandref($$;$);
sub generateModuleCommandref($$;$$);
my %mods;
my %modIdx;
@ -31,14 +34,15 @@ if(!$verify) {
$l =~ s/^[0-9][0-9]_//;
$mods{$l} = "$modDir/$of";
$modIdx{$l} = "device";
open(MOD, "$modDir/$of") || die("Cant open $modDir/$l");
while(my $cl = <MOD>) {
my $modFh;
open($modFh, "$modDir/$of") || die("Cant open $modDir/$l");
while(my $cl = <$modFh>) {
if($cl =~ m/^=item\s+(helper|command|device)/) {
$modIdx{$l} = $1;
last;
}
}
close(MOD);
close($modFh);
}
}
@ -114,26 +118,29 @@ foreach my $lang (@lang) {
#############################
# read a module file and check/print the commandref
sub generateModuleCommandref($$;$)
sub
generateModuleCommandref($$;$$)
{
my ($mod, $lang, $fh) = @_;
my ($mod, $lang, $fh, $jsFile) = @_;
my $fPath = $mods{$mod} ? $mods{$mod} : $mod;
my $tag;
my $suffix = ($lang eq "EN" ? "" : "_$lang");
my %tagcount= ();
map { $tagcount{$_} = 0 } TAGS;
my %llwct = (); # Last line with closed tag
open(MOD, $mods{$mod}) || die("Cant open $mods{$mod}:$!\n");
my $modFh;
open($modFh, $fPath) || die("Cant open $fPath:$!\n");
my $skip = 1;
my $line = 0;
my $docCount = 0;
my $hasLink = 0;
my $dosMode = 0;
while(my $l = <MOD>) {
while(my $l = <$modFh>) {
$line++;
$dosMode = 1 if($l =~ m/^=begin html$suffix.*\r/);
if($l =~ m/^=begin html$suffix$/) {
$l = <MOD>; # skip one line, to be able to repeat join+split
$l = <$modFh>; # skip one line, to be able to repeat join+split
print "*** $lang $mod: nonempty line after =begin html ignored\n"
if($l =~ m/^...*$/);
$skip = 0; $line++;
@ -150,14 +157,25 @@ sub generateModuleCommandref($$;$)
$tagcount{$tag} -=()= ($l =~ /<\/$tag>/gi) if($tagcount{$tag} > 0);
$llwct{$tag} = $line if(!$tagcount{$tag});
}
if($l =~ m,INSERT_DOC_FROM: ([^ ]+)/([^ /]+) ,) {
my ($dir, $re) = ($1, $2);
if(opendir(DH, $dir)) {
foreach my $file (grep { m/^$2$/ } readdir(DH)) {
generateModuleCommandref("$dir/$file", $lang, $fh, 1);
}
closedir(DH);
}
}
}
}
close(MOD);
print "*** $lang $mods{$mod}: ignoring text due to DOS encoding\n"
close($modFh);
print "*** $lang $fPath: ignoring text due to DOS encoding\n"
if($dosMode);
print "*** $lang $mods{$mod}: No document text found\n"
if(!$suffix && !$docCount && !$dosMode && $mods{$mod} !~ m,/99_,);
if($suffix && !$docCount && !$dosMode) {
# TODO: add doc to each $jsfile
print "*** $lang $fPath: No document text found\n"
if(!$jsFile && !$suffix && !$docCount && !$dosMode && $fPath !~ m,/99_,);
if(!$jsFile && $suffix && !$docCount && !$dosMode) {
if($lang eq "DE" && $fh) {
print $fh <<EOF;
<a name="$mod"></a>
@ -169,11 +187,11 @@ sub generateModuleCommandref($$;$)
EOF
}
}
print "*** $lang $mods{$mod}: No a-tag with name=\"$mod\" \n"
if(!$suffix && $docCount && !$hasLink && !$noWarnings);
print "*** $lang $fPath: No a-tag with name=\"$mod\" \n"
if(!$jsFile && !$suffix && $docCount && !$hasLink && !$noWarnings);
foreach $tag (TAGS) {
print("*** $lang $mods{$mod}: Unbalanced $tag ".
print("*** $lang $fPath: Unbalanced $tag ".
"($tagcount{$tag}, last line ok: $llwct{$tag})\n")
if($tagcount{$tag} && !$noWarnings);
}

View File

@ -1,96 +0,0 @@
#!/usr/bin/perl
use strict;
use warnings;
my @lang = ("EN", "DE");
my @modDir = ("FHEM");
my %mods;
foreach my $modDir (@modDir) {
opendir(DH, $modDir) || die "Cant open $modDir: $!\n";
while(my $l = readdir DH) {
next if($l !~ m/^\d\d_.*\.pm$/);
my $of = $l;
$l =~ s/.pm$//;
$l =~ s/^[0-9][0-9]_//;
$mods{lc($l)} = "$modDir/$of" if(!$mods{lc($l)});
}
}
my %doc;
my %fnd;
my $modFileName;
foreach my $lang (@lang) {
my $suffix = ($lang eq "EN" ? "" : "_$lang");
my $docIn = "docs/commandref$suffix.html";
my $docOut = "docs/commandref_frame$suffix.html";
#my @modDir = ("FHEM", "contrib", "webfrontend/pgm5");
open(IN, "$docIn") || die "Cant open $docIn: $!\n";
open(OUT, ">$docOut") || die "Cant open $docOut: $!\n";
my $content = "";
my $skipping;
while(my $l = <IN>) {
$l =~ s/[\r\n]//g;
if($l =~ m,^<a name="(.*)"></a>$,) {
if($modFileName) {
$doc{$modFileName}{$lang} = $content;
$content = "";
}
my $mod = lc($1);
if($mods{$mod}) {
print "Double-Fnd: $mod\n" if($fnd{$mod});
$fnd{$mod} = 1;
$modFileName = $mods{$mod};
} else {
print "Not a module: $mod\n" if($lang eq "EN");
$modFileName = "";
}
}
if($l =~ m,href="#global",) {
print OUT "$l\n";
$skipping = 1;
next;
}
$skipping = 0 if($skipping && $l =~ m,</ul>,);
next if($skipping);
if($modFileName){
$content .= "$l\n";
} else {
print OUT "$l\n";
}
}
}
foreach my $mod (sort {$mods{$a} cmp $mods{$b}} keys %mods) {
print "Missing doc for $mods{$mod}\n" if(!$fnd{$mod});
$modFileName = $mods{$mod};
open(IN, "$modFileName") || die("$modFileName: $!\n");
open(OUT, ">$modFileName.NEW") || die("$modFileName.NEW: $!\n");
while(my $l = <IN>) {
print OUT $l;
if($l =~ m/^1;/) {
if($doc{$modFileName}) {
print OUT "\n=pod\n\n";
foreach my $lang (@lang) {
next if(!$doc{$modFileName}{$lang});
my $suffix = ($lang eq "EN" ? "" : "_$lang");
print OUT "=begin html$suffix\n\n";
print OUT $doc{$modFileName}{$lang};
print OUT "=end html$suffix\n\n";
}
print OUT "=cut\n";
}
last;
}
}
close(IN);
close(OUT);
rename("$modFileName.NEW", $modFileName);
}

View File

@ -4958,6 +4958,8 @@ fhemFork()
return 0;
}
# Return the next element from the string (list) for each consecutive call.
# The index for the next call is stored in the device hash
sub
Each($$;$) # can be used e.g. in at, Forum #40022
{

View File

@ -23,9 +23,11 @@ var FW_widgets = {
time: { createFn:FW_createTime },
noArg: { createFn:FW_createNoArg },
multiple: { createFn:FW_createMultiple },
"multiple-strict": { createFn:FW_createMultiple },
textfield: { createFn:FW_createTextField },
"textfield-long": { createFn:FW_createTextField }
"multiple-strict": { createFn:FW_createMultiple, second:true },
textField: { createFn:FW_createTextField },
textFieldNL: { createFn:FW_createTextField, second:true },
"textField-long": { createFn:FW_createTextField, second:true },
"textFieldNL-long":{ createFn:FW_createTextField, second:true }
};
window.onbeforeunload = function(e)
@ -882,15 +884,17 @@ FW_doUpdate(evt)
});
}
// updateLine is deprecated, use setValueFn
for(var w in FW_widgets)
if(FW_widgets[w].updateLine) // updateLine is deprecated, use setValueFn
if(FW_widgets[w].updateLine && !FW_widgets[w].second)
FW_widgets[w].updateLine(d);
devs.push(d);
}
// used for SVG to avoid double-reloads
for(var w in FW_widgets)
if(FW_widgets[w].updateDevs) // used for SVG to avoid double-reloads
if(FW_widgets[w].updateDevs && !FW_widgets[w].second)
FW_widgets[w].updateDevs(devs);
// reset the connection to avoid memory problems
@ -1045,7 +1049,7 @@ function
FW_callCreateFn(elName, devName, vArr, currVal, set, params, cmd, finishFn)
{
for(var wn in FW_widgets) {
if(FW_widgets[wn].createFn) {
if(FW_widgets[wn].createFn && !FW_widgets[wn].second) {
var newEl = FW_widgets[wn].createFn(elName, devName, vArr,
currVal, set, params, cmd);
if(newEl)
@ -1721,9 +1725,12 @@ FW_getSVG(emb)
=pod
=begin html
<li>:noArg - show no input field.</li>
<li>:time - show a JavaScript driven timepicker.</li>
<li>:textField - show an input field.</li>
<li>:time - show a JavaScript driven timepicker.<br>
Example: attr FS20dev widgetOverride on-till:time</li>
<li>:textField - show an input field.<br>
Example: attr WEB widgetOverride room:textField</li>
<li>:textFieldNL - show the input field and hide the label.</li>
<li>:textField-long - show an input-field, but upon
clicking on the input field open a textArea (60x25).</li>
@ -1736,12 +1743,24 @@ FW_getSVG(emb)
additional textfield. The result is comman separated.</li>
<li>:multiple-strict,val1,val2,... - like :multiple, but without the
textfield.</li>
<li>:selectnumbers,&lt;min&gt;,&lt;step&gt;,&lt;max&gt;,&lt;number of
digits after decimal point&gt;,lin|log10" - display a select widget
generated with values from min to max with step.<br>
lin generates a constantly increasing series. log10 generates an
exponentially increasing series to base 10, step is related to the
exponent, e.g. 0.0625.</li>
<li>:select,val1,val2,... - show a dropdown with all values.
<b>NOTE</b>: this is also the fallback, if no modifier is found.</li>
=end html
=begin html_DE
<li>:noArg - es wird kein weiteres Eingabefeld angezeigt.</li>
<li>:time - zeigt ein Zeitauswahlmen&uuml;.</li>
<li>:textField - zeigt ein Eingabefeld.</li>
<li>:time - zeigt ein Zeitauswahlmen&uuml;.
Beispiel: attr FS20dev widgetOverride on-till:time</li>
<li>:textField - zeigt ein Eingabefeld.<br>
Beispiel: attr WEB widgetOverride room:textField</li>
<li>:textField-long - ist wie textField, aber beim Click im Eingabefeld wird
ein Dialog mit einer HTML textarea (60x25) wird ge&ouml;ffnet.</li>
<li>:slider,&lt;min&gt;,&lt;step&gt;,&lt;max&gt;[,1] - zeigt einen
@ -1750,7 +1769,18 @@ FW_getSVG(emb)
<li>:multiple,val1,val2,... - zeigt eine Mehrfachauswahl mit einem
zus&auml;tzlichen Eingabefeld. Das Ergebnis ist Komma separiert.</li>
<li>:multiple-strict,val1,val2,... - ist wie :multiple, blo&szlig; ohne
Eingabefeld.</li>
Eingabefeld.</li>
<li>:selectnumbers,&lt;min&gt;,&lt;step&gt;,&lt;max&gt;,&lt;number of
digits after decimal point&gt;,lin|log10" zeigt ein HTML-select mit einer
Zahlenreihe vom Wert min bis Wert max mit Schritten von step
angezeigt.<br>
Die Angabe lin erzeugt eine konstant ansteigende Reihe. Die Angabe
log10 erzeugt eine exponentiell ansteigende Reihe zur Basis 10,
step bezieht sich auf den Exponenten, z.B. 0.0625.</li>
<li>:select,val1,val2,... - zeigt ein HTML select mit allen Werten.
<b>Achtung:</b> so ein Widget wird auch dann angezeigt, falls kein
passender Modifier gefunden wurde.</li>
=end html_DE
=cut

View File

@ -36,3 +36,31 @@ FW_knobCreate(elName, devName, vArr, currVal, set, params, cmd)
return newEl;
}
/*
=pod
=begin html
<li>:knob,min:1,max:100,... - shows the jQuery knob widget. The parameters
are a comma separated list of key:value pairs, where key does not have to
contain the "data-" prefix. For details see the jQuery-knob
definition.<br> Example:
attr dimmer widgetOverride dim:knob,min:1,max:100,step:1,linecap:round
</li>
=end html
=begin html_DE
<li>:knob,min:1,max:100,... - zeigt das jQuery knob Widget.Die Parameter
werden als eine Komma separierte Liste von Key:Value Paaren spezifiziert,
wobei das data- Pr&auml;fix entf&auml;llt.F&uuml;r Details siehe die
jQuery knob Dokumentation.<br> Beispiel:
attr dimmer widgetOverride dim:knob,min:1,max:100,step:1,linecap:round
</li>
=end html_DE
=cut
*/

View File

@ -186,4 +186,50 @@ FW_sortableCreateTable(elements, selected)
}
/*
=pod
=begin html
<li>:sortable,val1,val2,... - create a new list from the elements of the
given list, can add new elements by entering a text, or delete some from
the list. This new list can be sorted via drag &amp; drop. The result is
a comma separated list. </li>
<li>:sortable-strict,val1,val2,... - it behaves like :sortable, without the
possibility to enter text.</li>
<li>:sortable-given,val1,val2,... - the specified list can be sorted via drag
&amp; drop, no elements can be added or deleted. </li>
=end html
=begin html_DE
<li>:sortable,val1,val2,... - damit ist es m&ouml;glich aus den gegebenen
Werten eine Liste der gew&uuml;nschten Werte durch Drag &amp; Drop
zusammenzustellen. Die Reihenfolge der Werte kann dabei entsprechend
ge&auml;ndert werden. Es m&uuml;ssen keine Werte explizit vorgegeben
werden, das Widget kann auch ohne vorgegebenen Werte benutzt werden. Es
k&ouml;nnen eigene Werte zur Liste hinzugef&uuml;gt und einsortiert
werden. Das Ergebnis ist Komma-separiert entsprechend aufsteigend
sortiert.</li>
<li>:sortable-strict,val1,val2,... - damit ist es m&ouml;glich aus den
gegebenen Werten eine Liste der gew&uuml;nschten Werte durch Drag &amp;
Drop zusammenzustellen. Die Reihenfolge der Werte kann dabei entsprechend
ge&auml;ndert werden. Es k&ouml;nnen jedoch keine eigenen Werte zur
Liste hinzugef&uuml;gt werden. Das Ergebnis ist Komma-separiert
entsprechend aufsteigend sortiert.</li>
<li>:sortable-given,val1,val2,... - damit ist es m&ouml;glich aus den
gegebenen Werten eine sortierte Liste der gew&uuml;nschten Werte durch
Drag & Drop zusammenzustellen. Es k&ouml;nnen keine Elemente
gel&ouml;scht und hinzugef&uuml;gt werden. Es m&uuml;ssen alle gegeben
Werte benutzt und entsprechend sortiert sein. Das Ergebnis ist
Komma-separiert entsprechend aufsteigend sortiert.</li>
=end html_DE
=cut
*/

View File

@ -594,3 +594,109 @@ FW_uzsuCreate(elName, devName, vArr, currVal, set, params, cmd)
return newEl;
}
/*
=pod
=begin html
<li>:uzsuToggle,state1,state2 - dispay a toggle button with two possible
states. the first is the active state.</li>
<li>:uzsuSelect,val1,val2,... - display a button bar with a button per value
from which multiple values can be selected. the result is comma
separated.</li>
<li>:uzsuSelectRadio,val1,val2,... - display a button bar with a button per
value from which only one value can be selected.</li>
<li>:uzsuDropDown,val1,val2,... - display a dropdown with all values.</li>
<li>:uzsuTimerEntry[,modifier2] - combine uzsuSelect, uzsuDropDown and
uzsuToggle into a single line display to select a timer entry. an
optional modifier can be given to select the switching value. see
examples below. the result is a comma separated list of days followed by
a time, an enabled indicator and the switching value all separated by a|.
eg: Mo,Di,Sa,So|00:00|enabled|19.5</li>
<li>:uzsu[,modifier2] - combine multiple uzsuTimerEntry widets to allow the
setting of multiple switching times an optional modifier can be given to
select the switching value. see examples below. the result is a space
separeted list of uzsuTimerEntry results. Examples:
<ul>
attr myToggle widgetOverride state:uzsuToggle,123,xyz<br>
attr mySelect widgetOverride state:uzsuSelect,abc,123,456,xyz<br>
attr myTemp widgetOverride state:uzsuDropDown,18,18.5,19,19.5,20,20.5,21,21.5,22,22.5,23<br>
attr myTimerEntry widgetOverride state:uzsuTimerEntry<br>
attr myTimer widgetOverride state:uzsu<br>
<br>
the following gives some examples of for the modifier2 parameter of uzsuTimerEntry and uzsu to
combine the setting of a timer with another widget to select the switching value :
<pre>
... widgetOverride state:uzsu,slider,0,5,100 -> a slider
... widgetOverride state:uzsu,uzsuToggle,off,on -> a on/off button
... widgetOverride state:uzsu,uzsuDropDown,18,19,20,21,22,23 -> a dropDownMenue
... widgetOverride state:uzsu,knob,min:18,max:24,step:0.5,linecap:round,fgColor:red -> a knob widget
... widgetOverride state:uzsu,colorpicker -> a colorpicker
... widgetOverride state:uzsu,colorpicker,CT,2700,50,5000 -> a colortemperature selector
</pre>
</ul>
</li>
=end html
=begin html_DE
<li>:uzsuToggle,zust1,zust2 - damit ist es m&ouml;glich mit einem
Toggle-Button zwischen zwei Zust&auml;nden zu w&auml;hlen. Der Erste ist
der aktive Zustand.</li>
<li>:uzsuSelect,val1,val2,... - damit ist es m&ouml;gliche in einer
Buttonleiste meherere Werte auszuw&auml;hlen. Das Ergebnis ist
Komma-separiert.</li>
<li>:uzsuSelectRadio,val1,val2,... - damit ist es m&ouml;gliche in einer
Buttonleiste einen aus meherere Werten auszuw&auml;hlen.</li>
<li>:uzsuDropDown,val1,val2,... - damit ist es m&ouml;gliche mit einem
DropDown Men&uuml; einen der Werte auszuw&auml;hlen.</li>
<li>:uzsuTimerEntry[,modifier2] - damit werden je ein uzsuSelect,
uzsuDropDown und uzsuToggle Widget kombiniert um einen Schaltzeitpunkt
auszuw&auml;hlen. &Uuml;ber den optionalen modifier2 kann ein Widget zur
Auswahl des Schaltwertes angegeben werden. Siehe Beispiele unten. Das
Ergebniss is eine komma-separiert Liste von Wochentagen gefolgt vom
Zeitpunkt, eine Aktiv-Indikator und dem Schaltwert, jeweils durch |
abetrennt. Zum Beispiel: Mo,Di,Sa,So|00:00|enabled|19.5</li>
<li>:uzsu[,modifier2] - damit werden mehrere uzsuTimerEntry Widets kombiniert
um eine beliebige Anzahl an Schaltzeiten einzugeben. &Uuml;ber den
optionalen modifier2 kann ein Widget zur Auswahl des Schaltwertes
angegeben werden. Siehe Beispiele unten. Das Ergebiss ist eine durch
leerzeichen getrennte Liste von uzsuTimerEntry Ergebnissen.<br>
Beispiele:
<ul>
attr myToggle widgetOverride state:uzsuToggle,123,xyz<br>
attr mySelect widgetOverride state:uzsuSelect,abc,123,456,xyz<br>
attr myTemp widgetOverride
state:uzsuDropDown,18,18.5,19,19.5,20,20.5,21,21.5,22,22.5,23<br>
attr myTimerEntry widgetOverride state:uzsuTimerEntry<br>
attr myTimer widgetOverride state:uzsu<br>
<br>
Im Folgenden wird die Verwendung des modifier2 parameters von
uzsuTimerEntry und uzsu gezeigt um die Auswahl des Schaltzeitpunktes
mit der Auswahl des Schaltwertes zu kombinieren:
<pre>
... widgetOverride state:uzsu,slider,0,5,100 -> ein slider
... widgetOverride state:uzsu,uzsuToggle,off,on -> ein on/off button
... widgetOverride state:uzsu,uzsuDropDown,18,19,20,21,22,23 -> ein dropDownMenue
... widgetOverride state:uzsu,knob,min:18,max:24,step:0.5,linecap:round,fgColor:red -> ein knob widget
... widgetOverride state:uzsu,colorpicker -> ein colorpicker
... widgetOverride state:uzsu,colorpicker,CT,2700,50,5000 -> ein colortemperature slider
</pre>
</ul></li>
=end html_DE
=cut
*/