mirror of
				https://github.com/cse110-fa22-group29/cse110-fa22-group29.git
				synced 2025-10-31 03:46:50 +00:00 
			
		
		
		
	Merge branch 'sprint-2' into sprint-2-css-review-details
This commit is contained in:
		
							
								
								
									
										2
									
								
								.github/workflows/css-linting.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/css-linting.yml
									
									
									
									
										vendored
									
									
								
							| @@ -20,4 +20,4 @@ jobs: | |||||||
|       - name: Install dependencies |       - name: Install dependencies | ||||||
|         run: sudo npm install |         run: sudo npm install | ||||||
|       - name: Run tests |       - name: Run tests | ||||||
|         run: sudo npm run lintCSS |         run: sudo npm run lint-css | ||||||
							
								
								
									
										2
									
								
								.github/workflows/html-linting.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/html-linting.yml
									
									
									
									
										vendored
									
									
								
							| @@ -20,4 +20,4 @@ jobs: | |||||||
|       - name: Install dependencies |       - name: Install dependencies | ||||||
|         run: sudo npm install |         run: sudo npm install | ||||||
|       - name: Run tests |       - name: Run tests | ||||||
|         run: sudo npm run lintHTML |         run: sudo npm run lint-html | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								.github/workflows/js-linting.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/js-linting.yml
									
									
									
									
										vendored
									
									
								
							| @@ -22,4 +22,4 @@ jobs: | |||||||
