Skip to content

Commit

Permalink
Изменил связность полей Кол-во комнат и Кол-во мест, добавил вспомога…
Browse files Browse the repository at this point in the history
…тельную функцию setCapacitySelectOptions

Поменял перебор массивов циклом for на перебор массивов методом forEach везде, где это возможно
Поменял названия некотрых функций
  • Loading branch information
Janealter committed Dec 13, 2017
1 parent bb5af8f commit da6002e
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 40 deletions.
12 changes: 6 additions & 6 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -107,22 +107,22 @@ <h2 class="notice__title">Ваше объявление</h2>

<fieldset class="form__element form__element--wide" disabled>
<label for="address">Адрес</label>
<input id="address" name="address" type="text" required readonly>
<input id="address" name="address" type="text" value="x: 123, y: 456" required readonly>
</fieldset>

<fieldset class="form__element" disabled>
<label for="type">Тип жилья</label>
<select id="type" name="type">
<option value="flat" selected>Квартира</option>
<option value="bungalo">Лачуга</option>
<option value="bungalo" selected>Лачуга</option>
<option value="flat">Квартира</option>
<option value="house">Дом</option>
<option value="palace">Дворец</option>
</select>
</fieldset>

<fieldset class="form__element" disabled>
<label for="price">Цена за ночь, руб.</label>
<input id="price" name="price" type="number" placeholder="5000" value="1000" min="0" max="1000000" required>
<input id="price" name="price" type="number" placeholder="0" value="1000" min="0" max="1000000" required>
</fieldset>

<fieldset class="form__element" disabled>
Expand Down Expand Up @@ -152,9 +152,9 @@ <h2 class="notice__title">Ваше объявление</h2>
<fieldset class="form__element" disabled>
<label for="capacity">Количество мест</label>
<select id="capacity" name="capacity">
<option value="3" selected>для 3 гостей</option>
<option value="3">для 3 гостей</option>
<option value="2">для 2 гостей</option>
<option value="1">для 1 гостя</option>
<option value="1" selected>для 1 гостя</option>
<option value="0">не для гостей</option>
</select>
</fieldset>
Expand Down
94 changes: 60 additions & 34 deletions js/map.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
'use strict';

// Коды кнопок
var ESC_KEYCODE = 27;
var ENTER_KEYCODE = 13;

