Advertisement
binm7md

Untitled

Dec 19th, 2024
32
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.90 KB | None | 0 0
  1. <!doctype html>
  2. <html lang="en" data-bs-theme="dark">
  3.   <head>
  4.     <meta charset="utf-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1">
  6.     <meta name="description" content="">
  7.     <meta name="author" content="Mark Otto, Jacob Thornton, and Bootstrap contributors">
  8.     <meta name="generator" content="Hugo 0.84.0">
  9.     <title>Album example · Bootstrap v5.0</title>
  10.  
  11.     <link rel="canonical" href="https://getbootstrap.com/docs/5.0/examples/album/">
  12.  
  13.     <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
  14.  
  15.     <!-- Bootstrap core CSS -->
  16.     <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
  17.  
  18.     <style>
  19.       .bd-placeholder-img {
  20.         font-size: 1.125rem;
  21.         text-anchor: middle;
  22.         -webkit-user-select: none;
  23.         -moz-user-select: none;
  24.         user-select: none;
  25.       }
  26.       .col{
  27.         width: 20%;
  28.       }
  29.       @media (min-width: 768px) {
  30.         .bd-placeholder-img-lg {
  31.           font-size: 3.5rem;
  32.         }
  33.       }
  34.     </style>
  35.  
  36.    
  37.   </head>
  38.   <body>
  39.    
  40. <header>
  41.   <div class="collapse bg-dark" id="navbarHeader">
  42.     <div class="container">
  43.       <div class="row">
  44.         <div class="col-sm-8 col-md-7 py-4">
  45.           <h4 class="text-white">About</h4>
  46.           <p class="text-muted">Add some information about the album below, the author, or any other background context. Make it a few sentences long so folks can pick up some informative tidbits. Then, link them off to some social networking sites or contact information.</p>
  47.         </div>
  48.         <div class="col-sm-4 offset-md-1 py-4">
  49.           <h4 class="text-white">Contact</h4>
  50.           <ul class="list-unstyled">
  51.             <li><a href="#" class="text-white">Follow on Twitter</a></li>
  52.             <li><a href="#" class="text-white">Like on Facebook</a></li>
  53.             <li><a href="#" class="text-white">Email me</a></li>
  54.           </ul>
  55.         </div>
  56.       </div>
  57.     </div>
  58.   </div>
  59.   <div class="navbar navbar-dark bg-dark shadow-sm">
  60.     <div class="container">
  61.       <a href="#" class="navbar-brand d-flex align-items-center">
  62.         <img src="logo.png" width="60" height="60">
  63.         <strong>|</strong>
  64.       </a>
  65.       <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarHeader" aria-controls="navbarHeader" aria-expanded="false" aria-label="Toggle navigation">
  66.         <span class="navbar-toggler-icon"></span>
  67.       </button>
  68.     </div>
  69.   </div>
  70. </header>
  71.  
  72. <main>
  73.  
  74.   <section class="py-5 text-center container">
  75.     <div class="row py-lg-5">
  76.       <div class="col-lg-6 col-md-8 mx-auto">
  77.         <h1 class="fw-light">محرك بحث مكتبة </h1>
  78.         <br>
  79.  
  80.         <span id="quote" class="badge text-bg-info">وقل ربي زدني علماً</span>
  81.         <br>
  82.         <br>
  83.         <div class="container">
  84.           <div class="row justify-content-center">
  85.               <div class="col">
  86.                   <form>
  87.  
  88.                       <div class="input-group mb-3">
  89.                         <button onclick="searchBooks()"   class="btn btn-success" type="submit">بحث</button>
  90.  
  91.                           <input id="titleSearch" type="text" class="form-control" placeholder="أبحث هُنا....">
  92.                           <select id="genreSearch" class="form-select" style="max-width: 150px;">
  93.                             <option value="" selected>جميع تصنيفات الكُتب</option>
  94.                             <option value="اللغة الإنجليزية">اللغة الإنجليزية</option>
  95.                             <option value="اللغة العربية">اللغة العربية</option>
  96.                             <option value="العلوم الدينية">العلوم الدينية</option>
  97.                             <option value="الحاسب الإلي والبرمجة">الحاسب الإلي والبرمجة</option>
  98.                             <option value="العلوم العامة">العلوم العامة</option>
  99.                         </select>
  100.                       </div>
  101.                   </form>
  102.               </div>
  103.           </div>
  104.       </div>
  105.        
  106.       </div>
  107.     </div>
  108.   </section>
  109.  
  110.   <div class="album py-5 bg-dark">
  111.     <div class="container">
  112.       <div id="book-container" class="row row-cols-1 row-cols-sm-2 row-cols-md-3 g-3">
  113.         <script>
  114.           // Function to perform a search and fetch filtered books from the server
  115.           function searchBooks() {
  116.               const titleSearch = document.getElementById('titleSearch').value;
  117.               const genreSearch = document.getElementById('genreSearch').value;
  118.      
  119.               // Prepare URL with query parameters
  120.               const url = new URL('http://127.0.0.1:3000/search');
  121.               const params = new URLSearchParams();
  122.      
  123.               if (titleSearch) {
  124.                   params.append('book_title', titleSearch);
  125.               }
  126.               if (genreSearch) {
  127.                   params.append('book_genre', genreSearch);
  128.               }
  129.      
  130.               url.search = params.toString();
  131.      
  132.               // Fetch books based on search parameters
  133.               fetch(url)
  134.                   .then(response => response.json())
  135.                   .then(data => {
  136.                       displayBooks(data);
  137.                   })
  138.                   .catch(error => {
  139.                       console.error('Error fetching book data:', error);
  140.                   });
  141.           }
  142.      
  143.           // Function to render books dynamically
  144.           function displayBooks(books) {
  145.               const container = document.getElementById("book-container");
  146.               container.innerHTML = '';  // Clear previous books
  147.      
  148.               if (books.length === 0) {
  149.                   container.innerHTML = '<p>لم يتم العثور على نتيجة</p>';
  150.                   return;
  151.               }
  152.      
  153.               // Sort books by genre
  154.               books.sort((a, b) => a.book_genre.localeCompare(b.book_genre));
  155.      
  156.               let currentGenre = null;
  157.      
  158.               // Create and display each book dynamically
  159.               books.forEach(book => {
  160.                   if (book.book_genre !== currentGenre) {
  161.                       currentGenre = book.book_genre;
  162.      
  163.                       // Genre Divider
  164.                       const genreDivider = document.createElement("h1");
  165.                       genreDivider.textContent = currentGenre;
  166.                       genreDivider.style.textAlign = "right";
  167.      
  168.                       const genreDiv = document.createElement("div");
  169.                       genreDiv.classList.add("row", "w-100");
  170.                       genreDiv.appendChild(genreDivider);
  171.                       container.appendChild(genreDiv);
  172.                   }
  173.      
  174.                   // Book Card
  175.                   const colDiv = document.createElement("div");
  176.                   colDiv.classList.add("col");
  177.      
  178.                   const cardDiv = document.createElement("div");
  179.                   cardDiv.classList.add("card", "shadow-sm");
  180.      
  181.                   const imgTag = document.createElement("img");
  182.                   imgTag.classList.add("bd-placeholder-img", "card-img-top");
  183.                   imgTag.setAttribute("src", book.book_thumbnail);
  184.                   imgTag.setAttribute("width", "100%");
  185.                   imgTag.setAttribute("height", "225");
  186.      
  187.                   const cardBodyDiv = document.createElement("div");
  188.                   cardBodyDiv.classList.add("card-body");
  189.      
  190.                   const h5Tag = document.createElement("h5");
  191.                   h5Tag.textContent = book.book_title;
  192.      
  193.                   const h8Tag = document.createElement("h8");
  194.                   h8Tag.textContent = book.book_genre;
  195.      
  196.                   cardBodyDiv.appendChild(h5Tag);
  197.                   cardBodyDiv.appendChild(h8Tag);
  198.                   cardDiv.appendChild(imgTag);
  199.                   cardDiv.appendChild(cardBodyDiv);
  200.                   colDiv.appendChild(cardDiv);
  201.      
  202.                   container.appendChild(colDiv);
  203.               });
  204.           }
  205.           document.getElementById('titleSearch').addEventListener('input', searchBooks);
  206.     document.getElementById('genreSearch').addEventListener('input', searchBooks);
  207.           // Initial display of all books (optional, if needed)
  208.           searchBooks();  // Call to show books on page load
  209.       </script>
  210.     </div>
  211.   </div>
  212.  
  213. </main>
  214.  
  215. <footer class="text-muted py-5">
  216.  
  217. </footer>
  218.  
  219.  
  220.     <script src="../assets/dist/js/bootstrap.bundle.min.js"></script>
  221.  
  222.      
  223.   </body>
  224. </html>
  225.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement