Создание типов диаграмм

На этой странице описывается, как разработать собственный тип диаграммы и сделать его доступным для пользователей.

Аудитория

На этой странице предполагается, что вы прочитали страницу Использование диаграмм . Также предполагается, что вы знакомы с JavaScript и объектно-ориентированным программированием. В Интернете доступно множество учебных пособий по JavaScript .

Создание диаграммы

Диаграммы предоставляются пользователю через созданную вами библиотеку JavaScript. Вот шаги для создания библиотеки диаграмм:

  1. Выберите пространство имен для своего кода. Другие страницы будут размещать ваш код; вы должны стараться избегать конфликтов имен.
  2. Реализуйте свой объект диаграммы. Реализуйте объект JavaScript, который предоставляет следующее:
    • конструктор,
    • Метод draw() для рисования вашего объекта внутри элемента DOM, переданного конструктору,
    • Любые другие необязательные стандартные методы для использования клиентом, такие как getSelection() и
    • Любые пользовательские методы, которые вы хотите предоставить своим клиентам.
  3. [ Необязательно ] Реализуйте любые события , которые вы хотите запускать, чтобы клиент мог их перехватить.
  4. Напишите документацию для вашей диаграммы. Если вы не задокументируете это, люди, вероятно, не смогут его встроить.
  5. Разместите свою диаграмму в галерее диаграмм.

Кончик

  • Вы можете загрузить определения классов и методов API goog.visualization , чтобы включить автозаполнение в своей среде IDE (редактор кода). Загрузите файл с http://www.google.com/uds/modules/gviz/gviz-api.js и сохраните его в своем проекте. Большинство IDE проиндексируют его автоматически и включат автозаполнение, хотя ваша IDE может отличаться. Обратите внимание, что файл может быть не всегда актуальным; проверьте справочные страницы для получения самой последней справки по API.

Выберите пространство имен

Ваша диаграмма может быть встроена на страницу, на которой размещены другие диаграммы или другой несвязанный код JavaScript. Чтобы избежать конфликтов имен с другим кодом или именами классов CSS, вы должны выбрать уникальное пространство имен для своего кода диаграммы. Хорошим выбором для пространства имен является URL-адрес, который вы будете использовать для размещения своего скрипта (за исключением WWW и любых расширений). Так, например, если ваша диаграмма будет размещена на www.example.com, вы должны использовать example в качестве своего уникального пространства имен. Вы можете добавить дополнительные суффиксы, разделенные . метки, чтобы дополнительно сгруппировать диаграмму (все диаграммы Google имеют пространство имен google.visualization ). Используйте объект пространства имен для хранения объекта диаграммы, а также любых глобальных переменных, которые могут вам понадобиться.

Вот пример создания объекта пространства имен для хранения класса диаграммы с именем MyTable, а также любых необходимых глобальных переменных:

// Namespace, implemented as a global variable.
var example = {};

// MyTable class constructor.
example.MyTable = function(container) {
  // ...
}

// MyTable.draw() method.
example.MyTable.prototype.draw = function(data, options) {
  // ...
}

Как избежать конфликтов CSS

Если вы используете CSS, убедитесь, что вы не написали правила CSS, которые могут повлиять на другие диаграммы на странице. Например, такое правило, как td {color: blue;} , крайне не рекомендуется, так как оно повлияет на любой другой элемент <td> на странице, а не только на диаграмме. Один из способов обойти это — заключить всю диаграмму в <div> с именем класса и применить все ваши правила CSS только к элементам, которые являются потомками элемента с этим именем класса. Например, следующее правило CSS повлияет только на элементы <td> , у которых есть элемент с именем класса «example» в качестве предка.

td.example {color: blue;}

Затем вы можете обернуть свою диаграмму в <div> с помощью:

<div class="example">
  ...
</div>

Реализуйте свою диаграмму

Вам потребуется реализовать диаграмму как объект JavaScript, предоставляющий стандартные методы, описанные в разделе «Справочник ». Два обязательных метода — конструктор и методы draw(). Вы также можете предоставить пользователю любые дополнительные методы, подходящие для вашей диаграммы. Просто помните, что проще в использовании, тем лучше.

Конструктор

Ваша диаграмма должна предоставлять единственный конструктор, который принимает один параметр, элемент DOM, в котором вы будете рисовать свою диаграмму. Обычно диаграммы сохраняют локальную копию этого элемента в конструкторе для последующего использования:

