1aace7c0732cac769f1ffe95a89591b6217fa9447Javi Merino/* 2e81fdcb135d0325e3bc22fae0583555d20aae280Brendan Jackman * Copyright 2015-2017 ARM Limited 3aace7c0732cac769f1ffe95a89591b6217fa9447Javi Merino * 4aace7c0732cac769f1ffe95a89591b6217fa9447Javi Merino * Licensed under the Apache License, Version 2.0 (the "License"); 5aace7c0732cac769f1ffe95a89591b6217fa9447Javi Merino * you may not use this file except in compliance with the License. 6aace7c0732cac769f1ffe95a89591b6217fa9447Javi Merino * You may obtain a copy of the License at 7aace7c0732cac769f1ffe95a89591b6217fa9447Javi Merino * 8aace7c0732cac769f1ffe95a89591b6217fa9447Javi Merino * http://www.apache.org/licenses/LICENSE-2.0 9aace7c0732cac769f1ffe95a89591b6217fa9447Javi Merino * 10aace7c0732cac769f1ffe95a89591b6217fa9447Javi Merino * Unless required by applicable law or agreed to in writing, software 11aace7c0732cac769f1ffe95a89591b6217fa9447Javi Merino * distributed under the License is distributed on an "AS IS" BASIS, 12aace7c0732cac769f1ffe95a89591b6217fa9447Javi Merino * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13aace7c0732cac769f1ffe95a89591b6217fa9447Javi Merino * See the License for the specific language governing permissions and 14aace7c0732cac769f1ffe95a89591b6217fa9447Javi Merino * limitations under the License. 158741ef170bc7fcc772837fd2db3df2f8d74b6c10Kapileshwar Singh */ 16aace7c0732cac769f1ffe95a89591b6217fa9447Javi Merino 17211860fe53efaa299db6ff6c9b28816bcb5902d4Kapileshwar Singhvar ILinePlot = ( function() { 1867527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh 1967527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh var graphs = new Array(); 2067527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh var syncObjs = new Array(); 2167527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh 2267527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh var purge = function() { 2367527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh for (var div_name in graphs) { 2467527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh if (document.getElementById(div_name) == null) { 2567527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh delete graphs[div_name]; 2667527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh } 2767527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh } 2867527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh }; 2967527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh 3067527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh var sync = function(group) { 3167527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh 3267527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh var syncGraphs = Array(); 3367527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh var xRange; 3467527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh var yRange; 3567527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh var syncZoom = true; 3667527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh 3767527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh for (var div_name in graphs) { 3867527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh 3967527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh if (graphs[div_name].group == group) { 4067527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh syncGraphs.push(graphs[div_name].graph); 4167527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh syncZoom = syncZoom & graphs[div_name].syncZoom; 4267527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh 4367527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh var xR = graphs[div_name].graph.xAxisRange(); 4467527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh var yR = graphs[div_name].graph.yAxisRange(); 4567527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh 4667527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh if (xRange != undefined) { 4767527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh if (xR[0] < xRange[0]) 4867527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh xRange[0] = xR[0]; 4967527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh if (xR[1] > xRange[1]) 5067527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh xRange[1] = xR[1]; 5167527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh } else 5267527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh xRange = xR; 5367527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh 5467527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh if (yRange != undefined) { 5567527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh if (yR[0] < yRange[0]) 5667527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh yRange[0] = yR[0]; 5767527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh if (yR[1] > yRange[1]) 5867527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh yRange[1] = yR[1]; 5967527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh } else 6067527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh yRange = yR; 6167527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh } 6267527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh } 6367527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh 6467527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh if (syncGraphs.length >= 2) { 6567527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh if (syncZoom) { 6667527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh if (syncObjs[group] != undefined) 6767527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh syncObjs[group].detach(); 6867527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh 6967527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh syncObjs[group] = Dygraph.synchronize(syncGraphs, { 7067527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh zoom: true, 7167527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh selection: false, 7267527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh range: true 7367527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh }); 7467527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh } 7567527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh 7667527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh $.each(syncGraphs, function(g) { 7767527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh var graph = syncGraphs[g]; 7867527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh 7967527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh graph.updateOptions({ 8067527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh valueRange: yRange, 8167527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh dateWindow: xRange 8267527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh }); 8367527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh 8467527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh if (graph.padFront_ == undefined) { 8567527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh graph.padFront_ = true; 8667527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh var _decoy_elem = new Array(graph.rawData_[0].length); 8767527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh graph.rawData_.unshift(_decoy_elem); 8867527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh } 8967527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh graph.rawData_[0][0] = xRange[0]; 9067527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh 9167527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh if (graph.padBack_ == undefined) { 9267527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh graph.padBack_ = true; 9367527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh var _decoy_elem = new Array(graph.rawData_[0].length); 9467527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh graph.rawData_.push(_decoy_elem); 9567527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh } 9667527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh graph.rawData_[graph.rawData_.length - 1][0] = xRange[1]; 9767527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh }); 9867527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh } 9967527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh }; 10067527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh 101f4261b4fbb05ab7e27d89fa2f607773cdf4355b2Javi Merino var generate = function(data, colors) { 102f4261b4fbb05ab7e27d89fa2f607773cdf4355b2Javi Merino create_graph(data, colors); 103535b3bd3ff699415798dbf1e9cf9e3bc3f56c3b2Javi Merino purge(); 104535b3bd3ff699415798dbf1e9cf9e3bc3f56c3b2Javi Merino if (data.syncGroup != undefined) 105535b3bd3ff699415798dbf1e9cf9e3bc3f56c3b2Javi Merino sync(data.syncGroup); 106211860fe53efaa299db6ff6c9b28816bcb5902d4Kapileshwar Singh }; 107211860fe53efaa299db6ff6c9b28816bcb5902d4Kapileshwar Singh 108f4261b4fbb05ab7e27d89fa2f607773cdf4355b2Javi Merino var create_graph = function(t_info, colors) { 1095c53c1f76cb60be8cf1d6c43b54a3f04eae10d6cKapileshwar Singh var tabular = t_info.data; 1105c53c1f76cb60be8cf1d6c43b54a3f04eae10d6cKapileshwar Singh 111f4261b4fbb05ab7e27d89fa2f607773cdf4355b2Javi Merino var options = { 1128741ef170bc7fcc772837fd2db3df2f8d74b6c10Kapileshwar Singh legend: 'always', 1138741ef170bc7fcc772837fd2db3df2f8d74b6c10Kapileshwar Singh title: t_info.title, 1148741ef170bc7fcc772837fd2db3df2f8d74b6c10Kapileshwar Singh labels: tabular.labels, 1158741ef170bc7fcc772837fd2db3df2f8d74b6c10Kapileshwar Singh labelsDivStyles: { 1168741ef170bc7fcc772837fd2db3df2f8d74b6c10Kapileshwar Singh 'textAlign': 'right' 1178741ef170bc7fcc772837fd2db3df2f8d74b6c10Kapileshwar Singh }, 1188741ef170bc7fcc772837fd2db3df2f8d74b6c10Kapileshwar Singh rollPeriod: 1, 1198741ef170bc7fcc772837fd2db3df2f8d74b6c10Kapileshwar Singh animatedZooms: true, 1208741ef170bc7fcc772837fd2db3df2f8d74b6c10Kapileshwar Singh connectSeparatedPoints: true, 1218741ef170bc7fcc772837fd2db3df2f8d74b6c10Kapileshwar Singh showRangeSelector: t_info.rangesel, 1228741ef170bc7fcc772837fd2db3df2f8d74b6c10Kapileshwar Singh rangeSelectorHeight: 50, 1238741ef170bc7fcc772837fd2db3df2f8d74b6c10Kapileshwar Singh stepPlot: t_info.step_plot, 1248741ef170bc7fcc772837fd2db3df2f8d74b6c10Kapileshwar Singh logscale: t_info.logscale, 125bd75d5c3abd977e41ce8c9f7e4740a552a239932Kapileshwar Singh fillGraph: t_info.fill_graph, 1268741ef170bc7fcc772837fd2db3df2f8d74b6c10Kapileshwar Singh labelsDiv: t_info.name + "_legend", 1274462468766dabe30a7c58c655807c4c2ede0fdccKapileshwar Singh errorBars: false, 1289b4898aa3ea40f2af85157af65ab491e8aaa9b4cMichele Di Giorgio labelsSeparateLines: true, 1297ab82627f892036d7eeb04af3d282a329f8d04cdKapileshwar Singh valueRange: t_info.valueRange, 1307ab82627f892036d7eeb04af3d282a329f8d04cdKapileshwar Singh drawPoints: t_info.drawPoints, 1317ab82627f892036d7eeb04af3d282a329f8d04cdKapileshwar Singh strokeWidth: t_info.strokeWidth, 1327ab82627f892036d7eeb04af3d282a329f8d04cdKapileshwar Singh pointSize: t_info.pointSize, 133c972b86eac3c41c14b4063f0a4c79b371ebe739cKapileshwar Singh dateWindow: t_info.dateWindow 134f4261b4fbb05ab7e27d89fa2f607773cdf4355b2Javi Merino }; 135f4261b4fbb05ab7e27d89fa2f607773cdf4355b2Javi Merino 136e2ede1f52665ff9ca6ed5177528b2f150ef16a35Brendan Jackman if (typeof t_info.fill_alpha !== 'undefined') 137e2ede1f52665ff9ca6ed5177528b2f150ef16a35Brendan Jackman options.fillAlpha = t_info.fill_alpha; 138e2ede1f52665ff9ca6ed5177528b2f150ef16a35Brendan Jackman 139f4261b4fbb05ab7e27d89fa2f607773cdf4355b2Javi Merino if (typeof colors !== 'undefined') 140f4261b4fbb05ab7e27d89fa2f607773cdf4355b2Javi Merino options["colors"] = colors; 141f4261b4fbb05ab7e27d89fa2f607773cdf4355b2Javi Merino 142f4261b4fbb05ab7e27d89fa2f607773cdf4355b2Javi Merino var graph = new Dygraph(document.getElementById(t_info.name), tabular.data, options); 143b9e8f11cfd24c71e4634a3b23ba3704841e636d9Kapileshwar Singh 144b9e8f11cfd24c71e4634a3b23ba3704841e636d9Kapileshwar Singh var width = $("#" + t_info.name) 145b9e8f11cfd24c71e4634a3b23ba3704841e636d9Kapileshwar Singh .closest(".output_subarea").width() / t_info.per_line 146b9e8f11cfd24c71e4634a3b23ba3704841e636d9Kapileshwar Singh 147094df31b5d420dfbd705cdfaa51f580522b0ad80Michele Di Giorgio /* 148094df31b5d420dfbd705cdfaa51f580522b0ad80Michele Di Giorgio * Remove 3 pixels from width to avoid unnecessary horizontal scrollbar 149094df31b5d420dfbd705cdfaa51f580522b0ad80Michele Di Giorgio */ 150094df31b5d420dfbd705cdfaa51f580522b0ad80Michele Di Giorgio graph.resize(width - 3, t_info.height); 151b9e8f11cfd24c71e4634a3b23ba3704841e636d9Kapileshwar Singh 152b9e8f11cfd24c71e4634a3b23ba3704841e636d9Kapileshwar Singh $(window).on("resize." + t_info.name, function() { 153b9e8f11cfd24c71e4634a3b23ba3704841e636d9Kapileshwar Singh 154b9e8f11cfd24c71e4634a3b23ba3704841e636d9Kapileshwar Singh var width = $("#" + t_info.name) 155b9e8f11cfd24c71e4634a3b23ba3704841e636d9Kapileshwar Singh .closest(".output_subarea").width() / t_info.per_line 1568741ef170bc7fcc772837fd2db3df2f8d74b6c10Kapileshwar Singh 157b9e8f11cfd24c71e4634a3b23ba3704841e636d9Kapileshwar Singh graph.resize(width, t_info.height); 15867527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh }); 15967527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh 16067527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh graphs[t_info.name] = 16167527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh { 16267527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh graph: graph, 16367527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh group: t_info.syncGroup, 16467527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh syncZoom: t_info.syncZoom 16567527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh }; 16667527ddea39e858c957997356a16bd8e3819f359Kapileshwar Singh 167211860fe53efaa299db6ff6c9b28816bcb5902d4Kapileshwar Singh }; 1688741ef170bc7fcc772837fd2db3df2f8d74b6c10Kapileshwar Singh 169211860fe53efaa299db6ff6c9b28816bcb5902d4Kapileshwar Singh return { 170211860fe53efaa299db6ff6c9b28816bcb5902d4Kapileshwar Singh generate: generate 171211860fe53efaa299db6ff6c9b28816bcb5902d4Kapileshwar Singh }; 1728741ef170bc7fcc772837fd2db3df2f8d74b6c10Kapileshwar Singh 173211860fe53efaa299db6ff6c9b28816bcb5902d4Kapileshwar Singh}()); 174