Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 44 additions & 16 deletions index.html
Original file line number Diff line number Diff line change
@@ -1,21 +1,49 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>TV Show Project | My Name (My GitHub username)</title>
<link href="style.css" rel="stylesheet" />
<link rel="icon" href="/favicon.ico" type="image/x-icon" />
</head>
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>TV Show Project | Gideon Defar (gideondefar)</title>
    <link href="style.css" rel="stylesheet" />
    <link rel="icon" href="/favicon.ico" type="image/x-icon" />
  </head>

<body>
<div id="root">
  <body>

<div id="search">
<div>
<select id="episode-select">
<option value="">Select an episode</option>
</select>
<label for="site-search">Search the site:</label>
<input type="search" id="site-search" name="q" />
<label for="episode-select">Choose an episode:</label>
<div id="search-count" >Search count</div>

<div id="search-count">

</div>

</div>
<div>

</div>



</div>
    <div id="root"></div>


    <footer class="footer">
      Episode data originally provided by
      <a href="https://www.tvmaze.com/" target="_blank">TVMaze.com</a>
    </footer>

<!-- Loads a provided function called getAllEpisodes() which returns all episodes -->
<script src="episodes.js"></script>
    <!-- Loads a provided function called getAllEpisodes() which returns all episodes -->
    <script src="episodes.js"></script>

<!-- Loads YOUR javascript code -->
<script src="script.js"></script>
</body>
</html>
    <!-- Loads YOUR javascript code -->
    <script src="script.js"></script>
  </body>
</html>
80 changes: 72 additions & 8 deletions script.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,76 @@
//You can edit ALL of the code here
function setup() {
const allEpisodes = getAllEpisodes();
makePageForEpisodes(allEpisodes);
//const allEpisodes = getAllEpisodes();

const root = document.getElementById("root");
const state = {
allEpisodes: getAllEpisodes(),
searchTerm: "",
};
function render() {
const filteredFilms = state.allEpisodes.filter((film) =>
film.title.includes(state.searchTerm),
);
const filmCards = filteredFilms.map(createFilmCard);
document.body.append(...filmCards);
}

function createEpisodeCard(ep) {
const seasonNumber = String(ep.season).padStart(2, "0");
const episodeNumber = String(ep.number).padStart(2, "0");

return `
<div class="card">
<h1 class="title">
S${seasonNumber}E${episodeNumber} - ${ep.name}
</h1>

${
ep.image?.medium
? `
<img
src="${ep.image.medium}"
alt="${ep.name} episode poster"
/>
`
: ""
}

<div class="content">
${ep.summary || "<p>No summary available.</p>"}
</div>
</div>
`;
}
function render() {
const filteredEpisodes = state.allEpisodes.filter(
(episode) =>
episode.name.toLowerCase().includes(state.searchTerm.toLowerCase()) ||
episode.summary.toLowerCase().includes(state.searchTerm.toLowerCase()),
);
const searchCount = document.getElementById("search-count");
searchCount.textContent = `Displaying ${filteredEpisodes.length}/${state.allEpisodes.length} episode(s)`;

root.innerHTML = filteredEpisodes.map(createEpisodeCard).join("");
}
function populateEpisodeSelect() {
const episodeSelect = document.getElementById("episode-select");

state.allEpisodes.forEach((episode) => {
const option = document.createElement("option");

const seasonNumber = String(episode.season).padStart(2, "0");
const episodeNumber = String(episode.number).padStart(2, "0");

option.value = episode.id;
option.textContent = `S${seasonNumber}E${episodeNumber} - ${episode.name}`;

function makePageForEpisodes(episodeList) {
const rootElem = document.getElementById("root");
rootElem.textContent = `Got ${episodeList.length} episode(s)`;
episodeSelect.appendChild(option);
});
}
populateEpisodeSelect();
render();
const searchInput = document.getElementById("site-search");

window.onload = setup;
searchInput.addEventListener("input", (event) => {
state.searchTerm = event.target.value;
render();
});
Loading