| OLD | NEW |
| 1 <!-- | 1 <!-- |
| 2 The common.js file must be included before this file. | 2 The common.js file must be included before this file. |
| 3 | 3 |
| 4 This in an HTML Import-able file that contains the definition | 4 This in an HTML Import-able file that contains the definition |
| 5 of the following elements: | 5 of the following elements: |
| 6 | 6 |
| 7 <bar-chart-sk> | 7 <bar-chart-sk> |
| 8 | 8 |
| 9 To use this file import it: | 9 To use this file import it: |
| 10 | 10 |
| 11 <link href="/res/imp/bar-chart-sk.html" rel="import" /> | 11 <link href="/res/imp/bar-chart-sk.html" rel="import" /> |
| 12 | 12 |
| 13 Usage: | 13 Usage: |
| 14 | 14 |
| 15 <bar-chart-sk heading="My Chart"></bar-chart-sk> | 15 <bar-chart-sk heading="My Chart"></bar-chart-sk> |
| 16 <script> | 16 <script> |
| 17 myChart.draw(columns, data); | 17 myChart.draw(columns, data); |
| 18 </script> | 18 </script> |
| 19 | 19 |
| 20 Properties: | 20 Properties: |
| 21 heading: string; title of the chart. | 21 heading: string; title of the chart. |
| 22 colors: array of strings; colors to use in the chart. | 22 colors: array of strings; colors to use in the chart. |
| 23 columns: array of arrays indicating the types and names of the columns, eg: |
| 24 [["string", "seriesName"], ["number", "dataPoint"]]. |
| 25 data: array of arrays containing data for each column, eg: |
| 26 [["series1", 42], ["series2", 7]]. |
| 23 | 27 |
| 24 Methods: | 28 Methods: |
| 25 draw: render the chart using the given columns and data. The 'columns' | 29 draw: render the chart. |
| 26 parameter is an array of arrays indicating the types and names of the | |
| 27 columns, eg: [["string", "seriesName"], ["number", "dataPoint"]]. | |
| 28 The 'data' parameter is an array of arrays containing data for each | |
| 29 column, eg: [["series1", 42], ["series2", 7]]. | |
| 30 --> | 30 --> |
| 31 <polymer-element name="bar-chart-sk"> | 31 <polymer-element name="bar-chart-sk"> |
| 32 <template> | 32 <template> |
| 33 <style> | 33 <style> |
| 34 .chart { | 34 .chart { |
| 35 border: 1px solid #eeeeee; | 35 border: 1px solid #eeeeee; |
| 36 margin: 5px; | 36 margin: 5px; |
| 37 padding: 10px; | 37 padding: 10px; |
| 38 font-size: 12px; |
| 39 } |
| 40 h2 { |
| 41 font-size: 16px; |
| 38 } | 42 } |
| 39 .collapseHeader { | 43 .collapseHeader { |
| 40 cursor: pointer; | 44 cursor: pointer; |
| 41 } | 45 } |
| 42 .collapseBody { | 46 .collapseBody { |
| 43 padding: 10px; | 47 padding: 10px; |
| 44 } | 48 } |
| 45 </style> | 49 </style> |
| 46 <div class="chart"> | 50 <div class="chart" id="host"> |
| 47 <div class="collapseHeader" on-click="{{toggle}}"> | 51 <div class="collapseHeader" on-click="{{toggle}}" horizontal layout center
> |
| 48 {{heading}} | 52 <h2 flex>{{heading}}</h2> |
| 53 <core-icon icon="{{icon}}"></core-icon> |
| 49 </div> | 54 </div> |
| 50 <core-collapse id="collapse"> | 55 <core-collapse id="collapse" on-core-collapse-open="{{collapseOpen}}"> |
| 51 <div class="collapseBody" id="chartcontainer"></div> | 56 <div class="collapseBody" id="chartcontainer"></div> |
| 52 </core-collapse> | 57 </core-collapse> |
| 53 </div> | 58 </div> |
| 54 | 59 |
| 55 </template> | 60 </template> |
| 56 <script> | 61 <script> |
| 62 (function() { |
| 63 var chartsReady = new Promise(function(resolve, reject) { |
| 64 google.setOnLoadCallback(resolve); |
| 65 }); |
| 66 |
| 57 Polymer({ | 67 Polymer({ |
| 58 publish: { | 68 publish: { |
| 59 heading: { | 69 heading: { |
| 60 value: null, | 70 value: null, |
| 61 reflect: true, | 71 reflect: true, |
| 62 }, | 72 }, |
| 63 colors: { | 73 colors: { |
| 64 value: [], | 74 value: [], |
| 65 reflect: false, | 75 reflect: false, |
| 66 }, | 76 }, |
| 77 columns: { |
| 78 value: null, |
| 79 reflect: false, |
| 80 }, |
| 81 data: { |
| 82 value: null, |
| 83 reflect: false, |
| 84 }, |
| 85 }, |
| 86 |
| 87 created: function() { |
| 88 this.icon = "arrow-drop-down"; |
| 89 }, |
| 90 |
| 91 ready: function() { |
| 92 var that = this; |
| 93 window.addEventListener("resize", function() { |
| 94 that.draw(); |
| 95 }); |
| 67 }, | 96 }, |
| 68 | 97 |
| 69 toggle: function() { | 98 toggle: function() { |
| 70 this.$.collapse.toggle(); | 99 this.$.collapse.toggle(); |
| 71 }, | 100 }, |
| 72 | 101 |
| 73 draw: function(columns, data) { | 102 colorsChanged: function() { |
| 74 var table = new google.visualization.DataTable(); | 103 this.draw(); |
| 75 for (var i = 0; i < columns.length; i++) { | 104 }, |
| 76 table.addColumn(columns[i][0], columns[i][1]); | 105 |
| 106 columnsChanged: function() { |
| 107 this.draw(); |
| 108 }, |
| 109 |
| 110 dataChanged: function() { |
| 111 this.draw(); |
| 112 }, |
| 113 |
| 114 collapseOpen: function() { |
| 115 if (this.$.collapse.opened) { |
| 116 this.icon = "arrow-drop-up"; |
| 117 } else { |
| 118 this.icon = "arrow-drop-down"; |
| 77 } | 119 } |
| 78 table.addRows(data); | 120 }, |
| 79 | 121 |
| 80 var headerHeight = 0; | 122 draw: function() { |
| 81 var chartWidth = 400; | 123 if (!this.columns || !this.data) { |
| 82 var chartHeight = 15 * data.length; | 124 return; |
| 83 var labelWidth = 410; | |
| 84 var options = { | |
| 85 "chartArea": { | |
| 86 "top": headerHeight, | |
| 87 "left": labelWidth, | |
| 88 "width": chartWidth, | |
| 89 "height": chartHeight, | |
| 90 }, | |
| 91 "legend": { "position": "none" }, | |
| 92 "width": labelWidth + chartWidth, | |
| 93 "height": headerHeight + chartHeight, | |
| 94 "fontSize": 12, | |
| 95 "titleTextStyle": { "fontSize": 18 }, | |
| 96 }; | |
| 97 if (this.colors) { | |
| 98 options["colors"] = this.colors; | |
| 99 } | 125 } |
| 126 var that = this; |
| 127 chartsReady.then(function() { |
| 128 var table = new google.visualization.DataTable(); |
| 129 for (var i = 0; i < that.columns.length; i++) { |
| 130 table.addColumn(that.columns[i][0], that.columns[i][1]); |
| 131 } |
| 132 table.addRows(that.data); |
| 100 | 133 |
| 101 var chart = new google.visualization.BarChart(this.$.chartcontainer); | 134 var totalWidth = that.$.host.offsetWidth; |
| 102 chart.draw(table, options); | 135 var headerHeight = 0; |
| 136 var labelWidth = 410; |
| 137 var chartWidth = totalWidth - labelWidth; |
| 138 var chartHeight = 15 * that.data.length; |
| 139 var options = { |
| 140 "chartArea": { |
| 141 "top": headerHeight, |
| 142 "left": labelWidth, |
| 143 "width": chartWidth, |
| 144 "height": chartHeight, |
| 145 }, |
| 146 "legend": { "position": "none" }, |
| 147 "width": totalWidth, |
| 148 "height": headerHeight + chartHeight, |
| 149 "fontSize": 12, |
| 150 "titleTextStyle": { "fontSize": 18 }, |
| 151 }; |
| 152 if (that.colors) { |
| 153 options["colors"] = that.colors; |
| 154 } |
| 155 |
| 156 var chart = new google.visualization.BarChart(that.$.chartcontainer); |
| 157 chart.draw(table, options); |
| 158 }); |
| 103 }, | 159 }, |
| 104 }); | 160 }); |
| 161 })(); |
| 105 </script> | 162 </script> |
| 106 </polymer-element> | 163 </polymer-element> |
| OLD | NEW |