mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-13 09:12:19 +00:00
Adding Dashboard Tab feature. Redesign saving of Group positioning. Many small changes and bugfixing.
git-svn-id: https://svn.fhem.de/fhem/trunk@4717 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
b43ac9fe1d
commit
3b36898cd6
@ -1,6 +1,8 @@
|
||||
# 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.
|
||||
- SVN
|
||||
- feature: DASHBOARD: Dashboard get Tabs. Redesign saving of Group
|
||||
positioning.
|
||||
- bugfix: SYSMON: Log Warnings, unnoetige Readings erkenen und entfernen
|
||||
- feature: Setting of controller parameter now possible for LUXTRONIK2
|
||||
- feature: new module 71_YAMAHA_BD.pm to control Yamaha Blu-Ray
|
||||
|
@ -4,31 +4,39 @@
|
||||
#
|
||||
########################################################################################
|
||||
# Released : 20.12.2013 @svenson08
|
||||
# Version : 1.15
|
||||
# Version : 2.00
|
||||
# Revisions:
|
||||
# 0001: Released to testers
|
||||
# 0002: Don't show link on Groups with WebLinks. Hide GroupToogle Button (new Attribut dashboard_showtooglebuttons).
|
||||
# 1.00: Released to testers
|
||||
# 1.02: Don't show link on Groups with WebLinks. Hide GroupToogle Button (new Attribut dashboard_showtooglebuttons).
|
||||
# Set the Columnheight (new Attribur dashboard_colheight).
|
||||
# 0003: Dashboard Entry over the Room-List, set the Room "Dashboard" to hiddenroom. Build weblink independently.
|
||||
# 1.03: Dashboard Entry over the Room-List, set the Room "Dashboard" to hiddenroom. Build weblink independently.
|
||||
# Dashboard Row on Top and Bottom (no separately columns). Detail Button
|
||||
# to jump into define Detailview. Don't show link on Groups with SVG and readingsGroup.
|
||||
# 0004: Sort the Groupentrys (@gemx). Hide Room Dashboard.
|
||||
# 0005: Fix dashboard_row center
|
||||
# 0006: Released Version 1.10. Rename Module from 95_FWViews to 95_Dashboard. Rename view_* Attributes to
|
||||
# 1.04: Sort the Groupentrys (@gemx). Hide Room Dashboard.
|
||||
# 1.05: Fix dashboard_row center
|
||||
# 1.10: Released Version 1.10. Rename Module from 95_FWViews to 95_Dashboard. Rename view_* Attributes to
|
||||
# dashboard_*. Rename fhemweb_FWViews.js to dashboard.js. Cleanup CSS. Reduce single png-Images to one File only.
|
||||
# Fix duplicated run of JS Script. Dashboard STAT show "Missing File" Information if installation is wrong.
|
||||
# 0007: use jquery.min and jquery-ui.min. add dashboard_debug attribute. Check dashboard_sorting value plausibility.
|
||||
# 1.11: use jquery.min and jquery-ui.min. add dashboard_debug attribute. Check dashboard_sorting value plausibility.
|
||||
# Change default Values. First Release to FHEM SVN.
|
||||
# 0008: Add Germyn command_ref Text. Add Default Values to command_ref (@cotecmania). Fix identification of an existing
|
||||
# 1.12: Add Germyn command_ref Text. Add Default Values to command_ref (@cotecmania). Fix identification of an existing
|
||||
# Dashboard-Weblink (Message *_weblink already defined, delete it first on rereadcfg). Remove white space from
|
||||
# both ends of a group in dashboard_groups. Fix dashboard_sorting check. Wrong added hiddenroom to FHEMWEB
|
||||
# Browsersession fixed. Buttonbar can now placed on top or bottom of the Dashboard (@cotecmania).
|
||||
# Dashboard is always edited out the Room Dashboard (@justme1968)
|
||||
# Fix Dashboard Entry over the Room-List after 01_FHEMWEB.pm changes
|
||||
# 2.00: First Changes vor Dashboard Tabs. Change while saving positioning. Alterd max/min Group positioning.
|
||||
# Many changes in Dasboard.js. Replaced the attributes dashboard_groups, dashboard_colheight and dashboard_sorting
|
||||
# Many new Attributes vor Tabs, Dashboard sizing. Set of mimimal attributes (helpful for beginners).
|
||||
# Provisionally the columns widths are dependent on the total width of the Dashboard.
|
||||
#
|
||||
# Known Bugs/Todos:
|
||||
# Add/Write FHEM Wiki-Doku
|
||||
# Nachträglich hinzufügen von gruppen
|
||||
# TODO: demo.fhem.cfg
|
||||
# TODO: sorting attribut with value 1 -> erase attribute?
|
||||
# TODO: dashboard_colwidth -> <1.col, 2.col, 3.col ...> only <1.col>, first col = value, split rest on colcount.
|
||||
# TODO: Tab top, bottom, hidden
|
||||
# BUG: Longpoll dosen't work on Dashboard
|
||||
# Log 1, "[DASHBOARD simple debug] '".$g."' ";
|
||||
########################################################################################
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
@ -51,6 +59,7 @@
|
||||
# http://jsfiddle.net/adamboduch/e6zdX/1/
|
||||
# http://www.innovativephp.com/jquery-resizable-practical-examples-and-demos/
|
||||
# http://jsfiddle.net/raulfernandez/mAuxn/
|
||||
# http://jsfiddle.net/zeTP8/
|
||||
|
||||
package main;
|
||||
|
||||
@ -67,10 +76,12 @@ use vars qw(%FW_types); # device types
|
||||
|
||||
# --------------------------- Global Variable -----------------------------------------------
|
||||
my %group;
|
||||
#my %dashboarddata;
|
||||
my $fwjquery = "jquery.min.js";
|
||||
my $fwjqueryui = "jquery-ui.min.js";
|
||||
my $dashboardname = "Dashboard"; # Link Text
|
||||
my $dashboardhiddenroom = "DashboardRoom"; # Hiddenroom
|
||||
my $dashboardversion = "2.00";
|
||||
# -------------------------------------------------------------------------------------------
|
||||
|
||||
sub Dashboard_Initialize ($) {
|
||||
@ -79,20 +90,45 @@ sub Dashboard_Initialize ($) {
|
||||
$hash->{DefFn} = "Dashboard_define";
|
||||
$hash->{UndefFn} = "Dashboard_Undef";
|
||||
$hash->{FW_detailFn} = "Dashboard_detailFn";
|
||||
$hash->{AttrFn} = "Dashboard_Attr";
|
||||
$hash->{AttrList} = "disable:0,1 ".
|
||||
"dashboard_sorting ".
|
||||
"dashboard_colwidth ".
|
||||
"dashboard_colheight ".
|
||||
"dashboard_colcount:1,2,3,4,5 ".
|
||||
"dashboard_colwidth ". # obsolet -> always calculated to 100%. future uses for separate columns wide
|
||||
"dashboard_debug:0,1 ".
|
||||
"dashboard_lockstate:unlock,lock ".
|
||||
"dashboard_rowtopheight ".
|
||||
"dashboard_rowbottomheight ".
|
||||
"dashboard_groups ".
|
||||
"dashboard_lockstate:unlock,lock ".
|
||||
"dashboard_colcount:1,2,3,4,5 ".
|
||||
"dashboard_row:top,center,bottom,top-center,center-bottom,top-center-bottom ".
|
||||
"dashboard_showbuttonbar:top,bottom,hidden ".
|
||||
"dashboard_showhelper:0,1 ".
|
||||
"dashboard_showtooglebuttons:0,1 ".
|
||||
"dashboard_row:top,center,bottom,top-center,center-bottom,top-center-bottom ".
|
||||
"dashboard_debug:0,1 ".
|
||||
"dashboard_showtooglebuttons:0,1 ".
|
||||
|
||||
#new attribute
|
||||
"dashboard_tabcount:1,2,3,4,5 ".
|
||||
"dashboard_activetab:1,2,3,4,5 ".
|
||||
"dashboard_tab1name ".
|
||||
"dashboard_tab2name ".
|
||||
"dashboard_tab3name ".
|
||||
"dashboard_tab4name ".
|
||||
"dashboard_tab5name ".
|
||||
"dashboard_tab1groups ".
|
||||
"dashboard_tab2groups ".
|
||||
"dashboard_tab3groups ".
|
||||
"dashboard_tab4groups ".
|
||||
"dashboard_tab5groups ".
|
||||
"dashboard_tab1sorting ".
|
||||
"dashboard_tab2sorting ".
|
||||
"dashboard_tab3sorting ".
|
||||
"dashboard_tab4sorting ".
|
||||
"dashboard_tab5sorting ".
|
||||
"dashboard_width ".
|
||||
"dashboard_rowcenterheight ".
|
||||
|
||||
#obsolete - erase in future releases
|
||||
"dashboard_groups ". # obsolet -> erase in future releases
|
||||
"dashboard_colheight ". # obsolet -> erase in future releases
|
||||
"dashboard_sorting ". # obsolet -> komplett ersetzen
|
||||
|
||||
$readingFnAttributes;
|
||||
|
||||
$data{FWEXT}{Dashboardx}{LINK} = "?room=".$dashboardhiddenroom;
|
||||
@ -112,12 +148,11 @@ sub DashboardAsHtml($)
|
||||
my $name = $defs{$d}{NAME};
|
||||
my $id = $defs{$d}{NR};
|
||||
|
||||
############# Read Dashboard Attributes and set Default-Values ##############################
|
||||
######################### Read Dashboard Attributes and set Default-Values ####################################
|
||||
my $disable = AttrVal($defs{$d}{NAME}, "disable", 0);
|
||||
my $sorting = AttrVal($defs{$d}{NAME}, "dashboard_sorting", ",");
|
||||
my $colcount = AttrVal($defs{$d}{NAME}, "dashboard_colcount", 1);
|
||||
my $colwidth = AttrVal($defs{$d}{NAME}, "dashboard_colwidth", 320);
|
||||
my $colheight = AttrVal($defs{$d}{NAME}, "dashboard_colheight", 400);
|
||||
my $colheight = AttrVal($defs{$d}{NAME}, "dashboard_rowcenterheight", 400);
|
||||
my $rowtopheight = AttrVal($defs{$d}{NAME}, "dashboard_rowtopheight", 250);
|
||||
my $rowbottomheight = AttrVal($defs{$d}{NAME}, "dashboard_rowbottomheight", 250);
|
||||
my $showhelper = AttrVal($defs{$d}{NAME}, "dashboard_showhelper", 1);
|
||||
@ -126,115 +161,188 @@ sub DashboardAsHtml($)
|
||||
my $showtooglebuttons = AttrVal($defs{$d}{NAME}, "dashboard_showtooglebuttons", 1);
|
||||
my $row = AttrVal($defs{$d}{NAME}, "dashboard_row", "center");
|
||||
my $debug = AttrVal($defs{$d}{NAME}, "dashboard_debug", "0");
|
||||
my $dashboardgroups = AttrVal($defs{$d}{NAME}, "dashboard_groups", "");
|
||||
|
||||
my $activetab = AttrVal($defs{$d}{NAME}, "dashboard_activetab", 1);
|
||||
my $tabcount = AttrVal($defs{$d}{NAME}, "dashboard_tabcount", 1);
|
||||
my $dbwidth = AttrVal($defs{$d}{NAME}, "dashboard_width", "100%");
|
||||
my @tabnames = (AttrVal($defs{$d}{NAME}, "dashboard_tab1name", "Dashboard-Tab 1"),
|
||||
AttrVal($defs{$d}{NAME}, "dashboard_tab2name", "Dashboard-Tab 2"),
|
||||
AttrVal($defs{$d}{NAME}, "dashboard_tab3name", "Dashboard-Tab 3"),
|
||||
AttrVal($defs{$d}{NAME}, "dashboard_tab4name", "Dashboard-Tab 4"),
|
||||
AttrVal($defs{$d}{NAME}, "dashboard_tab5name", "Dashboard-Tab 5"));
|
||||
my @tabgroups = (AttrVal($defs{$d}{NAME}, "dashboard_tab1groups", ""),
|
||||
AttrVal($defs{$d}{NAME}, "dashboard_tab2groups", ""),
|
||||
AttrVal($defs{$d}{NAME}, "dashboard_tab3groups", ""),
|
||||
AttrVal($defs{$d}{NAME}, "dashboard_tab4groups", ""),
|
||||
AttrVal($defs{$d}{NAME}, "dashboard_tab5groups", ""));
|
||||
my @tabsortings = (AttrVal($defs{$d}{NAME}, "dashboard_tab1sorting", ""),
|
||||
AttrVal($defs{$d}{NAME}, "dashboard_tab2sorting", ""),
|
||||
AttrVal($defs{$d}{NAME}, "dashboard_tab3sorting", ""),
|
||||
AttrVal($defs{$d}{NAME}, "dashboard_tab4sorting", ""),
|
||||
AttrVal($defs{$d}{NAME}, "dashboard_tab5sorting", ""));
|
||||
|
||||
#############################################################################################
|
||||
|
||||
#---------------- Dashboard is always edited out the Room Dashboard -------------------------
|
||||
if ($FW_room ne $dashboardhiddenroom) { #Dashboard is always edited out the Room Dashboard
|
||||
if ($showbuttonbar eq "hidden") {$showbuttonbar = "top" };
|
||||
$showhelper = 1;
|
||||
$showtooglebuttons = 1;
|
||||
$lockstate = "unlock";
|
||||
#if ($FW_room ne $dashboardhiddenroom) { #Dashboard is always edited out the Room Dashboard
|
||||
# if ($showbuttonbar eq "hidden") {$showbuttonbar = "top" };
|
||||
# $showhelper = 1;
|
||||
# $showtooglebuttons = 1;
|
||||
# $lockstate = "unlock";
|
||||
#}
|
||||
################ temp. deaktiviert
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
if ($disable == 1) {
|
||||
$defs{$d}{STATE} = "disabled";
|
||||
return $ret;
|
||||
}
|
||||
unless (@tabgroups) {
|
||||
$defs{$d}{STATE} = "No Groups set";
|
||||
return $ret;
|
||||
}
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
if ($disable == 1) { $defs{$d}{STATE} = "disabled"; }
|
||||
if ($dashboardgroups eq "") { $defs{$d}{STATE} = "No Groups set"; }
|
||||
return $ret if (($dashboardgroups eq "") || ($disable == 1));
|
||||
|
||||
if ($debug == 1) { $debugfield = "edit" };
|
||||
if ($showbuttonbar eq "hidden") { $lockstate = "lock" };
|
||||
if (not ($colwidth =~ /^\d+$/)) { $colwidth = 320 };
|
||||
if ($activetab > $tabcount) { $activetab = $tabcount; }
|
||||
|
||||
#$colwidth =~ tr/,/:/; #future release
|
||||
#if ($colwidth =~/[a-zA-Z]+$/) { Log 1, "[DASHBOARD simple debug] Nicht nur zahlen ".$colwidth; } #future release
|
||||
if (not ($colwidth =~ /^\d+$/)) { $colwidth = 320 }; #current
|
||||
if ( ($colwidth =~ /[a-zA-Z]/)) { $colwidth = 150 }; #current
|
||||
|
||||
if (not ($colheight =~ /^\d+$/)) { $colheight = 400 };
|
||||
if (not ($rowtopheight =~ /^\d+$/)) { $rowtopheight = 50 };
|
||||
if (not ($rowbottomheight =~ /^\d+$/)) { $rowbottomheight = 50 };
|
||||
|
||||
#------------------- Check dashboard_sorting on false content ------------------------------------
|
||||
if (($sorting !~ /[0-9]/ || $sorting !~ /:/ || $sorting !~ /,/ ) && ($sorting ne ",")){
|
||||
Log3 $d, 3, "[".$name."] Value of attribut dashboard_sorting is wrong. Saved sorting can not be set. Fix Value or delete the Attribute.";
|
||||
} else { Log3 $d, 5, "[".$name."] Sorting OK: ".$sorting; }
|
||||
for (my $i=0;$i<@tabsortings;$i++){
|
||||
if (($tabsortings[$i-1] !~ /[0-9]/ || $tabsortings[$i-1] !~ /:/ || $tabsortings[$i-1] !~ /,/ ) && ($tabsortings[$i-1] ne "," && $tabsortings[$i-1] ne "")){
|
||||
Log3 $d, 3, "[".$name." V".$dashboardversion."] Value of attribut dashboard_tab".$i."sorting is wrong. Saved sorting can not be set. Fix Value or delete the Attribute. [".$tabsortings[$i-1]."]";
|
||||
} else { Log3 $d, 5, "[".$name." V".$dashboardversion."] Sorting OK or Empty: dashboard_tab".$i."sorting "; }
|
||||
}
|
||||
#-------------------------------------------------------------------------------------------------
|
||||
|
||||
%group = BuildGroupList($dashboardgroups);
|
||||
|
||||
$ret .= "<table class=\"dashboard\" id=\"dashboard\">";
|
||||
############################ Dashboard-Optionbar ############################################
|
||||
if ($showbuttonbar eq "top") { $ret .= BuildButtonBar($d); }
|
||||
#############################################################################################
|
||||
|
||||
$ret .= "<tr><td><div class=\"dashboardhidden\">";
|
||||
$ret .= "<input type=\"$debugfield\" size=\"100\" id=\"dashboard_attr\" value=\"$name,$colwidth,$showhelper,$lockstate,$showbuttonbar,$colheight,$showtooglebuttons,$colcount,$rowtopheight,$rowbottomheight\">";
|
||||
$ret .= "<input type=\"$debugfield\" size=\"100\" id=\"dashboard_currentsorting\" value=\"$sorting\">";
|
||||
$ret .= "<input type=\"$debugfield\" size=\"100\" id=\"dashboard_jsdebug\" value=\"\">";
|
||||
$ret .= "</div></td></tr>";
|
||||
$ret .= "<tr><td><div class=\"dashboardhidden\">";
|
||||
$ret .= "<input type=\"$debugfield\" size=\"100%\" id=\"dashboard_attr\" value=\"$name,$dbwidth,$showhelper,$lockstate,$showbuttonbar,$colheight,$showtooglebuttons,$colcount,$rowtopheight,$rowbottomheight,$tabcount,$activetab,$colwidth\">";
|
||||
$ret .= "<input type=\"$debugfield\" size=\"100%\" id=\"dashboard_jsdebug\" value=\"\">";
|
||||
$ret .= "</div></td></tr>";
|
||||
|
||||
##################### Top Row (only one Column) #############################################
|
||||
if ($row eq "top-center-bottom" || $row eq "top-center" || $row eq "top"){
|
||||
$ret .= "<tr><td>";
|
||||
$ret .= "<div id=\"top\">";
|
||||
$ret .= " <div class=\"ui-row dashboard_column\" id=\"sortablecolumn100\">";
|
||||
$ret .= " </div>";
|
||||
$ret .= "</div>";
|
||||
$ret .= "</td></tr>";
|
||||
}
|
||||
#############################################################################################
|
||||
$ret .= "<tr><td><div id=\"tabs\" class=\"dashboard_tabs\">";
|
||||
########################### Dashboard Tab-Liste ##############################################
|
||||
$ret .= " <ul id=\"dashboard_tabnav\" class=\"dashboard_tabnav\">";
|
||||
if ($showbuttonbar eq "top") { $ret .= BuildButtonBar($d,$showbuttonbar); }
|
||||
for (my $i=0;$i<$tabcount;$i++){ $ret .= " <li class=\"dashboard_tab\"><a href=\"#dashboard_tab".$i."\">".trim($tabnames[$i])."</a></li>"; }
|
||||
$ret .= " </ul>";
|
||||
##############################################################################################
|
||||
|
||||
##################### Center Row (max. 5 Column) ############################################
|
||||
if ($row eq "top-center-bottom" || $row eq "top-center" || $row eq "center-bottom" || $row eq "center"){
|
||||
$ret .= "<tr><td>";
|
||||
$ret .= "<div id=\"center\">";
|
||||
$ret .= " <div class=\"dashboard_column\" id=\"sortablecolumn0\" >";
|
||||
my @dashboardgroups = split(",", $dashboardgroups);
|
||||
for (my $i=0;$i<@dashboardgroups;$i++){
|
||||
$dashboardgroups[$i] = trim($dashboardgroups[$i]); #remove white space from both ends of a string
|
||||
$dashboardgroups[$i] =~ tr/<+>/ /; #Fix Groupname if use wrong Groupnames from Bestpractice beginner configuration
|
||||
$ret .= " <div class=\"dashboard_widget\" data-status=\"\" id=\"".$id."w".$i."\">";
|
||||
$ret .= " <div class=\"dashboard_widgetinner\">";
|
||||
$ret .= " <div class=\"dashboard_widgetheader\">".$dashboardgroups[$i]."</div>";
|
||||
$ret .= " <div data-userheight=\"\" class=\"dashboard_content\">";
|
||||
$ret .= BuildGroup($dashboardgroups[$i]);
|
||||
$ret .= " </div>";
|
||||
$ret .= " </div>";
|
||||
$ret .= " </div>";
|
||||
for (my $t=0;$t<$tabcount;$t++){
|
||||
my @tabgroup = split(",", $tabgroups[$t]); #Set temp. position for groups without an stored position
|
||||
for (my $i=0;$i<@tabgroup;$i++){
|
||||
if (index($tabsortings[$t],trim($tabgroup[$i])) < 0) { $tabsortings[$t] = $tabsortings[$t]."t".$t."c".GetMaxColumnId($row,$colcount).",".trim($tabgroup[$i]).",true,0,0:"; }
|
||||
}
|
||||
$ret .= " </div>";
|
||||
$ret .= BuildEmptyColumn($colcount);
|
||||
$ret .= "</div>";
|
||||
$ret .= "</td></tr>";
|
||||
%group = BuildGroupList($tabgroups[$t]);
|
||||
$ret .= " <div id=\"dashboard_tab".$t."\" data-tabwidgets=\"".$tabsortings[$t]."\" class=\"dashboard_tabpanel\">";
|
||||
$ret .= " <ul class=\"dashboard_tabcontent\">";
|
||||
$ret .= " <table class=\"dashboard_tabcontent\">"; # dashboard\">";
|
||||
##################### Top Row (only one Column) #############################################
|
||||
if ($row eq "top-center-bottom" || $row eq "top-center" || $row eq "top"){ $ret .= BuildDashboardTopRow($t,$id,$tabgroups[$t],$tabsortings[$t]); }
|
||||
##################### Center Row (max. 5 Column) ############################################
|
||||
if ($row eq "top-center-bottom" || $row eq "top-center" || $row eq "center-bottom" || $row eq "center"){ $ret .= BuildDashboardCenterRow($t,$id,$tabgroups[$t],$tabsortings[$t],$colcount);}
|
||||
############################# Bottom Row (only one Column) ############################################
|
||||
if ($row eq "top-center-bottom" || $row eq "center-bottom" || $row eq "bottom"){ $ret .= BuildDashboardBottomRow($t,$id,$tabgroups[$t],$tabsortings[$t]); }
|
||||
#############################################################################################
|
||||
$ret .= " </table>";
|
||||
$ret .= " </ul>";
|
||||
$ret .= " </div>";
|
||||
}
|
||||
#############################################################################################
|
||||
|
||||
##################### Bottom Row (only one Column) ##########################################
|
||||
if ($row eq "top-center-bottom" || $row eq "center-bottom" || $row eq "bottom"){
|
||||
$ret .= "<tr><td>";
|
||||
$ret .= "<div id=\"bottom\">";
|
||||
$ret .= " <div class=\"ui-row dashboard_column\" id=\"sortablecolumn200\">";
|
||||
$ret .= " </div>";
|
||||
$ret .= "</div>";
|
||||
$ret .= "</td></tr>";
|
||||
}
|
||||
#############################################################################################
|
||||
|
||||
############################ Dashboard-Optionbar ############################################
|
||||
if ($showbuttonbar eq "bottom") { $ret .= BuildButtonBar($d); }
|
||||
#############################################################################################
|
||||
|
||||
if ($showbuttonbar eq "bottom") { $ret .= BuildButtonBar($d,$showbuttonbar); }
|
||||
$ret .= "</div></td></tr>";
|
||||
$ret .= "</table>";
|
||||
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
sub BuildButtonBar($){
|
||||
my ($d) = @_;
|
||||
sub BuildDashboardTopRow($$$$){
|
||||
my ($t,$id, $dbgroups, $dbsorting) = @_;
|
||||
my $ret;
|
||||
$ret .= "<tr><td>";
|
||||
$ret .= "<div id=\"dashboard_rowtop_tab".$t."\" class=\"dashboard_rowtop\">";
|
||||
$ret .= " <div class=\"ui-row dashboard_row dashboard_column\" id=\"dashboard_tab".$t."column100\">";
|
||||
$ret .= BuildGroupWidgets($t,"100",$id,$dbgroups,$dbsorting);
|
||||
$ret .= " </div>";
|
||||
$ret .= "</div>";
|
||||
$ret .= "</td></tr>";
|
||||
return $ret;
|
||||
}
|
||||
|
||||
sub BuildDashboardCenterRow($$$$$){
|
||||
my ($t,$id, $dbgroups, $dbsorting, $colcount) = @_;
|
||||
my $ret;
|
||||
$ret .= "<tr><td>";
|
||||
$ret .= "<div id=\"dashboard_rowcenter_tab".$t."\" class=\"dashboard_rowcenter\">";
|
||||
|
||||
for (my $i=0;$i<$colcount;$i++){
|
||||
$ret .= " <div class=\"ui-row dashboard_row dashboard_column\" id=\"dashboard_tab".$t."column".$i."\">";
|
||||
$ret .= BuildGroupWidgets($t,$i,$id,$dbgroups,$dbsorting);
|
||||
$ret .= " </div>";
|
||||
}
|
||||
$ret .= "</div>";
|
||||
$ret .= "</td></tr>";
|
||||
return $ret;
|
||||
}
|
||||
|
||||
sub BuildDashboardBottomRow($$$$){
|
||||
my ($t,$id, $dbgroups, $dbsorting) = @_;
|
||||
my $ret;
|
||||
$ret .= "<tr><td>";
|
||||
$ret .= "<div id=\"dashboard_rowbottom_tab".$t."\" class=\"dashboard_rowbottom\">";
|
||||
$ret .= " <div class=\"ui-row dashboard_row dashboard_column\" id=\"dashboard_tab".$t."column200\">";
|
||||
$ret .= BuildGroupWidgets($t,"200",$id,$dbgroups,$dbsorting);
|
||||
$ret .= " </div>";
|
||||
$ret .= "</div>";
|
||||
$ret .= "</td></tr>";
|
||||
return $ret;
|
||||
}
|
||||
|
||||
sub BuildButtonBar($$){
|
||||
my ($d,$pos) = @_;
|
||||
my $ret;
|
||||
$ret .= "<tr><td><div class=\"dashboard_buttonbar\">";
|
||||
$ret .= "<div class=\"dashboard_buttonbar dashboard_buttonbar_".$pos."\">";
|
||||
$ret .= " <div class=\"dashboard_button\"> <span class=\"dashboard_button_icon dashboard_button_iconset\"></span> <a id=\"dashboard_button_set\" href=\"javascript:dashboard_setposition()\" title=\"Set the Position\">Set</a> </div>";
|
||||
$ret .= " <div class=\"dashboard_button\"> <a id=\"dashboard_button_lock\" href=\"javascript:dashboard_tooglelock()\" title=\"Lock Dashboard\">Lock</a> </div>";
|
||||
$ret .= " <div class=\"dashboard_button\"> <span class=\"dashboard_button_icon dashboard_button_icondetail\"></span> <a id=\"dashboard_button_detail\" href=\"/fhem?detail=$d\" title=\"Dashboard Details\">Detail</a> </div>";
|
||||
$ret .= "</div></td></tr>";
|
||||
$ret .= "</div>";
|
||||
return $ret;
|
||||
}
|
||||
|
||||
sub BuildGroupWidgets($$$$$) {
|
||||
my ($tab,$column,$id,$dbgroups, $dbsorting) = @_;
|
||||
my $ret = "";
|
||||
|
||||
my $counter = 0;
|
||||
my @storedsorting = split(":", $dbsorting);
|
||||
foreach my $singlesorting (@storedsorting) {
|
||||
my @groupdata = split(",", $singlesorting);
|
||||
if (index($dbsorting, "t".$tab."c".$column.",".$groupdata[1]) >= 0 && index($dbgroups, $groupdata[1]) >= 0 && $groupdata[1] ne "" ) { #gruppe auch für tab hinterlegt
|
||||
$ret .= " <div class=\"dashboard_widget\" data-groupwidget=\"".$singlesorting."\" id=\"".$id."t".$tab."c".$column."w".$counter."\">";
|
||||
$ret .= " <div class=\"dashboard_widgetinner\">";
|
||||
$ret .= " <div class=\"dashboard_widgetheader\">".$groupdata[1]."</div>";
|
||||
$ret .= " <div data-userheight=\"\" class=\"dashboard_content\">";
|
||||
$ret .= BuildGroup($groupdata[1]);
|
||||
$ret .= " </div>";
|
||||
$ret .= " </div>";
|
||||
$ret .= " </div>";
|
||||
$counter++;
|
||||
}
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
sub BuildGroupList($) {
|
||||
#----------------------------------------------------------------------------------------------------------
|
||||
my @dashboardgroups = split(",", $_[0]); #array for all groups to build an widget
|
||||
my %group = ();
|
||||
|
||||
@ -247,7 +355,6 @@ sub BuildGroupList($) {
|
||||
}
|
||||
}
|
||||
}
|
||||
#----------------------------------------------------------------------------------------------------------
|
||||
return %group;
|
||||
}
|
||||
|
||||
@ -318,38 +425,33 @@ sub BuildGroup($)
|
||||
return $ret;
|
||||
}
|
||||
|
||||
sub BuildEmptyColumn($) {
|
||||
my ($colcount) = @_;
|
||||
my $ret = "";
|
||||
my $id = 1;
|
||||
|
||||
if ($colcount == 1) { return $ret } else { $colcount = $colcount -1};
|
||||
for (my $i=0;$i<$colcount;$i++){
|
||||
########### Empty Column ##################
|
||||
$id = $id+$i;
|
||||
$ret .= "<div class=\"dashboard_column\" id=\"sortablecolumn$id\"></div>";
|
||||
###########################################
|
||||
}
|
||||
return $ret;
|
||||
sub GetMaxColumnId($$) {
|
||||
my ($row, $colcount) = @_;
|
||||
my $maxcolid = "0";
|
||||
|
||||
if (index($row,"bottom") > 0) { $maxcolid = "200"; }
|
||||
elsif (index($row,"center") > 0) { $maxcolid = $colcount-1; }
|
||||
elsif (index($row,"top") > 0) { $maxcolid = "100"; }
|
||||
return $maxcolid;
|
||||
}
|
||||
|
||||
sub CheckInstallation($) {
|
||||
my ($hash) = @_;
|
||||
|
||||
unless (-e $FW_dir."/pgm2/".$fwjquery) {
|
||||
Log3 $hash, 3, "[".$hash->{NAME}. "] Missing File ".$FW_dir."/pgm2/".$fwjquery;
|
||||
Log3 $hash, 3, "[".$hash->{NAME}. " V".$dashboardversion."] Missing File ".$FW_dir."/pgm2/".$fwjquery;
|
||||
$hash->{STATE} = 'Missing File, see LogFile for Details';
|
||||
}
|
||||
unless (-e $FW_dir."/pgm2/".$fwjqueryui) {
|
||||
Log3 $hash, 3, "[".$hash->{NAME}. "] Missing File ".$FW_dir."/pgm2/".$fwjqueryui;
|
||||
Log3 $hash, 3, "[".$hash->{NAME}. " V".$dashboardversion."] Missing File ".$FW_dir."/pgm2/".$fwjqueryui;
|
||||
$hash->{STATE} = 'Missing File, see LogFile for Details';
|
||||
}
|
||||
unless (-e $FW_dir."/pgm2/dashboard.js") {
|
||||
Log3 $hash, 3, "[".$hash->{NAME}. "] Missing File ".$FW_dir."/pgm2/dashboard.js";
|
||||
Log3 $hash, 3, "[".$hash->{NAME}. " V".$dashboardversion."] Missing File ".$FW_dir."/pgm2/dashboard.js";
|
||||
$hash->{STATE} = 'Missing File, see LogFile for Details';
|
||||
}
|
||||
unless (-e $FW_icondir."/default/dashboardicons.png") {
|
||||
Log3 $hash, 3, "[".$hash->{NAME}. "] Missing File ".$FW_icondir."/default/dashboardicons.png";
|
||||
Log3 $hash, 3, "[".$hash->{NAME}. " V".$dashboardversion."] Missing File ".$FW_icondir."/default/dashboardicons.png";
|
||||
$hash->{STATE} = 'Missing File, see LogFile for Details';
|
||||
}
|
||||
}
|
||||
@ -364,18 +466,75 @@ sub CheckDashboardEntry($) {
|
||||
InternalTimer ($timeToExec, 'CheckDashboardAttributUssage', $hash, 0);
|
||||
}
|
||||
|
||||
sub CheckDashboardAttributUssage($) { # replaces old disused attributes and their values
|
||||
sub CheckDashboardAttributUssage($) { # replaces old disused attributes and their values | set minimal attributes
|
||||
my ($hash) = @_;
|
||||
my $d = $hash->{NAME};
|
||||
my $detailnote = "";
|
||||
|
||||
# Replae older dashboard_showbuttonbar value (outdated 01.2014)
|
||||
# --------- Set minimal Attributes in the hope to make it easier for beginners --------------------
|
||||
my $tabcount = AttrVal($defs{$d}{NAME}, "dashboard_tabcount", "0");
|
||||
if ($tabcount eq "0") { FW_fC("attr ".$d." dashboard_tabcount 1"); }
|
||||
my $tab1groups = AttrVal($defs{$d}{NAME}, "dashboard_tab1groups", "<noGroup>");
|
||||
if ($tab1groups eq "<noGroup>") { FW_fC("attr ".$d." dashboard_tab1groups Set Your Groups - See Attribute dashboard_tab1groups-"); }
|
||||
# -------------------------------------------------------------------------------------------------
|
||||
|
||||
# -------------- Replace older dashboard_showbuttonbar value (outdated 01.2014) ------------------------------
|
||||
my $showbuttonbarvalue = AttrVal($defs{$d}{NAME}, "dashboard_showbuttonbar", "top");
|
||||
if ($showbuttonbarvalue eq "0") { FW_fC("attr ".$d." dashboard_showbuttonbar hidden"); }
|
||||
if ($showbuttonbarvalue eq "1") { FW_fC("attr ".$d." dashboard_showbuttonbar top"); }
|
||||
# ------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
# ---- detached / transferred from the old attribute to the tab extension (outdated 02.2014) ------
|
||||
my $colheight = AttrVal($defs{$d}{NAME}, "dashboard_colheight", "");
|
||||
if ($colheight ne "") {
|
||||
{ FW_fC("attr ".$d." dashboard_rowcenterheight ".$colheight); }
|
||||
{ FW_fC("deleteattr ".$d." dashboard_colheight"); }
|
||||
$detailnote = $detailnote." [dashboard_colheight -> dashboard_rowcenterheight]";
|
||||
}
|
||||
my $groups = AttrVal($defs{$d}{NAME}, "dashboard_groups", "");
|
||||
if ($groups ne "") {
|
||||
{ FW_fC("attr ".$d." dashboard_tab1groups ".$groups); }
|
||||
{ FW_fC("deleteattr ".$d." dashboard_groups"); }
|
||||
$detailnote = $detailnote." [dashboard_groups -> dashboard_tab1groups]";
|
||||
}
|
||||
|
||||
my $sorting = AttrVal($defs{$d}{NAME}, "dashboard_sorting", "");
|
||||
if ($sorting ne "") { #convert old sorting in new
|
||||
my @sortings = split(":", $sorting);
|
||||
my $newsorting = "";
|
||||
my $groupcounter = 0;
|
||||
for (my $s=0;$s<@sortings;$s++){ #0,590w3,true,246,826, 590w0,true,183,258:
|
||||
my @groups = split(",", $sortings[$s]);
|
||||
for (my $g=1;$g<@groups;$g+=4){
|
||||
my $row = AttrVal($defs{$d}{NAME}, "dashboard_row", "center");
|
||||
my $colcount = AttrVal($defs{$d}{NAME}, "dashboard_colcount", "1");
|
||||
my @dbgroups = split(",", AttrVal($defs{$d}{NAME}, "dashboard_tab1groups", ",")); #1. gruppeneintrag = 1. gespeicherte gruppe
|
||||
my @dbgroup = split("w",$groups[$g]);
|
||||
my $column = "";
|
||||
#Map old Column Count to new Count
|
||||
if ($row eq "top" && $groups[0] == 0) { $column = "t0c100"; }
|
||||
if ($row eq "center") { $column = "t0c".$groups[0]; }
|
||||
if ($row eq "bottom" && $groups[0] == 0) { $column = "200"; }
|
||||
if ($row eq "top-center" && $groups[0] == 0) { $column = "t0c100"; }
|
||||
if ($row eq "top-center" && $groups[0] != 0) { $column = "t0c".($groups[0]-1); }
|
||||
if ($row eq "center-bottom" && $groups[0] <= $colcount-1) { $column = "t0c".$groups[0]; }
|
||||
if ($row eq "center-bottom" && $groups[0] > $colcount-1) { $column = "t0c200"; }
|
||||
if ($row eq "top-center-bottom" && $groups[0] == "0") { $column = "t0c100"; }
|
||||
if ($row eq "top-center-bottom" && $groups[0] != 0 && $groups[0] <= $colcount) { $column = "t0c".($groups[0]-1); }
|
||||
if ($row eq "top-center-bottom" && $groups[0] > $colcount) { $column = "t0c200"; }
|
||||
$newsorting = $newsorting.$column.",".$dbgroups[$dbgroup[1]].",".$groups[$g+1].",".$groups[$g+3].",".$groups[$g+2].":";
|
||||
$groupcounter = $groupcounter +1;
|
||||
}
|
||||
}
|
||||
{ FW_fC("attr ".$d." dashboard_tab1sorting ".$newsorting); }
|
||||
{ FW_fC("deleteattr ".$d." dashboard_sorting"); }
|
||||
$detailnote = $detailnote." [dashboard_sorting -> dashboard_tab1sorting]";
|
||||
}
|
||||
# ------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
# Get out any change to the Logfile
|
||||
if ($showbuttonbarvalue eq "0" || $showbuttonbarvalue eq "1") {
|
||||
Log3 $hash, 3, "[".$hash->{NAME}. "]"." Using an outdated no longer used Attribute or Value. This has been corrected. Don't forget to save config.";
|
||||
if ($showbuttonbarvalue eq "0" || $showbuttonbarvalue eq "1" || $groups ne "" || $sorting ne "") {
|
||||
Log3 $hash, 3, "[".$hash->{NAME}. " V".$dashboardversion."]"." Using an outdated no longer used Attribute or Value. This has been corrected. Don't forget to save config. ".$detailnote;
|
||||
}
|
||||
}
|
||||
|
||||
@ -385,7 +544,7 @@ sub CreateDashboardEntry($) {
|
||||
my $h = $hash->{NAME};
|
||||
if (!defined $defs{$h."_weblink"}) {
|
||||
FW_fC("define ".$h."_weblink weblink htmlCode {DashboardAsHtml(\"".$h."\")}");
|
||||
Log3 $hash, 3, "[".$hash->{NAME}. "]"." Weblink dosen't exists. Created weblink ".$h."_weblink. Don't forget to save config.";
|
||||
Log3 $hash, 3, "[".$hash->{NAME}. " V".$dashboardversion."]"." Weblink dosen't exists. Created weblink ".$h."_weblink. Don't forget to save config.";
|
||||
}
|
||||
FW_fC("attr ".$h."_weblink room ".$dashboardhiddenroom);
|
||||
|
||||
@ -397,14 +556,14 @@ sub CreateDashboardEntry($) {
|
||||
if (index($hr,$dashboardname) != -1 && index($hr,$dashboardhiddenroom) == -1) {
|
||||
$hr =~ s/$dashboardname/$dashboardhiddenroom/g;
|
||||
FW_fC("attr ".$defs{$dn}{NAME}." hiddenroom ".$hr);
|
||||
Log3 $hash, 3, "[".$hash->{NAME}. "]"." Corrected hiddenroom '".$dashboardname."' -> '".$dashboardhiddenroom."' in ".$defs{$dn}{NAME}.". Don't forget to save config.";
|
||||
Log3 $hash, 3, "[".$hash->{NAME}. " V".$dashboardversion."]"." Corrected hiddenroom '".$dashboardname."' -> '".$dashboardhiddenroom."' in ".$defs{$dn}{NAME}.". Don't forget to save config.";
|
||||
}
|
||||
#-------------------------------------------------------------------------------------------------
|
||||
|
||||
if (index($hr,$dashboardhiddenroom) == -1){
|
||||
if ($hr eq "") {FW_fC("attr ".$defs{$dn}{NAME}." hiddenroom ".$dashboardhiddenroom);}
|
||||
else {FW_fC("attr ".$defs{$dn}{NAME}." hiddenroom ".$hr.",".$dashboardhiddenroom);}
|
||||
Log3 $hash, 3, "[".$hash->{NAME}. "]"." Added hiddenroom '".$dashboardhiddenroom."' to ".$defs{$dn}{NAME}.". Don't forget to save config.";
|
||||
Log3 $hash, 3, "[".$hash->{NAME}. " V".$dashboardversion."]"." Added hiddenroom '".$dashboardhiddenroom."' to ".$defs{$dn}{NAME}.". Don't forget to save config.";
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -420,8 +579,10 @@ sub Dashboard_define ($$) {
|
||||
$data{FWEXT}{testjs}{SCRIPT} = "/pgm2/dashboard.js";
|
||||
$hash->{STATE} = 'Initialized';
|
||||
|
||||
|
||||
CheckInstallation($hash);
|
||||
CheckDashboardEntry($hash);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@ -436,7 +597,18 @@ sub Dashboard_Undef ($$) {
|
||||
sub Dashboard_detailFn() {
|
||||
my ($name, $d, $room, $pageHash) = @_;
|
||||
my $hash = $defs{$name};
|
||||
return DashboardAsHtml($d);
|
||||
#return DashboardAsHtml($d); #creates confusion and leads to incorrect storage of items
|
||||
return;
|
||||
}
|
||||
|
||||
sub Dashboard_Attr($$$) {
|
||||
my ($cmd, $name, $attrName, $attrVal) = @_;
|
||||
|
||||
#if ($cmd eq "set") {
|
||||
# $dashboarddata{$attrName} = $attrVal;
|
||||
# Log 1, "[DASHBOARD simple debug] ".$attrName." - ".$attrVal;
|
||||
# }
|
||||
return;
|
||||
}
|
||||
|
||||
1;
|
||||
@ -467,7 +639,7 @@ sub Dashboard_detailFn() {
|
||||
define anyViews Dashboard<br>
|
||||
attr anyViews dashboard_colcount 2<br>
|
||||
attr anyViews dashboard_colwidth 400<br>
|
||||
attr anyViews dashboard_groups <Group1>,<Group2>,<Group3><br>
|
||||
attr anyViews dashboard_tab1groups <Group1>,<Group2>,<Group3><br>
|
||||
attr anyViews dashboard_lockstate unlock<br>
|
||||
attr anyViews dashboard_showhelper 1<br>
|
||||
</code>
|
||||
@ -486,15 +658,76 @@ sub Dashboard_detailFn() {
|
||||
<a name="Dashboardattr"></a>
|
||||
<h4>Attributes</h4>
|
||||
|
||||
<a name="dashboard_tabcount"></a>
|
||||
<li>dashboard_tabcount<br>
|
||||
Returns the number of displayed tabs.
|
||||
Default: 1
|
||||
</li><br>
|
||||
<a name="dashboard_activetab"></a>
|
||||
<li>dashboard_activetab<br>
|
||||
Specifies which tab is activated. Can be set manually, but is also set by the switch "Set" to the currently active tab.
|
||||
Default: 1
|
||||
</li><br>
|
||||
<a name="dashboard_tab1name"></a>
|
||||
<li>dashboard_tab1name<br>
|
||||
Title of Tab 1.
|
||||
Default: Dashboard-Tab 1
|
||||
</li><br>
|
||||
<a name="dashboard_tab2name"></a>
|
||||
<li>dashboard_tab2name<br>
|
||||
Title of Tab 2.
|
||||
Default: Dashboard-Tab 2
|
||||
</li><br>
|
||||
<a name="dashboard_tab3name"></a>
|
||||
<li>dashboard_tab3name<br>
|
||||
Title of Tab 3.
|
||||
Default: Dashboard-Tab 3
|
||||
</li><br>
|
||||
<a name="dashboard_tab4name"></a>
|
||||
<li>dashboard_tab4name<br>
|
||||
Title of Tab 4.
|
||||
Default: Dashboard-Tab 4
|
||||
</li><br>
|
||||
<a name="dashboard_tab5name"></a>
|
||||
<li>dashboard_tab5name<br>
|
||||
Title of Tab 5.
|
||||
Default: Dashboard-Tab 5
|
||||
</li><br>
|
||||
<a name="dashboard_sorting"></a>
|
||||
<li>dashboard_sorting<br>
|
||||
Contains the position of each group. Value is written by the "Set" button. It is not recommended to take manual changes.
|
||||
This attribute is no longer used and will be removed at a later date. It was replaced with <br>
|
||||
dashboard_tab1sorting, dashboard_tab2sorting, dashboard_tab3sorting, dashboard_tab4sorting, dashboard_tab5sorting
|
||||
</li><br>
|
||||
<a name="dashboard_tab1sorting"></a>
|
||||
<li>dashboard_tab1sorting<br>
|
||||
Contains the position of each group in Tab 1. Value is written by the "Set" button. It is not recommended to take manual changes.
|
||||
</li><br>
|
||||
<a name="dashboard_tab2sorting"></a>
|
||||
<li>dashboard_tab2sorting<br>
|
||||
Contains the position of each group in Tab 2. Value is written by the "Set" button. It is not recommended to take manual changes.
|
||||
</li><br>
|
||||
<a name="dashboard_tab3sorting"></a>
|
||||
<li>dashboard_tab3sorting<br>
|
||||
Contains the position of each group in Tab 3. Value is written by the "Set" button. It is not recommended to take manual changes.
|
||||
</li><br>
|
||||
<a name="dashboard_tab4sorting"></a>
|
||||
<li>dashboard_tab4sorting<br>
|
||||
Contains the position of each group in Tab 4. Value is written by the "Set" button. It is not recommended to take manual changes.
|
||||
</li><br>
|
||||
<a name="dashboard_tab5sorting"></a>
|
||||
<li>dashboard_tab5sorting<br>
|
||||
Contains the position of each group in Tab 5. Value is written by the "Set" button. It is not recommended to take manual changes.
|
||||
</li><br>
|
||||
<a name="dashboard_row"></a>
|
||||
<li>dashboard_row<br>
|
||||
To select which rows are displayed. top only; center only; bottom only; top and center; center and bottom; top,center and bottom.<br>
|
||||
Default: center
|
||||
</li><br>
|
||||
</li><br>
|
||||
<a name="dashboard_width"></a>
|
||||
<li>dashboard_width<br>
|
||||
To determine the Dashboardwidth. The value can be specified, or an absolute width value (eg 1200) in pixels in% (eg 80%).<br>
|
||||
Default: 100%
|
||||
</li><br>
|
||||
<a name="dashboard_colwidth"></a>
|
||||
<li>dashboard_colwidth<br>
|
||||
Width of each column in which the groups may be positioned. <br>
|
||||
@ -502,23 +735,49 @@ sub Dashboard_detailFn() {
|
||||
</li><br>
|
||||
<a name="dashboard_colheight"></a>
|
||||
<li>dashboard_colheight<br>
|
||||
Height of each column in which the groups may be positioned. <br>
|
||||
Default: 400
|
||||
This attribute is no longer used and will be removed at a later date. It was replaced with <br>
|
||||
dashboard_rowcenterheight
|
||||
</li><br>
|
||||
<a name="dashboard_rowcenterheight"></a>
|
||||
<li>dashboard_rowcenterheight<br>
|
||||
Height of the center row in which the groups may be positioned. <br>
|
||||
Default: 400
|
||||
</li><br>
|
||||
<a name="dashboard_rowtopheight"></a>
|
||||
<li>dashboard_rowtopheight<br>
|
||||
Height of the top row in which the groups may be positioned. <br>
|
||||
Default: 250
|
||||
</li><br>
|
||||
<a name=""dashboard_rowbottomheight"></a>
|
||||
<a name="dashboard_rowbottomheight"></a>
|
||||
<li>"dashboard_rowbottomheight<br>
|
||||
Height of the bottom row in which the groups may be positioned.<br>
|
||||
Default: 250
|
||||
</li><br>
|
||||
<a name="dashboard_groups"></a>
|
||||
<li>dashboard_groups<br>
|
||||
Comma-separated list of the names of the groups to be displayed.
|
||||
This attribute is no longer used and will be removed at a later date. It was replaced with <br>
|
||||
dashboard_tab1groups, dashboard_tab2groups, dashboard_tab3groups, dashboard_tab4groups, dashboard_tab5groups
|
||||
</li><br>
|
||||
<a name="dashboard_tab1groups"></a>
|
||||
<li>dashboard_tab1groups<br>
|
||||
Comma-separated list of the names of the groups to be displayed in Tab 1.
|
||||
</li><br>
|
||||
<a name="dashboard_tab2groups"></a>
|
||||
<li>dashboard_tab1groups<br>
|
||||
Comma-separated list of the names of the groups to be displayed in Tab 2.
|
||||
</li><br>
|
||||
<a name="dashboard_tab3groups"></a>
|
||||
<li>dashboard_tab1groups<br>
|
||||
Comma-separated list of the names of the groups to be displayed in Tab 3.
|
||||
</li><br>
|
||||
<a name="dashboard_tab4groups"></a>
|
||||
<li>dashboard_tab1groups<br>
|
||||
Comma-separated list of the names of the groups to be displayed in Tab 4.
|
||||
</li><br>
|
||||
<a name="dashboard_tab5groups"></a>
|
||||
<li>dashboard_tab1groups<br>
|
||||
Comma-separated list of the names of the groups to be displayed in Tab 5.
|
||||
</li><br>
|
||||
<a name="dashboard_lockstate"></a>
|
||||
<li>dashboard_lockstate<br>
|
||||
When set to "unlock" you can edit the Dashboard. When set to "lock" no change can be made. <br>
|
||||
@ -580,7 +839,7 @@ sub Dashboard_detailFn() {
|
||||
define anyViews Dashboard<br>
|
||||
attr anyViews dashboard_colcount 2<br>
|
||||
attr anyViews dashboard_colwidth 400<br>
|
||||
attr anyViews dashboard_groups <Group1>,<Group2>,<Group3><br>
|
||||
attr anyViews dashboard_tab1groups <Group1>,<Group2>,<Group3><br>
|
||||
attr anyViews dashboard_lockstate unlock<br>
|
||||
attr anyViews dashboard_showhelper 1<br>
|
||||
</code>
|
||||
@ -599,15 +858,76 @@ sub Dashboard_detailFn() {
|
||||
<a name="Dashboardattr"></a>
|
||||
<h4>Attributes</h4>
|
||||
|
||||
<a name="dashboard_tabcount"></a>
|
||||
<li>dashboard_tabcount<br>
|
||||
Gibt die Anzahl der angezeigten Tabs an.
|
||||
Default: 1
|
||||
</li><br>
|
||||
<a name="dashboard_activetab"></a>
|
||||
<li>dashboard_activetab<br>
|
||||
Gibt an welches Tab aktiviert ist. Kann manuell gesetzt werden, wird aber auch durch den Schalter "Set" auf das gerade aktive Tab gesetzt.
|
||||
Default: 1
|
||||
</li><br>
|
||||
<a name="dashboard_tab1name"></a>
|
||||
<li>dashboard_tab1name<br>
|
||||
Titel des 1. Tab.
|
||||
Default: Dashboard-Tab 1
|
||||
</li><br>
|
||||
<a name="dashboard_tab2name"></a>
|
||||
<li>dashboard_tab2name<br>
|
||||
Titel des 2. Tab.
|
||||
Default: Dashboard-Tab 2
|
||||
</li><br>
|
||||
<a name="dashboard_tab3name"></a>
|
||||
<li>dashboard_tab3name<br>
|
||||
Titel des 3. Tab.
|
||||
Default: Dashboard-Tab 3
|
||||
</li><br>
|
||||
<a name="dashboard_tab4name"></a>
|
||||
<li>dashboard_tab4name<br>
|
||||
Titel des 4. Tab.
|
||||
Default: Dashboard-Tab 4
|
||||
</li><br>
|
||||
<a name="dashboard_tab5name"></a>
|
||||
<li>dashboard_tab5name<br>
|
||||
Titel des 5. Tab.
|
||||
Default: Dashboard-Tab 5
|
||||
</li><br>
|
||||
<a name="dashboard_sorting"></a>
|
||||
<li>dashboard_sorting<br>
|
||||
Enthält die Poistionierung jeder Gruppe. Der Wert wird mit der Schaltfläche "Set" geschrieben. Es wird nicht empfohlen dieses Attribut manuelle zu ändern
|
||||
Dieses Attribut ist nicht mehr zu verwenden und wird zu einem späteren Zeitpunkt entfernt. Es wurde ersetzt durch <br>
|
||||
dashboard_tab1sorting, dashboard_tab2sorting, dashboard_tab3sorting, dashboard_tab4sorting, dashboard_tab5sorting
|
||||
</li><br>
|
||||
<a name="dashboard_tab1sorting"></a>
|
||||
<li>dashboard_tab1sorting<br>
|
||||
Enthält die Poistionierung jeder Gruppe im Tab 1. Der Wert wird mit der Schaltfläche "Set" geschrieben. Es wird nicht empfohlen dieses Attribut manuelle zu ändern
|
||||
</li><br>
|
||||
<a name="dashboard_tab2sorting"></a>
|
||||
<li>dashboard_tab2sorting<br>
|
||||
Enthält die Poistionierung jeder Gruppe im Tab 2. Der Wert wird mit der Schaltfläche "Set" geschrieben. Es wird nicht empfohlen dieses Attribut manuelle zu ändern
|
||||
</li><br>
|
||||
<a name="dashboard_tab3sorting"></a>
|
||||
<li>dashboard_tab3sorting<br>
|
||||
Enthält die Poistionierung jeder Gruppe im Tab 3. Der Wert wird mit der Schaltfläche "Set" geschrieben. Es wird nicht empfohlen dieses Attribut manuelle zu ändern
|
||||
</li><br>
|
||||
<a name="dashboard_tab4sorting"></a>
|
||||
<li>dashboard_tab4sorting<br>
|
||||
Enthält die Poistionierung jeder Gruppe im Tab 4. Der Wert wird mit der Schaltfläche "Set" geschrieben. Es wird nicht empfohlen dieses Attribut manuelle zu ändern
|
||||
</li><br>
|
||||
<a name="dashboard_tab5sorting"></a>
|
||||
<li>dashboard_tab5sorting<br>
|
||||
Enthält die Poistionierung jeder Gruppe im Tab 5. Der Wert wird mit der Schaltfläche "Set" geschrieben. Es wird nicht empfohlen dieses Attribut manuelle zu ändern
|
||||
</li><br>
|
||||
<a name="dashboard_row"></a>
|
||||
<li>dashboard_row<br>
|
||||
Auswahl welche Zeilen angezeigt werden sollen. top (nur Oben), center (nur Mitte), bottom (nur Unten) und den Kombinationen daraus.<br>
|
||||
Standard: center
|
||||
</li><br>
|
||||
</li><br>
|
||||
<a name="dashboard_width"></a>
|
||||
<li>dashboard_width<br>
|
||||
Zum bestimmen der Dashboardbreite. Der Wert kann in % (z.B. 80%) angegeben werden oder als absolute Breite (z.B. 1200) in Pixel.<br>
|
||||
Standard: 100%
|
||||
</li><br>
|
||||
<a name="dashboard_colwidth"></a>
|
||||
<li>dashboard_colwidth<br>
|
||||
Breite der Spalte, in der die Gruppen angeordnet werden. Gilt für "dashboard_row center, top-center-bottom, center-bottom".<br>
|
||||
@ -616,7 +936,12 @@ sub Dashboard_detailFn() {
|
||||
</li><br>
|
||||
<a name="dashboard_colheight"></a>
|
||||
<li>dashboard_colheight<br>
|
||||
Höhe der Spalten, in der die Gruppen angeordnet werden. Gilt nur für "dashboard_row center, top-center-bottom, center-bottom". <br>
|
||||
Dieses Attribut ist nicht mehr zu verwenden und wird zu einem späteren Zeitpunkt entfernt. Es wurde ersetzt durch <br>
|
||||
dashboard_rowcenterheight
|
||||
</li><br>
|
||||
<a name="dashboard_rowcenterheight"></a>
|
||||
<li>dashboard_rowcenterheight<br>
|
||||
Höhe der mittleren Zeile, in der die Gruppen angeordnet werden. <br>
|
||||
Standard: 400
|
||||
</li><br>
|
||||
<a name="dashboard_rowtopheight"></a>
|
||||
@ -624,14 +949,35 @@ sub Dashboard_detailFn() {
|
||||
Höhe der oberen Zeile, in der die Gruppen angeordnet werden. <br>
|
||||
Standard: 250
|
||||
</li><br>
|
||||
<a name=""dashboard_rowbottomheight"></a>
|
||||
<a name="dashboard_rowbottomheight"></a>
|
||||
<li>"dashboard_rowbottomheight<br>
|
||||
Höhe der unteren Zeile, in der die Gruppen angeordnet werden.<br>
|
||||
Standard: 250
|
||||
</li><br>
|
||||
<a name="dashboard_groups"></a>
|
||||
<li>dashboard_groups<br>
|
||||
Durch Komma getrennte Liste mit den Namen der Gruppen, die angezeigt werden. Falsche Gruppennamen werden hervorgehoben.
|
||||
Dieses Attribut ist nicht mehr zu verwenden und wird zu einem späteren Zeitpunkt entfernt. Es wurde ersetzt durch <br>
|
||||
dashboard_tab1groups, dashboard_tab2groups, dashboard_tab3groups, dashboard_tab4groups, dashboard_tab5groups.
|
||||
</li><br>
|
||||
<a name="dashboard_tab1groups"></a>
|
||||
<li>dashboard_tab1groups<br>
|
||||
Durch Komma getrennte Liste mit den Namen der Gruppen, die im Tab 1 angezeigt werden. Falsche Gruppennamen werden hervorgehoben.
|
||||
</li><br>
|
||||
<a name="dashboard_tab2groups"></a>
|
||||
<li>dashboard_tab2groups<br>
|
||||
Durch Komma getrennte Liste mit den Namen der Gruppen, die im Tab 2 angezeigt werden. Falsche Gruppennamen werden hervorgehoben.
|
||||
</li><br>
|
||||
<a name="dashboard_tab3groups"></a>
|
||||
<li>dashboard_tab3groups<br>
|
||||
Durch Komma getrennte Liste mit den Namen der Gruppen, die im Tab 3 angezeigt werden. Falsche Gruppennamen werden hervorgehoben.
|
||||
</li><br>
|
||||
<a name="dashboard_tab4groups"></a>
|
||||
<li>dashboard_tab4groups<br>
|
||||
Durch Komma getrennte Liste mit den Namen der Gruppen, die im Tab 4 angezeigt werden. Falsche Gruppennamen werden hervorgehoben.
|
||||
</li><br>
|
||||
<a name="dashboard_tab5groups"></a>
|
||||
<li>dashboard_tab5groups<br>
|
||||
Durch Komma getrennte Liste mit den Namen der Gruppen, die im Tab 5 angezeigt werden. Falsche Gruppennamen werden hervorgehoben.
|
||||
</li><br>
|
||||
<a name="dashboard_lockstate"></a>
|
||||
<li>dashboard_lockstate<br>
|
||||
|
@ -4,111 +4,137 @@
|
||||
// Released : 14.11.2013 @svenson08
|
||||
// Version : 1.00
|
||||
// Revisions:
|
||||
// 0001: Released to testers
|
||||
// 0002: Add DebugMsg. Fix independent Groupsize adjustment after set & siterefresh. Fix
|
||||
// wrong set of +Toogle Icon on Siderefresh
|
||||
//
|
||||
// 1.01: Released to testers
|
||||
// 1.02: Add DebugMsg. Fix independent Groupsize adjustment after set & siterefresh. Fix
|
||||
// wrong set of +Toogle Icon on Siderefresh
|
||||
// 2.00: First Changes vor Dashboard Tabs. Change method store Positiondata. optimization restore Positiondata. Clear poor routines.
|
||||
// Change max/min Values for Groupresize. Top- and Bottom-Row always 100%
|
||||
// Known Bugs/Todo's
|
||||
// See 95_Dashboard.pm
|
||||
//########################################################################################
|
||||
//########################################################################################
|
||||
|
||||
function saveOrder() {
|
||||
var SaveResult = "";
|
||||
//------------- Build new Position string ---------------
|
||||
var EndSaveResult = "";
|
||||
var ActiveTab = $("#tabs .ui-tabs-panel:visible").attr("id").substring(14,13);
|
||||
//------------------- Build new Position string ----------------------
|
||||
$(".dashboard_column").each(function(index, value){
|
||||
var colid = value.id;
|
||||
var order = $('#' + colid).sortable("toArray");
|
||||
for ( var i = 0, n = order.length; i < n; i++ ) {
|
||||
var v = $('#' + order[i]).find('.dashboard_content').is(':visible');
|
||||
var w = $('#' + order[i]).outerWidth();
|
||||
if ( $('#' + order[i]).find(".dashboard_content").data("userheight") == null ) {
|
||||
var h = $('#' + order[i]).outerHeight();
|
||||
} else {
|
||||
var h = $('#' + order[i]).find(".dashboard_content").data("userheight");
|
||||
if (h.length == 0) { var h = $('#' + order[i]).outerHeight(); }
|
||||
var SaveResult = "";
|
||||
var neworder = $('#' + colid).sortable("toArray");
|
||||
for ( var i = 0, n = neworder.length; i < n; i++ ) {
|
||||
var tab = $('#' + neworder[i]).parent().attr("id").substring(14,13);
|
||||
var column = $('#' + neworder[i]).parent().attr("id").substring(20);
|
||||
if (ActiveTab == tab) {
|
||||
var groupdata = ($('#' + neworder[i]).data("groupwidget").split(",")); //get curren Group-Configuration
|
||||
if (groupdata[1] != ''){
|
||||
groupdata[0] = "t"+tab+"c"+$('#' + neworder[i]).parent().attr("id").substring(20);
|
||||
groupdata[2] = $('#' + neworder[i]).find('.dashboard_content').is(':visible');
|
||||
groupdata[3] = $('#' + neworder[i]).outerWidth();
|
||||
|
||||
if (groupdata[4] == 0) {groupdata[4] = $('#' + neworder[i]).outerHeight();}
|
||||
if (groupdata[2] == true) {
|
||||
groupdata[4] = $('#' + neworder[i]).outerHeight();
|
||||
$('#' + neworder[i]).find(".dashboard_content").data("userheight", $('#' + neworder[i]).outerHeight());
|
||||
}
|
||||
$(neworder[i]).data("groupwidget",groupdata); //store in current Widget
|
||||
SaveResult = SaveResult+groupdata+":";
|
||||
}
|
||||
}
|
||||
order[i] = order[i]+","+v+","+h+","+w;
|
||||
}
|
||||
SaveResult = SaveResult + index+','+order+':';
|
||||
//Result: <ColumNumber>,<portlet-1>,<status>,<height>,<width>,<portlet-n>,<status>,<height>,<width>:<columNumber.....
|
||||
}
|
||||
if (SaveResult != ""){ EndSaveResult = EndSaveResult + SaveResult; } //NewResult: <tab><column>,<portlet-1>,<status>,<height>,<width>,<portlet-n>,<status>,<height>,<width>:<columNumber.....
|
||||
});
|
||||
//-------------------------------------------------------
|
||||
//------------ Set the new href String ------------------
|
||||
document.getElementById("dashboard_currentsorting").value = SaveResult;
|
||||
if (document.getElementById("dashboard_button_set")) {
|
||||
document.getElementById("dashboard_button_set").classList.add('dashboard_button_changed'); //Mark that the Changes are not saved
|
||||
}
|
||||
//-------------------------------------------------------
|
||||
//------------------------------------------------------------------------
|
||||
//--------------------- Store new Positions ------------------------
|
||||
if (EndSaveResult != "") { $("#tabs .ui-tabs-panel:visible").data("tabwidgets",EndSaveResult); } //store widgetposition in active tab Widget
|
||||
document.getElementById("dashboard_button_set").classList.add('dashboard_button_changed'); //Mark that the Changes are not saved
|
||||
//------------------------------------------------------------------------
|
||||
}
|
||||
|
||||
function restoreOrder() {
|
||||
$(".dashboard_column").each(function(index, value) {
|
||||
var params = (document.getElementById("dashboard_attr").value).split(","); //get current Configuration
|
||||
var coldata = (document.getElementById("dashboard_currentsorting").value).split(":"); //get the position string from the hiddenfield
|
||||
var rowwidth = params[7] * params[1];
|
||||
//------------------------------------------------------------
|
||||
var params = (document.getElementById("dashboard_attr").value).split(","); //get current Configuration
|
||||
var ActiveTab = $("#tabs .ui-tabs-panel:visible");
|
||||
var ActiveTabId = ActiveTab.attr("id").substring(14,13);
|
||||
var colwidth = ((100/params[7])-(0.5/params[7]))+"%"; //current
|
||||
//var aColWidth = GetColWidth(params[7],params[12]); //future
|
||||
|
||||
$(".dashboard_column").width(params[1]); //Set Columwidth
|
||||
$(".ui-row").width(rowwidth); //Set Rowwidth
|
||||
if (value.id == "sortablecolumn100") { //Set RowHeight
|
||||
$('#' + value.id).height(params[8]);
|
||||
$('#' + value.id).width(rowwidth);
|
||||
var widgetmaxwidth = rowwidth;
|
||||
} else {
|
||||
if (value.id == "sortablecolumn200") {
|
||||
$('#' + value.id).height(params[9]);
|
||||
$('#' + value.id).width(rowwidth);
|
||||
var widgetmaxwidth = rowwidth;
|
||||
} else {
|
||||
$('#' + value.id).height(params[5]);
|
||||
var widgetmaxwidth = params[1];
|
||||
}
|
||||
}
|
||||
//--------------------------------------------- Set Row and Column Settings --------------------------------------------------------------------------------------------
|
||||
$("#dashboard").width(params[1]);
|
||||
if (ActiveTab.has("#dashboard_rowtop_tab"+ActiveTabId).length){ $("#dashboard_rowtop_tab"+ActiveTabId).height(params[8]); }
|
||||
if (ActiveTab.has("#dashboard_rowcenter_tab"+ActiveTabId).length){ $("#dashboard_rowcenter_tab"+ActiveTabId).height(params[5]); }
|
||||
if (ActiveTab.has("#dashboard_rowbottom_tab"+ActiveTabId).length){ $("#dashboard_rowbottom_tab"+ActiveTabId).height(params[9]); }
|
||||
|
||||
for (var i = 0, n = params[7]; i <= n; i++) {
|
||||
if (ActiveTab.has("#dashboard_tab"+ActiveTabId+"column"+i).length) { $("#dashboard_tab"+ActiveTabId+"column"+i).width(colwidth); } //current
|
||||
//if (ActiveTab.has("#dashboard_tab"+ActiveTabId+"column"+i).length) { $("#dashboard_tab"+ActiveTabId+"column"+i).width(aColWidth[i]+"%"); } //future
|
||||
}
|
||||
if (params[2] == 1) { $(".ui-row").addClass("dashboard_columnhelper"); } else { $(".ui-row").removeClass("dashboard_columnhelper"); }//set showhelper
|
||||
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
$(".dashboard_widget").each(function(index, value) {
|
||||
var groupdata = $(this).data("groupwidget").split(","); //get the position string from the data
|
||||
var TabId = groupdata[0].substring(1,2);
|
||||
var ColumnId = groupdata[0].substring(3,groupdata[0].length);
|
||||
|
||||
if (params[2] == 1) { $(".dashboard_column").addClass("dashboard_columnhelper"); } else { $(".dashboard_column").removeClass("dashboard_columnhelper"); }//set helperclass
|
||||
if (TabId == ActiveTabId){ //Restore only for the current active tab
|
||||
var groupname = groupdata[1];
|
||||
var visible = groupdata[2];
|
||||
var width = groupdata[3];
|
||||
var height = groupdata[4];
|
||||
|
||||
for (var i = 0, n = coldata.length; i < n; i++ ) { //for each column (Value = 1,name1,state1,name2,state2)
|
||||
var portletsdata = coldata[i].split(","); //protlet array / all portlets in this (=index) column
|
||||
//---------- Max. Width of an Group. Reduce group-with if need | Min. Width if need ----------
|
||||
var widgetmaxwidth = $(this).parent().width();
|
||||
if (width == 0) { width = $(this).find(".dashboard_content").children().outerWidth()+10;}
|
||||
if (width > widgetmaxwidth) {width = widgetmaxwidth}; //width is =< columnwith
|
||||
$(this).outerWidth(width);
|
||||
//---------------------------------------------------------------------------------------------------------------
|
||||
//-------------------------------- Height of an Group. | Min. Height if need ---------------------------
|
||||
if (height == 0) { height = $(this).outerHeight();}
|
||||
if ($(this).outerHeight() > height) {$(this).outerHeight(height); } //set heigh only if > group min. height
|
||||
//---------------------------------------------------------------------------------------------------------------
|
||||
|
||||
//alert("Load Event (1) \nColumn="+index+"\nSaveResult="+coldata+"\nColumndata=("+i+"/"+coldata.length+") "+portletsdata);
|
||||
for (var j = 1, m = portletsdata.length; j < m; j += 4 ) {
|
||||
//alert("Load Event (2) \nColumn="+index+"\nSaveResult="+coldata+"\nColumndata=("+i+"/"+coldata.length+"|"+j+"/"+portletsdata.length+") "+portletsdata+
|
||||
//"\n\nPortletdata (ID)="+portletsdata[j]+"\nPortletdata (Visible)="+portletsdata[j+1]+"\nPortletheight (Height)="+portletsdata[j+2]+"\nPortletwidth (Width)="+portletsdata[j+3]);
|
||||
if (portletsdata[0] == index && portletsdata[0] != '' && portletsdata[j] != '' && portletsdata[j+1] != '') {
|
||||
var portletID = portletsdata[j];
|
||||
var visible = portletsdata[j+1];
|
||||
var height = portletsdata[j+2]-5; //( limited -5 by CSS)
|
||||
var width = portletsdata[j+3]-5; //( limited -5 by CSS)
|
||||
|
||||
if (width > widgetmaxwidth) {width = widgetmaxwidth}; //Fix with ist widget width > current column width.
|
||||
var portlet = $(".dashboard_column").find('#' + portletID);
|
||||
portlet.appendTo($('#' + value.id));
|
||||
portlet.outerHeight(height);
|
||||
portlet.outerWidth(width);
|
||||
if (params[2] == 1) { portlet.addClass("dashboard_widgethelper"); } else { portlet.removeClass("dashboard_widgethelper"); }//Show Widget-Helper Frame
|
||||
if (visible === 'false') {
|
||||
|
||||
if (portlet.find(".dashboard_widgetheader").find(".dashboard_button_icon").hasClass("dashboard_button_iconminus")) {
|
||||
portlet.find(".dashboard_widgetheader").find(".dashboard_button_icon").removeClass( "dashboard_button_iconminus" );
|
||||
portlet.find(".dashboard_widgetheader").find(".dashboard_button_icon").addClass( "dashboard_button_iconplus" );
|
||||
}
|
||||
|
||||
var currHeigth = Math.round(portlet.height());
|
||||
portlet.find(".dashboard_content").data("userheight", currHeigth);
|
||||
portlet.find(".dashboard_content").hide();
|
||||
var newHeigth = portlet.find(".dashboard_widgetinner").height()+5;
|
||||
portlet.height(newHeigth);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
$(this).find(".dashboard_content").data("userheight", height-5);
|
||||
if (params[2] == 1) { $(this).addClass("dashboard_widgethelper"); } else { $(this).removeClass("dashboard_widgethelper"); }//Show Widget-Helper Frame
|
||||
|
||||
if (visible === 'false') {
|
||||
if ($(this).find("span").hasClass("dashboard_button_iconminus")){
|
||||
$(this).find("span")
|
||||
.removeClass( "dashboard_button_iconminus" )
|
||||
.addClass( "dashboard_button_iconplus" );
|
||||
}
|
||||
$(this).find(".dashboard_content").hide();
|
||||
$(this).height($(this).find(".dashboard_widgetinner").height()+5);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function GetColWidth(ColCount, ColWidth){
|
||||
var aColWidth = ColWidth.replace(/%/g, "").split(":");
|
||||
if (aColWidth.length > ColCount) { aColWidth.length = ColCount; }
|
||||
if (aColWidth.length < ColCount) { for (var i = aColWidth.length; i < ColCount; i++) { aColWidth[i] = "20"; } } //fill missin width parts with 20%
|
||||
var ColWidthCount = aColWidth.length;
|
||||
var ColWidthSum = 0;
|
||||
for (var i = 0; i < ColWidthCount; i++) { ColWidthSum = parseInt(aColWidth[i]) + ColWidthSum; }
|
||||
|
||||
if (ColWidthSum > 100) { //reduce width down to 100%
|
||||
while (ColWidthSum > 100){
|
||||
ColWidthSum = 0;
|
||||
for (var i = 0; i < ColWidthCount; i++) {
|
||||
if (parseInt(aColWidth[i]) > 10) { aColWidth[i] = parseInt(aColWidth[i])-1; }
|
||||
ColWidthSum = parseInt(aColWidth[i]) + ColWidthSum;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ColWidthSum < 100) { aColWidth[ColWidthCount-1] = parseInt(aColWidth[ColWidthCount-1]) + (100 - ColWidthSum); } //fill up to 100% width
|
||||
|
||||
aColWidth[0] = parseInt(aColWidth[0])-(0.2 * ColCount);
|
||||
return aColWidth;
|
||||
}
|
||||
|
||||
//Only use for debugging
|
||||
function showdebugMessage(msg){
|
||||
document.getElementById("dashboard_jsdebug").value = document.getElementById("dashboard_jsdebug").value+" "+msg;
|
||||
document.getElementById("dashboard_jsdebug").value = msg;
|
||||
}
|
||||
|
||||
function dashboard_tooglelock(){
|
||||
@ -144,66 +170,69 @@ function dashboard_unsetlock(){
|
||||
$( ".dashboard_column" ).sortable( "option", "disabled", false );
|
||||
if (params[2] == 1) { $( ".dashboard_widget" ).addClass("dashboard_widgethelper"); } else { $( ".dashboard_widget" ).removeClass("dashboard_widgethelper"); }//Show Widget-Helper Frame
|
||||
if (params[2] == 1) { $( ".dashboard_column" ).addClass("dashboard_columnhelper"); } else { $( ".dashboard_column" ).removeClass("dashboard_columnhelper"); }//Show Widget-Helper Frame
|
||||
|
||||
dashboard_modifyWidget();
|
||||
//############################################################
|
||||
}
|
||||
|
||||
function dashboard_setposition(){
|
||||
var params = (document.getElementById("dashboard_attr").value).split(","); //get current Configuration
|
||||
var sorting = document.getElementById("dashboard_currentsorting").value;
|
||||
FW_cmd(document.location.pathname+'?XHR=1&cmd.'+params[0]+'=attr '+params[0]+' dashboard_sorting '+sorting);
|
||||
document.getElementById("dashboard_button_set").classList.remove('dashboard_button_changed');
|
||||
function dashboard_setposition(){
|
||||
var params = (document.getElementById("dashboard_attr").value).split(","); //get current Configuration
|
||||
//------------------- store group position ----------------------------
|
||||
for (var i = 0, n = params[10]; i < n; i++ ) {
|
||||
if ($("#dashboard_tab"+i).data("tabwidgets") != null) {
|
||||
var j = i+1;
|
||||
FW_cmd(document.location.pathname+'?XHR=1&cmd.'+params[0]+'=attr '+params[0]+' dashboard_tab'+j+'sorting '+$("#dashboard_tab"+i).data("tabwidgets"));
|
||||
}
|
||||
}
|
||||
document.getElementById("dashboard_button_set").classList.remove('dashboard_button_changed');
|
||||
//---------------------------------------------------------------------
|
||||
//--------------------- store active Tab ------------------------------
|
||||
var activeTab = ($( "#tabs" ).tabs( "option", "active" ))+1;
|
||||
if (params[11] != activeTab){
|
||||
FW_cmd(document.location.pathname+'?XHR=1&cmd.'+params[0]+'=attr '+params[0]+' dashboard_activetab '+activeTab);
|
||||
}
|
||||
//---------------------------------------------------------------------
|
||||
}
|
||||
|
||||
function dashboard_modifyWidget(){
|
||||
$( ".dashboard_widget" ).resizable({
|
||||
'grid': 1,
|
||||
'minWidth': 150,
|
||||
'grid': 5,
|
||||
start: function(e, ui) {
|
||||
var params = (document.getElementById("dashboard_attr").value).split(","); //get current Configuration
|
||||
//-------- Widgetbegrenzung festlegen -------------------
|
||||
var rowid = $(this).parent().attr("id");
|
||||
if (rowid == "sortablecolumn100") {
|
||||
var widgetmaxwidth = (params[7] * params[1]) - 5;
|
||||
var widgetmaxheight = params[8] - 5;
|
||||
}
|
||||
else { if (rowid == "sortablecolumn200") {
|
||||
var widgetmaxwidth = (params[7] * params[1]) - 5;
|
||||
var widgetmaxheight = params[9] -5 ;
|
||||
}
|
||||
else {
|
||||
var widgetmaxwidth = params[1] - 5;
|
||||
var widgetmaxheight = params[5] -5;
|
||||
}
|
||||
}
|
||||
//-------------------------------------------------------
|
||||
var groupdata = $(this).data("groupwidget").split(","); //get the position string from the data
|
||||
var TabId = $(this).parent().attr("id").substring(14,13);
|
||||
var ColumnId = $(this).parent().attr("id").substring(20);
|
||||
var widgetmaxwidth = $(this).parent().width();
|
||||
|
||||
if (ColumnId == "100") { var widgetmaxheight = params[8]; }
|
||||
if ((ColumnId != "100") && (ColumnId != "200")) { var widgetmaxheight = params[5]; }
|
||||
if (ColumnId == "200") { var widgetmaxheight = params[9]; }
|
||||
|
||||
maxWidthOffset = widgetmaxwidth;
|
||||
$(this).resizable("option","maxWidth",widgetmaxwidth);
|
||||
$(this).resizable("option","maxWidth",widgetmaxwidth-5);
|
||||
$(this).resizable("option","maxHeight",widgetmaxheight);
|
||||
},
|
||||
resize: function(e, ui) {
|
||||
minHeightOffset = $(this).find(".dashboard_widgetinner").height()+5;
|
||||
ui.size.width = Math.round(ui.size.width);
|
||||
if (ui.size.width > (maxWidthOffset)) { $(this).resizable("option","maxWidth",maxWidthOffset); }
|
||||
if (ui.size.height < (minHeightOffset)) { $(this).resizable("option","minHeight",minHeightOffset); }
|
||||
if ($(this).find(".dashboard_widgetheader").outerWidth() < $(this).find(".dashboard_content").children().outerWidth()) {$(this).resizable("option","minWidth", $(this).find(".dashboard_content").children().outerWidth()+5 ); }
|
||||
if ($(this).find(".dashboard_widget").outerHeight() < $(this).find(".dashboard_widgetinner").outerHeight()) { $(this).resizable("option","minHeight", $(this).find(".dashboard_widgetinner").outerHeight()); }
|
||||
},
|
||||
stop: function() {
|
||||
minHeightOffset = $(this).find(".dashboard_widgetinner").height()+5;
|
||||
$(this).resizable("option","minHeight",minHeightOffset);
|
||||
saveOrder();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$(document).ready( function () {
|
||||
//--------------------------------- Attribute des Dashboards ------------------------------------------------------------------
|
||||
var params = (document.getElementById("dashboard_attr").value).split(","); //get current Configuration
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
$(".dashboard_column").sortable({
|
||||
connectWith: ['.dashboard_column', '.ui-row'],
|
||||
cursor: 'move',
|
||||
stop: function() { saveOrder(); }
|
||||
});
|
||||
|
||||
|
||||
if (params[4] == 0){ //set if buttonbar not show
|
||||
dashboard_modifyWidget();
|
||||
dashboard_setlock();
|
||||
@ -211,7 +240,7 @@ $(document).ready( function () {
|
||||
|
||||
if (params[6] == 1){ //ToogleButton show/hide
|
||||
$(".dashboard_widget")
|
||||
.addClass( "dashboard_widget dashboard_content ui-corner-all" )
|
||||
.addClass( "dashboard_widget ui-corner-all" )
|
||||
.find(".dashboard_widgetheader")
|
||||
.addClass( "dashboard_widgetheader ui-corner-all" )
|
||||
.prepend('<span class="dashboard_button_icon dashboard_button_iconminus"></span>')
|
||||
@ -222,16 +251,21 @@ $(document).ready( function () {
|
||||
$(this).removeClass( "dashboard_button_iconplus" );
|
||||
$(this).addClass( "dashboard_button_iconminus" );
|
||||
$(this).parents(".dashboard_widget:first").find(".dashboard_content").show();
|
||||
var newHeigth = $(this).parents(".dashboard_widget:first").find(".dashboard_content").data("userheight");
|
||||
var newHeigth = $(this).parents(".dashboard_widget:first").find(".dashboard_content").data("userheight");
|
||||
//-------- set heigh only if > group min. height -------------
|
||||
if ($(this).parents(".dashboard_widgetinner").outerHeight() > newHeigth) {
|
||||
$(this).parents(".dashboard_widget:first").outerHeight($(this).parents(".dashboard_widgetinner").outerHeight()+10);
|
||||
} else { $(this).parents(".dashboard_widget:first").outerHeight(newHeigth);}
|
||||
//------------------------------------------------------------
|
||||
} else {
|
||||
$(this).removeClass( "dashboard_button_iconminus" );
|
||||
$(this).addClass( "dashboard_button_iconplus" );
|
||||
var currHeigth = Math.round($(this).parents(".dashboard_widget:first").height());
|
||||
$(this).parents(".dashboard_widget:first").find(".dashboard_content").data("userheight", currHeigth);
|
||||
$(this).parents(".dashboard_widget:first").find(".dashboard_content").hide();
|
||||
var newHeigth = $(this).parents(".dashboard_widget:first").find(".dashboard_widgetinner").height()+5;
|
||||
var newHeigth = $(this).parents(".dashboard_widget:first").find(".dashboard_widgetinner").height()+5;
|
||||
$(this).parents(".dashboard_widget:first").height(newHeigth);
|
||||
}
|
||||
$(this).parents(".dashboard_widget:first").height(newHeigth);
|
||||
saveOrder();
|
||||
event.stopImmediatePropagation();
|
||||
});
|
||||
@ -254,17 +288,26 @@ $(document).ready( function () {
|
||||
dashboard_modifyWidget();
|
||||
if (params[3] == "lock") {
|
||||
$(this).button( "option", "label", "Unlock" );
|
||||
dashboard_setlock();
|
||||
dashboard_setlock();
|
||||
} else {
|
||||
$(this).button( "option", "label", "Lock" );
|
||||
dashboard_unsetlock();
|
||||
dashboard_unsetlock();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
restoreOrder();
|
||||
//--------------------------------- Dashboard Tabs ------------------------------------------------------------------------------
|
||||
$("#tabs").tabs({
|
||||
active: 0,
|
||||
create: function(event, ui) {
|
||||
$( "#tabs" ).tabs( "option", "active", params[11]-1 ); //set active Tab
|
||||
restoreOrder();
|
||||
},
|
||||
activate: function (event, ui) {
|
||||
restoreOrder();
|
||||
}
|
||||
});
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1,25 +1,27 @@
|
||||
/* Author: svenson08*/
|
||||
.dashboard_buttonbar { background: none repeat scroll 0 0 #333333; border: 1px solid #FFFFFF;
|
||||
box-shadow: 5px 5px 5px #000000; padding: 4px; border-radius: 8px 8px 8px 8px; float: left;}
|
||||
.dashboard_buttonbar { background: none repeat scroll 0 0 #111111; border: 1px solid #FFFFFF; padding: 4px; margin: 0 .5em 0 0.4em; float: left; }
|
||||
.dashboard_buttonbar_top { border-bottom-width: 0; border-top-left-radius: 8px; border-top-right-radius: 8px; }
|
||||
.dashboard_buttonbar_bottom { border-top-width: 0; border-bottom-left-radius: 8px; border-bottom-right-radius: 8px; box-shadow: 5px 5px 5px #000000; }
|
||||
|
||||
.dashboard_button { border-radius: 8px; float: left; color: #1c94c4; font-weight: bold; font-size: 0.8em; background-repeat:no-repeat;
|
||||
background-position: 4px 2px; border: 1px solid #cccccc; padding: 0.2em 0.7em 0.2em 0.4em; }
|
||||
background-position: 4px 2px; border: 1px solid #cccccc; padding: 0.2em 0.7em 0.2em 0.4em; }
|
||||
.dashboard_button_changed { color: red; font-weight:bold; }
|
||||
|
||||
.dashboard_column { float: left; }
|
||||
.dashboard_columnhelper { border: 1px dotted #CCCCCC; }
|
||||
|
||||
.dashboard_widget { border-radius: 8px; float: left; }
|
||||
.dashboard_widget { border-radius: 8px; float: left; padding: 0.2em;}
|
||||
.dashboard_widgethelper { background-color: #111111; }
|
||||
.dashboard_widgetheader { background: none repeat scroll 0 0 #333333; border: 1px solid #FFFFFF;
|
||||
box-shadow: 5px 5px 5px #000000; border-radius: 8px; margin: 0.2em;
|
||||
padding-bottom: 4px; padding-top: 3px; padding-left: 0.7em; }
|
||||
box-shadow: 5px 5px 5px #000000; border-radius: 8px; margin: 0.2em;
|
||||
padding-bottom: 4px; padding-top: 3px; padding-left: 0.7em; }
|
||||
.dashboard_content { padding: 0.2em; }
|
||||
|
||||
.dashboard_button_icon { width: 13px; height: 14px; background-repeat: no-repeat;
|
||||
float: left; background-image: url(../images/default/dashboardicons.png); }
|
||||
float: left; background-image: url(../images/default/dashboardicons.png); }
|
||||
.dashboard_button_iconplus { margin: 0.1em 0.4em; float: right; background-position: -65px 0px; }
|
||||
.dashboard_button_iconminus { margin: 0.1em 0.4em; float: right; background-position: -52px 0px; }
|
||||
.dashboard_button_iconset { background-position: -26px 0px; }
|
||||
.dashboard_button_iconset { background-position: -26px 0px; }
|
||||
.dashboard_button_iconlock { background-position: 0px 0px; }
|
||||
.dashboard_button_iconunlock { background-position: -13px 0px; }
|
||||
.dashboard_button_icondetail { background-position: -39px 0px; }
|
||||
@ -27,7 +29,29 @@
|
||||
.ui-resizable { position: relative; }
|
||||
.ui-resizable-handle { position: absolute; font-size: 0.1px; }
|
||||
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px;
|
||||
bottom: 1px; background-image: url(../images/default/dashboardicons.png);
|
||||
background-position: -78px 0px; background-repeat: no-repeat; }
|
||||
bottom: 1px; background-image: url(../images/default/dashboardicons.png);
|
||||
background-position: -78px 0px; background-repeat: no-repeat; }
|
||||
.ui-sortable-placeholder { border: 1px dotted #FFFFFF; visibility: visible !important;
|
||||
height: 25px !important; width: 150px; }
|
||||
height: 25px !important; width: 150px; }
|
||||
|
||||
|
||||
/* Neue CSS Einträge für Dashboard-Tabs */
|
||||
.dashboard { padding: 0; margin: 0; }
|
||||
.dashboard_tabnav { list-style: none; margin: 0; padding: 0 .5em 0; }
|
||||
.dashboard_tabnav:before,
|
||||
.dashboard_tabnav:after { content: ""; display: table; border-collapse: collapse; clear: both; }
|
||||
.dashboard_tabpanel { border: 1px solid #cccccc; background-color: #333333; border: 1px solid #dddddd;
|
||||
border-radius: 8px 8px 8px 8px; box-shadow: 5px 5px 5px #000000; }
|
||||
.dashboard_tab { border: 1px solid #cccccc; border-bottom-width: 0; border-top-left-radius: 8px;
|
||||
border-top-right-radius: 8px; margin: 0 .5em -1px 0; float: left; padding: .5em 1em; }
|
||||
.dashboard_tab.ui-tabs-active { background-color: #333333; font-weight: bold; }
|
||||
.dashboard_tabcontent { width: 100%; padding: 0; margin: 0; }
|
||||
|
||||
.dashboard_row { width: 100%; height: inherit; }
|
||||
.dashboard_columncenter { height: inherit;}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1,25 +1,27 @@
|
||||
/* Author: svenson08*/
|
||||
.dashboard_buttonbar { background: none repeat scroll 0 0 #cbcbcb; border: 1px solid #d9d9d9;
|
||||
padding: 4px; float: left;}
|
||||
.dashboard_buttonbar { background: none repeat scroll 0 0 #a6a6a6; border: 1px solid #d9d9d9; padding: 6px; margin: 0 .5em 0 0.4em; float: left;}
|
||||
.dashboard_buttonbar_top, .dashboard_buttonbar_bottom { border-bottom-width: 0; }
|
||||
|
||||
|
||||
.dashboard_button { float: left; background-color: #fff; font-weight: bold; font-size: 0.8em; background-repeat:no-repeat;
|
||||
background-position: 4px 2px; border: 1px solid #808080; padding: 0.2em 0.7em 0.2em 0.4em; }
|
||||
.dashboard_button_changed { color: blue; font-weight:bold; }
|
||||
background-position: 4px 2px; border: 1px solid #808080; padding: 0.2em 0.7em 0.2em 0.4em; }
|
||||
.dashboard_button_changed { color: black; font-weight:bold; }
|
||||
|
||||
.dashboard_column { float: left; }
|
||||
.dashboard_columnhelper { border: 1px dotted #808080; }
|
||||
|
||||
.dashboard_widget { float: left; }
|
||||
.dashboard_widgethelper { background-color: #cbcbcb; }
|
||||
.dashboard_widgetheader { background: none repeat scroll 0 0 #fff; border: 1px solid #d9d9d9;
|
||||
margin: 0.2em;
|
||||
padding-bottom: 2px; padding-top: 3px; padding-left: 0.2em; }
|
||||
.dashboard_widgethelper { background-color: #a6a6a6; }
|
||||
.dashboard_widgetheader { background: none repeat scroll 0 0 #FFFFFF; border: 1px solid #d9d9d9;
|
||||
margin: 0.2em;
|
||||
padding-bottom: 2px; padding-top: 3px; padding-left: 0.2em; }
|
||||
.dashboard_content { padding: 0.2em; }
|
||||
|
||||
.dashboard_button_icon { width: 13px; height: 14px; background-repeat: no-repeat;
|
||||
float: left; background-image: url(../images/default/dashboardicons.png); }
|
||||
float: left; background-image: url(../images/default/dashboardicons.png); }
|
||||
.dashboard_button_iconplus { margin: 0.1em 0.4em; float: right; background-position: -154px 0px; }
|
||||
.dashboard_button_iconminus { margin: 0.1em 0.4em; float: right; background-position: -140px 0px; }
|
||||
.dashboard_button_iconset { background-position: -116px 0px; }
|
||||
.dashboard_button_iconset { background-position: -116px 0px; }
|
||||
.dashboard_button_iconlock { background-position: -103px 0px; }
|
||||
.dashboard_button_iconunlock { background-position: -91px 0px; }
|
||||
.dashboard_button_icondetail { background-position: -128px 0px; }
|
||||
@ -27,9 +29,21 @@
|
||||
.ui-resizable { position: relative; }
|
||||
.ui-resizable-handle { position: absolute; font-size: 0.1px; }
|
||||
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px;
|
||||
bottom: 1px; background-image: url(../images/default/dashboardicons.png);
|
||||
background-position: -170px 0px; background-repeat: no-repeat; }
|
||||
bottom: 1px; background-image: url(../images/default/dashboardicons.png);
|
||||
background-position: -170px 0px; background-repeat: no-repeat; }
|
||||
.ui-sortable-placeholder { border: 1px dotted #d9d9d9; visibility: visible !important;
|
||||
height: 25px !important; width: 150px; }
|
||||
height: 25px !important; width: 150px; }
|
||||
|
||||
|
||||
/* Neue CSS Einträge für Dashboard-Tabs */
|
||||
.dashboard { padding: 0; margin: 0; }
|
||||
.dashboard_tabnav { list-style: none; margin: 0; padding: 0 .5em 0; }
|
||||
.dashboard_tabnav:before,
|
||||
.dashboard_tabnav:after { content: ""; display: table; border-collapse: collapse; clear: both; }
|
||||
.dashboard_tabpanel { border: 1px solid #cccccc; background-color: #cbcbcb; }
|
||||
.dashboard_tab { border: 1px solid #cccccc; border-bottom-width: 0; margin: 0 .5em -1px 0; float: left; padding: .5em 1em; }
|
||||
.dashboard_tab.ui-tabs-active { background-color: #cbcbcb; font-weight: bold; }
|
||||
.dashboard_tabcontent { width: 100%; padding: 0; margin: 0; }
|
||||
|
||||
.dashboard_row { width: 100%; height: inherit; }
|
||||
.dashboard_columncenter { height: inherit;}
|
@ -1,25 +1,27 @@
|
||||
/* Author: svenson08*/
|
||||
.dashboard_buttonbar { background: none repeat scroll 0 0 #F0F0D8; border: 1px solid #808080;
|
||||
padding: 4px; border-radius: 8px 8px 8px 8px; float: left;}
|
||||
.dashboard_button { border-radius: 8px; float: left; background-color: #FFFFE7; font-weight: bold; font-size: 0.8em; background-repeat:no-repeat;
|
||||
background-position: 4px 2px; border: 1px solid #808080; padding: 0.2em 0.7em 0.2em 0.4em; }
|
||||
.dashboard_buttonbar { background: none repeat scroll 0 0 #d3d3ad; border: 1px solid #808080;padding: 6px; margin: 0 .5em 0 0.4em;float: left; }
|
||||
.dashboard_buttonbar_top { border-bottom-width: 0; border-top-left-radius: 8px; border-top-right-radius: 8px; }
|
||||
.dashboard_buttonbar_bottom { border-top-width: 0; border-bottom-left-radius: 8px; border-bottom-right-radius: 8px; }
|
||||
|
||||
.dashboard_button { border-radius: 8px; float: left; color: #1c94c4; font-weight: bold; font-size: 0.8em; background-repeat:no-repeat;
|
||||
background-position: 4px 2px; border: 1px solid #808080; padding: 0.2em 0.7em 0.2em 0.4em; }
|
||||
.dashboard_button_changed { color: blue; font-weight:bold; }
|
||||
|
||||
.dashboard_column { float: left; }
|
||||
.dashboard_columnhelper { border: 1px dotted #808080; }
|
||||
|
||||
.dashboard_widget { border-radius: 8px; float: left; }
|
||||
.dashboard_widget { border-radius: 8px; float: left; padding: 0.2em;}
|
||||
.dashboard_widgethelper { background-color: #A0FFFF; }
|
||||
.dashboard_widgetheader { background: none repeat scroll 0 0 #F0F0D8; border: 1px solid #808080;
|
||||
border-radius: 8px; margin: 0.2em;
|
||||
padding-bottom: 2px; padding-top: 3px; padding-left: 0.2em; }
|
||||
border-radius: 8px; margin: 0.2em;
|
||||
padding-bottom: 4px; padding-top: 3px; padding-left: 0.7em; }
|
||||
.dashboard_content { padding: 0.2em; }
|
||||
|
||||
.dashboard_button_icon { width: 13px; height: 14px; background-repeat: no-repeat;
|
||||
float: left; background-image: url(../images/default/dashboardicons.png); }
|
||||
float: left; background-image: url(../images/default/dashboardicons.png); }
|
||||
.dashboard_button_iconplus { margin: 0.1em 0.4em; float: right; background-position: -154px 0px; }
|
||||
.dashboard_button_iconminus { margin: 0.1em 0.4em; float: right; background-position: -140px 0px; }
|
||||
.dashboard_button_iconset { background-position: -116px 0px; }
|
||||
.dashboard_button_iconset { background-position: -116px 0px; }
|
||||
.dashboard_button_iconlock { background-position: -103px 0px; }
|
||||
.dashboard_button_iconunlock { background-position: -91px 0px; }
|
||||
.dashboard_button_icondetail { background-position: -128px 0px; }
|
||||
@ -27,7 +29,23 @@
|
||||
.ui-resizable { position: relative; }
|
||||
.ui-resizable-handle { position: absolute; font-size: 0.1px; }
|
||||
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px;
|
||||
bottom: 1px; background-image: url(../images/default/dashboardicons.png);
|
||||
background-position: -170px 0px; background-repeat: no-repeat; }
|
||||
bottom: 1px; background-image: url(../images/default/dashboardicons.png);
|
||||
background-position: -170px 0px; background-repeat: no-repeat; }
|
||||
.ui-sortable-placeholder { border: 1px dotted #808080; visibility: visible !important;
|
||||
height: 25px !important; width: 150px; }
|
||||
height: 25px !important; width: 150px; }
|
||||
|
||||
|
||||
/* Neue CSS Einträge für Dashboard-Tabs */
|
||||
.dashboard { padding: 0; margin: 0; }
|
||||
.dashboard_tabnav { list-style: none; margin: 0; padding: 0 .5em 0; }
|
||||
.dashboard_tabnav:before,
|
||||
.dashboard_tabnav:after { content: ""; display: table; border-collapse: collapse; clear: both; }
|
||||
.dashboard_tabpanel { border: 1px solid #cccccc; background-color: #F0F0D8; border: 1px solid #dddddd;
|
||||
border-radius: 8px 8px 8px 8px; }
|
||||
.dashboard_tab { border: 1px solid #cccccc; border-bottom-width: 0; border-top-left-radius: 8px;
|
||||
border-top-right-radius: 8px; margin: 0 .5em -1px 0; float: left; padding: .5em 1em; }
|
||||
.dashboard_tab.ui-tabs-active { background-color: #F0F0D8; font-weight: bold; }
|
||||
.dashboard_tabcontent { width: 100%; padding: 0; margin: 0; }
|
||||
|
||||
.dashboard_row { width: 100%; height: inherit; }
|
||||
.dashboard_columncenter { height: inherit;}
|
||||
|
Loading…
x
Reference in New Issue
Block a user