Skip to content

Commit

Permalink
Merge pull request #11 from Janealter/correction1
Browse files Browse the repository at this point in the history
Корректировка проекта №1
  • Loading branch information
Spearance authored Dec 25, 2017
2 parents 0d35920 + 3001661 commit 95c5269
Show file tree
Hide file tree
Showing 10 changed files with 127 additions and 137 deletions.
6 changes: 3 additions & 3 deletions js/backend.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
};

// Инициализирует объект XMLHttpRequest
var initXhr = function (onLoad, onError) {
var initializeXhr = function (onLoad, onError) {
var xhr = new XMLHttpRequest();
xhr.responseType = RESPONSE_TYPE;

Expand All @@ -38,14 +38,14 @@
window.backend = {
// Скачивает данные с сервера
load: function (url, onLoad, onError) {
var xhr = initXhr(onLoad, onError);
var xhr = initializeXhr(onLoad, onError);

xhr.open('GET', url);
xhr.send();
},
// Загружает данные на сервер
save: function (url, data, onLoad, onError) {
var xhr = initXhr(onLoad, onError);
var xhr = initializeXhr(onLoad, onError);

xhr.open('POST', url);
xhr.send(data);
Expand Down
22 changes: 11 additions & 11 deletions js/card.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

(function () {
window.card = {
// Функция генерации фрагмента разметки с объявлением
generateAdFragment: function (ad) {
// Функция генерации элемента разметки с объявлением
generateAdElement: function (ad) {
var HOUSING_TYPES = {
'flat': {
'ru': 'Квартира'
Expand All @@ -16,20 +16,20 @@
}
};
// Создаем фрагмент объявления, клонируя шаблон
var adFragment = document.querySelector('template').content.cloneNode(true);
var adElement = document.querySelector('template').content.cloneNode(true);
// Удаляем из объявления лишний элемент
adFragment.removeChild(adFragment.querySelector('.map__pin'));
// Создаем ссылки на нужные нам объекты внутри adFragment
var title = adFragment.querySelector('h3');
var pBlocks = adFragment.querySelectorAll('p');
adElement.removeChild(adElement.querySelector('.map__pin'));
// Создаем ссылки на нужные нам объекты внутри adElement
var title = adElement.querySelector('h3');
var pBlocks = adElement.querySelectorAll('p');
var address = pBlocks[0].firstElementChild;
var price = pBlocks[1];
var type = adFragment.querySelector('h4');
var type = adElement.querySelector('h4');
var roomCount = pBlocks[2];
var checkinCheckout = pBlocks[3];
var features = adFragment.querySelector('.popup__features');
var features = adElement.querySelector('.popup__features');
var description = pBlocks[4];
var avatar = adFragment.querySelector('img');
var avatar = adElement.querySelector('img');
// Изменяем данные
title.textContent = ad.offer.title;
address.textContent = ad.offer.address;
Expand All @@ -45,7 +45,7 @@
});
description.textContent = ad.offer.description;
avatar.src = ad.author.avatar;
return adFragment;
return adElement;
}
};
})();
8 changes: 4 additions & 4 deletions js/data.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@
var loadAdsArray = function () {

var onLoad = function (response) {
window.data.adsArrayOrig = response;
window.data.adsArrayOriginal = response;
// Подготавливаем основной массив (в начале работы он такой же, как и оригинальный массив)
window.data.adsArray = window.data.adsArrayOrig;
window.data.adsArray = window.data.adsArrayOriginal;
// Добавялем обработчик события mousedown для Map Pin Main
window.pin.addMapPinMainListener();
window.pin.addListener();
};

window.backend.load(LOAD_URL, onLoad, window.util.onBackendError);
Expand All @@ -23,7 +23,7 @@

window.data = {
// Оригинальный массив с объявлениями, загруженный с сервера, в ходе работы не изменяется
adsArrayOrig: null,
adsArrayOriginal: null,
// Основной массив, с которым работает сайт, изменяется в ходе работы
adsArray: null
};
Expand Down
23 changes: 11 additions & 12 deletions js/filter.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,31 +20,31 @@
var checkBoxes = [
{
name: 'wifi',
node: document.querySelector('#filter-wifi')
element: document.querySelector('#filter-wifi')
},
{
name: 'dishwasher',
node: document.querySelector('#filter-dishwasher')
element: document.querySelector('#filter-dishwasher')
},
{
name: 'parking',
node: document.querySelector('#filter-parking')
element: document.querySelector('#filter-parking')
},
{
name: 'washer',
node: document.querySelector('#filter-washer')
element: document.querySelector('#filter-washer')
},
{
name: 'elevator',
node: document.querySelector('#filter-elevator')
element: document.querySelector('#filter-elevator')
},
{
name: 'conditioner',
node: document.querySelector('#filter-conditioner')
element: document.querySelector('#filter-conditioner')
}
];

var adsArrayFiltered = window.data.adsArrayOrig.filter(function (ad) {
var adsArrayFiltered = window.data.adsArrayOriginal.filter(function (ad) {
if (selects.type.value !== 'any' && ad.offer.type !== selects.type.value) {
return false;
}
Expand Down Expand Up @@ -73,14 +73,13 @@
if (selects.guests.value !== 'any' && ad.offer.guests.toString() !== selects.guests.value) {
return false;
}
var checkBoxesFilterSuccess = true;
checkBoxes.every(function (checkBox) {
if (checkBox.node.checked && ad.offer.features.indexOf(checkBox.name) === -1) {
checkBoxesFilterSuccess = false;
return false;
var checkBoxesFilterSuccess = checkBoxes.every(function (checkBox) {
if (checkBox.element.checked) {
return ad.offer.features.indexOf(checkBox.name) !== -1;
}
return true;
});

return checkBoxesFilterSuccess;
});

Expand Down
16 changes: 8 additions & 8 deletions js/form.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
var addressInput = notice.querySelector('#address');

// Добавляет двухстороннюю синхронизацию полей Время заезда и выезда
var addTimeInTimeOutSync = function () {
var addTimeInTimeOutSynchronization = function () {
var timeInSelect = notice.querySelector('#timein');
var timeOutSelect = notice.querySelector('#timeout');
var timeInValues = window.util.getOptionsValuesArray(timeInSelect);
Expand All @@ -45,7 +45,7 @@
};

// Добавляет одностороннюю синхронизацию поля Цена за ночь с полем Тип жилья
var addPriceInputSync = function () {
var addPriceInputSynchronization = function () {
var typeSelect = notice.querySelector('#type');
var priceInput = notice.querySelector('#price');
var typeValues = Object.keys(TYPE_PRICES);
Expand All @@ -57,7 +57,7 @@
};

// Добавляет одностороннюю синхронизацию поля Кол-во комнат с полем Кол-во мест
var addCapacitySelectSync = function () {
var addCapacitySelectSynchronization = function () {
// Клонируем capacitySelect в начальном состоянии
var capacitySelectOrig = capacitySelect.cloneNode(true);
// Задаем начальные опции для capacitySelect
Expand All @@ -82,8 +82,8 @@
var addNoticeFormListeners = function () {
var noticeForm = notice.querySelector('.notice__form');

noticeForm.addEventListener('submit', function (event) {
event.preventDefault();
noticeForm.addEventListener('submit', function (evt) {
evt.preventDefault();

var onLoad = function () {
// Убираем красные рамки у всех элементов
Expand All @@ -105,9 +105,9 @@
};

// Добавляем все обработчики событий и синхронизацию полей для формы
addTimeInTimeOutSync();
addPriceInputSync();
addCapacitySelectSync();
addTimeInTimeOutSynchronization();
addPriceInputSynchronization();
addCapacitySelectSynchronization();
addCheckedInputsListeners();
addNoticeFormListeners();

Expand Down
77 changes: 39 additions & 38 deletions js/map.js
Original file line number Diff line number Diff line change
@@ -1,108 +1,109 @@
'use strict';

(function () {
var MAP_PINS_LIMIT = 5;
var MAP_PIN_CURSOR_HEIGHT = 18;
var PINS_LIMIT = 5;
var PIN_CURSOR_HEIGHT = 18;
var BUTTON_TAB_INDEX = 0;

// Получаем секцию карты
var mapSection = document.querySelector('.map');
var mapElement = document.querySelector('.map');

// Функция генерации фрагмента разметки с метками на карте
var generateMapPinsFragment = function (adsArray) {
// Функция генерации элемента разметки с метками на карте
var generatePinsElement = function (adsArray) {
var mapPinTemplate = document.querySelector('template').content.cloneNode(true);
// Удаляем из шаблона лишний блок
mapPinTemplate.removeChild(mapPinTemplate.querySelector('.map__card.popup'));
var fragment = document.createDocumentFragment();
var element = document.createDocumentFragment();
adsArray.every(function (ad, i) {
var mapPinElement = mapPinTemplate.cloneNode(true);
var button = mapPinElement.querySelector('button');
var img = mapPinElement.querySelector('img');
button.id = i;
button.tabIndex = 0;
button.tabIndex = BUTTON_TAB_INDEX;
button.style.left = (ad.location.x - img.width / 2) + 'px';
button.style.top = (ad.location.y - img.height + MAP_PIN_CURSOR_HEIGHT) + 'px';
button.style.top = (ad.location.y - img.height + PIN_CURSOR_HEIGHT) + 'px';
img.src = ad.author.avatar;
fragment.appendChild(mapPinElement);
return ++i < MAP_PINS_LIMIT;
element.appendChild(mapPinElement);
return ++i < PINS_LIMIT;
});
return fragment;
return element;
};

// Добавляет метки на карту
var addMapPins = function () {
var addPins = function () {
// Удаляем старые, если они есть
removeMapPins();
mapSection.querySelector('.map__pins').appendChild(generateMapPinsFragment(window.data.adsArray));
removePins();
mapElement.querySelector('.map__pins').appendChild(generatePinsElement(window.data.adsArray));
};

// Удаляем метки
var removeMapPins = function () {
var removePins = function () {
// Закрываем карточку объявления
window.showCard.closeCard();
var mapPins = mapSection.querySelectorAll('.map__pin');
window.showCard.close();
var mapPins = mapElement.querySelectorAll('.map__pin');
[].forEach.call(mapPins, function (mapPin) {
if (!mapPin.classList.contains('map__pin--main')) {
mapSection.children[0].removeChild(mapPin);
mapElement.children[0].removeChild(mapPin);
}
});
};

// Обработчик события при клике на любой Map Pin
var onMapPinClick = function (event) {
var onPinClick = function (evt) {
// Выполняется, если произведен клик по любой кнопке Map Pin, кроме Map Pin Main
if (event.target.parentElement.classList.contains('map__pin') && !event.target.parentElement.classList.contains('map__pin--main')) {
activateMapPin(event.target.parentElement);
if (evt.target.parentElement.classList.contains('map__pin') && !evt.target.parentElement.classList.contains('map__pin--main')) {
activatePin(evt.target.parentElement);
}
};

// Обработчик события при нажатии Enter на элементе popup__close
var onMapPinEnterPress = function (event) {
var onPinEnterPress = function (evt) {
// Выполняется, если произведен клик по любой кнопке Map Pin, кроме Map Pin Main
if (event.target.classList.contains('map__pin') && !event.target.classList.contains('map__pin--main') && event.keyCode === window.util.ENTER_KEYCODE) {
activateMapPin(event.target);
if (evt.target.classList.contains('map__pin') && !evt.target.classList.contains('map__pin--main') && evt.keyCode === window.util.ENTER_KEYCODE) {
activatePin(evt.target);
}
};

// Обработчик собития при изменении фильтра
var onFilterChange = function () {
window.debounce(function () {
window.data.adsArray = window.filter.getAdsArrayFiltered();
addMapPins();
addPins();
});
};

// Добавляет подсветку Map Pin, показывает объявление
var activateMapPin = function (mapPin) {
window.showCard.openCard(mapPin.id);
var activatePin = function (mapPin) {
window.showCard.open(mapPin.id);
mapPin.classList.add('map__pin--active');
};

// Добавляет обработчики событий на Map Pins
var addMapPinsListeners = function () {
var mapPins = mapSection.querySelector('.map__pins');
mapPins.addEventListener('click', onMapPinClick);
mapPins.addEventListener('keydown', onMapPinEnterPress);
var addPinsListeners = function () {
var mapPins = mapElement.querySelector('.map__pins');
mapPins.addEventListener('click', onPinClick);
mapPins.addEventListener('keydown', onPinEnterPress);
};

// Добавляет обработчик события на фильтр
var addFiltersListener = function () {
var mapFiltersForm = mapSection.querySelector('.map__filters');
var mapFiltersForm = mapElement.querySelector('.map__filters');
mapFiltersForm.addEventListener('change', onFilterChange, true);
};

addMapPinsListeners();
addPinsListeners();
addFiltersListener();

window.map = {
mapSection: mapSection,
element: mapElement,
// Активирует рабочее состояние сайта
activateWorkState: function () {
// Получаем объект формы
var noticeForm = document.querySelector('.notice__form');
// Удаляем затемнение карты
mapSection.classList.remove('map--faded');
mapElement.classList.remove('map--faded');
// Добавляем пины на карту
addMapPins();
addPins();
// Включаем форму
noticeForm.classList.remove('notice__form--disabled');
// Включаем поля формы
Expand All @@ -112,8 +113,8 @@
});
},
// Убирает подсветку Map Pin, если она есть
deactivateMapPin: function () {
var mapPinActive = mapSection.querySelector('.map__pin--active');
deactivatePin: function () {
var mapPinActive = mapElement.querySelector('.map__pin--active');
if (mapPinActive) {
mapPinActive.classList.remove('map__pin--active');
}
Expand Down
Loading

0 comments on commit 95c5269

Please sign in to comment.