File tree Expand file tree Collapse file tree 3 files changed +118
-0
lines changed Expand file tree Collapse file tree 3 files changed +118
-0
lines changed Original file line number Diff line number Diff line change 1+ <!DOCTYPE html>
2+ < html lang ="en ">
3+ < head >
4+ < meta charset ="UTF-8 ">
5+ < meta name ="viewport " content ="width=device-width, initial-scale=1.0 ">
6+ < title > Recipe App</ title >
7+ < link rel ="stylesheet " href ="style.css ">
8+ </ head >
9+ < body >
10+ < h1 > Recipe App</ h1 >
11+ < div class ="search-box ">
12+ < input type ="text " id ="search-input " placeholder ="Search for recipes... ">
13+ < button id ="search "> Search</ button >
14+ </ div >
15+ < div class ="recipes " id ="recipes "> </ div >
16+ </ div >
17+ < script src ="script.js "> </ script >
18+ </ body >
19+ </ html >
Original file line number Diff line number Diff line change 1+ /* eslint-disable no-use-before-define */
2+
3+ const searchRecipes = async ( ) => {
4+ const query = document . getElementById ( 'search-input' ) . value ;
5+ if ( ! query ) return ;
6+
7+ try {
8+ const response = await fetch (
9+ `https://www.themealdb.com/api/json/v1/1/search.php?s=${ query } ` ,
10+ ) ;
11+ const data = await response . json ( ) ;
12+ displayRecipes ( data . meals ) ;
13+ } catch ( error ) {
14+ console . error ( 'Error fetching recipes:' , error ) ;
15+ }
16+ } ;
17+
18+ const displayRecipes = ( meals ) => {
19+ const recipesContainer = document . getElementById ( 'recipes' ) ;
20+ recipesContainer . innerHTML = '' ;
21+
22+ if ( ! meals ) {
23+ recipesContainer . innerHTML = '<p>No recipes found!</p>' ;
24+ return ;
25+ }
26+
27+ meals . forEach ( ( meal ) => {
28+ const recipe = document . createElement ( 'div' ) ;
29+ recipe . className = 'recipe' ;
30+ recipe . innerHTML = `
31+ <img src="${ meal . strMealThumb } " alt="${ meal . strMeal } ">
32+ <h3>${ meal . strMeal } </h3>
33+ <a href="${ meal . strSource } " target="_blank">View Recipe</a>
34+ ` ;
35+ recipesContainer . appendChild ( recipe ) ;
36+ } ) ;
37+ } ;
38+ document . getElementById ( 'search' ) . addEventListener ( 'click' , searchRecipes ) ;
Original file line number Diff line number Diff line change 1+ body {
2+ font-family : Arial, sans-serif;
3+ background-color : # f8f8f8 ;
4+ margin : 0 ;
5+ padding : 0 ;
6+ display : flex;
7+ flex-direction : column;
8+ justify-content : center;
9+ align-items : center;
10+ }
11+
12+ h1 {
13+ text-align : center;
14+ color : # 333 ;
15+ }
16+
17+ .search-box {
18+ display : flex;
19+ gap : 20px ;
20+ }
21+
22+ input [type = "text" ] {
23+ min-width : 300px ;
24+ max-width : 400px ;
25+ padding : 10px ;
26+ font-size : 16px ;
27+ border : 1px solid # ccc ;
28+ border-radius : 4px ;
29+ }
30+
31+ button {
32+ padding : 10px 20px ;
33+ font-size : 16px ;
34+ background : # 28a745 ;
35+ color : white;
36+ border : none;
37+ border-radius : 4px ;
38+ cursor : pointer;
39+ }
40+
41+ button : hover {
42+ background : # 218838 ;
43+ }
44+
45+ .recipes {
46+ display : grid;
47+ grid-template-columns : repeat (auto-fit, minmax (200px , 1fr ));
48+ gap : 20px ;
49+ }
50+
51+ .recipe {
52+ background : # f4f4f4 ;
53+ padding : 15px ;
54+ border-radius : 8px ;
55+ text-align : center;
56+ }
57+
58+ .recipe img {
59+ width : 100% ;
60+ border-radius : 8px ;
61+ }
You can’t perform that action at this time.
0 commit comments