Обновление сервера

We use cookies. Read the Privacy and Cookie Policy

Обработчики событий, зарегистрированные в drawTalk, вызывают функции deleteTalk и addComment непосредственно для действий, необходимых для удаления темы или добавления комментария. Это будет нужно для построения URL, которые ссылаются на темы с заданным именем, для которых мы определяем вспомогательную функцию talkURL.

function talkURL(title) {

  return "talks/" + encodeURIComponent(title);

}

Функция deleteTalk запускает запрос DELETE и сообщает об ошибке в случае неудачи.

function deleteTalk(title) {

  request({pathname: talkURL(title), method: "DELETE"},

          reportError);

}

Для добавления комментария нужно построить его представление в формате JSON и отправить его как часть POST-запроса.

function addComment(title, comment) {

  var comment = {author: nameField.value, message: comment};

  request({pathname: talkURL(title) + "/comments",

           body: JSON.stringify(comment),

           method: "POST"},

          reportError);

}

Переменная nameField, используемая для установки свойства комментария author, ссылается на поле <input> вверху страницы, которое позволяет пользователю задать его имя. Мы также подключаем это поле к localStorage, чтобы его не приходилось заполнять каждый раз при перезагрузке страницы.

var nameField = document.querySelector("#name");

nameField.value = localStorage.getItem("name") || "";

nameField.addEventListener("change", function() {

  localStorage.setItem("name", nameField.value);

});

Форма внизу страницы для создания новой темы получает обработчик событий "submit". Этот обработчик запрещает действие по умолчанию (что привело бы к перезагрузке страницы), очищает форму и запускает PUT-запрос для создания темы.

var talkForm = document.querySelector("#newtalk");

talkForm.addEventListener("submit", function(event) {

  event.preventDefault();

  request({pathname: talkURL(talkForm.elements.title.value),

           method: "PUT",

           body: JSON.stringify({

             presenter: nameField.value,

             summary: talkForm.elements.summary.value

           })}, reportError);

  talkForm.reset();

});

Более 800 000 книг и аудиокниг! 📚

Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением

ПОЛУЧИТЬ ПОДАРОК