function example.MyTable(container) {
  this.container = container
}

Метод draw()

В вашем классе диаграммы должен быть метод draw() , определенный в прототипе вашего класса диаграммы. Метод draw() принимает два параметра:

  1. DataTable , содержащий данные для отображения.
  2. Необязательная карта параметров имени/значения для вашей диаграммы. Имена и типы значений опций определяются вами для конкретной диаграммы. Например, в приведенном ниже примере Hello Chart диаграмма поддерживает параметр с именем 'showLineNumber' со значением логического типа. Вы должны поддерживать значение по умолчанию для каждой опции на случай, если пользователь не передаст значение для конкретной опции. Этот параметр является необязательным, поэтому вы также должны быть готовы использовать все значения по умолчанию, если пользователь не передает этот параметр ( подробнее ).
example.MyTable.prototype.draw = function(data, options) {
  // Process data and options and render output into the container element.
  ...
}

Привет, Чарт!

Вот простая диаграмма, которая отображает данные DataTable в виде таблицы HTML:

И вот код реализации:

// Declare a unique namespace.
var example = {};

// Class constructor. Parameter container is a DOM elementon the client that
// that will contain the chart.
example.MyTable = function(container) {
  this.containerElement = container;
}

// Main drawing logic.
// Parameters:
//   data is data to display, type google.visualization.DataTable.
//   options is a name/value map of options. Our example takes one option.
example.MyTable.prototype.draw = function(data, options) {

  // Create an HTML table
  var showLineNumber = options.showLineNumber; // Boolean configuration option.

  var html = [];
  html.push('<table border="1">');

  // Header row
  html.push('<tr>');
  if (showLineNumber) {
    html.push('<th>Seq</th>');
  }
  for (var col = 0; col < data.getNumberOfColumns(); col++) {
    html.push('<th>' + this.escapeHtml(data.getColumnLabel(col)) + '</th>');
  }
  html.push('</tr>');

  for (var row = 0; row < data.getNumberOfRows(); row++) {
    html.push('<tr>');
    if (showLineNumber) {
      html.push('<td align="right">', (row + 1), '</td>');
    }

    for (var col = 0; col < data.getNumberOfColumns(); col++) {
      html.push(data.getColumnType(col) == 'number' ? '<td align="right">' : '<td>');
      html.push(this.escapeHtml(data.getFormattedValue(row, col)));
      html.push('</td>');
    }
    html.push('</tr>');
  }
  html.push('</table>');

  this.containerElement.innerHTML = html.join('');
}

