-
Notifications
You must be signed in to change notification settings - Fork 16
fake chat snippet
garevna edited this page Oct 26, 2018
·
1 revision
| ⏪ |
|---|
document.body.style = `
font-family: monospace, Arial;
font-size: 14px;
`
let lastUpdate
let getData = function ( ref ) {
return fetch ( 'http://localhost:3000/' + ref )
.then ( response => response.json () )
}
let appElem = ( tagName, container ) =>
( container ? container : document.body )
.appendChild ( document.createElement ( tagName ) )
let chat
let posts
let users
let currentUser
let chatInput = appElem ( 'input' )
chatInput.style = `
position: fixed;
left: 20px;
width: 80%;
bottom: 10px;
border: inset 1px;
background-color: #af9;
overflow: auto;
`
let buildChat = function () {
chat = appElem ( 'section' )
chat.style = `
position: fixed;
top: 30px;
left: 20px;
right: 20px;
bottom: 70px;
border: inset 1px;
overflow: auto;
padding: 10px;
`
}
let updateChat = async function () {
let updated = await getData ( "lastUpdate" )
if ( lastUpdate &&
updated.data === lastUpdate.data &&
updated.time === lastUpdate.time )
return
await Promise.all ( [
getData ( "users" ).then ( x => users = x ) ,
getData ( "posts" ).then ( x => posts = x )
] )
if ( !currentUser ) {
currentUser = users [
Math.floor ( Math.random () * users.length )
]
currentUserId = currentUser.id
}
initChat ()
lastUpdate = {
data: updated.data,
time: updated.time
}
chat.scrollTop = chat.scrollHeight
}
let initChat = async function () {
chat.innerHTML = ""
posts.forEach ( post => {
let user = users.filter ( x => x.id === post.userId )[0]
chat.appendChild (
( function () {
let cont = appElem ( 'div' )
let ava = appElem ( 'img', cont )
ava.src = user.photoURL
ava.width = "40"
ava.title = ` ${user.name} ${user.lastName}`
appElem ( 'span', cont ).innerHTML = ` <small> ${post.date} ${post.time}</small>`
appElem ( 'p', cont ).innerText = post.body
return cont
}) ( user )
)
})
}
buildChat ()
updateChat ()
setTimeout ( function () {
chat.scrollTop = chat.scrollHeight
}, 200 )
let interval = setInterval ( function () {
updateChat ()
}, 500 )
chatInput.onchange = function ( event ) {
let postTime = new Date().toLocaleString ().split ( ', ' )
fetch ( 'http://localhost:3000/lastUpdate', {
method: 'POST',
body: JSON.stringify ({
data: postTime [0],
time: postTime [1]
}),
headers: {
"Content-type": "application/json"
}
})
fetch ( 'http://localhost:3000/posts', {
method: 'POST',
body: JSON.stringify ({
date: postTime [0],
time: postTime [1],
userId: currentUser.id,
body: event.target.value
}),
headers: {
"Content-type": "application/json"
}
})
}| ⏪ |
|---|
© Irina H.Fylyppova 2018
Использование данных материалов или любой их части коммерческими школами ( курсами ) является нарушением авторских прав
| 1 | 2 | 3 | 4 | 5 |
| 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 |
| ⏬ |
|---|
- Блок-схема алгоритма
- Developer Tools
- Chrome DevTools
- Переменные
- Оператор typeof
- Структуры данных
- Операторы присваивания
- Логические выражения
- Условные операторы
- Инкремент
- Свойство length
- Оператор цикла for
- UTF-8
Homework
- Приведение типов
- NaN | null | Infinity
- BigInt (ES10)
- Функции
- Методы
- Методы строк
- Методы массивов
- Date ()
Самостоятельная работа
Практика (XSS)
Homework
- Циклы while и do...while
- Циклы for...of и for...in
- Параметры по умолчанию
- Объект function
Практика
Homework
- Нативные и host-объекты
- Литерал объекта
- Унаследованные свойства
- Конструктор
- Модель наследования
- Публичные и приватные свойства
- Оператор in
1
Homework
- Итерирующие методы массивов
- Тестирование производительности
- SHA
Homework
- Размеры и прокрутка элемента
- Event Loop
- async | await
- API
- REST | HATEOAS
- status codes
JSON placeholder-
JSON server
fake chat
Homework
- strict mode
- Вычисляемые имена свойств
- Краткий синтаксис методов
- Краткий литерал объекта
- Классы
Homework
- :not(:defined)
- Shadow DOM
- Custom elements
- Lifecycle hooks
- whenDefined
- <template>
- slot
1
2
3
Homework
- npm
- webpack
Упражнение 1- ES6 модули
Упражнение 2- --mode | --watch
Упражнение 3
Упражнение 4
Упражнение 5
Упражнение 6
Упражнение 7
Упражнение 8
Homework
| ⏫ |
|---|

Дополнительно
Справочная инфо
Git Bush
TCP/IP
Коды символов