{"id":847,"date":"2018-04-13T21:31:22","date_gmt":"2018-04-13T21:31:22","guid":{"rendered":"http:\/\/www.honobono-life.info\/wpeng\/?p=847"},"modified":"2018-04-13T22:24:25","modified_gmt":"2018-04-13T22:24:25","slug":"google-chart-by-angularjs-tables-row-clickdisplay-modal","status":"publish","type":"post","link":"http:\/\/www.honobono-life.info\/wpeng\/google-chart-by-angularjs-tables-row-clickdisplay-modal\/","title":{"rendered":"Google Chart by AngularJS table&#8217;s row click,display modal"},"content":{"rendered":"<ul>\r\n<li>AngularJS : 1.6.5<\/li>\r\n<li>Bootstrap : 3.x<\/li>\r\n<li>UI Bootstrap : 2.5.0<\/li>\r\n<\/ul>\r\n<!--more-->\r\n<div role=\"tabpanel\">\r\n  <ul class=\"nav nav-tabs\">\r\n    <li class=\"active\"><a href=\"#demo1\" data-toggle=\"tab\">demo<\/a><\/li>\r\n    <li><a href=\"#html1\" data-toggle=\"tab\">markup<\/a><\/li>\r\n    <li><a href=\"#script1\" data-toggle=\"tab\">script<\/a><\/li>\r\n    <li><a href=\"#template1\" data-toggle=\"tab\">php<\/a><\/li>\r\n  <\/ul>\r\n  <div class=\"tab-content\">\r\n    <div class=\"tab-pane active\" id=\"demo1\">\r\n\r\n<a href=\"http:\/\/www.honobono-life.info\/wpeng\/wp-content\/themes\/ang\/assets\/templates\/gglchart-ng-modal.html\" rel=\"noopener\" target=\"_blank\">Demo<\/a>\r\n\r\n    <\/div>\r\n    <div class=\"tab-pane\" id=\"html1\">\r\n<pre>\r\n  &lt;head>\r\n\/\/\r\n    &lt;script type=\"text\/javascript\" src=\"https:\/\/www.gstatic.com\/charts\/loader.js\">&lt;\/script>\r\n  &lt;\/head>\r\n  &lt;body>\r\n  &lt;div ng-controller=\"MyCtrl\">\r\n    &lt;script type=\"text\/ng-template\" id=\"myModalContent.html\">\r\n    &lt;div class=\"modal-header\">\r\n      &lt;h3 class=\"modal-title\">{{ title }}'s Detail data&lt;\/h3>\r\n    &lt;\/div>\r\n    &lt;div class=\"modal-body\">\r\n      &lt;div ng-repeat=\"item in items\">\r\n        &lt;div class=\"radio\">\r\n          &lt;label>\r\n            &lt;input type=\"radio\" ng-model=\"$parent.selected.item\" value=\"{{item}}\" required \/>{{item}}\r\n          &lt;\/label>\r\n        &lt;\/div>\r\n      &lt;\/div>\r\n    &lt;\/div>\r\n    &lt;div class=\"modal-footer\">\r\n      &lt;button class=\"btn btn-primary\" ng-click=\"ok()\">OK&lt;\/button>\r\n      &lt;button class=\"btn btn-warning\" ng-click=\"cancel()\">Cancel&lt;\/button>\r\n    &lt;\/div>\r\n    &lt;\/script>\r\n    &lt;div id=\"chart_div\">&lt;\/div>\r\n      &lt;button ng-click=\"getDataAsync()\" class=\"btn btn-xs btn-primary\">Back to Site list&lt;\/button>\r\n    &lt;\/div>\r\n  &lt;\/div>\r\n  &lt;\/body>\r\n<\/pre>\r\n    <\/div>\r\n\r\n    <div class=\"tab-pane\" id=\"script1\">\r\n<pre>\r\ngoogle.charts.load('current', {packages: ['table','corechart']});\r\n\r\ngoogle.charts.setOnLoadCallback(function() {\r\n  angular.bootstrap(document.body, ['myApp']);\r\n});\r\n\r\nvar myApp = angular.module('myApp', ['ui.bootstrap']);\r\n\r\nmyApp.controller('MyCtrl', function($scope,$http,$uibModal,$log) {\r\n  $scope.items = ['Line Chart', 'Detail Table'];\r\n  $scope.open = function (site_name) {\r\n    var modalInstance = $uibModal.open({\r\n      templateUrl: 'myModalContent.html',\r\n      controller: 'ModalInstanceCtrl',\r\n      size: 'sm',\r\n      resolve: {\r\n        items: function () {\r\n          return $scope.items;\r\n        },\r\n        title: function () {\r\n          return site_name;\r\n        }\r\n      }\r\n    });\r\n\r\n    modalInstance.result.then(function (selectedItem) {\r\n      switch (selectedItem) {\r\n        case 'Line Chart':\r\n          $scope.grphDisplay(site_name);\r\n          break;\r\n        case 'Detail Table':\r\n          $scope.getDetail(site_name);\r\n          break;\r\n      }\r\n    }, function () {\r\n      $log.info('Modal dismissed at: ' + new Date());\r\n    });\r\n  };\r\n  $scope.grphDisplay = function (site_name) {\r\n    var url = '..\/pdo-webana2.php?site_name=' + site_name ;\r\n    $http.get(url).then(function(response) {\r\n      var data1 = new google.visualization.DataTable();\r\n      data1.addColumn('string', 'year\/mon');\r\n      data1.addColumn('number', 'page_view');\r\n      for(i = 0 ; i < response.data.length;i++) {\r\n        var year_mon = response.data[i][\"year_mon\"].substr(2,5);\r\n        data1.addRow([year_mon, parseInt(response.data[i][\"page_view\"])]);\r\n      };\r\n      var title = site_name + \"\\'s page_view\";\r\n      var options = {\r\n        'title': title,\r\n        'height': 300\r\n      };\r\n      var chart = new google.visualization.LineChart(document.getElementById('chart_div'));\r\n      chart.draw(data1, options);\r\n    });\r\n  };\r\n  $scope.getDataAsync = function () {\r\n    $http.get('..\/pdo-webana1.php').then(function(response) {\r\n      var data1 = new google.visualization.DataTable();\r\n      data1.addColumn('string', 'site_name');\r\n      data1.addColumn('number', 'page_view');\r\n      for(i = 0 ; i < response.data.length;i++) {\r\n        data1.addRow([\r\n          response.data[i][\"site_name\"],\r\n          parseInt(response.data[i][\"page_view\"])\r\n        ]);\r\n      };\r\n      var options = {\r\n        'title': 'page_view',\r\n        'height':300\r\n      };\r\n      var chart = new google.visualization.Table(document.getElementById('chart_div'));\r\n      var formatter = new google.visualization.NumberFormat(\r\n        {fractionDigits: 0}\r\n      );\r\n      formatter.format(data1, 1);\r\n      chart.draw(data1, options);\r\n      google.visualization.events.addListener(chart, 'select', function() {\r\n        var row = chart.getSelection()[0].row;\r\n        $scope.open(data1.getValue(row, 0))\r\n      });\r\n    });\r\n  };\r\n  $scope.getDetail = function (site_name) {\r\n    var url = '..\/pdo-webana3.php?site_name=' + site_name ;\r\n    $http.get(url).then(function(response) {\r\n      var data1 = new google.visualization.DataTable();\r\n      data1.addColumn('string', 'page_name');\r\n      data1.addColumn('number', 'page_view');\r\n      for(i = 0 ; i < response.data.length;i++) {\r\n        data1.addRow([\r\n          response.data[i][\"page_name\"],\r\n          parseInt(response.data[i][\"page_view\"])\r\n        ]);\r\n      };\r\n      var options = {\r\n        'title':'Sample Title',\r\n        'height':300\r\n      };\r\n      var chart = new google.visualization.Table(document.getElementById('chart_div'));\r\n      var formatter = new google.visualization.NumberFormat(\r\n        {fractionDigits: 0}\r\n      );\r\n      formatter.format(data1, 1);\r\n      chart.draw(data1, options);\r\n    });\r\n  };\r\n  $scope.getDataAsync();\r\n});\r\n\r\nmyApp.controller(\"ModalInstanceCtrl\", function($scope, $uibModalInstance, items, title) {\r\n  $scope.title = title;\r\n  $scope.items = items;\r\n  $scope.selected = {\r\n    item: $scope.items[0]\r\n  };\r\n  $scope.ok = function () {\r\n    $uibModalInstance.close($scope.selected.item);\r\n  };\r\n\r\n  $scope.cancel = function () {\r\n    $uibModalInstance.dismiss('cancel');\r\n  };\r\n});\r\n<\/pre>\r\n    <\/div><!-- \/.tab-pane -->\r\n\r\n    <div class=\"tab-pane\" id=\"template1\">\r\n<pre>\r\n(pdo-webana1.php)\r\nrequire(\"db_info.php\");\r\n\r\n$dsn = 'mysql:host=localhost;dbname='.$database.';charset=utf8';\r\n\r\ntry {\r\n  $dbh = new PDO($dsn, $username, $password,\r\n    array(\r\n      PDO::ATTR_EMULATE_PREPARES =>false,\r\n      PDO::MYSQL_ATTR_INIT_COMMAND => \"SET NAMES 'utf8'\"\r\n    )\r\n  );\r\n} catch (PDOException $e) {\r\n  exit('\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u5931\u6557\u3002'.$e->getMessage());\r\n}\r\n\r\ndate_default_timezone_set('Asia\/Tokyo');\r\n$result = array();\r\n\r\n$st = $dbh->prepare('select year_mon,site_name,sum(page_view) as page_view from wp_sample where group by site_name');\r\n\r\n$st->execute();\r\n$result = $st->fetchAll(PDO::FETCH_ASSOC);\r\n\r\necho json_encode($result);\r\n\r\n\r\n(pdo-webana2.php)\r\nrequire(\"db_info.php\");\r\n\r\n$site_name = filter_input(INPUT_GET, 'site_name');\r\n$dsn = 'mysql:host=localhost;dbname='.$database.';charset=utf8';\r\n\r\ntry {\r\n  $dbh = new PDO($dsn, $username, $password,\r\n    array(\r\n      PDO::ATTR_EMULATE_PREPARES =>false,\r\n      PDO::MYSQL_ATTR_INIT_COMMAND => \"SET NAMES 'utf8'\"\r\n    )\r\n  );\r\n} catch (PDOException $e) {\r\n  exit('\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u5931\u6557\u3002'.$e->getMessage());\r\n}\r\n\r\ndate_default_timezone_set('Asia\/Tokyo');\r\n$result = array();\r\n\r\n$st = $dbh->prepare('select year_mon, sum(page_view) as page_view from wp_sample where site_name = :site_name group by year_mon order by year_mon');\r\n\r\n$st->bindValue(':site_name', $site_name , PDO::PARAM_STR);\r\n$st->execute();\r\n$result = $st->fetchAll(PDO::FETCH_ASSOC);\r\n\r\necho json_encode($result);\r\n\r\n(pdp-webana3.php)\r\nrequire(\"db_info.php\");\r\n\r\n$site_name = filter_input(INPUT_GET, 'site_name');\r\n$dsn = 'mysql:host=localhost;dbname='.$database.';charset=utf8';\r\n\r\ntry {\r\n  $dbh = new PDO($dsn, $username, $password,\r\n    array(\r\n      PDO::ATTR_EMULATE_PREPARES =>false,\r\n      PDO::MYSQL_ATTR_INIT_COMMAND => \"SET NAMES 'utf8'\"\r\n    )\r\n  );\r\n} catch (PDOException $e) {\r\n  exit('\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u5931\u6557\u3002'.$e->getMessage());\r\n}\r\n\r\ndate_default_timezone_set('Asia\/Tokyo');\r\n$result = array();\r\n\r\n$st = $dbh->prepare('select page_name, page_view from eng_webana where site_name = :site_name order by page_name');\r\n\r\n$st->bindValue(':site_name', $site_name , PDO::PARAM_STR);\r\n$st->execute();\r\n$result = $st->fetchAll(PDO::FETCH_ASSOC);\r\n\r\necho json_encode($result);\r\n<\/pre>\r\n    <\/div><!-- \/.tab-pane -->\r\n\r\n  <\/div><!-- \/.tab-content -->\r\n<\/div><!-- \/.tabpanel -->\r\n","protected":false},"excerpt":{"rendered":"<p>AngularJS : 1.6.5 Bootstrap : 3.x UI Bootstrap : 2.5.0<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[36],"tags":[35,75,98],"amp_enabled":true,"_links":{"self":[{"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/posts\/847"}],"collection":[{"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/comments?post=847"}],"version-history":[{"count":6,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/posts\/847\/revisions"}],"predecessor-version":[{"id":1596,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/posts\/847\/revisions\/1596"}],"wp:attachment":[{"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/media?parent=847"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/categories?post=847"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.honobono-life.info\/wpeng\/wp-json\/wp\/v2\/tags?post=847"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}