// Utility function to escape HTML special characters
example.MyTable.prototype.escapeHtml = function(text) {
  if (text == null)
    return '';
  return text.replace(/&/g, '&').replace(/</g, '<')
      .replace(/>/g, '>').replace(/"/g, '"');
}

Включение диаграммы на веб-страницу

Чтобы использовать предыдущую диаграмму, сохраните ее в файле .js, доступном в вашем браузере. Затем сохраните следующий код, изменив исходный параметр <script> так, чтобы он указывал на ваш файл JavaScript:

<html>
  <head>
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript" src="mytablevis.js"></script>
    <script type="text/javascript">
      google.charts.load("current");

      // Set callback to run when API is loaded
      google.charts.setOnLoadCallback(drawVisualization);

      // Called when the Chart API is loaded.
      function drawVisualization() {

        // Create and populate a data table.
        var data = new google.visualization.DataTable();
        data.addColumn('string', 'Task');
        data.addColumn('number', 'Daily Hours');
        data.addRows(5);
        data.setCell(0, 0, 'Work');
        data.setCell(0, 1, 11);
        // Add more data rows and cells here

        // Instantiate our table object.
        var vis = new example.MyTable(document.getElementById('mydiv'));

        // Draw our table with the data we created locally.
        vis.draw(data, {showLineNumber: true});
       }
   </script>
  <title>MyTable example page</title></head>
  <body>
    <div id="mydiv"></div>
    <p>This page demonstrates hosting a table visualization.</p>
  </body>
</html>

Реализуйте свои мероприятия

Если вы хотите, чтобы ваша диаграмма запускала полезные события (например, события таймера или инициированные пользователем события, такие как клики), вам нужно вызвать функцию google.visualization.events.trigger с подробностями вашего события (имя, свойства для отправки и т. д.). Подробности вы можете узнать на странице События . Вы можете предоставить сведения о событии клиенту, добавив свойства к объекту события, или вы можете указать метод get...() некоторого типа на диаграмме, и клиент может вызвать этот метод, чтобы получить сведения о событии. В любом случае хорошо задокументируйте свои методы или свойства событий.

Задокументируйте свою диаграмму

Если вы не документируете свою диаграмму должным образом, у вас, вероятно, не будет много пользователей. Обязательно задокументируйте следующее:

  • Опишите все методы, которые вы поддерживаете. Метод draw() является общим для всех диаграмм, но каждая диаграмма может поддерживать свои собственные дополнительные методы. (Возможно, вам не нужно документировать свой конструктор, если он не имеет нестандартного поведения.) Вы можете найти список ожидаемых методов на странице справки .
  • Опишите все параметры, которые поддерживает ваш метод draw() . Сюда входят имя каждой опции, тип ожидаемого значения и его значение по умолчанию.
  • Опишите все события, которые вы вызываете. Это означает имя и свойства каждого события, а также время запуска каждого события.
  • Перечислите URL-адрес вашей библиотеки диаграмм, которую следует использовать в клиентском операторе включения <script> , и укажите URL-адрес вашей документации.
  • Дайте полное имя вашей диаграммы.
  • Создайте образцы страниц, которые демонстрируют, как использовать вашу диаграмму с поддерживаемыми параметрами, ее событиями и пользовательскими методами.
  • Четко опишите политику данных вашей диаграммы. Большинство диаграмм обрабатывают данные в браузере, но некоторые могут отправлять данные на сервер, например, для создания изображения диаграммы или карты. Если вы отправляете данные на сервер:
    • Четко определите, какие данные отправляются.
    • Обратите внимание, как долго данные будут храниться на сервере.
    • Задокументируйте, какие организации будут иметь доступ к данным. Например, компания XYZ и т. д.
    • Укажите, будут ли данные регистрироваться и как долго.

Ваша документация будет размещена там же, где и код вашей диаграммы (см. раздел «Отправьте свою диаграмму в галерею » ниже).

После того, как вы напишете свою диаграмму, отправьте ее для размещения в разделе «Дополнительные диаграммы» нашей галереи . Отправка диаграммы означает, что вы должны будете подписать с нами соглашение об отказе от создания вредоносного программного обеспечения или неправомерного использования пользовательских данных. Галерея — это просто список указателей на диаграммы, которые мы создали или просмотрели; вы можете разместить саму библиотеку JavaScript и документацию на своем сайте, или вы можете поручить размещение библиотеки и документации Google. Укажите, хотите ли вы, чтобы мы разместили вашу диаграмму, когда вы публикуете ее в галерее.

Исправление проблем

Если ваш код не работает, вот несколько подходов, которые могут помочь вам решить ваши проблемы:

  • Ищите опечатки. Помните, что JavaScript — это язык, чувствительный к регистру.
  • Используйте отладчик JavaScript. В Firefox можно использовать консоль JavaScript, отладчик Venkman или надстройку Firebug . В IE можно использовать Microsoft Script Debugger .
  • Найдите группу обсуждения Google Chart API. Если вы не можете найти сообщение, отвечающее на ваш вопрос, опубликуйте свой вопрос в группе вместе со ссылкой на веб-страницу, демонстрирующую проблему.

Локализация

Если вы предполагаете, что ваша диаграмма будет использоваться людьми в разных странах, вы можете спроектировать диаграмму так, чтобы она была локализована для разных языков и культур. Самая простая локализация — это перевод стандартных текстовых строк в пользовательском интерфейсе в соответствии с настройками браузера пользователя. Более продвинутой формой локализации было бы изменение числовых форматов в зависимости от локализации или, возможно, даже дизайна пользовательского интерфейса. Если вы решите локализовать свою диаграмму, перечислите языки, которые поддерживает ваша диаграмма, в своей документации и предоставьте настройку по умолчанию для часто используемого языка. Также полезно включить кнопку «изменить язык» в пользовательском интерфейсе вашей диаграммы на случай, если вы ошибетесь с языком. Обычный способ определить язык браузера — просмотреть HTML-заголовок Accept-Language .