Events.js

141 lines | 6.365 kB Blame History Raw Download
//  Функция обработчик движения слайдера
function SliderOnFinishMoving(data) {   
    CurrentMinYear = data.min;
    CurrentMaxYear = data.max;
    console.log(CurrentMinYear + " " + CurrentMaxYear);
    GetAllPoints(CurrentMinYear, CurrentMaxYear);
}

//  Заполнение массивов из исходного (response.data)
//  В соответствии с параметрами поселения
function FillDataArrays(fromData) {
    Collections.All = new Array();
    Collections.SettlementTypes = new Array();
    Collections.Regions = new Array();
    Collections.Zoom_8 = new Array();
    Collections.Zoom_9 = new Array();
    Collections.Zoom_10 = new Array();
    Collections.Zoom_11 = new Array();
    Collections.Zoom_12 = new Array();
    Collections.Zoom_13 = new Array();
    Collections.Zoom_14 = new Array();
    Collections.Zoom_15 = new Array();
    Collections.Zoom_16 = new Array();
    Collections.Zoom_17 = new Array();
    Collections.Zoom_18 = new Array();
    Collections.Zoom_19 = new Array();
    Collections.Names = new Array();

    Collections.Names = fromData.arrayNameSettlements;
    Collections.SettlementTypes = fromData.arrayNameTypes;
    Collections.Regions = fromData.arrayNameRegions;

    console.log(fromData.arraySettlements.length);

    fromData.arraySettlements.forEach(function (element)
    {
        //Collections.All.push(element); //   В массив All идут все данные
        var pop = Number.parseInt(element.Population);  //  Получить числовое представления для сравнения с ключом константы
        //  Для каждой константы (пара ключ-значение, где 
        //                                                ключ = имя массива, в который нужно добавить поселение
        //                                                значение = минимальное количество населения для попадания в массив 
        //                        )
        //  Выполнить сравнение количества населения и, если удовлетворяет условию, внести поселение в массив
        for (var key in fromData.ZoomLevel)
        {
            var value = fromData.ZoomLevel[key];
            if (pop > value)
                Collections[key].push(element);
        }          
    });

    AutoCompleteInit(Collections.Names);
}

function OnFindNameUsing(name)
{
    console.log(name);
}


//  Согласно текущим установленным фильтрам собрать нужный массив данных
function SelectDataFromArrays(isNeedLoadCollection = false, isNeedPlaceCollection = false) {
    var ResultDataArray = new Array();

    switch (CurrentZoom) {
        case 8: { ResultDataArray = Collections.Zoom_8; break; }
        case 9: { ResultDataArray = Collections.Zoom_9; break; }
        case 10: { ResultDataArray = Collections.Zoom_10; break; }
        case 11: { ResultDataArray = Collections.Zoom_11; break; }
        case 12: { ResultDataArray = Collections.Zoom_12; break; }
        case 13: { ResultDataArray = Collections.Zoom_13; break; }
        case 14: { ResultDataArray = Collections.Zoom_14; break; }
        case 15: { ResultDataArray = Collections.Zoom_15; break; }
        case 16: { ResultDataArray = Collections.Zoom_16; break; }
        case 17: { ResultDataArray = Collections.Zoom_17; break; }
        case 18: { ResultDataArray = Collections.Zoom_18; break; }
        case 19: { ResultDataArray = Collections.Zoom_19; break; }
        default: ResultDataArray = new Array()/*Collections.All*/;
    }   

    if (isNeedLoadCollection)
        LoadCollection(ResultDataArray, isNeedPlaceCollection);
    return ResultDataArray;
}

//  Функция заполнения Яндекс-коллекций Яндекс-объектами из JSON массива
function LoadCollection(fromData, bool = false)
{    
    //  Очистка коллекции от старых элементов. Параметры остаются прежними
    CollectionVisible.removeAll(); 
    fromData.forEach(function (element)
    {
        CollectionVisible.add(CreateYandexPlacemark(element)); //  Добавление
    });
    if (bool)
        PlaceFromCollection();
}

//  Функция создания Яндекс-объекта из одного элемента JSON массива
function CreateYandexPlacemark(fromElement) {
    var coord = fromElement.Position.split(' ');
    var placemark = new ymaps.Placemark([coord[0], coord[1]],
        {
            iconContent: fromElement.Title,   //  Содержимое названия
            hintContent: fromElement.Position//  Содержимое подписи при наведении
        }
    );

    //Добавить свойство - Имя поселения
    placemark.options.set('Name', fromElement.Title);
    placemark.options.set('URL', fromElement.URL);

    //  Переопределяем стадартный обработчик нажатия
    placemark.events.add('click', function (e) {
        e.preventDefault(); //  Запрещаем стандартный обработчик

        var targetName = e.get('target').options.get('Name');
        var targetURL = e.get('target').options.get('URL');

        //  Вызов запроса на получение данных о поселении
        GetInfoAboutSettlement(targetURL, PrintInfoAboutSettlement);

        //  Показать боковую панель
        if ($('#sidebar, #content').hasClass('active')) {
            //  Панель скрыта. Должна выехать
            $('#sidebar, #content').removeClass('active');
            $('.collapse.in').toggleClass('in');
            $('a[aria-expanded=true]').attr('aria-expanded', 'false');
        }
        else
            //  Панель есть. Выбор, нужно ли её скрывать
            if (targetName == document.getElementById('sidebar-header').getElementsByTagName('*')[0].innerHTML) {
                $('#sidebar, #content').addClass('active');
                $('.collapse.in').toggleClass('in');
                $('a[aria-expanded=true]').attr('aria-expanded', 'false');
            }


    });
    return placemark;
}