diff options
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/resources/pl/edu/mimuw/cloudatlas/client/templates/attribChart.html | 72 |
1 files changed, 66 insertions, 6 deletions
diff --git a/src/main/resources/pl/edu/mimuw/cloudatlas/client/templates/attribChart.html b/src/main/resources/pl/edu/mimuw/cloudatlas/client/templates/attribChart.html index 108f717..3a9fd1d 100644 --- a/src/main/resources/pl/edu/mimuw/cloudatlas/client/templates/attribChart.html +++ b/src/main/resources/pl/edu/mimuw/cloudatlas/client/templates/attribChart.html @@ -9,10 +9,11 @@ <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <script type="text/javascript"> - google.charts.load('current', {'packages':['table']}); - google.charts.load('current', {'packages':['corechart']}); + google.charts.load('current', {'packages':['corechart', 'table', 'controls', 'charteditor']}); google.charts.setOnLoadCallback(refreshChart()); + var chartState = []; + function refreshChart() { setInterval(getData, 5000); } @@ -29,16 +30,71 @@ function drawChart(jsonData) { var data = google.visualization.arrayToDataTable(jsonData); + var columnsTable = new google.visualization.DataTable(); + columnsTable.addColumn('number', 'colIndex'); + columnsTable.addColumn('string', 'colLabel'); + var initState= {selectedValues: []}; + + for (var i = 1; i < data.getNumberOfColumns(); i++) { + columnsTable.addRow([i, data.getColumnLabel(i)]); + initState.selectedValues.push(data.getColumnLabel(i)); + } + + if (chartState === undefined || chartState.length === 0) { + chartState = initState; + } + var options = { title: 'Attribute values', hAxis: {title: 'Timestamp', titleTextStyle: {color: '#333'}}, - vAxis: {scaleType: 'log'}, interpolateNulls: true, crosshair: {trigger: 'both', orientation: 'vertical'} }; - var chart = new google.visualization.LineChart(document.getElementById('chart_div')); - chart.draw(data, options); + var chart = new google.visualization.ChartWrapper({ + chartType : 'LineChart', + containerId : 'programmatic_chart_div', + options : options, + dataTable : data + }); + + var columnFilter = new google.visualization.ControlWrapper({ + controlType : 'CategoryFilter', + containerId : 'programmatic_control_div', + dataTable : columnsTable, + options: { + filterColumnLabel: 'colLabel', + ui : { + label : 'Columns', + allowTyping : false, + allowMultiple : true, + allowNone : false, + selectedValuesLayout : 'below', + cssClass : 'google-visualization-controls-categoryfilter' + } + }, + state : chartState + }); + + function drawChartHandler() { + var state = columnFilter.getState(); + var row; + var columnIndices = [0]; + for (var i = 0; i < state.selectedValues.length; i++) { + row = columnsTable.getFilteredRows([{column: 1, value: state.selectedValues[i]}])[0]; + columnIndices.push(columnsTable.getValue(row, 0)); + } + columnIndices.sort(function (a, b) { + return (a - b); + }); + chartState = state; + chart.setView({columns: columnIndices}); + chart.draw(); + } + + google.visualization.events.addListener(columnFilter, 'statechange', drawChartHandler); + columnFilter.draw(); + drawChartHandler(); } function drawTable(jsonData) { @@ -72,7 +128,11 @@ <button type="submit" class="btn btn-primary">Submit</button> </form> </div> -<div id="chart_div" style="width: 100%; height: 500px;"></div> +<!--<div id="chart_div" style="width: 100%; height: 500px;"></div>--> +<div id="programmatic_dashboard_div"> + <div id="programmatic_control_div"></div> + <div id="programmatic_chart_div"></div> +</div> <div id="table_div"></div> |