'use strict'; angular.module('google-chart-sample').controller("FatChartCtrl", function ($scope) { var chart1 = {}; chart1.type = "AreaChart"; chart1.displayed = false; chart1.data = {"cols": [ {id: "month", label: "Month", type: "string"}, {id: "laptop-id", label: "Laptop", type: "number"}, {id: "desktop-id", label: "Desktop", type: "number"}, {id: "server-id", label: "Server", type: "number"}, {id: "cost-id", label: "Shipping", type: "number"} ], "rows": [ {c: [ {v: "January"}, {v: 19, f: "42 items"}, {v: 12, f: "Ony 12 items"}, {v: 7, f: "7 servers"}, {v: 4} ]}, {c: [ {v: "February"}, {v: 13}, {v: 1, f: "1 unit (Out of stock this month)"}, {v: 12}, {v: 2} ]}, {c: [ {v: "March"}, {v: 24}, {v: 5}, {v: 11}, {v: 6} ]} ]}; chart1.options = { "title": "Sales per month", "isStacked": "true", "fill": 20, "displayExactValues": true, "vAxis": { "title": "Sales unit", "gridlines": {"count": 10} }, "hAxis": { "title": "Date" } }; var formatCollection = [ { name: "color", format: [ { columnNum: 4, formats: [ { from: 0, to: 3, color: "white", bgcolor: "red" }, { from: 3, to: 5, color: "white", fromBgColor: "red", toBgColor: "blue" }, { from: 6, to: null, color: "black", bgcolor: "#33ff33" } ] } ] }, { name: "arrow", checked: false, format: [ { columnNum: 1, base: 19 } ] }, { name: "date", format: [ { columnNum: 5, formatType: 'long' } ] }, { name: "number", format: [ { columnNum: 4, prefix: '$' } ] }, { name: "bar", format: [ { columnNum: 1, width: 100 } ] } ] chart1.formatters = {}; $scope.chart = chart1; $scope.cssStyle = "height:600px; width:100%;"; $scope.chartSelectionChange = function () { if (($scope.chart.type === 'Table' && $scope.chart.data.cols.length === 6 && $scope.chart.options.tooltip.isHtml === true) || ($scope.chart.type != 'Table' && $scope.chart.data.cols.length === 6 && $scope.chart.options.tooltip.isHtml === false)) { $scope.chart.data.cols.pop(); delete $scope.chart.data.rows[0].c[5]; delete $scope.chart.data.rows[1].c[5]; delete $scope.chart.data.rows[2].c[5]; } if ($scope.chart.type === 'Table') { $scope.chart.options.tooltip.isHtml = false; $scope.chart.data.cols.push({id: "data-id", label: "Date", type: "date"}); $scope.chart.data.rows[0].c[5] = {v: "Date(2013,01,05)"}; $scope.chart.data.rows[1].c[5] = {v: "Date(2013,02,05)"}; $scope.chart.data.rows[2].c[5] = {v: "Date(2013,03,05)"}; } } $scope.htmlTooltip = function () { if ($scope.chart.options.tooltip.isHtml) { $scope.chart.data.cols.push({id: "", "role": "tooltip", "type": "string", "p": { "role": "tooltip", 'html': true} }); $scope.chart.data.rows[0].c[5] = {v: " Shipping " + $scope.chart.data.rows[0].c[4].v + "
"}; $scope.chart.data.rows[1].c[5] = {v: " Shipping " + $scope.chart.data.rows[1].c[4].v + "
"}; $scope.chart.data.rows[2].c[5] = {v: " Shipping " + $scope.chart.data.rows[2].c[4].v + "
"}; } else { $scope.chart.data.cols.pop(); delete $scope.chart.data.rows[0].c[5]; delete $scope.chart.data.rows[1].c[5]; delete $scope.chart.data.rows[2].c[5]; } } $scope.hideServer = false; $scope.selectionChange = function () { if ($scope.hideServer) { $scope.chart.view = {columns: [0, 1, 2, 4]}; } else { $scope.chart.view = {}; } } $scope.formatCollection = formatCollection; $scope.toggleFormat = function (format) { $scope.chart.formatters[format.name] = format.format; }; $scope.chartReady = function () { fixGoogleChartsBarsBootstrap(); } function fixGoogleChartsBarsBootstrap() { // Google charts uses , which is incompatible with Twitter // * bootstrap in responsive mode, which inserts a css rule for: img { height: auto; }. // * // * The fix is to use inline style width attributes, ie . // * BUT we can't change the way Google Charts renders its bars. Nor can we change // * the Twitter bootstrap CSS and remain future proof. // * // * Instead, this function can be called after a Google charts render to "fix" the // * issue by setting the style attributes dynamically. $(".google-visualization-table-table img[width]").each(function (index, img) { $(img).css("width", $(img).attr("width")).css("height", $(img).attr("height")); }); }; });