Calculator Tools Calculator Tools
Create

Pokédex

Jan 7, 2024

About this app

A Pokédex app that displays information about Pokémon based on their National Dex number.

Pokédex App Pokédex App Enter National Dex Number: Search Pokémon

Related apps

Put this on your site

Source

                    <html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1">

<title>Pokédex App</title>
<meta name="description" content="A Pokédex app that displays information about Pokémon based on their National Dex number.">
<meta name="keywords" content="Pokédex, Pokémon, National Dex, base stats">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet">

<script type="text/javascript">
try {
// App Javascript Goes Here. Place your entire script content inside the try block for error handling.
document.addEventListener("DOMContentLoaded", function() {
// Function to fetch Pokémon details based on National Dex number
function fetchPokemonDetails(number) {
$.ajax({
url: `https://pokeapi.co/api/v2/pokemon/${number}`,
method: "GET",
success: function(response) {
const pokemon = {
name: response.name,
image: response.sprites.front_default,
dexEntry: response.species.url,
baseStats: response.stats.map(stat => ({
name: stat.stat.name,
value: stat.base_stat
}))
};

displayPokemonDetails(pokemon);
},
error: function() {
alert("Failed to fetch Pokémon details. Please try again later.");
}
});
}

// Function to fetch Pokémon dex entry
function fetchDexEntry(url) {
$.ajax({
url: url,
method: "GET",
success: function(response) {
const dexEntry = response.flavor_text_entries.find(entry => entry.language.name === "en");
const dexEntryText = dexEntry.flavor_text.replace(/[\n\f]/g, " ");

$("#dex-entry").text(dexEntryText);
},
error: function() {
alert("Failed to fetch Pokémon dex entry. Please try again later.");
}
});
}

// Function to display Pokémon details
function displayPokemonDetails(pokemon) {
$("#pokemon-name").text(pokemon.name);
$("#pokemon-image").attr("src", pokemon.image);

fetchDexEntry(pokemon.dexEntry);

const baseStatsHtml = pokemon.baseStats.map(stat => `
<li>
<span class="stat-name">${stat.name}:</span>
<span class="stat-value">${stat.value}</span>
</li>
`).join("");

$("#base-stats").html(baseStatsHtml);
}

// Event listener for form submission
$("#pokemon-form").on("submit", function(event) {
event.preventDefault();

const number = parseInt($("#pokemon-number").val());

if (isNaN(number) || number < 1 || number > 1025) {
alert("Please enter a valid National Dex number between 1 and 1025.");
} else {
fetchPokemonDetails(number);
}
});
});

} catch (error) {
// This will throw the error to the parent window.
throw error;
}
</script>

<style>
body {
font-family: 'Roboto', sans-serif;
background-color: #f5f5f5;
}

.container {
max-width: 600px;
margin: 0 auto;
padding-top: 50px;
}

h1 {
text-align: center;
margin-bottom: 30px;
font-size: 28px;
font-weight: bold;
color: #333;
}

.form-group {
margin-bottom: 15px;
}

.form-group label {
font-weight: bold;
}

.form-control {
width: 100%;
padding: 10px;
border: 1px solid #ccc;
border-radius: 4px;
font-size: 16px;
}

.submit-btn {
display: block;
width: 100%;
padding: 10px;
border: none;
border-radius: 4px;
background-color: #333;
color: #fff;
font-size: 16px;
text-align: center;
cursor: pointer;
transition: background-color 0.3s ease;
}

.submit-btn:hover {
background-color: #555;
}

.pokemon-details {
margin-top: 30px;
text-align: center;
}

#pokemon-image {
width: 200px;
height: 200px;
margin-bottom: 10px;
border: 2px solid #333;
border-radius: 50%;
object-fit: cover;
}

#dex-entry {
margin-bottom: 20px;
font-size: 14px;
color: #555;
}

#base-stats {
list-style-type: none;
padding: 0;
margin: 0;
}

#base-stats li {
margin-bottom: 5px;
}

.stat-name {
font-weight: bold;
}

.stat-value {
margin-left: 5px;
}
</style>
</head>
<body>
<div id="main-container" class="container">
<h1>Pokédex App</h1>

<form id="pokemon-form">
<div class="form-group">
<label for="pokemon-number">Enter National Dex Number:</label>
<input type="number" id="pokemon-number" class="form-control" min="1" max="1025" required>
</div>
<button type="submit" class="submit-btn">Search Pokémon</button>
</form>

<div id="pokemon-details" class="pokemon-details">
<h2 id="pokemon-name"></h2>
<img id="pokemon-image" alt="Pokémon Image">
<p id="dex-entry"></p>
<ul id="base-stats"></ul>
</div>
</div>
</body>
</html>