123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- //1. fetch basic
- // Исследуйте сайт swapi.dev, рассмотрите JSON-ы, которые предоставляются этим сервисом
- // (например: https://swapi.dev/api/people/1/, https://swapi.dev/api/people/2/, https://swapi.dev/api/starships/12/
- // С помощью следующего кода считать и вывести информацию о Люке Скайвокере:
- // Напишите функцию для отображения любого JSON в форме таблицы. Функция должна принимать два параметра:
- // DOM - элемент, в котором строится таблица
- // JSON, который нужно отобразить.
- // {
- // const person1 = 'https://swapi.dev/api/people/1/';
- // const person2 = 'https://swapi.dev/api/people/2/';
- // const person3 = 'https://swapi.dev/api/starships/12/';
- //
- // let table = document.createElement('table')
- // table.border = 1
- // document.body.append(table)
- //
- // function fetchBbasic (dom, source) {
- //
- // fetch(source).then(res => res.json())
- // .then(luke => {
- // for (let [key, value] of Object.entries(luke)) {
- // let tr = document.createElement("tr")
- // table.append(tr)
- //
- // let row = document.createElement('td')
- // row.innerText = key
- // tr.append(row)
- //
- // let rowValue = document.createElement('td')
- // rowValue.innerText = value
- // tr.append(rowValue)
- //
- // }
- // console.log(luke)
- // })
- // }
- // fetchBbasic(table, person1)
- // }
- // 2. Расширить функцию отображения:
- // Если одно из полей строка или массив.
- // Если строки или строка содержат в себе https://swapi.dev/api/
- // То выводить вместо текста строки кнопку, при нажатии на которую:
- // делается fetch данных по этой ссылке
- // функция отображения запускает сама себя(рекурсивно) для отображения новых данных в том же элементе.
- // {
- // fetch('https://swapi.dev/api/people/1/')
- // .then(res => res.json())
- // .then(luke => {
- // personTable(document.body, luke);
- // })
- //
- // function personTable(domElement, jsonElement, elemForRemoval) {
- // let table = document.createElement('table');
- // table.border = 1
- // //elemForRemoval?.remove();
- // domElement.append(table);
- //
- // for (let [key, value] of Object.entries(jsonElement)) {
- // let tr = document.createElement("tr")
- // table.append(tr)
- // let row = document.createElement('td')
- // row.innerText = key
- // tr.append(row)
- //
- // let rowValue = document.createElement('td')
- // rowValue.innerText = value
- // tr.append(rowValue)
- //
- // if (typeof key === 'string' && value.includes('https://swapi.dev/api/')) {
- // linkButton(value, rowValue)
- // }
- // else if (Array.isArray(value)) {
- // value.forEach(element => {
- // linkButton(element,rowValue)
- // })
- // }
- // }
- // }
- //
- // function linkButton(value, rowValue) {
- // let button = document.createElement('button');
- // button.innerText = 'OPEN LINK';
- // button.onclick = () => {
- // fetch(value)
- // .then(res => res.json())
- // .then(data => {
- // personTable(rowValue, data, button);
- // })
- // };
- // rowValue.append(button);
- // }
- // }
- //3. race
- // Используя Promise.race запустите запрос на API (swapi.dev) параллельно с delay. По результату определите, что было
- // быстрее, запрос по сети, или определенный интервал времени. Подберите параметр delay так, что бы результат был
- // неизвестен изначально, и при многократных запусках быстрее был то delay, то myfetch.
- // {
- // let myFetch = new Promise(resolve => fetch('https://swapi.dev/api/people/1/').then(res => res.json())
- // .then(luke => {
- // console.log(luke)
- // }) )
- //
- // function delay(ms){
- // function executor(fulfill, reject) {
- // setTimeout(() => fulfill(ms), ms) }
- // return new Promise(executor)
- // }
- // Promise.race([myFetch, delay(80)]).then((value) => {
- // console.log(value);
- // });
- //
- // }
- //4. Promisify: confirm
- // Промисифицируйте confirm. Напишите функцию, которая возвращает промис, который переходит в состояние fulfilled при
- // нажатии "OK" и реджектится при нажатии "Cancel". Функция должна принимать строку для confirm:
- // {
- // function confirmPromise(text){
- // function executor(fulfill, reject){
- // if (confirm(text) === true) {
- // fulfill()
- // } else {
- // reject()
- // }
- // }
- // return new Promise(executor)
- // }
- //
- // confirmPromise('Промисы это сложно?').then(() => console.log('не так уже и сложно'),
- // () => console.log('respect за усидчивость и внимательность'))
- // }
- //5. Promisify: prompt
- // Аналогично предыдующему заданию промисифицируйте prompt. В случае нажатия "ОК" промис резолвится и его результатом
- // становится текст, введенный пользователем в окне prompt. В случае нажатия "Отмены" - промис реджектится. Параметром
- // функции будет текст сообщения в prompt
- // {
- // function promptPromise(text) {
- // function executor(fulfill, reject) {
- // let answer = prompt(text);
- // if (answer) {
- // fulfill(answer);
- // } else {
- // reject();
- // }
- // }
- // return new Promise(executor);
- // }
- //
- // promptPromise("Как тебя зовут?").then(name => console.log(`Тебя зовут ${name}`),
- // () => console.log('Ну зачем морозиться, нормально же общались'))
- // }
- //6. Promisify: LoginForm
- // Промисифицируйте конструктор LoginForm. В промисифицированную функцию передается DOM-элемент - родитель для формы,
- // В колбэке, предназначенном для получения логина и пароля в момент нажатия кнопки "Login...", который вы назначаете в
- // объекте LoginForm, зарезолвите промис. Результатом промиса должен быть объект с ключами login и password, ключи
- // должны содержать значения полей ввода.
- // {
- // function loginPromise (parent) {
- // function executor (resolve, reject) {
- // const form = new LoginForm(parent, false)
- // form.inputButtonOnclick = function () {
- // resolve ({login: this.getLogin(), password: this.getPass()})
- // }
- // }
- // return new Promise(executor)
- // }
- //
- // loginPromise(document.body).then(({login, password}) => console.log(`Вы ввели ${login} и ${password}`))
- //
- //
- // function LoginForm(parent, passOpenDefault){
- // function Password(parent, open) {
- //
- // const inputPass = document.createElement('input')
- // parent.append(inputPass)
- // const checkboxPass = document.createElement('input')
- // checkboxPass.type = 'checkbox'
- // parent.append(checkboxPass)
- //
- // this.setValue = (value) => {
- // inputPass.value = value
- // if (typeof this.onChange === 'function') this.onChange(this.getValue()) // запускается по событию oninput в поле ввода, передает текст в колбэк
- // } //задает значение
- // this.getValue = () => inputPass.value //читает значение
- // this.setOpen = (open) => {
- // if (open) {
- // checkboxPass.checked = true
- // inputPass.type = "text"
- // }
- // if (!open) {
- // checkboxPass.checked = false
- // inputPass.type = "password"
- // }
- // if (typeof this.onOpenChange === 'function') this.onOpenChange(this.getOpen()) // запускается по изменению состояния открытости пароля
- // } //задает открытость текста в поле ввода
- // this.getOpen = () => checkboxPass.checked //читает открытость текста в поле ввода
- //
- // this.setOpen(open)
- // inputPass.oninput = () => this.setValue(this.getValue())
- // checkboxPass.oninput = () => this.setOpen(this.getOpen())
- //
- // }
- //
- // const LoginForm = document.createElement('div')
- // parent.append(LoginForm)
- //
- // const inputLogin = document.createElement('input')
- // LoginForm.append(inputLogin)
- //
- // let p = new Password(LoginForm, passOpenDefault)
- //
- // const inputButton = document.createElement('input')
- // inputButton.type = 'button'
- // inputButton.value = 'войти'
- // LoginForm.append(inputButton)
- // inputButton.disabled = true
- //
- // p.onChange = () => checkButtonDisabled()
- // inputLogin.oninput = () => checkButtonDisabled()
- //
- // function checkButtonDisabled () {
- // if (p.getValue() && inputLogin.value) inputButton.disabled = false
- // else inputButton.disabled = true
- // }
- //
- // this.getLogin = () => inputLogin.value
- // this.setLogin = (value) => {
- // inputLogin.value = value
- // checkButtonDisabled()
- //
- // }
- // this.getPass = () => p.getValue()
- // this.setPass = (value) => {
- // p.setValue(value)
- // checkButtonDisabled()
- // }
- //
- // inputButton.onclick = () => {
- // if (typeof this.inputButtonOnclick === 'function') this.inputButtonOnclick() //функция при нажатии на кнопку войти
- // }
- // }
- // }
|