summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--StoneIsland/platforms/ios/www/css/account.css7
-rw-r--r--StoneIsland/platforms/ios/www/css/blogs.css102
-rw-r--r--StoneIsland/platforms/ios/www/css/cart.css75
-rw-r--r--StoneIsland/platforms/ios/www/css/index.css3
-rw-r--r--StoneIsland/platforms/ios/www/css/products.css33
-rwxr-xr-xStoneIsland/platforms/ios/www/img/left-arrow.pngbin0 -> 5147 bytes
-rwxr-xr-xStoneIsland/platforms/ios/www/img/right-arrow.pngbin0 -> 5264 bytes
-rw-r--r--StoneIsland/platforms/ios/www/index.html310
-rw-r--r--StoneIsland/platforms/ios/www/js/index.js2
-rw-r--r--StoneIsland/platforms/ios/www/js/lib/account/AccountView.js93
-rw-r--r--StoneIsland/platforms/ios/www/js/lib/account/PaymentView.js93
-rw-r--r--StoneIsland/platforms/ios/www/js/lib/account/ProfileView.js57
-rw-r--r--StoneIsland/platforms/ios/www/js/lib/account/ShippingView.js54
-rw-r--r--StoneIsland/platforms/ios/www/js/lib/auth/LogoutView.js3
-rw-r--r--StoneIsland/platforms/ios/www/js/lib/auth/SignupView.js5
-rw-r--r--StoneIsland/platforms/ios/www/js/lib/blogs/ArchiveView.js36
-rw-r--r--StoneIsland/platforms/ios/www/js/lib/cart/CartConfirm.js1
-rw-r--r--StoneIsland/platforms/ios/www/js/lib/cart/CartPayment.js132
-rw-r--r--StoneIsland/platforms/ios/www/js/lib/cart/CartShipping.js86
-rw-r--r--StoneIsland/platforms/ios/www/js/lib/cart/CartSummary.js24
-rw-r--r--StoneIsland/platforms/ios/www/js/lib/cart/CartView.js14
-rw-r--r--StoneIsland/platforms/ios/www/js/lib/nav/AddressView.js236
-rw-r--r--StoneIsland/platforms/ios/www/js/lib/nav/CreditCardView.js36
-rw-r--r--StoneIsland/platforms/ios/www/js/lib/nav/HeaderView.js6
-rw-r--r--StoneIsland/platforms/ios/www/js/lib/nav/IntroView.js1
-rw-r--r--StoneIsland/platforms/ios/www/js/lib/products/CollectionView.js2
-rw-r--r--StoneIsland/platforms/ios/www/js/lib/products/ProductView.js36
-rw-r--r--StoneIsland/platforms/ios/www/js/lib/view/Router.js (renamed from StoneIsland/platforms/ios/www/js/vendor/view/router.js)0
-rw-r--r--StoneIsland/platforms/ios/www/js/lib/view/Scrollable.js (renamed from StoneIsland/platforms/ios/www/js/vendor/view/scrollable.js)0
-rw-r--r--StoneIsland/platforms/ios/www/js/lib/view/Serializable.js (renamed from StoneIsland/platforms/ios/www/js/vendor/view/serializable.js)33
-rw-r--r--StoneIsland/platforms/ios/www/js/lib/view/View.js (renamed from StoneIsland/platforms/ios/www/js/vendor/view/view.js)0
-rw-r--r--StoneIsland/platforms/ios/www/js/sdk/_sdk.js2
-rw-r--r--StoneIsland/platforms/ios/www/js/sdk/address.js44
-rw-r--r--StoneIsland/platforms/ios/www/js/sdk/auth.js14
-rw-r--r--StoneIsland/platforms/ios/www/js/sdk/cart.js48
-rw-r--r--StoneIsland/platforms/ios/www/js/sdk/payment.js4
-rw-r--r--StoneIsland/platforms/ios/www/js/sdk/shipping.js3
-rw-r--r--StoneIsland/platforms/ios/www/js/vendor/jquery.creditCardValidator.js208
-rw-r--r--StoneIsland/www/css/cart.css6
-rw-r--r--StoneIsland/www/css/products.css6
-rw-r--r--StoneIsland/www/index.html68
-rw-r--r--StoneIsland/www/js/index.js2
-rw-r--r--StoneIsland/www/js/lib/account/AccountView.js2
-rw-r--r--StoneIsland/www/js/lib/account/ProfileView.js7
-rw-r--r--StoneIsland/www/js/lib/auth/SignupView.js3
-rw-r--r--StoneIsland/www/js/lib/blogs/BlogView.js10
-rw-r--r--StoneIsland/www/js/lib/cart/CartPayment.js64
-rw-r--r--StoneIsland/www/js/lib/cart/CartShipping.js7
-rw-r--r--StoneIsland/www/js/lib/cart/CartSummary.js5
-rw-r--r--StoneIsland/www/js/lib/nav/IntroView.js1
-rw-r--r--StoneIsland/www/js/lib/products/CollectionView.js2
-rw-r--r--StoneIsland/www/js/lib/products/ProductView.js6
-rw-r--r--StoneIsland/www/js/sdk/cart.js64
-rw-r--r--StoneIsland/www/js/sdk/payment.js2
-rw-r--r--test/test/03-address.js5
-rw-r--r--test/test/04-cart.js32
-rw-r--r--test/test/05-cart-flows.js2
57 files changed, 1761 insertions, 336 deletions
diff --git a/StoneIsland/platforms/ios/www/css/account.css b/StoneIsland/platforms/ios/www/css/account.css
index d450c42c..31433871 100644
--- a/StoneIsland/platforms/ios/www/css/account.css
+++ b/StoneIsland/platforms/ios/www/css/account.css
@@ -396,4 +396,11 @@ input.switch:checked + label:after {
}
.select-wrapper.picked span {
color: #000;
+}
+
+.country-wrapper-static {
+ text-align: center;
+ color: #a9a9a9;
+ padding-top: 9px;
+ font-size: 14px;
} \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/www/css/blogs.css b/StoneIsland/platforms/ios/www/css/blogs.css
index 239e99bf..0dd14166 100644
--- a/StoneIsland/platforms/ios/www/css/blogs.css
+++ b/StoneIsland/platforms/ios/www/css/blogs.css
@@ -39,6 +39,8 @@
display: none;
}
+/* FAQ */
+
.privacy #privacy { display: block }
.terms #terms { display: block }
.returns #returns { display: block }
@@ -100,32 +102,44 @@
.gallery-multiple-images::before {
border:1px solid black;
+ background:rgba(255,255,255,1);
+ background-image:url(../img/left-arrow.png);
+ background-size:5px 10px;
+ background-repeat:no-repeat;
+ background-position:center;
+ width:15px;
+ height:30px;
top:50%;
- transform:scale(.5,1) translateY(-50%);
- transform-origin:top left;
+ content:'';
+ transform:translateY(-50%);
+ transform-origin:top right;
left:20px;
- content:'\25C0';
font-size:18px;
- padding:3px 14px 3px 11px;
+ padding:3px 3px 3px 1px;
z-index:999;
position:absolute;
display:block;
- background:rgba(255,255,255,1);
}
.gallery-multiple-images::after {
border:1px solid black;
+ background:rgba(255,255,255,1);
+ background-image:url(../img/right-arrow.png);
+ background-size:5px 10px;
+ background-repeat:no-repeat;
+ background-position:center;
+ width:15px;
+ height:30px;
top:50%;
- transform:scale(.5,1) translateY(-50%);
+ content:'';
+ transform:translateY(-50%);
transform-origin:top right;
right:20px;
- content:'\25B6';
font-size:18px;
- padding:3px 11px 3px 14px;
+ padding:3px 1px 3px 3px;
z-index:999;
position:absolute;
display:block;
- background:rgba(255,255,255,1);
}
/* NOTE: not sure if this down arrow is necessary.. the fade
@@ -188,15 +202,67 @@ ul.links {
font-size:14px;
}
-/* NOTE: not really sure how this is going to work on the archive page
- based on the pdf mockup */
+.archive h2 {
+ font-size:32px
+}
-.archive .above {
- width:calc(100vw - 80px);
- box-sizing:border-box;
- margin:0 auto;
+#archive .heading {
+ position: absolute;
+ top: 0; left: 0;
+ width: 100%;
+ pointer-events: none;
+}
+#archive .menu .items,
+#archive .row .image,
+#archive .row .text {
+ position: absolute;
+ top: 50%; left: 50%;
+ transform-origin: 50% 50%;
+ transform: translateZ(0) translateX(-50%) translateY(-50%);
}
-.archive h2 {
-font-size:32px
-} \ No newline at end of file
+#archive.menu .menu {
+ opacity: 1;
+ pointer-events: auto;
+}
+#archive .menu {
+ background: rgba(255,255,255,0.8);
+ position: absolute;
+ top: 0; left: 0;
+ height: 100%;
+ width: 100%;
+ opacity: 0;
+ pointer-events: none;
+ transition: opacity 0.2s;
+}
+#archive .menu .items {
+ width: 100%;
+}
+#archive .menu .item:first-of-type {
+ border-top: 1px solid black;
+}
+#archive .menu .item {
+ width: 100%;
+ text-align: center;
+ border-bottom: 1px solid black;
+ background: white;
+}
+
+#archive .scroll {
+ top: 0; left: 0;
+ height: 100%;
+}
+#archive .row {
+ position: relative;
+ min-height: 80vh;
+ perspective: 500;
+}
+#archive .row .image {
+ width: 100%; height: 100%;
+ background-repeat: no-repeat;
+ background-size: 80% auto;
+ background-position: center center;
+}
+#archive .row .text {
+ width: 80%;
+}
diff --git a/StoneIsland/platforms/ios/www/css/cart.css b/StoneIsland/platforms/ios/www/css/cart.css
index bc5088d5..a927f511 100644
--- a/StoneIsland/platforms/ios/www/css/cart.css
+++ b/StoneIsland/platforms/ios/www/css/cart.css
@@ -1,11 +1,5 @@
.cart #cart { display: block; }
-.cart #footer .cancel { display: block }
-.cart #footer .checkout { display: block }
-/*
-.cart #footer .checkout_proceed { display: block }
- */
-
#cart {
display: none;
}
@@ -51,6 +45,8 @@ border-right: 1px solid #bbb
.full .cart_body { display: block; }
.empty .cart_empty { display: block; }
+#cart h1 .full_msg,
+#cart h1 .empty_msg { display: none }
.cart_body {
display: none;
}
@@ -89,6 +85,10 @@ border-right: 1px solid #bbb
top:16px;
}
+#cart h3 {
+ padding-left: 5px;
+}
+
.cart_item_row {
display:table;
position:relative;
@@ -189,4 +189,65 @@ font-weight:bold
.cart-summary-row:last-child {
color:#000;
-} \ No newline at end of file
+}
+
+.dropdown-wrapper {
+ position:relative;
+ text-align:right;
+ width:calc(100vw - 10px);
+ margin:0 auto;
+ box-sizing:border-box;
+
+}
+
+.dropdown-wrapper .add_edit {
+ padding:10px;
+ letter-spacing:0.5px;
+ font-size:12px;
+ color:#a9a9a9;
+ box-sizing:border-box;
+}
+
+.dropdown-wrapper .dropdown {
+ font-size:14px;
+ box-sizing:border-box;
+ align-items: center;
+ text-align: center;
+ padding:10px 0;
+ border:1px solid #a9a9a9;
+ position:relative;
+}
+
+.dropdown-wrapper .dropdown::before {
+ content:'';
+ box-sizing:border-box;
+ right:25px;
+ width:1px;
+ top:50%;
+ transform:translateY(-50%) rotate(45deg);
+ height:12px;
+ background:#a9a9a9;
+ position:absolute;
+ z-index:999;
+ transform-origin:bottom left;
+}
+
+.dropdown-wrapper .dropdown::after {
+ content:'';
+ box-sizing:border-box;
+ right:25px;
+ width:1px;
+ top:50%;
+ transform:translateY(-50%) rotate(-45deg);
+ transform-origin:bottom right;
+ height:12px;
+ background:#a9a9a9;
+ position:absolute;
+ z-index:999;
+}
+#cart_shipping .address {
+ display: none;
+}
+.address .save_as_default {
+ display: none;
+}
diff --git a/StoneIsland/platforms/ios/www/css/index.css b/StoneIsland/platforms/ios/www/css/index.css
index 0d855aeb..a67e4bcf 100644
--- a/StoneIsland/platforms/ios/www/css/index.css
+++ b/StoneIsland/platforms/ios/www/css/index.css
@@ -8,6 +8,9 @@ body, html {
padding: 0px;
overflow: hidden;
}
+body.loading {
+ opacity: 0;
+}
body {
-webkit-touch-callout: none; /* prevent callout to copy image, etc when tap to hold */
-webkit-text-size-adjust: none; /* prevent webkit from resizing text to fit */
diff --git a/StoneIsland/platforms/ios/www/css/products.css b/StoneIsland/platforms/ios/www/css/products.css
index 6ab9d0bd..2e9ead53 100644
--- a/StoneIsland/platforms/ios/www/css/products.css
+++ b/StoneIsland/platforms/ios/www/css/products.css
@@ -33,6 +33,9 @@
width: 100vw;
height: 52vh;
}
+.gallery.gray {
+ background: rgba(245,245,245,1.0);
+}
.gallery .item {
width: 100vw;
@@ -172,31 +175,43 @@
#product #gallery::before {
border:1px solid black;
+ background:rgba(255,255,255,1);
+ background-image:url(../img/left-arrow.png);
+ background-size:5px 10px;
+ background-repeat:no-repeat;
+ background-position:center;
+ width:15px;
+ height:30px;
top:50%;
- transform:scale(.5,1) translateY(-50%);
- transform-origin:top left;
+ content:'';
+ transform:translateY(-50%);
+ transform-origin:top right;
left:20px;
- content:'\25C0';
font-size:18px;
- padding:3px 14px 3px 11px;
+ padding:3px 3px 3px 1px;
z-index:999;
position:absolute;
display:block;
- background:rgba(255,255,255,1);
}
#product #gallery::after {
border:1px solid black;
+ background:rgba(255,255,255,1);
+ background-image:url(../img/right-arrow.png);
+ background-size:5px 10px;
+ background-repeat:no-repeat;
+ background-position:center;
+ width:15px;
+ height:30px;
top:50%;
- transform:scale(.5,1) translateY(-50%);
+ content:'';
+ transform:translateY(-50%);
transform-origin:top right;
right:20px;
- content:'\25B6';
font-size:18px;
- padding:3px 11px 3px 14px;
+ padding:3px 1px 3px 3px;
z-index:999;
position:absolute;
display:block;
- background:rgba(255,255,255,1);
}
diff --git a/StoneIsland/platforms/ios/www/img/left-arrow.png b/StoneIsland/platforms/ios/www/img/left-arrow.png
new file mode 100755
index 00000000..d19f48f3
--- /dev/null
+++ b/StoneIsland/platforms/ios/www/img/left-arrow.png
Binary files differ
diff --git a/StoneIsland/platforms/ios/www/img/right-arrow.png b/StoneIsland/platforms/ios/www/img/right-arrow.png
new file mode 100755
index 00000000..00b62502
--- /dev/null
+++ b/StoneIsland/platforms/ios/www/img/right-arrow.png
Binary files differ
diff --git a/StoneIsland/platforms/ios/www/index.html b/StoneIsland/platforms/ios/www/index.html
index aeb1eb61..1f5a8f55 100644
--- a/StoneIsland/platforms/ios/www/index.html
+++ b/StoneIsland/platforms/ios/www/index.html
@@ -27,7 +27,7 @@
<link rel="stylesheet" type="text/css" href="css/blogs.css">
<title>Stone Island</title>
</head>
-<body>
+<body class="loading">
<div id="nav">
<div id="nav-container">
@@ -163,23 +163,34 @@
<div id="archive">
<div class="scroll">
- <h1>ARCHIVE</h1>
- <div class="subtitle">'982-'015</div>
<div class="content">
<script type="text/html" class="template">
- <img src="{{image}}">
- <div class="above">
- <h2>
- <b>{{code}}</b><br>
- {{title}}
- </h2>
- <div class="body">
- {{body}}
+ <div class="row">
+ <div class="image" style="background-image:url({{image}})"></div>
+ <div class="text">
+ <h2>
+ <b>{{code}}</b><br>
+ {{label}}
+ </h2>
+ <div class="body">
+ {{caption}}
+ </div>
</div>
</div>
</script>
</div>
</div>
+ <div class="menu">
+ <div class="items">
+ <script type="text/html" class="template">
+ <div class="item">{{title}}</div>
+ </script>
+ </div>
+ </div>
+ <div class="heading">
+ <h1>ARCHIVE</h1>
+ <div class="subtitle">'982-'015</div>
+ </div>
</div>
<div id="privacy" class="page">
@@ -535,7 +546,14 @@
<!-- CART ================================================ -->
<div id="cart">
- <h1>YOUR CART / <span class="itemcount"></h1>
+ <h1>
+ <span class="full_msg">
+ YOUR CART / <span class="itemcount"></span>
+ </span>
+ <span class="empty_msg">
+ YOUR CART IS EMPTY
+ </span>
+ </h1>
<div class="steps">
<span class="summary_step">SUMMARY</span>
@@ -601,24 +619,28 @@
<div id="cart_shipping">
<div class="scroll">
<form>
- <div class="add_edit">add/edit</div>
- <div class="select_address">
- ADDRESS
+ <div class="dropdown-wrapper">
+ <div class="dropdown-title add_edit">add / edit</div>
+ <div class="dropdown select_address">
+ ADDRESS
+ </div>
</div>
- <div class="address_form">
- <div class="address"></div>
- <div class="checkbox-container">
+ <div class="address_list checkbox-container">
+ <script type="text/html" class="template">
<div class="checkbox-row">
<div class="checkbox-toggle">
- <input id="save_as_default_cart_shipping" type="checkbox" name="IsDefault" value="true" required>
- <label for="save_as_default_cart_shipping"></label>
+ <input id="address-checkbox-{{id}}" type="radio" name="AddressId" value="{{id}}" {{checked}}>
+ <label for="address-checkbox-{{id}}"></label>
</div>
- <label class="checkbox-caption" for="save_as_default_cart_shipping">
- SAVE AS DEFAULT
+ <label class="checkbox-caption" for="address-checkbox-{{id}}">
+ {{name}}<br>
+ {{address}}<br>
+ {{city}}, {{state}} {{zip}}
</label>
</div>
- </div>
+ </script>
</div>
+ <div class="address"></div>
<h3>SHIPPING METHOD</h3>
@@ -629,7 +651,7 @@
<label for="express-shipping"></label>
</div>
<label class="checkbox-caption" for="express-shipping">
- <b>COMPLIMENTARY EXPRESS $10</b><br>
+ <b>COMPLIMENTARY EXPRESS $19.50</b><br>
(DELIVERY IN 2-4 WORKING DAYS)
</label>
</div>
@@ -639,12 +661,23 @@
<label for="standard-shipping"></label>
</div>
<label class="checkbox-caption" for="standard-shipping">
- <b>STANDARD SHIPPING</b><br>
+ <b>STANDARD SHIPPING $9.50</b><br>
(DELIVERY IN 5-8 WORKING DAYS)
</label>
</div>
</div>
+ <div class="container-row">
+ <div class="container-fill">
+ <div class="container-message">
+ <span class="msg">
+ * Your personal and payment<br>
+ information will always remain private
+ </span>
+ </div>
+ </div>
+ </div>
+
</form>
</div>
</div>
@@ -652,20 +685,86 @@
<div id="cart_payment">
<div class="scroll">
<form>
- <div class="billing-container container">
- <div class="container-row">
- <div class="cc"></div>
- <div class="address"></div>
- </div>
- <div class="container-fill">
- <div class="container-message">
- <span class="msg">
- * Your personal and payment<br>
- information will always remain private
- </span>
+
+ <div class="billing-container container">
+ <div class="container-row">
+
+ <div class="checkbox-container">
+ <div class="checkbox-row">
+ <div class="checkbox-toggle">
+ <input id="same-as-shipping" type="checkbox" name="SameAsShipping" value="true">
+ <label for="same-as-shipping"></label>
+ </div>
+ <label class="checkbox-caption" for="same-as-shipping">
+ SAME AS SHIPPING ADDRESS
+ </label>
+ </div>
+ </div>
+
+ <div class="billing_address_rapper">
+
+ <div class="address_dropdown dropdown-wrapper">
+ <div class="dropdown-title add_edit">add / edit</div>
+ <div class="dropdown select_address">
+ BILLING ADDRESS
+ </div>
+ </div>
+ <div class="address_list checkbox-container">
+ <script type="text/html" class="address_template">
+ <div class="checkbox-row">
+ <div class="checkbox-toggle">
+ <input id="address-checkbox-{{id}}" type="radio" name="AddressId" value="{{id}}" {{checked}}>
+ <label for="address-checkbox-{{id}}"></label>
+ </div>
+ <label class="checkbox-caption" for="address-checkbox-{{id}}">
+ {{name}}<br>
+ {{address}}<br>
+ {{city}}, {{state}} {{zip}}
+ </label>
+ </div>
+ </script>
+ </div>
+
+ <div class="address"></div>
+
+ </div>
+
+ <div class="cc_dropdown dropdown-wrapper">
+ <div class="dropdown-title add_edit">add / edit</div>
+ <div class="dropdown select_address">
+ PAYMENT METHOD
+ </div>
+ </div>
+
+ <div class="cc_list checkbox-container">
+ <script type="text/html" class="cc_template">
+ <div class="checkbox-row">
+ <div class="checkbox-toggle">
+ <input id="cc-checkbox-{{id}}" type="radio" name="CCId" value="{{id}}" {{checked}}>
+ <label for="cc-checkbox-{{id}}"></label>
+ </div>
+ <label class="checkbox-caption" for="cc-checkbox-{{id}}">
+ XXXX XXXX XXXX {{last4}}<br>
+ {{type}} {{exp}}
+ </label>
+ </div>
+ </script>
+ </div>
+
+ <div class="cc"></div>
+
+ </div>
+
+ <div class="container-fill">
+ <div class="container-message">
+ <span class="msg">
+ * Your personal and payment<br>
+ information will always remain private
+ </span>
+ </div>
</div>
</div>
- </div>
+
</form>
</div>
</div>
@@ -673,6 +772,62 @@
<div id="cart_confirm">
<div class="scroll">
<h1>CONFIRM</h1>
+
+ <div class="order_section">
+ <h2>ORDER SUMMARY</h2>
+
+ <div class="rows">
+ <script type="text/html" class="template">
+ <div class="cart_item_info">
+ <span class="sku">{{sku}}</span>
+ <span class="title">{{title}}</span>
+ <span class="type">{{type}}</span>
+ <div class="meta">
+ <div class="meta-size"><b>SIZE:</b> {{size}}</div>
+ <div class="meta-color"><b>COLOR:</b> {{color}}</div>
+ <div class="meta-quantity"><b>QUANTITY:</b> {{quantity}}</div>
+ </div>
+ </div>
+ <div class="cart_item_price">
+ <span class="price">{{price}}</span>
+ </div>
+ </script>
+ </div>
+ <div class="cart-summary">
+ <div class="cart-summary-row">
+ <span class="label">SUB TOTAL</span>
+ <span class="subtotal"></span>
+ </div>
+ <div class="cart-summary-row">
+ <span class="label">ESTIMATED SHIPPING<br>& HANDLING</span>
+ <span class="shipping"></span>
+ </div>
+ <div class="cart-summary-row">
+ <span class="label">TAX</span>
+ <span class="tax"></span>
+ </div>
+ <div class="cart-summary-row">
+ <span class="label">TOTAL</span>
+ <span class="total"></span>
+ </div>
+ </div>
+ </div>
+
+ <div class="order_section">
+ <h2>SHIP TO</h2>
+
+ <div class="shipping_address"></div>
+ <div class="shipping_method"></div>
+ </div>
+
+ <div class="order_section">
+ <h2>BILL TO</h2>
+
+ <div class="payment_name"></div>
+ <div class="payment_method"></div>
+ <div class="payment_address"></div>
+ </div>
+
</div>
</div>
@@ -700,15 +855,45 @@
</div>
<script type="text/html" id="creditcard_template">
- <input type="text" name="Number" placeholder="CREDIT CARD NUMBER" required>
+ <input type="number" name="Number" placeholder="CREDIT CARD NUMBER" required>
<div class="half-input">
- <!-- NOTE text shifted to the left because of dropdown arrow -->
- <input type="text" onfocus="(this.type='number')" name="ExpirationMonth" placeholder="EXPIRATION MONTH" required>
- <input type="text" onfocus="(this.type='number')" name="ExpirationYear" placeholder="EXPIRATION YEAR" required>
+
+ <div class="select-wrapper">
+ <span>EXPIRATION MONTH</span>
+ <select name="ExpirationMonth">
+ <option value="NONE">EXPIRATION MONTH</option>
+ <option value="01">01</option>
+ <option value="02">02</option>
+ <option value="03">03</option>
+ <option value="04">04</option>
+ <option value="05">05</option>
+ <option value="06">06</option>
+ <option value="07">07</option>
+ <option value="08">08</option>
+ <option value="09">09</option>
+ <option value="10">10</option>
+ <option value="11">11</option>
+ <option value="12">12</option>
+ </select>
+ </div>
+ <div class="select-wrapper">
+ <span>EXPIRATION YEAR</span>
+ <select name="ExpirationYear">
+ <option value="NONE">EXPIRATION YEAR</option>
+ <option value="2016">2016</option>
+ <option value="2017">2017</option>
+ <option value="2018">2018</option>
+ <option value="2019">2019</option>
+ <option value="2020">2020</option>
+ <option value="2021">2021</option>
+ <option value="2022">2022</option>
+ <option value="2023">2023</option>
+ <option value="2024">2024</option>
+ <option value="2025">2025</option>
+ </select>
+ </div>
</div>
- <!-- NOTE text shifted to the left because of dropdown arrow -->
- <input type="text" onfocus="(this.type='number')" name="CVV" placeholder="SECURITY CODE" required>
- <span class="address"></span>
+ <input type="number" name="Cvv" placeholder="SECURITY CODE" required>
</script>
<script type="text/html" id="address_template">
@@ -720,8 +905,8 @@
<input type="text" name="City" placeholder="City">
<div class="select-wrapper">
<span>STATE</span>
- <select name="State">
- <option value="NONE">State</option>
+ <select name="Province">
+ <option value="NONE" selected>State</option>
<option value="AL">Alabama</option>
<option value="AK">Alaska</option>
<option value="AZ">Arizona</option>
@@ -777,14 +962,31 @@
</div>
</div>
<div class="half-input">
- <input type="text" name="Zip" placeholder="ZIP" required>
- <div id="country-wrapper">
+ <input type="text" name="ZipCode" placeholder="ZIP" required>
+ <div class="country-wrapper-static">
+ UNITED STATES
+<!--
<div id="country-select">
<input type="text" name="Country" placeholder="UNITED STATES" required>
</div>
+ -->
</div>
</div>
- <input type="number" name="Phone" placeholder="Phone Number">
+ <input type="text" name="Phone" placeholder="PHONE NUMBER">
+<!--
+ <div class="checkbox-container save_as_default">
+ <div class="checkbox-row">
+ <div class="checkbox-toggle">
+ <input id="save_as_default_cart_shipping" type="checkbox" name="IsDefault" value="true">
+ <label for="save_as_default_cart_shipping"></label>
+ </div>
+ <label class="checkbox-caption" for="save_as_default_cart_shipping">
+ SAVE AS DEFAULT
+ </label>
+ </div>
+ </div>
+-->
+
</script>
</body>
@@ -800,10 +1002,7 @@
<script src="js/vendor/promise.js"></script>
<script src="js/vendor/flickity.pkgd.js"></script>
<script src="js/vendor/util.js"></script>
-<script src="js/vendor/view/view.js"></script>
-<script src="js/vendor/view/router.js"></script>
-<script src="js/vendor/view/scrollable.js"></script>
-<script src="js/vendor/view/serializable.js"></script>
+<script src="js/vendor/jquery.creditCardValidator.js"></script>
<script src="js/sdk/_sdk.js"></script>
<script src="js/sdk/account.js"></script>
@@ -814,6 +1013,11 @@
<script src="js/sdk/product.js"></script>
<script src="js/sdk/shipping.js"></script>
+<script src="js/lib/view/View.js"></script>
+<script src="js/lib/view/Router.js"></script>
+<script src="js/lib/view/Scrollable.js"></script>
+<script src="js/lib/view/Serializable.js"></script>
+
<script src="js/lib/cart/CartView.js"></script>
<script src="js/lib/cart/CartPayment.js"></script>
<script src="js/lib/cart/CartShipping.js"></script>
diff --git a/StoneIsland/platforms/ios/www/js/index.js b/StoneIsland/platforms/ios/www/js/index.js
index ed8d9e5a..546bd637 100644
--- a/StoneIsland/platforms/ios/www/js/index.js
+++ b/StoneIsland/platforms/ios/www/js/index.js
@@ -69,6 +69,8 @@ var app = (function(){
app.view = null
app.router = new SiteRouter ()
app.account.connect( app.router.route.bind(app.router) )
+
+ $("body").removeClass("loading")
}
return app
diff --git a/StoneIsland/platforms/ios/www/js/lib/account/AccountView.js b/StoneIsland/platforms/ios/www/js/lib/account/AccountView.js
index cbd9a9c6..1c5c9f16 100644
--- a/StoneIsland/platforms/ios/www/js/lib/account/AccountView.js
+++ b/StoneIsland/platforms/ios/www/js/lib/account/AccountView.js
@@ -16,43 +16,102 @@ var AccountView = View.extend({
}
},
- populateAddresses: function(data){
- console.log("populate addresses:", data)
+ addresses: [],
+ addressLookup: {},
+ ccs: [],
+ ccLookup: {},
+
+ listAddresses: function(cb){
+ sdk.address.list({
+ success: function(data){
+ this.populateAddresses(data, cb)
+ }.bind(this)
+ })
+ },
+
+ populateAddresses: function(data, cb){
+ console.log("populate addresses:", data.AddressBook.addressBookItem)
+
if (! data.AddressBook) {
console.log("no addresses")
+ cb && cb()
return
}
- // console.log(data.AddressBook)
+
+ this.addresses = data.AddressBook.addressBookItem
+ this.addressLookup = {}
data.AddressBook.addressBookItem.forEach(function(item){
- if (item.isDefault) {
- // populate app.shipping.address
+ this.addressLookup[ item.Id ] = item
+ if (item.IsDefault) {
+ console.log("SHIPPING ADDRESS", item)
+ app.shipping.populate(item)
}
- else if (item.isBillingDefault) {
- // populate app.billing.address
+ if (item.IsBillingDefault) {
+ console.log("BILLING ADDRESS")
+ app.payment.populate(item)
}
+ }.bind(this))
+
+ app.cart.shipping.populate()
+
+ cb && cb()
+ },
+
+ listCreditCards: function(cb){
+ sdk.payment.list_credit_cards({
+ success: function(data){
+ this.populateCreditCards(data, cb)
+ }.bind(this)
})
},
-
+
+ populateCreditCards: function(data, cb){
+ console.log("populate ccs:", data.CreditCards)
+ this.ccs = data.CreditCards
+ this.ccLookup = {}
+ if (! data.CreditCards || ! data.CreditCards.length) {
+ }
+ else {
+ data.CreditCards.forEach(function(cc){
+ this.ccLookup[cc.Id] = cc
+ }.bind(this))
+ app.payment.populate( data.CreditCards[0] )
+ app.cart.payment.populate()
+ }
+ cb && cb()
+ },
+
logged_in: function(cb){
- sdk.address.list({
- success: this.populateAddresses.bind(this)
- })
+ this.listAddresses()
+ this.listCreditCards()
$("#nav .login").hide()
$("#nav .account, #nav .logout").show()
- if (app.last_view && app.last_view != app.login && app.last_view != app.signin && app.last_view != app.logout) {
- app.view && app.view.hide && app.view.hide()
- app.view = app.last_view
- app.view.show()
+ if (! auth.deferred_product && app.last_view) {
+ if (app.last_view != app.login && app.last_view != app.signin && app.last_view != app.logout) {
+ app.view && app.view.hide && app.view.hide()
+ app.view = app.last_view
+ app.view.show()
+ }
}
else {
cb && cb()
}
if ( ! auth.has_cart() ) {
- auth.create_cart(auth.add_deferred_product_to_cart)
+ app.curtain.show("loading")
+ auth.create_cart(function(){
+ auth.add_deferred_product_to_cart(function(){
+ app.router.go("cart")
+ setTimeout(function(){
+ app.curtain.hide("loading")
+ }, 500)
+ })
+ })
}
else {
if (auth.deferred_product) {
- auth.add_deferred_product_to_cart()
+ auth.add_deferred_product_to_cart(function(){
+ app.router.go("cart")
+ })
}
else {
app.cart.load()
diff --git a/StoneIsland/platforms/ios/www/js/lib/account/PaymentView.js b/StoneIsland/platforms/ios/www/js/lib/account/PaymentView.js
index d61ab5ab..9410fa42 100644
--- a/StoneIsland/platforms/ios/www/js/lib/account/PaymentView.js
+++ b/StoneIsland/platforms/ios/www/js/lib/account/PaymentView.js
@@ -1,14 +1,33 @@
var PaymentView = FormView.extend({
el: "#payment",
+
+ action: sdk.payment.add_credit_card,
events: {
},
+ test_data: {
+ "Name":"Name",
+ "Surname":"Surname",
+ "Address1":"address",
+ "Address2":"address2",
+ "City":"Ferrara",
+ "Province":"NY",
+ "HolderIsoCountry":"IT",
+ "CreditCardCountry": "US",
+ "ZipCode":"40200",
+ "Type":"Visa",
+ "Number":"4111111111111111",
+ "ExpirationMonth":"09",
+ "ExpirationYear":"2017",
+ "Cvv":"1233",
+ },
+
initialize: function(){
this.$form = this.$("form")
this.$msg = this.$(".msg")
- this.address = new AddressView ({ parent: this })
+ this.address = new AddressView ({ parent: this, checkPhone: false })
this.cc = new CreditCardView ({ parent: this })
this.scroller = new IScroll('#payment', app.iscroll_options)
},
@@ -17,9 +36,79 @@ var PaymentView = FormView.extend({
if (! auth.logged_in()) { return app.router.go("intro") }
app.footer.show("SAVE", "CANCEL")
document.body.className = "payment"
+ // this.preload()
+ },
+
+ populate: function(data){
+ this.data = data || this.data
+ this.address.populate(data)
+ this.cc.populate(data)
+ },
+
+ finalize: function(data){
+ if (this.cc.data && this.cc.data.Guid) {
+ sdk.payment.delete_credit_card({
+ guid: this.cc.data.Guid,
+ success: function(){},
+ error: function(){},
+ })
+ }
+
+ data.IsDefault = "true" // this.$isDefault.prop("checked") ? "true" : "false"
+ data.UserId = sdk.auth.user_id
+ data.HolderIsoCountry = "US"
+ data.CreditCardNumber = data.Number
+ data.IsPreferred = "true"
+
+ console.log(data)
+ return data
+ },
+
+ success: function(data){
+ app.curtain.show("loading")
+ app.account.listAddresses(function(){
+ app.curtain.hide("loading")
+ })
+ },
+
+ error: function(data){
+ console.log(data)
},
- save: function(){
+ cancel: function(){
+ app.router.go("intro")
},
})
+
+/*
+ var new_card = {
+ "Name":"Name",
+ "Surname":"Surname",
+ "Address":"address",
+ "City":"Ferrara",
+ "Province":"FE",
+ "HolderIsoCountry":"IT",
+ "ZipCode":"40200",
+ "Type":"Visa",
+ "Number":"0000567890124285",
+ "ExpirationMonth":"02",
+ "ExpirationYear":"2017",
+ }
+ promise(sdk.payment.add_credit_card, { data: new_card }).then(function(data){
+ last_guid = data['CreditCard']['Guid']
+ assert(data.Header.StatusCode == 201)
+ assert(!! last_guid)
+ done()
+ })
+
+ promise(sdk.payment.list_credit_cards, { data: {} }).then(function(data){
+ assert(data.Header.StatusCode == 201)
+ console.log(data)
+ done()
+ })
+
+ promise(sdk.payment.delete_credit_card, { guid: last_guid }).then(function(data){
+ assert(data.Header.StatusCode == 200)
+ done()
+*/ \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/www/js/lib/account/ProfileView.js b/StoneIsland/platforms/ios/www/js/lib/account/ProfileView.js
index 9150f874..999e8d65 100644
--- a/StoneIsland/platforms/ios/www/js/lib/account/ProfileView.js
+++ b/StoneIsland/platforms/ios/www/js/lib/account/ProfileView.js
@@ -31,24 +31,9 @@ var ProfileView = FormView.extend({
if (data.CurrentPassword && ! data.NewPassword) { errors.push([ "NewPassword", "Please enter your new password." ]) }
if (data.NewPassword && data.NewPassword.length < 7) { errors.push([ "CurrentPassword", "New password must be 7 characters or more." ]) }
if (data.Gender === "NONE") { errors.push([ "Gender", "Please supply your gender." ]) }
-
- data.BirthDay += "T00:00:00Z"
- data.YooxLetter = data.YooxLetter || "false"
},
- save: function(e){
- e && e.preventDefault()
-
- var valid = this.validate()
- if (valid.errors.length) {
- this.show_errors(valid.errors)
- return
- }
- else {
- this.hide_errors()
- }
-
- var data = valid.data
+ finalize: function(data){
if (data.CurrentPassword && (data.NewPassword || data.Email !== auth.user.Email)) {
data.NewPassword = data.NewPassword || data.CurrentPassword
data.NewEmail = data.NewEmail || auth.user.Email
@@ -65,30 +50,20 @@ var ProfileView = FormView.extend({
})
}
- var submissible_data = _.pick(valid.data, "Name Surname BirthDay Gender YooxLetter".split(" "))
-
- submissible_data.idUser = auth.user_id
- submissible_data.AccessToken = auth.access_token
- submissible_data.Premium = "false"
- submissible_data.LanguageId = ""
- submissible_data.SiteCode = "STONEISLAND_US"
- submissible_data.FuriganaName = ""
- submissible_data.FuriganaSurname = ""
- submissible_data.UserPromocode = ""
+ var submissible_data = _.pick(data, "Name Surname BirthDay Gender YooxLetter".split(" "))
+// submissible_data.idUser = auth.user_id
+// submissible_data.AccessToken = auth.access_token
+// submissible_data.Premium = "false"
+// submissible_data.LanguageId = ""
+// submissible_data.SiteCode = "STONEISLAND_US"
+// submissible_data.FuriganaName = ""
+// submissible_data.FuriganaSurname = ""
+// submissible_data.UserPromocode = ""
+ submissible_data.BirthDay += "T00:00:00Z"
+ submissible_data.YooxLetter = data.YooxLetter || "false"
submissible_data.DataProfiling = "true"
-
- app.curtain.show("loading")
- sdk.account.update({
- data: submissible_data,
- success: function(data){
- app.curtain.hide("loading")
- this.success(data)
- }.bind(this),
- error: function(data){
- app.curtain.hide("loading")
- this.error(data)
- }.bind(this),
- })
+
+ return submissible_data
},
success: function(data){
@@ -96,5 +71,9 @@ var ProfileView = FormView.extend({
error: function(data){
},
+
+ cancel: function(){
+ app.router.go("intro")
+ },
}) \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/www/js/lib/account/ShippingView.js b/StoneIsland/platforms/ios/www/js/lib/account/ShippingView.js
index f5bf1661..b8b260ab 100644
--- a/StoneIsland/platforms/ios/www/js/lib/account/ShippingView.js
+++ b/StoneIsland/platforms/ios/www/js/lib/account/ShippingView.js
@@ -2,8 +2,26 @@ var ShippingView = FormView.extend({
el: "#shipping",
+ action: sdk.address.add,
+
events: {
},
+
+ test_data: {
+ "Name":"name",
+ "Surname":"surname",
+ "Address":"address1\naddress2",
+ "IsDefault":false,
+ "IsBillingDefault":false,
+ "IsOwner":false,
+ "ZipCode":"88040",
+ "City":"City",
+ "Province":"NY",
+ "Phone":"1234567890",
+ "Mobile":"Mobile",
+ "Mail":"Mail",
+ "UserId": sdk.auth.user_id,
+ },
initialize: function(){
this.$form = this.$("form")
@@ -14,11 +32,45 @@ var ShippingView = FormView.extend({
show: function(){
if (! auth.logged_in()) { return app.router.go("intro") }
+// this.preload( this.data || this.test_data )
app.footer.show("SAVE", "CANCEL")
document.body.className = "shipping"
},
- save: function(){
+ populate: function(data){
+ this.data = data || this.data
+ this.address.populate(data)
+ },
+
+ finalize: function(data){
+ if (this.address.data && this.address.data.Id) {
+ sdk.address.destroy({
+ id: this.address.data.Id,
+ success: function(){},
+ error: function(){},
+ })
+ }
+
+ data.IsDefault = "true" // this.$isDefault.prop("checked") ? "true" : "false"
+ data.UserId = sdk.auth.user_id
+
+ console.log(data)
+ return data
+ },
+
+ success: function(data){
+ app.curtain.show("loading")
+ app.account.listAddresses(function(){
+ app.curtain.hide("loading")
+ })
+ },
+
+ error: function(data){
+ console.log(data)
+ },
+
+ cancel: function(){
+ app.router.go("intro")
},
}) \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/www/js/lib/auth/LogoutView.js b/StoneIsland/platforms/ios/www/js/lib/auth/LogoutView.js
index 735c0242..481dcb8d 100644
--- a/StoneIsland/platforms/ios/www/js/lib/auth/LogoutView.js
+++ b/StoneIsland/platforms/ios/www/js/lib/auth/LogoutView.js
@@ -7,9 +7,10 @@ var LogoutView = View.extend({
show: function(){
document.body.className = "logout"
+ app.header.set_cart_count(0)
app.footer.hide()
+ auth.log_out()
app.account.logged_out()
- auth.clear_user()
},
}) \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/www/js/lib/auth/SignupView.js b/StoneIsland/platforms/ios/www/js/lib/auth/SignupView.js
index 7f894c3c..7e6fc04d 100644
--- a/StoneIsland/platforms/ios/www/js/lib/auth/SignupView.js
+++ b/StoneIsland/platforms/ios/www/js/lib/auth/SignupView.js
@@ -61,7 +61,9 @@ var SignupView = FormView.extend({
if (data.DataProfiling !== "true") { errors.push([ "DataProfiling", "You must consent to use this service." ]) }
if (data.DataProfiling2 !== "true") { errors.push([ "DataProfiling2", "You must consent to use this service." ]) }
if (! data.YooxLetter) { data.YooxLetter = false }
-
+ },
+
+ finalize: function(data){
delete data.DataProfiling2
delete data.ConfirmEmail
@@ -69,6 +71,7 @@ var SignupView = FormView.extend({
this.last_data = data
console.log(data)
+ return data
},
privacy_link: function(){
diff --git a/StoneIsland/platforms/ios/www/js/lib/blogs/ArchiveView.js b/StoneIsland/platforms/ios/www/js/lib/blogs/ArchiveView.js
index 051ef0c9..3db5c8da 100644
--- a/StoneIsland/platforms/ios/www/js/lib/blogs/ArchiveView.js
+++ b/StoneIsland/platforms/ios/www/js/lib/blogs/ArchiveView.js
@@ -1,20 +1,34 @@
var ArchiveView = ScrollableView.extend({
el: "#archive",
- template: $("#archive .template").html(),
+ menu_template: $("#archive .menu .template").html(),
+ row_template: $("#archive .scroll .template").html(),
events: {
+ "click .item": "pick",
},
initialize: function(){
+ this.$menu_items = this.$(".menu .items")
this.$content = this.$(".content")
this.$loader = this.$(".loader")
- this.scroller = new IScroll('#archive', app.iscroll_options)
+ this.scroller = new IScroll('#archive .scroll', app.iscroll_options)
},
+ back: function(){
+ this.$el.addClass("menu")
+ app.header.set_back(false)
+ },
+
+ pick: function(){
+ this.$el.removeClass("menu")
+ app.header.set_back(true)
+ },
+
show: function(){
this.deferScrollToTop()
app.footer.hide()
+ this.back()
document.body.className = "archive"
},
@@ -24,12 +38,22 @@ var ArchiveView = ScrollableView.extend({
this.$content.empty()
// id title images[ uri label code caption ]
- this.data.forEach(function(row){
- var t = this.template.replace(/{{image}}/, row.images[0].uri)
- .replace(/{{code}}/, row.code)
- .replace(/{{title}}/, row.title)
+ this.data.forEach(function(row, index){
+ var t = this.row_template.replace(/{{image}}/, row.images[0].uri)
+ .replace(/{{label}}/, row.images[0].label)
+ .replace(/{{code}}/, row.images[0].code)
+ .replace(/{{caption}}/, row.images[0].caption)
this.$content.append(t)
+
+ var t = this.menu_template.replace(/{{title}}/, row.title)
+ var $t = $(t)
+ $t.data("title", row.title)
+ $t.data("index", index)
+ this.$menu_items.append($t)
}.bind(this))
+
+ this.back()
+ this.deferScrollToTop()
},
}) \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/www/js/lib/cart/CartConfirm.js b/StoneIsland/platforms/ios/www/js/lib/cart/CartConfirm.js
index 687f3a93..aa6ec9e4 100644
--- a/StoneIsland/platforms/ios/www/js/lib/cart/CartConfirm.js
+++ b/StoneIsland/platforms/ios/www/js/lib/cart/CartConfirm.js
@@ -14,6 +14,7 @@ var CartConfirm = FormView.extend({
document.body.className = "cart"
app.cart.el.className = "confirm"
app.footer.show("PLACE ORDER", "CANCEL")
+ window.location.hash = "#/cart/confirm"
this.deferScrollToTop()
},
diff --git a/StoneIsland/platforms/ios/www/js/lib/cart/CartPayment.js b/StoneIsland/platforms/ios/www/js/lib/cart/CartPayment.js
index 19d21ffd..fec5e1d1 100644
--- a/StoneIsland/platforms/ios/www/js/lib/cart/CartPayment.js
+++ b/StoneIsland/platforms/ios/www/js/lib/cart/CartPayment.js
@@ -2,39 +2,151 @@ var CartPayment = FormView.extend({
el: "#cart_payment",
+ address_template: $("#cart_payment .address_template").html(),
+ cc_template: $("#cart_payment .cc_template").html(),
+
+ action: sdk.cart.set_credit_card,
+
+ address_list_mode: false,
+ cc_list_mode: false,
+
events: {
+ "change [name=SameAsShipping]": "toggle_shipping",
+ "click .address_dropdown": "toggle_address",
+ "click .cc_dropdown": "toggle_cc",
},
initialize: function(opt){
this.parent = opt.parent
this.$form = this.$("form")
this.$msg = this.$(".msg")
- this.address = new AddressView ({ parent: this })
+ this.$same_as_shipping = this.$("[name=SameAsShipping]")
+ this.$billing_address_rapper = this.$(".billing_address_rapper")
+ this.$address_list = this.$(".address_list")
+ this.$address_form = this.$(".address")
+ this.$address_dropdown = this.$(".address_dropdown")
+ this.$cc_list = this.$(".cc_list")
+ this.$cc_form = this.$(".cc")
+ this.$cc_dropdown = this.$(".cc_dropdown")
+
+ this.address = new AddressView ({ parent: this, checkPhone: false })
this.cc = new CreditCardView ({ parent: this })
this.scroller = new IScroll('#cart_payment', app.iscroll_options)
+ this.address.disabled = true
+ this.cc.disabled = true
},
- // sdk.cart.set_credit_card
- // sdk.payment.list_credit_cards
- // sdk.payment.add_credit_card
- // sdk.payment.delete_credit_card
- // sdk.payment.get_payment_types
- // sdk.cart.use_stored_credit_card
-
show: function(){
document.body.className = "cart"
app.cart.el.className = "payment"
app.footer.show("CONFIRM &gt;", "CANCEL")
+ window.location.hash = "#/cart/payment"
+ this.populate()
this.deferScrollToTop()
+ },
+
+ toggle_shipping: function(){
+ setTimeout(function(){
+ var state = this.$same_as_shipping.prop("checked")
+ this.$billing_address_rapper.toggle( ! state )
+ }.bind(this))
+ },
+
+ toggle_address: function(state){
+ if (! app.account.ccs.length) {
+ state = false
+ }
+ // this.$address_dropdown.toggle( !! app.account.ccs.length )
+
+ this.address_list_mode = typeof state == "boolean" ? state : ! this.list_mode
+ this.address.disabled = this.address_list_mode
+ this.$address_form.toggle(! this.address_list_mode)
+ this.$address_list.toggle(this.address_list_mode)
+ },
- sdk.cart.set_payment_type({ data: payment_id })
+ toggle_cc: function(state){
+ if (! app.account.ccs.length) {
+ state = false
+ }
+ // this.$cc_dropdown.toggle( !! app.account.ccs.length )
+
+ this.cc_list_mode = typeof state == "boolean" ? state : ! this.cc_list_mode
+ this.cc.disabled = this.cc_list_mode
+ this.$cc_form.toggle(! this.cc_list_mode)
+ this.$cc_list.toggle(this.cc_list_mode)
+ },
+
+ populate: function(){
+ this.$(".save_as_default").show()
+ this.$address_list.empty()
+ this.$cc_list.empty()
+ this.toggle_address( !! app.account.ccs.length )
+ this.toggle_cc( !! app.account.ccs.length )
+
+ app.account.ccs.forEach(function(cc){
+ console.log(cc)
+
+ var address_t = this.address_template.replace(/{{id}}/g, cc.Id)
+ .replace(/{{checked}}/g, cc.IsDefault ? "checked" : "")
+ .replace(/{{name}}/g, cc.Name + " " + cc.Surname)
+ .replace(/{{address}}/g, cc.Address.replace(/\n$/,"").replace("\n", "<br>"))
+ .replace(/{{city}}/g, cc.City)
+ .replace(/{{state}}/g, cc.Province)
+ .replace(/{{zip}}/g, cc.ZipCode)
+
+ var cc_t = this.cc_template.replace(/{{id}}/g, cc.Id)
+ .replace(/{{checked}}/g, cc.IsDefault ? "checked" : "")
+ .replace(/{{last4}}/g, cc.Last4)
+ .replace(/{{type}}/g, cc.Type)
+ .replace(/{{exp}}/g, cc.ExpirationMonth + "/" + cc.ExpirationYear)
+
+ this.$address_list.append(address_t)
+ this.$cc_list.append(cc_t)
+ })
+ },
+
+ finalize: function(data){
+ var shipping_info = {}, address_data, address_id, cc_info = {}, cc_data, cc_id
+ var shipping_type = $("[name=ShippingType]").filter(function(){ return $(this).prop("checked") }).val()
+
+ if (this.list_mode) {
+ address_id = $("[name=AddressId]").filter(function(){ return $(this).prop("checked") }).val()
+ address_data = app.account.addressLookup[ address_id ]
+ }
+ else {
+ address_data = data
+ }
+ if (this.cc_list_mode) {
+ cc_id = $("[name=CCId]").filter(function(){ return $(this).prop("checked") }).val()
+ cc_data = app.account.ccLookup[ cc_id ]
+ }
+ else {
+ cc_data = data
+ }
+
+ shipping_info.Name = address_data.Name
+ shipping_info.Surname = address_data.Surname
+ shipping_info.Email = auth.user.Email
+ shipping_info.Phone = address_data.Phone
+ shipping_info.Mobile = address_data.Phone
+ shipping_info.StreetWithNumber = address_data.Address
+ shipping_info.PostalCode = address_data.ZipCode
+ shipping_info.City = address_data.City
+ shipping_info.Province = address_data.Province
+ shipping_info.Region = address_data.Province
+ shipping_info.CountryCode = "US"
+
+ return shipping_info
},
- save: function(){
+ success: function(){
+ app.router.go('cart/confirm')
},
cancel: function(){
+ app.router.go('cart/shipping')
},
+
}) \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/www/js/lib/cart/CartShipping.js b/StoneIsland/platforms/ios/www/js/lib/cart/CartShipping.js
index 7d7c8540..1a9653e1 100644
--- a/StoneIsland/platforms/ios/www/js/lib/cart/CartShipping.js
+++ b/StoneIsland/platforms/ios/www/js/lib/cart/CartShipping.js
@@ -2,32 +2,116 @@ var CartShipping = FormView.extend({
el: "#cart_shipping",
+ action: sdk.cart.set_shipping_address,
+
+ list_mode: true,
+
+ template: $("#cart_shipping .template").html(),
+
events: {
+ "click .dropdown-wrapper": "toggle_dropdown",
},
initialize: function(opt){
this.parent = opt.parent
this.$form = this.$("form")
+ this.$dropdown_wrapper = this.$(".dropdown-wrapper")
+ this.$address_list = this.$(".address_list")
+ this.$address_form = this.$(".address")
this.$msg = this.$(".msg")
this.address = new AddressView ({ parent: this })
this.scroller = new IScroll('#cart_shipping', app.iscroll_options)
+ this.address.disabled = true
},
show: function(){
document.body.className = "cart"
app.cart.el.className = "shipping"
app.footer.show("PAYMENT &gt;", "CANCEL")
+ window.location.hash = "#/cart/shipping"
+ this.populate()
this.deferScrollToTop()
},
+ populate: function(){
+ // id checked name address city state zip
+ this.$(".save_as_default").show()
+ this.$address_list.empty()
+ if (! app.account.addresses.length) {
+ this.toggle_dropdown(false)
+ return
+ }
+ app.account.addresses.forEach(function(address){
+ var t = this.template.replace(/{{id}}/g, address.Id)
+ .replace(/{{checked}}/g, address.IsDefault ? "checked" : "")
+ .replace(/{{name}}/g, address.Name + " " + address.Surname)
+ .replace(/{{address}}/g, address.Address.replace(/\n$/,"").replace("\n", "<br>"))
+ .replace(/{{city}}/g, address.City)
+ .replace(/{{state}}/g, address.Province)
+ .replace(/{{zip}}/g, address.ZipCode)
+ this.$address_list.append(t)
+ }.bind(this))
+ },
+
+ toggle_dropdown: function(state){
+ if (! app.account.addresses.length) {
+ state = false
+ }
+ this.list_mode = typeof state == "boolean" ? state : ! this.list_mode
+ this.$dropdown_wrapper.toggle( !! app.account.addresses.length )
+ this.address.disabled = this.list_mode
+ this.$address_form.toggle(! this.list_mode)
+ this.$address_list.toggle(this.list_mode)
+ },
+
// sdk.cart.set_shipping_address
// sdk.shipping.get_delivery_types
// sdk.shipping.set_delivery_type
- save: function(){
+ shipping_types: {
+ Standard: 1,
+ Express: 2,
+ },
+
+ finalize: function(data){
+ var shipping_info = {}, address_data, address_id
+ var shipping_type = $("[name=ShippingType]").filter(function(){ return $(this).prop("checked") }).val()
+
+ sdk.shipping.set_delivery_type({
+ id: this.shipping_types[shipping_type],
+ success: function(data){ console.log("set shipping type", data) },
+ error: function(data){ console.log("didnt set shipping type", data) },
+ })
+
+ if (this.list_mode) {
+ address_id = $("[name=AddressId]").filter(function(){ return $(this).prop("checked") }).val()
+ address_data = app.account.addressLookup[ address_id ]
+ }
+ else {
+ address_data = data
+ }
+
+ shipping_info.Name = address_data.Name
+ shipping_info.Surname = address_data.Surname
+ shipping_info.Email = auth.user.Email
+ shipping_info.Phone = address_data.Phone
+ shipping_info.Mobile = address_data.Phone
+ shipping_info.StreetWithNumber = address_data.Address
+ shipping_info.PostalCode = address_data.ZipCode
+ shipping_info.City = address_data.City
+ shipping_info.Province = address_data.Province
+ shipping_info.Region = address_data.Province
+ shipping_info.CountryCode = "US"
+
+ return shipping_info
+ },
+
+ success: function(){
+ app.router.go('cart/payment')
},
cancel: function(){
+ app.router.go('cart/summary')
},
}) \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/www/js/lib/cart/CartSummary.js b/StoneIsland/platforms/ios/www/js/lib/cart/CartSummary.js
index 209e3102..9a24afa5 100644
--- a/StoneIsland/platforms/ios/www/js/lib/cart/CartSummary.js
+++ b/StoneIsland/platforms/ios/www/js/lib/cart/CartSummary.js
@@ -27,6 +27,7 @@ var CartSummary = ScrollableView.extend({
show: function(){
document.body.className = "cart"
app.cart.el.className = "summary"
+ window.location.hash = "#/cart/summary"
if (auth.has_cart()) {
this.load()
}
@@ -110,21 +111,21 @@ var CartSummary = ScrollableView.extend({
.replace(/{{price}}/, as_cash(details.Item.Price.DiscountedPrice))
$el.data("price", details.Item.Price.DiscountedPrice)
$el.html(t)
- this.deferScrollToTop()
+ this.refreshScroller()
}.bind(this))
}.bind(this))
this.updateTotals()
this.el.className = "full"
- this.deferScrollToTop()
+ this.refreshScroller()
},
updateCounts: function(){
- app.header.set_cart_count(this.data.Cart.Items.length)
- this.parent.$itemcount.html(pluralize(this.data.Cart.Items.length, "ITEM", "S"))
+ app.header.set_cart_count( this.data.Cart.Items.length )
+ this.parent.setHeaderCount( this.data.Cart.Items.length )
},
-
+
updateTotals: function(){
var subtotal = this.data.Cart.Totals.TotalWithoutPromotions
var shipping_cost = this.data.Cart.DeliveryMethod.Selected.Amount.Total
@@ -140,6 +141,7 @@ var CartSummary = ScrollableView.extend({
empty: function(){
app.footer.hide()
app.header.set_cart_count(0)
+ this.parent.setHeaderCount( 0 )
this.parent.$itemcount.html("0 ITEMS")
this.el.className = "empty"
},
@@ -155,9 +157,11 @@ var CartSummary = ScrollableView.extend({
remove_item: function(e){
var $el = $( e.currentTarget ).closest(".cart_item_row")
var data = $el.data()
- data.Cart.Totals.TotalWithoutPromotions -= data.price
- data.Cart.Totals.TotalToPay -= data.price
-
+
+ console.log(this.data.Cart)
+
+ this.data.Cart.Totals.TotalWithoutPromotions -= data.price
+ this.data.Cart.Totals.TotalToPay -= data.price
this.data.Cart.Items = this.data.Cart.Items.filter(function(item){
return ( item['Code10'] !== data.code || item['Size'] !== data.size)
})
@@ -165,18 +169,20 @@ var CartSummary = ScrollableView.extend({
this.updateTotals()
this.updateCounts()
$el.remove()
+ this.refreshScroller()
if (this.data.Cart.Items.length == 0) {
this.empty()
}
+ app.curtain.show("loading")
sdk.cart.delete_item({
data: {
Code10: data.code,
Size: data.size,
},
success: function(){
- console.log("damn")
+ app.curtain.hide("loading")
},
})
},
diff --git a/StoneIsland/platforms/ios/www/js/lib/cart/CartView.js b/StoneIsland/platforms/ios/www/js/lib/cart/CartView.js
index 8bea43dc..b57caadd 100644
--- a/StoneIsland/platforms/ios/www/js/lib/cart/CartView.js
+++ b/StoneIsland/platforms/ios/www/js/lib/cart/CartView.js
@@ -15,6 +15,8 @@ var CartView = View.extend({
this.confirm = new CartConfirm ({ parent: this })
this.thanks = new CartThanks ({ parent: this })
+ this.$full_msg = this.$(".full_msg")
+ this.$empty_msg = this.$(".empty_msg")
this.$itemcount = this.$(".itemcount")
},
@@ -47,4 +49,16 @@ var CartView = View.extend({
this.payment.show()
},
+ setHeaderCount: function(n){
+ if (n) {
+ this.$itemcount.html(pluralize(n, "ITEM", "S"))
+ this.$full_msg.show()
+ this.$empty_msg.hide()
+ }
+ else {
+ this.$full_msg.hide()
+ this.$empty_msg.show()
+ }
+ },
+
}) \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/www/js/lib/nav/AddressView.js b/StoneIsland/platforms/ios/www/js/lib/nav/AddressView.js
index 15a5784d..31e9d802 100644
--- a/StoneIsland/platforms/ios/www/js/lib/nav/AddressView.js
+++ b/StoneIsland/platforms/ios/www/js/lib/nav/AddressView.js
@@ -3,24 +3,25 @@ var AddressView = SerializableView.extend({
template: $("#address_template").html(),
+ disabled: false,
+
events: {
},
initialize: function(opt){
this.parent = opt.parent
- this.$el = this.parent.$(".address")
- this.el = this.$el[0]
+ this.checkPhone = 'checkPhone' in opt ? opt.checkPhone : true
+ this.setElement( this.parent.$(".address") )
this.$el.html(this.template)
},
populate: function(data){
- this.parent.$(".address input").val("")
- Object.keys(data).forEach(function(key){
- this.parent$(".address [name=" + key + "]").val(data[key])
- }.bind(this))
- },
-
- deserialize: function(){
+ this.data = data
+ var address = data.Address.split("\n")
+ data.Address1 = address[0]
+ data.Address2 = address[1]
+ this.$(".address input").val("")
+ this.load_data(data)
},
validate_presence: {
@@ -28,12 +29,223 @@ var AddressView = SerializableView.extend({
"Surname": "Please enter your last name.",
"Address1": "Please enter your street address.",
"City": "Please enter your city.",
- "State": "Please choose your state.",
- "Phone": "Please enter your phone number.",
+ "ZipCode": "Please enter your zip code.",
},
validate_fields: function(data, errors){
- if (data.Phone.replace(/[^0-9]/g, "").length < 10) { errors.push([ "Phone", "Phone numbers must be at least 10 digits." ]) }
+ if (this.disabled) { return }
+ if (this.checkPhone && ! data.Phone) { errors.push([ "Phone", "Please enter your phone number." ]) }
+ if (this.checkPhone && data.Phone && data.Phone.replace(/[^0-9]/g, "").length < 10) { errors.push([ "Phone", "Phone numbers must be at least 10 digits." ]) }
+ if (! data.Province || data.Province == "NONE") { errors.push([ "Province", "Please choose your state." ]) }
+ data.Address = data.Address1 + "\n" + data.Address2
+ data.UserId = auth.user_id
+ delete data.Address1
+ delete data.Address2
},
})
+
+
+var COUNTRIES = [
+ ['Country Name', 'NONE'],
+ ['United States', 'US'],
+ ['Abkhazia', 'GE'],
+ ['Afghanistan', 'AF'],
+ ['Albania', 'AL'],
+ ['Algeria', 'DZ'],
+ ['Andorra', 'AD'],
+ ['Angola', 'AO'],
+ ['Antigua and Barbuda', 'AG'],
+ ['Argentina', 'AR'],
+ ['Armenia', 'AM'],
+ ['Australia', 'AU'],
+ ['Austria', 'AT'],
+ ['Azerbaijan', 'AZ'],
+ ['Bahamas', 'BS'],
+ ['Bahrain', 'BH'],
+ ['Bangladesh', 'BD'],
+ ['Barbados', 'BB'],
+ ['Belarus', 'BY'],
+ ['Belgium', 'BE'],
+ ['Belize', 'BZ'],
+ ['Benin', 'BJ'],
+ ['Bhutan', 'BT'],
+ ['Bolivia', 'BO'],
+ ['Bosnia and Herzegovina', 'BA'],
+ ['Botswana', 'BW'],
+ ['Brazil', 'BR'],
+ ['Brunei', 'BN'],
+ ['Bulgaria', 'BG'],
+ ['Burkina Faso', 'BF'],
+ ['Burundi', 'BI'],
+ ['Cambodia', 'KH'],
+ ['Cameroon', 'CM'],
+ ['Canada', 'CA'],
+ ['Cape Verde', 'CV'],
+ ['Central African Republic', 'CF'],
+ ['Chad', 'TD'],
+ ['Chile', 'CL'],
+ ['China', 'CN'],
+ ['Colombia', 'CO'],
+ ['Comoros', 'KM'],
+ ['Congo', 'CD'],
+ ['Congo-Brazzaville', 'CG'],
+ ['Costa Rica', 'CR'],
+ ['Cote d\'Ivoire (Ivory Coast)', 'CI'],
+ ['Croatia', 'HR'],
+ ['Cuba', 'CU'],
+ ['Cyprus', 'CY'],
+ ['Czech Republic', 'CZ'],
+ ['Denmark', 'DK'],
+ ['Djibouti', 'DJ'],
+ ['Dominica', 'DM'],
+ ['Dominican Republic', 'DO'],
+ ['Ecuador', 'EC'],
+ ['Egypt', 'EG'],
+ ['El Salvador', 'SV'],
+ ['Equatorial Guinea', 'GQ'],
+ ['Eritrea', 'ER'],
+ ['Estonia', 'EE'],
+ ['Ethiopia', 'ET'],
+ ['Fiji', 'FJ'],
+ ['Finland', 'FI'],
+ ['France', 'FR'],
+ ['Gabon', 'GA'],
+ ['Gambia', '220'],
+ ['Georgia', 'GE'],
+ ['Germany', 'DE'],
+ ['Ghana', 'GH'],
+ ['Greece', 'GR'],
+ ['Grenada', 'GD'],
+ ['Guatemala', 'GT'],
+ ['Guinea', 'GN'],
+ ['Guinea-Bissau', 'GW'],
+ ['Guyana', 'GY'],
+ ['Haiti', 'HT'],
+ ['Honduras', 'HN'],
+ ['Hungary', 'HU'],
+ ['Iceland', 'IS'],
+ ['India', 'IN'],
+ ['Indonesia', 'ID'],
+ ['Iran', 'IR'],
+ ['Iraq', 'IQ'],
+ ['Ireland', 'IE'],
+ ['Israel', 'IL'],
+ ['Italy', 'IT'],
+ ['Jamaica', 'JM'],
+ ['Japan', 'JP'],
+ ['Jordan', 'JO'],
+ ['Kazakhstan', 'KZ'],
+ ['Kenya', 'KE'],
+ ['Kiribati', 'KI'],
+ ['Kuwait', 'KW'],
+ ['Kyrgyzstan', 'KG'],
+ ['Laos', 'LA'],
+ ['Latvia', 'LV'],
+ ['Lebanon', 'LB'],
+ ['Lesotho', 'LS'],
+ ['Liberia', 'LR'],
+ ['Libya', 'LY'],
+ ['Liechtenstein', 'LI'],
+ ['Lithuania', 'LT'],
+ ['Luxembourg', 'LU'],
+ ['Macedonia', 'MK'],
+ ['Madagascar', 'MG'],
+ ['Malawi', 'MW'],
+ ['Malaysia', 'MY'],
+ ['Maldives', 'MV'],
+ ['Mali', 'ML'],
+ ['Malta', 'MT'],
+ ['Marshall Islands', 'MH'],
+ ['Mauritania', 'MR'],
+ ['Mauritius', 'MU'],
+ ['Mexico', 'MX'],
+ ['Micronesia', 'FM'],
+ ['Moldova', 'MD'],
+ ['Monaco', 'MC'],
+ ['Mongolia', 'MN'],
+ ['Montenegro', 'ME'],
+ ['Morocco', 'MA'],
+ ['Mozambique', 'MZ'],
+ ['Myanmar', 'MM'],
+ ['Nagorno-Karabakh', 'AZ'],
+ ['Namibia', 'NA'],
+ ['Nauru', 'NR'],
+ ['Nepal', 'NP'],
+ ['Netherlands', 'NL'],
+ ['New Zealand', 'NZ'],
+ ['Nicaragua', 'NI'],
+ ['Niger', 'NE'],
+ ['Nigeria', 'NG'],
+ ['North Korea', 'KP'],
+ ['Northern Cyprus', 'CY'],
+ ['Norway', 'NO'],
+ ['Oman', 'OM'],
+ ['Pakistan', 'PK'],
+ ['Palau', 'PW'],
+ ['Panama', 'PA'],
+ ['Papua New Guinea', 'PG'],
+ ['Paraguay', 'PY'],
+ ['Peru', 'PE'],
+ ['Philippines', 'PH'],
+ ['Poland', 'PL'],
+ ['Portugal', 'PT'],
+ ['Qatar', 'QA'],
+ ['Romania', 'RO'],
+ ['Russia', 'RU'],
+ ['Rwanda', 'RW'],
+ ['Saint Kitts and Nevis', 'KN'],
+ ['Saint Lucia', 'LC'],
+ ['Saint Vincent and the Grenadines', 'VC'],
+ ['Samoa', 'WS'],
+ ['San Marino', 'SM'],
+ ['Sao Tome and Principe', 'ST'],
+ ['Saudi Arabia', 'SA'],
+ ['Senegal', 'SN'],
+ ['Serbia', 'RS'],
+ ['Seychelles', 'SC'],
+ ['Sierra Leone', 'SL'],
+ ['Singapore', 'SG'],
+ ['Slovakia', 'SK'],
+ ['Slovenia', 'SI'],
+ ['Solomon Islands', 'SB'],
+ ['Somalia', 'SO'],
+ ['Somaliland', 'SO'],
+ ['South Africa', 'Rand'],
+ ['South Korea', 'KR'],
+ ['South Ossetia', 'GE'],
+ ['Spain', 'ES'],
+ ['Sri Lanka', 'LK'],
+ ['Sudan', 'SD'],
+ ['Suriname', 'SR'],
+ ['Swaziland', 'SZ'],
+ ['Sweden', 'SE'],
+ ['Switzerland', 'CH'],
+ ['Syria', 'SY'],
+ ['Taiwan', 'TW'],
+ ['Tajikistan', 'TJ'],
+ ['Tanzania', 'TZ'],
+ ['Thailand', 'TH'],
+ ['Timor-Leste', 'TL'],
+ ['Togo', 'TG'],
+ ['Tonga', 'TO'],
+ ['Transnistria', 'MD'],
+ ['Trinidad and Tobago', 'TT'],
+ ['Tunisia', 'TN'],
+ ['Turkey', 'TR'],
+ ['Turkmenistan', 'TM'],
+ ['Tuvalu', 'TV'],
+ ['Uganda', 'UG'],
+ ['Ukraine', 'UA'],
+ ['United Arab Emirates', 'AE'],
+ ['United Kingdom', 'GB'],
+ ['Uruguay', 'UY'],
+ ['Uzbekistan', 'UZ'],
+ ['Vanuatu', 'VU'],
+ ['Vatican City', 'VA'],
+ ['Venezuela', 'VE'],
+ ['Vietnam', 'VN'],
+ ['Yemen', 'YE'],
+ ['Zambia', 'ZM'],
+ ['Zimbabwe', 'ZW'],
+]
diff --git a/StoneIsland/platforms/ios/www/js/lib/nav/CreditCardView.js b/StoneIsland/platforms/ios/www/js/lib/nav/CreditCardView.js
index 33ecab79..1855b7a9 100644
--- a/StoneIsland/platforms/ios/www/js/lib/nav/CreditCardView.js
+++ b/StoneIsland/platforms/ios/www/js/lib/nav/CreditCardView.js
@@ -1,27 +1,53 @@
-var CreditCardView = View.extend({
+var CreditCardView = SerializableView.extend({
template: $("#creditcard_template").html(),
+ cardOptions: {
+ accept: ['visa', 'mastercard', 'amex'],
+ },
+
events: {
},
initialize: function(opt){
this.parent = opt.parent
- this.parent.$(".cc").html(this.template)
+ this.setElement( this.parent.$(".cc") )
+ this.$el.html(this.template)
+
+ this.$number = this.$("[name=Number]")
+ this.$number.validateCreditCard(this.updateCard.bind(this), this.cardOptions)
},
populate: function(data){
+ this.data = data
+ data.Number = "XXXX XXXX XXXX " + data.Number
+ this.$number.attr("type", "text")
this.parent.$(".cc input").val("")
- Object.keys(data).forEach(function(key){
- this.parent$(".cc [name=" + key + "]").val(data[key])
- }.bind(this))
+ this.$(".cc input").val("")
+ this.load_data(data)
+ },
+
+ updateCard: function(card){
+ // console.log(card)
+ // card.card_type.name
+ // card.card_type.valid
},
validate_presence: {
+ 'Number': 'Please enter your credit card number.',
+ 'Cvv': 'Please enter your security code.',
},
validate_fields: function(data, errors){
+ var card = this.$number.validateCreditCard(this.cardOptions)
+ if (! card.valid) { errors.push([ "Number", "Your card number is invalid." ]) }
+ if (! data.ExpirationMonth || data.ExpirationMonth == "NONE") { errors.push([ "ExpirationMonth", "Please enter the expiration month." ]) }
+ if (! data.ExpirationYear || data.ExpirationYear == "NONE") { errors.push([ "ExpirationYear", "Please select the expiration month." ]) }
+ data.UserId = auth.user_id
+ if (card.valid) {
+ data.Type = card.card_type.name
+ }
},
})
diff --git a/StoneIsland/platforms/ios/www/js/lib/nav/HeaderView.js b/StoneIsland/platforms/ios/www/js/lib/nav/HeaderView.js
index 7563be2d..b2f01208 100644
--- a/StoneIsland/platforms/ios/www/js/lib/nav/HeaderView.js
+++ b/StoneIsland/platforms/ios/www/js/lib/nav/HeaderView.js
@@ -14,7 +14,9 @@ var HeaderView = View.extend({
this.$cart_count = this.$(".cart_count")
},
+ back_state: false,
set_back: function(state){
+ this.back_state = state
if (state) {
this.$burger[0].className = "burger ion-ios-arrow-left"
}
@@ -24,7 +26,7 @@ var HeaderView = View.extend({
},
nav: function(){
- if (app.view.back) {
+ if (this.back_state) {
app.view.back()
}
else {
@@ -43,7 +45,7 @@ var HeaderView = View.extend({
count: 0,
set_cart_count: function(n){
this.count = n
- this.$cart_count.html(n)
+ this.$cart_count.html(n || " ")
},
increment_cart_count: function(){
this.$cart_count.html( ++this.count )
diff --git a/StoneIsland/platforms/ios/www/js/lib/nav/IntroView.js b/StoneIsland/platforms/ios/www/js/lib/nav/IntroView.js
index 87e68959..2d8dca43 100644
--- a/StoneIsland/platforms/ios/www/js/lib/nav/IntroView.js
+++ b/StoneIsland/platforms/ios/www/js/lib/nav/IntroView.js
@@ -34,6 +34,7 @@ var IntroView = View.extend({
else {
heading = e.alpha || 0
}
+ heading = - heading
this.compass.style[transformProp] = "translateZ(0) translateX(-50%) translateY(-50%) rotate(" + heading + "deg)"
},
diff --git a/StoneIsland/platforms/ios/www/js/lib/products/CollectionView.js b/StoneIsland/platforms/ios/www/js/lib/products/CollectionView.js
index 8ea03bd4..e35b789d 100644
--- a/StoneIsland/platforms/ios/www/js/lib/products/CollectionView.js
+++ b/StoneIsland/platforms/ios/www/js/lib/products/CollectionView.js
@@ -36,7 +36,7 @@ var CollectionView = ScrollableView.extend({
this.fetch()
},
- ok: function(){
+ save: function(){
this.filterView.filter()
},
diff --git a/StoneIsland/platforms/ios/www/js/lib/products/ProductView.js b/StoneIsland/platforms/ios/www/js/lib/products/ProductView.js
index c99ff0ab..e151c208 100644
--- a/StoneIsland/platforms/ios/www/js/lib/products/ProductView.js
+++ b/StoneIsland/platforms/ios/www/js/lib/products/ProductView.js
@@ -34,6 +34,7 @@ var ProductView = ScrollableView.extend({
size: null,
color: null,
code: null,
+ is_onesize: false,
sizes: null,
colors: null,
@@ -105,6 +106,8 @@ var ProductView = ScrollableView.extend({
var sizes = this.find_sizes_for_color(default_color_id)
var size = sizes[0]
var size_label = this.sizes[size].label
+
+ this.is_onesize = !! this.sizes[1]
// console.log(color, color_label, size, size_label)
@@ -158,7 +161,7 @@ var ProductView = ScrollableView.extend({
colors[ color['ColorId'] ] = {
id: color['Code10'],
code: color['Code10'],
- label: color['ColorDescription'],
+ label: color['ColorDescription'].toUpperCase(),
sizes: {},
}
})
@@ -167,7 +170,7 @@ var ProductView = ScrollableView.extend({
size_lookup[ label ] = size['SizeId']
sizes[ size['SizeId'] ] = {
id: label,
- label: label,
+ label: label.toUpperCase(),
colors: {},
}
})
@@ -182,6 +185,7 @@ var ProductView = ScrollableView.extend({
},
select_size: function(){
+ if (this.is_onesize) { return this.select_color() }
if (this.item['Sizes'].length == 0) { return }
var sizes = Object.keys(this.sizes).map(function(key){
return this.sizes[key]
@@ -205,27 +209,14 @@ var ProductView = ScrollableView.extend({
// ADD TO CART
save: function(){
- auth.deferred_product = { Size: this.size, Code10: this.code }
- if ( ! auth.logged_in() ) {
- app.router.go("account/login")
- app.last_view = app.cart
- }
- else if ( ! auth.has_cart() ) {
- auth.create_cart(function(){
- auth.add_deferred_product_to_cart(function(){
- app.router.go("cart")
- })
- })
- }
- else {
- auth.add_deferred_product_to_cart(function(){
- app.router.go("cart")
- })
- }
+ this.add_to_cart({ route: false })
},
-
// BUY NOW
cancel: function(){
+ this.add_to_cart({ route: true })
+ },
+
+ add_to_cart: function(opt){
auth.deferred_product = { Size: this.size, Code10: this.code }
if ( ! auth.logged_in() ) {
app.router.go("account/login")
@@ -240,7 +231,9 @@ var ProductView = ScrollableView.extend({
}
else {
auth.add_deferred_product_to_cart(function(){
- app.router.go("cart")
+ if (opt.route) {
+ app.router.go("cart")
+ }
})
}
},
@@ -262,6 +255,7 @@ var SIZE_LOOKUP = {
"XL": "X-LARGE",
"XXL": "XX-LARGE",
"3XL": "3X-LARGE",
+ "OneSize": "ONESIZE",
}
var SIZE_ORDER = "XS S M L XL XXL 3XL".split(" ")
diff --git a/StoneIsland/platforms/ios/www/js/vendor/view/router.js b/StoneIsland/platforms/ios/www/js/lib/view/Router.js
index a8ec331f..a8ec331f 100644
--- a/StoneIsland/platforms/ios/www/js/vendor/view/router.js
+++ b/StoneIsland/platforms/ios/www/js/lib/view/Router.js
diff --git a/StoneIsland/platforms/ios/www/js/vendor/view/scrollable.js b/StoneIsland/platforms/ios/www/js/lib/view/Scrollable.js
index 7cd96f89..7cd96f89 100644
--- a/StoneIsland/platforms/ios/www/js/vendor/view/scrollable.js
+++ b/StoneIsland/platforms/ios/www/js/lib/view/Scrollable.js
diff --git a/StoneIsland/platforms/ios/www/js/vendor/view/serializable.js b/StoneIsland/platforms/ios/www/js/lib/view/Serializable.js
index e9459229..b1e095d3 100644
--- a/StoneIsland/platforms/ios/www/js/vendor/view/serializable.js
+++ b/StoneIsland/platforms/ios/www/js/lib/view/Serializable.js
@@ -3,13 +3,17 @@ var SerializableView = View.extend({
events: {
"change select": "update_select",
"focus input": "focus_input",
+ "submit form": "save",
},
preload: function(data){
if (! data && sdk.env == "production") { return }
data = data || this.test_data
if (! data) { return }
+ this.load_data(data)
+ },
+ load_data: function(data){
Object.keys(data).forEach(function(key){
var value = data[key]
var $el = this.$("[name=" + key + "]")
@@ -55,22 +59,21 @@ var SerializableView = View.extend({
update_select: function(e){
var $target = $(e.currentTarget), value = $target.val()
- var label = $($("select")[0]).find("option").filter(function(){ return this.value === value }).html()
-
+ var label = $target.find("option").filter(function(){ return this.value === value }).html()
$target.parent().addClass("picked")
$target.parent().find("span").html(label)
},
- validate: function(errors){
- var data = this.serialize()
- var errors = []
- var presence_msgs = this.validate_presence
+ validate: function(data, errors){
+ var data = data || this.serialize()
+ var errors = errors || []
+ var presence_msgs = this.validate_presence || {}
Object.keys(presence_msgs).forEach(function(k){
if (! data[k]) errors.push( [ k, presence_msgs[k] ] )
})
this.validate_fields && this.validate_fields(data, errors)
- this.cc && this.cc.validate(errors)
- this.address && this.address.validate(errors)
+ this.cc && this.cc.validate(data, errors)
+ this.address && this.address.validate(data, errors)
return { errors: errors, data: data }
},
@@ -89,6 +92,10 @@ var SerializableView = View.extend({
this.$msg.removeClass('alert-notice')
this.$msg.html("")
},
+
+ finalize: function(data){
+ return data
+ },
save: function(e){
e && e.preventDefault()
@@ -102,9 +109,17 @@ var SerializableView = View.extend({
this.hide_errors()
}
+ var finalized_data = this.finalize(valid.data)
+ this.submit( finalized_data )
+ },
+
+ submit: function(data){
+ if (! data) {
+ return
+ }
app.curtain.show("loading")
this.action({
- data: valid.data,
+ data: data,
success: function(data){
app.curtain.hide("loading")
this.success(data)
diff --git a/StoneIsland/platforms/ios/www/js/vendor/view/view.js b/StoneIsland/platforms/ios/www/js/lib/view/View.js
index 41638ab7..41638ab7 100644
--- a/StoneIsland/platforms/ios/www/js/vendor/view/view.js
+++ b/StoneIsland/platforms/ios/www/js/lib/view/View.js
diff --git a/StoneIsland/platforms/ios/www/js/sdk/_sdk.js b/StoneIsland/platforms/ios/www/js/sdk/_sdk.js
index 27773310..b7880e50 100644
--- a/StoneIsland/platforms/ios/www/js/sdk/_sdk.js
+++ b/StoneIsland/platforms/ios/www/js/sdk/_sdk.js
@@ -13,7 +13,7 @@ var sdk = (function(){
break
default:
case 'development':
- endpoint = "http://api.yoox.biz/"
+ endpoint = "/"
break
case 'production':
endpoint = "https://secure.api.yoox.biz/"
diff --git a/StoneIsland/platforms/ios/www/js/sdk/address.js b/StoneIsland/platforms/ios/www/js/sdk/address.js
index f4e36376..4fb12ad0 100644
--- a/StoneIsland/platforms/ios/www/js/sdk/address.js
+++ b/StoneIsland/platforms/ios/www/js/sdk/address.js
@@ -1,6 +1,23 @@
sdk.address = (function(){
var address = {}
+ address.list = function(opt){
+ return $.ajax({
+ method: "GET",
+ url: sdk.path("Account.API/1.5", "users/" + auth.user_id + "/addressBook.json"),
+ headers: {
+ "x-yoox-appname": auth.appname,
+ "x-yoox-account-token": auth.access_token,
+ },
+ data: opt.data,
+ success: function(data){
+ // console.log(data)
+ opt.success(data)
+ },
+ error: opt.error,
+ })
+ }
+
address.add = function(opt){
return $.ajax({
method: "POST",
@@ -18,15 +35,15 @@ sdk.address = (function(){
})
}
- address.list = function(opt){
+ address.update = function(opt){
return $.ajax({
- method: "GET",
- url: sdk.path("Account.API/1.5", "users/" + auth.user_id + "/addressBook.json"),
+ method: "PUT",
+ url: sdk.path("Account.API/1.5", "users/" + auth.user_id + "/addressBook/item.json"),
headers: {
"x-yoox-appname": auth.appname,
"x-yoox-account-token": auth.access_token,
},
- data: opt.data,
+ data: JSON.stringify( opt.data ),
success: function(data){
// console.log(data)
opt.success(data)
@@ -34,7 +51,24 @@ sdk.address = (function(){
error: opt.error,
})
}
-
+
+ address.destroy = function(opt){
+ return $.ajax({
+ method: "DELETE",
+ url: sdk.path("Account.API/1.5", "users/" + auth.user_id + "/" + opt.id + "/addressBook.json"),
+ headers: {
+ "x-yoox-appname": auth.appname,
+ "x-yoox-account-token": auth.access_token,
+ },
+ data: JSON.stringify( opt.data ),
+ success: function(data){
+ // console.log(data)
+ opt.success(data)
+ },
+ error: opt.error,
+ })
+ }
+
return address
})() \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/www/js/sdk/auth.js b/StoneIsland/platforms/ios/www/js/sdk/auth.js
index 8a72dd46..87ce60ea 100644
--- a/StoneIsland/platforms/ios/www/js/sdk/auth.js
+++ b/StoneIsland/platforms/ios/www/js/sdk/auth.js
@@ -95,15 +95,20 @@ var auth = sdk.auth = (function(){
auth.add_deferred_product_to_cart = function(cb){
// auth.deferred_product
if (! auth.deferred_product) {
+ console.log("VV NO DEF PROD")
cb && cb()
return
}
sdk.cart.add_item({
data: auth.deferred_product,
success: function(){
- console.log("ADDED")
+ console.log("ADDED ITEM")
cb && cb()
- }
+ },
+ error: function(data){
+ console.log("ERROR ADDING ITEM", data)
+ cb && cb()
+ },
})
auth.deferred_product = null
app.header.increment_cart_count()
@@ -112,13 +117,12 @@ var auth = sdk.auth = (function(){
auth.log_out = function(){
auth.clear_user()
auth.clear_cart()
- auth.view_logged_out()
}
auth.logged_in = function(){
- return (auth.user_id !== -1) && (auth.user_id !== "undefined")
+ return (auth.user_id && auth.user_id !== -1 && auth.user_id !== "undefined")
}
auth.has_cart = function(){
- return (sdk.cart.id !== -1) && (sdk.cart.id !== "undefined")
+ return (sdk.cart.id && sdk.cart.id !== -1 && sdk.cart.id !== "undefined")
}
return auth
diff --git a/StoneIsland/platforms/ios/www/js/sdk/cart.js b/StoneIsland/platforms/ios/www/js/sdk/cart.js
index bbd03299..a5e85089 100644
--- a/StoneIsland/platforms/ios/www/js/sdk/cart.js
+++ b/StoneIsland/platforms/ios/www/js/sdk/cart.js
@@ -105,7 +105,6 @@ sdk.cart = (function(){
})
}
- // NOTE: data might be wrapped in a Receiver object
cart.set_shipping_address = function(opt){
return $.ajax({
method: "PUT",
@@ -163,6 +162,17 @@ sdk.cart = (function(){
// NB: if "verification number" is 1, use CVV/CID/CVC security code
// if "verification number" is 2, use "Issue Number"
cart.use_stored_credit_card = function(opt){
+ var data = {
+ "Guid": opt.data.guid,
+ "UserId": auth.user_id,
+ "AccessToken": auth.access_token,
+ }
+ if (opt.data.cvv) {
+ data["Cvv"] = opt.data.cvv
+ }
+ if (opt.data.issue) {
+ data["Issue"] = opt.data.issue
+ }
return $.ajax({
method: "PUT",
url: sdk.path("Cart.API/1.6", "carts/" + cart.id + "/userCreditCard.json"),
@@ -170,13 +180,7 @@ sdk.cart = (function(){
"x-yoox-appname": auth.appname,
"x-yoox-cart-token": cart.token,
},
- data: JSON.stringify({ // NB may be wrapped in UserCreditCard object
- "Guid": opt.guid,
- "UserId": auth.user_id,
- "AccessToken": auth.access_token,
- "Cvv": opt.cvv,
- "Issue": opt.issue,
- }),
+ data: JSON.stringify(data),
success: function(data){
// console.log(data)
opt.success(data)
@@ -184,17 +188,17 @@ sdk.cart = (function(){
error: opt.error,
})
}
-
- cart.finalize = function(opt){
+
+ cart.secure_finalize = function(opt){
return $.ajax({
- method: "PUT",
+ method: "POST",
url: sdk.path("Cart.API/1.6", "carts/" + cart.id + "/secureFinalizer.json"),
headers: {
"x-yoox-appname": auth.appname,
"x-yoox-cart-token": cart.token,
"x-yoox-device": auth.device,
},
- data: JSON.stringify( opt.data ),
+ data: JSON.stringify( opt.data || {} ),
success: function(data){
console.log(data)
// order number is:
@@ -204,5 +208,25 @@ sdk.cart = (function(){
error: opt.error,
})
}
+
+ cart.finalize = function(opt){
+ return $.ajax({
+ method: "POST",
+ url: sdk.path("Cart.API/1.6", "carts/" + cart.id + "/finalizer.json"),
+ headers: {
+ "x-yoox-appname": auth.appname,
+ "x-yoox-cart-token": cart.token,
+ },
+ data: JSON.stringify( opt.data || {} ),
+ success: function(data){
+ console.log(data)
+ // order number is:
+ // "Info": "2905Y07FA13020"
+ opt.success(data)
+ },
+ error: opt.error,
+ })
+ }
+
return cart
})() \ No newline at end of file
diff --git a/StoneIsland/platforms/ios/www/js/sdk/payment.js b/StoneIsland/platforms/ios/www/js/sdk/payment.js
index d0951017..283fee92 100644
--- a/StoneIsland/platforms/ios/www/js/sdk/payment.js
+++ b/StoneIsland/platforms/ios/www/js/sdk/payment.js
@@ -18,8 +18,6 @@ sdk.payment = (function(){
})
}
- // LISTING A CREDIT CARD ONCE A CARD HAS BEEN ADDED PRODUCES ERROR
-
payment.list_credit_cards = function(opt){
return $.ajax({
method: "GET",
@@ -30,8 +28,6 @@ sdk.payment = (function(){
},
data: opt.data,
success: function(data){
- console.log("listing credit cards")
- console.log(data)
opt.success(data)
},
error: opt.error,
diff --git a/StoneIsland/platforms/ios/www/js/sdk/shipping.js b/StoneIsland/platforms/ios/www/js/sdk/shipping.js
index a4615531..28a0db76 100644
--- a/StoneIsland/platforms/ios/www/js/sdk/shipping.js
+++ b/StoneIsland/platforms/ios/www/js/sdk/shipping.js
@@ -70,12 +70,9 @@ sdk.shipping = (function() {
"x-yoox-appname": auth.appname,
"x-yoox-cart-token": sdk.cart.token,
},
- // temporarily commented out
- /*
data: JSON.stringify({
"Id": opt.id,
}),
- */
success: function(data){
//console.log(data)
opt.success(data)
diff --git a/StoneIsland/platforms/ios/www/js/vendor/jquery.creditCardValidator.js b/StoneIsland/platforms/ios/www/js/vendor/jquery.creditCardValidator.js
new file mode 100644
index 00000000..56ce1bf6
--- /dev/null
+++ b/StoneIsland/platforms/ios/www/js/vendor/jquery.creditCardValidator.js
@@ -0,0 +1,208 @@
+// Generated by CoffeeScript 1.8.0
+
+/*
+jQuery Credit Card Validator 1.0
+
+Copyright 2012-2015 Pawel Decowski
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+ */
+
+(function() {
+ var $,
+ __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
+
+ $ = jQuery;
+
+ $.fn.validateCreditCard = function(callback, options) {
+ var bind, card, card_type, card_types, get_card_type, is_valid_length, is_valid_luhn, normalize, validate, validate_number, _i, _len, _ref;
+ card_types = [
+ {
+ name: 'amex',
+ pattern: /^3[47]/,
+ valid_length: [15]
+ }, {
+ name: 'diners_club_carte_blanche',
+ pattern: /^30[0-5]/,
+ valid_length: [14]
+ }, {
+ name: 'diners_club_international',
+ pattern: /^36/,
+ valid_length: [14]
+ }, {
+ name: 'jcb',
+ pattern: /^35(2[89]|[3-8][0-9])/,
+ valid_length: [16]
+ }, {
+ name: 'laser',
+ pattern: /^(6304|670[69]|6771)/,
+ valid_length: [16, 17, 18, 19]
+ }, {
+ name: 'visa_electron',
+ pattern: /^(4026|417500|4508|4844|491(3|7))/,
+ valid_length: [16]
+ }, {
+ name: 'visa',
+ pattern: /^4/,
+ valid_length: [16]
+ }, {
+ name: 'mastercard',
+ pattern: /^5[1-5]/,
+ valid_length: [16]
+ }, {
+ name: 'maestro',
+ pattern: /^(5018|5020|5038|6304|6759|676[1-3])/,
+ valid_length: [12, 13, 14, 15, 16, 17, 18, 19]
+ }, {
+ name: 'discover',
+ pattern: /^(6011|622(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[0-1][0-9]|92[0-5]|64[4-9])|65)/,
+ valid_length: [16]
+ }
+ ];
+ bind = false;
+ if (callback) {
+ if (typeof callback === 'object') {
+ options = callback;
+ bind = false;
+ callback = null;
+ } else if (typeof callback === 'function') {
+ bind = true;
+ }
+ }
+ if (options == null) {
+ options = {};
+ }
+ if (options.accept == null) {
+ options.accept = (function() {
+ var _i, _len, _results;
+ _results = [];
+ for (_i = 0, _len = card_types.length; _i < _len; _i++) {
+ card = card_types[_i];
+ _results.push(card.name);
+ }
+ return _results;
+ })();
+ }
+ _ref = options.accept;
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ card_type = _ref[_i];
+ if (__indexOf.call((function() {
+ var _j, _len1, _results;
+ _results = [];
+ for (_j = 0, _len1 = card_types.length; _j < _len1; _j++) {
+ card = card_types[_j];
+ _results.push(card.name);
+ }
+ return _results;
+ })(), card_type) < 0) {
+ throw "Credit card type '" + card_type + "' is not supported";
+ }
+ }
+ get_card_type = function(number) {
+ var _j, _len1, _ref1;
+ _ref1 = (function() {
+ var _k, _len1, _ref1, _results;
+ _results = [];
+ for (_k = 0, _len1 = card_types.length; _k < _len1; _k++) {
+ card = card_types[_k];
+ if (_ref1 = card.name, __indexOf.call(options.accept, _ref1) >= 0) {
+ _results.push(card);
+ }
+ }
+ return _results;
+ })();
+ for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
+ card_type = _ref1[_j];
+ if (number.match(card_type.pattern)) {
+ return card_type;
+ }
+ }
+ return null;
+ };
+ is_valid_luhn = function(number) {
+ var digit, n, sum, _j, _len1, _ref1;
+ sum = 0;
+ _ref1 = number.split('').reverse();
+ for (n = _j = 0, _len1 = _ref1.length; _j < _len1; n = ++_j) {
+ digit = _ref1[n];
+ digit = +digit;
+ if (n % 2) {
+ digit *= 2;
+ if (digit < 10) {
+ sum += digit;
+ } else {
+ sum += digit - 9;
+ }
+ } else {
+ sum += digit;
+ }
+ }
+ return sum % 10 === 0;
+ };
+ is_valid_length = function(number, card_type) {
+ var _ref1;
+ return _ref1 = number.length, __indexOf.call(card_type.valid_length, _ref1) >= 0;
+ };
+ validate_number = (function(_this) {
+ return function(number) {
+ var length_valid, luhn_valid;
+ card_type = get_card_type(number);
+ luhn_valid = false;
+ length_valid = false;
+ if (card_type != null) {
+ luhn_valid = is_valid_luhn(number);
+ length_valid = is_valid_length(number, card_type);
+ }
+ return {
+ card_type: card_type,
+ valid: luhn_valid && length_valid,
+ luhn_valid: luhn_valid,
+ length_valid: length_valid
+ };
+ };
+ })(this);
+ validate = (function(_this) {
+ return function() {
+ var number;
+ number = normalize($(_this).val());
+ return validate_number(number);
+ };
+ })(this);
+ normalize = function(number) {
+ return (number || "").replace(/[ -]/g, '');
+ };
+ if (!bind) {
+ return validate();
+ }
+ this.on('input.jccv', (function(_this) {
+ return function() {
+ $(_this).off('keyup.jccv');
+ return callback.call(_this, validate());
+ };
+ })(this));
+ this.on('keyup.jccv', (function(_this) {
+ return function() {
+ return callback.call(_this, validate());
+ };
+ })(this));
+ callback.call(this, validate());
+ return this;
+ };
+
+}).call(this);
diff --git a/StoneIsland/www/css/cart.css b/StoneIsland/www/css/cart.css
index aaeefd88..ad844701 100644
--- a/StoneIsland/www/css/cart.css
+++ b/StoneIsland/www/css/cart.css
@@ -85,6 +85,10 @@ border-right: 1px solid #bbb
top:16px;
}
+#cart h3 {
+ padding-left: 5px;
+}
+
.cart_item_row {
display:table;
position:relative;
@@ -250,4 +254,4 @@ color:#000;
#cart_shipping h3 {
margin-left:5px;
-} \ No newline at end of file
+}
diff --git a/StoneIsland/www/css/products.css b/StoneIsland/www/css/products.css
index 147e043f..c712eb22 100644
--- a/StoneIsland/www/css/products.css
+++ b/StoneIsland/www/css/products.css
@@ -12,6 +12,9 @@
width: 49vw;
height: 63vw;
}
+#collection.gray {
+ background: rgba(245,245,245,1.0);
+}
.product #product { display: block }
#product {
@@ -33,6 +36,9 @@
width: 100vw;
height: 52vh;
}
+.gallery.gray {
+ background: rgba(245,245,245,1.0);
+}
.gallery .item {
width: 100vw;
diff --git a/StoneIsland/www/index.html b/StoneIsland/www/index.html
index 557acaca..740f7db1 100644
--- a/StoneIsland/www/index.html
+++ b/StoneIsland/www/index.html
@@ -342,14 +342,6 @@
<input type="email" name="ConfirmEmail" placeholder="CONFIRM EMAIL ADDRESS" required>
<input type="date" name="BirthDay" placeholder="BIRTHDAY (MM/DD/YYYY)" required>
- <div class="select-wrapper">
- <span>GENDER</span>
- <select name="Gender">
- <option value="NONE">Gender</option>
- <option value="U">Male</option>
- <option value="D">Female</option>
- </select>
- </div>
<h2>PASSWORD</h2>
<input type="password" name="Password" placeholder="PASSWORD (7 CHARACTERS OR MORE)" required>
<input type="password" name="Password2" placeholder="CONFIRM PASSWORD" required>
@@ -403,15 +395,6 @@
<input type="email" name="Email" placeholder="EMAIL ADDRESS" required>
<input type="date" name="BirthDay" placeholder="BIRTHDAY (MM/DD/YYYY)" required>
- <div class="select-wrapper">
- <span>GENDER</span>
- <select name="Gender">
- <option value="NONE">Gender</option>
- <option value="U">Male</option>
- <option value="D">Female</option>
- </select>
- </div>
-
<h2>CHANGE PASSWORD</h2>
<input type="password" name="CurrentPassword" placeholder="CURRENT PASSWORD" required>
<input type="password" name="NewPassword" placeholder="NEW PASSWORD (7 CHARACTERS OR MORE)" required>
@@ -700,27 +683,33 @@
</label>
</div>
</div>
+
+ <div class="billing_address_rapper">
- <div class="address_dropdown dropdown-wrapper">
- <div class="dropdown-title add_edit">add / edit</div>
- <div class="dropdown select_address">
- BILLING ADDRESS
+ <div class="address_dropdown dropdown-wrapper">
+ <div class="dropdown-title add_edit">add / edit</div>
+ <div class="dropdown select_address">
+ BILLING ADDRESS
+ </div>
</div>
- </div>
- <div class="address_list checkbox-container">
- <script type="text/html" class="address_template">
- <div class="checkbox-row">
- <div class="checkbox-toggle">
- <input id="address-checkbox-{{id}}" type="radio" name="AddressId" value="{{id}}" {{checked}}>
- <label for="address-checkbox-{{id}}"></label>
+ <div class="address_list checkbox-container">
+ <script type="text/html" class="address_template">
+ <div class="checkbox-row">
+ <div class="checkbox-toggle">
+ <input id="address-checkbox-{{id}}" type="radio" name="AddressId" value="{{id}}" {{checked}}>
+ <label for="address-checkbox-{{id}}"></label>
+ </div>
+ <label class="checkbox-caption" for="address-checkbox-{{id}}">
+ {{name}}<br>
+ {{address}}<br>
+ {{city}}, {{state}} {{zip}}
+ </label>
</div>
- <label class="checkbox-caption" for="address-checkbox-{{id}}">
- {{name}}<br>
- {{address}}<br>
- {{city}}, {{state}} {{zip}}
- </label>
- </div>
- </script>
+ </script>
+ </div>
+
+ <div class="address"></div>
+
</div>
<div class="cc_dropdown dropdown-wrapper">
@@ -744,9 +733,13 @@
</div>
</script>
</div>
-
+
<div class="cc"></div>
- <div class="address"></div>
+
+ <div class="cc_confirm">
+ <h3>PLEASE ENTER YOUR SECURITY CODE TO CONFIRM</h3>
+ <input type="number" name="Cvv" placeholder="SECURITY CODE" required>
+ </div>
</div>
<div class="container-fill">
@@ -966,6 +959,7 @@
-->
</div>
</div>
+ <input type="text" name="Phone" placeholder="PHONE NUMBER">
<!--
<div class="checkbox-container save_as_default">
<div class="checkbox-row">
diff --git a/StoneIsland/www/js/index.js b/StoneIsland/www/js/index.js
index 1426cd5a..546bd637 100644
--- a/StoneIsland/www/js/index.js
+++ b/StoneIsland/www/js/index.js
@@ -5,7 +5,7 @@ var app = (function(){
app.bind()
app.build()
- sdk.init({ env: "development" })
+ sdk.init({ env: "test" })
app.iscroll_options = {
mouseWheel: true,
diff --git a/StoneIsland/www/js/lib/account/AccountView.js b/StoneIsland/www/js/lib/account/AccountView.js
index 116d5ba1..1c5c9f16 100644
--- a/StoneIsland/www/js/lib/account/AccountView.js
+++ b/StoneIsland/www/js/lib/account/AccountView.js
@@ -66,7 +66,7 @@ var AccountView = View.extend({
},
populateCreditCards: function(data, cb){
- console.log(data)
+ console.log("populate ccs:", data.CreditCards)
this.ccs = data.CreditCards
this.ccLookup = {}
if (! data.CreditCards || ! data.CreditCards.length) {
diff --git a/StoneIsland/www/js/lib/account/ProfileView.js b/StoneIsland/www/js/lib/account/ProfileView.js
index 999e8d65..da25fefc 100644
--- a/StoneIsland/www/js/lib/account/ProfileView.js
+++ b/StoneIsland/www/js/lib/account/ProfileView.js
@@ -5,6 +5,8 @@ var ProfileView = FormView.extend({
events: {
},
+ action: sdk.account.update,
+
initialize: function(){
this.$form = this.$("form")
this.$msg = this.$(".msg")
@@ -30,7 +32,7 @@ var ProfileView = FormView.extend({
if (! data.CurrentPassword && (data.NewPassword || data.Email !== auth.user.Email)) { errors.push([ "CurrentPassword", "Please enter your current password." ]) }
if (data.CurrentPassword && ! data.NewPassword) { errors.push([ "NewPassword", "Please enter your new password." ]) }
if (data.NewPassword && data.NewPassword.length < 7) { errors.push([ "CurrentPassword", "New password must be 7 characters or more." ]) }
- if (data.Gender === "NONE") { errors.push([ "Gender", "Please supply your gender." ]) }
+ // if (data.Gender === "NONE") { errors.push([ "Gender", "Please supply your gender." ]) }
},
finalize: function(data){
@@ -50,7 +52,8 @@ var ProfileView = FormView.extend({
})
}
- var submissible_data = _.pick(data, "Name Surname BirthDay Gender YooxLetter".split(" "))
+ var submissible_data = _.pick(data, "Name Surname BirthDay YooxLetter".split(" "))
+ submissible_data.Gender = "U"
// submissible_data.idUser = auth.user_id
// submissible_data.AccessToken = auth.access_token
// submissible_data.Premium = "false"
diff --git a/StoneIsland/www/js/lib/auth/SignupView.js b/StoneIsland/www/js/lib/auth/SignupView.js
index 7e6fc04d..22b310de 100644
--- a/StoneIsland/www/js/lib/auth/SignupView.js
+++ b/StoneIsland/www/js/lib/auth/SignupView.js
@@ -57,7 +57,7 @@ var SignupView = FormView.extend({
if (data.Password !== data.Password2) { errors.push([ "Password2", "Passwords don't match." ]) }
if (! data.Email.match("@")) { errors.push([ "Email", "Email address is not valid." ]) }
if (data.Email.toLowerCase() !== data.ConfirmEmail.toLowerCase()) { errors.push([ "ConfirmEmail", "Email addresses don't match." ]) }
- if (data.Gender === "NONE") { errors.push([ "Gender", "Please supply your gender." ]) }
+ // if (data.Gender === "NONE") { errors.push([ "Gender", "Please supply your gender." ]) }
if (data.DataProfiling !== "true") { errors.push([ "DataProfiling", "You must consent to use this service." ]) }
if (data.DataProfiling2 !== "true") { errors.push([ "DataProfiling2", "You must consent to use this service." ]) }
if (! data.YooxLetter) { data.YooxLetter = false }
@@ -67,6 +67,7 @@ var SignupView = FormView.extend({
delete data.DataProfiling2
delete data.ConfirmEmail
+ data.Gender = "U"
data.BirthDay += "T00:00:00Z"
this.last_data = data
diff --git a/StoneIsland/www/js/lib/blogs/BlogView.js b/StoneIsland/www/js/lib/blogs/BlogView.js
index 19666f8b..3cfab914 100644
--- a/StoneIsland/www/js/lib/blogs/BlogView.js
+++ b/StoneIsland/www/js/lib/blogs/BlogView.js
@@ -42,6 +42,16 @@ var BlogView = View.extend({
if (data.store[0].StoreIsOpen !== "true") {
app.closed.storeIsClosed = true
}
+ var fits_large = (data.store[0].FitsLarge === "true")
+
+ app.product.$fit.toggle( fits_large )
+ app.product.$sizing.toggle( fits_large )
+
+ if (data.store[0].BackgroundIsGray === "true") {
+ app.collection.$el.addClass("gray")
+ app.product.gallery.$el.addClass("gray")
+ }
+
},
}) \ No newline at end of file
diff --git a/StoneIsland/www/js/lib/cart/CartPayment.js b/StoneIsland/www/js/lib/cart/CartPayment.js
index 62dfe32d..fec5e1d1 100644
--- a/StoneIsland/www/js/lib/cart/CartPayment.js
+++ b/StoneIsland/www/js/lib/cart/CartPayment.js
@@ -11,7 +11,7 @@ var CartPayment = FormView.extend({
cc_list_mode: false,
events: {
- "change [name=same_as_shipping]": "toggle_shipping",
+ "change [name=SameAsShipping]": "toggle_shipping",
"click .address_dropdown": "toggle_address",
"click .cc_dropdown": "toggle_cc",
},
@@ -20,10 +20,14 @@ var CartPayment = FormView.extend({
this.parent = opt.parent
this.$form = this.$("form")
this.$msg = this.$(".msg")
+ this.$same_as_shipping = this.$("[name=SameAsShipping]")
+ this.$billing_address_rapper = this.$(".billing_address_rapper")
this.$address_list = this.$(".address_list")
this.$address_form = this.$(".address")
+ this.$address_dropdown = this.$(".address_dropdown")
this.$cc_list = this.$(".cc_list")
this.$cc_form = this.$(".cc")
+ this.$cc_dropdown = this.$(".cc_dropdown")
this.address = new AddressView ({ parent: this, checkPhone: false })
this.cc = new CreditCardView ({ parent: this })
@@ -32,13 +36,6 @@ var CartPayment = FormView.extend({
this.cc.disabled = true
},
- // sdk.cart.set_credit_card
- // sdk.payment.list_credit_cards
- // sdk.payment.add_credit_card
- // sdk.payment.delete_credit_card
- // sdk.payment.get_payment_types
- // sdk.cart.use_stored_credit_card
-
show: function(){
document.body.className = "cart"
app.cart.el.className = "payment"
@@ -48,11 +45,20 @@ var CartPayment = FormView.extend({
this.populate()
this.deferScrollToTop()
},
+
+ toggle_shipping: function(){
+ setTimeout(function(){
+ var state = this.$same_as_shipping.prop("checked")
+ this.$billing_address_rapper.toggle( ! state )
+ }.bind(this))
+ },
toggle_address: function(state){
if (! app.account.ccs.length) {
state = false
}
+ // this.$address_dropdown.toggle( !! app.account.ccs.length )
+
this.address_list_mode = typeof state == "boolean" ? state : ! this.list_mode
this.address.disabled = this.address_list_mode
this.$address_form.toggle(! this.address_list_mode)
@@ -63,6 +69,8 @@ var CartPayment = FormView.extend({
if (! app.account.ccs.length) {
state = false
}
+ // this.$cc_dropdown.toggle( !! app.account.ccs.length )
+
this.cc_list_mode = typeof state == "boolean" ? state : ! this.cc_list_mode
this.cc.disabled = this.cc_list_mode
this.$cc_form.toggle(! this.cc_list_mode)
@@ -70,6 +78,12 @@ var CartPayment = FormView.extend({
},
populate: function(){
+ this.$(".save_as_default").show()
+ this.$address_list.empty()
+ this.$cc_list.empty()
+ this.toggle_address( !! app.account.ccs.length )
+ this.toggle_cc( !! app.account.ccs.length )
+
app.account.ccs.forEach(function(cc){
console.log(cc)
@@ -91,6 +105,40 @@ var CartPayment = FormView.extend({
this.$cc_list.append(cc_t)
})
},
+
+ finalize: function(data){
+ var shipping_info = {}, address_data, address_id, cc_info = {}, cc_data, cc_id
+ var shipping_type = $("[name=ShippingType]").filter(function(){ return $(this).prop("checked") }).val()
+
+ if (this.list_mode) {
+ address_id = $("[name=AddressId]").filter(function(){ return $(this).prop("checked") }).val()
+ address_data = app.account.addressLookup[ address_id ]
+ }
+ else {
+ address_data = data
+ }
+ if (this.cc_list_mode) {
+ cc_id = $("[name=CCId]").filter(function(){ return $(this).prop("checked") }).val()
+ cc_data = app.account.ccLookup[ cc_id ]
+ }
+ else {
+ cc_data = data
+ }
+
+ shipping_info.Name = address_data.Name
+ shipping_info.Surname = address_data.Surname
+ shipping_info.Email = auth.user.Email
+ shipping_info.Phone = address_data.Phone
+ shipping_info.Mobile = address_data.Phone
+ shipping_info.StreetWithNumber = address_data.Address
+ shipping_info.PostalCode = address_data.ZipCode
+ shipping_info.City = address_data.City
+ shipping_info.Province = address_data.Province
+ shipping_info.Region = address_data.Province
+ shipping_info.CountryCode = "US"
+
+ return shipping_info
+ },
success: function(){
app.router.go('cart/confirm')
diff --git a/StoneIsland/www/js/lib/cart/CartShipping.js b/StoneIsland/www/js/lib/cart/CartShipping.js
index e52eec4c..1a9653e1 100644
--- a/StoneIsland/www/js/lib/cart/CartShipping.js
+++ b/StoneIsland/www/js/lib/cart/CartShipping.js
@@ -58,7 +58,7 @@ var CartShipping = FormView.extend({
state = false
}
this.list_mode = typeof state == "boolean" ? state : ! this.list_mode
- this.$dropdown_wrapper.toggle( ! app.account.addresses.length )
+ this.$dropdown_wrapper.toggle( !! app.account.addresses.length )
this.address.disabled = this.list_mode
this.$address_form.toggle(! this.list_mode)
this.$address_list.toggle(this.list_mode)
@@ -93,16 +93,17 @@ var CartShipping = FormView.extend({
shipping_info.Name = address_data.Name
shipping_info.Surname = address_data.Surname
- shipping_info.Email = address_data.Name
+ shipping_info.Email = auth.user.Email
shipping_info.Phone = address_data.Phone
shipping_info.Mobile = address_data.Phone
shipping_info.StreetWithNumber = address_data.Address
shipping_info.PostalCode = address_data.ZipCode
shipping_info.City = address_data.City
+ shipping_info.Province = address_data.Province
shipping_info.Region = address_data.Province
shipping_info.CountryCode = "US"
- return address_data
+ return shipping_info
},
success: function(){
diff --git a/StoneIsland/www/js/lib/cart/CartSummary.js b/StoneIsland/www/js/lib/cart/CartSummary.js
index 7872d32c..9a24afa5 100644
--- a/StoneIsland/www/js/lib/cart/CartSummary.js
+++ b/StoneIsland/www/js/lib/cart/CartSummary.js
@@ -158,6 +158,8 @@ var CartSummary = ScrollableView.extend({
var $el = $( e.currentTarget ).closest(".cart_item_row")
var data = $el.data()
+ console.log(this.data.Cart)
+
this.data.Cart.Totals.TotalWithoutPromotions -= data.price
this.data.Cart.Totals.TotalToPay -= data.price
this.data.Cart.Items = this.data.Cart.Items.filter(function(item){
@@ -173,13 +175,14 @@ var CartSummary = ScrollableView.extend({
this.empty()
}
+ app.curtain.show("loading")
sdk.cart.delete_item({
data: {
Code10: data.code,
Size: data.size,
},
success: function(){
- console.log("damn")
+ app.curtain.hide("loading")
},
})
},
diff --git a/StoneIsland/www/js/lib/nav/IntroView.js b/StoneIsland/www/js/lib/nav/IntroView.js
index 87e68959..2d8dca43 100644
--- a/StoneIsland/www/js/lib/nav/IntroView.js
+++ b/StoneIsland/www/js/lib/nav/IntroView.js
@@ -34,6 +34,7 @@ var IntroView = View.extend({
else {
heading = e.alpha || 0
}
+ heading = - heading
this.compass.style[transformProp] = "translateZ(0) translateX(-50%) translateY(-50%) rotate(" + heading + "deg)"
},
diff --git a/StoneIsland/www/js/lib/products/CollectionView.js b/StoneIsland/www/js/lib/products/CollectionView.js
index 8ea03bd4..e35b789d 100644
--- a/StoneIsland/www/js/lib/products/CollectionView.js
+++ b/StoneIsland/www/js/lib/products/CollectionView.js
@@ -36,7 +36,7 @@ var CollectionView = ScrollableView.extend({
this.fetch()
},
- ok: function(){
+ save: function(){
this.filterView.filter()
},
diff --git a/StoneIsland/www/js/lib/products/ProductView.js b/StoneIsland/www/js/lib/products/ProductView.js
index e151c208..eacfe989 100644
--- a/StoneIsland/www/js/lib/products/ProductView.js
+++ b/StoneIsland/www/js/lib/products/ProductView.js
@@ -4,6 +4,7 @@ var ProductView = ScrollableView.extend({
el: "#product",
events: {
+ "click .fit": "scroll_to_bottom",
"click .size": "select_size",
"click .color": "select_color",
"click .share": "share",
@@ -20,6 +21,8 @@ var ProductView = ScrollableView.extend({
this.$size = this.$(".size")
this.$color = this.$(".color")
this.$body = this.$(".body")
+ this.$fit = this.$(".fit")
+ this.$sizing = this.$(".sizing")
},
show: function(){
@@ -242,6 +245,9 @@ var ProductView = ScrollableView.extend({
app.router.go('store')
},
+ scroll_to_bottom: function(){
+ },
+
share: function(){
},
diff --git a/StoneIsland/www/js/sdk/cart.js b/StoneIsland/www/js/sdk/cart.js
index bbd03299..3ff2e1d2 100644
--- a/StoneIsland/www/js/sdk/cart.js
+++ b/StoneIsland/www/js/sdk/cart.js
@@ -105,7 +105,6 @@ sdk.cart = (function(){
})
}
- // NOTE: data might be wrapped in a Receiver object
cart.set_shipping_address = function(opt){
return $.ajax({
method: "PUT",
@@ -141,6 +140,22 @@ sdk.cart = (function(){
})
}
+ cart.get_card_types = function(opt){
+ return $.ajax({
+ method: "GET",
+ url: sdk.path("Cart.API/1.6", "cardTypes.json"),
+ headers: {
+ "x-yoox-appname": auth.appname,
+ "x-yoox-cart-token": cart.token,
+ },
+ data: "",
+ success: function(data){
+ opt.success(data)
+ },
+ error: opt.error,
+ })
+ }
+
// use with full CC data if not storing it in wallet
cart.set_credit_card = function(opt){
return $.ajax({
@@ -163,6 +178,17 @@ sdk.cart = (function(){
// NB: if "verification number" is 1, use CVV/CID/CVC security code
// if "verification number" is 2, use "Issue Number"
cart.use_stored_credit_card = function(opt){
+ var data = {
+ "Guid": opt.data.guid,
+ "UserId": auth.user_id,
+ "AccessToken": auth.access_token,
+ }
+ if (opt.data.cvv) {
+ data["Cvv"] = opt.data.cvv
+ }
+ if (opt.data.issue) {
+ data["Issue"] = opt.data.issue
+ }
return $.ajax({
method: "PUT",
url: sdk.path("Cart.API/1.6", "carts/" + cart.id + "/userCreditCard.json"),
@@ -170,13 +196,7 @@ sdk.cart = (function(){
"x-yoox-appname": auth.appname,
"x-yoox-cart-token": cart.token,
},
- data: JSON.stringify({ // NB may be wrapped in UserCreditCard object
- "Guid": opt.guid,
- "UserId": auth.user_id,
- "AccessToken": auth.access_token,
- "Cvv": opt.cvv,
- "Issue": opt.issue,
- }),
+ data: JSON.stringify(data),
success: function(data){
// console.log(data)
opt.success(data)
@@ -184,17 +204,17 @@ sdk.cart = (function(){
error: opt.error,
})
}
-
- cart.finalize = function(opt){
+
+ cart.secure_finalize = function(opt){
return $.ajax({
- method: "PUT",
+ method: "POST",
url: sdk.path("Cart.API/1.6", "carts/" + cart.id + "/secureFinalizer.json"),
headers: {
"x-yoox-appname": auth.appname,
"x-yoox-cart-token": cart.token,
"x-yoox-device": auth.device,
},
- data: JSON.stringify( opt.data ),
+ data: JSON.stringify( opt.data || {} ),
success: function(data){
console.log(data)
// order number is:
@@ -204,5 +224,25 @@ sdk.cart = (function(){
error: opt.error,
})
}
+
+ cart.finalize = function(opt){
+ return $.ajax({
+ method: "POST",
+ url: sdk.path("Cart.API/1.6", "carts/" + cart.id + "/finalizer.json"),
+ headers: {
+ "x-yoox-appname": auth.appname,
+ "x-yoox-cart-token": cart.token,
+ },
+ data: JSON.stringify( opt.data || {} ),
+ success: function(data){
+ console.log(data)
+ // order number is:
+ // "Info": "2905Y07FA13020"
+ opt.success(data)
+ },
+ error: opt.error,
+ })
+ }
+
return cart
})() \ No newline at end of file
diff --git a/StoneIsland/www/js/sdk/payment.js b/StoneIsland/www/js/sdk/payment.js
index dcf7d7d4..283fee92 100644
--- a/StoneIsland/www/js/sdk/payment.js
+++ b/StoneIsland/www/js/sdk/payment.js
@@ -18,8 +18,6 @@ sdk.payment = (function(){
})
}
- // LISTING A CREDIT CARD ONCE A CARD HAS BEEN ADDED PRODUCES ERROR
-
payment.list_credit_cards = function(opt){
return $.ajax({
method: "GET",
diff --git a/test/test/03-address.js b/test/test/03-address.js
index 728d1831..26a7124d 100644
--- a/test/test/03-address.js
+++ b/test/test/03-address.js
@@ -73,6 +73,7 @@ describe('address', function(){
})
})
+/*
describe('#update()', function(){
it('updates addresses', function(done){
var a = addresses[0]
@@ -86,12 +87,16 @@ describe('address', function(){
})
})
})
+*/
describe('#destroy()', function(){
it('destroys addresses', function(done){
+ console.log("DESTROY >>", addresses[0].Id)
promise(sdk.address.destroy, { id: addresses[0].Id }).then(function(data){
assert(data.Header.StatusCode == 200)
done()
+ }).error(function(data){
+ console.log(data.responseText)
})
})
})
diff --git a/test/test/04-cart.js b/test/test/04-cart.js
index f608ffb5..4d302891 100644
--- a/test/test/04-cart.js
+++ b/test/test/04-cart.js
@@ -283,33 +283,34 @@ describe('payment', function(){
})
})
})
- describe('#list_credit_cards()', function(){
+ describe('#list_credit_cards()', function(){
// send nothing
it('list credit cards', function(done){
promise(sdk.payment.list_credit_cards, { data: {} }).then(function(data){
- assert(data.Header.StatusCode == 200)
+ assert(data.Header.StatusCode == 200)
done()
})
})
})
- // TODO: list the credit cards on file first
describe('#use_stored_credit_card()', function(){
- /*
- it('use stored credit card', function(done){
+
+ it('uses stored credit card', function(done){
var card_on_file = {
- "Guid": opt.guid,
- "UserId": auth.user_id,
- "AccessToken": auth.access_token,
- "Cvv": opt.cvv,
- "Issue": opt.issue,
+ "guid": last_guid,
+ "cvv": 123,
+ // "issue": 4248,
}
+ console.log("LAST GUID >>", last_guid)
promise(sdk.cart.use_stored_credit_card, { data: card_on_file }).then(function(data){
assert(data.Header.StatusCode == 200)
done()
+ }).error(function(data){
+ console.log("use_stored_credit_card failed")
+ console.log(data.responseText)
})
})
- */
+
})
})
@@ -317,5 +318,14 @@ describe('payment', function(){
describe('checkout', function(){
describe('#finalize()', function(){
+ it('fails to finalize a cart with test data', function(done){
+ promise(sdk.cart.finalize, { ReturnUrl: "stoneisland.com", Token: sdk.auth.access_token }).then(function(data){
+ console.log("SUCCESS", data)
+ done()
+ }).error(function(data){
+ console.log("FAILURE", data)
+ done()
+ })
+ })
})
})
diff --git a/test/test/05-cart-flows.js b/test/test/05-cart-flows.js
index 96ccfaf5..40230b9b 100644
--- a/test/test/05-cart-flows.js
+++ b/test/test/05-cart-flows.js
@@ -29,7 +29,7 @@ describe('cart_flows', function(){
promise(sdk.cart.get_status, {}).then(function(data){
assert(data.Header.StatusCode == 200)
assert(data.Cart.Items.length == 1)
- console.log(JSON.stringify(data, null, 2))
+ // console.log(JSON.stringify(data, null, 2))
done()
})
})