Commit 18a815f7f3a375c1d68340f25ffa9678975a2370
1 parent
9734f45e
#335: Improve flot charts tooltips layout (use columns). Improve legend layout (…
…prevent element overflow, use scrolling).
Showing
2 changed files
with
47 additions
and
13 deletions
@@ -546,16 +546,16 @@ export default function WidgetController($scope, $state, $timeout, $window, $ele | @@ -546,16 +546,16 @@ export default function WidgetController($scope, $state, $timeout, $window, $ele | ||
546 | var legendStyle; | 546 | var legendStyle; |
547 | switch($scope.legendConfig.position) { | 547 | switch($scope.legendConfig.position) { |
548 | case types.position.top.value: | 548 | case types.position.top.value: |
549 | - legendStyle = 'padding-bottom: 8px;'; | 549 | + legendStyle = 'padding-bottom: 8px; max-height: 50%; overflow-y: auto;'; |
550 | break; | 550 | break; |
551 | case types.position.bottom.value: | 551 | case types.position.bottom.value: |
552 | - legendStyle = 'padding-top: 8px;'; | 552 | + legendStyle = 'padding-top: 8px; max-height: 50%; overflow-y: auto;'; |
553 | break; | 553 | break; |
554 | case types.position.left.value: | 554 | case types.position.left.value: |
555 | - legendStyle = 'padding-right: 0px;'; | 555 | + legendStyle = 'padding-right: 0px; max-width: 50%; overflow-y: auto;'; |
556 | break; | 556 | break; |
557 | case types.position.right.value: | 557 | case types.position.right.value: |
558 | - legendStyle = 'padding-left: 0px;'; | 558 | + legendStyle = 'padding-left: 0px; max-width: 50%; overflow-y: auto;'; |
559 | break; | 559 | break; |
560 | } | 560 | } |
561 | 561 |
@@ -107,6 +107,14 @@ export default class TbFlot { | @@ -107,6 +107,14 @@ export default class TbFlot { | ||
107 | return divElement; | 107 | return divElement; |
108 | } | 108 | } |
109 | 109 | ||
110 | + function seriesInfoDivFromInfo(seriesHoverInfo, seriesIndex) { | ||
111 | + var units = seriesHoverInfo.units && seriesHoverInfo.units.length ? seriesHoverInfo.units : tbFlot.ctx.trackUnits; | ||
112 | + var decimals = angular.isDefined(seriesHoverInfo.decimals) ? seriesHoverInfo.decimals : tbFlot.ctx.trackDecimals; | ||
113 | + var divElement = seriesInfoDiv(seriesHoverInfo.label, seriesHoverInfo.color, | ||
114 | + seriesHoverInfo.value, units, decimals, seriesHoverInfo.index === seriesIndex, null, seriesHoverInfo.tooltipValueFormatFunction); | ||
115 | + return divElement.prop('outerHTML'); | ||
116 | + } | ||
117 | + | ||
110 | if (this.chartType === 'pie') { | 118 | if (this.chartType === 'pie') { |
111 | ctx.tooltipFormatter = function(item) { | 119 | ctx.tooltipFormatter = function(item) { |
112 | var units = item.series.dataKey.units && item.series.dataKey.units.length ? item.series.dataKey.units : tbFlot.ctx.trackUnits; | 120 | var units = item.series.dataKey.units && item.series.dataKey.units.length ? item.series.dataKey.units : tbFlot.ctx.trackUnits; |
@@ -129,16 +137,42 @@ export default class TbFlot { | @@ -129,16 +137,42 @@ export default class TbFlot { | ||
129 | fontWeight: "700" | 137 | fontWeight: "700" |
130 | }); | 138 | }); |
131 | content += dateDiv.prop('outerHTML'); | 139 | content += dateDiv.prop('outerHTML'); |
132 | - for (var i = 0; i < hoverInfo.seriesHover.length; i++) { | ||
133 | - var seriesHoverInfo = hoverInfo.seriesHover[i]; | ||
134 | - if (tbFlot.ctx.tooltipIndividual && seriesHoverInfo.index !== seriesIndex) { | ||
135 | - continue; | 140 | + if (tbFlot.ctx.tooltipIndividual) { |
141 | + var seriesHoverInfo = hoverInfo.seriesHover[seriesIndex]; | ||
142 | + if (seriesHoverInfo) { | ||
143 | + content += seriesInfoDivFromInfo(seriesHoverInfo, seriesIndex); | ||
144 | + } | ||
145 | + } else { | ||
146 | + var seriesDiv = $('<div></div>'); | ||
147 | + seriesDiv.css({ | ||
148 | + display: "flex", | ||
149 | + flexDirection: "row" | ||
150 | + }); | ||
151 | + const maxRows = 15; | ||
152 | + var columns = Math.ceil(hoverInfo.seriesHover.length / maxRows); | ||
153 | + var columnsContent = ''; | ||
154 | + for (var c = 0; c < columns; c++) { | ||
155 | + var columnDiv = $('<div></div>'); | ||
156 | + columnDiv.css({ | ||
157 | + display: "flex", | ||
158 | + flexDirection: "column" | ||
159 | + }); | ||
160 | + var columnContent = ''; | ||
161 | + for (var i = c*maxRows; i < (c+1)*maxRows; i++) { | ||
162 | + if (i == hoverInfo.seriesHover.length) { | ||
163 | + break; | ||
164 | + } | ||
165 | + seriesHoverInfo = hoverInfo.seriesHover[i]; | ||
166 | + columnContent += seriesInfoDivFromInfo(seriesHoverInfo, seriesIndex); | ||
167 | + } | ||
168 | + columnDiv.html(columnContent); | ||
169 | + if (c > 0) { | ||
170 | + columnsContent += '<span style="width: 20px;"></span>'; | ||
171 | + } | ||
172 | + columnsContent += columnDiv.prop('outerHTML'); | ||
136 | } | 173 | } |
137 | - var units = seriesHoverInfo.units && seriesHoverInfo.units.length ? seriesHoverInfo.units : tbFlot.ctx.trackUnits; | ||
138 | - var decimals = angular.isDefined(seriesHoverInfo.decimals) ? seriesHoverInfo.decimals : tbFlot.ctx.trackDecimals; | ||
139 | - var divElement = seriesInfoDiv(seriesHoverInfo.label, seriesHoverInfo.color, | ||
140 | - seriesHoverInfo.value, units, decimals, seriesHoverInfo.index === seriesIndex, null, seriesHoverInfo.tooltipValueFormatFunction); | ||
141 | - content += divElement.prop('outerHTML'); | 174 | + seriesDiv.html(columnsContent); |
175 | + content += seriesDiv.prop('outerHTML'); | ||
142 | } | 176 | } |
143 | return content; | 177 | return content; |
144 | }; | 178 | }; |