krouzek:uloha_zoo

<!DOCTYPE html>
<html lang="cs">
<head>
  <meta charset="utf-8"/>
  <title>ZOO</title>
 
  <style>
      body {
          box-sizing: border-box
      }
 
      #sklad-json {
          width: 98%;
          height: 50vh;
      }
 
      #vsechno {
          display: flex;
          flex-direction: row;
      }
 
      #podminky {
          width: 40vw;
      }
 
      #sklad {
          background-color: rgba(220, 220, 220);
          width: 30vw;
      }
 
      .vybeh {
          border: 0.05em solid black;
          width: 30vw;
      }
      .voliera {border: 0.1em dashed black;}
 
      .vybeh, .podminka {
          min-height: 5vh;
      }
 
      #odmitnuti {
          background: repeating-linear-gradient(135deg, white, #ffaaaa 15%, #ffaaaa 20%, white 30%);
      }
  </style>
 
  <script>
      /* <![CDATA[ */
 
      // Pri kazde zmene jsonu
      function nactiZvirata(makePretty = false, showError=false) {
          let nactenePole = []
          const skladTextarea = document.getElementById('sklad-json')
          try {
              nactenePole = JSON.parse(skladTextarea.value)
              if (makePretty) {
                  skladTextarea.value = JSON.stringify(nactenePole, null, 3)
              }
              skladTextarea.style.backgroundColor = 'white'
          } catch (e) {
              skladTextarea.style.backgroundColor = 'rgb(255,200,200)'
              if(showError){
                  console.error(e)
              }
          }
          return nactenePole
      }
 
      function vyhodnotPodminky() {
          // console.log("volani funkce vyhodnotPodminky")
          const zvirata = nactiZvirata()
          // todo: isolate into a function
          for (let cisloVybehu = 1; cisloVybehu <= 3; cisloVybehu++) {
              document.getElementById("vybeh" + cisloVybehu).innerHTML = ''
          }
          document.getElementById("odmitnuti").innerHTML = ''
          const umistenaZvirata = {}
 
          for (let cisloPodminky = 1; cisloPodminky <= 3; cisloPodminky++) {
              const podminka = document.getElementById("podminka" + cisloPodminky).value
              for (let indexZvirete = 0; indexZvirete < zvirata.length; indexZvirete++) {
                  const zvire = zvirata[indexZvirete]
                  if (umistenaZvirata[indexZvirete]) {
                      continue
                  }
                  if (eval(podminka)) {
                      document.getElementById("vybeh" + cisloPodminky).innerHTML += " "+ zvire.emoji + zvire.jmeno
                      umistenaZvirata[indexZvirete] = true
                  }
              }
          }
 
          // zbyla zvirata do posledniho vybehu
          for (let indexZvirete = 0; indexZvirete < zvirata.length; indexZvirete++) {
              const zvire = zvirata[indexZvirete]
              if (!umistenaZvirata[indexZvirete]) {
                  document.getElementById("odmitnuti").innerHTML += " "+ zvire.emoji + zvire.jmeno
              }
          }
      }
 
      /* ]]> */
  </script>
</head>
 
<body>
<div id="vsechno">
 
  <!-- https://emojipedia.org/nature/ -->
  <!-- https://www.zoopraha.cz/zvirata-a-expozice/zvireci-osobnosti -->
  <div id="sklad">
    <textarea id="sklad-json" oninput="nactiZvirata()">
      [
   {
      "trida": "savci",
      "rod": "slon",
      "druh": "slon indický",
      "jmeno": "Shanti",
      "pohlaví":"samice",
      "vek": 46,
      "hmotnost": 500,
      "emoji": "🐘"
   }, {
      "trida": "savci",
      "rod": "slon",
      "druh": "slon indický",
      "jmeno": "Karel",
      "pohlaví":"samec",
      "vek": 33,
      "hmotnost": 730,
      "emoji": "🐘"
   },
   {
      "trida": "ptáci",
      "rod": "tučňák",
      "druh": "tučnák císařský",
      "jmeno": "Karel IV",
      "pohlaví": "samec",
      "vek": 4,
      "hmotnost": 12,
      "emoji": "🐧"
   },
   {
      "trida": "ptáci",
      "rod": "orel",
      "druh": "orel skalní",
      "jmeno": "Vilém",
      "pohlaví":"samec",
      "vek": 2,
      "hmotnost": 3,
      "emoji": "🦅"
   },
   {
      "trida": "savci",
      "rod": "medvěd",
      "druh": "medvěd lední",
      "jmeno": "Berta",
      "pohlaví":"samice",
      "vek": 19,
      "hmotnost": 190,
      "emoji": "🐻"
   },
   {
      "trida": "savci",
      "rod": "medvěd",
      "druh": "medvěd lední",
      "jmeno": "Tom",
      "pohlaví":"samec",
      "vek": 15,
      "hmotnost": 440,
      "emoji": "🐻"
   },
   {
      "trida": "savci",
      "rod": "medvěd",
      "druh": "medvěd hnědý",
      "jmeno": "Eva",
      "pohlaví":"samice",
      "vek": 22,
      "hmotnost": 175,
      "emoji": "🐻"
   },
   {
      "trida": "savci",
      "rod": "gorila",
      "druh": "gorila nížinná",
      "jmeno": "Richard",
      "pohlaví":"samec",
      "vek": 25,
      "hmotnost": 110,
      "emoji": "🦍"
   },
   {
      "trida": "savci",
      "rod": "gorila",
      "druh": "gorila nížinná",
      "jmeno": "Nuru",
      "pohlaví":"samec",
      "vek": 10,
      "hmotnost": 56,
      "emoji": "🦍"
   }
]
    </textarea>
    <p>
      <button onclick="nactiZvirata(true, true)">🖹</button>
    </p>
  </div>
 
  <div id="podminky">
    <div class="podminka">
      <input type="text" value="zvire.rod == 'gorila'" id="podminka1" oninput="vyhodnotPodminky()">
    </div>
    <div class="podminka">
      <input type="text" id="podminka2" oninput="vyhodnotPodminky()">
    </div>
    <div class="podminka">
      <input type="text" id="podminka3" oninput="vyhodnotPodminky()">
    </div>
  </div>
 
  <div id="zoo">
    <div class="vybeh" id="vybeh1"></div>
    <div class="vybeh" id="vybeh2"></div>
    <div class="vybeh voliera" id="vybeh3"></div>
    <div class="vybeh" id="odmitnuti"></div>
  </div>
</div>
 
<div>
  <h2>Zadání: napište podmínky, abyste dosáhli dělení:</h2>
  <ol>
    <li>savci v jednom výběhu, ptáci ve voliéře (třetím výběhu)</li>
    <li>lední medvědi v jednom výběhu, ostatní savci v druhém, ptáci ve voliéře</li>
    <li>všechna zvířata těžší než 150(kg) v jednom výběhu, ostatní v druhé</li>
    <li>samice a samci odděleně</li>
    <li>Karlové v jednom výběhu, ostatní v druhém</li>
    <li>atp</li>
  </ol>
 
</div>
</body>
</html>
  • krouzek/uloha_zoo.txt
  • Poslední úprava: 2023/11/15 20:54
  • autor: 127.0.0.1