Перечень статей   choose language


Объект имеет несколько состояний с разными стилями



Соглашения

тегатрибутсвойствостиль
новые html-терминыlinealingpointdefault
значения новых html-терминовsideromb
старые html-терминыtdidlist
значения старых html-терминовcircle
коммуникационный xmlsoundsyncpower
значения коммуникационного xmlnouser
клавиатурные и мышиные командыenter

КЛАСС равно СОСТОЯНИЕ

Изменения в документе представляют собой конечный автомат. Конечный автомат более удобно задать как некую матрицу, вместо того, чтобы писать функции JavaScript, выполняющие эти изменения на экране. Рассмотрим, как может быть записан конечный автомат для изменения стиля объектов в зависимости от нажатия пользователем тех или иных клавиш клавиатуры и кнопок мыши.

Пусть, например, имеется форум (пусть реплики будут элементами списка <li></li>).

В книжках делают закладки и пометки, но как сделать пометки здесь? Если вы проанализировали реплики и проранжировали их в 5 уровней (важно, задуматься, обычное, бестолково, вредно), то было бы удобно, чтобы "важно" были написаны красным, "задуматься" - оранжевым, "обычное" - зеленым, "бестолково" - черным, "вредно" - бледно-серым (серебряным).

Как же подобные изменения произвести в окне браузера и отправить на сервер? Если расположить рядом с каждой репликой набор радио-кнопок (кругленьких, с черной точечкой внутри), то это захламляет страницу, не нравится пользователю.

Предлагаю кликать мышкой непосредственно на репликах: щелчок - поднять статус реплики на один уровень, двойной щелчок - опустить на один.

Transition Sheet

Определим в CSS-файле стили для наших реплик. Эти стили могут иметь разные цвета, размеры шрифта и т.д.

li.r5 { color: red }
li.r4 { color: orange }
li.r3 { color: green }
li.r2 { color: black }
li.r1 { color: silver }

Одиночный щелчек левой клавишей мыши подает команду enter, двойной щелчек левой клавишей мыши подает команду bksp. Таблица переходов выглядит так

r1 enter r2
r2 enter r3
r3 enter r4
r4 enter r5
r5 enter r1 /* последовательность изменений замкнута в кольцо */

r5 bksp r4
r4 bksp r3
r3 bksp r2
r2 bksp r1
r1 bksp r5 /* последовательность изменений замкнута в кольцо */

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

Формат

Строка таблицы состоит из следующих полей (колонок)

Поля отделены друг от друга пробелом. Каждое поле может состоять из нескольких слов, перечисленных через запятую. Слова одного поля следуют в произвольном порядке.

Перечисление состояний

Возможно указание нескольких состояний через запятую.

r1,r3 enter r2

Произвольное состояние обозначается знаком "запятая".

, enter r2

Состояния по умолчанию

Стиль, который использует браузер по умолчанию (когда отсутствует тег class) для не выделенного объекта называется default.

Например, переход из default-состояния выглядит так

default enter r2
а переход в default-состояние - так
r2 enter default

Незаполненное поле "новое состояние" изменяет прежний стиль на стиль default.

r1 enter

Перечисление команд

Возможно указание нескольких команд через запятую.

r1 enter,bksp r2

Упаковка

Запишем все таблицы соответствия в отдельный файл, например, "a.txt", и добавим внутрь тега head следующий тег

<link src="./a.txt" type="transition">

Вложенность

Пусть один тег (А) вложен в другой (В), в Transition Sheet определен переход для объекта "В", и пользователь послан команду (например, click или double click) на вложенном объекте (А). Если в Transition Sheet переход для объекта "A"

Дополнительное свойство: движение цвета

Цвета (и только цвета) могут двигаться плавно.

В случаях, когда необходимо, чтобы цвет изменялся не скачком, а плавно, в течение некоторого промежутка времени, используется свойство time, который определяет за сколько секунд должно произойти изменение.

li.r5 {
 color: red;
 color-time: 1.5;
}

Форма отправляет

Теги <li> могут быть расположены внутри тега form, при этом их атрибуты name должны быть определены (в примере ниже - в значение A). Одинарный или двойной щелчек мышкой приводит к формированию с следующего XML-текста (далее такие xml-теги будем называть действиями).

<obj name=A cmd=cmd_name os=old_class_name ns=new_class_name>
Например, одинарный щелчок на реплике класса "r1" приводит к формированию такого текста
<obj name=A cmd=enter os=r1 ns=r2>
Происхождение обозначений: os = old style (state), ns = new style (state), cmd =
command.

Момент отправки

Форма отправляется немедленно, без нажатия на кнопку "submit" в одном из двух случаев

В остальных случаях форма отправляется по нажатию на кнопку "submit".

