Дополнение к прошлому коммиту
This commit is contained in:
parent
43b5eccbb4
commit
d9134fae03
|
|
@ -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');
|
||||||
|
}
|
||||||
|
|
@ -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()">×</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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Loading…
Reference in New Issue