JavaScript. Подробное руководство, 6-е издание, стр. 372

<b>* или числом точек данных, умноженным на значение атрибута data-dx, если он</b>

<b>* указан, или числом точек данных, умноженным на высоту, деленную на 6</b>

<b>* - Минимальное и максимальное значение по оси у извлекаются из атрибутов</b>

<b>* data-ymin и data-ymax, если они указаны, иначе отыскиваются минимальное</b>

<b>* и максимальное значение в данных.</b>

<b>*/</b>

<b>onLoad(function() { // Когда документ будет загружен </b>

<b>  //Отыскать все элементы с классом &quot;sparkline&quot;</b>

<b>  var elts = document.getElementsByClassName(&quot;sparkline&quot;);</b>

<b>  main: for(var e = 0; e &lt; elts.length: e++) { // Для каждого элемента</b>

<b>    var elt = elts[e];</b>

<b>    // Получить содержимое элемента и преобразовать его в массив чисел.</b>

<b>    // Если преобразование не удалось, пропустить этот элемент.</b>

<b>    var content = elt.textContent || elt.innerText; // Содержимое</b>

<b>    var content = content.replace(/~\s+|\s+$/g, // Удалить пробелы</b>

<b>    var text = content.replace(/#.*$/gm, // Удалить комментарии</b>

<b>    text = text.replace(/[\n\r\t\v\f]/g, &quot; &quot;);// Преобр. \n и др. в пробел</b>

<b>    var data = text.split(/\s+|\s*,\s*/); // По пробелам и запятым</b>

<b>    for(var і = 0; і &lt; data.length; і++) { // Каждый фрагмент</b>

<b>      data[i] = Number(data[і]); // Преобразовать в число</b>

<b>      if (isNaN(data[і])) continue main; // Прервать при неудаче</b>

<b>    }</b>

<b>    // Определить цвет, ширину, высоту и границы по оси у для диаграммы</b>

<b>    // из данных, из атрибутов data- элемента и из вычисленного стиля,</b>

<b>    var style = getComputedStyle(elt, null);</b>

<b>    var color = style.color:</b>

<b>    var height = parselnt(elt.getAttributefdata-height&quot;)) ||</b>

<b>      parseInt(style.fontSize) || 20;</b>

<b>    var width = parseInt(elt.getAttribute(&quot;data-width&quot;)) ||</b>

<b>      data.length * (parseInt(elt.getAttribute(&quot;data-dx&quot;)) || height/6);</b>

<b>    var ymin = parselnt(elt.getAttribute(&quot;data-ymin&quot;)) ||</b>

<b>      Math.min.apply(Math, data);</b>

<b>    var ymax = parseInt(elt.getAttribute(&quot;data-ymax&quot;)) || Math.max.apply(Math, data);</b>

<b>    if (ymin &gt;= ymax) ymax = ymin + 1;</b>

<b>    // Создать элемент &lt;canvas&gt;.</b>

<b>    var canvas = document.createElement(&quot;canvas”);</b>

<b>    canvas.width = width; // Установить размеры холста</b>

<b>    canvas.height = height;</b>

<b>    canvas.title = content; // Содержимое использовать как подсказку</b>

<b>    elt.innerHTML = &quot;&quot; ;// Стереть содержимое элемента</b>

<b>    elt.appendChild(canvas); // Вставить холст в элемент</b>

<b>    // Нарисовать график по точкам (і,data[і]), преобразовав в координаты холста,</b>

<b>    var context = canvas.getContext('2d');</b>

<b>    for(var і = 0; і &lt; data.length; i++) { // Для каждой точки на графике</b>

<b>      var х = width*i/data.length;                // Масштабировать і</b>

<b>      var у = (ymax-data[i])*height/(ymax-ymin);  // и data[i]</b>

<b>      context.1іnеТо(х,у); // Первый вызов lineТо() выполнит moveTo()</b>

<b>    }</b>

<b>    context.strokeStyle = color; // Указать цвет кривой на диаграмме</b>

<b>    context.stroke(); // и нарисовать ее</b>

<b>  }</b>

<b>});</b>

22

Прикладные интерфейсы HTML5

Под термином HTML5 обычно подразумевается последняя версия спецификации языка разметки HTML, но этот термин также используется для обозначения целого комплекса веб-технологий, которые разрабатываются и определяются как часть языка разметки HTML или сопутствующие ему. Официально этот комплекс технологий называется «Open Web Platform». Однако на практике чаще используется сокращенное название «HTML5», и в данной главе мы будем использовать его именно в этом смысле. В других главах этой книги уже описывались некоторые новые прикладные интерфейсы HTML5:

• В главе 15 были представлены методы

<b>getElementsByClassName(),</b>
querySelectorAll()
и атрибуты данных элементов документа.

• В главе 16 было описано свойство

<b>classList</b>
элементов.

• В главе 18 рассказывалось о спецификации «XMLHttpRequest Level 2», о выполнении междоменных HTTP-запросов и о прикладном интерфейсе

<b>EventSource</b>
, определяемом спецификацией «Server-Sent Events».

• В главе 20 был описан прикладной интерфейс

<b>WebStorage</b>
и кэш приложений для автономных веб-приложений.