Skip to content
Open

UI #1

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
125359a
Added html boilerplate
ElMonstro Sep 7, 2018
b18cdb6
added header
ElMonstro Sep 7, 2018
57a89f8
Added items section
ElMonstro Sep 7, 2018
4f61ac3
add the main css file
ElMonstro Sep 8, 2018
0c578ab
Format the header
ElMonstro Sep 8, 2018
3bba1d8
Format items section
ElMonstro Sep 8, 2018
330ed8a
add shadows to the ui
ElMonstro Sep 8, 2018
39aca00
Add footer
ElMonstro Sep 8, 2018
aca6a19
organized repository into folders [Finishes #160314009]
ElMonstro Sep 8, 2018
d66fb2d
merge branch 'home_page' into develop
ElMonstro Sep 8, 2018
4ffd21d
Add shadow to button
ElMonstro Sep 8, 2018
5a1fb63
Merge branch 'home_page' into develop [Finishes #160342448]
ElMonstro Sep 9, 2018
a04c6db
Add hover behaviour to buttons
ElMonstro Sep 10, 2018
86f841e
Add markup to register.html
ElMonstro Sep 10, 2018
9ea8821
format markup with css
ElMonstro Sep 10, 2018
65f127e
Merge branch 'register_page' into develop [Finishes #160342176]
ElMonstro Sep 10, 2018
f73d9fd
Add markup and styling to login.html
ElMonstro Sep 10, 2018
4a5395a
Merge branch 'login_page' into develop [Finishes #160342176]
ElMonstro Sep 10, 2018
888ce85
Create README.md
ElMonstro Sep 10, 2018
d45abcc
Fix styling errors [finishes #160343110]
ElMonstro Sep 10, 2018
daae852
style fix
ElMonstro Sep 10, 2018
bb39d03
Add food_tray markup
ElMonstro Sep 10, 2018
bcdba99
Add style to aside
ElMonstro Sep 11, 2018
adeb564
Move aside#sidebar into section#items
ElMonstro Sep 11, 2018
c8b2898
Float aside#sidebar to the right
ElMonstro Sep 11, 2018
10f3180
Add quantity input box
ElMonstro Sep 11, 2018
e2f29e4
Finish styling the food tray
ElMonstro Sep 11, 2018
4549522
Reduce width between item children
ElMonstro Sep 11, 2018
1eadce5
fFix
ElMonstro Sep 11, 2018
2094c20
Add main.js file
ElMonstro Sep 11, 2018
d6d5229
Move js folder to root directory
ElMonstro Sep 11, 2018
461f348
Add addItemToFoodTray js function
ElMonstro Sep 13, 2018
b30172e
Add addButtonClickListener
ElMonstro Sep 13, 2018
d0a2ae2
Add DomContentLoaded Event
ElMonstro Sep 13, 2018
4405186
Add working code for add to tray buttons
ElMonstro Sep 13, 2018
cb44c40
Break add items to tray to two functions to accommodate tray object
ElMonstro Sep 13, 2018
c98410b
Add code to clear the foodtray before repopulating it
ElMonstro Sep 13, 2018
0455577
[finishes #160343110]Merge branch 'food_tray' into UI
ElMonstro Sep 13, 2018
0483e15
Add removeItenFromTray function
ElMonstro Sep 13, 2018
4c397aa
Del removebutton listener from addButtonlistener to displayItemsInTray
ElMonstro Sep 13, 2018
a14c3ab
Add onclick listener to delete button span
ElMonstro Sep 14, 2018
b93fac2
[finishes #160494317] Merge branch 'food_tray' into UI
ElMonstro Sep 14, 2018
436720d
Remove unnecessary code
ElMonstro Sep 14, 2018
39520ef
Add order button
ElMonstro Sep 15, 2018
f247aee
Add logic to display checkout btn or not depending on the state tray
ElMonstro Sep 15, 2018
3aea2b2
[finishes #160503481]Merge branch 'food_tray' into UI
ElMonstro Sep 15, 2018
b26571e
Setup admin page javascript and orders object
ElMonstro Sep 25, 2018
476f15f
Setup basic html for admin panel; consistent with ui theme
ElMonstro Sep 25, 2018
741d03a
Fix markup and styling, add icons
ElMonstro Sep 27, 2018
f1d6f54
Add display orders function that creates orders by iterating an object
ElMonstro Sep 27, 2018
133cdc3
Add display orders function that creates orders by iterating an object
ElMonstro Sep 27, 2018
928fe01
[finishes #160533680]Merge branch 'ft_display_orders' into UI
ElMonstro Sep 27, 2018
0b7a492
Add function to display accepted orders
ElMonstro Sep 28, 2018
d801929
Fix acepted orders function
ElMonstro Sep 28, 2018
feb3996
Fix AcceptedOrders to allow appending of status to order array
ElMonstro Sep 28, 2018
da41fe9
Add code to orderButtons functions
ElMonstro Sep 28, 2018
d3ac776
[finishes #160826974]Merge branch 'ft_accept_and_reject_orders' into UI
ElMonstro Sep 28, 2018
392d4e1
[#160852165]
ElMonstro Sep 28, 2018
fefc7e5
Add code for complete order function [finishes #160852165]
ElMonstro Sep 28, 2018
2ebf2a0
changes
ElMonstro Oct 1, 2018
274d76b
Create the add foods button
ElMonstro Oct 2, 2018
ecc881a
Setup object [#160917847]
ElMonstro Oct 2, 2018
905869e
Change boxes dislplay to grid
ElMonstro Oct 2, 2018
d30345c
Fix boxes markup and styling
ElMonstro Oct 2, 2018
ac2972f
Add function to display items from items object
ElMonstro Oct 2, 2018
bd8bb69
Add images
ElMonstro Oct 2, 2018
fccbdfb
Remove place holder boxes
ElMonstro Oct 2, 2018
6e631ce
Style the food-tray
ElMonstro Oct 2, 2018
a484c9f
Add item images and fix foodtray styling
ElMonstro Oct 3, 2018
b7b0c87
Merge branch 'ch_render_food_items_from_object' into UI [finishes #16…
ElMonstro Oct 3, 2018
f8c7f22
Merge branch 'UI' into ft_admin_add_item
ElMonstro Oct 3, 2018
a1fdada
Add modal div
ElMonstro Oct 3, 2018
ac46a7f
Add form to modal content[#160917646]
ElMonstro Oct 4, 2018
63a802f
Add AddItem and closeModal Functions
ElMonstro Oct 4, 2018
c423755
Clean addItem fuction
ElMonstro Oct 4, 2018
193fc10
Merge branch 'ft_admin_add_item' into UI [finishes #160917646]
ElMonstro Oct 4, 2018
21647db
Fix: Login and register page border
ElMonstro Oct 5, 2018
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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
static/img/trash1.jpg
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Fast-Food-Fast
UI for fast food ordering site
213 changes: 213 additions & 0 deletions js/admin.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,213 @@
'use strict';



var newOrders =
{jay: [1, ['coke', 1,],['fries', 2,]],
moe:[2, ['sausage', 4],['samosa',3]],
emm: [3, ['burger', 3],['coke', 5],['sausage', 2]],
fiddy: [4, ['coke', 1],['fries', 1]],
dmx: [1, ['coke', 1,],['fries', 2,]],
hov:[2, ['sausage', 4],['samosa',3]],
pac: [3, ['burger', 3],['coke', 5],['sausage', 2]],
biggy: [4, ['coke', 1],['fries', 1]],
ti: [3, ['burger', 3],['coke', 5],['sausage', 2]],
joc: [4, ['coke', 1],['fries', 1]],
wayne: [1, ['coke', 1,],['fries', 2,]],
jon:[2, ['sausage', 4],['samosa',3]],
kaka: [3, ['burger', 3],['coke', 5],['sausage', 2]],
kanye: [4, ['coke', 1],['fries', 1]]
};

var acceptedOrders =
{

};
// Global constants and vaiables
const ordersDiv = document.querySelector('#o-list');
const acceptedOrdersDiv = document.querySelector('#ao-list');
const addItemBtn = document.querySelector('#addItem');
const addFoodbtn = document.querySelector('#add-fds');
const adminModal = document.querySelector('.admin-modal');
const closeButton = document.querySelector('.close-btn');
const itemNameInput = document.querySelector('#item-name');
const imgNameInput = document.querySelector('#img');
const priceInput = document.querySelector('#itm-price');
// Liten for domcontentloaded event
document.addEventListener('DOMContentLoaded', () =>{
addItemBtn.addEventListener('click', addItem);
addFoodbtn.addEventListener('click', addItem);
adminModal.addEventListener('click', closeModal);
closeButton.addEventListener('click', closeModal);
});

// Displays Orders by looping through newOrders object
function displayOrders(){
ordersDiv.innerHTML = '';
for (var name in newOrders){
var orderList = newOrders[name];
var orderNo = orderList[0];
const orderDiv = document.createElement('DIV');
orderDiv.className = 'order'
const foodList = document.createElement('UL');
const qtyList = document.createElement('UL');

orderDiv.innerHTML= `<span>${orderNo}</span>
<span>${name}</span>
<div class="order-list">

</div>
<div class="qty">

</div>
<span><span>Kshs </span>500</span>
<div class="buttons">
<span><img class="accept" src="../static/img/tick.jpg" alt="OK"></span>
<span><img class="reject" src="../static/img/trash.png" alt="NO"></span>
</div>`


const nameListDiv = orderDiv.querySelector('.order-list');
const qtyListDiv = orderDiv.querySelector('.qty');
const buttonDiv = orderDiv.querySelector('.buttons');
buttonDiv.addEventListener('click', orderButtons);
for (var i = 1; i < orderList.length; i++){
var order = orderList[i];
var orderName = order[0];
var qty = order[1];
var nameLi = document.createElement('LI');
nameLi.innerText = orderName;
var qtyLi = document.createElement('LI');
qtyLi.innerText = qty;
nameListDiv.appendChild(nameLi);
qtyListDiv.appendChild(qtyLi);
}

ordersDiv.appendChild(orderDiv);
}
}

// Displays Orders by looping through acceptedOrders object

function displayAcceptedOrders(){
acceptedOrdersDiv.innerHTML = '';

for (name in acceptedOrders){
const orderDiv = document.createElement('DIV');
orderDiv.className = 'order';

var orderList = acceptedOrders[name];
var orderNo = orderList[0];
var lastIndex = orderList.length - 1;
var status = orderList[lastIndex];
const statusBtn = document.createElement('BUTTON');
statusBtn.addEventListener('click', completeOrder);

if (status){
statusBtn.innerText = 'Completed';
statusBtn.style.backgroundColor = 'rgb(7, 175, 58)';
statusBtn.disabled = true;
}else{
statusBtn.innerText = 'Incomplete';
statusBtn.style.backgroundColor = 'rgb(255, 16, 16)';
}

orderDiv.innerHTML = `
<span>${orderNo}</span>
<span>${name}</span>
<div class="order-list">

</div>
<div class="qty">

</div>
<span><span>Kshs </span>500</span>
<div class="cmplt-order">
</div>`


const cmpltBtnDiv = orderDiv.querySelector('.cmplt-order');
cmpltBtnDiv.appendChild(statusBtn);
const nameListDiv = orderDiv.querySelector('.order-list');
const qtyListDiv = orderDiv.querySelector('.qty');
for (var i = 1; i < orderList.length-1; i++){
var order = orderList[i];
var orderName = order[0];
var qty = order[1];
var nameLi = document.createElement('LI');
nameLi.innerText = orderName;
var qtyLi = document.createElement('LI');
qtyLi.innerText = qty;
nameListDiv.appendChild(nameLi);
qtyListDiv.appendChild(qtyLi);
}
acceptedOrdersDiv.appendChild(orderDiv);
}
}

displayOrders();
displayAcceptedOrders();

// Event Functions

// invoked when reject and accept buttons are clicked
function orderButtons(event){

if (event.target.className == 'accept'){
var name = event.target.parentElement.parentElement.parentElement.children[1].innerText;
var orderList = newOrders[name];
orderList.push(false);
acceptedOrders[name] = orderList;
delete newOrders[name];
displayOrders();
displayAcceptedOrders();


}
if (event.target.className == 'reject'){
var name = event.target.parentElement.parentElement.parentElement.children[1].innerText;
delete newOrders[name];
displayOrders();
}

}


// Invoked when complete order button is clicked
function completeOrder(event){
event.target.style.backgroundColor = 'rgb(7, 175, 58)';
event.target.innerText = 'Completed';
var name = event.target.parentElement.parentElement.children[1].innerText;
var lastIndex = acceptedOrders[name].length -1;
acceptedOrders[name][lastIndex] = true;
event.target.disabled = true;
}


// Add item to homepage
function addItem (e){
if (e.target.id == 'add-fds'){
adminModal.style.display = 'block';
}else{
e.preventDefault();
var imgName = imgNameInput.value;
var itemName = itemNameInput.value;
var price = priceInput.value
if(imgName != '' & itemName != '' & price != ''){
var imgHtml = `<img src="../static/img/${imgName}">`;
// send item details to backend

}

}

}


// Close modal
function closeModal(e){
if (e.target.className == 'admin-modal' || e.target.className == 'close-btn'){
adminModal.style.display = 'none';
}
}

150 changes: 150 additions & 0 deletions js/main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
'use strict';

// Global constants and variables
const foodTray = document.querySelector('.food-tray');
const addButtons = document.querySelectorAll('.button_1');
var isCheckoutBtn = false;
const boxes = document.querySelector('#boxes');

// Image html strings
var items =
{
Coke: [50, '<img src="../static/img/coke.png">'],
Burger: [50, '<img src="../static/img/burger.png">'],
'Mountain Dew': [500, '<img src="../static/img/mountaindew.png">'],
Fries: [100, '<img src="../static/img/fries.png">'],
Hotdog: [70, '<img src="../static/img/hotdog.png">'],
Drumsticks:[120, '<img src="../static/img/drumsticks.png">'],
Wings: [120, '<img src="../static/img/wings.png">'],
Taco: [50, '<img src="../static/img/taco.png">'],
}
var tray = {};

// Fuction to check if tray is empty
function isEmpty(dict){
return Object.getOwnPropertyNames(dict) == 0;
}

// Liten for domcontentloaded event
/*document.addEventListener('DOMContentLoaded', () =>{
addButtonClickListener();
});*/


function displayItems(){
for (var item in items){
var price = items[item][0];
var imgHtml = items[item][1];
const boxDiv = document.createElement('div');
boxDiv.className = 'box';
boxDiv.innerHTML =
`<div class="image">${imgHtml}

</div>
<div class="description">
<div> <span class="name">${item}</span><br>
<span class="price"><span>Kshs</span><span class="item-price">${price}</span><span>/=</span></span></div>
<span class="button_1"><img src="../static/img/add-icon.png" alt=""></span>
</div>`;

boxDiv.querySelector('.button_1 img').addEventListener('click', (e) =>{
const boxItem = e.target.parentElement.parentElement.parentElement;
addItemToFoodTray(boxItem);
displayItemsInTray();
})


boxes.appendChild(boxDiv);


}
}

displayItems();
// Display or not display checkout button
function displayCheckoutBtn(){
const sidebar = document.querySelector('#sidebar');
if (isEmpty(tray)){
sidebar.querySelector('#checkout-btn').className = 'invincible';
}
}

// Add listeners to add button
/* function addButtonClickListener(){
for (const addButton of addButtons){
addButton.addEventListener('click', () =>{
const boxItem = addButton.parentElement.parentElement;
addItemToFoodTray(boxItem);
displayItemsInTray();

})

}
} */


// Add Items to tray object
function addItemToFoodTray(item){
const itemName = item.querySelector('.name').innerHTML;
const itemPrice = item.querySelector('.item-price').innerHTML;
const itemImg = item.querySelector('.image').innerHTML;
const itemQuantity = 1;
const itemsInFoodTray = foodTray.querySelectorAll('item');
const checkoutBtn = document.querySelector('#checkout-btn');




if (itemName in tray){
tray[itemName][1] += 1;
}
else{
tray[itemName] = [itemImg, itemQuantity, itemPrice];
}

checkoutBtn.className = '';

}


// Remove function from tray
function removeItemFromTray(name){
delete tray[name];
displayCheckoutBtn();
displayItemsInTray();
}


// Display current items in the tray object
function displayItemsInTray(){
foodTray.innerHTML = "";
if (tray.isEmpty){
foodTray.innerHTML="";
}
for (var name in tray){
var totalPrice = parseInt(tray[name][1]) * parseInt(tray[name][2]);
const orderDetails =
`<div class="button">
<span class="delete-btn" onclick="removeItemFromTray('${name}');"><img src="../static/img/trash.png" alt=""></span>\
</div>
<div class="cart-image">
${tray[name][0]}
</div>
<div class="description">
<span class="item-name">${name}</span>
</div>
<div class="quantity">
<span class="qt"> ${tray[name][1]}</span>
</div>
<div class="total-price"><span>Kshs</span> <span>${totalPrice}</span></div>`;


const elementToBeAdded = document.createElement('DIV');
elementToBeAdded.className = 'item';
elementToBeAdded.innerHTML = orderDetails;
foodTray.appendChild(elementToBeAdded);



}
}
Loading