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:
parent
6c27a37800
commit
356a891dc4
@ -213,8 +213,6 @@ FHEMWEB_Initialize($)
|
|||||||
$FW_fhemwebjs = join(",", map { $_ = ~m/^fhemweb_(.*).js$/; $1 }
|
$FW_fhemwebjs = join(",", map { $_ = ~m/^fhemweb_(.*).js$/; $1 }
|
||||||
grep { /fhemweb_(.*).js$/ }
|
grep { /fhemweb_(.*).js$/ }
|
||||||
readdir(DH));
|
readdir(DH));
|
||||||
$data{FWEXT}{"readingsGroup" }{SCRIPT} = "fhemweb_readingsGroup.js";
|
|
||||||
$data{FWEXT}{"readingsHistory"}{SCRIPT} = "fhemweb_readingsHistory.js";
|
|
||||||
@FW_fhemwebjs = ("fhemweb.js");
|
@FW_fhemwebjs = ("fhemweb.js");
|
||||||
closedir(DH);
|
closedir(DH);
|
||||||
}
|
}
|
||||||
@ -3929,119 +3927,13 @@ FW_widgetOverride($$)
|
|||||||
i.e the default http address is http://localhost:8083/fhem
|
i.e the default http address is http://localhost:8083/fhem
|
||||||
</li><br>
|
</li><br>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="widgetOverride"></a>
|
<a name="widgetOverride"></a>
|
||||||
<li>widgetOverride<br>
|
<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.
|
for a set/get/attribute specified by the module author.
|
||||||
|
Following is the list of known modifier:
|
||||||
<ul>
|
<ul>
|
||||||
<li>if the modifier is ":noArg", then no further input field is
|
<!-- INSERT_DOC_FROM: www/pgm2/fhemweb.*.js -->
|
||||||
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,<min>,<step>,<max>[,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 & 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 & 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,<min>,<step>,<max>,<number of
|
|
||||||
digits after decimal point>,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>
|
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<br>
|
<br>
|
||||||
@ -4718,145 +4610,11 @@ FW_widgetOverride($$)
|
|||||||
<li>widgetOverride<br>
|
<li>widgetOverride<br>
|
||||||
Leerzeichen separierte Liste von Name/Modifier Paaren, mit dem man den
|
Leerzeichen separierte Liste von Name/Modifier Paaren, mit dem man den
|
||||||
vom Modulautor für einen bestimmten Parameter (Set/Get/Attribut)
|
vom Modulautor für einen bestimmten Parameter (Set/Get/Attribut)
|
||||||
vorgesehene Widgets ändern kann.
|
vorgesehene Widgets ändern kann. Folgendes ist die Liste der
|
||||||
|
bekannten Modifier:
|
||||||
<ul>
|
<ul>
|
||||||
<li>Ist der Modifier ":noArg", wird kein weiteres Eingabefeld
|
<!-- INSERT_DOC_FROM: www/pgm2/fhemweb.*.js -->
|
||||||
angezeigt.</li>
|
</ul></li>
|
||||||
|
|
||||||
<li>Ist der Modifier ":time", wird ein in Javaskript geschreibenes
|
|
||||||
Zeitauswahlmenü 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öffnet.</li>
|
|
||||||
|
|
||||||
<li>Ist der Modifier in der Form
|
|
||||||
":slider,<min>,<step>,<max>[,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öglich und es können neue Werte gesetzt
|
|
||||||
werden. Das Ergebnis ist Komma-separiert.</li>
|
|
||||||
|
|
||||||
<li>Ist der Modifier ":multiple-strict,val1,val2,...", dann ist eine
|
|
||||||
Mehrfachauswahl möglich, es kö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äfix entfällt. </li>
|
|
||||||
|
|
||||||
<li>Ist der Modifier ":sortable,val1,val2,...", dann ist es
|
|
||||||
möglich aus den gegebenen Werten eine Liste der
|
|
||||||
gewünschten Werte durch Drag & Drop zusammenzustellen. Die
|
|
||||||
Reihenfolge der Werte kann dabei entsprechend geändert werden.
|
|
||||||
Es müssen keine Werte explizit vorgegeben werden, das Widget
|
|
||||||
kann auch ohne vorgegebenen Werte benutzt werden. Es können
|
|
||||||
eigene Werte zur Liste hinzugefü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öglich aus den gegebenen Werten eine Liste der
|
|
||||||
gewünschten Werte durch Drag & Drop zusammenzustellen. Die
|
|
||||||
Reihenfolge der Werte kann dabei entsprechend geändert werden.
|
|
||||||
Es können jedoch keine eigenen Werte zur Liste
|
|
||||||
hinzugefügt werden. Das Ergebnis ist Komma-separiert
|
|
||||||
entsprechend aufsteigend sortiert.</li>
|
|
||||||
|
|
||||||
<li>Ist der Modifier ":sortable-given,val1,val2,...", dann ist es
|
|
||||||
möglich aus den gegebenen Werten eine sortierte Liste der
|
|
||||||
gewünschten Werte durch Drag & Drop zusammenzustellen. Es
|
|
||||||
können keine Elemente gelöscht und hinzugefügt
|
|
||||||
werden. Es mü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ögliche mit einem Toggle-Button zwischen zwei
|
|
||||||
Zuständen zu wählen. Der Erste ist der aktive Zustand.</li>
|
|
||||||
|
|
||||||
<li>Ist der Modifier ":uzsuSelect,val1,val2,...", dann ist es
|
|
||||||
mögliche in einer Buttonleiste meherere Werte auszuwählen.
|
|
||||||
Das Ergebnis ist Komma-separiert.</li>
|
|
||||||
|
|
||||||
<li>Ist der Modifier ":uzsuSelectRadio,val1,val2,...", dann ist es
|
|
||||||
mögliche in einer Buttonleiste einen aus meherere Werten
|
|
||||||
auszuwählen.</li>
|
|
||||||
|
|
||||||
<li>Ist der Modifier ":uzsuDropDown,val1,val2,...", dann ist es
|
|
||||||
mögliche mit einem DropDown Menü einen der Werte
|
|
||||||
auszuwählen.</li>
|
|
||||||
|
|
||||||
<li>Ist der Modifier ":uzsuTimerEntry[,modifier2]", werden je ein
|
|
||||||
uzsuSelect, uzsuDropDown und uzsuToggle Widget kombiniert um
|
|
||||||
einen Schaltzeitpunkt auszuwählen. Ü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. Ü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,<min>,<step>,<max>,<number of
|
|
||||||
digits after decimal point>,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ällen (oder falls der Modifier explizit
|
|
||||||
mit :select anfaegt) erscheint ein HTML select mit allen Modifier
|
|
||||||
Werten.</li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
Falls das Attribut für eine WEB Instanz gesetzt wurde, dann wird
|
|
||||||
es bei allen von diesem Web-Instan angezeigten Gerä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>
|
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
#!/usr/bin/perl
|
#!/usr/bin/perl
|
||||||
|
|
||||||
|
# Usage:
|
||||||
|
# if called with FHEM/XX.pm, than only this file will be checked
|
||||||
|
|
||||||
# MAXWI
|
# MAXWI
|
||||||
# With pre: 1320, without 1020 (content only)
|
# With pre: 1320, without 1020 (content only)
|
||||||
# pre { white-space: pre-wrap; } : 900
|
# 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};
|
use constant TAGS => qw{ul li code b i u table tr td div};
|
||||||
|
|
||||||
sub generateModuleCommandref($$;$);
|
sub generateModuleCommandref($$;$$);
|
||||||
|
|
||||||
my %mods;
|
my %mods;
|
||||||
my %modIdx;
|
my %modIdx;
|
||||||
@ -31,14 +34,15 @@ if(!$verify) {
|
|||||||
$l =~ s/^[0-9][0-9]_//;
|
$l =~ s/^[0-9][0-9]_//;
|
||||||
$mods{$l} = "$modDir/$of";
|
$mods{$l} = "$modDir/$of";
|
||||||
$modIdx{$l} = "device";
|
$modIdx{$l} = "device";
|
||||||
open(MOD, "$modDir/$of") || die("Cant open $modDir/$l");
|
my $modFh;
|
||||||
while(my $cl = <MOD>) {
|
open($modFh, "$modDir/$of") || die("Cant open $modDir/$l");
|
||||||
|
while(my $cl = <$modFh>) {
|
||||||
if($cl =~ m/^=item\s+(helper|command|device)/) {
|
if($cl =~ m/^=item\s+(helper|command|device)/) {
|
||||||
$modIdx{$l} = $1;
|
$modIdx{$l} = $1;
|
||||||
last;
|
last;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
close(MOD);
|
close($modFh);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -114,26 +118,29 @@ foreach my $lang (@lang) {
|
|||||||
|
|
||||||
#############################
|
#############################
|
||||||
# read a module file and check/print the commandref
|
# 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 $tag;
|
||||||
my $suffix = ($lang eq "EN" ? "" : "_$lang");
|
my $suffix = ($lang eq "EN" ? "" : "_$lang");
|
||||||
my %tagcount= ();
|
my %tagcount= ();
|
||||||
map { $tagcount{$_} = 0 } TAGS;
|
map { $tagcount{$_} = 0 } TAGS;
|
||||||
my %llwct = (); # Last line with closed tag
|
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 $skip = 1;
|
||||||
my $line = 0;
|
my $line = 0;
|
||||||
my $docCount = 0;
|
my $docCount = 0;
|
||||||
my $hasLink = 0;
|
my $hasLink = 0;
|
||||||
my $dosMode = 0;
|
my $dosMode = 0;
|
||||||
while(my $l = <MOD>) {
|
while(my $l = <$modFh>) {
|
||||||
$line++;
|
$line++;
|
||||||
|
|
||||||
$dosMode = 1 if($l =~ m/^=begin html$suffix.*\r/);
|
$dosMode = 1 if($l =~ m/^=begin html$suffix.*\r/);
|
||||||
if($l =~ m/^=begin html$suffix$/) {
|
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"
|
print "*** $lang $mod: nonempty line after =begin html ignored\n"
|
||||||
if($l =~ m/^...*$/);
|
if($l =~ m/^...*$/);
|
||||||
$skip = 0; $line++;
|
$skip = 0; $line++;
|
||||||
@ -150,14 +157,25 @@ sub generateModuleCommandref($$;$)
|
|||||||
$tagcount{$tag} -=()= ($l =~ /<\/$tag>/gi) if($tagcount{$tag} > 0);
|
$tagcount{$tag} -=()= ($l =~ /<\/$tag>/gi) if($tagcount{$tag} > 0);
|
||||||
$llwct{$tag} = $line if(!$tagcount{$tag});
|
$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);
|
close($modFh);
|
||||||
print "*** $lang $mods{$mod}: ignoring text due to DOS encoding\n"
|
print "*** $lang $fPath: ignoring text due to DOS encoding\n"
|
||||||
if($dosMode);
|
if($dosMode);
|
||||||
print "*** $lang $mods{$mod}: No document text found\n"
|
# TODO: add doc to each $jsfile
|
||||||
if(!$suffix && !$docCount && !$dosMode && $mods{$mod} !~ m,/99_,);
|
print "*** $lang $fPath: No document text found\n"
|
||||||
if($suffix && !$docCount && !$dosMode) {
|
if(!$jsFile && !$suffix && !$docCount && !$dosMode && $fPath !~ m,/99_,);
|
||||||
|
if(!$jsFile && $suffix && !$docCount && !$dosMode) {
|
||||||
if($lang eq "DE" && $fh) {
|
if($lang eq "DE" && $fh) {
|
||||||
print $fh <<EOF;
|
print $fh <<EOF;
|
||||||
<a name="$mod"></a>
|
<a name="$mod"></a>
|
||||||
@ -169,11 +187,11 @@ sub generateModuleCommandref($$;$)
|
|||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
print "*** $lang $mods{$mod}: No a-tag with name=\"$mod\" \n"
|
print "*** $lang $fPath: No a-tag with name=\"$mod\" \n"
|
||||||
if(!$suffix && $docCount && !$hasLink && !$noWarnings);
|
if(!$jsFile && !$suffix && $docCount && !$hasLink && !$noWarnings);
|
||||||
|
|
||||||
foreach $tag (TAGS) {
|
foreach $tag (TAGS) {
|
||||||
print("*** $lang $mods{$mod}: Unbalanced $tag ".
|
print("*** $lang $fPath: Unbalanced $tag ".
|
||||||
"($tagcount{$tag}, last line ok: $llwct{$tag})\n")
|
"($tagcount{$tag}, last line ok: $llwct{$tag})\n")
|
||||||
if($tagcount{$tag} && !$noWarnings);
|
if($tagcount{$tag} && !$noWarnings);
|
||||||
}
|
}
|
||||||
|
@ -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);
|
|
||||||
}
|
|
@ -4958,6 +4958,8 @@ fhemFork()
|
|||||||
return 0;
|
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
|
sub
|
||||||
Each($$;$) # can be used e.g. in at, Forum #40022
|
Each($$;$) # can be used e.g. in at, Forum #40022
|
||||||
{
|
{
|
||||||
|
@ -23,9 +23,11 @@ var FW_widgets = {
|
|||||||
time: { createFn:FW_createTime },
|
time: { createFn:FW_createTime },
|
||||||
noArg: { createFn:FW_createNoArg },
|
noArg: { createFn:FW_createNoArg },
|
||||||
multiple: { createFn:FW_createMultiple },
|
multiple: { createFn:FW_createMultiple },
|
||||||
"multiple-strict": { createFn:FW_createMultiple },
|
"multiple-strict": { createFn:FW_createMultiple, second:true },
|
||||||
textfield: { createFn:FW_createTextField },
|
textField: { createFn:FW_createTextField },
|
||||||
"textfield-long": { 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)
|
window.onbeforeunload = function(e)
|
||||||
@ -882,15 +884,17 @@ FW_doUpdate(evt)
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// updateLine is deprecated, use setValueFn
|
||||||
for(var w in FW_widgets)
|
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);
|
FW_widgets[w].updateLine(d);
|
||||||
|
|
||||||
devs.push(d);
|
devs.push(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// used for SVG to avoid double-reloads
|
||||||
for(var w in FW_widgets)
|
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);
|
FW_widgets[w].updateDevs(devs);
|
||||||
|
|
||||||
// reset the connection to avoid memory problems
|
// reset the connection to avoid memory problems
|
||||||
@ -1045,7 +1049,7 @@ function
|
|||||||
FW_callCreateFn(elName, devName, vArr, currVal, set, params, cmd, finishFn)
|
FW_callCreateFn(elName, devName, vArr, currVal, set, params, cmd, finishFn)
|
||||||
{
|
{
|
||||||
for(var wn in FW_widgets) {
|
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,
|
var newEl = FW_widgets[wn].createFn(elName, devName, vArr,
|
||||||
currVal, set, params, cmd);
|
currVal, set, params, cmd);
|
||||||
if(newEl)
|
if(newEl)
|
||||||
@ -1721,9 +1725,12 @@ FW_getSVG(emb)
|
|||||||
=pod
|
=pod
|
||||||
|
|
||||||
=begin html
|
=begin html
|
||||||
|
|
||||||
<li>:noArg - show no input field.</li>
|
<li>:noArg - show no input field.</li>
|
||||||
<li>:time - show a JavaScript driven timepicker.</li>
|
<li>:time - show a JavaScript driven timepicker.<br>
|
||||||
<li>:textField - show an input field.</li>
|
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>:textFieldNL - show the input field and hide the label.</li>
|
||||||
<li>:textField-long - show an input-field, but upon
|
<li>:textField-long - show an input-field, but upon
|
||||||
clicking on the input field open a textArea (60x25).</li>
|
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>
|
additional textfield. The result is comman separated.</li>
|
||||||
<li>:multiple-strict,val1,val2,... - like :multiple, but without the
|
<li>:multiple-strict,val1,val2,... - like :multiple, but without the
|
||||||
textfield.</li>
|
textfield.</li>
|
||||||
|
<li>:selectnumbers,<min>,<step>,<max>,<number of
|
||||||
|
digits after decimal point>,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
|
=end html
|
||||||
|
|
||||||
=begin html_DE
|
=begin html_DE
|
||||||
|
|
||||||
<li>:noArg - es wird kein weiteres Eingabefeld angezeigt.</li>
|
<li>:noArg - es wird kein weiteres Eingabefeld angezeigt.</li>
|
||||||
<li>:time - zeigt ein Zeitauswahlmenü.</li>
|
<li>:time - zeigt ein Zeitauswahlmenü.
|
||||||
<li>:textField - zeigt ein Eingabefeld.</li>
|
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
|
<li>:textField-long - ist wie textField, aber beim Click im Eingabefeld wird
|
||||||
ein Dialog mit einer HTML textarea (60x25) wird geöffnet.</li>
|
ein Dialog mit einer HTML textarea (60x25) wird geöffnet.</li>
|
||||||
<li>:slider,<min>,<step>,<max>[,1] - zeigt einen
|
<li>:slider,<min>,<step>,<max>[,1] - zeigt einen
|
||||||
@ -1750,7 +1769,18 @@ FW_getSVG(emb)
|
|||||||
<li>:multiple,val1,val2,... - zeigt eine Mehrfachauswahl mit einem
|
<li>:multiple,val1,val2,... - zeigt eine Mehrfachauswahl mit einem
|
||||||
zusätzlichen Eingabefeld. Das Ergebnis ist Komma separiert.</li>
|
zusätzlichen Eingabefeld. Das Ergebnis ist Komma separiert.</li>
|
||||||
<li>:multiple-strict,val1,val2,... - ist wie :multiple, bloß ohne
|
<li>:multiple-strict,val1,val2,... - ist wie :multiple, bloß ohne
|
||||||
Eingabefeld.</li>
|
Eingabefeld.</li>
|
||||||
|
<li>:selectnumbers,<min>,<step>,<max>,<number of
|
||||||
|
digits after decimal point>,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
|
=end html_DE
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
@ -36,3 +36,31 @@ FW_knobCreate(elName, devName, vArr, currVal, set, params, cmd)
|
|||||||
|
|
||||||
return newEl;
|
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äfix entfällt.Fü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
|
||||||
|
*/
|
||||||
|
@ -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 & 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
|
||||||
|
& drop, no elements can be added or deleted. </li>
|
||||||
|
|
||||||
|
=end html
|
||||||
|
|
||||||
|
=begin html_DE
|
||||||
|
|
||||||
|
<li>:sortable,val1,val2,... - damit ist es möglich aus den gegebenen
|
||||||
|
Werten eine Liste der gewünschten Werte durch Drag & Drop
|
||||||
|
zusammenzustellen. Die Reihenfolge der Werte kann dabei entsprechend
|
||||||
|
geändert werden. Es müssen keine Werte explizit vorgegeben
|
||||||
|
werden, das Widget kann auch ohne vorgegebenen Werte benutzt werden. Es
|
||||||
|
können eigene Werte zur Liste hinzugefügt und einsortiert
|
||||||
|
werden. Das Ergebnis ist Komma-separiert entsprechend aufsteigend
|
||||||
|
sortiert.</li>
|
||||||
|
|
||||||
|
<li>:sortable-strict,val1,val2,... - damit ist es möglich aus den
|
||||||
|
gegebenen Werten eine Liste der gewünschten Werte durch Drag &
|
||||||
|
Drop zusammenzustellen. Die Reihenfolge der Werte kann dabei entsprechend
|
||||||
|
geändert werden. Es können jedoch keine eigenen Werte zur
|
||||||
|
Liste hinzugefügt werden. Das Ergebnis ist Komma-separiert
|
||||||
|
entsprechend aufsteigend sortiert.</li>
|
||||||
|
|
||||||
|
<li>:sortable-given,val1,val2,... - damit ist es möglich aus den
|
||||||
|
gegebenen Werten eine sortierte Liste der gewünschten Werte durch
|
||||||
|
Drag & Drop zusammenzustellen. Es können keine Elemente
|
||||||
|
gelöscht und hinzugefügt werden. Es müssen alle gegeben
|
||||||
|
Werte benutzt und entsprechend sortiert sein. Das Ergebnis ist
|
||||||
|
Komma-separiert entsprechend aufsteigend sortiert.</li>
|
||||||
|
|
||||||
|
=end html_DE
|
||||||
|
|
||||||
|
=cut
|
||||||
|
*/
|
||||||
|
@ -594,3 +594,109 @@ FW_uzsuCreate(elName, devName, vArr, currVal, set, params, cmd)
|
|||||||
|
|
||||||
return newEl;
|
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öglich mit einem
|
||||||
|
Toggle-Button zwischen zwei Zuständen zu wählen. Der Erste ist
|
||||||
|
der aktive Zustand.</li>
|
||||||
|
|
||||||
|
<li>:uzsuSelect,val1,val2,... - damit ist es mögliche in einer
|
||||||
|
Buttonleiste meherere Werte auszuwählen. Das Ergebnis ist
|
||||||
|
Komma-separiert.</li>
|
||||||
|
|
||||||
|
<li>:uzsuSelectRadio,val1,val2,... - damit ist es mögliche in einer
|
||||||
|
Buttonleiste einen aus meherere Werten auszuwählen.</li>
|
||||||
|
|
||||||
|
<li>:uzsuDropDown,val1,val2,... - damit ist es mögliche mit einem
|
||||||
|
DropDown Menü einen der Werte auszuwählen.</li>
|
||||||
|
|
||||||
|
<li>:uzsuTimerEntry[,modifier2] - damit werden je ein uzsuSelect,
|
||||||
|
uzsuDropDown und uzsuToggle Widget kombiniert um einen Schaltzeitpunkt
|
||||||
|
auszuwählen. Ü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. Ü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
|
||||||
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user