Commit 1cc9bc01a4dfd63eb90523690008f08f9533b6b3

Authored by Igor Kulikov
1 parent 626eb75b

UI: Fix minor issues in Flot widget.

@@ -51,7 +51,7 @@ @@ -51,7 +51,7 @@
51 "clipboard": "^1.5.15", 51 "clipboard": "^1.5.15",
52 "compass-sass-mixins": "^0.12.7", 52 "compass-sass-mixins": "^0.12.7",
53 "event-source-polyfill": "0.0.9", 53 "event-source-polyfill": "0.0.9",
54 - "flot": "git://github.com/flot/flot.git#0.9-work", 54 + "flot": "git://github.com/thingsboard/flot.git#0.9-work",
55 "flot-curvedlines": "git://github.com/MichaelZinsmaier/CurvedLines.git#master", 55 "flot-curvedlines": "git://github.com/MichaelZinsmaier/CurvedLines.git#master",
56 "font-awesome": "^4.6.3", 56 "font-awesome": "^4.6.3",
57 "javascript-detect-element-resize": "^0.5.3", 57 "javascript-detect-element-resize": "^0.5.3",
@@ -108,7 +108,7 @@ @@ -108,7 +108,7 @@
108 "html-loader": "^0.4.3", 108 "html-loader": "^0.4.3",
109 "html-minifier": "^3.2.2", 109 "html-minifier": "^3.2.2",
110 "html-minifier-loader": "^1.3.4", 110 "html-minifier-loader": "^1.3.4",
111 - "html-webpack-plugin": "^2.22.0", 111 + "html-webpack-plugin": "^2.30.1",
112 "img-loader": "^1.3.1", 112 "img-loader": "^1.3.1",
113 "less": "^2.7.1", 113 "less": "^2.7.1",
114 "less-loader": "^2.2.3", 114 "less-loader": "^2.2.3",
@@ -241,6 +241,10 @@ function TelemetryWebsocketService($rootScope, $websocket, $timeout, $window, ty @@ -241,6 +241,10 @@ function TelemetryWebsocketService($rootScope, $websocket, $timeout, $window, ty
241 } 241 }
242 } 242 }
243 } 243 }
  244 + var index = reconnectSubscribers.indexOf(subscriber);
  245 + if (index > -1) {
  246 + reconnectSubscribers.splice(index, 1);
  247 + }
244 subscribersCount--; 248 subscribersCount--;
245 publishCommands(); 249 publishCommands();
246 } 250 }
@@ -480,10 +480,9 @@ export default class TbFlot { @@ -480,10 +480,9 @@ export default class TbFlot {
480 ? this.subscription.data[i].data[0][1] : 0; 480 ? this.subscription.data[i].data[0][1] : 0;
481 } 481 }
482 this.pieDataRendered(); 482 this.pieDataRendered();
483 - this.ctx.plot = $.plot(this.$element, this.pieData, this.options);  
484 - } else {  
485 - this.ctx.plot = $.plot(this.$element, this.subscription.data, this.options);  
486 } 483 }
  484 + this.ctx.plotInited = true;
  485 + this.createPlot();
487 } 486 }
488 487
489 createYAxis(keySettings, units) { 488 createYAxis(keySettings, units) {
@@ -578,16 +577,13 @@ export default class TbFlot { @@ -578,16 +577,13 @@ export default class TbFlot {
578 if (this.chartType === 'bar') { 577 if (this.chartType === 'bar') {
579 this.ctx.plot.getOptions().series.bars.barWidth = this.subscription.timeWindow.interval * 0.6; 578 this.ctx.plot.getOptions().series.bars.barWidth = this.subscription.timeWindow.interval * 0.6;
580 } 579 }
581 - this.ctx.plot.setData(this.subscription.data);  
582 - this.ctx.plot.setupGrid();  
583 - this.ctx.plot.draw(); 580 + this.updateData();
584 } 581 }
585 } else if (this.chartType === 'pie') { 582 } else if (this.chartType === 'pie') {
586 if (this.ctx.animatedPie) { 583 if (this.ctx.animatedPie) {
587 this.nextPieDataAnimation(true); 584 this.nextPieDataAnimation(true);
588 } else { 585 } else {
589 - this.ctx.plot.setData(this.subscription.data);  
590 - this.ctx.plot.draw(); 586 + this.updateData();
591 } 587 }
592 } 588 }
593 } else if (this.isMouseInteraction && this.ctx.plot){ 589 } else if (this.isMouseInteraction && this.ctx.plot){
@@ -599,13 +595,105 @@ export default class TbFlot { @@ -599,13 +595,105 @@ export default class TbFlot {
599 } 595 }
600 } 596 }
601 597
  598 + updateData() {
  599 + this.ctx.plot.setData(this.subscription.data);
  600 + if (this.chartType !== 'pie') {
  601 + this.ctx.plot.setupGrid();
  602 + }
  603 + this.ctx.plot.draw();
  604 + }
  605 +