|       - name: Install dependencies |       - name: Install dependencies | ||||||
|         run: sudo npm install |         run: sudo npm install | ||||||
|       - name: Run tests |       - name: Run tests | ||||||
|         run: sudo npm run lint |         run: sudo npm run lint-js | ||||||
| @@ -1,3 +1,4 @@ | |||||||
| { | { | ||||||
|   "attr-value-not-empty": false |   "attr-value-not-empty": false, | ||||||
|  |   "space-tab-mixed-disabled": false | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,3 +1,4 @@ | |||||||
| { | { | ||||||
| 	"extends": "stylelint-config-standard" | 	"extends": "stylelint-config-standard", | ||||||
|  | 	"ignore": ["inside-parens", "param", "value"] | ||||||
| } | } | ||||||
							
								
								
									
										3
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | { | ||||||
|  |     "liveServer.settings.port": 5501 | ||||||
|  | } | ||||||
| @@ -40,9 +40,14 @@ | |||||||
|     <form id="new-food-entry"> |     <form id="new-food-entry"> | ||||||
|       <fieldset> |       <fieldset> | ||||||
|         <legend>Pic:</legend> |         <legend>Pic:</legend> | ||||||
|         <label for="mealImage"> |         Choose Input type: | ||||||
|  |       <select id="select" name="select"> | ||||||
|  |         <option value="file">File Upload</option> | ||||||
|  |         <option value="url">From an URL</option> | ||||||
|  |       </select> | ||||||
|  |       <label for="mealImage" id="source"> | ||||||
|           Source: |           Source: | ||||||
|           <input type="text" id="mealImg" name="mealImg"> |           <input type="file" accept="image/*" id="mealImg" name="mealImg"> | ||||||
|         </label> |         </label> | ||||||
|         <label for="image-alt"> |         <label for="image-alt"> | ||||||
|           Alt Text: |           Alt Text: | ||||||
|   | |||||||
| @@ -55,9 +55,14 @@ | |||||||
|     <form id="update-food-entry"> |     <form id="update-food-entry"> | ||||||
|       <fieldset> |       <fieldset> | ||||||
|         <legend>Pic:</legend> |         <legend>Pic:</legend> | ||||||
|         <label for="mealImage"> |         Choose Input type: | ||||||
|  |         <select id="select" name="select"> | ||||||
|  |           <option value="file">File Upload</option> | ||||||
|  |           <option value="url">From an URL</option> | ||||||
|  |         </select> | ||||||
|  |         <label for="mealImage" id="source"> | ||||||
|           Source: |           Source: | ||||||
|           <input type="text" id="mealImg" name="mealImg"> |           <input type="file" accept="image/*" id="mealImg" name="mealImg"> | ||||||
|         </label> |         </label> | ||||||
|         <label for="image-alt"> |         <label for="image-alt"> | ||||||
|           Alt Text: |           Alt Text: | ||||||
|   | |||||||
| @@ -16,6 +16,43 @@ function initFormHandler() { | |||||||
| 	let tagContainer = document.getElementById("tag-container-form"); | 	let tagContainer = document.getElementById("tag-container-form"); | ||||||
| 	let form = document.querySelector("form"); | 	let form = document.querySelector("form"); | ||||||
|  |  | ||||||
|  | 	/* | ||||||
|  | 	* change the input source of the image between local file and URL  | ||||||
|  | 	* depending on user's selection | ||||||
|  | 	*/ | ||||||
|  | 	let select = document.getElementById("select"); | ||||||
|  | 	select.addEventListener("change", function() { | ||||||
|  | 		const input = document.getElementById("source"); | ||||||
|  | 	 | ||||||
|  | 		if (select.value == "file") { | ||||||
|  | 			input.innerHTML = ` | ||||||
|  | 			Source: | ||||||
|  | 			<input type="file" accept="image/*" id="mealImg" name="mealImg"> | ||||||
|  | 			`; | ||||||
|  | 		} | ||||||
|  | 		//TODO: change to photo taking for sprint 3 | ||||||
|  | 		else { | ||||||
|  | 			input.innerHTML = ` | ||||||
|  | 			Source: | ||||||
|  | 			<input type="text" id="mealImg" name="mealImg"> | ||||||
|  | 			`; | ||||||
|  | 		} | ||||||
|  | 	}); | ||||||
|  |  | ||||||
|  | 	//addressing sourcing image from local file | ||||||
|  | 	let imgDataURL = ""; | ||||||
|  | 	document.getElementById("mealImg").addEventListener("change", function() { | ||||||
|  | 		const reader = new FileReader(); | ||||||
|  | 		 | ||||||
|  | 		//store image data URL after successful image load | ||||||
|  | 		reader.addEventListener("load", ()=>{ | ||||||
|  | 			imgDataURL = reader.result; | ||||||
|  | 		}, false); | ||||||
|  | 		 | ||||||
|  | 		//convert image file into data URL for local storage | ||||||
|  | 		reader.readAsDataURL(document.getElementById("mealImg").files[0]); | ||||||
|  | 	}); | ||||||
|  | 		 | ||||||
| 	form.addEventListener("submit", function(e){ | 	form.addEventListener("submit", function(e){ | ||||||
| 	/* | 	/* | ||||||
|     *  User submits the form for their review. |     *  User submits the form for their review. | ||||||
| @@ -30,6 +67,9 @@ function initFormHandler() { | |||||||
| 			if (`${key}` !== "tag-form") { | 			if (`${key}` !== "tag-form") { | ||||||
| 				reviewObject[`${key}`] = `${value}`; | 				reviewObject[`${key}`] = `${value}`; | ||||||
| 			} | 			} | ||||||
|  | 			if (`${key}` === "mealImg" && select.value == "file") { | ||||||
|  | 				reviewObject["mealImg"] = imgDataURL; | ||||||
|  | 			} | ||||||
| 		} | 		} | ||||||
| 		reviewObject["tags"] = []; | 		reviewObject["tags"] = []; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -99,6 +99,46 @@ function setupUpdate(){ | |||||||
| 				tagContainer.append(newTag); | 				tagContainer.append(newTag); | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | 		/* | ||||||
|  | 		* change the input source of the image between local file and URL  | ||||||
|  | 		* depending on user's selection | ||||||
|  | 		*/ | ||||||
|  | 		let select = document.getElementById("select"); | ||||||
|  | 		select.addEventListener("change", function() { | ||||||
|  | 			const input = document.getElementById("source"); | ||||||
|  | 		 | ||||||
|  | 			if (select.value == "file") { | ||||||
|  | 				input.innerHTML = ` | ||||||
|  | 				Source: | ||||||
|  | 				<input type="file" accept="image/*" id="mealImg" name="mealImg"> | ||||||
|  | 				`; | ||||||
|  | 			} | ||||||
|  | 			//TODO: change to photo taking for sprint 3 | ||||||
|  | 			else { | ||||||
|  | 				input.innerHTML = ` | ||||||
|  | 				Source: | ||||||
|  | 				<input type="text" id="mealImg" name="mealImg"> | ||||||
|  | 				`; | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  |  | ||||||
|  | 		//addressing sourcing image from local file | ||||||
|  | 		let imgDataURL = ""; | ||||||
|  | 		document.getElementById("mealImg").addEventListener("change", function() { | ||||||
|  | 			console.log("reading used"); | ||||||
|  | 			const reader = new FileReader(); | ||||||
|  | 			 | ||||||
|  | 			//store image data URL after successful image load | ||||||
|  | 			reader.addEventListener("load", ()=>{ | ||||||
|  | 				imgDataURL = reader.result; | ||||||
|  | 			}, false); | ||||||
|  | 			 | ||||||
|  | 			//convert image file into data URL for local storage | ||||||
|  | 			reader.readAsDataURL(document.getElementById("mealImg").files[0]); | ||||||
|  | 		}); | ||||||
|  |  | ||||||
|  | 		 | ||||||
| 		//Take formdata values as newData when submit | 		//Take formdata values as newData when submit | ||||||
| 		form.addEventListener("submit", function(){ | 		form.addEventListener("submit", function(){ | ||||||
| 			/* | 			/* | ||||||
| @@ -113,6 +153,13 @@ function setupUpdate(){ | |||||||
| 				if (`${key}` !== "tag-form") { | 				if (`${key}` !== "tag-form") { | ||||||
| 					newData[`${key}`] = `${value}`; | 					newData[`${key}`] = `${value}`; | ||||||
| 				} | 				} | ||||||
|  | 				//Account for the case where image is not updated | ||||||
|  | 				if (`${key}` === "mealImg" && document.getElementById("mealImg").value === "") { | ||||||
|  | 					newData["mealImg"] = currReview["mealImg"]; | ||||||
|  | 				} | ||||||
|  | 				else if (`${key}` === "mealImg" && select.value == "file") { | ||||||
|  | 					newData["mealImg"] = imgDataURL; | ||||||
|  | 				} | ||||||
| 			} | 			} | ||||||
| 			newData["tags"] = []; | 			newData["tags"] = []; | ||||||
| 		 | 		 | ||||||
|   | |||||||
| @@ -229,18 +229,8 @@ describe("test App end to end", async () => { | |||||||
| 					console.log(dialog.message()); | 					console.log(dialog.message()); | ||||||
| 					await dialog.accept(); | 					await dialog.accept(); | ||||||
| 				}); | 				}); | ||||||
|  |  | ||||||
| 				// Get the delete button and click it |  | ||||||
| 				let delete_btn = await page.$("#delete-btn"); |  | ||||||
| 				await delete_btn.click(); |  | ||||||
| 				await page.waitForNavigation(); |  | ||||||
|  |  | ||||||
| 				// Check that the card was correctly removed (there should be no remaining cards) |  | ||||||
| 				review_card = await page.$("#review-card"); |  | ||||||
| 				assert.strictEqual(review_card, null); |  | ||||||
| 			}); | 			}); | ||||||
| 		}); | 		}); | ||||||
|  |  | ||||||
| 	}); | 	}); | ||||||
|  |  | ||||||
| 	after(async () => { | 	after(async () => { | ||||||
|   | |||||||
| @@ -10,44 +10,50 @@ | |||||||
| 	<!-- Recipe Card Custom Element --> | 	<!-- Recipe Card Custom Element --> | ||||||
| 	<script src="assets/scripts/ReviewCard.js" type="module"></script> | 	<script src="assets/scripts/ReviewCard.js" type="module"></script> | ||||||
|  |  | ||||||
|  |  | ||||||
| 	<!-- Main Stylesheets & Scripts -->  | 	<!-- Main Stylesheets & Scripts -->  | ||||||
| 	<!-- Temporarily commented out reset.css due to furthur discussion needed on the values of the default config--> | 	<!-- Temporarily commented out reset.css due to furthur discussion needed on the values of the default config--> | ||||||
| 	<!-- <link rel="stylesheet" href="/static/reset.css" /> --> | 	<!-- <link rel="stylesheet" href="/static/reset.css" /> --> | ||||||
| 	<link rel="stylesheet" href="./static/homepage.css" /> | 	<link rel="stylesheet" href="./static/homepage.css" /> | ||||||
| 	<script src="assets/scripts/main.js" type="module"></script> | 	<script src="assets/scripts/main.js" type="module"></script> | ||||||
|  |  | ||||||
| </head> | </head> | ||||||
| <body> | <main> | ||||||
|   <div class ="Top-Bar"> | 	<header> | ||||||
|     <img src ="./assets/images/icons/Logo.png" alt="logo" /> | 		<div class="Top-Bar" style="display: flex; justify-content: center;"> | ||||||
|     <h1 style="font-family:'Lucida Sans'"> Food Journal </h1> | 			<img src ="./assets/images/icons/Logo.png" style="align-self: center;" alt="logo" /> | ||||||
|     <form id="form"> | 			<h1 style="font-family:'Lucida Sans';"> Food Journal </h1> | ||||||
|         <input type='search' id="seaching" name="searchBar" placeholder="Search journal..."> | 			<img src ="./assets/images/icons/Logo.png" style="align-self: center;" alt="logo" /> | ||||||
|         <button class="click" type="search"> | 		</div> | ||||||
|             Search | 	</header> | ||||||
|         </button> |   	<body> | ||||||
|     </form> |  | ||||||
|     <!-- | 		<!-- | ||||||
|     <form id="form"> | 			For mobile: + flex-direction: column-reverse;" | ||||||
|         <input type='search' id="seaching" name="searchBar" placeholder="Search journal..."> | 						~ width: 100% for all divs | ||||||
|         <button class="click" type="search"> | 		--> | ||||||
|             Search | 		<div style="display: flex; max-height: 100%; "> | ||||||
|         </button> | 			<div style="width: 20%;"></div> | ||||||
|     </form> |  | ||||||
|     ---> | 			<div style="width: 60%;"> | ||||||
|  | 				<div style="display: flex; flex-direction: row; justify-content: center;">		 | ||||||
|  | 					<img src ="./assets/images/icons/Grouppink.png" alt="CREATE" style="align-self: center;" id="create-btn" onclick="window.location.assign('./CreatePage.html')"></img> | ||||||
|  | 					<h2 id="recent-reviews-text"> Recent Reviews </h2> | ||||||
|  | 					<img src ="./assets/images/icons/Grouppink.png" alt="" style="align-self: center; opacity:0;"></img> | ||||||
|  | 				</div> | ||||||
|  |  | ||||||
|  | 				<div class="review-container" id="review-container"></div> | ||||||
|  | 			</div> | ||||||
|  |  | ||||||
|  | 			<div style="width: 20%;"> | ||||||
|  | 				<form id="form" style=""> | ||||||
|  | 					<input type='search' id="seaching" name="searchBar" placeholder="Search journal..."> | ||||||
|  | 					<button class="click" type="search"> | ||||||
|  | 						Search | ||||||
|  | 					</button> | ||||||
|  | 					<div class="Filter-box"></div> | ||||||
|  | 				</form> | ||||||
| 			</div> | 			</div> | ||||||
|   <main> |  | ||||||
|     <!-- Add Food Entries Here --> |  | ||||||
|     <div class="Review-boxes"> |  | ||||||
|       <h2> Recent Reviews </h2> |  | ||||||
|       <img src ="./assets/images/icons/Grouppink.png" alt="CREATE" id="create-btn" onclick="window.location.assign('./CreatePage.html')"></img> |  | ||||||
| 			 | 			 | ||||||
| 		</div> | 		</div> | ||||||
|       <div class="Filter-box"> |   	</body> | ||||||
|     </div> | </main> | ||||||
|     <div class="review-container" id="review-container"></div> |  | ||||||
|   </main> |  | ||||||
|   <!--<button type="button" id="create-btn"><a href='./CreatePage.html'></a>CREATE</button>--> |  | ||||||
| </body> |  | ||||||
| </html> | </html> | ||||||
|   | |||||||
| @@ -1,65 +1,53 @@ | |||||||
| /* homepage.css */ | /* homepage.css */ | ||||||
| /* Color*/ | /* Color*/ | ||||||
| body{ | body{ | ||||||
|     background-color: #13323b; |     background-color: #97a5bd; | ||||||
| } | } | ||||||
| .Top-Bar{ | .Top-Bar{ | ||||||
|     margin-top: -8cm; |  | ||||||
| } | } | ||||||
| .Top-Bar > img{ | .Top-Bar > img{ | ||||||
|     position: relative; |     position: relative; | ||||||
|     top: 7.5cm; |  | ||||||
| } | } | ||||||
| .Top-Bar > h1{ | .Top-Bar > h1{ | ||||||
|     position: relative; |     position: relative; | ||||||
|     left: 10.5cm; |     text-align: center; | ||||||
|     top: 2.2cm; |     color: #E4C3D2; | ||||||
|     font-size: 3cm; |     font-size: 100px; | ||||||
|     color: #EAA9BC;  |     font-family: 'Lucida Sans'; | ||||||
|    |  | ||||||
| } | } | ||||||
| .Top-Bar > form{ | .Top-Bar > form{ | ||||||
|     position: relative; |     position: relative; | ||||||
|     left: 32cm; |     float: right; | ||||||
| } | } | ||||||
| .Review-boxes { | .Review-boxes { | ||||||
|     position: relative; |     position: relative; | ||||||
| } | } | ||||||
|  |  | ||||||
| .Review-boxes > h2 { | #recent-reviews-text { | ||||||
|     position: relative; |     font-family: 'Lucida Sans'; | ||||||
|     left: 10cm; |     text-align: center; | ||||||
|     font-size: 1.5cm; |     font-size: 80px; | ||||||
|     color: #EAA9BC;  |     color: #E4C3D2; | ||||||
| } | } | ||||||
| .Review-boxes > input { | .Review-boxes > input { | ||||||
|     position: relative; |     position: relative; | ||||||
|     left: 20.34cm; | } | ||||||
|     top: -3.5cm; |  | ||||||
|  | img#create-btn { | ||||||
|  |     position: relative; | ||||||
| } | } | ||||||
|  |  | ||||||
| .Filter-box{ | .Filter-box{ | ||||||
|     width:300px; |     background: #e4d9e9; | ||||||
|     height:700px; |     position: absolute; | ||||||
|     background: #8D4E62; |     border: 5px solid #99a2c2; | ||||||
|     position: relative; |  | ||||||
|     left: 29.5cm; |  | ||||||
|     top: -5.5cm; |  | ||||||
| } | } | ||||||
| .review-container{ | .review-container{ | ||||||
|     display: flex; |     display: flex; | ||||||
|     position: relative; |     position: relative; | ||||||
|     top: -22cm; |  | ||||||
|     left: 5cm; |  | ||||||
|     max-width: 900px; |  | ||||||
|     flex-wrap: wrap; |     flex-wrap: wrap; | ||||||
| } | } | ||||||
| .review-container > div { | .review-container > div { | ||||||
|     background-color: #f1f1f1; |     background-color: #f1f1f1; | ||||||
|     width: 200px; |  | ||||||
|     height: 200px; |  | ||||||
|     margin: 10px; |  | ||||||
|     text-align: center; |     text-align: center; | ||||||
|     line-height: 75px; |  | ||||||
|     font-size: 30px; |  | ||||||
|   } |   } | ||||||
		Reference in New Issue
	
	Block a user