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> //Отыскать все элементы с классом "sparkline"</b><b> var elts = document.getElementsByClassName("sparkline");</b><b> main: for(var e = 0; e < 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, " ");// Преобр. \n и др. в пробел</b><b> var data = text.split(/\s+|\s*,\s*/); // По пробелам и запятым</b><b> for(var і = 0; і < 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")) ||</b><b> parseInt(style.fontSize) || 20;</b><b> var width = parseInt(elt.getAttribute("data-width")) ||</b><b> data.length * (parseInt(elt.getAttribute("data-dx")) || height/6);</b><b> var ymin = parselnt(elt.getAttribute("data-ymin")) ||</b><b> Math.min.apply(Math, data);</b><b> var ymax = parseInt(elt.getAttribute("data-ymax")) || Math.max.apply(Math, data);</b><b> if (ymin >= ymax) ymax = ymin + 1;</b><b> // Создать элемент <canvas>.</b><b> var canvas = document.createElement("canvas”);</b><b> canvas.width = width; // Установить размеры холста</b><b> canvas.height = height;</b><b> canvas.title = content; // Содержимое использовать как подсказку</b><b> elt.innerHTML = "" ;// Стереть содержимое элемента</b><b> elt.appendChild(canvas); // Вставить холст в элемент</b><b> // Нарисовать график по точкам (і,data[і]), преобразовав в координаты холста,</b><b> var context = canvas.getContext('2d');</b><b> for(var і = 0; і < 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>• В главе 20 был описан прикладной интерфейс
<b>WebStorage</b>