1+ if ( document . readyState == 'loading' ) {
2+ document . addEventListener ( 'DOMContentLoaded' , ready )
3+ } else {
4+ ready ( )
5+ }
6+
7+ function ready ( ) {
8+ var removeCartItemButtons = document . getElementsByClassName ( 'btn-danger' )
9+ for ( var i = 0 ; i < removeCartItemButtons . length ; i ++ ) {
10+ var button = removeCartItemButtons [ i ]
11+ button . addEventListener ( 'click' , removeCartItem )
12+ }
13+
14+ var quantityInputs = document . getElementsByClassName ( 'cart-quantity-input' )
15+ for ( var i = 0 ; i < quantityInputs . length ; i ++ ) {
16+ var input = quantityInputs [ i ]
17+ input . addEventListener ( 'change' , quantityChanged )
18+ }
19+
20+ var addToCartButtons = document . getElementsByClassName ( 'shop-item-button' )
21+ for ( var i = 0 ; i < addToCartButtons . length ; i ++ ) {
22+ var button = addToCartButtons [ i ]
23+ button . addEventListener ( 'click' , addToCartClicked )
24+ }
25+
26+ document . getElementsByClassName ( 'btn-purchase' ) [ 0 ] . addEventListener ( 'click' , purchaseClicked )
27+ }
28+
29+ function purchaseClicked ( ) {
30+ alert ( 'Thank you for your purchase' )
31+ var cartItems = document . getElementsByClassName ( 'cart-items' ) [ 0 ]
32+ while ( cartItems . hasChildNodes ( ) ) {
33+ cartItems . removeChild ( cartItems . firstChild )
34+ }
35+ updateCartTotal ( )
36+ }
37+
38+ function removeCartItem ( event ) {
39+ var buttonClicked = event . target
40+ buttonClicked . parentElement . parentElement . remove ( )
41+ updateCartTotal ( )
42+ }
43+
44+ function quantityChanged ( event ) {
45+ var input = event . target
46+ if ( isNaN ( input . value ) || input . value <= 0 ) {
47+ input . value = 1
48+ }
49+ updateCartTotal ( )
50+ }
51+
52+ function addToCartClicked ( event ) {
53+ var button = event . target
54+ var shopItem = button . parentElement . parentElement
55+ var title = shopItem . getElementsByClassName ( 'shop-item-title' ) [ 0 ] . innerText
56+ var price = shopItem . getElementsByClassName ( 'shop-item-price' ) [ 0 ] . innerText
57+ var imageSrc = shopItem . getElementsByClassName ( 'shop-item-image' ) [ 0 ] . src
58+ addItemToCart ( title , price , imageSrc )
59+ updateCartTotal ( )
60+ }
61+
62+ function addItemToCart ( title , price , imageSrc ) {
63+ var cartRow = document . createElement ( 'div' )
64+ cartRow . classList . add ( 'cart-row' )
65+ var cartItems = document . getElementsByClassName ( 'cart-items' ) [ 0 ]
66+ var cartItemNames = cartItems . getElementsByClassName ( 'cart-item-title' )
67+ for ( var i = 0 ; i < cartItemNames . length ; i ++ ) {
68+ if ( cartItemNames [ i ] . innerText == title ) {
69+ alert ( 'This item is already added to the cart' )
70+ return
71+ }
72+ }
73+ var cartRowContents = `
74+ <div class="cart-item cart-column">
75+ <img class="cart-item-image" src="${ imageSrc } " width="100" height="100">
76+ <span class="cart-item-title">${ title } </span>
77+ </div>
78+ <span class="cart-price cart-column">${ price } </span>
79+ <div class="cart-quantity cart-column">
80+ <input class="cart-quantity-input" type="number" value="1">
81+ <button class="btn btn-danger" type="button">REMOVE</button>
82+ </div>`
83+ cartRow . innerHTML = cartRowContents
84+ cartItems . append ( cartRow )
85+ cartRow . getElementsByClassName ( 'btn-danger' ) [ 0 ] . addEventListener ( 'click' , removeCartItem )
86+ cartRow . getElementsByClassName ( 'cart-quantity-input' ) [ 0 ] . addEventListener ( 'change' , quantityChanged )
87+ }
88+
89+ function updateCartTotal ( ) {
90+ var cartItemContainer = document . getElementsByClassName ( 'cart-items' ) [ 0 ]
91+ var cartRows = cartItemContainer . getElementsByClassName ( 'cart-row' )
92+ var total = 0
93+ for ( var i = 0 ; i < cartRows . length ; i ++ ) {
94+ var cartRow = cartRows [ i ]
95+ var priceElement = cartRow . getElementsByClassName ( 'cart-price' ) [ 0 ]
96+ var quantityElement = cartRow . getElementsByClassName ( 'cart-quantity-input' ) [ 0 ]
97+ var price = parseFloat ( priceElement . innerText . replace ( '$' , '' ) )
98+ var quantity = quantityElement . value
99+ total = total + ( price * quantity )
100+ }
101+ total = Math . round ( total * 100 ) / 100
102+ document . getElementsByClassName ( 'cart-total-price' ) [ 0 ] . innerText = '$' + total
103+ }
0 commit comments