From e609f098eca3626ad21f0cc4acac6ecf61f0191f Mon Sep 17 00:00:00 2001 From: rudolfkoenig <> Date: Mon, 2 Oct 2017 14:50:03 +0000 Subject: [PATCH] 01_FHEMWEB.js: on demand loading of fhemweb_*.js (Forum #76868) git-svn-id: https://svn.fhem.de/fhem/trunk@15176 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/CHANGED | 1 + fhem/FHEM/01_FHEMWEB.pm | 42 ++++++------- fhem/www/pgm2/fhemweb.js | 123 ++++++++++++++++++++++++++------------- 3 files changed, 104 insertions(+), 62 deletions(-) diff --git a/fhem/CHANGED b/fhem/CHANGED index 34d4e6586..4c8ff6213 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,6 @@ # Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Do not insert empty lines here, update check depends on it. + - change: 01_FHEMWEB.js: on demand loading of fhemweb_*.js (Forum #76868) - bugfix: 73_GardenaSmartBridge: fix part of code - feature: 49_SSCam: V3.1.0, move extevent from CAM- to SVS-model, Reading PollState enhanced, minor fixes diff --git a/fhem/FHEM/01_FHEMWEB.pm b/fhem/FHEM/01_FHEMWEB.pm index b88414e55..76f807e40 100644 --- a/fhem/FHEM/01_FHEMWEB.pm +++ b/fhem/FHEM/01_FHEMWEB.pm @@ -77,6 +77,7 @@ use vars qw($FW_plotmode);# Global plot mode (WEB attribute), used by SVG use vars qw($FW_plotsize);# Global plot size (WEB attribute), used by SVG use vars qw(%FW_webArgs); # all arguments specified in the GET use vars qw(@FW_fhemwebjs);# List of fhemweb*js scripts to load +use vars qw($FW_fhemwebjs);# List of fhemweb*js scripts to load use vars qw($FW_detail); # currently selected device for detail view use vars qw($FW_cmdret); # Returned data by the fhem call use vars qw($FW_room); # currently selected room @@ -208,11 +209,13 @@ FHEMWEB_Initialize($) $FW_cssdir = "$FW_dir/pgm2"; $FW_gplotdir = "$FW_dir/gplot"; - # Blacklist is needed due to an update bug, where MOV was not implemented - my %bl = (_multiple=>1,_noArg=>1,_slider=>1,_svg=>1,_textField=>1,_time=>1); if(opendir(DH, "$FW_dir/pgm2")) { - @FW_fhemwebjs = sort grep { $_ =~ m/^fhemweb(.*).js$/ && !$bl{$1}; } - readdir(DH); + $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); } @@ -890,10 +893,7 @@ FW_answerCall($) no strict "refs"; ($FW_RETTYPE, $FW_RET) = &{$h->{FUNC}}($arg); if(defined($FW_RETTYPE) && $FW_RETTYPE =~ m,text/html,) { - my $dataAttr = - "data-confirmDelete='" .AttrVal($FW_wname,"confirmDelete",1) ."' ". - "data-confirmJSError='".AttrVal($FW_wname,"confirmJSError",1)."' ". - "data-webName='$FW_wname '"; + my $dataAttr = FW_dataAttr(); $FW_RET =~ s/
{NR} if( !$FW_id ); - my $dataAttr = - "data-confirmDelete='" .AttrVal($FW_wname,"confirmDelete", 1)."' ". - "data-confirmJSError='".AttrVal($FW_wname,"confirmJSError",1)."' ". - "data-addHtmlTitle='" .AttrVal($FW_wname,"addHtmlTitle", 1)."' ". - "data-webName='$FW_wname '"; + my $dataAttr = FW_dataAttr(); FW_pO "\n"; if($FW_activateInform) { @@ -1084,6 +1080,17 @@ FW_answerCall($) return 0; } +sub +FW_dataAttr() +{ + return + "data-confirmDelete='" .AttrVal($FW_wname,"confirmDelete", 1)."' ". + "data-confirmJSError='".AttrVal($FW_wname,"confirmJSError",1)."' ". + "data-addHtmlTitle='" .AttrVal($FW_wname,"addHtmlTitle", 1)."' ". + "data-availableJs='$FW_fhemwebjs' ". + "data-webName='$FW_wname '"; +} + sub FW_addContent(;$) { @@ -1337,7 +1344,7 @@ FW_doDetail($) $t = "MISSING" if(!defined($t)); FW_addContent(); - if($FW_ss) { # FS20MS2 special: on and off, is not the same as toggle + if($FW_ss) { my $webCmd = AttrVal($d, "webCmd", undef); if($webCmd) { FW_pO "