Kalendarz w JavaScript krok po kroku
Jeden program, wiele podejść: kalendarz miesiąca budowany małymi krokami, a każdy krok pokazuje zaznaczone linie, które się zmieniły. Najpierw w konsoli (liczby, wiersze po siedem dni, pierwszy dzień tygodnia, kolorowe weekendy, obiekt Date), potem na stronie z HTML składanym w napisie, z elementów DOM, aż po logikę oddzieloną od widoku. Przy każdej lekcji zadania sprawdzane automatycznie.
Dla kogo: Szkoła podstawowa 7-8, liceum i technikum: jeden program (kalendarz) budowany krok po kroku, od konsoli do strony WWW, ze zmianami zaznaczonymi w kodzie. Więcej o kursie
Kalendarz w konsoli krok po kroku
Kalendarz miesiąca w konsoli, budowany od zera małymi krokami. Każdy przykład rozbudowuje poprzedni, a zmienione linie są zaznaczone: liczby od 1 do 31, jeden wiersz, wyrównanie, nowy wiersz po siódmej liczbie, nagłówek dni, pierwszy dzień tygodnia i liczba dni wpisane z palca, kolorowa sobota i niedziela, a potem wyliczanie tych wartości z obiektu Date, tytuł, dzisiejszy dzień i funkcja dla dowolnego miesiąca.
- Krok 1: liczby od 1 do 31
- Krok 2: liczby w jednym wierszu
- Krok 3: wyrównanie do dwóch znaków
- Krok 4: nowy wiersz po siódmej liczbie
- Krok 5: nagłówek z dniami tygodnia
- Krok 6: pierwszy dzień tygodnia wpisany z palca
- Krok 7: liczba dni wpisana z palca
- Krok 8: kolorowa sobota i niedziela
- Krok 9: pierwszy dzień tygodnia z obiektu Date
- Krok 10: liczba dni z obiektu Date
- Krok 11: tytuł z nazwą miesiąca
- Krok 12: dzisiejszy dzień w ramce koloru
- Krok 13: funkcja dla dowolnego miesiąca
- Liczby po pięć w wierszu
- Kalendarz od niedzieli
- Kropki w pustych polach
- Ile sobót i niedziel
- Numer tygodnia przed wierszem
- Gwiazdka przy wybranym dniu
- Trzy miesiące funkcją
- Liczba dni każdego miesiąca
- Brudnopis 1
- Brudnopis 2
- Brudnopis 3
Kalendarz na stronie: HTML składany w napisie
Ten sam kalendarz na stronie: pętla składa kod HTML w napisie, a `innerHTML` wstawia go do strony. Kroki jak w konsoli, ale z kwadratami i stylami: liczby w kwadratach, nowy wiersz klasą `clear`, operator warunkowy i napis szablonowy, nagłówek, kolorowe weekendy, puste pola, wartości z obiektu Date, tytuł, dzisiejszy dzień, a na koniec siatka CSS, dzięki której kod przestaje liczyć wiersze.
- Krok 1: kwadraty z liczbami od 1 do 31
- Krok 2: nowy wiersz co siedem dni
- Krok 3: operator warunkowy zamiast if
- Krok 4: napis szablonowy
- Krok 5: wiersz z nazwami dni
- Krok 6: kolorowa sobota i niedziela
- Krok 7: puste pola przed pierwszym dniem
- Krok 8: liczba dni z palca
- Krok 9: miesiąc i rok, reszta z obiektu Date
- Krok 10: tytuł z miesiącem i rokiem
- Krok 11: bieżący miesiąc i dzisiejszy dzień
- Krok 12: siatka CSS zamiast liczenia wierszy
- Trzydzieści dni po dziesięć w wierszu
- Weekendy w składanym kodzie
- Puste pola przed czwartkiem
- Kalendarz z pól miesiąca i roku
- Tytuł z liczbą dni
- Dzisiejszy dzień ze stałej daty
- Dni poprzedniego miesiąca zamiast pustych pól
- Brudnopis 1
- Brudnopis 2
- Brudnopis 3
Kalendarz z elementów DOM
Trzecie podejście: zamiast składać napis z HTML, skrypt tworzy elementy (`createElement`) i wstawia je do strony. Kroki: kwadraty z elementów, funkcja pomocnicza, klasy przez `classList`, wartości z obiektu Date, tytuł i dzisiejszy dzień, wstawianie jednym ruchem przez `DocumentFragment`, funkcja rysująca dowolny miesiąc, przyciski poprzedni i następny, poprawka błędu z dzisiejszym dniem, kliknięty dzień, przycisk Dziś z klawiaturą i na koniec ta sama logika w tabeli.
- Krok 1: kwadraty z elementów
- Krok 2: funkcja tworząca kwadrat
- Krok 3: nagłówek i weekendy z tablicy klas
- Krok 4: puste pola i liczba dni z obiektu Date
- Krok 5: tytuł i dzisiejszy dzień
- Krok 6: wstawianie jednym ruchem (DocumentFragment)
- Krok 7: funkcja rysująca dowolny miesiąc
- Krok 8: przyciski poprzedni i następny
- Krok 9: dzisiaj tylko w swoim miesiącu
- Krok 10: kliknięty dzień
- Krok 11: przycisk Dziś i strzałki na klawiaturze
- Ta sama logika w tabeli
- Kwadraty z elementów zamiast napisu
- Funkcja cell z wieloma klasami
- Przyciski poprzedni i następny
- Dzisiaj tylko w swoim miesiącu
- Kliknięty dzień z nazwą dnia tygodnia
- Przycisk Dziś i strzałki
- Kalendarz w tabeli
- Brudnopis 1
- Brudnopis 2
- Brudnopis 3
Kalendarz: logika oddzielona od widoku
Czwarte podejście: najpierw dane, potem wygląd. Model to funkcja zwracająca miesiąc jako tablicę tygodni, sprawdzana w konsoli zwykłymi testami, bez strony. Widok tylko rysuje model: raz tekstem w konsoli, raz siatką na stronie. Dalej stan kalendarza w jednym obiekcie, zdarzenia, które zmieniają tylko stan, klasa modelu Calendar, klasa widoku CalendarView i dwa niezależne kalendarze na jednej stronie.
- Krok 1: model miesiąca jako tablica tygodni
- Krok 2: widok tekstowy z modelu
- Krok 3: dzień jako obiekt z informacjami
- Krok 4: testy modelu w konsoli
- Krok 5: ten sam model na stronie
- Krok 6: stan w jednym obiekcie
- Krok 7: zdarzenia zmieniają tylko stan
- Krok 8: klasa Calendar jako model
- Krok 9: klasa CalendarView jako widok
- Krok 10: dwa niezależne kalendarze
- Tygodnie z kropkami z modelu
- Ile tygodni ma każdy miesiąc
- Dni robocze z modelu
- Pierwszy poniedziałek miesiąca
- Widok tabeli z modelu
- Przyciski zmieniają stan
- Zaznaczenie pamięta miesiąc
- Klasa Calendar dla gotowego widoku
- Drugi kalendarz obok pierwszego
- Brudnopis 1
- Brudnopis 2
- Brudnopis 3
Kalendarz ze świętami, notatkami i językami
Piąte podejście: kalendarz sam wylicza święta. Stałe to tablica dat, ale Wielkanoc zależy od Księżyca: pierwsza niedziela po pierwszej wiosennej pełni. Kroki pokazują mechanizm od środka (19-letni cykl Księżyca, data pełni, szukanie niedzieli pętlą, potem wzorem), dwa wyjątki algorytmu Gaussa i algorytm Meeusa z porównaniem na 200 latach. Od Wielkanocy liczą się pozostałe święta ruchome. Na stronie: święta w kalendarzu, notatki przy dniach, dni robocze miesiąca i przełącznik języka PL/EN ze słownika.
- Krok 1: święta stałe w tablicy
- Krok 2: Wielkanoc zależy od pełni Księżyca
- Krok 3: pierwsza niedziela po pełni, czyli pętla
- Krok 4: dzień tygodnia wzorem zamiast pętli
- Krok 5: dwa wyjątki algorytmu Gaussa
- Krok 6: algorytm Meeusa i porównanie na 200 latach
- Krok 7: święta ruchome liczone od Wielkanocy
- Krok 8: wszystkie święta roku
- Krok 9: kalendarz konsolowy ze świętami
- Krok 10: święta w kalendarzu na stronie
- Krok 11: notatki przy dniach
- Krok 12: dni robocze w miesiącu
- Krok 13: język polski i angielski ze słownika
- Pełnia i Wielkanoc krok po kroku
- Poprawki w algorytmie Gaussa
- Data Bożego Ciała
- Święta w maju
- Święta w weekend
- Najwcześniejsza i najpóźniejsza Wielkanoc
- Święta oznaczone w kalendarzu
- Lista świąt pod kalendarzem
- Dni robocze miesiąca
- Notatka przy wybranym dniu
- Przełącznik języka
- Brudnopis 1
- Brudnopis 2
- Brudnopis 3