<!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>