Merge branch 'sprint-2-css-review-details' of https://github.com/cse110-fa22-group29/cse110-fa22-group29 into sprint-2-css-review-details

This commit is contained in:
d7hernan 2022-11-20 21:21:25 -08:00
commit 6d126f6085
13 changed files with 182 additions and 96 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -1,3 +1,4 @@
{ {
"attr-value-not-empty": false "attr-value-not-empty": false,
"space-tab-mixed-disabled": false
} }

View File

@ -1,3 +1,4 @@
{ {
"extends": "stylelint-config-standard" "extends": "stylelint-config-standard",
"ignore": ["inside-parens", "param", "value"]
} }

3
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,3 @@
{
"liveServer.settings.port": 5501
}

View File

@ -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:

View File

@ -53,9 +53,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:

View File

@ -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"] = [];

View File

@ -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"] = [];

View File

@ -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 () => {

View File

@ -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>

View File

@ -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;
} }