@@ -15,11 +15,13 @@ var storeNames = {
longs : 'Longs Drugs'
} ;
// Cache
var storesDB , itemsDB , categoriesDB ;
var storesDB , itemsDB , categoriesDB , confirmModal , modal ;
$ ( document ) . ready ( function ( ) {
elem = document . querySelector ( '.sidenav' ) ;
instance = M . Sidenav . init ( elem , { draggable : true } ) ;
modal = document . querySelector ( '.modal' ) ;
confirmModal = M . Modal . init ( modal , { } ) ;
$ ( '.cont-store' ) . click ( function ( data ) {
stores ( data . currentTarget . id )
} ) ;
@@ -59,6 +61,7 @@ function submitOrder(paymentMethod) {
}
function stores ( id ) {
$ ( '#cart-footer' ) . hide ( ) ;
$ ( '#navbar' ) . show ( ) ;
$ ( document . body ) . removeClass ( 'blue' ) ;
$ ( document . body ) . addClass ( 'grey lighten-4' ) ;
@@ -80,6 +83,7 @@ function stores(id) {
function category ( id ) {
$ ( '#menu' ) . html ( '<a onclick="stores();" \n' +
' class="blue-text"><i\n' +
' class="material-icons">arrow_back</i></a>' ) ;
@@ -100,29 +104,40 @@ function loadItems(categoryName, storeId) {
for ( var i = 0 ; i < itemsDB . length ; i ++ ) {
if ( itemsDB [ i ] . category === categoryName ) {
$ ( '#store-items' ) . append ( '<a class="collection-item avatar black-text nohover" id="' + itemsDB [ i ] . id + '">' +
' <img src="' + itemsDB [ i ] . img + '" alt="' + itemsDB [ i ] . name + '" style="margin-top:10px" class="circle">' +
' <span class="title black-text" style="font-weight: bold;">' + itemsDB [ i ] . name + '</span>' +
' <p id="' + itemsDB [ i ] . id + '-data">' +
' <text>$' + itemsDB [ i ] . price + '</text>' +
' <br>' +
' <text style="font-weight: lighter;">' + 'Put something here' + '</text>' +
' <text class="right blue-text" data-item-count="0" id="' + itemsDB [ i ] . id + '-quantity" style="position: relative;transform: translateX(5px); margin-top: 3px" onclick="addItem(this)">Add to Cart</text>' +
' </p>' +
' </a>' )
' <img src="' + itemsDB [ i ] . img + '" alt="' + itemsDB [ i ] . name + '" style="margin-top:10px" class="circle">' +
' <span class="title black-text" style="font-weight: bold;">' + itemsDB [ i ] . name + '</span>' +
' <p id="' + itemsDB [ i ] . id + '-data">' +
' <text>$' + itemsDB [ i ] . price + '</text>' +
' <br>' +
' <text style="font-weight: lighter;">' + 'Put something here' + '</text>' +
' <text class="right blue-text" data-item-count="0" id="' + itemsDB [ i ] . id + '-quantity" style="position: relative;transform: translateX(5px); margin-top: 3px" onclick="addItem(this, true)">Add to Cart</text>' +
' </p>' +
' </a>' ) ;
var cartItems = shoppingCart . filter ( function ( x ) {
return itemsDB [ i ] . id == x . id
} ) . length ;
if ( cartItems > 0 ) {
addItem ( $ ( '#' + itemsDB [ i ] . id + '-quantity' ) , false ) ;
$ ( '#' + itemsDB [ i ] . id + '-quantity' ) . attr ( 'data-item-count' , cartItems ) ;
$ ( '#input-' + itemsDB [ i ] . id ) . val ( cartItems )
}
}
}
}
function cart ( ) {
$ ( '#cart-footer' ) . hide ( ) ;
$ ( '#navbar' ) . show ( ) ;
$ ( '#button' ) . remove ( ) ;
$ ( document . body ) . removeClass ( 'blue' ) ;
$ ( document . body ) . addClass ( 'grey lighten-4' ) ;
$ ( '#container' ) . html ( cartHTML ) ;
var shoppingElement = $ ( '#shopping-cart' ) ;
if ( shoppingCart [ 0 ] ) {
var subtotal = 0 ;
for ( var i = 0 ; i < shoppingCart . length ; i ++ ) {
shoppingElement . append ( '<a class="collection-item black-text nohover" style="height: 60px">' + shoppingCart [ i ] . name + '<p style="font-weight: lighter; font-size: 12px; margin-top: 3px">$' + shoppingCart [ i ] . price + '</p></a>' ) ;
shoppingElement . append ( '<a class="collection-item black-text avatar nohover" style="min-height: 65px;"><img src="' + shoppingCart [ i ] . img + '" alt="' + shoppingCart [ i ] . name + '" class="circle">' + shoppingCart [ i ] . name + '<i class="material-icons right" onclick="openModal(' + i + ')">delete</i> <p style="font-weight: lighter; font-size: 12px; margin-top: 3px">$' + shoppingCart [ i ] . price + '</p></a>' ) ;
subtotal += shoppingCart [ i ] . price ;
}
$ ( '#nav' ) . append ( '<ul class="right" id="button">\n' +
' <li>\n' +
@@ -131,8 +146,12 @@ function cart() {
' class="material-icons">shopping_basket</i></a>\n' +
' </li>\n' +
' </ul>' ) ;
$ ( '#container' ) . append ( '<br><div class="center"><a onclick="payment()" style="font-weight: bold; font-size: large" class="center center-align blue-text">Checkout</a></div>' ) ;
$ ( '#subtotal' ) . show ( ) ;
$ ( '#subtotal' ) . html ( 'Subtotal: $' + subtotal ) ;
} else {
$ ( '#subtotal' ) . hide ( ) ;
shoppingElement . html ( '<div class="center"><h6 style="font-weight: 300">You have nothing in your Cart.</h6></div>' )
$ ( '#nav' ) . append ( '<ul class="right" id="button">\n' +
' <li>\n' +
@@ -147,12 +166,29 @@ function cart() {
$ ( '#menu' ) . html ( '<a href="#" data-target="slide-out"\n' +
' class="sidenav-trigger blue-text"><i\n' +
' class="material-icons">menu</i></a>' ) ;
sideClose ( ) ;
}
function loadCartFooter ( ) {
var currentItems = [ ] ;
$ ( '#cart-footer-items' ) . html ( '' ) ;
for ( var i = 0 ; i < shoppingCart . length ; i ++ ) {
if ( currentItems . indexOf ( shoppingCart [ i ] . id ) == - 1 ) {
currentItems . push ( shoppingCart [ i ] . id ) ;
var matching = shoppingCart . filter ( function ( x ) {
return shoppingCart [ i ] . id == x . id
} ) . length ;
$ ( '#cart-footer-items' ) . append ( '<a class="collection-item black-text nohover">' + shoppingCart [ i ] . name +
' <span>(' + matching + ')</span> ' +
'<span class="right">' + ( shoppingCart [ i ] . price * matching ) . toFixed ( 2 ) + '</span> ' +
'</a>' )
}
}
}
function orders ( ) {
$ ( '#cart-footer' ) . hide ( ) ;
$ ( '#button' ) . remove ( ) ;
$ ( '#navbar' ) . show ( ) ;
$ ( document . body ) . removeClass ( 'blue' ) ;
@@ -163,8 +199,8 @@ function orders() {
url : 'https://swoop-it.herokuapp.com/api/myorders' ,
success : function ( data ) {
data = data . reverse ( ) ;
for ( var i = 0 ; i < data . length ; i ++ ) {
$ ( '#orders-list' ) . append ( '<li>\n ' +
for ( var i = 0 ; i < data . length ; i ++ ) {
$ ( '#orders-list' ) . append ( '<li>\n ' +
' <div class="collapsible-header"><i class="material-icons">arrow_drop_down</i>' + calcDateString ( data [ i ] . date ) + '</div>\n' +
' <div class="collapsible-body">\n' +
' <span style="font-weight: bold">' + data [ i ] . progress . statusName + '</span>\n' +
@@ -194,6 +230,7 @@ function orders() {
}
function settings ( ) {
$ ( '#cart-footer' ) . hide ( ) ;
$ ( '#button' ) . remove ( ) ;
$ ( '#navbar' ) . show ( ) ;
$ ( document . body ) . removeClass ( 'blue' ) ;
@@ -209,7 +246,7 @@ function payment() {
$ ( '#header' ) . html ( 'Payment' ) . addClass ( 'black-text' ) . removeClass ( 'blue-text' ) ;
$ ( '#nav' ) . append ( '<ul class="right" id="button">\n' +
' <li>\n' +
' <a href="#" onclick="confirmOrder()"\n' +
' <a href="#" onclick="confirmOrder(getInputVal(\'pay-group\') )"\n' +
' class="blue-text"><i\n' +
' class="material-icons">arrow_forward</i></a>\n' +
' </li>\n' +
@@ -220,24 +257,57 @@ function payment() {
sideClose ( ) ;
}
function confirmOrder ( ) {
function confirmOrder ( paymentMethod ) {
$ ( '#container' ) . html ( confirmHTML ) ;
$ ( '#button' ) . remove ( ) ;
$ ( '#header' ) . html ( 'Confirm' ) . addClass ( 'black-text' ) . removeClass ( 'blue-text' ) ;
$ ( '#nav' ) . append ( '<ul class="right" id="button">\n' +
' <li>\n' +
' <a href="#" onclick="submitOrder(userSettings.preferredPay )"\n' +
' <a href="#" onclick="submitOrder(paymentMethod )"\n' +
' class="blue-text"><i\n' +
' class="material-icons">check</i></a>\n' +
' </li>\n' +
' </ul>' ) ;
$ ( '#menu' ) . html ( '<a href="#" onclick="payment()" \n' +
' class="blue-text"><i\n' +
' class="material-icons">arrow_backwards</i></a>' ) ;
var subtotal = 0 , delivery , tax , total , deliveryPercent = .20 ;
for ( var i = 0 ; i < shoppingCart . length ; i ++ ) {
$ ( '#confirm-items' ) . append ( '<a class="collection-item black-text">' + shoppingCart [ i ] . name + '<i onclick="openModal(' + i + ', ' + paymentMethod + ')" class="material-icons right">delete</i> </a>' ) ;
subtotal += shoppingCart [ i ] . price ;
}
if ( ! subtotal ) subtotal = 0 ;
if ( paymentMethod == 2 ) deliveryPercent = .23 ;
$ ( '#subtotal' ) . html ( '$' + subtotal . toFixed ( 2 ) ) ;
delivery = 10 + subtotal * deliveryPercent ;
$ ( '#delivery' ) . html ( '$' + delivery . toFixed ( 2 ) ) ;
tax = subtotal * .04 ;
$ ( '#tax' ) . html ( '$' + tax . toFixed ( 2 ) ) ;
total = delivery + tax + subtotal ;
$ ( '#total' ) . html ( '$' + total . toFixed ( 2 ) )
}
function openModal ( id , payment ) {
confirmModal . open ( ) ;
$ ( '#modal-footer' ) . html ( '<a class="modal-action modal-close waves-effect waves-light btn-flat">No</a><a onclick="removeFromCart(' + id + ', ' + payment + ')" class="modal-action modal-close waves-effect waves-light red white-text btn-flat">Remove</a>' )
}
function removeFromCart ( id , payment ) {
shoppingCart . splice ( id , 1 ) ;
if ( shoppingCart . length > 0 ) {
if ( payment ) confirmOrder ( payment ) ;
else cart ( ) ;
} else {
if ( payment ) stores ( ) ;
else cart ( ) ;
}
}
function search ( ) {
$ ( '#cart-footer' ) . hide ( ) ;
$ ( '#navbar' ) . show ( ) ;
$ ( '#button' ) . remove ( ) ;
$ ( document . body ) . removeClass ( 'blue' ) ;
$ ( document . body ) . addClass ( 'grey lighten-4' ) ;
$ ( '#container' ) . html ( searchHTML ) ;
@@ -268,43 +338,75 @@ function searchItems(query) {
' <text>$' + itemsDB [ i ] . price + '</text>' +
' <br>' +
' <text style="font-weight: lighter;">' + 'Put something here' + '</text>' +
' <text class="right blue-text" data-item-count="0" id="' + itemsDB [ i ] . id + '-quantity" style="position: relative;transform: translateX(5px); margin-top: 3px" onclick="addItem(this)">Add to Cart</text>' +
' <text class="right blue-text" data-item-count="0" id="' + itemsDB [ i ] . id + '-quantity" style="position: relative;transform: translateX(5px); margin-top: 3px" onclick="addItem(this, true )">Add to Cart</text>' +
' </p>' +
' </a>' )
var cartItems = shoppingCart . filter ( function ( x ) {
return itemsDB [ i ] . id == x . id
} ) . length ;
if ( cartItems > 0 ) {
addItem ( $ ( '#' + itemsDB [ i ] . id + '-quantity' ) , false ) ;
$ ( '#' + itemsDB [ i ] . id + '-quantity' ) . attr ( 'data-item-count' , cartItems ) ;
$ ( '#input-' + itemsDB [ i ] . id ) . val ( cartItems )
}
}
}
}
function addItem ( element ) {
function addItem ( element , focus ) {
var parent = $ ( element ) . closest ( "a" ) ;
var parentId = parent . prop ( 'id' ) ;
var quantityElement = $ ( '#' + parentId + '-quantity' ) ;
var quantity = parseInt ( quantityElement . attr ( 'data-item-count' ) ) ;
loadCartFooter ( ) ;
$ ( '#cart-footer' ) . show ( ) ;
quantityElement . remove ( ) ;
$ ( '#' + parentId + '-data' ) . append ( '<text class="right blue-text" data-item-count="0" id="' + parentId + '-quantity" style="position: relative;transform: translateX(-3px); margin-top: 3px" onclick="removeItem(this)">Remove</text>' ) ;
$ ( '#' + parent . prop ( 'id' ) + '-data' ) . prepend ( '<input min="1" max="20" id="input-' + parentId + '" oninput="addItemToCart(' + parentId + ', $(this).val()); $(\'#' + parentId + '-quantity\').attr(\'data-item-count\', $(this).val());" class="browser-default input right" style= "width: 55px;" type="number">' ) ;
$ ( '#' + parent . prop ( 'id' ) + '-data' ) . prepend ( '<input min="1" max="20" id="input-' + parentId + '" onclick="showItemSelector(' + parentId + ')" oninput="addItemToCart(' + parentId + ', $(this).val()); $(\'#' + parentId + '-quantity\').attr(\'data-item-count\', $(this).val());" class="browser-default input right" style= "width: 55px;" type="number">' ) ;
quantityElement . attr ( 'data-item-count' , quantity ) ;
$ ( '#input-' + parentId ) . focus ( ) ;
if ( focus === true ) {
$ ( '#input-' + parentId ) . focus ( ) ;
}
}
function showItemSelector ( id ) {
$ ( '#cart-footer' ) . show ( ) ;
loadCartFooter ( ) ;
$ ( '#' + id + '-quantity' ) . val ( $ ( '#' + id + '-quantity' ) . attr ( 'data-item-count' ) ) ;
}
function addItemToCart ( id , amount ) {
shoppingCart = shoppingCart . filter ( function ( x ) {
return x . id !== id
} ) ;
$ ( '#' + id + '-quantity' ) . attr ( 'data-item-count' , amount ) ;
for ( var i = 0 ; i < itemsDB . length ; i ++ ) {
if ( itemsDB [ i ] . id === id ) {
for ( var k = 0 ; k < amount ; k ++ ) {
shoppingCart . push ( itemsDB [ i ] )
}
}
}
loadCartFooter ( ) ;
$ ( '#cart-footer' ) . show ( ) ;
}
function getInputVal ( name ) {
return $ ( 'input:radio[name="' + name + '"]:checked' ) . val ( )
}
function removeItem ( element ) {
var parent = $ ( element ) . closest ( "a" ) ;
var parentId = parent . prop ( 'id' ) ;
var quantityElement = $ ( '#' + parentId + '-quantity' ) ;
$ ( '#cart-footer' ) . hide ( ) ;
quantityElement . remove ( ) ;
$ ( '#input-' + parentId ) . remove ( ) ;
$ ( '#' + parent . prop ( 'id' ) + '-data' ) . append ( '<text class="right blue-text" data-item-count="0" id="' + parentId + '-quantity" style="position: relative;transform: translateX(5px); margin-top: 3px" onclick="addItem(this)">Add to Cart</text>' ) ;
quantityElement . attr ( 'data-item-count' , 0 ) ;
shoppingCart = shoppingCart . filter ( function ( x ) {
return x . id != parentId
} ) ;
}
var storePageHTML = '<div class="row">\n' +
@@ -322,44 +424,52 @@ var storePageHTML = '<div class="row">\n' +
var confirmHTML = '<div class="container">\n' +
' <div class="container"><br>\n' +
' <div class="collection black-text" style="margin-top: -5px; overflow: scroll; height: 319px">\n' +
' <a class="collection-item black-text">Mac Big<i class="material-icons right grey-text">delete</i></a>\n' +
' <a class="collection-item black-text">Fireworks - Blue Fire</a>\n' +
' <a class="collection-item black-text">Mint Oreo\'s</a>\n' +
' <a class="collection-item black-text">Gordon Ramsey\'s Rat Poison</a>\n' +
' <a class="collection-item black-text">Gordon Ramsey\'s Rat Poison 2.0</a>' +
' <a class="collection-item black-text">Gordon Ramsey\'s Rat Poison 2.0</a>' +
' <a class="collection-item black-text">Gordon Ramsey\'s Rat Poison 2.0</a>' +
' <a class="collection-item black-text">Gordon Ramsey\'s Rat Poison 2.0</a>' +
' <div class="collection black-text" id="confirm-items" style="margin-top: -5px; overflow: scroll; max-height: 319px">\n' +
' </div>\n' +
' </div>\n' +
' <div class="row center">\n' +
' <div class="container">\n' +
' <div class="container">\n' +
' <b class="left">Subtotal:</b>\n' +
' <unicorn class="right">$50.00</unicorn >\n' +
' <span id="subtotal" class="right"></span >\n' +
' <br>\n' +
' <b class="left">Delivery:</b>\n' +
' <unicorn class="right">$8.50</unicorn >\n' +
' <span id="delivery" class="right"></span >\n' +
' <br>\n' +
' <b class="left">Tax:</b>\n' +
' <unicorn class="right">$4.50</unicorn >\n' +
' <span id="tax" class="right"></span >\n' +
' <br>\n' +
' <hr>\n' +
' <h5 class="left" style="font-weight: bold">Total:</h5>\n' +
' <h5 class="right" style="font-weight: bold;">$63.00 </h5>\n' +
' <h5 class="right" id="total" style="font-weight: bold;"></h5>\n' +
' </div>\n' +
' </div>\n' +
' </div>\n' +
' </div>' ;
var paymentHTML = '<div class="container">' +
' <label>Payment Method</label>\n' +
' <select class="browser-default">\n' +
' <option value="0">Cash on Pickup (17% fee)</option>\n' +
' <option value="1">PayPal/Credit Card (15% fee)</option>\n' +
' </select>\n' +
'<div class="center">' +
' <p>\n' +
' <label>\n' +
' <input value="0" name="pay-group" type="radio" checked />\n' +
' <span>PayPal/Credit Card (20% fee)</span>\n' +
' </label>\n' +
' </p>\n' +
' <p>\n' +
' <label>\n' +
' <input value="1" name="pay-group" class="disabled" disabled type="radio" />\n' +
' <span>SwoopIt Cred</span>\n' +
' </label>\n' +
' </p>' +
' <p>\n' +
' <label>\n' +
' <input value="2" name="pay-group" type="radio" />\n' +
' <span>Cash on Pickup (23% fee)</span>\n' +
' </label>\n' +
' </p>' +
'<a onclick="confirmOrder(getInputVal(\'pay-group\'))" class="btn blue waves-effect waves-ripple waves-light">Continue</a>' +
'</div>' +
'</div>' +
' ' ;
@@ -372,7 +482,12 @@ var settingsHTML = '<div class="collection black-text" style="margin-top: -5px">
' </div>' ;
var cartHTML = '<div class="container" style="border: none"><h6 style="font-weight: bold">Items</h6><br><div class="collection black-text" id="shopping-cart" style="margin-top: -5px; border: none; overflow: scroll; max-height: 250px;"></div></div> ' ;
var cartHTML = '<div class="container" style="border: none">' +
'<br>' +
'<div class="collection black-text" id="shopping-cart" style="margin-top: -5px; border: none; overflow: scroll; max-height: 250px;">' +
'</div>' +
'<h6 style="font-weight: bold" id="subtotal">Subtotal: $0</h6>' +
'</div> ' ;
var categoryHTML = '<div class="row">\n' +
' <form style="height: 85px;" onsubmit="searchStoreItems(); return false" class="col s12">\n' +
@@ -487,7 +602,10 @@ function logout() {
alert ( 'There was an error disconnecting your account - Please check your internet connection or update your device. Code: ' + err )
}
) ;
//todo: go to loginHTML
$ ( '#container' ) . html ( '<div class="center" style="display: inline-block; vertical-align: middle;">\n' +
' <img style="width: 100%;display: inline-block; vertical-align: middle; position: relative;" src="img/swoop_trans.png">\n' +
' <a onclick="stores();" class="white-text" style="font-weight: bold; font-family: \'Futura-Bold\', sans-serif; font-size: 4.4rem">SwoopIt</a>\n' +
' </div>' )
}
function regDevice ( registrationID , oldRegId ) {