// Функция создания массива объектов объявлений
var generateAdsArray = function () {
var titles = [
Expand Down Expand Up @@ -76,17 +80,17 @@ var generateMapPinsFragment = function (adsArray) {
// Удаляем из шаблона лишний блок
mapPinTemplate.removeChild(mapPinTemplate.firstElementChild);
var fragment = document.createDocumentFragment();
for (var i = 0; i < adsArray.length; i++) {
adsArray.forEach(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.style.left = (adsArray[i].location.x - img.width / 2) + 'px';
button.style.top = (adsArray[i].location.y - img.height + MAP_PIN_POINTER_HEIGHT) + 'px';
img.src = adsArray[i].author.avatar;
button.style.left = (ad.location.x - img.width / 2) + 'px';
button.style.top = (ad.location.y - img.height + MAP_PIN_POINTER_HEIGHT) + 'px';
img.src = ad.author.avatar;
fragment.appendChild(mapPinElement);
}
});
return fragment;
};

Expand Down Expand Up @@ -128,28 +132,24 @@ var generateAdFragment = function (ad) {
// Клонируем и очищаем features, чтобы заполнить его с нуля нужными элементами
var featuresClone = features.cloneNode(true);
features.innerHTML = '';
for (var i = 0; i < ad.offer.features.length; i++) {
features.appendChild(featuresClone.querySelector('.feature.feature--' + ad.offer.features[i]));
}
ad.offer.features.forEach(function (feature) {
features.appendChild(featuresClone.querySelector('.feature.feature--' + feature));
});
description.textContent = ad.offer.description;
avatar.src = ad.author.avatar;
return adFragment;
};

// Коды кнопок
var ESC_KEYCODE = 27;
var ENTER_KEYCODE = 13;

// Генерируем массив объявлений
var ADS = generateAdsArray();
var ads = generateAdsArray();
// Получаем объект карты для использования в функциях
var map = document.querySelector('.map');
// Получаем объект Notice для использования в функциях
var notice = document.querySelector('.notice');

// Добавляет метки на карту
var addMapPinsToMap = function () {
map.querySelector('.map__pins').appendChild(generateMapPinsFragment(ADS));
map.querySelector('.map__pins').appendChild(generateMapPinsFragment(ads));
};

// Открывает окно объявления
Expand All @@ -158,7 +158,7 @@ var openAdPopup = function (adNumber) {
if (map.querySelector('.map__card.popup')) {
closeAdPopup();
}
var adPopup = generateAdFragment(ADS[adNumber]);
var adPopup = generateAdFragment(ads[adNumber]);
var closeButton = adPopup.querySelector('.popup__close');
closeButton.tabIndex = 0;
map.insertBefore(adPopup, map.querySelector('.map__filters-container'));
Expand All @@ -185,9 +185,9 @@ var onMapPinMainMouseup = function (event) {
addMapPinsToMap();
noticeForm.classList.remove('notice__form--disabled');
var fieldSets = noticeForm.querySelectorAll('fieldset');
for (var i = 0; i < fieldSets.length; i++) {
fieldSets[i].disabled = false;
}
fieldSets.forEach(function (fieldSet) {
fieldSet.disabled = false;
});
event.target.removeEventListener('mouseup', onMapPinMainMouseup);
};

Expand Down Expand Up @@ -250,20 +250,20 @@ var deactivateMapPin = function () {
};

// Функция добавления обработчика события mouseup для Map Pin Main
var mapPinMainAddListener = function () {
var addMapPinMainListener = function () {
var mapPinMain = map.querySelector('.map__pin--main');
mapPinMain.addEventListener('mouseup', onMapPinMainMouseup);
};

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

// Добавляет обработчики событий для полей Время заезда и выезда
var timeinTimeoutSelectAddListeners = function () {
var addTimeinTimeoutSelectListeners = function () {
var timeinSelect = notice.querySelector('#timein');
var timeoutSelect = notice.querySelector('#timeout');
timeinSelect.addEventListener('change', function () {
Expand All @@ -275,8 +275,8 @@ var timeinTimeoutSelectAddListeners = function () {
};

// Добавляет обработчик событий для поля Тип жилья
var typeSelectAddListener = function () {
var MIN_PRICES = {
var addTypeSelectListener = function () {
var TYPE_PRICES = {
'bungalo': 0,
'flat': 1000,
'house': 5000,
Expand All @@ -285,21 +285,47 @@ var typeSelectAddListener = function () {
var typeSelect = notice.querySelector('#type');
var priceInput = notice.querySelector('#price');
typeSelect.addEventListener('change', function () {
priceInput.min = MIN_PRICES[typeSelect[typeSelect.selectedIndex].value];
var newMinPrice = TYPE_PRICES[typeSelect[typeSelect.selectedIndex].value];
priceInput.min = newMinPrice;
priceInput.placeholder = newMinPrice.toString();
});
};

// Добавляет обработчик событий для поля Кол-во комнат
var roomNumberSelectAddListener = function () {
// Определяет текущее кол-во комнат и выставляет соответствующие опции кол-ва мест
var setCapacitySelectOptions = function (allCapacityOptions) {
var ROOM_CAPACITIES = {
'1': ['1'],
'2': ['2', '1'],
'3': ['3', '2', '1'],
'100': ['0']
};
var roomNumberSelect = notice.querySelector('#room_number');
var capacitySelect = notice.querySelector('#capacity');
// Удаляем из capacitySelect все опции
capacitySelect.innerHTML = '';
// Добавляем в capacitySelect нужные опции исходя из выбранной опции в roomNumberSelect
[].forEach.call(allCapacityOptions, function (option) {
if (ROOM_CAPACITIES[roomNumberSelect.value].indexOf(option.value) !== -1) {
capacitySelect.options.add(option.cloneNode(true));
}
});
};

// Добавляет обработчик событий для поля Кол-во комнат
var addRoomNumberSelectListener = function () {
var capacitySelect = notice.querySelector('#capacity');
var roomNumberSelect = notice.querySelector('#room_number');
// Получаем все возможные опции в начальном состоянии capacitySelect
var allCapacityOptions = capacitySelect.cloneNode(true).options;
// Задаем начальные опции для capacitySelect
setCapacitySelectOptions(allCapacityOptions);
roomNumberSelect.addEventListener('change', function () {
capacitySelect.value = roomNumberSelect.value !== '100' ? roomNumberSelect.value : '0';
setCapacitySelectOptions(allCapacityOptions);
});
};

// Добавляет обработчики события invalid для полей Заголовок, Адрес и Цена за ночь
var checkedInputsAddListeners = function () {
var addCheckedInputsListeners = function () {
var titleInput = notice.querySelector('#title');
var addressInput = notice.querySelector('#address');
var priceInput = notice.querySelector('#price');
Expand All @@ -308,9 +334,9 @@ var checkedInputsAddListeners = function () {
priceInput.addEventListener('invalid', onInputInvalid);
};

mapPinMainAddListener();
mapPinsAddListeners();
timeinTimeoutSelectAddListeners();
typeSelectAddListener();
roomNumberSelectAddListener();
checkedInputsAddListeners();
addMapPinMainListener();
addMapPinsListeners();
addTimeinTimeoutSelectListeners();
addTypeSelectListener();
addRoomNumberSelectListener();
addCheckedInputsListeners();

0 comments on commit da6002e

Please sign in to comment.