Библиотека выполнена в виде модуля с точкой входа sked.
Лекции, школы и аудитории хранятся в виде объектов в массивах
lectures, schools и halls.
Расписание лекций также хранится в отдельном массиве events и состоит из объектов, содержащих:
дату, время, продолжительность, а также ссылки на объекты в массивах lectures, schools и halls.
Управление происходит через объекты lecture, school, hall и event.
Для event имеется возможность работать по принципу стека или создать несколько экземляров
с помощью конструкции: sked.newEvent('global_var_name');
После чего можно обращаться не к sked, а к global_var_name.
Добавив необходимые лекции, школы и аудитории их нужно прикрепить к event,
после чего можно записать объект event в массив events с помощью метода .save().
Такой подход даёт возможность хранить массивы в сериализованном виде, к примеру, в LocalStorage
и в дальнейшем заполнять их оттуда, а также отправлять их для синхронизации на сервер.
Пример использования можно увидеть на странице example.html
Также в примере добавлен вариант фильтрации из первого задания - для сравнения :)
<script src="path/to/sked.js"></script>Также, на страницу необходимо добавить два блока:
<div id="filters"></div> <div id="schedule"></div>Далее необходимо добавить нужные школы/аудитории/лекции.
sked.school.add('Название школы', Число_студентов);
sked.lecture.add('Название лекции', 'Имя лектора');
sked.hall.add('Название аудитории', Вместимость, 'Описание, н-р, где она находится');
sked.school.editTitle('Название школы' или id, 'Новое значение');
sked.school.editQuantity('Название школы' или id, Новое_значение);
sked.school.editDescription('Название школы' или id, 'Новое значение');
По аналогии со school, объекты hall и lecture имеют следующие методы:
sked.lecture.editTitle(search, value); sked.lecture.editSpeaker(search, value); sked.hall.editTitle(search, value); sked.hall.editCapacity(search, value); sked.hall.editDescription(search, value);* search - может быть как искомой строкой, так и числом, равным порядковому номеру объекта в массиве.
sked.school.render; // отобразить/обновить школы sked.event.render; // отобразить/обновить расписание sked.render(); // отобразить/обновить всё
sked.event.setLecture().<цепочка вызовов>.save();
var event = sked.event.setDate('1/1/16').setTime('10:00');
event.setDuration(1.5)
.setHall(1) /* Установим аудиторию */
.setSchool(1) /* Установим школу */
.setSchool(sked.school.editTitle(2,"ШМР")) /* Добавим ещё одну школу и сразу отредактируем её название */
.setLecture(sked.lecture.add("Новая лекция","Фамилия лектора")) /* Добавить лекцию и сразу привязать её к событию */
.save(); /* Сохраняем событие в расписание */
* Важно понимать, что переменная ссылается на конкретный объект sked и при создании второй переменной,
она всё равно будет указывать на тот же объект.
sked.newEvent('event_1'); // создаст новую глобальную переменную event_1
sked.newEvent('event_2'); // создаст новую глобальную переменную event_2
event_1.setHall(1); // по аналогии с одиночным созданием
event_2.setHall(2);
sked.event.done = id;
sked.filter();
sked.filter('13/12/2016', '15/12/2016'); // все лекции за выбранный интервал
sked.filter().school("Школа мобильного дизайна"); // все лекции для указанной школы
sked.filter('13/12/2016', '15/12/2016').school("Школа мобильной разработки"); // лекции для указанный школы за выбранный интервал
sked.filter('15/06/2016', '15/06/2016').hall(2); // все лекции в аудитории с индексом 2 за 15.06.2016
sked.debugging(true);
sked.school.show; sked.lecture.show; sked.hall.show; sked.event.show;