602 resize() { 606 resize() {
  607 + if (this.resizeTimeoutHandle) {
  608 + this.ctx.$scope.$timeout.cancel(this.resizeTimeoutHandle);
  609 + this.resizeTimeoutHandle = null;
  610 + }
  611 + if (this.ctx.plot && this.ctx.plotInited) {
  612 + var width = this.$element.width();
  613 + var height = this.$element.height();
  614 + if (width && height) {
  615 + this.ctx.plot.resize();
  616 + if (this.chartType !== 'pie') {
  617 + this.ctx.plot.setupGrid();
  618 + }
  619 + this.ctx.plot.draw();
  620 + } else {
  621 + var tbFlot = this;
  622 + this.resizeTimeoutHandle = this.ctx.$scope.$timeout(function() {
  623 + tbFlot.resize();
  624 + }, 30, false);
  625 + }
  626 + }
  627 + }
  628 +
  629 +
  630 + redrawPlot() {
  631 + if (this.ctx.plot && this.ctx.plotInited) {
  632 + this.ctx.plot.destroy();
  633 + this.ctx.plot = null;
  634 + this.createPlot();
  635 + }
  636 + }
  637 +
  638 + createPlot() {
  639 + if (this.createPlotTimeoutHandle) {
  640 + this.ctx.$scope.$timeout.cancel(this.createPlotTimeoutHandle);
  641 + this.createPlotTimeoutHandle = null;
  642 + }
  643 + if (this.ctx.plotInited && !this.ctx.plot) {
  644 + var width = this.$element.width();
  645 + var height = this.$element.height();
  646 + if (width && height) {
  647 + if (this.chartType === 'pie' && this.ctx.animatedPie) {
  648 + this.ctx.plot = $.plot(this.$element, this.pieData, this.options);
  649 + } else {
  650 + this.ctx.plot = $.plot(this.$element, this.subscription.data, this.options);
  651 + }
  652 + } else {
  653 + var tbFlot = this;
  654 + this.createPlotTimeoutHandle = this.ctx.$scope.$timeout(function() {
  655 + tbFlot.createPlot();
  656 + }, 30, false);
  657 + }
  658 + }
  659 + }
  660 +
  661 + destroy() {
  662 + this.cleanup();
603 if (this.ctx.plot) { 663 if (this.ctx.plot) {
604 - this.ctx.plot.resize();  
605 - if (this.chartType !== 'pie') {  
606 - this.ctx.plot.setupGrid(); 664 + this.ctx.plot.destroy();
  665 + this.ctx.plot = null;
  666 + this.ctx.plotInited = false;
  667 + }
  668 + }
  669 +
  670 + cleanup() {
  671 + if (this.updateTimeoutHandle) {
  672 + this.ctx.$scope.$timeout.cancel(this.updateTimeoutHandle);
  673 + this.updateTimeoutHandle = null;
  674 + }
  675 + if (this.createPlotTimeoutHandle) {
  676 + this.ctx.$scope.$timeout.cancel(this.createPlotTimeoutHandle);
  677 + this.createPlotTimeoutHandle = null;
  678 + }
  679 + if (this.resizeTimeoutHandle) {
  680 + this.ctx.$scope.$timeout.cancel(this.resizeTimeoutHandle);
  681 + this.resizeTimeoutHandle = null;
  682 + }
  683 + }
  684 +
  685 + checkMouseEvents() {
  686 + var enabled = !this.ctx.isMobile && !this.ctx.isEdit;
  687 + if (angular.isUndefined(this.mouseEventsEnabled) || this.mouseEventsEnabled != enabled) {
  688 + this.mouseEventsEnabled = enabled;
  689 + if (this.$element) {
  690 + if (enabled) {
  691 + this.enableMouseEvents();
  692 + } else {
  693 + this.disableMouseEvents();
  694 + }
  695 + this.redrawPlot();
607 } 696 }
608 - this.ctx.plot.draw();  
609 } 697 }
610 } 698 }
611 699
@@ -1020,46 +1108,6 @@ export default class TbFlot { @@ -1020,46 +1108,6 @@ export default class TbFlot {
1020 } 1108 }
1021 } 1109 }
1022 1110
1023 - checkMouseEvents() {  
1024 - var enabled = !this.ctx.isMobile && !this.ctx.isEdit;  
1025 - if (angular.isUndefined(this.mouseEventsEnabled) || this.mouseEventsEnabled != enabled) {  
1026 - this.mouseEventsEnabled = enabled;  
1027 - if (this.$element) {  
1028 - if (enabled) {  
1029 - this.enableMouseEvents();  
1030 - } else {  
1031 - this.disableMouseEvents();  
1032 - }  
1033 - if (this.ctx.plot) {  
1034 - this.ctx.plot.destroy();  
1035 - if (this.chartType === 'pie' && this.ctx.animatedPie) {  
1036 - this.ctx.plot = $.plot(this.$element, this.pieData, this.options);  
1037 - } else {  
1038 - this.ctx.plot = $.plot(this.$element, this.subscription.data, this.options);  
1039 - }  
1040 - }  
1041 - }  
1042 - }  
1043 - }  
1044 -  
1045 - redrawPlot() {  
1046 - if (this.ctx.plot) {  
1047 - this.ctx.plot.destroy();  
1048 - if (this.chartType === 'pie' && this.ctx.animatedPie) {  
1049 - this.ctx.plot = $.plot(this.$element, this.pieData, this.options);  
1050 - } else {  
1051 - this.ctx.plot = $.plot(this.$element, this.subscription.data, this.options);  
1052 - }  
1053 - }  
1054 - }  
1055 -  
1056 - destroy() {  
1057 - if (this.ctx.plot) {  
1058 - this.ctx.plot.destroy();  
1059 - this.ctx.plot = null;  
1060 - }  
1061 - }  
1062 -  
1063 enableMouseEvents() { 1111 enableMouseEvents() {
1064 this.$element.css('pointer-events',''); 1112 this.$element.css('pointer-events','');
1065 this.$element.addClass('mouse-events'); 1113 this.$element.addClass('mouse-events');
@@ -1069,6 +1117,9 @@ export default class TbFlot { @@ -1069,6 +1117,9 @@ export default class TbFlot {
1069 1117
1070 if (!this.flotHoverHandler) { 1118 if (!this.flotHoverHandler) {
1071 this.flotHoverHandler = function (event, pos, item) { 1119 this.flotHoverHandler = function (event, pos, item) {
  1120 + if (!tbFlot.ctx.plot) {
  1121 + return;
  1122 + }
1072 if (!tbFlot.ctx.tooltipIndividual || item) { 1123 if (!tbFlot.ctx.tooltipIndividual || item) {
1073 1124
1074 var multipleModeTooltip = !tbFlot.ctx.tooltipIndividual; 1125 var multipleModeTooltip = !tbFlot.ctx.tooltipIndividual;
@@ -1128,6 +1179,9 @@ export default class TbFlot { @@ -1128,6 +1179,9 @@ export default class TbFlot {
1128 1179
1129 if (!this.flotSelectHandler) { 1180 if (!this.flotSelectHandler) {
1130 this.flotSelectHandler = function (event, ranges) { 1181 this.flotSelectHandler = function (event, ranges) {
  1182 + if (!tbFlot.ctx.plot) {
  1183 + return;
  1184 + }
1131 tbFlot.ctx.plot.clearSelection(); 1185 tbFlot.ctx.plot.clearSelection();
1132 tbFlot.subscription.onUpdateTimewindow(ranges.xaxis.from, ranges.xaxis.to); 1186 tbFlot.subscription.onUpdateTimewindow(ranges.xaxis.from, ranges.xaxis.to);
1133 }; 1187 };
@@ -1153,6 +1207,9 @@ export default class TbFlot { @@ -1153,6 +1207,9 @@ export default class TbFlot {
1153 } 1207 }
1154 if (!this.mouseleaveHandler) { 1208 if (!this.mouseleaveHandler) {
1155 this.mouseleaveHandler = function () { 1209 this.mouseleaveHandler = function () {
  1210 + if (!tbFlot.ctx.plot) {
  1211 + return;
  1212 + }
1156 tbFlot.ctx.tooltip.stop(true); 1213 tbFlot.ctx.tooltip.stop(true);
1157 tbFlot.ctx.tooltip.hide(); 1214 tbFlot.ctx.tooltip.hide();
1158 tbFlot.ctx.plot.unhighlight(); 1215 tbFlot.ctx.plot.unhighlight();