zubzizub
7/21/2015 - 8:48 AM

тестирование - последние правки

тестирование - последние правки

(function(){

    var app = {

        initialize: function(){
            this.setUpListeners();
        },

        setUpListeners: function(){
            $('.childrencat').on('click', app.queryAjax);
            $('.main__restaurantslist__buttons').on('click', app.showMore);
        },

        itemClass: '.main__restaurantslist__item',
        arr: [],
        staticurl: '',
        limit: 15,
//=====================================================================================================
        queryAjax: function(e) {
            e.preventDefault();
            var
                id = $(this).data('id'),
                parentid = $(this).data('parentid');

            $.ajax({
                url: '/category/index/active-category/' + parentid,
                type: 'post',
                data: {'id': id},
                success: function (data) {
                    var msg = data['msg'];
                    app.staticurl = data['www']['staticurl'];
                    app.getArray(msg);
                    var getArr = [];
                    getArr = app.arr.slice();

                    app.addChild(getArr, id, parentid);
                }
            });
        },
//================================================================================================================
        addChild: function(msg, id, parentid){
            if(msg){
                app.filterArray(msg, app.limit);
                //если выбирается пустая подкатегория
                if($.isEmptyObject(msg) && !$(app.itemClass).hasClass('childClass')){
                    return;
                }
                //если повторно выбирается подкатегория - она удаляется
                if($(app.itemClass).hasClass('category' + id)){
                    $('.category' + id).remove();
                    if($(app.itemClass).hasClass('childClass')) {
                        var i;
                        for (i = 0; i < app.arr.length; i++) {
                            if (app.arr[i]) {
                                if (app.arr[i]['subdata_categories'][0]['id'] == id) {
                                    delete app.arr[i];
                                }
                            }
                        }
                    }
                    app.showButton();
                    //если удаленная подкатегория была единственной, то подгужается категория
                    if(!$(app.itemClass).hasClass('childClass')) {
                        $(".for_del").load("/category/index/active-category/" + parentid + "?id="+ id + " .main__restaurantslist__item");
                        $('.main__restaurantslist__buttons').show();
                        return;
                    }else{
                        return;
                    }
                }
                //если еще не выведено ни одной подкатегории - копируем разметку в переменную и удаляем ее
                //if(!$(app.itemClass).hasClass('childClass')) {
                    var addHtml = $(app.itemClass);
                    addHtml.detach(); //удаляем элемент
                //}
                //вывод подкатегорий
                app.view(msg, id, addHtml);
                //получить массив
                //app.getArray(msg);
                //фильтрую список
               //app.FilterCategory(id, $(app.itemClass));
            }
            app.showButton();
        },
//================================================================================================================
        //вывод подкатегорий
        view: function(msg, id, addHtml){
            $.each(msg, function(item, val) {
                //Если еще не добавлена подкатегория, добавляем первый li из подкатегории с заведением, а затем клонируем его(после else)
                if (item == 0 && !$(app.itemClass).hasClass('childClass')) {
                    //проверка на дублирование заведения
                    if($(app.itemClass).hasClass('place' + val.id)){ return; }
                    //вытаскиваем разметку из переменной и оставляем только первый li списка
                    addHtml.appendTo('.for_del');
                    $(app.itemClass).slice(1).remove();

                    var
                        path = $(app.itemClass),
                        index = $(app.itemClass).index();

                    path.addClass('childClass'+ ' ' + 'child' + index+ ' ' + 'category' + id + ' ' + 'place' + val.id).attr('data-update',val.updated);
                    //добавление переменных из массива
                    app.addVariables(index, val);
//-------------------------------------------------------------------------------------------------------
                } else {
                    //проверка на дублирование заведения
                    //if($(app.itemClass).hasClass('place' + val.id)){return;}

                    var last = $('ul .main__restaurantslist__item:last-child'),
                        indexLast;
                    //клонирую li от последнего элемента
                    last.clone().insertAfter(last);
                    indexLast = $('ul .main__restaurantslist__item:last-child').index();
                    $('ul .main__restaurantslist__item:last-child').removeClass().addClass('childClass main__restaurantslist__item' + ' ' + 'child'+ indexLast + ' ' + 'category' + id + ' ' + 'place' + val.id).attr('data-update',val.updated);
                    //добавление переменных из массива
                    app.addVariables(indexLast, val);
                }
            });
        },
//================================================================================================================
        //сортировка заведений по дате создания во view
        FilterCategory: function(id, listitems) {
            var mylist = $('.for_del');
            listitems.sort(function(a, b) {
                var compA = Date.parse($(a).attr('data-update')),
                    compB = Date.parse($(b).attr('data-update'));
                return (compA < compB) ? -1 : (compA > compB) ? 1 : 0;
            });
            $.each(listitems, function (idx, itm) {
                mylist.append(itm);
            });


            $(app.itemClass).slice(app.limit).remove();
        },
//================================================================================================================
        //фильтр - сортировка массива по дате создания
        filterArray: function(msg, limit) {

            msg.sort(function(a, b) {
                var compA = Date.parse(a.updated),
                    compB = Date.parse(b.updated);
                return (compA < compB) ? -1 : (compA > compB) ? 1 : 0;
            });

            msg.splice(limit);

            return msg;

        },
//================================================================================================================
        //получить массив
        getArray: function(msg){
            var i;
            for(i=0; i<msg.length; i++){
                app.arr.push(msg[i]); // в массив попадают только заведения
            }
        },
//================================================================================================================
        //раскрытие списка заведений при нажатии show more
        showMore: function(e){
            //var itemElem = $(app.itemClass);
            if (itemElem.hasClass('childClass')) {
                e.preventDefault();
            }
            app.addChild(app.arr,null,null);
            //var
            //    sumCategory = $('.childClass').length,
            //    from = sumCategory-countHidden,
            //    limit = 15,
            //    up = from + limit;
            //
            //itemElem.slice(from, up).fadeIn();//раскрывается список от from до up

        },
//================================================================================================================
        //вывод переменных (время открытия-закрытия, название, кухня, адрес, цены) в заведении
        addVariables: function(addIndex, val){
            var address = val.city_name + '<br>' + val.street + '<br>' + val.phone;
            //если нет картинки
            if(!$.isEmptyObject(val.main_pic)){
                var img = "http://static.followfoxy.me/"+val.main_pic;
            }else{
                var img  = app.staticurl + "/img/wingsta.jpg";
            }
            //время
            if(!$.isEmptyObject(val.from) && !$.isEmptyObject(val.to)){
                $('.child'+ addIndex + ' ' + '.main__restaurantslist__info__time').text('frome '+ val.from + ' '+'to '+val.to);
            }else{
                $('.child'+ addIndex + ' ' + '.main__restaurantslist__info__time').text('');
            }

            $('.child'+ addIndex + ' ' + '.main__restaurantslist__title').text(val.title);
            $('.child'+ addIndex + ' ' + '.covered-link>img').attr({'src': img,'width': '100%','height':'100%'});
            $('.child'+ addIndex + ' ' + '.main__restaurantslist__address').html(address);

            if(val.subdata_attributes !== null) {
                //выводим кухни
                $('.child'+ addIndex + ' ' + '.main__restaurantslist__info__kitchen').html('');
                if (val.subdata_attributes.cuisine !== null) {
                    if (typeof(val.subdata_attributes.cuisine) != "undefined") {
                        var text = '';
                        $.each(val.subdata_attributes.cuisine['value'], function () {
                            text +=this + '<br>';
                            $('.child'+ addIndex + ' ' + '.main__restaurantslist__info__kitchen').html(text);
                        });
                    }

                }
                //выводим цены
                var moneyElem = $('.child'+ addIndex + ' ' + '.main__restaurantslist__info__money');
                moneyElem.html('');
                if (val.subdata_attributes.prices !== null) {
                    if (typeof(val.subdata_attributes.prices) != "undefined") {
                        if(val.subdata_attributes.prices['title']){
                            var price = val.subdata_attributes.prices['title'];
                        }
                        switch (val.subdata_attributes.prices['value']){
                            case '1': moneyElem.html([price + '<br>' + 'Very cheap']); break;
                            case '2':moneyElem.html([price + '<br>' + 'Cheap']); break;
                            case '3': moneyElem.html([price + '<br>' + 'Average prices']); break;
                            case '4': moneyElem.html([price + '<br>' + 'Expensive']);break;
                            case '5': moneyElem.html([price + '<br>' + 'High price level']); break;
                        }
                    }
                }
            }
        },
//================================================================================================================
        //показать-скрыть кнопку show-more
        showButton: function(){
            var sumCategory = $('.childClass').length;

            if (sumCategory < 15) {
                $('.main__restaurantslist__buttons').hide();
            } else {
                $('.main__restaurantslist__buttons').show();
            }
        }
    };

    app.initialize();

}());