diff --git a/public/js/app.js b/public/js/app.js new file mode 100644 index 0000000..a2b0d82 --- /dev/null +++ b/public/js/app.js @@ -0,0 +1,82 @@ +/* + * Приложение + */ + +// ------------ Система статусов приложения ------------------------------------ +var statusReady = 0; // Обычный режим. Просмотр точек, навигация по карте и прочее. +var statusHunting = 1; // Курсор-прицел. Поиск места для добавления точки. +var statusReHunting = 2; // КУрсор прицел. Переопределение координат точки. +var statusAdd = 3; // Открыто окно добавления точки - форма. +var statusEdit = 4; // Открыто окно редактирования точки. В нём информация о существующей точке, включая ID. +var statusSendingToServer = 5; // Отправлен запрос на сервер - ждём, не даём жать кнопку повторно, отвлекаем пользователя. + +var status = statusReady; +var statusPrev = statusReady; + +/** + * Устанавливает новое значение статуса. + * @returns {undefined} + */ +function setStatus(value) +{ + statusPrev = status; + status = value; +} + +/** + * Меняет значение статуса на предыдущее. + * @returns {undefined} + */ +function resetStatus() +{ + tmp = status; + status = statusPrev; + statusPrev = tmp; +} + +// -------------------------------- Libs --------------------------------------- + +/** + * Возвращает GET параметр + * @param string name + * @returns string + */ +function getURLParameter(name) { + return decodeURI((RegExp(name + '=' + '(.+?)(&|$)').exec(location.search) || [, null])[1]); +} + +// ----------------- Работа с правым блоком (BOX) ------------------------------ + +function openBox(type, keepOpen) +{ + newTab = $('#box'+type).css('display') == 'none'; + keepOpen = keepOpen == true; + + if (!newTab && !keepOpen) + { + return closeBox(); + } + + $('div','#control').removeClass('active'); + $('#box').children('div').css('display', 'none'); + + $('.boxButton'+type).addClass('active'); + $('#box'+type).css('display', 'block'); + $('body').addClass('openBox'); +} + +function closeBox() +{ + $('body').removeClass('openBox'); + $('div','#control').removeClass('active'); + $('#box').children('div').css('display', 'none'); + + return true; +} + +function showImage(src, name) +{ + $('#imageModalLabel').text(name); + $('#imageModalImg').attr('src', src); + $('#imageModal').modal('show'); +} diff --git a/public/js/route.js b/public/js/route.js new file mode 100644 index 0000000..358ec63 --- /dev/null +++ b/public/js/route.js @@ -0,0 +1,154 @@ +/* + * Набор функций для работы с маршрктами. + */ + +/** + * Строит маршрут по выбранным точкам. + * @returns {undefined} + */ +function buildRoute() +{ + wayPoints = Array(); + if (route) + myMap.geoObjects.remove(route); + + $('#wayPoints div').each(function(i, el) + { + wayPoints.push(points[$(el).attr('pointId')].geometry.getCoordinates()); + }); + + ymaps.route(wayPoints, { + mapStateAutoApply: true + }).then(function(newRoute) { + route = newRoute; + route.options.set({ + // в балуне выводим только информацию о времени движения с учетом пробок + balloonContenBodyLayout: ymaps.templateLayoutFactory.createClass('$[properties.humanJamsTime]'), + strokeColor: '9000ffff', + opacity: 0.9 + }); + + myMap.geoObjects.add(route); + distance = Math.round(route.getLength() / 1000); + $('#routeDistance').text(distance + ' км.'); + routeToURL(); + }); +} + +/** + * Сохраняет маршрут на сервере. + * @returns {undefined} + */ +function saveRoute() +{ + wayPoints = Array(); + name = prompt('Как назвать маршрут?', 'Мой маршрут'); + + $('#wayPoints div').each(function(i, el) + { + wayPoints.push($(el).attr('pointId')); + }); + + if (name && name != '') + $.ajax({ + type: "POST", + url: "/json/saveroute/", + data: { + name: name, + points: wayPoints + }, + success: function(data) { + console.log(data); + }, + error: function(data) { + console.log(data); + } + }); +} + +/** + * Формирует список точек маршрута из JSON.ы + * @param {JSON} data + * @returns {Boolean} + */ +function loadRouteJSON(data) +{ + $('#wayPoints').text(''); + + response = JSON.parse(data); + for (var k in response) + { + addToRoute(response[k]); + } + + return true; +} + +/** + * Подгружает маршрут с заданныи ID с сервера. + * @param {Integer} id + * @returns {undefined} + */ +function loadRoute(id) +{ + $('#myRoutesWindow').hide(200); + + $.ajax({ + url: "/json/route/id/" + id, + success: function(data) + { + loadRouteJSON(data) + buildRoute(); + } + }); +} + +/** + * Удаляет маршрут с заданным ID с сервера. + * @param {Integer} id + * @returns {undefined} + */ +function deleteRoute(id) +{ + $.ajax({ + url: "/json/deleteroute/id/" + id, + success: function(data) + { + console.log('Route '+id+' was removed.'); + } + }); +} + +/** + * Добавляет точку с маршрут (в список выбранных точек) + * @param {Integer} id + * @returns {Boolean} + */ +function addToRoute(id) +{ + console.log(points[id]); + $('#wayPoints').append('