charts_highstock-1.0.x-dev/js/charts_highstock.js

js/charts_highstock.js
/**
 * @file
 * JavaScript integration between Highstock and Drupal.
 */
(function (Drupal, once, drupalSettings) {

  'use strict';

  Drupal.chartsHighstock = Drupal.chartsHighstock || {};
  // Property to keep track of enabled series data label per chart.
  Drupal.chartsHighstock.chartDisplayDataLabelsEnabled = [];
  // e: PointerEvent
  Drupal.chartsHighstock.menuItemToggleDataLabelClickCallback = function (e) {
    const chart = this,
      chartId = chart.options.drupalChartDivId;
    Drupal.chartsHighstock.chartDisplayDataLabelsEnabled[chartId] = !Drupal.chartsHighstock.chartDisplayDataLabelsEnabled[chartId];
    chart.series.forEach(
      (item, i) => {
        chart.series[i].update({
          dataLabels: {
            enabled: Drupal.chartsHighstock.chartDisplayDataLabelsEnabled[chartId],
          },
        });
      }
    );
  };

  Drupal.behaviors.chartsHighstock = {
    attach: function (context, settings) {
      const contents = new Drupal.Charts.Contents();

      if (drupalSettings.hasOwnProperty('charts') && drupalSettings.charts.highstock.global_options) {
        Highcharts.setOptions(drupalSettings.charts.highstock.global_options);
      }
      once('charts-highstock', '.charts-highstock', context).forEach(function (element) {
        const config = contents.getData(element.id);
        if (element.nextElementSibling && element.nextElementSibling.hasAttribute('data-charts-debug-container')) {
          element.nextElementSibling.querySelector('code').innerText = JSON.stringify(config, null, ' ');
        }
        if (config) {
          config.exporting = config.exporting || {
            menuItemDefinitions: {
              toggleDataLabel: {
                onclick: Drupal.chartsHighstock.menuItemToggleDataLabelClickCallback,
                text: Drupal.t('Toggle data label display'),
              },
            },
            buttons: {
              contextButton: {
                menuItems: [
                  'viewFullscreen',
                  'printChart',
                  'separator',
                  'downloadPNG',
                  'downloadPDF',
                  'downloadSVG',
                  'separator',
                  'downloadCSV',
                  'viewData',
                  'toggleDataLabel'
                ],
              },
            },
          };
          Drupal.chartsHighstock.chartDisplayDataLabelsEnabled[element.id] = config.plotOptions.series.dataLabels.enabled;
          Highcharts.stockChart(element.id, config);
        }
      });
    },
    detach: function (context, settings, trigger) {
      if (trigger === 'unload') {
        once('charts-highstock-detach', '.charts-highstock', context).forEach(function (element) {
          const highstock_item =  Highcharts.stockChart(element.id);
          if (highstock_item) {
            highstock_item.destroy();
          }
        });
      }
    }

  };
}(Drupal, once, drupalSettings));

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc