Изменения в документе представляют собой конечный автомат. Конечный автомат более удобно задать как некую матрицу, вместо того, чтобы писать функции JavaScript, выполняющие эти изменения на экране. Рассмотрим, как может быть записан конечный автомат для изменения стиля объектов в зависимости от нажатия пользователем тех или иных клавиш клавиатуры и кнопок мыши. Пусть, например, имеется форум (пусть реплики будут элементами списка <li></li>).
Как же подобные изменения произвести в окне браузера и отправить на сервер? Если расположить рядом с каждой репликой набор радио-кнопок, то это захламляет страницу, не нравится пользователю. Предлагаю кликать мышкой непосредственно на репликах: щелчок - поднять статус реплики на один уровень, двойной щелчок - опустить на один.
Определим стили для наших реплик. Эти стили могут иметь разные цвета, размеры шрифта и т.д.
class
)
называется default.
Например, переход из default-состояния выглядит так
Если событие вызвано на невыделенном объекте, то оно изменяет стиль только одного этиго объекта. Если событие вызвано на одном из выделенных объектов, то оно изменяет стиль всех выделенных объектов (конечный стиль каждого объекта зависит от его начального стиля).
Пусть один html-элемент (А) вложен в другой (В), переход для "В" определен в таблице переходов, и пользователь вызвал событие на "А". Если переход для "A"
Запишем все таблицы соответствия в отдельный файл,
например, "a.txt", и добавим внутрь элемента
head
следующий html-элемент
Команды бывают зарезервированные браузером и придуманные пользователем (например он может придумать команды cool, fine). Зарезервированные команды могут быть вызваны как непосредственно клавиатурой или мышью, так и из меню, пользовательские команды могут быть вызваны только из меню.
Можно использовать комбинация зарезервированных команд.
Клавиша enter клавиатуты возбуждает событие click, клавиша bkspace клавиатуты возбуждает событие double.
мышиные | клавиатурные | |
левая клавиша | правая клавиша | |
click, double | ins, del, любая буква |
Клавиша space (которая сама по себе не вызывает событие) осуществляет drag-and-drop объекта под курсором мыши и посылает две команды: первое нажатие - drag (затем движение курсора клавишами-стрелками), второе нажатие - drop, после второго нажатия подаются команды "drag" и "drop" соответствующим объектам.
Меню для объекта выглядит так (to_r5, to_r4, to_r3, to_r2, to_r1 - это пользовательские события)
Если Объект, изменяющий свой стиль, расположен внутри тега form
,
то браузер отправляет сэмент obj
,
соответствующий этому объекту
(значение атрибута name
объекта присваивается
серибуту name
.
Происхождение обозначений двух других серибутов:
os = old style, ns = new style).
Например, одинарный щелчок на реплике класса "r1" приводит к формированию такого сэмента
<obj name=A event=click os=r1 ns=r2> |
Форма отправляется после изменения стиля объекта немедленно, без нажатия на кнопку "submit"
input
type
=submit>Цвета (и только цвета) могут двигаться плавно. В случаях, когда необходимо, чтобы цвет изменялся не скачком, а плавно, в течение некоторого промежутка времени, используется свойство color-time, который определяет за сколько секунд должно произойти изменение.
тег | атрибут | список возможных значений |
link |
type |
transition |
любой | menu | id of "menu" |
name |
любой текст |
тег | свойство | значение по умолчанию | список возможных значений |
любой | autosubmit | no | yes, no |
color-time | 0 |
тег | стиль |
любой | default |
<obj name= event= os= ns= > |