Portfolio
Projekt: Knihovna

Projekt: Knihovna

Prosinec 2025

Projekt Knihovna byl první větší krok od jednoduchých DOM cvičení k aplikaci s vlastní datovou strukturou a jasnou logikou.

Co projekt dělá

Jde o správu osobní knihovny v prohlížeči:

  • Přidání knihy přes formulář (autor, název, počet stran, stav přečtení).
  • Zobrazení všech knih v seznamu.
  • Přepnutí stavu přečteno/nepřečteno.
  • Odstranění knihy podle id.

Konstruktor a pole objektů

Každá kniha je objekt vytvořený konstruktorem Book. Všechny knihy se ukládají do pole myLibrary:

const myLibrary = [];

function Book(title, author, pages, read) {
	this.id = crypto.randomUUID();
	this.title = title;
	this.author = author;
	this.pages = pages;
	this.read = read;
}

Každá kniha má unikátní id přes crypto.randomUUID(), což usnadňuje přesné párování dat s DOM prvky.

Klíčové části implementace

Funkce addBookToLibrary() vytvoří novou knihu z parametrů a uloží ji do pole:

function addBookToLibrary(title, author, pages, read) {
	const newBook = new Book(title, author, pages, read);
	myLibrary.push(newBook);
	displayBooks();
}

Formulář používá event.preventDefault(), aby stránka při submitu neprovedla reload.

Render zajišťuje funkce displayBooks(), která mapuje data na DOM elementy s atributem data-id:

function displayBooks() {
	const container = document.getElementById("library");
	container.innerHTML = "";

	myLibrary.forEach((book) => {
		const bookCard = document.createElement("div");
		bookCard.setAttribute("data-id", book.id);
		// přidání obsahu...
		container.appendChild(bookCard);
	});
}

Stav přečtení se přepíná přes metodu na prototypu:

Book.prototype.toggleRead = function () {
	this.read = !this.read;
};

Po změně stavu následuje znovuvykreslení seznamu.

Mazání probíhá přes findIndex() a splice():

function removeBook(id) {
	const index = myLibrary.findIndex((book) => book.id === id);
	if (index !== -1) {
		myLibrary.splice(index, 1);
		displayBooks();
	}
}

Co jsem si odnesl

  • Praktickou práci s objekty a prototypy v JavaScriptu.
  • Lepší oddělení datové vrstvy od vykreslení.
  • Jistotu v práci s formulářem, eventy a identifikací položek přes id.

Další kroky

Projekt zatím nemá persistentní úložiště. Další rozšíření:

  • Local Storage pro uložení knih
  • Editaci knih (ne jen přidání a smazání)
  • Filtrování a řazení (podle autora, přečteno/nepřečteno)
  • Lepší design s CSS

GitHub: projekt knihovna