diff --git a/fhem/FHEM/01_FHEMWEB.pm b/fhem/FHEM/01_FHEMWEB.pm index d1a12bad9..0dfd1fd2f 100644 --- a/fhem/FHEM/01_FHEMWEB.pm +++ b/fhem/FHEM/01_FHEMWEB.pm @@ -964,6 +964,24 @@ FW_answerCall($) FW_pO sprintf($cssTemplate, "pgm2/jquery-ui.min.css"); map { FW_pO sprintf($cssTemplate, $_); } split(" ", AttrVal($FW_wname, "CssFiles", "")); + + my $sd = AttrVal($FW_wname, "styleData", ""); # Avoid flicker in f18 + if($sd && $sd =~ m/"$FW_sp":/s) { + my $bg; + $bg = $1 if($FW_room && $sd =~ m/"Room\.$FW_room\.cols.bg": "([^"]*)"/s); + $bg = $1 if(!defined($bg) && $sd =~ m/"cols.bg": "([^"]*)"/s); + + my $bgImg; + $bgImg = $1 if($FW_room && $sd =~ m/"Room\.$FW_room\.bgImg": "([^"]*)"/s); + $bgImg = $1 if(!defined($bgImg) && $sd =~ m/"bgImg": "([^"]*)"/s); + + FW_pO ""; + } + my $css = AttrVal($FW_wname, "Css", ""); FW_pO "\n" if($css); diff --git a/fhem/www/pgm2/f18.js b/fhem/www/pgm2/f18.js index 3d98f84bb..06a738d6a 100644 --- a/fhem/www/pgm2/f18.js +++ b/fhem/www/pgm2/f18.js @@ -1,19 +1,21 @@ "use strict"; FW_version["f18.js"] = "$Id$"; -// TODO: rewrite menu, floorplan -var f18_attr, f18_aCol, f18_sd, f18_isMobile, f18_icon={}, f18_hasPos; +// TODO: hierMenu,absPos,floorplan,f18style.css +var f18_attr, f18_aCol, f18_sd, f18_isMobile, f18_icon={}, f18_hasPos, f18_room; var f18_small = (screen.width < 480 || screen.height < 480); $(window).resize(f18_resize); $(document).ready(function(){ + f18_room = $("div#content").attr("room"); f18_sd = $("body").attr("data-styleData"); if(f18_sd) { eval("f18_sd="+f18_sd); if(!f18_sd) f18_sd = {}; f18_attr = f18_sd.f18; + delete(f18_attr.cols); // fix the past } else { f18_sd = {}; @@ -74,8 +76,9 @@ f18_menu() function fixMenu() { - $("#menuScrollArea #logo").css("display", f18_attr.hideLogo?"none":"block"); - if(f18_attr["Pinned.menu"]) { + $("#menuScrollArea #logo").css("display", + f18_getAttr("hideLogo") ? "none" : "block"); + if(f18_getAttr("Pinned.menu")) { $("body").addClass("pinnedMenu"); $("#menu").removeClass("visible"); $("#content").css("left", (parseInt($("div#menu").width())+20)+"px"); @@ -98,24 +101,22 @@ f18_tables() $("#content .devType").each(function(){ var el = this, grp = $(el).text(); - f18_addPin(el, "room."+FW_urlParams.room+".grp."+grp, true, + f18_addPin(el, "Room."+FW_urlParams.room+".grp."+grp, true, function(isFixed){ var ntr = $(el).closest("tr").next("tr"); isFixed ? $(ntr).show() : $(ntr).hide(); }); - if(f18_attr.showDragger) - f18_addDragger(el); f18_setPos(el); + if(f18_getAttr("showDragger")) + f18_addDragger(el); }); $("div.SVGlabel").each(function(){ - if(f18_attr.showDragger) - f18_addDragger(this); f18_setPos(this); + if(f18_getAttr("showDragger")) + f18_addDragger(this); }); - if(f18_hasPos || f18_attr.showDragger) - $("div.pinHeader:not(.menu) div.pin").hide(); if(FW_urlParams.detail) { $("div.makeTable > span").each(function(){ @@ -130,163 +131,269 @@ f18_tables() }); } - if(FW_urlParams.cmd == "style%20select") { - var row=0; - - var addRow = function(name, desc, val) - { - $("table.f18colors") - .append(""+ - ""+ - "
"+desc+"
"+ - (val ? "
"+val+"
" : '')+ - ""); - }; - - var addHider = function(name, desc, fn) - { - addRow(name, desc, ""); - $("table.f18colors tr.ar_"+name+" input") - .prop("checked", f18_attr[name]) - .click(function(){ - var c = $(this).is(":checked"); - f18_setAttr(name, c); - fn(c); - }); - }; - - var addColorChooser = function(name, desc) - { - addRow(name, desc, "
"); - FW_replaceWidget("table.f18colors tr.ar_"+name+" div.col2 div.cp", name, - ["colorpicker","RGB"], f18_attr.cols[name], name, "rgb", undefined, - function(value) { - f18_attr.cols[name] = value; - f18_setAttr(); - f18_setCss(name); - }); - }; - - - $("div#content > table").append(""); - - $("tr.f18").append("
f18 special
"); - $("div.f18colors").css("margin-top", "20px"); - $("tr.f18").append("
"); - - var addColors = function() - { - $("table.f18colors") - .append(""+ - "
Preset colors: "+ - "default "+ - "light "+ - "dark "+ - "
"+ - ""); - $("table.f18colors tr.reset a").click(function(){ - row = 0; - $("table.f18colors").html(""); - f18_resetCol($(this).text()); - f18_setCss('preset'); - f18_setAttr(); - addColors(); - }); - addColorChooser("bg", "Background"); - addColorChooser("fg", "Foreground"); - addColorChooser("link", "Link"); - addColorChooser("evenrow", "Even row"); - addColorChooser("oddrow", "Odd row"); - addColorChooser("header", "Header row"); - addColorChooser("menu", "Menu"); - addColorChooser("sel", "Menu:Selected"); - addColorChooser("inpBack", "Input bg"); - $("table.f18colors input").attr("size", 8); - - addRow("editStyle", "Additional CSS"); - $("table.f18colors tr.ar_editStyle a").click(function(){ - $('body').append( - '