From 89d29a5ce25011feb1d9f527a617ea2b3afc3ba6 Mon Sep 17 00:00:00 2001 From: Connor L Jackson Date: Sat, 26 Nov 2016 14:34:29 -0500 Subject: [PATCH 1/7] Updated the link titles on each page to include shopping cart --- html/webpages/homePage.html | 2 +- html/webpages/listingPage.html | 2 +- html/webpages/requestPage.html | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/html/webpages/homePage.html b/html/webpages/homePage.html index 53169bf..73f8d0b 100644 --- a/html/webpages/homePage.html +++ b/html/webpages/homePage.html @@ -57,7 +57,7 @@
  • Request Device
  • Return Device
  • Device Listing
  • -
  • User Information
  • +
  • Shopping Cart
  • diff --git a/html/webpages/listingPage.html b/html/webpages/listingPage.html index d925d90..e12d68a 100644 --- a/html/webpages/listingPage.html +++ b/html/webpages/listingPage.html @@ -75,7 +75,7 @@
  • Request Device
  • Return Device
  • Device Listing
  • -
  • User Information
  • +
  • Shopping Cart
  • diff --git a/html/webpages/requestPage.html b/html/webpages/requestPage.html index 957c021..35e1ee3 100644 --- a/html/webpages/requestPage.html +++ b/html/webpages/requestPage.html @@ -80,7 +80,7 @@
  • Request Device
  • Return Device
  • Device Listing
  • -
  • User Information
  • +
  • Shopping Cart
  • From 37496cb77db6da3ba2a2a5e31bf4b8a1591b02cc Mon Sep 17 00:00:00 2001 From: Connor L Jackson Date: Mon, 28 Nov 2016 17:36:06 -0500 Subject: [PATCH 2/7] Modification to homepage links --- html/webpages/homePage.html | 38 +++++++++++++++++----------------- html/webpages/listingPage.html | 2 +- html/webpages/requestPage.html | 4 ++-- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/html/webpages/homePage.html b/html/webpages/homePage.html index 73f8d0b..06d3f64 100644 --- a/html/webpages/homePage.html +++ b/html/webpages/homePage.html @@ -57,7 +57,7 @@
  • Request Device
  • Return Device
  • Device Listing
  • -
  • Shopping Cart
  • +
  • Shopping Cart
  • @@ -65,28 +65,28 @@ diff --git a/html/webpages/listingPage.html b/html/webpages/listingPage.html index e12d68a..855c41d 100644 --- a/html/webpages/listingPage.html +++ b/html/webpages/listingPage.html @@ -75,7 +75,7 @@
  • Request Device
  • Return Device
  • Device Listing
  • -
  • Shopping Cart
  • +
  • Shopping Cart
  • diff --git a/html/webpages/requestPage.html b/html/webpages/requestPage.html index 35e1ee3..600446f 100644 --- a/html/webpages/requestPage.html +++ b/html/webpages/requestPage.html @@ -43,7 +43,7 @@ vertical-align: center; } - button.request{ + button.requestbutton{ display: block; margin: auto; } @@ -80,7 +80,7 @@
  • Request Device
  • Return Device
  • Device Listing
  • -
  • Shopping Cart
  • +
  • Shopping Cart
  • From b5be61a5cdcf88a8728ffa78ab0c04627b0715b5 Mon Sep 17 00:00:00 2001 From: Connor L Jackson Date: Mon, 28 Nov 2016 17:36:16 -0500 Subject: [PATCH 3/7] Created shopping cart page --- html/webpages/shoppingCart.html | 71 +++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 html/webpages/shoppingCart.html diff --git a/html/webpages/shoppingCart.html b/html/webpages/shoppingCart.html new file mode 100644 index 0000000..3a627de --- /dev/null +++ b/html/webpages/shoppingCart.html @@ -0,0 +1,71 @@ + + + + + + + + + + Synchrony Financial + + + + + + + + + + + + + + + +
    +
    + + + \ No newline at end of file From b15f211d0103a2e903ce0657fa4faf47b510b743 Mon Sep 17 00:00:00 2001 From: Connor L Jackson Date: Mon, 28 Nov 2016 17:36:32 -0500 Subject: [PATCH 4/7] Implementing the request button --- html/javascript/request.js | 92 ++++++++++++++++++++++++++++++++++---- 1 file changed, 84 insertions(+), 8 deletions(-) diff --git a/html/javascript/request.js b/html/javascript/request.js index b27d54e..f0a7022 100644 --- a/html/javascript/request.js +++ b/html/javascript/request.js @@ -2,63 +2,139 @@ var options = document.getElementsByClassName('option'); var dev1 = { + id: 1, name:"George", description:"George is probably the coolest iPhone to exist. Ever. Point blank, period.", hardware:"iphone", - software:"apple" + software:"apple", }; var dev2 = { + id: 2, name:"Greyson", description:"Greyson is pretty cool.. I guess.", hardware:"iphone", - software:"apple" + software:"apple", }; var dev3 = { + id: 3, name:"Linkin Park", description:'"The hardest part of ending is starting again."', hardware:"ipad", - software:"apple" + software:"apple", }; var dev4 = { + id: 4, name:"Abercrombie", description:"To all the people that hated me in high school, I have the prettiest clothes you all wear now!!", hardware:"ipad", - software:"apple" + software:"apple", }; var dev5 = { + id: 5, name:"Hulk", description:"Go ahead and HULK SMASH! this awesome computer stick into your USB.", hardware:"computerStick", - software:"intel" + software:"intel", }; var dev6 = { + id: 6, name:"Captain America", description:'"Make America Great Again. Wait, thats someone else.."', hardware:"computerStick", - software:"intel" + software:"intel", }; var devices = [dev1, dev2, dev3, dev4, dev5, dev6]; +//add event listeners to the options in the left sidebar for(var a = 0; a < options.length; a++){ var type = options[a].getAttribute('data-type'); options[a].addEventListener('click', show); } +//when an option is selected, show a new list of devices based on what the user asked for function show(){ + //get the option that you selected var type = this.getAttribute('data-type'); var html = ''; + //iterate through the hardcoded device DB and select all the ones that match the selected option for(var i = 0; i < devices.length; i++){ - if(type.localeCompare(devices[i].hardware) == 0 || type.localeCompare(devices[i].software) == 0){ - html += '
    ' + devices[i].name + '

    ' + devices[i].description + '


    ' + if((type.localeCompare(devices[i].hardware) == 0 || type.localeCompare(devices[i].software) == 0)) && !isUnavailable(i){ + html += '
    ' + devices[i].name + '

    ' + devices[i].description + '


    ' } } + //add to HTML page document.getElementById('devContainer').innerHTML = html; + + //now we need to add event listeners to all the request buttons + var requestbuttons = document.getElementsByClassName('requestbutton'); + for(var i = 0; i < requestbuttons.length; i++){ + requestbuttons[i].addEventListener('click',addToCart); + } +} + +function addToCart(){ + var id = this.getAttribute('id'); + id = parseInt(id.replace(/[^0-9\.]/g,''),10); //this gets just the numerical value from the id! + if(!inCart(id)){ //if not in the cart + var cart = getCartItems(); //this is an array + cart.push(id); //push to bottom of cart + localStorage.setItem('cart', JSON.stringify(cart)); + } + else + alert("That item is already in your cart!"); +} + +function inCart(id){ + var cart = getCartItems(); + if(cart.length == 0) //if nothing's in the cart + return 0; + else{ //something is in the cart + for(var i = 0; i < cart.length; i++){ + if(cart[i] === id) + return 1; + } + } + return 0; +} + +function getCartItems(){ + //initiate array for them + var cart = new Array; + //get them from local storage + var cart_str = localStorage.getItem('cart'); + //if there is at least one object already we need to convert it from JSON to string + if (cart_str !== null) { + cart = JSON.parse(cart_str); + } + return cart; +} + +function getUnavailableItems(){ + var unavailable = new Array; + var unavailable_str = localStorage.getItem('unavailable'); + if(unavailable_str !== null){ + unavailable = JSON.parse(unavailable_str); + } + return unavailable; +} + +function isUnavailable(id){ + var unavailable = getUnavailableItems(); + if(unavailable.length == 0) + return 0; + else{ + for(var i = 0; i < unavailable.length; i++){ + if(unavailable[i] === id) + return 1; + } + } + return 0; } \ No newline at end of file From a86715436c00bb6cc35cf7ccac94c5c7da6991ee Mon Sep 17 00:00:00 2001 From: Connor L Jackson Date: Mon, 28 Nov 2016 17:36:51 -0500 Subject: [PATCH 5/7] Implementing orders --- html/javascript/shoppingCart.js | 88 +++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 html/javascript/shoppingCart.js diff --git a/html/javascript/shoppingCart.js b/html/javascript/shoppingCart.js new file mode 100644 index 0000000..75f631e --- /dev/null +++ b/html/javascript/shoppingCart.js @@ -0,0 +1,88 @@ +var dev1 = { + id: 1, + name:"George", + description:"George is probably the coolest iPhone to exist. Ever. Point blank, period.", + hardware:"iphone", + software:"apple", +}; + +var dev2 = { + id: 2, + name:"Greyson", + description:"Greyson is pretty cool.. I guess.", + hardware:"iphone", + software:"apple", +}; + +var dev3 = { + id: 3, + name:"Linkin Park", + description:'"The hardest part of ending is starting again."', + hardware:"ipad", + software:"apple", +}; + +var dev4 = { + id: 4, + name:"Abercrombie", + description:"To all the people that hated me in high school, I have the prettiest clothes you all wear now!!", + hardware:"ipad", + software:"apple", +}; + +var dev5 = { + id: 5, + name:"Hulk", + description:"Go ahead and HULK SMASH! this awesome computer stick into your USB.", + hardware:"computerStick", + software:"intel", +}; + +var dev6 = { + id: 6, + name:"Captain America", + description:'"Make America Great Again. Wait, thats someone else.."', + hardware:"computerStick", + software:"intel", +}; + +var devices = [dev1, dev2, dev3, dev4, dev5, dev6]; + +function getCartItems(){ + //initiate array for them + var cart = new Array; + //get them from local storage + var cart_str = localStorage.getItem('cart'); + //if there is at least one object already we need to convert it from JSON to string + if (cart_str !== null) { + cart = JSON.parse(cart_str); + } + return cart; +} + +function show(){ + var cart = getCartItems(); + var html = ''; + if(cart.length !== 0){ + for(var i = 0; i < cart.length; i++){ + var id = cart[i]; //this gets the id value from the cart + for(int j = 0; j < devices.length; j++){ //iterate device list + if(devices[j].id === id){ //match the id's + html += '
    ' + devices[j].name + '
    '; //create listing of all the devices + break; //break out of loop when we match + } + } + } + } + else{ + html += 'Shopping cart is empty.'; + } + + document.getElementById('shoppingContainer').innerHTML = html; //adds what we just generated to the webpage + + var checkboxes = document.getElementsByClassName('deviceCheckbox'); //get all the checkboxes we just placed! + for(int i = 0; i < checkboxes.length; i++){ + checkboxes[i].addEventListener('click',addToSelected); //when we click on a checkbox, it should add that item to the selected local storage + } + +} \ No newline at end of file From bb2815573314eb5dbbc62baec3737ce65ea9fd03 Mon Sep 17 00:00:00 2001 From: Connor L Jackson Date: Mon, 28 Nov 2016 20:20:11 -0500 Subject: [PATCH 6/7] Functionality works based on some debugging --- html/javascript/request.js | 6 +- html/javascript/shoppingCart.js | 162 +++++++++++++++++++++++++++----- html/webpages/shoppingCart.html | 13 ++- 3 files changed, 154 insertions(+), 27 deletions(-) diff --git a/html/javascript/request.js b/html/javascript/request.js index f0a7022..85435d3 100644 --- a/html/javascript/request.js +++ b/html/javascript/request.js @@ -65,8 +65,8 @@ function show(){ //iterate through the hardcoded device DB and select all the ones that match the selected option for(var i = 0; i < devices.length; i++){ - if((type.localeCompare(devices[i].hardware) == 0 || type.localeCompare(devices[i].software) == 0)) && !isUnavailable(i){ - html += '
    ' + devices[i].name + '

    ' + devices[i].description + '


    ' + if((type.localeCompare(devices[i].hardware) == 0 || type.localeCompare(devices[i].software) == 0) && !isUnavailable(i)){ + html += '
    ' + devices[i].name + '

    ' + devices[i].description + '


    ' } } @@ -132,7 +132,7 @@ function isUnavailable(id){ return 0; else{ for(var i = 0; i < unavailable.length; i++){ - if(unavailable[i] === id) + if(unavailable[i] == (id+1)) return 1; } } diff --git a/html/javascript/shoppingCart.js b/html/javascript/shoppingCart.js index 75f631e..990feb4 100644 --- a/html/javascript/shoppingCart.js +++ b/html/javascript/shoppingCart.js @@ -1,3 +1,8 @@ +//here are all the hardcoded devices + +var array = new Array; +localStorage.setItem('unavailable',JSON.stringify(array)); + var dev1 = { id: 1, name:"George", @@ -46,43 +51,156 @@ var dev6 = { software:"intel", }; -var devices = [dev1, dev2, dev3, dev4, dev5, dev6]; +var devices = [dev1, dev2, dev3, dev4, dev5, dev6]; //put them all into an array +var checked = new Array; //this is the array that will indicate whether a shopping cart item is checked off or not + +//adding event listeners to all the options, such as ordering and deleting +document.getElementById('os').addEventListener('click',orderSelected); +document.getElementById('ds').addEventListener('click',deleteSelected); +document.getElementById('oa').addEventListener('click',orderAll); +document.getElementById('da').addEventListener('click',deleteAll); + +show(); //on load, we want to show everything function getCartItems(){ - //initiate array for them - var cart = new Array; - //get them from local storage - var cart_str = localStorage.getItem('cart'); - //if there is at least one object already we need to convert it from JSON to string - if (cart_str !== null) { + var cart = new Array; //initiate array for them + var cart_str = localStorage.getItem('cart'); //get them from local storage + if (cart_str !== null) { //if there is at least one object already we need to convert it from JSON to string cart = JSON.parse(cart_str); } - return cart; + return cart; //return value is an array } +/** +This function displays a list of devices that a user has currently in their shopping cart. +**/ function show(){ - var cart = getCartItems(); - var html = ''; - if(cart.length !== 0){ - for(var i = 0; i < cart.length; i++){ - var id = cart[i]; //this gets the id value from the cart - for(int j = 0; j < devices.length; j++){ //iterate device list - if(devices[j].id === id){ //match the id's + var cart = getCartItems(); //get all the cart items you want to show + var html = ''; //html string initially empty + if(cart.length !== 0){ //only continue if there are cart items + for(var i = 0; i < cart.length; i++){ //iterate cart + var id = cart[i]; //this gets the id value from the cart + for(var j = 0; j < devices.length; j++){ //iterate device list + if(devices[j].id === id){ //match the id's html += '
    ' + devices[j].name + '
    '; //create listing of all the devices - break; //break out of loop when we match + break; //break out of loop when we match } } } } - else{ - html += 'Shopping cart is empty.'; + else{ //no point in doing all that computing if the list is empty + html += 'Shopping cart is empty.'; //so give a nice error message. + } + + document.getElementById('shoppingContainer').innerHTML = html; //adds what we just generated to the webpage + + var checkboxes = document.getElementsByClassName('deviceCheckbox'); //get all the checkboxes we just placed! + for(var i = 0; i < checkboxes.length; i++){ //iterate them + checkboxes[i].addEventListener('click',changeStatus); //when we click on a checkbox, it should add/remove the id from the selected array + } +} + +/** +When a checkbox is clicked, either a device needs to be checked or unchecked in the shopping cart. This function handles JUST that. +**/ +function changeStatus(){ + var id = this.getAttribute('id'); //get the checkbox's id + if(this.checked == true){ //we just checked it off + checked.push(id); //add item to the selected list + } + else{ //we just unchecked it + for(var i = 0; i < checked.length; i++){ //iterate checked array + if(id == checked[i]) //find the right checkbox + checked.splice(i,1); //remove from the array + } + } +} + +/** +This function takes all the devices we selected and simulates an order on them. +**/ +function orderSelected(){ + var response = confirm("Are you sure you'd like to order the selected items?"); + if(response == true){ //if they confirm + for(var i = 0; i < checked.length; i++){ //iterate all the checked off devices + var id = checked[i]; //get the id of each device + var unavailable = getUnavailableItems(); //get the unavailable items + var cart = getCartItems(); //get the cart + unavailable.push(id); //add to unavailable list + for(var j = 0; j < cart.length; j++){ //iterate cart + if(cart[j] == id) //match id's + cart.splice(j,1); //remove from the cart + } + localStorage.setItem('unavailable', JSON.stringify(unavailable)); //update local storage + localStorage.setItem('cart', JSON.stringify(cart)); //update local storage + } + checked = new Array; //reset the checked off array + show(); //reload the container } +} - document.getElementById('shoppingContainer').innerHTML = html; //adds what we just generated to the webpage +/** +This function takes all the devices we selected and removes them from the shopping cart. +**/ +function deleteSelected(){ + var response = confirm("Are you sure you'd like to remove the selected items from the cart?"); + if(response == true){ //if they confirm + for(var i = 0; i < checked.length; i++){ //iterate all the checked off devices + var id = checked[i]; //get the id of each device + var cart = getCartItems(); //get the cart + for(var j = 0; j < cart.length; j++){ //iterate cart + if(cart[j] == id){ //match ids + cart.splice(j,1); //remove from the cart + } + } + localStorage.setItem('cart', JSON.stringify(cart)); //update local storage + } + checked = new Array; //reset the checked array + show(); //reload the container + } +} - var checkboxes = document.getElementsByClassName('deviceCheckbox'); //get all the checkboxes we just placed! - for(int i = 0; i < checkboxes.length; i++){ - checkboxes[i].addEventListener('click',addToSelected); //when we click on a checkbox, it should add that item to the selected local storage +/** +This function takes all devices in the shopping cart and orders them. +**/ +function orderAll(){ + var response = confirm("Are you sure you'd like to order the selected items?"); + if(response == true){ //if they confirm + var cart = getCartItems(); //get the cart + for(var i = 0; i < cart.length; i++){ //iterate the cart + var id = cart[i]; //get the id of each device + var unavailable = getUnavailableItems(); //get the unavailable items + unavailable.push(id); //add to unavailable list + localStorage.setItem('unavailable', JSON.stringify(unavailable)); //update local storage + } + checked = new Array; //reset the checked off array + cart = new Array; //cart should now be empty, so reset also + localStorage.setItem('cart',JSON.stringify(cart)); //update local storage + show(); //reload container } +} +/** +This function takes all devices in the shopping cart and deletes them. +**/ +function deleteAll(){ + var response = confirm("Are you sure you'd like to order the selected items?"); + if(response == true){ //if they confirm + cart = new Array; //empty cart + localStorage.setItem('cart',JSON.stringify(cart)); //update local storage + checked = new Array; //reset the checked off array + show(); //reload container + } +} + +/** +This function gets unavailable items from local storage. +**/ +function getUnavailableItems(){ + var unavailable = new Array; //make new array + var unavailable_str = localStorage.getItem('unavailable'); //get the string from local storage + if(unavailable_str !== null){ //as long as its not null + unavailable = JSON.parse(unavailable_str); //make into array + } + return unavailable; //return value is an array } \ No newline at end of file diff --git a/html/webpages/shoppingCart.html b/html/webpages/shoppingCart.html index 3a627de..be49018 100644 --- a/html/webpages/shoppingCart.html +++ b/html/webpages/shoppingCart.html @@ -26,6 +26,12 @@ ul.nav{ padding: 0px; } + + div.displayDevice{ + display: inline-block; + position: absolute; + padding-left: 30px; + } @@ -64,8 +70,11 @@

    Shopping Cart Options

    -
    +
    +
    +
    - + + \ No newline at end of file From 5adee7c4c1da8383af5ee86ba95ca12e4bf01492 Mon Sep 17 00:00:00 2001 From: Connor L Jackson Date: Mon, 28 Nov 2016 21:05:28 -0500 Subject: [PATCH 7/7] Now tickets have a ticket background image --- html/imgs/ticket.png | Bin 0 -> 17093 bytes html/javascript/shoppingCart.js | 30 ++++++++++++++++++++++++++---- html/webpages/requestPage.html | 2 +- html/webpages/shoppingCart.html | 16 +++++++++++++++- 4 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 html/imgs/ticket.png diff --git a/html/imgs/ticket.png b/html/imgs/ticket.png new file mode 100644 index 0000000000000000000000000000000000000000..a0387e2a193aeb3cb8802d906eb7da08e589d508 GIT binary patch literal 17093 zcmV*0KzYB3P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 ' + devices[j].name + '
    '; //create listing of all the devices + html += ''; //create listing of all the devices break; //break out of loop when we match } } @@ -98,6 +95,31 @@ function show(){ for(var i = 0; i < checkboxes.length; i++){ //iterate them checkboxes[i].addEventListener('click',changeStatus); //when we click on a checkbox, it should add/remove the id from the selected array } + + var tickets = document.getElementsByClassName('ticket'); + for(var i = 0; i < tickets.length; i++){ + tickets[i].addEventListener('click',clickTicket); + } +} + +/** +This allows a ticket click to do the same thing as clicking on the checkbox. +**/ +function clickTicket(){ + var checkboxes = document.getElementsByClassName('deviceCheckbox'); + var id = this.getAttribute('id'); + id = parseInt(id.replace(/[^0-9\.]/g,''),10); + if(document.getElementById(id).checked == true){ + document.getElementById(id).checked = false; + for(var i = 0; i < checked.length; i++){ //iterate checked array + if(id == checked[i]) //find the right checkbox + checked.splice(i,1); //remove from the array + } + } + else{ + document.getElementById(id).checked = true; + checked.push(id); + } } /** diff --git a/html/webpages/requestPage.html b/html/webpages/requestPage.html index 600446f..5e11487 100644 --- a/html/webpages/requestPage.html +++ b/html/webpages/requestPage.html @@ -101,7 +101,7 @@

    Operating Systems

    -

    Available Devices

    +

    Available Devices

    diff --git a/html/webpages/shoppingCart.html b/html/webpages/shoppingCart.html index be49018..9180ed9 100644 --- a/html/webpages/shoppingCart.html +++ b/html/webpages/shoppingCart.html @@ -32,6 +32,19 @@ position: absolute; padding-left: 30px; } + + div.ticket{ + background-image: url('../imgs/ticket.png'); + display: inline-block; + height: 126px; + width: 240px; + } + + p.tickettext{ + text-align: center; + vertical-align: middle; + line-height: 126px; + } @@ -71,10 +84,11 @@

    Shopping Cart Options

    +

    Welcome to your shopping cart!

    - + \ No newline at end of file