From 39aa8bcb3da08e7bb4b884234bcc248a1d995aea Mon Sep 17 00:00:00 2001 From: rudolfkoenig Date: Tue, 2 Jan 2018 11:24:08 +0000 Subject: [PATCH] fhemweb.js: fix crash on page without (Forum #82010) 01_FHEMWEB.pm: styleData attribute for dynamic styles, add class to text-tags git-svn-id: https://svn.fhem.de/fhem/trunk@15753 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/01_FHEMWEB.pm | 61 ++++++++++++++++++++++++++++------------ fhem/www/pgm2/fhemweb.js | 21 ++++++++------ 2 files changed, 56 insertions(+), 26 deletions(-) diff --git a/fhem/FHEM/01_FHEMWEB.pm b/fhem/FHEM/01_FHEMWEB.pm index e3beb270e..86ba31199 100644 --- a/fhem/FHEM/01_FHEMWEB.pm +++ b/fhem/FHEM/01_FHEMWEB.pm @@ -189,6 +189,7 @@ FHEMWEB_Initialize($) smallscreen:unused smallscreenCommands:0,1 stylesheetPrefix + styleData:textField-long title touchpad:unused viewport @@ -213,7 +214,6 @@ FHEMWEB_Initialize($) $FW_fhemwebjs = join(",", map { $_ = ~m/^fhemweb_(.*).js$/; $1 } grep { /fhemweb_(.*).js$/ } readdir(DH)); - @FW_fhemwebjs = ("fhemweb.js"); closedir(DH); } @@ -720,6 +720,9 @@ FW_answerCall($) $FW_tp = ($FW_sp =~ m/smallscreen|touchpad/); @FW_iconDirs = grep { $_ } split(":", AttrVal($FW_wname, "iconPath", "$FW_sp:default:fhemSVG:openautomation")); + @FW_fhemwebjs = ("fhemweb.js"); + push(@FW_fhemwebjs, "$FW_sp.js") if(-r "$FW_dir/pgm2/$FW_sp.js"); + if($arg =~ m,$FW_ME/floorplan/([a-z0-9.:_]+),i) { # FLOORPLAN: special icondir unshift @FW_iconDirs, $1; FW_readIcons($1); @@ -1052,10 +1055,21 @@ FW_answerCall($) sub FW_dataAttr() { + sub + addParam($$) + { + my ($p, $default) = @_; + my $val = AttrVal($FW_wname,$p, $default); + $val =~ s/&/&/g; + $val =~ s/'/"/g; + return "data-$p='$val' "; + } + return - "data-confirmDelete='" .AttrVal($FW_wname,"confirmDelete", 1)."' ". - "data-confirmJSError='".AttrVal($FW_wname,"confirmJSError",1)."' ". - "data-addHtmlTitle='" .AttrVal($FW_wname,"addHtmlTitle", 1)."' ". + addParam("confirmDelete", 1). + addParam("confirmJSError", 1). + addParam("addHtmlTitle", 1). + addParam("styleData", ""). "data-availableJs='$FW_fhemwebjs' ". "data-webName='$FW_wname '"; } @@ -1185,7 +1199,7 @@ FW_makeTable($$$@) my $class = lc($title); $class =~ s/[^A-Za-z]/_/g; FW_pO "
"; - FW_pO $title; + FW_pO "$title"; FW_pO ""; my $si = AttrVal("global", "showInternalValues", 0); @@ -1348,7 +1362,7 @@ FW_doDetail($) } FW_pO "
"; - FW_pO "DeviceOverview"; + FW_pO "DeviceOverview"; FW_pO "
"; FW_makeDeviceLine($d,1,\%extPage,$nameDisplay,\%usuallyAtEnd); FW_pO "
"; @@ -1409,7 +1423,7 @@ FW_makeTableFromArray($$@) { if (@obj>0) { my $row=1; FW_pO "
"; - FW_pO "$txt"; + FW_pO "$txt"; FW_pO ""; foreach (sort @obj) { FW_pF ""; + FW_pO ""; FW_pO "
", (($row++)&1)?"odd":"even"; @@ -1811,7 +1825,7 @@ FW_showRoom() ################# # Check if there is a device of this type in the room - FW_pO "\n
$g
$g
"; FW_pO ""; @@ -2080,7 +2094,7 @@ FW_displayFileList($@) my $hid = lc($heading); $hid =~ s/[^A-Za-z]/_/g; FW_pO "
$heading
"; - FW_pO "
"; + FW_pO "
"; my $cfgDB = ""; my $row = 0; foreach my $f (@files) { @@ -2166,7 +2180,8 @@ FW_style($$) my @fl = grep { $_ !~ m/(floorplan|dashboard)/ } FW_fileList("$FW_cssdir/.*style.css"); FW_addContent($start); - FW_pO "
"; + FW_pO "
Styles
"; + FW_pO "
"; my $row = 0; foreach my $file (@fl) { next if($file =~ m/svg_/); @@ -3788,6 +3803,11 @@ FW_widgetOverride($$) See the global attribute sslVersion.
+ +
  • styleData
    + data-storage used by dynamic styles like f18 +

  • +
  • stylesheetPrefix
    prefix for the files style.css, svg_style.css and svg_defs.svg. If the @@ -4459,15 +4479,20 @@ FW_widgetOverride($$) attr WEB sortRooms DG OG EG Keller

  • - -
  • smallscreenCommands
    - Falls auf 1 gesetzt werden Kommandos, Slider und Dropdown Menüs im - Smallscreen Landscape Modus angezeigt. -

  • + +
  • smallscreenCommands
    + Falls auf 1 gesetzt werden Kommandos, Slider und Dropdown Menüs im + Smallscreen Landscape Modus angezeigt. +

  • -
  • sslVersion
    - Siehe das global Attribut sslVersion. -

  • +
  • sslVersion
    + Siehe das global Attribut sslVersion. +

  • + + +
  • styleData
    + wird von dynamischen styles wie f18 werwendet +

  • stylesheetPrefix
    diff --git a/fhem/www/pgm2/fhemweb.js b/fhem/www/pgm2/fhemweb.js index f970ac802..c4ea92fc7 100644 --- a/fhem/www/pgm2/fhemweb.js +++ b/fhem/www/pgm2/fhemweb.js @@ -11,6 +11,7 @@ var FW_scripts = {}, FW_links = {}; var FW_docReady = false, FW_longpollType, FW_csrfToken, FW_csrfOk=true; var FW_root = "/fhem"; // root var FW_availableJs=[]; +var FW_urlParams={}; var embedLoadRetry = 100; // createFn returns an HTML Element, which may contain @@ -268,6 +269,12 @@ FW_jqueryReadyFn() }); }); + var sa = location.search.substring(1).split("&"); + for(var i = 0; i < sa.length; i++) { + var kv = sa[i].split("="); + FW_urlParams[kv[0]] = kv[1]; + } + FW_smallScreenCommands(); FW_inlineModify(); FW_rawDef(); @@ -810,7 +817,10 @@ FW_rawDef() function FW_treeMenu() { - var col = getComputedStyle($("a").get(0),null).getPropertyValue('color'); + var col = 'rgb(39, 135, 38)'; + var a = $("a").get(0); + if(window.getComputedStyle && a) + col = getComputedStyle(a,null).getPropertyValue('color'); var arrowRight='data:image/svg+xml;utf8,' .replace('gray', col); var arrowDown=arrowRight.replace('/>',' transform="rotate(90,896,896)"/>'); @@ -1057,13 +1067,8 @@ FW_longpoll() } if(filter == "") { - var sa = location.search.substring(1).split("&"); - for(var i = 0; i < sa.length; i++) { - if(sa[i].substring(0,5) == "room=") - filter=sa[i]; - if(sa[i].substring(0,7) == "detail=") - filter=sa[i].substring(7); - } + if(FW_urlParams.room) filter="room="+FW_urlParams.room; + if(FW_urlParams.detail) filter=FW_urlParams.detail; } if($("#floorplan").length>0) //floorplan special