Initial commit
This commit is contained in:
commit
6c1a85bcf1
4
.prettierrc
Normal file
4
.prettierrc
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"singleQuote": true,
|
||||||
|
"trailingComma": "all"
|
||||||
|
}
|
257
README.md
Normal file
257
README.md
Normal file
|
@ -0,0 +1,257 @@
|
||||||
|
# Naloga 1
|
||||||
|
|
||||||
|
Izdelali boste spletno stran, ki iz strežnika naloži seznam uporabnikov in jih prikaže v tabeli.
|
||||||
|
|
||||||
|
Če se vam vmes kdaj zatakne, je vsa koda na voljo na tem repozitoriju.
|
||||||
|
|
||||||
|
![Slika spletne strani](screenshots/final.png)
|
||||||
|
|
||||||
|
## Navodila za izdelavo
|
||||||
|
|
||||||
|
### Osnovna postavitev
|
||||||
|
|
||||||
|
- Ustvarimo datoteke `index.html`, `style.css` in `script.js`.
|
||||||
|
- Generiramo osnovno postavitev spletne strani (v VS Code pritisnemo `!` in `Enter`).
|
||||||
|
|
||||||
|
```html
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<title>Naloga 1</title>
|
||||||
|
</head>
|
||||||
|
<body></body>
|
||||||
|
</html>
|
||||||
|
```
|
||||||
|
|
||||||
|
- V datoteko `index.html` povežemo `style.css` tako, v `<head>` dodamo vrstico
|
||||||
|
|
||||||
|
```html
|
||||||
|
<link rel="stylesheet" href="style.css" />
|
||||||
|
```
|
||||||
|
|
||||||
|
- Nato na enak način povežemo še `script.js`:
|
||||||
|
|
||||||
|
```html
|
||||||
|
<script defer src="script.js"></script>
|
||||||
|
```
|
||||||
|
|
||||||
|
### HTML
|
||||||
|
|
||||||
|
- V `<body>` spletne strani dodamo naslov `<h1>` in tabelo (`<table>`) z idjem `id="users"`.
|
||||||
|
- Nato v tabelo dodamo še znački za glavo (`<thead>`) in telo (`<tbody>`) tabele.
|
||||||
|
- Podatki, ki jih bomo prikazovali o uporabnikih so `id`, `ime`, `uporabniško ime` in `email`, zato v glavo tabele dodamo `<th>` za vsakega od njih.
|
||||||
|
|
||||||
|
- Zaženite `Live Server` ali pa odprite `index.html` v brskalniku in spletna stran bi morala izgledati tako:
|
||||||
|
|
||||||
|
![Slika HTML](screenshots/html.png)
|
||||||
|
|
||||||
|
### JavaScript
|
||||||
|
|
||||||
|
V `script.js` bomo napisali kodo, ki bo iz strežnika naložila seznam uporabnikov in jih dodala v html tabelo.
|
||||||
|
|
||||||
|
- Ustvarimo novo asinhrono funkcijo `getUsers()`:
|
||||||
|
|
||||||
|
```js
|
||||||
|
async function getUsers() {}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Nalaganje podatkov s strežnika
|
||||||
|
|
||||||
|
- Za nalaganje podatkov s strežnika uporablajmo vgrajeno funkcijo `fetch()`.
|
||||||
|
|
||||||
|
- Beseda `await` počaka na odgovor s strežnika, medtem ko ostala koda na spletni strani še vedno teče.
|
||||||
|
|
||||||
|
- Naložimo podatke s strežnika in odgovor shranimo v konstanto `response`:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const response = await fetch('https://jsonplaceholder.typicode.com/users');
|
||||||
|
```
|
||||||
|
|
||||||
|
- Odgovor dobimo v obliki JSONa (JavaScript Object Notation):
|
||||||
|
|
||||||
|
- Kvadratni oklepaji `[ ]` predstavljajo **seznam**
|
||||||
|
- Zaviti oklepaji `{ }` predstavljajo **objekt**
|
||||||
|
|
||||||
|
```json
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"name": "Leanne Graham",
|
||||||
|
"username": "Bret",
|
||||||
|
"email": "Sincere@april.biz"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 2,
|
||||||
|
"name": "Ervin Howell",
|
||||||
|
"username": "Antonette",
|
||||||
|
"email": "Shanna@melissa.tv"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 3,
|
||||||
|
"name": "Clementine Bauch",
|
||||||
|
"username": "Samantha",
|
||||||
|
"email": "Nathan@yesenia.net"
|
||||||
|
},
|
||||||
|
...
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
- Pretvorimo JSON v JavaScript objekt s klicom funkcije `json()` in ga shranimo v konstanto `users`:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const users = await response.json();
|
||||||
|
```
|
||||||
|
|
||||||
|
- `users` sedaj izgleda tako:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const users = [
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
name: 'Leanne Graham',
|
||||||
|
username: 'Bret',
|
||||||
|
email: 'Sincere@april.biz',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 2,
|
||||||
|
name: 'Ervin Howell',
|
||||||
|
username: 'Antonette',
|
||||||
|
email: 'Shanna@melissa.tv',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 3,
|
||||||
|
name: 'Clementine Bauch',
|
||||||
|
username: 'Samantha',
|
||||||
|
email: 'Nathan@yesenia.net',
|
||||||
|
},
|
||||||
|
...
|
||||||
|
];
|
||||||
|
```
|
||||||
|
|
||||||
|
- Vsebino spremenljivke lahko izpišete v konzolo z funkcijo
|
||||||
|
|
||||||
|
```js
|
||||||
|
console.log(users);
|
||||||
|
```
|
||||||
|
|
||||||
|
- Do konzole dostopate: `Desni klik` > `inspect` > `console`
|
||||||
|
|
||||||
|
#### Vstavljanje podatkov v tabelo
|
||||||
|
|
||||||
|
Sedaj ko imamo želene podatke v spremenljivki `users`, jih moramo vstaviti v tabelo.
|
||||||
|
|
||||||
|
- Z zanko `for` zaženemo kodo za vsakega uporabnika
|
||||||
|
|
||||||
|
- Spremenljivka `user` se vsak krog spremeni na naslednjega v seznamu `users`
|
||||||
|
|
||||||
|
```js
|
||||||
|
for (const user of users) {
|
||||||
|
// Vso nadalnjo kodo pišite sem notri
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- Da ustvarimo novo vrstico v tabeli uporabimo funkcijo
|
||||||
|
|
||||||
|
```js
|
||||||
|
const row = document.createElement('tr');
|
||||||
|
```
|
||||||
|
|
||||||
|
- Enaka stvar v html-ju:
|
||||||
|
|
||||||
|
```html
|
||||||
|
<tr></tr>
|
||||||
|
```
|
||||||
|
|
||||||
|
- Nato dodamo vsebino z `innerHTML`
|
||||||
|
- Da lahko besedilo napišemo v več vrstic, namesto navadnih narekovajev uporabimo backticke `` ` `` (AltGr + 7).
|
||||||
|
- Poleg tega lahko spremenljivke vstavljamo direktno v besedilo z `${spremenljivka}`.
|
||||||
|
|
||||||
|
```js
|
||||||
|
row.innerHTML = `
|
||||||
|
<td>${user.id}</td>
|
||||||
|
<td>${user.name}</td>
|
||||||
|
<td>${user.username}</td>
|
||||||
|
<td>${user.email}</td>
|
||||||
|
`;
|
||||||
|
```
|
||||||
|
|
||||||
|
- Enaka stvar v html-ju:
|
||||||
|
|
||||||
|
```html
|
||||||
|
<tr>
|
||||||
|
<td>(vrednost user.id)</td>
|
||||||
|
<td>(vrednost user.name)</td>
|
||||||
|
<td>(vrednost user.username)</td>
|
||||||
|
<td>(vrednost user.email)</td>
|
||||||
|
</tr>
|
||||||
|
```
|
||||||
|
|
||||||
|
- Poiščemo telo tabele z idjem `users` (to kodo dodamo čisto na vrhu `script.js`):
|
||||||
|
|
||||||
|
```js
|
||||||
|
const table = document.querySelector('table#users > tbody');
|
||||||
|
```
|
||||||
|
|
||||||
|
- Na koncu dodamo vrstico v `tbody`:
|
||||||
|
|
||||||
|
```js
|
||||||
|
table.appendChild(row);
|
||||||
|
```
|
||||||
|
|
||||||
|
- Spletna stran bi sedaj morala izgledati tako:
|
||||||
|
|
||||||
|
![Spletna stran JavaScipt](screenshots/javascript.png)
|
||||||
|
|
||||||
|
### CSS
|
||||||
|
|
||||||
|
- Pojdite na spletno stran [fonts.google.com](https://fonts.google.com) in si izberite pisavo.
|
||||||
|
- Kliknite nanjo in potem kliknite na `Select Regular 400`
|
||||||
|
- Kopirajte vrstico, ki se začne z `@import url('...');` in jo prilepite na vrh `style.css`.
|
||||||
|
- Nato dodajte vrstico, ki se začne s `font-family: ...;` v značko `body`
|
||||||
|
|
||||||
|
```css
|
||||||
|
@import url('...');
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: ...;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- Bodyju nastavite `margin` na `0` in višino na `100vh` (100% višina zaslona)
|
||||||
|
- Sledi najtežja stvar v css-su - centriranje elementov na spletni strani
|
||||||
|
- Eden on načinov, kako lahko to dosežemo je s pomočjo flexboxa (še vedno v znački body)
|
||||||
|
|
||||||
|
```css
|
||||||
|
body {
|
||||||
|
...
|
||||||
|
|
||||||
|
display: flex; // Nastavimo prikaz na flex
|
||||||
|
flex-direction: column; // Elementi naj bojo v stolpcu - en nad drugim
|
||||||
|
align-items: center; // Elemente centriramo levo-desno
|
||||||
|
justify-content: center; // Elemente centriramo gor-dol
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- Celicam tabele dodamo obrobe (td - celice v telesu, th - celice v glavi) in `6px` prostora v vsebini celic
|
||||||
|
|
||||||
|
```css
|
||||||
|
#users td,
|
||||||
|
th {
|
||||||
|
border: 1px solid black;
|
||||||
|
padding: 6px;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- Nazadnje še centriramo id-je uporabnikov v prvem stolpcu in jih naredimo krepke
|
||||||
|
|
||||||
|
```css
|
||||||
|
#users td:first-child {
|
||||||
|
text-align: center;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- Če spletna stran izgleda podobna tej na sliki, potem vam je uspelo
|
||||||
|
|
||||||
|
![Slika spletne strani](screenshots/final.png)
|
23
index.html
Normal file
23
index.html
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<title>Naloga 1</title>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="style.css" />
|
||||||
|
<script defer src="script.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Users</h1>
|
||||||
|
|
||||||
|
<table id="users">
|
||||||
|
<thead>
|
||||||
|
<th>ID</th>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Username</th>
|
||||||
|
<th>Email</th>
|
||||||
|
</thead>
|
||||||
|
<tbody></tbody>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
</html>
|
BIN
screenshots/final.png
Normal file
BIN
screenshots/final.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 69 KiB |
BIN
screenshots/html.png
Normal file
BIN
screenshots/html.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.9 KiB |
BIN
screenshots/javascript.png
Normal file
BIN
screenshots/javascript.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 67 KiB |
20
script.js
Normal file
20
script.js
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
const table = document.querySelector('table#users > tbody');
|
||||||
|
|
||||||
|
async function getUsers() {
|
||||||
|
const response = await fetch('https://jsonplaceholder.typicode.com/users');
|
||||||
|
const users = await response.json();
|
||||||
|
|
||||||
|
for (const user of users) {
|
||||||
|
const row = document.createElement('tr');
|
||||||
|
row.innerHTML = `
|
||||||
|
<td>${user.id}</td>
|
||||||
|
<td>${user.name}</td>
|
||||||
|
<td>${user.username}</td>
|
||||||
|
<td>${user.email}</td>
|
||||||
|
`;
|
||||||
|
|
||||||
|
table.appendChild(row);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
getUsers();
|
28
style.css
Normal file
28
style.css
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
@import url('https://fonts.googleapis.com/css2?family=Nunito&display=swap');
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
height: 100vh;
|
||||||
|
|
||||||
|
font-family: 'Nunito', sans-serif;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#users {
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
#users td,
|
||||||
|
th {
|
||||||
|
border: 1px solid black;
|
||||||
|
padding: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#users td:first-child {
|
||||||
|
font-weight: bold;
|
||||||
|
text-align: center;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user