173 lines
4.4 KiB
JavaScript
173 lines
4.4 KiB
JavaScript
/*
|
||
* Приложение
|
||
*/
|
||
|
||
// ------------ Система статусов приложения ------------------------------------
|
||
var statusReady = 0; // Обычный режим. Просмотр точек, навигация по карте и прочее.
|
||
var statusHunting = 1; // Курсор-прицел. Поиск места для добавления точки.
|
||
var statusReHunting = 2; // КУрсор прицел. Переопределение координат точки.
|
||
var statusAdd = 3; // Открыто окно добавления точки - форма.
|
||
var statusEdit = 4; // Открыто окно редактирования точки. В нём информация о существующей точке, включая ID.
|
||
var statusSendingToServer = 5; // Отправлен запрос на сервер - ждём, не даём жать кнопку повторно, отвлекаем пользователя.
|
||
var statusMovingInHistory = 6;
|
||
|
||
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(id)
|
||
{
|
||
point = pointsSources[id];
|
||
$('#imageModalLabel').text(point.name);
|
||
|
||
if (typeof(point.images) == 'object')
|
||
{
|
||
if( typeof($('.fotorama').data('fotorama')) != 'undefined' )
|
||
{
|
||
$('.fotorama').data('fotorama').destroy();
|
||
}
|
||
|
||
$('#imageModalImg').hide();
|
||
$('.fotorama').show();
|
||
|
||
photos = [];
|
||
point.images.forEach(function(entry) {
|
||
if (window.devicePixelRatio > 1) {
|
||
photos.push({img: '/photos/big/'+entry, thumb: '/photos/small/'+entry});
|
||
} else {
|
||
photos.push({img: '/photos/middle/'+entry, thumb: '/photos/small/'+entry});
|
||
}
|
||
});
|
||
|
||
$('.fotorama').fotorama({data: photos});
|
||
} else
|
||
{
|
||
$('#imageModalImg').show();
|
||
$('.fotorama').hide();
|
||
$('#imageModalImg').attr('src', point.img);
|
||
}
|
||
|
||
$('#imageModal').modal('show');
|
||
}
|
||
|
||
function addRemoveFavorite(id)
|
||
{
|
||
if (user != '0')
|
||
{
|
||
$.ajax({
|
||
url: "/json/addRemoveFavorites/id/" + id,
|
||
success: function(data) {
|
||
if (data){
|
||
// Тут переключалку классов звёздочки
|
||
$('#myFavoritesButton').toggleClass('glyphicon glyphicon-star-empty').toggleClass('glyphicon glyphicon-star');
|
||
}
|
||
}});
|
||
} else {
|
||
$('#loginModal').modal('show');
|
||
}
|
||
}
|
||
|
||
function addRemoveLike(id)
|
||
{
|
||
if (user != '0')
|
||
{
|
||
$.ajax({
|
||
url: "/json/addRemoveLike/id/" + id,
|
||
success: function(data) {
|
||
if (data){
|
||
$('#myLikesButton').toggleClass('glyphicon-thumbs-up').toggleClass('glyphicon-ok');
|
||
}
|
||
}});
|
||
} else {
|
||
$('#loginModal').modal('show');
|
||
}
|
||
}
|
||
|
||
window.addEventListener('popstate', function(e)
|
||
{
|
||
if (typeof(e.state) == 'object' && e.state != null)
|
||
{
|
||
setStatus(statusMovingInHistory);
|
||
if (e.state.hasOwnProperty('pointId'))
|
||
{
|
||
points[e.state.pointId].openPopup();
|
||
} else
|
||
if (e.state.hasOwnProperty('zoom'))
|
||
{
|
||
lat = e.state.lat;
|
||
lng = e.state.lng;
|
||
zoom = e.state.zoom;
|
||
|
||
myMap.setView([lat, lng], zoom);
|
||
} else
|
||
if (e.state.hasOwnProperty('route'))
|
||
{
|
||
loadRouteJSON(e.state.route);
|
||
}
|
||
}
|
||
}, false);
|
||
|
||
function getTime() {
|
||
return Math.floor(Date.now() / 1000);
|
||
}
|