Browse Source

tasks till 'fetch improved' done

miskson 3 years ago
parent
commit
509c93ae6e
2 changed files with 89 additions and 0 deletions
  1. 13 0
      hw11-promise/index.html
  2. 76 0
      hw11-promise/script.js

+ 13 - 0
hw11-promise/index.html

@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>homework10 promise</title>
+</head>
+<body>
+    <h1>homework11 promise</h1>
+    <script src="./script.js"></script>
+</body>
+</html>

+ 76 - 0
hw11-promise/script.js

@@ -0,0 +1,76 @@
+function createBtn(text) {
+    let btn = document.createElement('button')
+    btn.innerText = `${text}`
+    return btn
+}
+
+function drawObjTable(parent, obj) {
+    let table = document.createElement('table')
+    table.border = 1
+    table.style.border = '5px double grey'
+    let closeRow = document.createElement('tr')
+    let closeTd = document.createElement('td')
+    closeTd.style.border = 'none'
+    let closeBtn = createBtn('Close table')
+    closeBtn.style.backgroundColor = 'firebrick'
+    closeBtn.style.color = 'white'
+    closeBtn.onclick = () => parent.removeChild(table)
+
+    closeTd.append(closeBtn)
+    closeRow.append(closeTd)
+    table.append(closeRow)
+
+    for (let key in obj) {
+        let tr = document.createElement('tr')
+        let tdKey = document.createElement('td')
+        tdKey.innerText = key
+        tdKey.style.backgroundColor = 'black'
+        tdKey.style.color = 'white'
+
+        let tdValue = document.createElement('td')
+        tdValue.style.backgroundColor = 'grey'
+        tdValue.style.color = 'whitesmoke'
+
+        if (obj[key].constructor.name === 'Array') {
+            let i = 0
+            for (let item of obj[key]) {
+                i++;
+                console.log('current', item)
+                if (typeof item === 'string' && /^(https:\/\/|http:\/\/)/.test(item)) {
+                    let btn = createBtn(i)
+
+                    fetch(item)
+                    .then(res => res.json())
+                    .then(obj => {
+                        btn.innerText = obj[Object.keys(obj)[0]]
+                        btn.onclick = () => { drawObjTable(container, obj) }
+                    })
+
+                    tdValue.append(btn)
+                } else {
+                    tdValue.innerText = item
+                }
+            }
+        } else if (typeof obj[key] === 'string' && /^(https:\/\/|http:\/\/)/.test(obj[key])) {
+            let btn = createBtn(key)
+            btn.onclick = () => request_N_redraw(obj[key])
+            tdValue.append(btn)
+        } else {
+            tdValue.innerText = obj[key]
+        }
+
+        tr.append(tdKey, tdValue)
+        table.append(tr)
+    }
+    parent.append(table)
+}
+
+let container = document.createElement('div')
+document.body.append(container)
+
+fetch('https://swapi.dev/api/people/1/')
+    .then(res => res.json())
+    .then(luke => {
+        console.log(luke)
+        drawObjTable(container, luke)
+    })