|
@@ -0,0 +1,209 @@
|
|
|
+// fetch basic + fetch improved ===========================================================================================================
|
|
|
+
|
|
|
+
|
|
|
+function jsonToTable (parent, json) {
|
|
|
+
|
|
|
+ const jsonTable = document.createElement('table')
|
|
|
+ parent.append(jsonTable)
|
|
|
+ Object.assign(jsonTable.style, {border: 'dotted', borderLeft: 'solid'})
|
|
|
+
|
|
|
+ for (let key in json) {
|
|
|
+
|
|
|
+ const jsonTableTr = document.createElement('tr')
|
|
|
+ jsonTable.appendChild(jsonTableTr)
|
|
|
+
|
|
|
+ const jsonTableTdTittle = document.createElement('td')
|
|
|
+ jsonTableTr.appendChild(jsonTableTdTittle).innerText = key
|
|
|
+ Object.assign(jsonTableTdTittle.style, {background: 'black', color: 'white'})
|
|
|
+
|
|
|
+ const jsonTableTdContent = document.createElement('td')
|
|
|
+ jsonTableTr.appendChild(jsonTableTdContent)
|
|
|
+ Object.assign(jsonTableTdContent.style, {borderBottom: 'dotted'})
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ if (typeof json[key] === 'string' && json[key].includes('https://swapi.dev/api/')) {
|
|
|
+ const tdButton = document.createElement('button')
|
|
|
+ jsonTableTdContent.appendChild(tdButton).innerText = json[key]
|
|
|
+ Object.assign(tdButton.style, {background: 'black', color: 'yellow', borderColor: 'yellow'})
|
|
|
+
|
|
|
+ tdButton.onclick = () => {
|
|
|
+ fetch(`${json[key]}`)
|
|
|
+ .then(res => res.json())
|
|
|
+ .then(data => jsonToTable(jsonTableTdContent, data))
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ else if (typeof json[key] === 'object') {
|
|
|
+
|
|
|
+ for (let i = 0; i < json[key].length; i ++) {
|
|
|
+ const tdButton = document.createElement('button')
|
|
|
+ jsonTableTdContent.appendChild(tdButton).innerText = json[key][i]
|
|
|
+ Object.assign(tdButton.style, {background: 'black', color: 'yellow', borderColor: 'yellow'})
|
|
|
+
|
|
|
+ tdButton.onclick = () => {
|
|
|
+ fetch(`${json[key][i]}`)
|
|
|
+ .then(res => res.json())
|
|
|
+ .then(data => jsonToTable(jsonTableTdContent, data))
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ else {
|
|
|
+ jsonTableTdContent.innerText = json[key]
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+fetch('https://swapi.dev/api/people/1/')
|
|
|
+.then(res => res.json())
|
|
|
+.then(luke => jsonToTable(document.body, luke))
|
|
|
+
|
|
|
+
|
|
|
+// race ===========================================================================================================
|
|
|
+
|
|
|
+
|
|
|
+function delay (ms) {
|
|
|
+ return new Promise ( (resolve, reject) => {
|
|
|
+ setTimeout( () => resolve('myDelay'), Math.random()*ms)
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+const myDelay = delay(1000)
|
|
|
+const myFetch = fetch('https://swapi.dev/api/people/1/')
|
|
|
+
|
|
|
+Promise.race([myDelay,myFetch]).then((who) => console.log(who))
|
|
|
+
|
|
|
+
|
|
|
+// Promisify: confirm ===========================================================================================================
|
|
|
+
|
|
|
+
|
|
|
+function confirmPromise(text){
|
|
|
+ return new Promise( (resolve, reject) => {
|
|
|
+ confirm(text) ? resolve() : reject()
|
|
|
+ })
|
|
|
+}
|
|
|
+confirmPromise('Промисы это сложно?').then(() => console.log('не так уже и сложно'),
|
|
|
+() => console.log('respect за усидчивость и внимательность'))
|
|
|
+
|
|
|
+
|
|
|
+// Promisify: prompt ===========================================================================================================
|
|
|
+
|
|
|
+
|
|
|
+function promptPromise(text){
|
|
|
+ const promptVal = prompt(text)
|
|
|
+ return new Promise ( (resolve, reject) => {
|
|
|
+ promptVal ? resolve(promptVal) : reject()
|
|
|
+ })
|
|
|
+}
|
|
|
+promptPromise("Как тебя зовут?").then(name => console.log(`Тебя зовут ${name}`),
|
|
|
+() => console.log('Ну зачем морозиться, нормально же общались'))
|
|
|
+
|
|
|
+
|
|
|
+// Promisify: LoginForm ===========================================================================================================
|
|
|
+
|
|
|
+
|
|
|
+function Form (parent) {
|
|
|
+
|
|
|
+ this.mainForm = document.createElement('form')
|
|
|
+ parent.append(this.mainForm)
|
|
|
+ Object.assign(this.mainForm.style, {display: 'flex', flexDirection: 'column', alignItems: 'center', width: '150px'})
|
|
|
+
|
|
|
+ this.formElementsPlace = document.createElement('div')
|
|
|
+ this.mainForm.append(this.formElementsPlace)
|
|
|
+ Object.assign(this.formElementsPlace.style, {display: 'flex', flexDirection: 'column', width: '100%'})
|
|
|
+
|
|
|
+ const p = new Password (this.formElementsPlace, false)
|
|
|
+ const l = new Login (this.formElementsPlace)
|
|
|
+
|
|
|
+ this.formButton = document.createElement('button')
|
|
|
+ this.mainForm.append(this.formButton)
|
|
|
+ this.formButton.innerText = 'Login'
|
|
|
+ this.formButton.type = 'button'
|
|
|
+ Object.assign(this.formButton.style, {width: '50px', marginBottom: '5px'})
|
|
|
+
|
|
|
+ this.formButton.disabled = p.passwordInput.value === '' && l.loginInput.value === '' ? true : false
|
|
|
+ p.onChange = data => this.formButton.disabled = data === ''? true : false
|
|
|
+ l.onChange = data => this.formButton.disabled = data === ''? true : false
|
|
|
+
|
|
|
+ this.getData = () => {
|
|
|
+ return {
|
|
|
+ login: l.getValue(),
|
|
|
+ password: p.getValue()
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ this.formButton.onclick = () => this.getData()
|
|
|
+
|
|
|
+
|
|
|
+ console.log(this)
|
|
|
+}
|
|
|
+
|
|
|
+function Password (parent,open) {
|
|
|
+
|
|
|
+ this.passwordInput = document.createElement('input')
|
|
|
+ parent.appendChild(this.passwordInput)
|
|
|
+ this.passwordInput.placeholder = 'Password'
|
|
|
+ this.passwordInput.type = open ? 'text' : 'password'
|
|
|
+
|
|
|
+ this.openInput = document.createElement('input')
|
|
|
+ parent.appendChild(this.openInput)
|
|
|
+ this.openInput.type = 'checkBox'
|
|
|
+
|
|
|
+ this.setValue = newValue => this.passwordInput.value = newValue
|
|
|
+ this.getValue = () => {
|
|
|
+ return this.passwordInput.value
|
|
|
+ }
|
|
|
+
|
|
|
+ this.setOpen = newOpen => {
|
|
|
+ newOpen = this.openInput.checked
|
|
|
+ this.passwordInput.type = newOpen ? 'text' : 'password'
|
|
|
+ }
|
|
|
+ this.getOpen = () => {
|
|
|
+ return this.openInput.checked
|
|
|
+ }
|
|
|
+
|
|
|
+ this.passwordInput.oninput = () => {
|
|
|
+ if (typeof this.onChange === 'function') {
|
|
|
+ this.onChange(this.getValue())
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ this.openInput.onchange = () => {
|
|
|
+ if (typeof this.onOpenChange === 'function') {
|
|
|
+ this.onOpenChange(this.getOpen())
|
|
|
+ }
|
|
|
+ this.getOpen(this.setOpen())
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function Login (parent) {
|
|
|
+
|
|
|
+ this.loginInput = document.createElement('input')
|
|
|
+ parent.prepend(this.loginInput)
|
|
|
+ this.loginInput.placeholder = 'Login'
|
|
|
+ Object.assign(this.loginInput.style, {marginBottom: '5px'})
|
|
|
+
|
|
|
+ this.setValue = newValue => this.loginInput.value = newValue
|
|
|
+ this.getValue = () => {
|
|
|
+ return this.loginInput.value
|
|
|
+ }
|
|
|
+ this.loginInput.oninput = () => {
|
|
|
+ if (typeof this.onChange === 'function') {
|
|
|
+ this.onChange(this.getValue())
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function loginPromise(parent){
|
|
|
+ const f = new Form(parent, true)
|
|
|
+
|
|
|
+ return new Promise ( (resolve, reject) => {
|
|
|
+ f.formButton.onclick = () => resolve(f.getData())
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+loginPromise(document.body).then(({login, password}) => console.log(`Вы ввели ${login} и ${password}`))
|
|
|
+
|