script.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. function createBtn(text) {
  2. let btn = document.createElement('button')
  3. btn.innerText = `${text}`
  4. return btn
  5. }
  6. function drawObjTable(parent, obj) {
  7. let table = document.createElement('table')
  8. table.border = 1
  9. table.style.border = '5px double grey'
  10. let closeRow = document.createElement('tr')
  11. let closeTd = document.createElement('td')
  12. closeTd.style.border = 'none'
  13. let closeBtn = createBtn('Close table')
  14. closeBtn.style.backgroundColor = 'firebrick'
  15. closeBtn.style.color = 'white'
  16. closeBtn.onclick = () => parent.removeChild(table)
  17. closeTd.append(closeBtn)
  18. closeRow.append(closeTd)
  19. table.append(closeRow)
  20. for (let key in obj) {
  21. let tr = document.createElement('tr')
  22. let tdKey = document.createElement('td')
  23. tdKey.innerText = key
  24. tdKey.style.backgroundColor = 'black'
  25. tdKey.style.color = 'white'
  26. let tdValue = document.createElement('td')
  27. tdValue.style.backgroundColor = 'grey'
  28. tdValue.style.color = 'whitesmoke'
  29. if (obj[key].constructor.name === 'Array') {
  30. let i = 0
  31. for (let item of obj[key]) {
  32. i++;
  33. console.log('current', item)
  34. if (typeof item === 'string' && /^(https:\/\/|http:\/\/)/.test(item)) {
  35. let btn = createBtn(`Loading...`)
  36. btn.disabled = true
  37. fetch(item)
  38. .then((res) => {
  39. if(res.ok) {
  40. return res.json()
  41. } else {
  42. throw new Error()
  43. }
  44. })
  45. .then(obj => {
  46. btn.disabled = false
  47. btn.innerText = obj[Object.keys(obj)[0]]
  48. btn.onclick = () => { drawObjTable(container, obj) }
  49. })
  50. .catch(e => console.warn('something bad happened ', e))
  51. tdValue.append(btn)
  52. } else {
  53. tdValue.innerText = item
  54. }
  55. }
  56. } else if (typeof obj[key] === 'string' && /^(https:\/\/|http:\/\/)/.test(obj[key])) {
  57. let btn = createBtn(key)
  58. btn.disabled = true
  59. fetch(obj[key])
  60. .then(res => res.json())
  61. .then(obj => {
  62. btn.disabled = false
  63. btn.innerText = obj[Object.keys(obj)[0]]
  64. btn.onclick = () => { drawObjTable(container, obj) }
  65. })
  66. .catch(e => console.warn('something bad happened ', e))
  67. tdValue.append(btn)
  68. } else {
  69. tdValue.innerText = obj[key]
  70. }
  71. tr.append(tdKey, tdValue)
  72. table.append(tr)
  73. }
  74. parent.append(table)
  75. }
  76. let container = document.createElement('div')
  77. document.body.append(container)
  78. fetch('https://swapi.dev/api/people/1/')
  79. .then((res) => {
  80. if(res.ok) {
  81. return res.json()
  82. } else {
  83. throw new Error()
  84. }
  85. })
  86. .then(luke => {
  87. drawObjTable(container, luke)
  88. })
  89. .catch((e) => console.warn('something bad happpened ', e))