# PAYBACK Review
## HTML
```html
<h2>Twoja przyszłość zaczyna się dziś.</br>Zadbaj o nią!</h2>
```
Zamiast używania ``<br />`` śmiało można wrzucić te dwie części w paragrafy np:
```html
<h2>
<p>Twoja przyszłość zaczyna się dziś.</p>
<p>Zadbaj o nią!</p>
</h2>
```
Łatwiej wtedy kontrolować paddingi/marginy pomiędzy wierszami.
```html
<form name="kontakt_form" action="">
```
Wkradła Ci się polsko brzmiąca klasa, pamiętajmy że nie piszemy dla PKP, to samo w atrybutach **id** i **name** w ``<input />``
```html
<section class="footer_section">
```
Nie wiem do końca gdzie to będzie wklejane, ale podejrzewam, że śmiało można tu użyć tagu ``<footer>``.
Teoretycznie cała sekcja **form_section** mogła by być artykułem ``<article>``, zauważ że jest to część, która śmiało mogłaby istnieć w internecie bez reszty :) Hierarchia nagłówków jest zachowana ok, wtedy dodatkowo **info__paragraph** mógłby być stopką ``<footer>`` dla artykułu :)
## CSS
Wszystko ok, ale dalej polecam zapoznanie się z BEM - trzeba myśleć o późniejszym utrzymaniu i łatwości rozszerzania kodu.
Zerknij na button:
```css
.main_button {
font-size: 15px;
color: white;
font-family: "PAYBACK";
background-color: #0046aa;
box-shadow: inset 0 -2px 0 0 #002e79;
border-radius: 2px;
padding: 13px;
text-align: center;
}
```
W przypadku gdybyś chciał zrobić takiego samego buttona, ale z innym kolorem możesz się bawić selektorami, ale łatwiejsze będzie stworzenie czegoś takiego:
```css
.button {
font-size: 15px;
color: white;
font-family: "PAYBACK";
/* itp */
/* i tu śmiało rozszerzamy jego możliwości przez modyfikatory */
&--main { /* albo primary, jak zwał tak zwał */
background-color: #0046aa;
box-shadow: inset 0 -2px 0 0 #002e79;
}
/* i bez problemu robimy inne właściwości */
&--secondary {
color: red;
}
}
```
Wtedy używanie go w HTML sprowadza się do klas: **button button—main**.
Sumując to wszystko, do głównej klasy sprowadzasz wszystkie elementy wspólne, które na pewno będą występować, potem je modyfikujesz.
## JS
Haha, coś na co mam uczulenie. Śmiało możesz używać **const** zamiast **let** jeśli wartość się nie zmienia. Nawet w przypadku obiektów czy tablic polecam używać **const** ponieważ i tak będziesz mógł dodawać do nich właściwości (bo zmienna to tylko referencja w pamięci), a będziesz miał pewność, że nic przez przypadek nie nadpiszę twojego kodu.
Funkcje do walidacji można rozbić na mniejszą, bo kłóci się trochę z zasadą **single responsibility principle**, tj i waliduje dane i manipuluje elementami DOM.
```js
firstName.addEventListener('focus', (event) => {
event.target.parentNode.classList.remove("error");
});
lastName.addEventListener('focus', (event) => {
event.target.parentNode.classList.remove("error");
});
phoneNumber.addEventListener('focus', (event) => {
event.target.parentNode.classList.remove("error");
});
paybackNumber.addEventListener('focus', (event) => {
event.target.parentNode.classList.remove("error");
});
```
Podejrzewam, że można to uzyskać za pomocą **Event Delegation** - bo co gdybyś chciał dodać kolejnego inputa? Wiąże się to z dodaniem następnych linii kodu, które obsłużą Ci focus i blur :)