В любом случае отправляются результаты сразу всех операций мышью, выполненных с момента последней отправки.

Для того, чтобы еще до отправки по нажатию кнопки "submit" пользователь знал в каком состоянии находятся объекты формы, новые состояния объектов отображаются новым стилем.

Появление нового окна

Если для нового состояния в css-файле не найден стиль, то смысл щелканья мышью другой: это выбор некоторой операции "operation_name". Немедленно отправляется XML-текст

<obj name=A cmd=cmd_name os=old_class_name ns=operation_name>
Немедленная отправка необходима, например, чтобы добавить новые ячейки в таблицу в программе рисования схемы базы данных.

Команды

Использование

Любая команда (или комбинация команд) записывается в поле "команда" в Transition Sheet. Если команд (или комбинаций) несколько, то они перечисляются в этом поле через запятую.

r1 enter,bksp r2
Комбинация команд записывается путем перечисления команд через тире.
r1 a-b,c-d r2
Все команды записываются строчными буквами.

Если команда вызвана на невыделенном объекте, то она выполняется только одним этим объектом. Если команда вызвана на одном из выделенных объектов, то она выполняется всеми выделенными объектами (конечный стиль каждого объекта зависит от его начального стиля).

В том случае, если для конечного состояния не определен стиль в css-файле, то конечное состояние интерпретируется как название операции, и браузер немедленно отправляет все накопившиеся к этому моменту действия.

Клавиатурный курсор отменяется - существует только мышиный курсор.

Систематика

Команды бывают зарезервированные браузером и придуманные пользователем (например он может придумать команды cool, fine). Зарезервированные команды могут быть вызваны как непосредственно клавиатурой или мышью, так и из меню, пользовательские команды могут быть вызваны только из меню.

Можно использовать комбинация зарезервированных команд.


Зарезервированные команды
мышиные клавиатурные
левая клавиша правая клавиша
enter, bksp, drag, drop, ins   enter, bksp, любая буква

Мышиные команды:


Клавиатурные команды - это одновременное нажатие одной или нескольких следующих клавиш:


Все комбинации с функциональными клавишами ctrl и alt (не являющимися командами) предназначены не для программиста документа, а для управления браузером. Такое разделение позволяет создавать html-документы, которые будут способны работать в будущих версиях браузера.

Предопределенные последствия

Команда enter, вызванная для некоторых объектов, дает предопределенные последствия.

<input type=submit>отправить форму
aперейти по ссылке

Если пользователь вывозет bksp во время загрузки документа, то остановится загрузка, а если во время выполнения модуля - остановится выполнение модуля.

Клавиша space (не являющаяся командой) осуществляет drag-and-drop объекта под курсором мыши и посылает две команды: первое нажатие - drag (затем движение курсора клавишами-стрелками), второе нажатие - drop, после второго нажатия подаются команды "drag" и "drop" соответствующим объектам.

Соглашение

Команда h обычно используется для вызова справки для объекта под курсором мыши (h=help).



Меню для объекта

Создание

Воспользуемся конструкциями <select><optgroup><option>, <input type=radio>, <input type=checkbox>.

В атрибуте id тега <select> укажем название меню; в атрибуте value укажем название команды, которую должно применить к объекту

<select id="menu_name">
<option value="cmd_to_r5"> важно      </option>
<option value="cmd_to_r4"> задуматься </option>
<option value="cmd_to_r3"> обычное    </option>
<option value="cmd_to_r2"> бестолково </option>
<option value="cmd_to_r1"> вредно     </option>
</select>

Атрибут src со значением "site/~user/^service/path/filename" тега option указывает изображение, которое должно быть использовано в качестве маркера элементов выпадающего списка.

На меню распространяется действие css-файлов.

Указание в документе

Объект ссылается в атрибуте menu на необходимое ему меню, т.е.

<li menu="menu_name">    какой-то текст </li>

<body menu="menu_name2"> какой-то текст </body>

Упаковка

Запишем все меню в отдельный файл, например, "a.txt", и добавим внутрь тега head следующий тег

<link src="./a.htm" type="menu">

Вызов

Когда курсор между виджетами, то клавиша ctrl вызывает контекстное меню (меню для объекта под курсором мыши). Когда курсор в виджете, то эта клавиша вызывает меню для виджета.



Резюме

Команды
enter, bksp


Атрибуты
тег атрибут список возможных значений
link type transition, menu
любой menu id of input-select
<input type=select>
src site/~user/^service/path/filename


Свойства
тег свойство значение по умолчанию единицы измерения
любой time 0 sec


Стили
тег стиль
любой default


XML команды
<obj name= cmd= os= ns= >



html60author



Перечень статей   choose language


Используются технологии uCoz