Скрипт выбора мест на схеме зала
Скрипт предназначен для отрисовки схемы мест (к примеру, http://tickets.championat.ru/order:154;place:20810), выбора мест и передачи данных на сервер. Данные передаются посредством AJAX.
Скрипту предоставляется виджет (
или любой другой) фиксированной высоты и произвольной ширины. Слева и справа необходимо отрисовать номера рядов. В центральной части отрисовывается схема в виде легко различимых прямоугольников с номерами мест.
В том случае, если один из размеров схемы превышает соответствующий размер виджета, необходимо отрисовать полосу прокрутки и дать возможностьпередвинуть отображаемую область. Иначе необходимо отцентрировать картинку.
Каждое место имеет одно из следующих состояний: неизвестно (''), свободно
('f'), забронировано мной ('m'), забронировано ('b'), продано ('s'). Каждое
состояние отмечается своим цветом.
Возможны следующие варианты выбора места:
-- щелчок по свободному месту выбирает его;
-- щелчок по номеру ряда выбирает все свободные места ряда;
-- выделение прямоугольной рамкой выбирает все места, имющие с рамкой хотя бы одну общую точку.
Повторный щелчок по месту снимает выделение. Щелчок по номеру ряда, в котором выбраны все доступные места, также снимает выделение со всех мест.
После каждого действия выбора скрипт отправляет сообщение на сервер.
Внизу скрипта необходимо поместить мини-карту, на которой маленькими, но
различимыми прямоугольниками отрисовать схему сектора в той же цветовой гамме с тем же смыслом. Рамка на мини-карте показывает изображаемую область. Щелчок по мини-карте смещает центр видимой части сектора в указанную точку.
Необходимы две версии скрипта. Облегченная версия просто изображает сектор и позволяет по нему перемещаться. Полнофункциональная версия реализует все вышеописанное.
2. Протоколы.
Для взамодействия с сектором необходимо использовать AJAX. Данные передаются в обе стороны в нотации JSON.
2.1. Запрос конфигурации сектора:
POST /ajax/sector--config/
Ответ приходит в виде словаря: { row-id: [ [seat-id, ''], ...], ... }.
row-id, seat-id --- целые числа.
2.2. Запрос информации о секторе:
POST /ajax/sector--info/
Ответ приходит в виде словаря: { row-id: [ [seat-id, status], ...], ... }.
row-id, seat-id --- целые числа, status --- одно из вышеописанных
состояний '', 'f', 'm', 'b', 's'.
2.3. Бронирование:
POST /ajax/book
Входные данные: список [ [row-id, seat-id], ... ].
Ответ приходит в виде словаря: { row-id: [ [seat-id, status], ...], ... }.
Смысл и типы переменных как в запросах выше.
Ответ содержит информацию только об отправленных местах.
2.4. Разбронирование:
POST /ajax/unbook
Входные и выходные данные см. в 2.3.