@@ -126,8 +126,7 @@ justify-content: space-between; | |||
height:500px; | |||
background-color: black; | |||
margin-top: 15%; | |||
display:flex; | |||
flex-wrap:wrap; | |||
} | |||
@@ -140,7 +139,7 @@ justify-content: space-between; | |||
width: 33%; | |||
height: 400px; | |||
display: flex; | |||
flex-direction: column; | |||
flex-direction: row; | |||
justify-content: space-around; | |||
border-bottom: 2px #dedede solid; | |||
column-gap:500px; | |||
@@ -150,7 +149,5 @@ text-align: center; | |||
.footer { | |||
font-size: 8px; | |||
color: #dede; | |||
display:flex; | |||
flex-flow: row; | |||
justify-content: center; | |||
text-align: center; | |||
} |
@@ -4,6 +4,7 @@ | |||
<title>Industrious page</title> | |||
<link rel="stylesheet" href="industrious.css"> | |||
<link href="https://fonts.googleapis.com/css?family=Raleway&display=swap" rel="stylesheet"> | |||
<link rel="stylesheet" href="04-EX01.css"> | |||
<body> | |||
<header> | |||
Industrious |
@@ -0,0 +1,6 @@ | |||
{ | |||
"trailingComma": "es5", | |||
"tabWidth": 4, | |||
"semi": true, | |||
"singleQuote": true | |||
} |
@@ -0,0 +1,33 @@ | |||
<!DOCTYPE html> | |||
<html lang="en"> | |||
<head> | |||
<meta charset="UTF-8" /> | |||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> | |||
<meta http-equiv="X-UA-Compatible" content="ie=edge" /> | |||
<link rel="stylesheet" href="main.css" /> | |||
<title>07-javascript-intro</title> | |||
</head> | |||
<body> | |||
<div id="logger"></div> | |||
<div id="app"></div> | |||
<button id="btn">Klik op mij plies</button> | |||
<div id="oefenen"> | |||
<button id="oef-btn">Moet zien ik kan iets!</button> | |||
</div> | |||
<div id="oefenen2"> | |||
<button id="oef-btn-2">ik kan nog veel meer!</button> | |||
<button id="clear-btn-2">Weg ermee</button> | |||
</div> | |||
<div id="oefenen-3"> | |||
<div id='timerText'></div> | |||
<button id="oef-btn-3">Get 300!</button> | |||
</div> | |||
<script src="scripts/logger.js"></script> | |||
<script src="scripts/main.js"></script> | |||
</body> | |||
</html> |
@@ -0,0 +1,23 @@ | |||
button { | |||
color: darksalmon; | |||
background-color: hotpink; | |||
margin-bottom:50px; | |||
border: darkslateblue 2px outset; | |||
border-radius: 10%; | |||
} | |||
#oefenen-3 { | |||
border: 5px orangered solid; | |||
text-align: center; | |||
margin-left:20%; | |||
margin-right:20%; | |||
} | |||
#oef-btn-3 { | |||
margin-top: 20px; | |||
color: black; | |||
} | |||
@@ -0,0 +1,9 @@ | |||
const logger = printable => { | |||
const parent = document.getElementById('logger') | |||
parent.innerHTML += `<p><pre style="font-family:mono;">${JSON.stringify( | |||
printable, | |||
null, | |||
2 | |||
)}</pre></p>` | |||
return printable | |||
} |
@@ -0,0 +1,115 @@ | |||
let foo = {}; | |||
let propname = 'bar'; | |||
foo.bar = 5; | |||
foo[propname] = 5; | |||
let nenArray = [1, 2, 3, 4, 5]; | |||
nenArray[3] = 5; | |||
let appDiv = document.getElementById('app'); | |||
console.log(appDiv); | |||
appDiv.innerHTML = 'Mahow zeh te javascript'; | |||
for (let i = 0; i < 4; i++) { | |||
let newPar = document.createElement('p'); | |||
newPar.innerHTML = i + 1; | |||
console.log(newPar); | |||
appDiv.appendChild(newPar); | |||
} | |||
btn.addEventListener('click', function(event) { | |||
console.log('click'); | |||
let newPa = document.createElement('p'); | |||
newPa.innerHTML = 'joew'; | |||
}); | |||
/*knop 2 */ | |||
let oefDiv = document.getElementById('oefenen'); | |||
let oefBtn = document.getElementById('oef-btn'); | |||
function oefnClick(event) { | |||
let newPar = document.createElement('p'); | |||
newPar.innerHTML = 'paragraaf'; | |||
oefDiv.appendChild(newPar); | |||
} | |||
oefBtn.addEventListener('click', oefnClick); | |||
/*knop 3 */ | |||
let oefnDiv = document.getElementById('oefenen2'); | |||
let oefnBtn = document.getElementById('oef-btn-2'); | |||
let count = 0; | |||
let clearBtn = document.getElementById('clear-btn-2'); | |||
function oefClick(event) { | |||
let newPar = document.createElement('p'); | |||
count++; | |||
newPar.innerHTML = count; | |||
oefnDiv.appendChild(newPar); | |||
} | |||
function clearCount(event) { | |||
let oefnDiv = document.querySelectorAll('#oefenen2 p'); | |||
console.log(oefnDiv); | |||
for (let i = 0; i < oefnDiv.length; i++) { | |||
oefnDiv[i].remove(); | |||
} | |||
} | |||
oefnBtn.addEventListener('click', oefClick); | |||
clearBtn.addEventListener('click', clearCount); | |||
/*set interval functie | |||
function intervalFunction() { | |||
console.log('nu') | |||
} | |||
let intervaal = setInterval (intervalFunction,1000); | |||
clearInterval(interval); | |||
*/ | |||
let oefenenBtn = document.getElementById('oef-btn-3'); | |||
let oefeningDrie = document.getElementById('oefenen-3'); | |||
let county = 0; | |||
let timerTextt = document.getElementById('timerText'); | |||
let newPar = document.createElement('p'); | |||
let newPaar = document.createElement('p'); | |||
function oefinterval() { | |||
county++; | |||
console.log(county); | |||
} | |||
function stopTimer() { | |||
if (county === 300) { | |||
newPaar.innerHTML = 'Bots 300!!'; | |||
oefeningDrie.appendChild(newPaar); | |||
} else { | |||
newPar.innerHTML = 'Jammer, geen 300'; | |||
oefeningDrie.appendChild(newPar); | |||
} | |||
county = 0; | |||
} | |||
function timerText() { | |||
timerTextt.innerHTML = county; | |||
oefeningDrie.appendChild(timerTextt); | |||
} | |||
function wegText() { | |||
oefeningDrie.removeChild(newPar); | |||
oefeningDrie.removeChild(newPaar); | |||
} | |||
let interval = setInterval(oefinterval, 10); | |||
oefenenBtn.addEventListener('click', wegText); | |||
oefenenBtn.addEventListener('click', timerText); | |||
oefenenBtn.addEventListener('click', stopTimer); | |||
@@ -0,0 +1 @@ | |||
@@ -0,0 +1,6 @@ | |||
{ | |||
"trailingComma": "es5", | |||
"tabWidth": 4, | |||
"semi": true, | |||
"singleQuote": true | |||
} |
@@ -0,0 +1,17 @@ | |||
{ | |||
// Use IntelliSense to learn about possible attributes. | |||
// Hover to view descriptions of existing attributes. | |||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 | |||
"version": "0.2.0", | |||
"configurations": [ | |||
{ | |||
"type": "node", | |||
"request": "launch", | |||
"name": "Launch Program", | |||
"skipFiles": [ | |||
"<node_internals>/**" | |||
], | |||
"program": "${workspaceFolder}\\scripts\\main.js" | |||
} | |||
] | |||
} |
@@ -0,0 +1,36 @@ | |||
const form = document.getElementById("form"); | |||
form.addEventListener('submit', function(e) { | |||
e.preventDefault(); | |||
const paragraaf = document.querySelector("p"); | |||
const textArea = form.querySelector('input[name = "textarea"]'); | |||
const string = textArea.value; | |||
var splitter = string.split(" ") | |||
var newString = []; | |||
var used; | |||
for(i = 0; i < splitter.length; i++) { | |||
var nummer = Math.floor(Math.random() * splitter.length); | |||
for(i = 0; i < used.length; i++) | |||
if | |||
newString.push(splitter[nummer]); | |||
console.log(newString); | |||
} | |||
paragraaf.innerHTML = newString; | |||
}) |
@@ -0,0 +1,6 @@ | |||
{ | |||
"trailingComma": "es5", | |||
"tabWidth": 4, | |||
"semi": true, | |||
"singleQuote": true | |||
} |
@@ -0,0 +1,20 @@ | |||
header { | |||
background-color: rgb(38, 161, 38); | |||
height: 200px; | |||
color:white; | |||
font-family: monospace; | |||
font-size: 40px; | |||
text-align: center; | |||
} | |||
textarea { | |||
margin: 10px; | |||
display:flex; | |||
} | |||
@@ -0,0 +1,23 @@ | |||
<html lang="en"> | |||
<head> | |||
<meta charset="UTF-8"> | |||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |||
<meta http-equiv="X-UA-Compatible" content="ie=edge"> | |||
<title>Wordscrambler</title> | |||
<link rel="stylesheet" href="C:\Users\de groot\Desktop\frontend\09-EX04\style\main.css"> | |||
</head> | |||
<body> | |||
<header>Word scrambler</header> | |||
<form action="#" method = "POST" id="form"> | |||
<input type="textarea" name="textarea" type ="text"/> | |||
<input type="submit"/> | |||
</form> | |||
<br> | |||
<br> | |||
<br> | |||
<p id=scrambledString></p> | |||
<script src="C:\Users\de groot\Desktop\frontend\09-EX04\scripts\main.js"></script> | |||
</body> | |||
</html> |
@@ -0,0 +1,6 @@ | |||
{ | |||
"trailingComma": "es5", | |||
"tabWidth": 4, | |||
"semi": true, | |||
"singleQuote": true | |||
} |
@@ -0,0 +1,32 @@ | |||
body { | |||
background-color: darksalmon; | |||
border: dashed 2px blueviolet; | |||
font-family: sans-serif; | |||
display:flex; | |||
} | |||
form { | |||
width: 60%; | |||
margin: 0 auto; | |||
} | |||
label { | |||
display:block; | |||
margin-top:1rem; | |||
} | |||
input { | |||
margin-left: 1rem; | |||
/* width: calc(100% -2rem);*/ | |||
float:right; | |||
width:50%; | |||
font-family: Georgia, 'Times New Roman', Times, serif; | |||
font-size: 1rem; | |||
} | |||
input[type="radio"], | |||
input[type="checkbox"] { | |||
margin-left:0; | |||
margin-right:2rem; | |||
} |
@@ -0,0 +1,63 @@ | |||
<!DOCTYPE html> | |||
<html lang="en"> | |||
<head> | |||
<meta charset="UTF-8" /> | |||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> | |||
<meta http-equiv="X-UA-Compatible" content="ie=edge" /> | |||
<link rel="stylesheet" href="main.css" /> | |||
<title>forms</title> | |||
</head> | |||
<body> | |||
<form action="#" method="POST" id="form"> | |||
<input type="hidden" name="hidden" value="jezietmeniet" /> | |||
<label> | |||
Textfield | |||
<input name="text" type="text" /> | |||
</label> | |||
<label> | |||
Datefield | |||
<input type="date" name="date" /> | |||
</label> | |||
<label> | |||
Emailfield | |||
<input type="email" name="email" /> | |||
</label> | |||
<label> | |||
Passwordfield | |||
<input type="password" name="password" /> | |||
</label> | |||
<label> | |||
Radio 1 | |||
<input type="radio" name="radio" value="radio-1" checked /> | |||
</label> | |||
<label> | |||
Radio 2 | |||
<input type="radio" name="radio" value="radio-2" /> | |||
</label> | |||
<label> | |||
Radio 3 | |||
<input type="radio" name="radio" value="radio-3" /> | |||
</label> | |||
<label> | |||
Radio 4 | |||
<input type="radio" name="radio" value="radio-4" /> | |||
</label> | |||
<input type="checkbox" name="checkbox" value="checkbox-1" /> | |||
<input type="checkbox" name="checkbox" value="checkbox-2" /> | |||
<input type="checkbox" name="checkbox" value="checkbox-3" /> | |||
<input type="checkbox" name="checkbox" value="checkbox-4" /> | |||
<input type="checkbox" name="checkbox" value="checkbox-5" /> | |||
<label> | |||
Select | |||
<select name="select" multiple> | |||
<option value="select-1">Select 1</option> | |||
<option value="select-2">Select 2</option> | |||
<option value="select-3">Select 3</option> | |||
<option value="select-4">Select 4</option> | |||
</select> | |||
</label> | |||
<input type="submit" /> | |||
</form> | |||
<script src="script/main.js"></script> | |||
</body> | |||
</html> |
@@ -0,0 +1,28 @@ | |||
const form = document.getElementById('form'); | |||
form.addEventListener('submit', function(e) { | |||
e.preventDefault(); | |||
const text = form.querySelector('input[name="text"]'); | |||
console.log(text.value); | |||
const select = form.querySelector('select[name="select"]'); | |||
console.log(select.value); | |||
const selectedOption = form.querySelectorAll('option:checked'); | |||
console.log(selectedOption.value); | |||
for (let i = 0; i < selectedOption.length; i++) { | |||
console.log(selectedOption[i].value); | |||
} | |||
const radioBtn = form.querySelector('input[name="radio"]:checked'); | |||
console.log(radioBtn.value); | |||
const checkBoxes = form.querySelectorAll('input[name="checkbox"]:checked'); | |||
console.log(checkBoxes); | |||
for (i = 0; i < checkBoxes.length; i++) { | |||
console.log(checkBoxes[i].value); | |||
} | |||
console.log(form.querySelector('input[name="date"]').value) | |||
}); |
@@ -0,0 +1,6 @@ | |||
{ | |||
"trailingComma": "es5", | |||
"tabWidth": 4, | |||
"semi": true, | |||
"singleQuote": true | |||
} |
@@ -0,0 +1,17 @@ | |||
<!DOCTYPE html> | |||
<html lang="en"> | |||
<head> | |||
<meta charset="UTF-8"> | |||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |||
<meta http-equiv="X-UA-Compatible" content="ie=edge"> | |||
<title>Document</title> | |||
</head> | |||
<body> | |||
<div> | |||
<button id ="get-endpoints-btn">get endpoints</button> | |||
</div> | |||
<div id ="endpoint-container"></div> | |||
<script src="scripts/main.js"></script> | |||
</body> | |||
</html> |
@@ -0,0 +1,57 @@ | |||
const endpointContainer = document.getElementById('endpoint-container'); | |||
const getEndpointsBtn = document.getElementById('get-endpoints-btn'); | |||
function getEndpoints() { | |||
let request = new XMLHttpRequest(); | |||
request.addEventListener('load', function(event) { | |||
let response = JSON.parse(event.target.responseText); | |||
addBtns(response); | |||
}); | |||
request.open('GET', 'https://swapi.co/api/'); | |||
request.send(); | |||
} | |||
function addBtns(response) { | |||
const btnHtml = Object.keys(response).reduce(function(html, responseKey) { | |||
return ( | |||
html + | |||
'<button data-url="' + | |||
response[responseKey] + | |||
'">' + | |||
responseKey + | |||
'</button>' | |||
); | |||
}, ''); | |||
endpointContainer.innerHTML = btnHtml; | |||
} | |||
function makeRequest(event) { | |||
if (event.target.matches('button')) { | |||
let btn = event.target; | |||
let btnText = btn.innerHTML; | |||
btn.innerHTML = 'loading..'; | |||
let request = new XMLHttpRequest(); | |||
request.addEventListener('load', function(event) { | |||
let response = JSON.parse(event.target.responseText); | |||
if (response.status === 200) { | |||
let response = JSON.parse(event.target.responseText); | |||
console.log(response); | |||
btn.innerHTML = btnText; | |||
} else { | |||
console.log(event.target); | |||
btn.innerHTML = "dikke fail"; | |||
} | |||
}); | |||
request.open('GET', event.target.dataset.url); | |||
request.send(); | |||
} | |||
} | |||
getEndpointsBtn.addEventListener('click', getEndpoints); | |||
endpointContainer.addEventListener('click', makeRequest); |
@@ -0,0 +1,30 @@ | |||
<!DOCTYPE html> | |||
<html lang="en"> | |||
<head> | |||
<meta charset="UTF-8"> | |||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |||
<meta http-equiv="X-UA-Compatible" content="ie=edge"> | |||
<title>14-Grid</title> | |||
</head> | |||
<body> | |||
<div id ="grid"> | |||
<div id = "one"></div> | |||
<div id = "two"></div> | |||
<div id = "three"></div> | |||
<div id = "four"></div> | |||
<div id = "five"></div> | |||
<div id = "five"></div> | |||
<div id = "five"></div> | |||
<div id = "five"></div> | |||
<div id = "five"></div> | |||
<div id = "five"></div> | |||
<div id = "five"></div> | |||
<div id = "five"></div> | |||
<div id = "five"></div> | |||
<div id = "five"></div> | |||
<div id = "five"></div> | |||
<div id = "five"></div> | |||
</div> | |||
</body> | |||
</html> |
@@ -0,0 +1,6 @@ | |||
{ | |||
"trailingComma": "es5", | |||
"tabWidth": 4, | |||
"semi": true, | |||
"singleQuote": true | |||
} |
@@ -0,0 +1,9 @@ | |||
#grid { | |||
display: grid; | |||
width: 500px; | |||
height:00px; | |||
grid-template-columns: 50px 40% 1fr 1fr; | |||
grid-template-rows: 1fr 1fr 1fr 1fr; | |||
grid-row-gap:20px; | |||
} | |||
@@ -0,0 +1,6 @@ | |||
{ | |||
"trailingComma": "es5", | |||
"tabWidth": 4, | |||
"semi": true, | |||
"singleQuote": true | |||
} |
@@ -0,0 +1,6 @@ | |||
{ | |||
"trailingComma": "es5", | |||
"tabWidth": 4, | |||
"semi": true, | |||
"singleQuote": true | |||
} |
@@ -0,0 +1,20 @@ | |||
<!DOCTYPE html> | |||
<html lang="en"> | |||
<head> | |||
<meta charset="UTF-8" /> | |||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> | |||
<meta http-equiv="X-UA-Compatible" content="ie=edge" /> | |||
<title>13-xmlhttprequest</title> | |||
<link rel="stylesheet" href="styles/main.css" /> | |||
</head> | |||
<body> | |||
<div> | |||
<button id="get-endpoints-btn">Get endpoints</button> | |||
</div> | |||
<div id="endpoint-container"></div> | |||
<div id ="list-container"></div> | |||
<div id="details-container"></div> | |||
<script src="scripts/main.js"></script> | |||
</body> | |||
</html> |
@@ -0,0 +1,125 @@ | |||
const endpointContainer = document.getElementById('endpoint-container'); | |||
const listContainer = document.getElementById('list-container'); | |||
const getEndpointsBtn = document.getElementById('get-endpoints-btn'); | |||
function getEndpoints() { | |||
fetch('https://swapi.co/api/') | |||
.then(function(response) { | |||
if (response.ok) { | |||
return response.json(); | |||
} | |||
return Promise.reject(new Error('Promise not ok')); | |||
}) | |||
.then(function(jsonResponse) { | |||
addBtns(jsonResponse); | |||
}) | |||
.catch(function(error) { | |||
console.error(error); | |||
}); | |||
} | |||
function addBtns(response) { | |||
const btnHtml = Object.keys(response).reduce(function(html, responseKey) { | |||
return ( | |||
html + | |||
'<button data-url="' + | |||
response[responseKey] + | |||
'">' + | |||
responseKey + | |||
'</button>' | |||
); | |||
}, ''); | |||
endpointContainer.innerHTML = btnHtml; | |||
} | |||
function listHtml(list) { | |||
return list.reduce(function(html, listItem) { | |||
return ` | |||
${html} | |||
<article class="list-item"> | |||
<p>${listItem.name ? listItem.name : listItem.title}</p> | |||
<button data-url="${listItem.url}">Show details</button> | |||
</article> | |||
`; | |||
}, ''); | |||
} | |||
function button(btn) { | |||
} | |||
function makeRequest(event) { | |||
if (event.target.matches('button')) { | |||
let btn = event.target; | |||
btn.disabled = true; | |||
let btnText = btn.innerHTML; | |||
btn.innerHTML = 'loading...'; | |||
fetch(event.target.dataset.url) | |||
.then(function(response) { | |||
if (response.ok) { | |||
return response.json(); | |||
} | |||
return Promise.reject(new Error('Request failed')); | |||
}) | |||
.then(function(jsonResponse) { | |||
console.log(jsonResponse); | |||
btn.innerHTML = btnText; | |||
listContainer.innerHTML = listHtml(jsonResponse.results); | |||
btn.disabled = false; | |||
}) | |||
.catch(function(error) { | |||
console.error(error); | |||
btn.innerHTML = 'Dikke fail...'; | |||
btn.disabled = false; | |||
}); | |||
} | |||
} | |||
function listDetails(detail) { | |||
return Object.keys(details).reduce(function(html, detailKey){ | |||
return ` | |||
${html} | |||
<p> | |||
<strong>${detailKey}:</strong> | |||
${details[detailKey]}; | |||
</p> | |||
`; | |||
}, ''); | |||
} | |||
function requestDetails() { | |||
if (event.target.matches('button')) { | |||
let btn = event.target; | |||
btn.disabled = true; | |||
let btnText = btn.innerHTML; | |||
btn.innerHTML = 'loading...'; | |||
fetch(event.target.dataset.url) | |||
.then(function(response) { | |||
if (response.ok) { | |||
return response.json(); | |||
} | |||
return Promise.reject(new Error('Request failed')); | |||
}) | |||
.then(function(jsonResponse) { | |||
console.log(jsonResponse); | |||
btn.innerHTML = btnText; | |||
listContainer.innerHTML = listHtml(jsonResponse.results); | |||
btn.disabled = false; | |||
}) | |||
.catch(function(error) { | |||
console.error(error); | |||
btn.innerHTML = 'Dikke fail...'; | |||
btn.disabled = false; | |||
}); | |||
} | |||
} | |||
getEndpointsBtn.addEventListener('click', getEndpoints); | |||
endpointContainer.addEventListener('click', makeRequest); | |||
listContainer.addEventListener('click',) |
@@ -0,0 +1,8 @@ | |||
let p = new Promise((resolve, reject) => { | |||
let a = 1+ 1; | |||
if(a == 2) { | |||
resolve("Succes"); | |||
} else { | |||
reject("Failed"); | |||
} | |||
}); |
@@ -0,0 +1,32 @@ | |||
html { | |||
font-size: 15px; | |||
font-family: sans-serif; | |||
} | |||
div { | |||
margin: 4rem auto; | |||
width: 80%; | |||
max-width: 50rem; | |||
text-align: center; | |||
padding: 3rem; | |||
} | |||
#endpoint-container { | |||
display: flex; | |||
flex-direction: column; | |||
align-items: center; | |||
} | |||
button { | |||
line-height: 2rem; | |||
font-weight: 600; | |||
background-color: teal; | |||
color: white; | |||
border: none; | |||
margin: 0.5rem 0; | |||
padding: 0.6rem 2rem; | |||
} | |||
button:disbaled { | |||
background-color: gray; | |||
} |
@@ -0,0 +1,12 @@ | |||
<!DOCTYPE html> | |||
<html lang="en"> | |||
<head> | |||
<meta charset="UTF-8"> | |||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |||
<meta http-equiv="X-UA-Compatible" content="ie=edge"> | |||
<title>Document</title> | |||
</head> | |||
<body> | |||
</body> | |||
</html> |
@@ -0,0 +1,86 @@ | |||
/*function doSomething() { | |||
const promise = new Promise(function(resolve,reject) { | |||
const newArray = []; | |||
for(let i = 0; i < 99999; i++) { | |||
newArray.push(i); | |||
} | |||
if(newArray.length === 0) { | |||
reject('Oh ow'); | |||
} else { | |||
resolve(newArray); | |||
} | |||
}); | |||
return promise; | |||
} | |||
const newPromise = doSomething() | |||
newPromise | |||
.then(function(result) | |||
{console.log(result)}) | |||
.catch(function(error) { | |||
console.log(error)}); | |||
console.log(newPromise) | |||
*/ | |||
const endpointContainer = document.getElementById('endpoint-container'); | |||
const getEndpointsBtn = document.getElementById('get-endpoints-btn'); | |||
function getEndpoints() { | |||
let request = new XMLHttpRequest(); | |||
request.addEventListener('load', function(event) { | |||
let response = JSON.parse(event.target.responseText); | |||
addBtns(response); | |||
}); | |||
request.open('GET', 'https://swapi.co/api/'); | |||
request.send(); | |||
} | |||
function addBtns(response) { | |||
const btnHtml = Object.keys(response).reduce(function(html, responseKey) { | |||
return ( | |||
html + | |||
'<button data-url="' + | |||
response[responseKey] + | |||
'">' + | |||
responseKey + | |||
'</button>' | |||
); | |||
}, ''); | |||
endpointContainer.innerHTML = btnHtml; | |||
} | |||
function makeRequest(event) { | |||
if (event.target.matches('button')) { | |||
let btn = event.target; | |||
let btnText = btn.innerHTML; | |||
btn.innerHTML = 'loading..'; | |||
let request = new XMLHttpRequest(); | |||
request.addEventListener('load', function(event) { | |||
let response = JSON.parse(event.target.responseText); | |||
if (response.status === 200) { | |||
let response = JSON.parse(event.target.responseText); | |||
console.log(response); | |||
btn.innerHTML = btnText; | |||
} else { | |||
console.log(event.target); | |||
btn.innerHTML = "dikke fail"; | |||
} | |||
}); | |||
request.open('GET', event.target.dataset.url); | |||
request.send(); | |||
} | |||
} | |||
getEndpointsBtn.addEventListener('click', getEndpoints); | |||
endpointContainer.addEventListener('click', makeRequest); |
@@ -0,0 +1,56 @@ | |||
const endpointContainer = document.getElementById('endpoint-container'); | |||
const getEndpointsBtn = document.getElementById('get-endpoints-btn'); | |||
function getEndpoints() { | |||
let request = new XMLHttpRequest(); | |||
request.addEventListener('load', function(event) { | |||
let response = JSON.parse(event.target.responseText); | |||
addBtns(response); | |||
}); | |||
request.open('GET', 'https://swapi.co/api/'); | |||
request.send(); | |||
} | |||
function addBtns(response) { | |||
const btnHtml = Object.keys(response).reduce(function(html, responseKey) { | |||
return ( | |||
html + | |||
'<button data-url="' + | |||
response[responseKey] + | |||
'">' + | |||
responseKey + | |||
'</button>' | |||
); | |||
}, ''); | |||
endpointContainer.innerHTML = btnHtml; | |||
} | |||
function makeRequest(event) { | |||
if (event.target.matches('button')) { | |||
let btn = event.target; | |||
let btnText = btn.innerHTML; | |||
btn.innerHTML = 'loading...'; | |||
let request = new XMLHttpRequest(); | |||
request.addEventListener('load', function(event) { | |||
if (event.target.status === 200) { | |||
let response = JSON.parse(event.target.responseText); | |||
console.log(response); | |||
btn.innerHTML = btnText; | |||
} else { | |||
console.log(event.target); | |||
btn.innerHTML = 'Dikke fail...'; | |||
} | |||
}); | |||
request.open('GET', event.target.dataset.url); | |||
request.send(); | |||
} | |||
} | |||
getEndpointsBtn.addEventListener('click', getEndpoints); | |||
endpointContainer.addEventListener('click', makeRequest); |
@@ -0,0 +1,28 @@ | |||
html { | |||
font-size: 15px; | |||
font-family: sans-serif; | |||
} | |||
div { | |||
margin: 4rem auto; | |||
width: 80%; | |||
max-width: 50rem; | |||
text-align: center; | |||
padding: 3rem; | |||
} | |||
#endpoint-container { | |||
display: flex; | |||
flex-direction: column; | |||
align-items: center; | |||
} | |||
button { | |||
line-height: 2rem; | |||
font-weight: 600; | |||
background-color: teal; | |||
color: white; | |||
border: none; | |||
margin: 0.5rem 0; | |||
padding: 0.6rem 2rem; | |||
} |
@@ -0,0 +1,6 @@ | |||
{ | |||
"trailingComma": "es5", | |||
"tabWidth": 4, | |||
"semi": true, | |||
"singleQuote": true | |||
} |
@@ -0,0 +1,17 @@ | |||
{ | |||
// Use IntelliSense to learn about possible attributes. | |||
// Hover to view descriptions of existing attributes. | |||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 | |||
"version": "0.2.0", | |||
"configurations": [ | |||
{ | |||
"type": "node", | |||
"request": "launch", | |||
"name": "Launch Program", | |||
"skipFiles": [ | |||
"<node_internals>/**" | |||
], | |||
"program": "${workspaceFolder}\\script.js" | |||
} | |||
] | |||
} |
@@ -0,0 +1,71 @@ | |||
1<!DOCTYPE html> | |||
<html lang="en"> | |||
<head> | |||
<meta charset="UTF-8"> | |||
<meta name="viewport" content="width=device-width, initial-scale=1"> | |||
<title>Hangman</title> | |||
<link rel="stylesheet" | |||
href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css"> | |||
<link rel="stylesheet" href="style.css"> | |||
</head> | |||
<body> | |||
<section class="hero is-primary"> | |||
<div class="hero-body"> | |||
<div class="container"> | |||
<h1 class="title"> | |||
Hangman | |||
</h1> | |||
</div> | |||
</div> | |||
</section> | |||
<section class="columns"> | |||
<aside class="column"> | |||
<div id="letter-container"> | |||
<div class="letter">A</div> | |||
<div class="letter">B</div> | |||
<div class="letter">C</div> | |||
<div class="letter">D</div> | |||
<div class="letter">E</div> | |||
<div class="letter">F</div> | |||
<div class="letter">G</div> | |||
<div class="letter">H</div> | |||
<div class="letter">I</div> | |||
<div class="letter">J</div> | |||
<div class="letter">K</div> | |||
<div class="letter">L</div> | |||
<div class="letter">M</div> | |||
<div class="letter">N</div> | |||
<div class="letter">O</div> | |||
<div class="letter">P</div> | |||
<div class="letter">Q</div> | |||
<div class="letter">R</div> | |||
<div class="letter">S</div> | |||
<div class="letter">T</div> | |||
<div class="letter">U</div> | |||
<div class="letter">V</div> | |||
<div class="letter">W</div> | |||
<div class="letter">X</div> | |||
<div class="letter">Y</div> | |||
<div class="letter">Z</div> | |||
</div> | |||
</aside> | |||
<main class="column is-three-quarters"> | |||
<section id="image-container"> | |||
<img id="image" src="images/hangman01.png" alt=""> | |||
</section> | |||
<section id="solution-container"> | |||
<div class="solution-letter"></div> | |||
<div class="solution-letter"></div> | |||
<div class="solution-letter"></div> | |||
<div class="solution-letter"></div> | |||
<div class="solution-letter"></div> | |||
</section> | |||
<section id="win-lose-container"> | |||
You won! | |||
</section> | |||
</main> | |||
</section> | |||
<script src="script.js"></script> | |||
</body> | |||
</html> |
@@ -0,0 +1,119 @@ | |||
const randomWords = [ | |||
'condition', | |||
'bottom', | |||
'lineage', | |||
'trip', | |||
'reporter', | |||
'paper', | |||
'colorful', | |||
'agent', | |||
'justify', | |||
'torture', | |||
'cap', | |||
'earthflax', | |||
'payment', | |||
'research', | |||
'picture', | |||
'garage', | |||
'honor', | |||
'memorial', | |||
'planet', | |||
'biography', | |||
'profound', | |||
'rumor', | |||
'gear', | |||
'bedroom', | |||
'orthodox', | |||
'penalty', | |||
'grief', | |||
'promote', | |||
'roof', | |||
'suite', | |||
'moving', | |||
'killer', | |||
'museum', | |||
'essay', | |||
'fever', | |||
'dignity', | |||
'shadow', | |||
'enjoy', | |||
'kill', | |||
'shy', | |||
'counter', | |||
'pawn', | |||
'button', | |||
'bullet', | |||
'skin', | |||
'rate', | |||
'shop', | |||
'consider', | |||
'other', | |||
'prospect', | |||
]; | |||
const hangManImage = document.querySelector('#image'); | |||
const solutionContainer = document.querySelector('#solution-container'); | |||
const winOrLoseContainer = document.querySelector('#win-lose-container'); | |||
const letterContainer = document.querySelector('#letter-container'); | |||
const letters = document.querySelectorAll('.letter'); | |||
const gameState = { | |||
word: [], | |||
hangman: 1, | |||
turn: 1, | |||
lettersFound: 0, | |||
won: false, | |||
lost: false, | |||
randomWord: function() { | |||
const number = Math.floor(Math.random() * 50); | |||
const rword = randomWords[number].toUpperCase(); | |||
gameState.word = rword; | |||
console.log(rword); | |||
}, | |||
}; | |||
function yolo() { | |||
letters.forEach(letter => { | |||
letter.addEventListener('click', function() { | |||
const splitString = gameState.word.split(''); | |||
if (splitString.indexOf(letter.innerHTML) === -1) { | |||
letter.setAttribute('class', 'letter failed'); | |||
image(); | |||
} else { | |||
letter.setAttribute('class', 'letter success'); | |||
lettersFind(); | |||
} | |||
}); | |||
}); | |||
} | |||
gameState.randomWord(); | |||
yolo(); | |||
function image() { | |||
gameState.hangman++; | |||
const srcImage = 'images/hangman0' + gameState.hangman + '.png'; | |||
hangManImage.src = srcImage; | |||
if (srcImage === 'images/hangman09.png') { | |||
console.log('you lose'); | |||
winOrLoseContainer.innerHTML = 'You lose biitch!'; | |||
letterContainer.style['pointer-events'] = 'none'; | |||
} | |||
} | |||
function lettersFind() { | |||
const spliet = gameState.word.split(''); | |||
gameState.lettersFound++; | |||
if (gameState.lettersFound === spliet.length) { | |||
winOrLoseContainer.innerHTML = 'you win biiitch'; | |||
letterContainer.style['pointer-events'] = 'none'; | |||
} | |||
} | |||
function showLetters() { | |||
const splat = gameState.word.split(''); | |||
for (i = 0; i < splat.length; i++) { | |||
} | |||
} | |||
@@ -0,0 +1,78 @@ | |||
#letter-container{ | |||
padding: .5rem .8rem; | |||
margin: 1rem; | |||
border: solid black .5rem; | |||
display: flex; | |||
flex-flow: row wrap; | |||
justify-content: space-between; | |||
pointer-events: initial; | |||
} | |||
.letter{ | |||
margin: .3rem 0; | |||
-webkit-border-radius: .2rem; | |||
-moz-border-radius: .2rem; | |||
border-radius: .5rem; | |||
min-width: 2.5rem; | |||
line-height: 2.5rem; | |||
background-color: #00a5a5; | |||
text-align: center; | |||
cursor: pointer; | |||
} | |||
.letter:hover{ | |||
background-color: #8ecfcc; | |||
} | |||
.letter.failed{ | |||
cursor: not-allowed; | |||
text-decoration: line-through; | |||
background-color: #b43131; | |||
} | |||
.letter.success { | |||
cursor: not-allowed; | |||
background-color: #009500; | |||
} | |||
#letter-container::after { | |||
content: ""; | |||
min-width: 2.5rem; | |||
} | |||
#image-container{ | |||
padding: 2rem; | |||
text-align: center; | |||
} | |||
#solution-container { | |||
display: flex; | |||
justify-content: center; | |||
} | |||
.solution-letter{ | |||
margin: .2rem .4rem; | |||
text-align: center; | |||
font-size: 2rem; | |||
line-height: 2.5rem; | |||
width: 2.5rem; | |||
height: 2.5rem; | |||
border-bottom: 2px solid black; | |||
} | |||
#win-lose-container{ | |||
-webkit-border-radius: .2rem; | |||
-moz-border-radius: .2rem; | |||
border-radius: .5rem; | |||
min-width: 2.5rem; | |||
line-height: 2.5rem; | |||
background-color: #00a5a5; | |||
text-align: center; | |||
cursor: pointer; | |||
text-align: center; | |||
margin-top: 5rem; | |||
} |
@@ -0,0 +1,38 @@ | |||
## Oefeningen Quizr: | |||
#### Doel: | |||
Een simpele quiz spel met Juist/Fout vragen. | |||
- Er zijn steeds 10 vragen die elk nieuw spel in een willekeurige volgorde worden getoond. | |||
- De antwoorden (of ze al dan niet correct zijn) worden bijgehouden in: | |||
`<div class="result tag is-dark is-large">Vraag 01</div>` | |||
dit element heeft drie mogelijke standen: | |||
- nog niet beantwoord, met de class: `is-dark` | |||
- correct beantwoord, met de class: `is-success` | |||
- fout beantwoord, met de class: `is-danger` | |||
- Het aantal correcte antwoorden word bijgehouden in: | |||
`<span id="total-correct">1</span>` | |||
- De vraag wordt getoond in: | |||
``` | |||
<div id="question" data-index="5"> | |||
Een vraag... | |||
</div> | |||
``` | |||
De index van de houdige vraag wordt bijgehouden in `data-index="0"` | |||
- Antwoorden doe je door te klikken op: | |||
`<a id="answer-true" class="answer button is-success is-medium">True</a>` | |||
of | |||
`<a id="answer-false" class="answer button is-danger is-medium">False</a>` | |||
- Wanneer alle vragen beantwoord zijn wordt in plaats van een vraag het resultaat getoond. | |||
Als er dan op de `#answer-true` knop wordt geklikt begint het spel opnieuw. | |||
De oplossing staat in de map `ex-06_quizr/solution` open dit in je browser om te kijken hoe het | |||
programma hoort te werken. | |||
Succes!! | |||
@@ -0,0 +1,59 @@ | |||
<!DOCTYPE html> | |||
<html lang="en"> | |||
<head> | |||
<meta charset="UTF-8"> | |||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |||
<meta http-equiv="X-UA-Compatible" content="ie=edge"> | |||
<title>Quizr</title> | |||
<link rel="stylesheet" | |||
href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css"/> | |||
<link rel="stylesheet" | |||
href="https://use.fontawesome.com/releases/v5.5.0/css/all.css" | |||
integrity="sha384-B4dIYHKNBt8Bc12p+WXckhzcICo0wtJAoU8YZTY5qE0Id1GSseTk6S+L3BlXeVIU" | |||
crossorigin="anonymous"> | |||
<link rel="stylesheet" href="style.css"> | |||
</head> | |||
<body> | |||
<section class="hero is-primary"> | |||
<div class="hero-body"> | |||
<div class="container"> | |||
<h1 class="title"> | |||
Quizr | |||
</h1> | |||
</div> | |||
</div> | |||
</section> | |||
<section class="columns is-gapless"> | |||
<aside class="column is-one-quarter"> | |||
<div id="result-container"> | |||
<div class="result tag is-dark is-large">Vraag 01</div> | |||
<div class="result tag is-dark is-large">Vraag 02</div> | |||
<div class="result tag is-dark is-large">Vraag 03</div> | |||
<div class="result tag is-dark is-large">Vraag 04</div> | |||
<div class="result tag is-dark is-large">Vraag 05</div> | |||
<div class="result tag is-dark is-large">Vraag 06</div> | |||
<div class="result tag is-dark is-large">Vraag 07</div> | |||
<div class="result tag is-dark is-large">Vraag 08</div> | |||
<div class="result tag is-dark is-large">Vraag 09</div> | |||
<div class="result tag is-dark is-large">Vraag 10</div> | |||
</div> | |||
<div id="total-container"> | |||
<span id="total-correct">1</span>/10 | |||
</div> | |||
</aside> | |||
<main class="column"> | |||
<div id="question-container"> | |||
<div id="question" data-index="-1"> | |||
</div> | |||
<div id="answer-container"> | |||
<a id="answer-true" class="answer button is-success is-medium">True</a> | |||
<a id="answer-false" class="answer button is-danger is-medium">False</a> | |||
</div> | |||
</div> | |||
</main> | |||
</section> | |||
<script src="script.js"></script> | |||
</body> | |||
</html> |
@@ -0,0 +1,107 @@ | |||
const questions = [{ | |||
question: 'Linus Torvalds created Linux and Git.', | |||
correctAnswer: 'True', | |||
}, { | |||
question: 'The programming language "Python" is based off a modified version of "JavaScript".', | |||
correctAnswer: 'False', | |||
}, { | |||
question: 'The logo for Snapchat is a Bell.', | |||
correctAnswer: 'False', | |||
}, { | |||
question: 'RAM stands for Random Access Memory.', | |||
correctAnswer: 'True', | |||
}, { | |||
question: '"HTML" stands for Hypertext Markup Language.', | |||
correctAnswer: 'True', | |||
}, { | |||
question: 'In most programming languages, the operator ++ is equivalent to the statement "+= 1".', | |||
correctAnswer: 'True', | |||
}, { | |||
question: 'The Windows 7 operating system has six main editions.', | |||
correctAnswer: 'True', | |||
}, { | |||
question: 'The Windows ME operating system was released in the year 2000.', | |||
correctAnswer: 'True', | |||
}, { | |||
question: 'The NVidia GTX 1080 gets its name because it can only render at a 1920x1080 screen resolution.', | |||
correctAnswer: 'False', | |||
}, { | |||
question: 'Linux was first created as an alternative to Windows XP.', | |||
correctAnswer: 'False', | |||
}]; | |||
let count = 1; | |||
const correcteAntwoorden = document.getElementById("total-correct"); | |||
const question = document.getElementById("question") | |||
let questionCounter = question.getAttribute("data-index") | |||
let teller = 0; | |||
const falseBtn = document.getElementById("answer-false").addEventListener("click", trueFalseClick); | |||
const trueBtn = document.getElementById("answer-true").addEventListener("click", trueFalseClick); | |||
init(questions); | |||
question.innerHTML = questions[teller].question; | |||
function init(questions) { | |||
for (let i = questions.length - 1; i > 0; i--) { | |||
const j = Math.floor(Math.random() * (i + 1)); | |||
[questions[i], questions[j]] = [questions[j], questions[i]]; | |||
} | |||
console.log(questions) | |||
return questions; | |||
} | |||
function trueFalseClick() { | |||
showQuestions(); | |||
const resultTag = document.getElementById("result-container").getElementsByTagName('div'); | |||
questionCounter++; | |||
console.log(teller); | |||
const arrayAnswer = questions[questionCounter].correctAnswer; | |||
console.log(arrayAnswer); | |||
if(this.innerHTML === "False"){ | |||
if(this.innerHTML === arrayAnswer) { | |||
correcteAntwoordenTeller(); | |||
resultTag[teller -1].setAttribute("class", "result tag is-success is-large"); | |||
}else { | |||
resultTag[teller -1].setAttribute("class", "result tag is-danger is-large"); | |||
} | |||
} | |||
if(this.innerHTML === "True") { | |||
if(this.innerHTML === arrayAnswer) { | |||
correcteAntwoordenTeller(); | |||
resultTag[teller -1].setAttribute("class", "result tag is-success is-large"); | |||
}else { | |||
resultTag[teller -1].setAttribute("class", "result tag is-danger is-large"); | |||
} | |||
} | |||
} | |||
function showQuestions() { | |||
if(teller === 9) { | |||
console.log("win-conditie") //win-conditie maken | |||
question = correcteAntwoorden.innerHTML; | |||
document.getElementById("answer-true").addEventListener('click', buttonRestart); | |||
}else{ | |||
teller++; | |||
let arrayQuestion = questions[teller].question; | |||
question.innerHTML = arrayQuestion; | |||
} | |||
} | |||
function correcteAntwoordenTeller() { | |||
count++; | |||
correcteAntwoorden.innerHTML = count; | |||
} | |||
function buttonRestart() { | |||
count = 1; | |||
teller = 0; | |||
questionCounter = -1; | |||
init(questions); | |||
} | |||
@@ -0,0 +1,39 @@ | |||
#result-container{ | |||
display: flex; | |||
flex-direction: column; | |||
border: 5px solid #4a4a4a; | |||
padding: .375rem .75rem; | |||
} | |||
.result { | |||
margin: .375rem 0; | |||
} | |||
#total-container{ | |||
background-color: #363636; | |||
color: #f5f5f5; | |||
text-align: center; | |||
font-size: 1.25rem; | |||
padding: .75rem; | |||
} | |||
#question-container{ | |||
border: 5px solid #4a4a4a; | |||
height: 100%; | |||
display: flex; | |||
flex-direction: column; | |||
justify-content: space-around; | |||
} | |||
#question{ | |||
font-size: 2rem; | |||
text-align: center; | |||
} | |||
#answer-container{ | |||
display: flex; | |||
justify-content: center; | |||
} | |||
#answer-container .button{ | |||
margin: 0 1rem; | |||
} |