Serwis używa plików cookies do analizy ruchu i poprawy działania. Szczegóły
E.14-02-22.01-SGStyczeń 2022 · 39 kroków · ok. 72 min · 36 kryteriów z klucza
Rozwiązanie krok po kroku: Hurtownia kawy z kalkulatorem zamówienia (Nowoczesny kod (flex, addEventListener))
To drugi sposób rozwiązania tego samego arkusza. Wynik jest ten sam - strony index.html, zamowienia.html i blog.html, arkusz stylów styl.css, skrypt liczący koszt zamówienia, przeskalowane logo i obraz kawa.png - i tak samo spełnia każde kryterium klucza. Inna jest droga:
znaczniki semantyczne: menu to <nav>, blok lewy - <main>, blok prawy z ofertą - <aside>, baner - <header>,
flexbox zamiast float: <body> układa bloki w wiersze, a szerokości 75%/25% i 50%/50% z arkusza wyznaczają podział; nie trzeba clear,
zmienne CSS dla kolorów, box-sizing: border-box, przekreślenie trzeciego elementu listy przez :nth-child(3) (bez dopisywania identyfikatora w HTML) i styl :focus-visible dla nawigacji klawiaturą,
etykiety <label for> przy polach formularza,
skrypt w osobnym plikuskrypt.js z defer, addEventListener, cennik z tabeli 1 jako słownik zamiast drabinki if, sprawdzenie wagi i textContent.
To arkusz E.14 ze stycznia 2022 - kwalifikacji formuły 2012, którą zastąpiła INF.03. Obrazy pochodzą z oryginalnego archiwum CKE (załącznik na stronie arkusza), układ jest zmierzony w Chrome, a skrypt sprawdzony prawdziwym kliknięciem.
Jak liczą się punkty. Klucz ma 36 kryteriów (R.1.1 - R.5.4), każde za 1 punkt. Próg zdania części praktycznej to 75%, czyli 27 punktów - można stracić 9 kryteriów i nadal zdać. Przy każdym kroku jest napisane, które kryteria spełnia; egzaminator ocenia spełnienie kryteriów z klucza, nie zgodność z tym kodem. Klucz ocenia działanie przycisku i obliczenia, nie sposób podpięcia funkcji.
Suwak i strzałki obok niego - albo ←→ na klawiaturze - przechodzą krok po kroku; wyjaśnienie, pliki i podgląd zmieniają się razem z krokiem.
Lista „Etap” przenosi od razu do wybranego etapu.
„Rozwiązuję samodzielnie” chowa rozwiązanie kroku - najpierw własna próba, potem odsłonięcie.
„Tryb prezentacji” pokazuje same kroki, bez menu strony - na rzutnik.
Etap 1: Grafika
Kroki 1-7 · po tym etapie masz 7 z 36 kryteriów (pkt)
Krok 1: Folder zdającego i archiwum pliki2
ok. 2 min
Polecenie z arkusza
Aby wykonać zadanie, zaloguj się na konto Egzamin bez hasła. Na pulpicie znajdziesz archiwum ZIP o nazwie pliki2.zip zabezpieczone hasłem: @K4wA! Archiwum należy rozpakować. Na pulpicie konta Egzamin utwórz folder. Jako nazwy folderu użyj numeru, którym został podpisany arkusz. Rozpakowane pliki umieść w tym folderze. Wyniki swojej pracy zapisz w tym folderze.
Na pulpicie tworzysz folder nazwany numerem, którym podpisano arkusz (PESEL) - w tym rozwiązaniu w jego miejscu stoi imię i nazwisko autora, Bartosz Bryniarski. Archiwum rozpakowujesz do tego folderu z hasłem @K4wA! (wielkość liter ma znaczenie). W środku są dwa obrazy: logo.png (220 × 122 px, napis „I ♥ COFFEE” z ziaren kawy) i ksztalty.png (414 × 492 px, naczynia kuchenne na przezroczystym tle).
Archiwum do pobrania jest na stronie arkusza w serwisie - CKE wydała je pod nazwą pliki4.zip przy zadaniu ze stycznia 2019, z tym samym hasłem i tymi samymi plikami.
Krok 2: logo.png: wysokość 110 px
Kryteria:
R.1.1 Obraz logo przeskalowano z zachowaniem proporcji tak, że jego wysokość wynosi 110 px, odpowiadająca temu szerokość wynosi 198 px (± 5 px)
ok. 2 min
Polecenie z arkusza
Obraz logo.png przeskaluj z zachowaniem proporcji tak, aby wysokość wynosiła dokładnie 110 px.
W edytorze grafiki rastrowej (np. GIMP): Obraz → Skaluj obraz, łańcuch między szerokością a wysokością zamknięty (to jest „zachowanie proporcji”), wysokość 110 px. Szerokość przelicza się sama: 220 × 110 / 122 = 198,4, czyli 198 px - dokładnie tyle podaje klucz (198 px ±5). Eksport pod tą samą nazwą: Plik → Nadpisz logo.png. Wysokość 110 px to także wysokość bloku menu i logo na stronie.
Typowe błędy
Rozpięty łańcuch i sama wysokość 110 px dają logo 220 × 110 - spłaszczone, bez punktu.
Podgląd strony po tym kroku
Krok 3: Wycięcie filiżanki i imbryka
ok. 4 min
Polecenie z arkusza
Z grafiki ksztalty.png wytnij kształt filiżanki i imbryka (obrazy 1a i 1b) z zachowaniem przezroczystości oraz tak, aby kształty były w całości i żadne fragmenty innych kształtów nie były widoczne.
W ksztalty.png naczynia leżą blisko siebie - imbryk sąsiaduje z dzbankiem i mleczniczką, a filiżanka ze spodkiem stoi tuż pod nim. W GIMP-ie narzędzie Zaznaczanie rozmytego kliknięte na imbryku zaznacza tylko jego (przezroczyste tło oddziela kształty); pokrywka i ucho są połączone z korpusem, więc wejdą w zaznaczenie w całości. Edycja → Kopiuj i Edycja → Wklej jako → Nowy obraz - nowy obraz zachowuje przezroczystość. To samo z filiżanką: kliknięcie zaznacza ją razem ze spodkiem.
Na podglądzie oba wycięte kształty na szachownicy (tak edytor pokazuje przezroczystość) - bez fragmentów sąsiednich naczyń.
Typowe błędy
Zaznaczenie prostokątne zostawia w rogach kawałki dzbanka albo mleczniczki - klucz R.1.4 wymaga, by żadne fragmenty innych kształtów nie były widoczne.
Podgląd strony po tym kroku
Krok 4: Obraz kawa: filiżanka i pochylony imbryk
Kryteria: ,
R.1.3 Obraz z R.1.2 jest przezroczysty
R.1.4 Na obrazie umieszczono kształt filiżanki i imbryka. Imbryk znajduje się po prawej stronie, jest pochylony, tak jakby jego zawartość wlewała się do filiżanki oraz kształty są w całości i żadne fragmenty innych kształtów nie są widoczne
ok. 4 min
Polecenie z arkusza
Za pomocą edytora grafiki wektorowej przygotuj nowy obraz zgodny z obrazem 1c. Uwzględnij wymagania: obraz jest przezroczysty; widoczne są na nim kształt filiżanki i imbryka. Imbryk znajduje się po prawej stronie, jest obrócony, tak jakby jego zawartość wlewała się do filiżanki.
Kompozycję składasz w edytorze grafiki wektorowej (np. Inkscape) - jest potrzebny do napisu na kole. Nowy dokument, Plik → Importuj oba wycięte kształty (PNG zachowa przezroczystość). Filiżankę ustaw po lewej, niżej, imbryk po prawej, wyżej. Imbryk obróć narzędziem zaznaczania: drugie kliknięcie na obiekcie pokazuje strzałki obrotu - w tym rozwiązaniu o 30 stopni w lewo, tak że dziobek opada nad filiżankę, jakby kawa się z niego wlewała (obraz 1c). W Inkscape obrót o konkretny kąt daje Obiekt → Przekształć → Obrót.
Tło dokumentu zostaje przezroczyste - w Inkscape strona nie ma tła, dopóki go nie ustawisz.
Krok 5: Napis „Poczęstuj się kawą” na niewidocznym kole
Kryteria: ,
R.1.5 Na obrazie umieszczono napis koloru brązowego (dowolny odcień) o treści: „Poczęstuj się kawą” oraz tekst jest zapisany dowolną czcionką typu Serif (widoczne szeryfy)
R.1.6 Tekst jest opisany na kole i koło nie jest widoczne
ok. 5 min
Polecenie z arkusza
Widoczny jest napis koloru brązowego o treści „Poczęstuj się kawą”. Tekst zapisany jest dowolną czcionką typu Serif. Na obrazie 1c jest to Georgia, dopuszczalne również inne czcionki Serif, np. Times New Roman. Tekst jest opisany na kole, koło jest niewidoczne.
W Inkscape:
narzędziem Elipsa z klawiszem Ctrl rysujesz koło wokół filiżanki i imbryka,
narzędziem Tekst piszesz Poczęstuj się kawą, krój Georgia (szeryfowy), duży rozmiar, kolor brązowy (tu #8b5a00),
zaznaczasz tekst i koło (Shift) i wybierasz Tekst → Wstaw na ścieżkę - litery układają się wzdłuż okręgu,
koło ma zostać niewidoczne: zaznacz je (np. w panelu Obiekty) i zdejmij mu obrys i wypełnienie (X na pasku kolorów przy wciśniętym Shift usuwa obrys). Nie usuwaj koła - tekst zniknąłby razem ze ścieżką.
Początek tekstu przesuwasz, obracając koło - napis ma biec od lewego dołu przez górę na prawo, jak na obrazie 1c. Tu został wyśrodkowany na łuku od 120 do 25 stopni (licząc zgodnie z ruchem wskazówek zegara od godziny 3).
Typowe błędy
Usunięte koło zabiera ze sobą tekst na ścieżce. Koło z widocznym obrysem to strata R.1.6.
Podgląd strony po tym kroku
Krok 6: Zrzut ekranu edytor.png
Kryteria:
R.1.7 Czynność umieszczenia tekstu na kole udokumentowano zrzutem ekranu w pliku edytor.png , na którym widoczny jest edytor grafiki wektorowej i funkcja wstawiająca tekst na ścieżkę
ok. 2 min
Polecenie z arkusza
Aby udokumentować umieszczenie tekstu na kole wykonaj zrzut ekranu, na którym będzie widoczne środowisko edytora grafiki wektorowej oraz funkcja (np. menu ze wskazaną funkcją) realizująca to zadanie. Zrzut zapisz w formacie PNG i nazwij edytor. Nie kadruj zrzutu. Powinien on obejmować cały ekran, z widocznym paskiem zadań.
Zrzut robisz w chwili, gdy na ekranie widać okno Inkscape i rozwinięte menu Tekst z podświetloną pozycją Wstaw na ścieżkę - najprościej tuż przed jej kliknięciem w poprzednim kroku. Klawisz Print Screen kopiuje cały ekran (z paskiem zadań), wklejasz go jako nowy obraz w GIMP-ie (Edycja → Wklej jako → Nowy obraz) i eksportujesz jako edytor.png.
Ten zrzut zależy od Twojego stanowiska, dlatego rozwiązanie nie zawiera pliku - to praca do wykonania na egzaminie.
Typowe błędy
Zrzut samego okna (Alt+Print Screen) albo przycięty - bez paska zadań - nie jest oceniany (uwaga w kluczu przy R.1).
Krok 7: Zapis kawa.png, wysokość najwyżej 400 px
Kryteria:
R.1.2 Obraz kawa zapisano w formacie umożliwiającym zapis przezroczystości, np. PNG oraz jego wysokość jest nie większa niż 400 px
ok. 2 min
Polecenie z arkusza
Utworzony obraz należy zapisać jako kawa w formacie umożliwiającym zapisanie przezroczystości. Obraz kawa powinien mieć wysokość nie większą niż 400 px.
Plik → Eksportuj (w Inkscape panel eksportu), format PNG - zapisuje przezroczystość; obszar eksportu: rysunek (sama treść, bez pustej strony). Wysokość ustawiasz w polach rozmiaru eksportu, tu 380 px przy szerokości 439 px - mniej niż dopuszczalne 400 px. Nazwa pliku: kawa.png.
Typowe błędy
Eksport do JPEG wypełnia tło białym kolorem - przepada przezroczystość (R.1.3) i format (R.1.2). Eksport całej strony A4 daje obraz wyższy niż 400 px.
Podgląd strony po tym kroku
Etap 2: Strona index.html
Kroki 8-19 · po tym etapie masz 14 z 36 kryteriów (pkt)
Krok 8: Plik index.html
ok. 1 min
Polecenie z arkusza
Cechy witryny: strona główna o nazwie index.html oraz podstrony zamowienia.html i blog.html. Strona główna oraz podstrona zamówienia są identyczne, za wyjątkiem panelu lewego.
Szkielet HTML5 strony głównej. Podstrona zamówień będzie jej kopią z innym blokiem lewym.
Cechy wspólne dla stron index.html i zamówienia.html: zastosowany właściwy standard kodowania polskich znaków.
<meta charset="UTF-8"> - kodowanie polskich znaków. viewport każe telefonowi wyświetlić stronę w jego rzeczywistej szerokości - arkusz tego nie wymaga, ale należy do każdej współczesnej strony. R.2.1 przyjdzie po utworzeniu blog.html.
R.2.3 Wygląd przynajmniej jednej strony zdefiniowano dzieląc ją na bloki: menu, logo, baner, lewy, prawy, stopka. Zastosowano znaczniki sekcji
ok. 2 min
Polecenie z arkusza
Podział strony na bloki: na górze dwa bloki: menu i logo, poniżej baner, poniżej dwa bloki: lewy i prawy oraz na dole stopka. Podział zrealizowany za pomocą znaczników sekcji tak, aby układ bloków strony po uruchomieniu w przeglądarce, był zgodny z Obrazem 2.
menu - <nav>, blok z główną nawigacją witryny (czytnik ekranu pozwala do niego przeskoczyć),
logo - <section>,
baner - <header>,
blok lewy - <main>: obraz kawa na stronie głównej, formularz na podstronie - to jest treść główna,
blok prawy - <aside>: oferta, ta sama na obu stronach,
stopka - <footer>.
Identyfikatory zostają te same co w wersji podstawowej, żeby style trafiały w bloki jednoznacznie.
R.2.4 Na przynajmniej jednej stronie w banerze zapisano h1: "Sklep z kawą" oraz w bloku prawym zapisano h3: "Oferta"
ok. 1 min
Polecenie z arkusza
Zawartość bloku prawego: nagłówek trzeciego stopnia o treści: „Oferta”.
Arkusz wymaga <h3>, choć na stronie nie ma <h2>. Na egzaminie znacznik musi być taki, jak w arkuszu; w zwykłym projekcie poziomy nagłówków szłyby po kolei (<h1>, potem <h2>), bo czytniki ekranu budują z nich spis treści strony.
R.2.5 Na przynajmniej jednej stronie w bloku prawym zapisano listę punktowaną o elementach: „Arabica”, „Robusta”, „bezkofeinowa”, „zielona”, zastosowano znaczniki <ul>, <li> oraz ich zamknięcia
ok. 1 min
Polecenie z arkusza
Zawartość bloku prawego: lista punktowana (nieuporządkowana) o elementach: „Arabica”, „Robusta”, „bezkofeinowa”, „zielona”.
<ul> z czterema <li>. Trzeci element nie potrzebuje identyfikatora - CSS znajdzie go po pozycji w liście.
Kroki 20-24 · po tym etapie masz 19 z 36 kryteriów (pkt)
Krok 20: Plik zamowienia.html
Kryteria:
R.3.2 Na przynajmniej jednej stronie kliknięcie odnośnika „Strona główna” otwiera plik index.html i kliknięcie odnośnika „Zamówienia” otwiera zamowienia.html
ok. 1 min
Polecenie z arkusza
Strona główna oraz podstrona zamówienia są identyczne, za wyjątkiem panelu lewego.
Kopia index.html jako zamowienia.html z pustym <main> - dostanie formularz. Działają odnośniki „Strona główna” i „Zamówienia”.
R.3.4 Przynajmniej jedno pole edycyjne jest typu number
ok. 1 min
Polecenie z arkusza
Cechy bloku lewego dla strony zamowienia.html: napis „Podaj numer kawy: ”, pole edycyjne typu numerycznego.
<label for="coffee"> łączy napis z polem o tym identyfikatorze: kliknięcie napisu ustawia kursor w polu, a czytnik ekranu odczyta jego nazwę. step="1" - numer kawy jest liczbą całkowitą.
Poniżej napis „Podaj wagę w dekagramach: ”, pole edycyjne typu numerycznego.
min="0" - strzałki pola nie zejdą poniżej zera; step="any" dopuszcza wagę z częścią ułamkową (np. 2,5 dag). Wpisanej ręcznie wartości ujemnej to nie blokuje - sprawdzi ją skrypt.
R.2.8 Na stronie zamówień w bloku lewym umieszczono dwa pola edycyjne i przycisk "Zamów"
ok. 2 min
Polecenie z arkusza
Poniżej przycisk o treści „Zamów”, kliknięcie przycisku powoduje wywołanie skryptu.
Przycisk bez onclick - kliknięcie podepnie skrypt po identyfikatorze order-button. Paragraf result z aria-live="polite": czytnik ekranu przeczyta wynik, gdy się pojawi.
R.2.1 Witrynę internetową zapisano w plikach index.html, zamowienia.html i blog.html oraz w przynajmniej jednym pliku zastosowano właściwy standard kodowania polskich znaków
R.3.3 Na przynajmniej jednej stronie działa przynajmniej jeden odnośnik z: „Blog” - blog.html lub „Gatunki kawy” - http://gatunki-kawy.pl/
ok. 1 min
Polecenie z arkusza
W pliku blog.html należy umieścić jedynie tekst „Strona w trakcie budowy”.
Jedno zdanie, bez szkieletu HTML - tyle wymaga arkusz („jedynie tekst”). W prawdziwej witrynie taka strona miałaby szkielet z kodowaniem i tytułem, ale tu dodatkowa treść byłaby niezgodna z poleceniem.
blog.htmlHTMLnowy plik
Strona w trakcie budowy
Podgląd strony po tym kroku (blog.html)
Etap 4: Styl CSS
Kroki 25-33 · po tym etapie masz 31 z 36 kryteriów (pkt)
Krok 25: Plik styl.css: zmienne, border-box i krój Garamond
Kryteria: ,
R.4.1 Ustawiono domyślny krój czcionki dla całej strony na Garamond (dla * lub html, lub body, lub kontenera całej strony)
R.3.6 Strona zawiera działające połączenie z zewnętrznym arkuszem stylów o nazwie styl.css , formatowanie pochodzi jedynie z tego arkusza (poza pogrubieniem numeru zdającego) Uwaga: kryterium to nie jest spełnione również, gdy źle przypisano co najmniej jeden selektor do bloku (np. kropka zamiast #)
ok. 2 min
Polecenie z arkusza
Cechy formatowania CSS: wspólne dla całej strony: krój czcionki Garamond.
zmienne CSS w :root - trzy kolory z arkusza (nazwy kolorów CSS) pod nazwami opisującymi rolę: góra strony, ciemne pasy, panele,
box-sizing: border-box - szerokość i wysokość obejmują dopełnienie, więc baner z padding: 30px i szerokością 100% nie wystaje poza okno,
krój Garamond z zapasowymi: gdy go nie ma, Times New Roman albo dowolny szeryfowy (serif).
Dla bloku logo: kolor tła Olive; szerokość 25%, wysokość 110 px. Dla bloku menu: kolor tła Olive; szerokość 75%, wysokość 110 px.
Kolor ze zmiennej --top (Olive), szerokości 75% i 25%, wysokość 110 px. display: block dla obrazu logo usuwa kilkupikselowy odstęp pod obrazem, który przeglądarka zostawia dla liter z ogonkami (obraz w linii tekstu stoi na linii bazowej) - logo o wysokości 110 px wypełnia blok dokładnie.
R.4.2 Ustawiono kolor tła Olive dla bloku logo i menu oraz SaddleBrown dla banera i stopki, oraz Wheat dla bloku lewego i prawego
R.4.4 Ustawiono wysokość bloków logo i menu na 110px oraz bloków lewego i prawego na 450px
R.4.5 Ustawiono szerokość logo na 25%, menu na 75%, bloków lewego i prawego na 50%
R.4.6 Ustawiono wyrównanie tekstu do środka dla banera, bloku lewego i stopki oraz rozmiar czcionki 150% bloku lewego i prawego
ok. 1 min
Polecenie z arkusza
Wspólne dla bloku lewego i prawego: kolor tła Wheat, szerokość 50%, wysokość 450 px, rozmiar czcionki 150%. Dodatkowo dla bloku lewego: wyrównanie czcionki do środka.
Wspólna reguła dla obu paneli i krótka reguła z wyśrodkowaniem tylko dla lewego.
R.3.1 Układ bloków po uruchomieniu przynajmniej jednej strony w przeglądarce jest zgodny z Obrazem 2 w arkuszu egzaminacyjnym
ok. 3 min
Polecenie z arkusza
Podział strony na bloki: na górze dwa bloki: menu i logo, poniżej baner, poniżej dwa bloki: lewy i prawy oraz na dole stopka. Podział zrealizowany za pomocą znaczników sekcji tak, aby układ bloków strony po uruchomieniu w przeglądarce, był zgodny z Obrazem 2.
<body> jako kontener flex z flex-wrap: wrap: bloki stoją obok siebie, a gdy następny się nie mieści, przechodzi do nowego wiersza. Szerokości z arkusza robią resztę - menu 75% + logo 25% to pierwszy wiersz, baner (100%) drugi, panele 50% + 50% trzeci, stopka czwarty. margin: 0 usuwa domyślny odstęp strony od krawędzi okna. Reguła img z max-width: 100% zmniejsza obrazy na wąskim ekranie.
Pomiar w Chrome przy oknie 1280 px: menu 960 px, logo 320 px, panele po 640 × 450 px, bez poziomego paska przewijania.
R.4.8 Ustawiono cechy: odległość między literami 12px dla selektora h1 oraz wysokość linii 110px, bez podkreślenia dla selektora a
ok. 2 min
Polecenie z arkusza
Dla selektora odnośnika: kolor czcionki LightGrey, marginesy zewnętrzne 30 px, rozmiar czcionki 150%, wysokość linii 110 px, bez podkreślenia.
line-height: 110px równe wysokości menu stawia napisy w połowie jego wysokości. Marginesy 30 px rozsuwają odnośniki w poziomie.
⚠️ Rozbieżność w kluczu: kryterium R.4.8 łączy odstęp liter nagłówka z wysokością linii i brakiem podkreślenia odnośnika, a R.4.10 sprawdza te dwie cechy odnośnika jeszcze raz, razem z resztą jego stylu. Kryteria się pokrywają - oba są spełnione przez ten sam kod.
Krok 32: Odnośnik pod kursorem i przy nawigacji klawiaturą
Kryteria:
R.4.10 Dla odnośnika ustawiono: kolor czcionki LightGrey, rozmiar czcionki 150%, marginesy zewnętrzne 30 px, oraz wysokość linii (line-height) 110px, bez podkreślenia dla selektora a (text-decoration: none) oraz gdy kursor znajdzie się na odnośniku jego kolor czcionki zmienia się na biały oraz dodawane jest jedynie dolne obramowanie 1 px, linią ciągłą o białym kolorze
ok. 2 min
Polecenie z arkusza
Gdy kursor znajdzie się na odnośniku jego kolor czcionki zmienia się na biały oraz dodawane jest jedynie dolne obramowanie 1 px, linią ciągłą o białym kolorze.
:hover - kursor nad odnośnikiem. Ten sam wygląd dostaje :focus-visible - odnośnik wybrany klawiszem Tab: osoba, która nie używa myszy, też widzi, gdzie jest. border-bottom dodaje tylko dolną krawędź - ciągłą, białą, 1 px.
R.4.9 Ustawiono styl tekstu przekreślonego, który zastosowano tylko do trzeciego elementu listy "bezkofeinowa"
ok. 1 min
Polecenie z arkusza
Dla elementu nr 3 („bezkofeinowa”) listy umieszczonej w bloku lewym: tekst przekreślony.
Pseudoklasa :nth-child(3) wybiera trzeci element wśród rodzeństwa - tu trzeci element listy w bloku prawym. HTML zostaje bez dodatkowego identyfikatora (sprawdzone w Chrome: przekreślony jest tylko trzeci element).
⚠️ Rozbieżność arkusz-klucz: arkusz pisze o liście „umieszczonej w bloku lewym”, ale jedyna lista na stronie stoi w bloku prawym (blok lewy ma obraz kawa albo formularz zamówienia). Klucz R.4.9 mówi po prostu o trzecim elemencie listy „bezkofeinowa” - przekreślenie dostaje element listy z bloku prawego.
Kroki 34-36 · po tym etapie masz 36 z 36 kryteriów (pkt)
Krok 34: skrypt.js: odczyt pól po kliknięciu „Zamów”
Kryteria: , ,
R.5.1 Skrypt napisano w języku JavaScript, zawiera on przynajmniej jedną zgodną ze składnią instrukcję
R.5.2 Skrypt prawidłowo pobiera wartości z pól edycyjnych
R.3.5 Kliknięcie przycisku powoduje wywołanie skryptu (nazwa funkcji w skrypcie jest skojarzona z odpowiednim zdarzeniem przycisku)
ok. 3 min
Polecenie z arkusza
Wymagania dotyczące skryptu: wykonywany po stronie przeglądarki; wywoływany na stronie zamowienia.html po kliknięciu przycisku „Zamów”.
Plik skrypt.js dołączony w <head> z atrybutem defer - wykona się po wczytaniu całego HTML-a, więc znajdzie pola i przycisk. Stałe const trzymają odwołania do elementów, addEventListener('click', …) podpina funkcję strzałkową pod przycisk, a Number(…) zamienia tekst z pól na liczby.
Typowe błędy
Bez defer skrypt w <head> wykonuje się przed powstaniem przycisku - querySelector zwraca null i podpięcie kliknięcia kończy się błędem.
skrypt.jsJavaScriptnowy plik
const coffeeInput = document.querySelector('#coffee');const weightInput = document.querySelector('#weight');const result = document.querySelector('#result');document.querySelector('#order-button').addEventListener('click', () => {const number = Number(coffeeInput.value);const weight = Number(weightInput.value);});
R.5.3 Skrypt oblicza całkowity koszt kawy mnożąc wagę i cenę kawy ustaloną na podstawie numeru kawy (1 - 5zł, 2 - 7zł, 4 - 6zł, inne - 0 zł)
ok. 3 min
Polecenie z arkusza
Skrypt pobiera wartości z obu pól edycyjnych i oblicza koszt kawy uwzględniając jej numer i wagę, zgodnie z tabelą 1; w przypadku, gdy podano inną wartość niż 1, 2, 4 cena wynosi 0 zł.
Tabela 1 to dane, więc zamiast drabinki if stoi słownikPRICES: numer kawy jest kluczem, cena - wartością. PRICES[number] dla numeru spoza tabeli daje undefined, a ?? podstawia wtedy 0 zł - tak każe arkusz. Nowa kawa w ofercie to jedna linia w słowniku.
skrypt.jsJavaScriptzmienione: 9 linii
const coffeeInput = document.querySelector('#coffee');const weightInput = document.querySelector('#weight');const result = document.querySelector('#result');// tabela 1 arkusza: numer kawy -> cena za 1 dag (zł)const PRICES = {1: 5,2: 7,4: 6,};document.querySelector('#order-button').addEventListener('click', () => {const number = Number(coffeeInput.value);const weight = Number(weightInput.value);const price = PRICES[number] ?? 0;const cost = price * weight;});
Podgląd strony po tym kroku (zamowienia.html)
Krok 36: Sprawdzenie wagi i wynik pod przyciskiem
Kryteria:
R.5.4 Wynik obliczeń jest wyświetlany pod przyciskiem w formacie: „Koszt zamówienia wynosi: <koszt> zł”, gdzie <koszt> oznacza obliczoną wartość
ok. 3 min
Polecenie z arkusza
Po obliczeniu całkowitego kosztu kawy jest wyświetlany wynik pod przyciskiem w formacie: „Koszt zamówienia wynosi: <koszt> zł”, gdzie <koszt> oznacza obliczoną wartość.
Przed liczeniem skrypt sprawdza wagę: puste pole albo liczba nie większa od zera daje komunikat zamiast kosztu (bez tego waga -4 dałaby „-20 zł”), a return kończy obsługę kliknięcia. Wynik powstaje z szablonu w odwrotnych apostrofach (${cost} wstawia liczbę) i trafia do paragrafu przez textContent - jako zwykły tekst.
Sprawdzone kliknięciem w Chrome: 1 i 10 dag - „Koszt zamówienia wynosi: 50 zł”, 2 i 3 dag - 21 zł, 4 i 5 dag - 30 zł, numer 3 lub 9 - 0 zł, waga -4 - komunikat.
skrypt.jsJavaScriptzmienione: 7 linii
const coffeeInput = document.querySelector('#coffee');const weightInput = document.querySelector('#weight');const result = document.querySelector('#result');// tabela 1 arkusza: numer kawy -> cena za 1 dag (zł)const PRICES = {1: 5,2: 7,4: 6,};document.querySelector('#order-button').addEventListener('click', () => {const number = Number(coffeeInput.value);const weight = Number(weightInput.value);const price = PRICES[number] ?? 0;if (weightInput.value === '' || weight <= 0) { result.textContent = 'Podaj wagę większą od zera';return; }const cost = price * weight; result.textContent = `Koszt zamówienia wynosi: ${cost} zł`;});
Podgląd strony po tym kroku (zamowienia.html)
Etap 6: Porównanie z wersją podstawową
Kroki 37-38 · po tym etapie masz 36 z 36 kryteriów (pkt)
Krok 37: HTML i CSS: co się zmieniło
ok. 2 min
Polecenie z arkusza
Podział strony na bloki: na górze dwa bloki: menu i logo, poniżej baner, poniżej dwa bloki: lewy i prawy oraz na dole stopka. Podział zrealizowany za pomocą znaczników sekcji tak, aby układ bloków strony po uruchomieniu w przeglądarce, był zgodny z Obrazem 2.
znaczniki: <nav>, <main>, <aside> zamiast samych <section> - przeglądarka i czytnik ekranu wiedzą, gdzie jest nawigacja, a gdzie treść,
układ: jeden display: flex z flex-wrap na <body> zamiast float w czterech blokach i clear w dwóch,
przekreślenie: :nth-child(3) zamiast identyfikatora dopisanego do elementu listy - HTML zostaje czystą treścią,
dostępność: etykiety <label for> przy polach i styl :focus-visible dla nawigacji klawiaturą.
Klucz ocenia efekt (układ zgodny z obrazem 2, cechy stylu) - obie wersje dostają te same punkty.
Skrypt pobiera wartości z obu pól edycyjnych i oblicza koszt kawy uwzględniając jej numer i wagę, zgodnie z tabelą 1; w przypadku, gdy podano inną wartość niż 1, 2, 4 cena wynosi 0 zł.
wywołanie: onclick="order()" w HTML kontra addEventListener w osobnym pliku - HTML bez kodu JavaScript, a skrypt można podpiąć pod kilka stron,
cennik: drabinka if kontra słownik PRICES z ?? - tabela 1 zapisana jako dane,
dane wejściowe: wersja podstawowa (przed etapem dobrych praktyk) liczy koszt z wagi ujemnej i pustej, tu waga jest sprawdzona,
wypisanie: innerHTML z doklejaniem + kontra textContent z szablonem.
Krok 39 · po tym etapie masz 36 z 36 kryteriów (pkt)
Krok 39: Plik przeglądarka.txt i nagranie płyty
ok. 3 min
Polecenie z arkusza
Po zakończeniu pracy utwórz w folderze z numerem, którym został podpisany arkusz, plik tekstowy o nazwie przeglądarka.txt. Zapisz w nim nazwę przeglądarki internetowej, w której weryfikowałeś poprawność działania witryny. Nagraj płytę z rezultatami pracy. W folderze powinny się znajdować pliki: blog, edytor, index, kawa, logo, przeglądarka, styl, zamowienia, ewentualnie inne przygotowane pliki.
W przeglądarka.txt nazwa przeglądarki, w której sprawdzasz strony. W folderze zdającego: blog.html, edytor.png, index.html, kawa.png, logo.png, przeglądarka.txt, styl.css, zamowienia.html i skrypt.js (bez niego przycisk „Zamów” nic nie zrobi). Nagraj płytę, sprawdź jej odczyt i opisz ją numerem zdającego.
Symulacja ekranu w przeglądarce - w Android Studio / Visual Studio wygląd może się nieco różnić.
To jedno z możliwych rozwiązań. Egzaminator ocenia spełnienie kryteriów z klucza odpowiedzi, a nie zgodność z tym kodem - inna, poprawna droga też daje punkty.
Autor rozwiązania: Bartosz Bryniarski. Licencja CC BY-NC 4.0 - kopiowanie i przeróbki do celów niekomercyjnych, z podaniem autora i źródła (link do tej strony) (zasady wykorzystania). Treść arkusza i klucza oceniania pochodzi z CKE.