Дополнение к прошлому коммиту

This commit is contained in:
Krivchikov Dmitry 2014-07-01 17:06:36 +04:00
parent 43b5eccbb4
commit d9134fae03
2 changed files with 236 additions and 0 deletions

82
public/js/app.js Normal file
View File

@ -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');
}

154
public/js/route.js Normal file
View File

@ -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('<div pointid="' + id + '" class="wayPoint"><span onclick="$(this).parent().remove()">&times;</span> ' + points[id].options.title + '</div>');
myMap._popup._close();
openBox('Route', true);
return true;
}
/**
* Формирует URL в соответсвии с точками маршрута.
* @returns {Boolean}
*/
function routeToURL()
{
wayPoints = Array();
$('#wayPoints div').each(function(i, el)
{
wayPoints.push($(el).attr('pointId'));
});
history.pushState({}, document.title, "/?route=" + JSON.stringify(wayPoints));
return true;
}