From 368bb84fe5caa73f7d4621def735412feaf02d5c Mon Sep 17 00:00:00 2001 From: wowlikon Date: Sat, 20 Dec 2025 11:28:01 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=84=D0=B8=D0=BB=D1=8C=D1=82=D1=80=D0=B0?= =?UTF-8?q?=20=D0=B6=D0=B0=D0=BD=D1=80=D0=BE=D0=B2=20=D0=B2=20url?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data.py | 2 +- library_service/static/books.js | 42 ++++++++++++++++++++++++++++- library_service/templates/base.html | 1 - 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/data.py b/data.py index 98ff870..46166c7 100644 --- a/data.py +++ b/data.py @@ -3,7 +3,7 @@ from typing import Optional # Конфигурация USERNAME = "admin" -PASSWORD = "n_ElBL9LTfTTgZSqHShqOg" +PASSWORD = "TzUlDpUCHutFa-oGCd1cBw" BASE_URL = "http://localhost:8000" diff --git a/library_service/static/books.js b/library_service/static/books.js index b9bd30f..bf33c32 100644 --- a/library_service/static/books.js +++ b/library_service/static/books.js @@ -5,6 +5,11 @@ $(document).ready(() => { let pageSize = 20; let totalBooks = 0; + const urlParams = new URLSearchParams(window.location.search); + const genreIdsFromUrl = urlParams.getAll("genre_id"); + const authorIdsFromUrl = urlParams.getAll("author_id"); + const searchFromUrl = urlParams.get("q"); + Promise.all([ fetch("/api/authors").then((response) => response.json()), fetch("/api/genres").then((response) => response.json()), @@ -18,15 +23,25 @@ $(document).ready(() => { .attr("data-name", author.name) .text(author.name) .appendTo($dropdown); + + if (authorIdsFromUrl.includes(String(author.id))) { + selectedAuthors.set(author.id, author.name); + } }); const $list = $("#genres-list"); genresData.genres.forEach((genre) => { + const isChecked = genreIdsFromUrl.includes(String(genre.id)); + + if (isChecked) { + selectedGenres.set(genre.id, genre.name); + } + $("
  • ") .addClass("mb-1") .html( ``, @@ -57,6 +72,29 @@ $(document).ready(() => { params.append("genre_ids", id); }); + function updateBrowserUrl() { + const params = new URLSearchParams(); + + const searchQuery = $("#book-search-input").val().trim(); + if (searchQuery.length >= 3) { + params.append("q", searchQuery); + } + + selectedAuthors.forEach((name, id) => { + params.append("author_id", id); + }); + + selectedGenres.forEach((name, id) => { + params.append("genre_id", id); + }); + + const newUrl = params.toString() + ? `${window.location.pathname}?${params.toString()}` + : window.location.pathname; + + window.history.replaceState({}, "", newUrl); + } + params.append("page", currentPage); params.append("size", pageSize); @@ -64,6 +102,8 @@ $(document).ready(() => { showLoadingState(); + updateBrowserUrl(); + fetch(url) .then((response) => { if (!response.ok) { diff --git a/library_service/templates/base.html b/library_service/templates/base.html index 2528d15..1701f42 100644 --- a/library_service/templates/base.html +++ b/library_service/templates/base.html @@ -22,7 +22,6 @@
  • Главная
  • Книги
  • Авторы
  • -
  • О нас
  • API