тестирование - последние правки
(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();
}());