diff --git a/fhem/FHEM/01_FHEMWEB.pm b/fhem/FHEM/01_FHEMWEB.pm index f72457273..e3beb270e 100644 --- a/fhem/FHEM/01_FHEMWEB.pm +++ b/fhem/FHEM/01_FHEMWEB.pm @@ -1594,9 +1594,10 @@ FW_roomOverview($) $target = 'target="_blank"' if($l2 =~ s/^$FW_ME\/\+/$FW_ME\//); $target = 'target="_blank"' if($l2 =~ m/commandref|fhem.de.fhem.html/); if($l2 =~ m/.html$/ || $l2 =~ m/^(http|javascript)/ || length($target)){ - FW_pO "
$icon$l1
"; + FW_pO "
$icon$l1". + "
"; } else { - FW_pH $l2, "$icon$l1", 1, $class; + FW_pH $l2, "$icon$l1", 1, $class; } FW_pO ""; diff --git a/fhem/www/pgm2/fhemweb.js b/fhem/www/pgm2/fhemweb.js index 24ab5d29f..1f76d3606 100644 --- a/fhem/www/pgm2/fhemweb.js +++ b/fhem/www/pgm2/fhemweb.js @@ -271,6 +271,7 @@ FW_jqueryReadyFn() FW_smallScreenCommands(); FW_inlineModify(); FW_rawDef(); + FW_treeMenu(); } function @@ -806,6 +807,92 @@ FW_rawDef() }); } +function +FW_treeMenu() +{ + var col = getComputedStyle($("a").get(0),null).getPropertyValue('color'); + var arrowRight='data:image/svg+xml;utf8,' + .replace('gray', col); + var arrowDown=arrowRight.replace('/>',' transform="rotate(90,896,896)"/>'); + var fnd; + + $("div#menu table.room").each(function(){ // one loop per Block + var t = this, ma = {}; + $(t).find("td > div > a > span").each(function(e){ + var span = this, spanTxt = $(span).html(); + var ta = spanTxt.split("--"); + if(ta.length <= 1) + return; + fnd = true; + var nxt="", lst="", tr=$(span).closest("tr"); + for(var i1=0; i1"+ + "
"+ta[i1]+"
"); + } + ma[nxt] = true; + lst = nxt; + } + $(span).html(ta[ta.length-1]); + $(tr).attr("data-mTree", nxt) + .addClass("menuTree level"+(ta.length-1)); + }); + }); + + if(fnd) { + $("head").append(` + `); + var t = $("div#menu table.room"); + $(t).find("tr[data-mTree]").not(".level0").hide(); + $(t).find("tr.menuTree").click(function(){treeClick(this)}); + $(t).find("tr.menuTree > td > div > div") + .css("background-image", "url('"+arrowRight+"')"); + var selRoom = $("div#content").attr("room"); + if(selRoom) { + var ta = selRoom.split("--"), nxt=""; + for(var i1=0; i1div").css("background-image", "url('"+arrowDown+"')"); + } else { + $(el).closest("table").find("tr[data-mTree="+tgt+"]").hide(); + $(el).find("div>div").css("background-image", "url('"+arrowRight+"')"); + } + $(el).toggleClass("closed"); + $(el).toggleClass("open"); + }; +} + +function +FW_escapeSelector(s) +{ + if(typeof s != 'string') + return s; + return s.replace(/[ .#\[\]]/g, function(r) { return '\\'+r }); +} + /*************** LONGPOLL START **************/ var FW_pollConn; var FW_longpollOffset = 0;