Projektowanie serwisów WWW
Lab. nr 1 - "Praca z systemem kontroli wersji, podstawy WWW"
- - cel: stworzyć prostą stronę WWW, nie wymagającą użycia serwera webowego,
-
- strona powinna zawierać linki do trzech podstron, które należy utworzyć:
- strona z listem (odpowiednio sformatowany tekst, przypominający list),
- strona z podręcznika, np. do informatyki (rysunki, tabele, wzory itp.),
- strona z formularzem (inputy, pola tekstowe, checkboxy itp.), na początku bez walidacji wartości pól.
- na stronie startowej należy umieścić informację o autorze oraz opcjonalnie np. logo, informacje o użytych technologiach itp.
- - do ww. zadania należy użyć HTML, CSS i JS,
- - można wykorzystać informacje z kursu o HTML i CSS,
- - co do JS, to można wykorzystać materiały z kursu JS z 2020 roku,
- - można wykorzystać darmowy szablon, np. Bare, bazujący na Bootstrapie,
- - należy zapoznać się z modelem DOM: tutaj lub tutaj,
- - nowe elementy HTML w miarę możliwości należy tworzyć i modyfikować za pomocą JS, przykłady tutaj,
- - należy utworzyć plik README.md, który będzie zawierał opis repozytorium,
- - zrzut każdej z czterech utworzonych stron należy umieścić w pliku README.md jak obrazek i krótko opisać; jak to zrobić opisane jest w nw. linku o Markdown w sekcji 'Images'.
System kontroli wersji - Git
- - książka online o systemie Git: tutaj,
- - pomoc dla osób, które zaczynają przygodę z systemem kontroli wersji Git: tutaj,
- - należy utworzyć konto na hostingu GitHub lub innym (np. Bitbucket, GitLab), aby "przechowywać" tam zrealizowane laboratoria,
-
-należy utworzyć repozytorium o nazwie
projektowanie-serwisow-www-dane-nr_grupy
, gdzie zamiast 'dane' wpisujemy nazwisko lub nr indeksu; będzie ono podstawą zaliczenia przedmiotu.
Lab. nr 2 - "Praca z elementami DOM z wykorzystaniem Javascript"
- zadania z JavaScript
- - zadanie polega na wykorzystaniu Java Script (vanilla, jQuery lub inny) do wyświeltlania, modyfikowania, tworzenia (itp. itd.) elementów strony związanych z HTML i CSS,
- - należy użyć wybrany (dowolny) framework front-endowy do tego zadania,
- - jeden z najpopularniejszych to Bootstrap - np. pod tym linkiem znajduje się dobry, prosty startowy szablon,
- - UI Kit też jest ciekawy, jest jeszcze kilka innych 😀,
- - przydatna może być strona o Javascript + DOM,
-
- np. korzystając z ww. szablonu Bootstrap, można dodać przycisk z klasą
badge-light
do strony (np. pod nagłówkiem 'Hello world'):
Poniżej, np. przed końcem sekcji<button type="button" class="btn btn-primary"> Notifications <span class="badge badge-light"></span> </button>
body
wrzucamy skrypt, który szuka elementu z klasąbadge-light
i ustawia jego wartość (innerHTML) na liczbę 6:<script> let x = document.getElementsByClassName("badge-light"); x[0].innerHTML = 6; // x[0] to pierwszy znaleziony element </script>
- - w podobny sposób należy wykorzystać inne dostępne metody i właściwości Java Script do modyfikacji elementów strony,
-
- wskazane użycie 20 różnych metod i właściwości Java Script do ww. modyfikacji, np.:
document.body.style.backgroundColor = "red"; // właściwość 'backgroundColor'
lubvar node = document.createElement("LI"); // Create a <li> node var textnode = document.createTextNode("Water"); // Create a text node node.appendChild(textnode); // Append the text to <li> document.getElementById("myList").appendChild(node); // Append <li> to <ul> with id="myList"
- - w powyższym przykładzie użyte zostały trzy metody, ale całość traktujemy jako jeden przypadek z 20 wymaganych,
-
- użyj w wybranych przez siebie fragmentach kodu "trybu ścisłego" -
use strict;
- - można do pomocy wykorzystać jQuery.
Lab. nr 3 - "Obsługa zdarzeń"
- - w ramach praktyki do wykonania zadania z JavaScript - (9 zadań do wyboru przez studenta),
- - za pomocą metody addEventListener należy obsłużyć 10 różnych wybranych zdarzeń,
- - lista zdarzeń HTML DOM do użycia tutaj,
- - przykład Keyboard Event na stronie MDN,
- - kody dla klawiszy,
- - trochę przykładów: plik JS z teorią i kodem oraz odpowiadający mu plik HTML,
- - plusy za zróżnicowanie elementów za pomocą których realizowana będzie obsługa zdarzeń (elementy HTML, obiekt 'document', obiekt 'window') oraz za użycie metody removeEventListener().
Lab. nr 4 - "Gra przeglądarkowa"
- - do zrealizowania jest gra przeglądarkowa, inna niż była omawiana na zajęciach,
- - należy wykorzystać element <canvas> do implementowania podstawowych mechanik gry jak renderowanie, przesuwanie grafik, wykrywanie kolizji, mechanizmu sterowania oraz stanu wygrania/przegrania,
- - nie należy korzystać z silników gier, dopuszczalna prosta biblioteka JS, np. jQuery
- - wskazany dokładny opis tego, co robi dana funkcja lub wybrany fragment kodu,
- - wskazane użycie event listenerów, obsługa klawiszy i/lub myszki, itp.,
- - przykładowe gry dostępne tutaj,
- - plusy za modyfikacje, dobre komentarze i oryginalność (za wrzucenia gry bez zmian maks. liczba punktów to '3').
Lab. nr 5 - "Asynchroniczny Javascript"
- - ciekawie wyłumaczone asynchroniczne zapytania w JavaScript,
- - przykłady z zajęć dostępne na repo tutaj i tutaj,
- - zasoby do użycia dostępne tutaj w dziale 'Resources' (6 rodzajów), a także tutaj lub tutaj,
-
- np. gdy chcemy uzyskać dostęp do usera nr 3 wpisujemy:
https://jsonplaceholder.typicode.com/users/3
, -
- gdy chcemy pobrać obiekt JSON z ww. strony, to można to zrobić np. za pomocą funkcji getJSON:
$.getJSON( "https://jsonplaceholder.typicode.com/users/10", function( data ) { let name = data.name; let id = data.id; console.log( "User " + name + " has id=" + id); // User Clementina DuBuque has id=10 });
-
- należy zrealizować po dwa przykłady do każdego z sześciu poniższych punktów, wykorzystując ww. API w punktach 2-6:
-
funkcja zwrotna (callback):
- przykłady tworzenia funkcji zwrotnych: tutaj i tutaj
- utwórz obiekt JSON, zawierający w środku co najmniej podwójnie zagnieżdżone obiekty JSON,
- ww. obiekty powinny zawierać w tablicach i wartościach obiektów liczby i łańcuch znakowe,
- task1: wykorzystaj funkcję zwrotną do pobrania dwóch różnych wartości liczbowych (z różnych poziomów zagnieżdżenia) z ww. obiektu JSON i wykonaj wybrane działanie na tych liczbach,
- task 2: wykorzystaj funkcję zwrotną do pobrania dwóch różnych łańcuchów znakowych (z różnych poziomów zagnieżdżenia) z ww. obiektu JSON i za pomocą template strings stwórz łańcuch znakowy z użyciem obu wcześniej wyekstrahowanych łańcuchów znakowych.
-
obiekt Promise (resolve, reject) z metodami then(), catch() i finally() + axios (lub fetch):
- task 1: wykorzystaj obiekt Promise do pobrania dwóch różnych zasobów liczbowych i napisz funkcję wykonującą wybrane działanie na tych liczbach,
- task 2: wykorzystaj obiekt Promise do pobrania dwóch różnych dowolnych zasobów i napisz funkcję tworzącą z nich nowy obiekt,
- należy pamiętać o obsłudze wszystkich pięciu metod obiektu Promise,
- do pobierania zasobów należy wykorzystać metodęfetch
lub bibliotekęaxios
.
-
async/await + fetch (lub axios):
- task 1: jak wyżej,
- task 2: jak wyżej,
- należy stworzyć funkcje wykorzystujące składnię async/await,
- do pobierania zasobów należy wykorzystać metodęfetch
lub bibliotekęaxios
.
-
Zapytania AJAX:
- task 1: jak w pkt. 2 i 3,
- task 2: jak w pkt. 2 i 3,
- należy obsłużyć sukces zapytania (właściwość 'onload' obiektu XHR),
- należy obsłużyć błąd zapytania (właściwość 'onerror' obiektu XHR).
-
metoda fetch:
- task 1: jak w pkt. 2 i 3,
- task 2: jak w pkt. 2 i 3,
- nie używamy async/await.
-
bibliotexa axios:
- task 1: jak w pkt. 2 i 3,
- task 2: jak w pkt. 2 i 3,
- obiekt axios dostępny będzie jakoresponse.data
(patrz przykłady),
- nie używamy async/await,
- wystarczy użyć plików z CDN, opisanych w linku do biblioteki i umieścić je przed końcem sekcji 'body'.
-
funkcja zwrotna (callback):
Lab. nr 6 - "Vue (lub React) - aplikacja nr 1"
-
W aplikacji Vue należy zrealizować nw. zadania,
- - należy zapoznać się z tutorialem,
- - tworzenie aplikacji bezpośrednio w pliku .html (Vue.js dołączone za pomocą CDN i tworzenie nowego obiektu Vue) oraz za pomocą modułu 'vue-cli',
- - użycie dyrektyw `v-if`, `v-on`, `v-for`, `v-bind`, `v-model`,
- - użycie właściwości `data`, `methods`, `computed`,
- - obsługa zdarzeń (ww. dyrektywa `v-on`),
- - tworzenie projektów "od zera" z użyciem `vue-cli`,
- - tworzenie komponentów - zarówno `Vue.component()` oraz Single File Component (pliki z rozszerzeniem .vue),
- - dodawanie plików .css do wybranych komponentów,
- - należy zapoznać się (i najlepiej wykorzystać u siebie) z ideą stanu i biblioteką Vuex, służącą do zarządzania stanem,
- - należy zrealizować przekazywanie props'ów,
- - plusy za wykorzystanie Bootstrap'a w aplikacji.
-
W aplikacji React należy zrealizować nw. zadania,
- - tworzenie aplikacji za pomocą modułu 'create-react-app',
- - tworzenie komponentów funkcyjnych i klasowych,
- - należy utworzyć komponent nadrzędny i dwa komponenty potomne, mogą to być np. tabele, listy 'ol' lub 'ul', obrazki itp. Dowolność wyboru, aby nie były to przykłady zbyt zbliżone do tych z repo,
- - należy wykorzystać props (atrybuty, właściwosci) przy przekazywaniu danych do komponentu potomnego,
- - należy wykorzystać state (stan) przy tworzeniu komponentu klasowego,
- - należy dodać plik .css do wybranych komponentów,
-
- należy zastosować funkcję
map()
przy generowaniu komponentów i należy pamiętać o atrybuciekey
, - - należy zrealizowac wysyłanie funkcji za pomocą 'props',
- - plusy za wykorzystanie Bootstrap'alub react-bootstrap'a w aplikacji.
Lab. nr 7 - "Vue (lub React) - aplikacja nr 2"
- - wykorzystanie Material UI oraz React-Router (React),
- - wykorzystanie Vuetify oraz Vue Router (Vue),
- - instalacja Material UI,
- - początki z Material UI lub z Vuetify,
- - początki z vue-material,
- - przykład użycia Material UI z freecodecamp,
- - routing po stronie serwera i po stronie klienta, czyli po co nam React-Router, proszę przeczytać przy ☕ lub 🍺 (małym),
- - instalacja i proste przykłady użycia React-Router'a,
-
- zadanie, to wykorzystać dwie ww. biblioteki (Vue lub React)) do utworzenia prostej SPA:
-
należy stworzyć trzy "podstrony" (komponenty
Link
,Switch
iRoute
, - na każdej z ww. podstron powinny znaleźć się trzy różne komponenty z Material UI,
- plusy ➕➕➕ za wykorzystanie 'state', 'props', innych bibliotek (np. bootstrap).
-
należy stworzyć trzy "podstrony" (komponenty
Lab. nr 8 - "Vue (lub React) - aplikacja nr 3 + analiza kodu źródłowego + git difftool"
- - strona nr 1 z przykładami do analizy (Vue),
- - strona nr 2 z przykładami do analizy (Vue),
- - strona nr 3 z przykładami do analizy (React),
- - strona nr 4 z przykładami do analizy (React),
- - przykłady wykorzystania komendy git difftool) (do obejrzenia przy ☕),
- - można wykorzystać inną wybraną przez siebie stronę z przykładami,
- - należy rozsądnie wybrać przykład z jednej z ww. stron, niektóre przykłady są dośc trywialne - ograniczają sie do instalacji wybranego pakietu i kilku prostych przypadków użycia,
- - przykład należy przeanalizować i dokonać swoich modyfikacji,
- - należy dokładnie opisać (skomentować) kod aplikacji (zainstalowane moduły, użyte komponenty itp.) oraz wprowadzone własne modyfikacje,
-
- ww. modyfikacje kodu należy zaprezentować wizualnie na zrzucie ekranu po komendzie
difftool
, - - w pliku README należy umieścić link do oryginalnego przykładu,
- - plusy ➕➕➕ za wykorzystanie 'spread operator', 'Object.assign', 'uniqid' i innych pakietów Reactów, elementów JS nie wykorzystywanych we wcześniejszych zadaniach.
Zasady zaliczenia przedmiotu
- Dowolny język do realizacji zadań, tam gdzie da sie zastosować inne niż wskazane w danym laboratorium.
-
Zadanie należy zrealizować do kolejnych zajęć - max. 5 punktów,
- do tygodnia opóźnienia w realizacji zadania - max. 3 punkty,
- przekroczenie obu terminów - max. 1 punkt,
- ww. daty wskazane są w pliku z ocenami. - Zrealizowane zadanie należy umieścić na portalu GitHub (lub BitBucket) i wysłać link do prowadzącego (Slack).
- Zadanie należy zaprezentować osobiście prowadzącemu na laboratorium (zdalnie poprzez udostępnianie ekranu).
- Pierwsze laboratorium jest "rozruchowe" - można oddawać zadania, ale nie trzeba.
- Brak odpowiedniej liczby punktów spowoduje konieczność stworzenia nowych projektów.
- Do każdego zadania dobrze jest dodać pliki (dodać do repozytorium) zawierające zrzuty działającej aplikacji. Przyspieszy to proces sprawdzania.
- Brak znajomości utworzonej aplikacji powoduje obniżenie oceny.