script.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. //////////////////////////////////Chat Homework
  2. let nextMessageId = 0;
  3. let arrMonthName=['Января','Февраля','Марта','Апреля','Мая','Июня','Июля','Августа','Сентября','Октября','Ноября','Декабря'];
  4. let currentDate;
  5. let wrapperMessages = document.querySelector(".wrapper-messages");
  6. let inputNick = document.querySelector(".nick-inp");
  7. let inputMes = document.querySelector(".message-inp");
  8. let btnImg = document.querySelector("img");
  9. let url = "http://students.a-level.com.ua:10012";
  10. const delay = ms => new Promise(ok => setTimeout(() => ok(ms), ms));
  11. function createMessage (parent,{nick, message, timestamp}){
  12. let hours = new Date(timestamp).getHours();
  13. let minutes = new Date(timestamp).getMinutes();
  14. let date = new Date(timestamp).getDate();
  15. let month = new Date(timestamp).getMonth();
  16. let year = new Date(timestamp).getFullYear();
  17. let fullDate = `${date} ${arrMonthName[month]} ${year}`
  18. if(currentDate !== fullDate){
  19. let divDate = document.createElement('div');
  20. divDate.classList.add("mes-date");
  21. parent.prepend(divDate);
  22. divDate.innerHTML = fullDate;
  23. currentDate = fullDate;
  24. }
  25. let divWrap = document.createElement('div');
  26. divWrap.classList.add("wrap-message");
  27. parent.prepend(divWrap);
  28. let divNick = document.createElement('div');
  29. divNick.classList.add("nick");
  30. divWrap.append(divNick);
  31. divNick.innerHTML = nick;
  32. let divMes = document.createElement('div');
  33. divMes.classList.add("message");
  34. divWrap.append(divMes);
  35. divMes.innerHTML = message;
  36. let divTime = document.createElement('div');
  37. divTime.classList.add("mes-time");
  38. divMes.append(divTime);
  39. divTime.innerHTML = `${hours < 10 ? '0' + hours : hours}:${minutes < 10 ? '0' + minutes : minutes}`;
  40. }
  41. async function jsonPost(url,data){
  42. let response = await fetch(url, {
  43. method : 'POST',
  44. body : JSON.stringify(data),
  45. headers : {
  46. // 'Content-Type' : 'application/json',
  47. // 'Accept' : 'application/json',
  48. }
  49. })
  50. if(response.status === 200){
  51. let json = await response.json();
  52. return json
  53. }
  54. }
  55. async function sendMessage(nick, message){
  56. if (nick.length >= 3 && message.length >= 3){
  57. await jsonPost(url, {func: "addMessage", nick: nick, message: message});
  58. }
  59. }
  60. async function getMessages(){
  61. let data = await jsonPost(url, {func: "getMessages", messageId: nextMessageId});
  62. nextMessageId = data.nextMessageId;
  63. data.data.forEach(elem=> {
  64. createMessage(wrapperMessages, elem)
  65. })
  66. }
  67. async function sendAndCheck(){
  68. await sendMessage(inputNick.value, inputMes.value);
  69. inputMes.value = '' /// оставляем только ник
  70. await getMessages();
  71. btnImg.onclick = onClick; //// снова вешаем клик
  72. }
  73. getMessages();
  74. async function checkLoop(){
  75. while(true){
  76. await delay(3000);
  77. await getMessages();
  78. // console.log('3000')
  79. }
  80. }
  81. checkLoop()
  82. function onClick(){
  83. btnImg.onclick = null //// для исключения повторного клика
  84. sendAndCheck();
  85. }
  86. btnImg.onclick = onClick;