diff --git a/charts.module b/charts.module index b96b8ed3eca71943cb57a766eab4e744953d8c72..cfe52ece334a1f546b707e10811c30ccede884ca 100644 --- a/charts.module +++ b/charts.module @@ -33,7 +33,9 @@ function template_preprocess_views_view_charts(&$variables) { $attachmentView = $service->getAttachmentViews(); $view = $variables['view']; - + $viewId = $view->id(); + $displayId = $view->display_handler->display['id']; + $chartId = $viewId . '__' . $displayId; $categoriesAttachment = array(); $seriesDataAttachment = array(); @@ -79,7 +81,8 @@ function template_preprocess_views_view_charts(&$variables) { $googleOptions = charts_google_create_charts_options($options, $seriesData); $googleChartType = charts_google_create_chart_type($options); $variables['chart_type'] = 'google'; - $variables['attributes']['class'][0] = 'chart-google'; + $variables['attributes']['class'][0] = 'charts-google'; + $variables['attributes']['id'][0] = $chartId; $variables['content_attributes']['data-chart'][] = $googleData; $variables['attributes']['google-options'][1] = json_encode($googleOptions); $variables['attributes']['google-chart-type'][2] = json_encode($googleChartType); @@ -90,18 +93,21 @@ function template_preprocess_views_view_charts(&$variables) { $highchart = charts_highcharts_render_charts($options, $categories, $seriesData); $variables['chart_type'] = 'highcharts'; $variables['content_attributes']['data-chart'][] = json_encode($highchart); + $variables['attributes']['id'][0] = $chartId; $variables['attributes']['class'][] = 'charts-highchart'; break; case 'c3': - $c3 = charts_c3_render_charts($options, $categories, $seriesData); + $c3 = charts_c3_render_charts($options, $categories, $seriesData, $chartId); $variables['chart_type'] = 'c3'; $variables['content_attributes']['data-chart'][] = json_encode($c3); + $variables['attributes']['id'][0] = $chartId; $variables['attributes']['class'][] = 'charts-c3'; break; default: // Not handled. } + } diff --git a/charts.theme.inc b/charts.theme.inc deleted file mode 100644 index 8327b557aedc7aff88438d6745b1d9ba50488c5b..0000000000000000000000000000000000000000 --- a/charts.theme.inc +++ /dev/null @@ -1,38 +0,0 @@ -<?php - -/** - * @file - * Theme for Charts views. - * @param $page - */ - -/** - * Hook attaches assests to pages depending on library selected - * - * @param $attachments - */ -/*function charts_page_attachments(&$attachments) -{ - $service = \Drupal::service('charts.charts_service'); - $library = $service->getLibrarySelected(); - /*Depending on the library selected, javescript files associated to the selected library will only be attached to - the template.*/ - -/* switch($library){ - case 'google': - $attachments['#attached']['library'][] = 'charts_google/charts_google'; - $attachments['#attached']['library'][] = 'charts_google/google'; - break; - case 'highcharts': - $attachments['#attached']['library'][] = 'charts_highcharts/charts_highcharts'; - $attachments['#attached']['library'][] = 'charts_highcharts/highcharts'; - break; - case 'c3': - $attachments['#attached']['library'][] = 'charts_c3/charts_c3'; - $attachments['#attached']['library'][] = 'charts_c3/c3'; - break; - - default: - - } -}*/ \ No newline at end of file diff --git a/modules/charts_c3/charts_c3.module b/modules/charts_c3/charts_c3.module index fe3d703d734b7ed9d93904f2ec56829b4eb9b101..9f3ce57fd39388f9d394728af7fbb4534ff29fcc 100644 --- a/modules/charts_c3/charts_c3.module +++ b/modules/charts_c3/charts_c3.module @@ -1,8 +1,10 @@ <?php + /** * @file * Charts module integration with C3 library. */ + use Drupal\charts_c3\Settings\CThree\ChartType; use Drupal\charts_c3\Settings\CThree\CThree; use Drupal\charts_c3\Settings\CThree\ChartTitle; @@ -21,7 +23,7 @@ function charts_c3_charts_info() { return $info; } -function charts_c3_render_charts($options, $categories = array(), $seriesData = array()) { +function charts_c3_render_charts($options, $categories = array(), $seriesData = array(), $chartId) { $c3Data = array(); for ($i = 0; $i < count($seriesData); $i++) { @@ -35,9 +37,9 @@ function charts_c3_render_charts($options, $categories = array(), $seriesData = $c3ChartTitle = new ChartTitle(); $c3ChartTitle->setText($options['title']); $chartAxis = new ChartAxis(); - $c3 = new CThree(); - + $bindTo = '#' . $chartId; + $c3->setBindTo($bindTo); //$c3->setChart($c3Chart); //$c3->setLabels($options['data_labels']); $c3->setTitle($c3ChartTitle); diff --git a/modules/charts_c3/js/charts_c3.js b/modules/charts_c3/js/charts_c3.js index 0830593b87a45bf5a397ce66b2a9afadc918456e..18095381c282fec74d54cd37e2d806cac86ff53c 100644 --- a/modules/charts_c3/js/charts_c3.js +++ b/modules/charts_c3/js/charts_c3.js @@ -8,11 +8,14 @@ Drupal.behaviors.chartsC3 = { attach: function (context, settings) { - $('.charts-c3').once().each(function () { - if ($(this).attr('data-chart')) { - var c3Chart = $('.charts-c3').attr('data-chart'); - c3.generate(JSON.parse(c3Chart)); - } + $('.charts-c3').each(function(param) { + var chartId = $(this).attr('id'); + $('#'+chartId).once().each(function () { + if ($(this).attr('data-chart')) { + var c3Chart = $(this).attr('data-chart'); + c3.generate(JSON.parse(c3Chart)); + } + }); }); } }; diff --git a/modules/charts_c3/src/Settings/CThree/CThree.php b/modules/charts_c3/src/Settings/CThree/CThree.php index d2e738858d069aa3efc5df27fc3b0dbe74c9f537..c98a8785b5384f6704a128bc0abd2e88a9f4274e 100644 --- a/modules/charts_c3/src/Settings/CThree/CThree.php +++ b/modules/charts_c3/src/Settings/CThree/CThree.php @@ -4,7 +4,7 @@ namespace Drupal\charts_c3\Settings\CThree; class CThree implements \JsonSerializable { private $color; - private $bindto = '#chart'; + private $bindto; private $data; private $axis; private $title; @@ -54,10 +54,17 @@ class CThree implements \JsonSerializable { /** * @return string */ - public function getBindto() { + public function getBindTo() { return $this->bindto; } + /** + * @param mixed $bindto + */ + public function setBindTo($bindto) { + $this->bindto = $bindto; + } + /** * @return mixed */ diff --git a/modules/charts_google/charts_google.libraries.yml b/modules/charts_google/charts_google.libraries.yml index 72090a03120a866b3903717b066959ead131f4c7..19ebf46baf2af4108b02c70357942d0cac9e7fa4 100644 --- a/modules/charts_google/charts_google.libraries.yml +++ b/modules/charts_google/charts_google.libraries.yml @@ -6,6 +6,7 @@ charts_google: - core/jquery - core/jquery.once - core/drupal + - core/drupalSettings google: remote: https://www.gstatic.com/charts/loader.js diff --git a/modules/charts_google/js/charts_google.js b/modules/charts_google/js/charts_google.js index b381ffe06ff60ad05f76ff63ab6cb975c45b0eed..1822e70ee1a5e55741fedf26f7c004afdcf476ef 100644 --- a/modules/charts_google/js/charts_google.js +++ b/modules/charts_google/js/charts_google.js @@ -9,46 +9,48 @@ attach: function (context, settings) { google.charts.load('current', {packages: ['corechart']}); - var dataTable; - var googleChartOptions; - var googleChartType; + $('.charts-google').each(function(param) { + var chartId = $(this).attr('id'); + $('#'+chartId).once().each(function () { + if ($(this).attr('data-chart')) { + var dataTable = $(this).attr('data-chart'); + var googleChartOptions = $(this).attr('google-options'); + var googleChartType = $(this).attr('google-chart-type'); + google.charts.setOnLoadCallback(draw(googleChartType, dataTable, googleChartOptions)); + } + }); + function draw(chartType, dataTable,googleChartOptions) { - $('.chart-google').once().each(function () { - if ($(this).attr('data-chart')) { - dataTable = $(this).attr('data-chart'); - googleChartOptions = $(this).attr('google-options'); - googleChartType = $(this).attr('google-chart-type'); - google.charts.setOnLoadCallback(drawChart); - } + return function () { + var data = google.visualization.arrayToDataTable(JSON.parse(dataTable)); + var googleChartTypeObject = JSON.parse(chartType); + var googleChartTypeFormatted = googleChartTypeObject.type; + var chart; + switch (googleChartTypeFormatted) { + case 'BarChart': + chart = new google.visualization.BarChart(document.getElementById(chartId)); + break; + case 'ColumnChart': + chart = new google.visualization.ColumnChart(document.getElementById(chartId)); + break; + case 'PieChart': + chart = new google.visualization.PieChart(document.getElementById(chartId)); + break; + case 'ScatterChart': + chart = new google.visualization.ScatterChart(document.getElementById(chartId)); + break; + case 'AreaChart': + chart = new google.visualization.AreaChart(document.getElementById(chartId)); + break; + case 'LineChart': + chart = new google.visualization.LineChart(document.getElementById(chartId)); + } + chart.draw(data, JSON.parse(googleChartOptions)); + } + } }); - function drawChart() { - var data = google.visualization.arrayToDataTable(JSON.parse(dataTable)); - var googleChartTypeObject = JSON.parse(googleChartType); - var googleChartTypeFormatted = googleChartTypeObject.type; - var chart; - switch (googleChartTypeFormatted) { - case 'BarChart': - chart = new google.visualization.BarChart(document.getElementById('chart')); - break; - case 'ColumnChart': - chart = new google.visualization.ColumnChart(document.getElementById('chart')); - break; - case 'PieChart': - chart = new google.visualization.PieChart(document.getElementById('chart')); - break; - case 'ScatterChart': - chart = new google.visualization.ScatterChart(document.getElementById('chart')); - break; - case 'AreaChart': - chart = new google.visualization.AreaChart(document.getElementById('chart')); - break; - case 'LineChart': - chart = new google.visualization.LineChart(document.getElementById('chart')); - } - chart.draw(data, JSON.parse(googleChartOptions)); - } } }; }(jQuery)); diff --git a/templates/views-view-charts.html.twig b/templates/views-view-charts.html.twig index f74055950c3b07225da188f3078e9b6ad76a185b..2481122bb7833b8cc5ecd05da67fec81a3f01964 100644 --- a/templates/views-view-charts.html.twig +++ b/templates/views-view-charts.html.twig @@ -11,5 +11,4 @@ {% else %} Unconfigured charts {% endif %} -<div {{ attributes }} {{ content_attributes }} id="chart" - style="width:100%; height:400px;"></div> +<div {{ attributes }} {{ content_attributes }} style="width:100%; height:400px;"></div>