From c6fa2d5f07da89d987ce1c57f636cd34457b2d11 Mon Sep 17 00:00:00 2001 From: Jules Laplace Date: Tue, 12 Jul 2022 16:37:52 +0200 Subject: add DestroyAccountView --- StoneIsland/www/js/index.js | 1 + StoneIsland/www/js/lib/_router.js | 211 +++--- .../www/js/lib/account/DestroyAccountView.js | 27 + StoneIsland/www/js/lib/cart/CartSummary.js | 393 ++++++----- StoneIsland/www/js/lib/cart/CartView.js | 100 +-- StoneIsland/www/js/lib/nav/CurtainView.js | 48 +- StoneIsland/www/js/lib/nav/NavView.js | 6 +- StoneIsland/www/js/lib/products/ProductView.js | 782 +++++++++++---------- StoneIsland/www/js/sdk/auth.js | 237 ++++--- 9 files changed, 957 insertions(+), 848 deletions(-) create mode 100644 StoneIsland/www/js/lib/account/DestroyAccountView.js (limited to 'StoneIsland/www/js') diff --git a/StoneIsland/www/js/index.js b/StoneIsland/www/js/index.js index b61e545d..1ebc20ba 100755 --- a/StoneIsland/www/js/index.js +++ b/StoneIsland/www/js/index.js @@ -49,6 +49,7 @@ var app = (function(){ app.shipping = new ShippingView () app.settings = new SettingsView () app.orders = new OrdersView () + app.destroy_account = new DestroyAccountView () app.terms = new PageView ({ page: "terms" }) app.privacy = new PageView ({ page: "privacy" }) diff --git a/StoneIsland/www/js/lib/_router.js b/StoneIsland/www/js/lib/_router.js index 7d487689..20e54257 100755 --- a/StoneIsland/www/js/lib/_router.js +++ b/StoneIsland/www/js/lib/_router.js @@ -1,110 +1,108 @@ var SiteRouter = Router.extend({ + el: "body", + routeByHash: true, - el: 'body', - routeByHash: true, - - routes: { - '/': 'intro', - '/intro': 'intro', - '/hub': 'hub', - '/story': 'story', - '/archive': 'archive', - - '/store': 'collection', - '/store/closed': 'closed', - '/store/:code': 'product', - - '/account/login': 'login', - '/account/logout': 'logout', - '/account/signup': 'signup', - '/account/profile': 'profile', - '/account/payment': 'payment', - '/account/shipping': 'shipping', - '/account/orders': 'orders', - '/account/settings': 'settings', - - '/page/terms': 'terms', - '/page/account_terms': 'account_terms', - '/page/privacy': 'privacy', - '/page/returns': 'returns', - '/page/care': 'care', - - '/search': 'search', - - '/cart': 'cart.summary', - '/cart/summary': 'cart.summary', - '/cart/payment': 'cart.payment', - '/cart/shipping': 'cart.shipping', - '/cart/confirm': 'cart.confirm', - '/cart/thanks': 'cart.thanks', - '/cart/error': 'cart.error', - }, + routes: { + "/": "intro", + "/intro": "intro", + "/hub": "hub", + "/story": "story", + "/archive": "archive", + + "/store": "collection", + "/store/closed": "closed", + "/store/:code": "product", + + "/account/login": "login", + "/account/logout": "logout", + "/account/signup": "signup", + "/account/profile": "profile", + "/account/payment": "payment", + "/account/shipping": "shipping", + "/account/orders": "orders", + "/account/settings": "settings", + "/account/destroy_account": "destroy_account", + + "/page/terms": "terms", + "/page/account_terms": "account_terms", + "/page/privacy": "privacy", + "/page/returns": "returns", + "/page/care": "care", + + "/search": "search", + + "/cart": "cart.summary", + "/cart/summary": "cart.summary", + "/cart/payment": "cart.payment", + "/cart/shipping": "cart.shipping", + "/cart/confirm": "cart.confirm", + "/cart/thanks": "cart.thanks", + "/cart/error": "cart.error", + }, terms_routes: [ - 'terms', - 'account_terms', - 'privacy', - 'returns', - 'care', - 'logout', + "terms", + "account_terms", + "privacy", + "returns", + "care", + "logout", ], - initialize: function(){ - var fn + initialize: function () { + var fn; for (var route in this.routes) { - fn = this.routes[route] - if (! this[fn]) { - this[fn] = this.default_view(fn) + fn = this.routes[route]; + if (!this[fn]) { + this[fn] = this.default_view(fn); } } - }, - + }, + initial_route: null, - launch: function(){ - console.log("LAUNCH!") - if (this.initial_route) { - this.parseRoute( this.initial_route ) - } - else { - this.route() - } - this.initial_route = null - - app.finished_launching() - }, - - go: function(url){ + launch: function () { + console.log("LAUNCH!"); + if (this.initial_route) { + this.parseRoute(this.initial_route); + } else { + this.route(); + } + this.initial_route = null; + + app.finished_launching(); + }, + + go: function (url) { if (app.view && app.view.hide) { - app.view.hide() + app.view.hide(); } - window.location.href = "#/" + url - this.parseRoute(url) + window.location.href = "#/" + url; + this.parseRoute(url); }, - - default_view: function(name){ - var fn = function(){ - console.log(name) - var n = [name] + + default_view: function (name) { + var fn = function () { + console.log(name); + var n = [name]; if (app.view != app.login && app.view != app.signin) { - app.last_view = app.view + app.last_view = app.view; } if (app.view && app.view.hide) { - app.view.hide() + app.view.hide(); } if (name.match(/\./)) { - n = name.split(".") - console.log(name, n) - app.view = app[n[0]][n[1]] - } - else { - app.view = app[name] + n = name.split("."); + console.log(name, n); + app.view = app[n[0]][n[1]]; + } else { + app.view = app[name]; } // window.FirebasePlugin && window.FirebasePlugin.setScreenName(name) - analytics.sendPageView(name) - console.log("view >>", app.view) - app.header.set_back( !! app.view.back ) - app.view.show() + analytics.sendPageView(name); + console.log("view >>", app.view); + app.header.set_back(!!app.view.back); + app.view.show(); // var isTermsRoute = this.terms_routes.indexOf(name) !== -1 // var isCartRoute = n[0] === 'cart' @@ -113,28 +111,29 @@ var SiteRouter = Router.extend({ // return // } - var isNotTermsRoute = this.terms_routes.indexOf(name) === -1 - var isCartRoute = n[0] === 'cart' - var userMightActuallyViewCart = isCartRoute && auth.logged_in() - var demandingConsent = app.demand_consent && isNotTermsRoute - if ((userMightActuallyViewCart || demandingConsent) && app.account.consent.check()) { - console.log('showed consent modal') - return + var isNotTermsRoute = this.terms_routes.indexOf(name) === -1; + var isCartRoute = n[0] === "cart"; + var userMightActuallyViewCart = isCartRoute && auth.logged_in(); + var demandingConsent = app.demand_consent && isNotTermsRoute; + if ( + (userMightActuallyViewCart || demandingConsent) && + app.account.consent.check() + ) { + // console.log('showed consent modal') + return; } - }.bind(this) - return fn + }.bind(this); + return fn; }, - product: function(code){ + product: function (code) { if (app.view && app.view.hide) { - app.view.hide() + app.view.hide(); } - analytics.sendPageView('store/' + code) - app.view = app.product - app.header.set_back( true ) - app.product.load(code) - app.product.show() - }, - -}) - + analytics.sendPageView("store/" + code); + app.view = app.product; + app.header.set_back(true); + app.product.load(code); + app.product.show(); + }, +}); diff --git a/StoneIsland/www/js/lib/account/DestroyAccountView.js b/StoneIsland/www/js/lib/account/DestroyAccountView.js new file mode 100644 index 00000000..4c92e453 --- /dev/null +++ b/StoneIsland/www/js/lib/account/DestroyAccountView.js @@ -0,0 +1,27 @@ +var DestroyAccountView = View.extend({ + + el: "#destroy_account_view", + + events: { + "click .go_destroy_account": "go_destroy", + }, + + initialize: function(){ + }, + + show: function(){ + document.body.className = "destroy_account_view" + app.footer.hide() + }, + + hide: function(){ + }, + + go_destroy: function(e){ + e.preventDefault() + e.stopPropagation() + app.router.go("account/logout") + window.open("https://www.stoneisland.com/us/customercare/contact-us", '_system') + }, + +}) diff --git a/StoneIsland/www/js/lib/cart/CartSummary.js b/StoneIsland/www/js/lib/cart/CartSummary.js index 8ae11c0d..2e572730 100755 --- a/StoneIsland/www/js/lib/cart/CartSummary.js +++ b/StoneIsland/www/js/lib/cart/CartSummary.js @@ -1,218 +1,241 @@ var CartSummary = ScrollableView.extend({ - el: "#cart_summary", - + template: $("#cart_summary .template").html(), - + events: { "click .remove": "remove_item", }, - + data: null, - - initialize: function(opt){ - this.parent = opt.parent - this.$loader = this.$(".loader") - this.$cart_body = this.$(".cart_body") - this.$cart_empty = this.$(".cart_empty") - this.scroller = ScrollFactory('#cart_summary', app.iscroll_options) - - this.$rows = this.$(".rows") - this.$subtotal = this.$(".subtotal") - this.$shipping = this.$(".shipping") - this.$tax = this.$(".tax") - this.$total = this.$(".total") + + initialize: function (opt) { + this.parent = opt.parent; + this.$loader = this.$(".loader"); + this.$cart_body = this.$(".cart_body"); + this.$cart_empty = this.$(".cart_empty"); + this.scroller = ScrollFactory("#cart_summary", app.iscroll_options); + + this.$rows = this.$(".rows"); + this.$subtotal = this.$(".subtotal"); + this.$shipping = this.$(".shipping"); + this.$tax = this.$(".tax"); + this.$total = this.$(".total"); }, - - show: function(){ - document.body.className = "cart" - app.cart.el.className = "summary" - window.location.hash = "#/cart/summary" - app.view = this - app.footer.hide() + + show: function () { + document.body.className = "cart"; + app.cart.el.className = "summary"; + window.location.hash = "#/cart/summary"; + app.view = this; + app.footer.hide(); + console.log("cart show"); if (auth.has_cart()) { - this.load() - } - else { - this.empty() + this.load(); + } else { + this.empty(); } }, - - load: function(){ - this.el.className = "loading" - app.footer.show("SHIPPING >") - app.curtain.show("loading") + + load: function () { + this.el.className = "loading"; + app.footer.show("SHIPPING >"); + app.curtain.show("loading"); + console.log("load cart"); + setTimeout(function () { + app.curtain.show("loading"); + }); sdk.cart.get_status({ success: this.populate.bind(this), error: this.empty.bind(this), - }) + }); }, - - populate: function(data){ - this.data = data - - console.log("CART", data) - - if (! data.Cart.Items || data.Cart.Items.length == 0) { - return this.empty() + + populate: function (data) { + this.data = data; + + console.log("CART", data); + + if (!data.Cart.Items || data.Cart.Items.length == 0) { + return this.empty(); } - this.parent.$steps.show() - this.updateCounts() - - this.$rows.empty() - - data.Cart.Items.forEach(function(item){ - var code_ten = item['Code10'] - var code = code_ten.substr(0, 8) - var size_id = item['Size'] - - var $el = $("
").addClass("cart_item_row") - $el.html("") - $el.data({ - code: code_ten, - size: size_id, - }) - this.$rows.append($el) - app.product.find(code, function(data, details){ - // console.log(data, details) - var descriptions = app.product.get_descriptions( details ) - // console.log(descriptions) - - var name_partz = descriptions['ModelNames'].split(' ') - var num = name_partz.shift() - var title = name_partz.join(' ') - var type = title_case( descriptions['MicroCategory'] ) - - var color_name, size_name - // console.log(code) - details.Item.ModelColors.some(function(color){ - if (color['Code10'] == code_ten) { - color_name = color['ColorDescription'] - // console.log(color) - return true - } - return false - }) - details.Item.ModelSizes.some(function(size){ - if (size['SizeId'] == size_id) { - // console.log(size) - size_name = size['Default']['Text'] - size_name = SIZE_LOOKUP[ size_name ] || size_name - if (! size_name && ! size['Default']['Labeled']) { - size_name = size['Default']['Text'] + " " + size['Default']['ClassFamily'] - } - - return true - } - return false - }) - - var t = this.template - .replace(/{{image}}/, sdk.image(item['Code10'], '11_f')) - .replace(/{{sku}}/g, num) - .replace(/{{code8}}/g, data['Code8']) - .replace(/{{title}}/g, title) - .replace(/{{cleantitle}}/g, num + ' ' + stonewash(title) + ' ' + descriptions['MicroCategory']) - .replace(/{{type}}/, type) - .replace(/{{size}}/g, size_name) - .replace(/{{color}}/g, color_name) - .replace(/{{quantity}}/g, 1) - .replace(/{{price}}/, as_cash(details.Item.Price.DiscountedPrice)) - $el.html(t) - this.refreshScroller() - }.bind(this)) - }.bind(this)) - + this.parent.$steps.show(); + this.updateCounts(); + + this.$rows.empty(); + + data.Cart.Items.forEach( + function (item) { + var code_ten = item["Code10"]; + var code = code_ten.substr(0, 8); + var size_id = item["Size"]; + + var $el = $("
").addClass("cart_item_row"); + $el.html(""); + $el.data({ + code: code_ten, + size: size_id, + }); + this.$rows.append($el); + app.product.find( + code, + function (data, details) { + console.log(data, details); + var descriptions = app.product.get_descriptions(details); + // console.log(descriptions) + + var name_partz = (descriptions["ModelNames"] || "").split(" "); + var num = name_partz.shift(); + var title = name_partz.join(" "); + var type = title_case(descriptions["MicroCategory"]); + + var color_name, size_name; + // console.log(code) + details.Item.ModelColors.some(function (color) { + if (color["Code10"] == code_ten) { + color_name = color["ColorDescription"]; + // console.log(color) + return true; + } + return false; + }); + details.Item.ModelSizes.some(function (size) { + if (size["SizeId"] == size_id) { + // console.log(size) + size_name = size["Default"]["Text"]; + size_name = SIZE_LOOKUP[size_name] || size_name; + if (!size_name && !size["Default"]["Labeled"]) { + size_name = + size["Default"]["Text"] + + " " + + size["Default"]["ClassFamily"]; + } + + return true; + } + return false; + }); + + var t = this.template + .replace(/{{image}}/, sdk.image(item["Code10"], "11_f")) + .replace(/{{sku}}/g, num) + .replace(/{{code8}}/g, data["Code8"]) + .replace(/{{title}}/g, title) + .replace( + /{{cleantitle}}/g, + num + + " " + + stonewash(title) + + " " + + (descriptions["MicroCategory"] || "") + ) + .replace(/{{type}}/, type) + .replace(/{{size}}/g, size_name) + .replace(/{{color}}/g, color_name) + .replace(/{{quantity}}/g, 1) + .replace( + /{{price}}/, + as_cash(details.Item.Price.DiscountedPrice) + ); + $el.html(t); + this.refreshScroller(); + }.bind(this) + ); + }.bind(this) + ); + if (data.Cart.Receiver && data.Cart.Receiver.City) { - app.cart.shipping.load_form( data ) + app.cart.shipping.load_form(data); } - - this.updateTotals() - this.$cart_empty.hide() - this.el.className = "full" - this.refreshScroller() - app.curtain.hide("loading") + this.updateTotals(); + + this.$cart_empty.hide(); + this.el.className = "full"; + this.refreshScroller(); + app.curtain.hide("loading"); }, - - updateCounts: function(){ - app.header.set_cart_count( this.data.Cart.Items.length ) - this.parent.setHeaderCount( this.data.Cart.Items.length ) + + updateCounts: function () { + 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 - var tax = this.data.Cart.Totals.TotalSalesTax - var total = this.data.Cart.Totals.TotalToPay - - this.$subtotal.html( as_cash(subtotal) ) - this.$shipping.html( as_cash(shipping_cost) ) - this.$tax.html( as_cash(tax) ) - this.$total.html( as_cash(total) ) - this.$(".subtotal_row").attr('aria-label', "Subtotal " + as_cash(subtotal)) - this.$(".total_row").attr('aria-label', "Total " + as_cash(total)) + + updateTotals: function () { + var subtotal = this.data.Cart.Totals.TotalWithoutPromotions; + var shipping_cost = this.data.Cart.DeliveryMethod.Selected.Amount.Total; + var tax = this.data.Cart.Totals.TotalSalesTax; + var total = this.data.Cart.Totals.TotalToPay; + + this.$subtotal.html(as_cash(subtotal)); + this.$shipping.html(as_cash(shipping_cost)); + this.$tax.html(as_cash(tax)); + this.$total.html(as_cash(total)); + this.$(".subtotal_row").attr("aria-label", "Subtotal " + as_cash(subtotal)); + this.$(".total_row").attr("aria-label", "Total " + as_cash(total)); }, - - 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" - this.parent.$steps.hide() - this.$cart_empty.show() - app.curtain.hide("loading") + + empty: function () { + console.log("cart empty"); + app.footer.hide(); + app.header.set_cart_count(0); + this.parent.setHeaderCount(0); + this.parent.$itemcount.html("0 ITEMS"); + this.el.className = "empty"; + this.parent.$steps.hide(); + this.$cart_empty.show(); + app.curtain.hide("loading"); }, - save: function(){ - app.router.go('cart/shipping') + save: function () { + app.router.go("cart/shipping"); }, - - cancel: function(){ - app.router.go('intro') + + cancel: function () { + app.router.go("intro"); }, - - remove_item: function(e){ - var $el = $( e.currentTarget ).closest(".cart_item_row") - var data = $el.data() - - console.log("REMOVE FROM CART") - console.log(data.size + " " + data.code) - - 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) - }) - - this.updateTotals() - this.updateCounts() - $el.remove() - this.refreshScroller() - - if (this.data.Cart.Items.length == 0) { - this.empty() - } - - app.curtain.show("loading") - console.log("loading") + + remove_item: function (e) { + var $el = $(e.currentTarget).closest(".cart_item_row"); + var data = $el.data(); + + console.log("REMOVE FROM CART"); + console.log(data.size + " " + data.code); + + 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) + // }) + + // this.updateTotals() + // this.updateCounts() + // $el.remove() + // this.refreshScroller() + + // if (this.data.Cart.Items.length == 0) { + // this.empty() + // } + + app.curtain.show("loading"); + console.log("loading"); sdk.cart.delete_item({ data: { Code10: data.code, Size: data.size, }, - success: function(){ - console.log("success") - app.curtain.hide("loading") - }, - error: function(){ - app.curtain.hide("loading") - }, - }) + success: function () { + console.log("success"); + // app.curtain.hide("loading") + this.load(); + }.bind(this), + error: function () { + // app.curtain.hide("loading") + this.load(); + }.bind(this), + }); }, - -}) \ No newline at end of file +}); diff --git a/StoneIsland/www/js/lib/cart/CartView.js b/StoneIsland/www/js/lib/cart/CartView.js index 6ed8238f..e1ee355d 100755 --- a/StoneIsland/www/js/lib/cart/CartView.js +++ b/StoneIsland/www/js/lib/cart/CartView.js @@ -1,72 +1,72 @@ var CartView = View.extend({ - el: "#cart", - + events: { "click .summary_step": "show_summary", "click .shipping_step": "show_shipping", "click .payment_step": "show_payment", }, - - initialize: function(){ - this.summary = new CartSummary ({ parent: this }) - this.payment = new CartPayment ({ parent: this }) - this.shipping = new CartShipping ({ parent: this }) - this.confirm = new CartConfirm ({ parent: this }) - this.thanks = new CartThanks ({ parent: this }) - this.error = new CartError ({ parent: this }) - - this.$steps = this.$(".steps") - this.$full_msg = this.$(".full_msg") - this.$empty_msg = this.$(".empty_msg") - this.$itemcount = this.$(".itemcount") + + initialize: function () { + this.summary = new CartSummary({ parent: this }); + this.payment = new CartPayment({ parent: this }); + this.shipping = new CartShipping({ parent: this }); + this.confirm = new CartConfirm({ parent: this }); + this.thanks = new CartThanks({ parent: this }); + this.error = new CartError({ parent: this }); + + this.$steps = this.$(".steps"); + this.$full_msg = this.$(".full_msg"); + this.$empty_msg = this.$(".empty_msg"); + this.$itemcount = this.$(".itemcount"); }, - - load: function(){ + + load: function () { + app.curtain.show("loading"); sdk.cart.get_status({ - success: function(data){ - this.summary.data = data - this.summary.updateCounts() + success: function (data) { + this.summary.data = data; + this.summary.updateCounts(); + app.curtain.hide("loading"); }.bind(this), - error: function(data){ - console.log(data) - auth.clear_cart() + error: function (data) { + console.log(data); + auth.clear_cart(); + app.curtain.hide("loading"); }, - }) + }); }, - show: function(){ - if (! navigator.onLine) { - app.closed.showElement() - app.closed.setMessage("PLEASE GO ONLINE TO
VIEW YOUR CART.", "") - return + show: function () { + if (!navigator.onLine) { + app.closed.showElement(); + app.closed.setMessage("PLEASE GO ONLINE TO
VIEW YOUR CART.", ""); + return; } - document.body.className = "cart" - this.show_summary() + document.body.className = "cart"; + this.show_summary(); }, - - show_summary: function(){ - this.summary.show() + + show_summary: function () { + this.summary.show(); }, - - show_shipping: function(){ - this.shipping.show() + + show_shipping: function () { + this.shipping.show(); }, - - show_payment: function(){ - this.payment.show() + + show_payment: function () { + this.payment.show(); }, - setHeaderCount: function(n){ + 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() + 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/www/js/lib/nav/CurtainView.js b/StoneIsland/www/js/lib/nav/CurtainView.js index d444fd60..ccef9479 100755 --- a/StoneIsland/www/js/lib/nav/CurtainView.js +++ b/StoneIsland/www/js/lib/nav/CurtainView.js @@ -1,39 +1,41 @@ var CurtainView = View.extend({ - el: "#curtain", - + events: { - "click": "click", - }, - - initialize: function(){ + click: "click", }, - + + initialize: function () {}, + klass: null, - show: function(klass){ - this.$el.addClass("visible") + show: function (klass) { + console.log("show curtain"); + this.$el.addClass("visible"); if (klass) { - this.klass = klass - this.$el.addClass(klass) + this.klass = klass; + this.$el.addClass(klass); } }, - - hide: function(k){ - this.$el.removeClass("visible") + + hide: function (k) { + console.log("hide curtain"); + this.$el.removeClass("visible"); if (this.klass) { - setTimeout( function(){ - this.$el.removeClass(this.klass) - }.bind(this), 200 ) + setTimeout( + function () { + this.$el.removeClass(this.klass); + }.bind(this), + 200 + ); } }, - - click: function(){ + + click: function () { if (document.body.classList.contains("nav")) { - app.nav.hide() + app.nav.hide(); } if (app.selector.visible) { - app.selector.hide() + app.selector.hide(); } }, - -}) \ No newline at end of file +}); diff --git a/StoneIsland/www/js/lib/nav/NavView.js b/StoneIsland/www/js/lib/nav/NavView.js index bd068ce0..6cdd0553 100755 --- a/StoneIsland/www/js/lib/nav/NavView.js +++ b/StoneIsland/www/js/lib/nav/NavView.js @@ -27,6 +27,7 @@ var NavView = View.extend({ "click .orders": "orders", "click .return_link_us": "return_link_us", "click .return_link_ca": "return_link_ca", + "click .destroy_account": "destroy_account", "click .faq_back": "back", "click .privacy": "privacy", @@ -134,7 +135,10 @@ var NavView = View.extend({ return_link_ca: function(){ window.open("https://www.stoneisland.com/ca/ProductExchange/SearchOrder/Index?utm_source=AppMobile&utm_medium=referral&utm_campaign=ReturnForm", '_system') }, - + destroy_account: function(){ + this.hide() + app.router.go("account/destroy_account") + }, faq: function(){ this.el.className = "faq" diff --git a/StoneIsland/www/js/lib/products/ProductView.js b/StoneIsland/www/js/lib/products/ProductView.js index d467fbdd..a6c97e6b 100755 --- a/StoneIsland/www/js/lib/products/ProductView.js +++ b/StoneIsland/www/js/lib/products/ProductView.js @@ -1,7 +1,6 @@ var ProductView = ScrollableView.extend({ - el: "#product", - + events: { "click .fit": "scroll_to_bottom", "click .notAvailableInCanada": "scroll_to_bottom", @@ -14,54 +13,61 @@ var ProductView = ScrollableView.extend({ "click .gallery-left": "gallery_left", "click .gallery-right": "gallery_right", }, - - initialize: function(){ - this.gallery = new GalleryView () - this.scroller = ScrollFactory('#product', app.iscroll_options) - - this.$productHeader = this.$(".product-header") - this.$title = this.$(".title") - this.$type = this.$(".type") - this.$price = this.$(".price") - this.$size = this.$(".size") - this.$sizeSelect = this.$(".size select") - this.$sizeLabel = this.$(".size .label") - this.$color = this.$(".color") - this.$colorSelect = this.$(".color select") - this.$colorLabel = this.$(".color .label") - this.$share = this.$(".share") - this.$body = this.$(".body") - this.$fit = this.$(".fit") - this.$fitHeader = this.$('.fitHeader') - this.$notAvailableInCanada = this.$(".notAvailableInCanada") - this.$extraMessage = this.$(".extraMessage") - this.$sizing = this.$(".sizing") - this.$style = this.$(".style") + + initialize: function () { + this.gallery = new GalleryView(); + this.scroller = ScrollFactory("#product", app.iscroll_options); + + this.$productHeader = this.$(".product-header"); + this.$title = this.$(".title"); + this.$type = this.$(".type"); + this.$price = this.$(".price"); + this.$size = this.$(".size"); + this.$sizeSelect = this.$(".size select"); + this.$sizeLabel = this.$(".size .label"); + this.$color = this.$(".color"); + this.$colorSelect = this.$(".color select"); + this.$colorLabel = this.$(".color .label"); + this.$share = this.$(".share"); + this.$body = this.$(".body"); + this.$fit = this.$(".fit"); + this.$fitHeader = this.$(".fitHeader"); + this.$notAvailableInCanada = this.$(".notAvailableInCanada"); + this.$extraMessage = this.$(".extraMessage"); + this.$sizing = this.$(".sizing"); + this.$style = this.$(".style"); }, - show: function(){ - this.showFooter() - document.body.className = "product" + show: function () { + this.showFooter(); + document.body.className = "product"; }, - - hide: function(){ - app.footer.hide() + + hide: function () { + app.footer.hide(); }, - - showFooter: function(){ - if (this.sold_out) { - console.log("FOOTER: SOLD OUT") - app.footer.show("SOLD OUT") - } - else if (this.isNotAvailable) { - console.log("FOOTER: NOT AVAILABLE") - app.footer.show("NOT AVAILABLE") - } - else { - app.footer.show("ADD TO CART", "BUY NOW") + + showFooter: function () { + var descriptions = this.details ? this.get_descriptions(this.details) : {}; + if ( + (this.sold_out || this.isNotAvailable) && + descriptions["Limited_Edition"] + ) { + // this.$extraMessage.html(stripHTML( descriptions['Limited_Edition'] )) + // this.$extraMessage.show() + console.log("FOOTER: LIMITED EDITION"); + app.footer.show(stripHTML(descriptions["Limited_Edition"])); + } else if (this.sold_out) { + console.log("FOOTER: SOLD OUT"); + app.footer.show("SOLD OUT"); + } else if (this.isNotAvailable) { + console.log("FOOTER: NOT AVAILABLE"); + app.footer.show("NOT AVAILABLE"); + } else { + app.footer.show("ADD TO CART", "BUY NOW"); } }, - + item: null, details: null, size: null, @@ -72,445 +78,489 @@ var ProductView = ScrollableView.extend({ sizes: null, colors: null, - + cache: {}, - - gallery_left: function(){ - app.product.gallery.previous() + + gallery_left: function () { + app.product.gallery.previous(); }, - gallery_right: function(){ - app.product.gallery.next() + gallery_right: function () { + app.product.gallery.next(); }, - - find: function(code, cb){ - data = app.collection.items[code] || {} + + find: function (code, cb) { + data = app.collection.items[code] || {}; if (code in this.cache) { - return cb(data, this.cache[code]) + return cb(data, this.cache[code]); } sdk.product.item({ code: code, - success: function(details){ - this.cache[code] = details - cb(data, details) - }.bind(this) - }) + success: function (details) { + this.cache[code] = details; + cb(data, details); + }.bind(this), + }); }, - load: function(code, data){ - this.gallery.reset() - this.show() + load: function (code, data) { + this.gallery.reset(); + this.show(); if (app.view && app.view.hide) { - app.view.hide() + app.view.hide(); } - app.view = this - app.header.set_back(true) - - if (! app.collection.loaded) { - this.el.className = "loading" - app.collection.afterFetchCallback = this.load.bind(this, code, data) - app.collection.fetch() - return - } - else { - app.collection.afterFetchCallback = null + app.view = this; + app.header.set_back(true); + + if (!app.collection.loaded) { + this.el.className = "loading"; + app.collection.afterFetchCallback = this.load.bind(this, code, data); + app.collection.fetch(); + return; + } else { + app.collection.afterFetchCallback = null; } - window.location.href = "#/store/" + code - + window.location.href = "#/store/" + code; + if (data) { - app.collection.items[code] = data + app.collection.items[code] = data; } - - this.el.className = "loading" - this.find(code, this.populate.bind(this)) + + this.el.className = "loading"; + this.find(code, this.populate.bind(this)); }, - populate: function(data, details){ - this.el.className = "" + populate: function (data, details) { + this.el.className = ""; - console.log(data, details) + console.log(data, details); - var descriptions = this.get_descriptions(details) + var descriptions = this.get_descriptions(details["Item"]); - var title = data['ModelNames'] || "" - var type = title_case( data['MicroCategory'] ) - var price = "$" + data['DiscountedPrice'] + ".00" - var details_description = descriptions['Details'] || "" - var editorial = descriptions['EditorialDescription'] || "" - var body = details_description + " " + editorial + var title = data["ModelNames"] || ""; + var type = title_case(data["MicroCategory"]); + var price = "$" + data["DiscountedPrice"] + ".00"; + var details_description = descriptions["Details"] || ""; + var editorial = descriptions["EditorialDescription"] || ""; + var body = details_description + " " + editorial; // body = body.replace(/
/g, "

").replace(/(
)+$/, "") - var default_color_id = this.populate_selectors(data, details) + var default_color_id = this.populate_selectors(data, details); - var notAvailableInCanada = !! app.store.NotAvailableInCanada - app.product.$notAvailableInCanada.toggle( notAvailableInCanada ) + var notAvailableInCanada = !!app.store.NotAvailableInCanada; + app.product.$notAvailableInCanada.toggle(notAvailableInCanada); - if (! ('Price' in details['Item'])) { - console.log("NO PRICE, IS NOT AVAILABLE") - this.isNotAvailable = true - } - else { - console.log("FOUND PRICE, IS AVAILABLE") - this.isNotAvailable = false + if (!("Price" in details["Item"])) { + console.log("NO PRICE, IS NOT AVAILABLE"); + this.isNotAvailable = true; + } else { + console.log("FOUND PRICE, IS AVAILABLE"); + this.isNotAvailable = false; } + this.$extraMessage.hide(); + if (this.sold_out || this.isNotAvailable) { - this.$style.css("opacity", 0) - this.$color.html("NOT AVAILABLE") - this.$size.hide() - this.gallery.populate( data['Code8'], details['Item']['ImageTypes'] ) - } - else { - this.$style.css("opacity", 1) + this.$style.css("opacity", 0); + this.$color.html("NOT AVAILABLE"); + this.$size.hide(); + this.gallery.populate(data["Code8"], details["Item"]["ImageTypes"]); + } else { + this.$style.css("opacity", 1); - var color = this.colors[default_color_id] - var color_label = color.label - var sizes = this.find_sizes_for_color(default_color_id) - var size = sizes[0] - var size_label = this.sizes[size].label + var color = this.colors[default_color_id]; + var color_label = color.label; + var sizes = this.find_sizes_for_color(default_color_id); + var size = sizes[0]; + var size_label = this.sizes[size].label; - this.gallery.populate( color.code, details['Item']['ImageTypes'] ) + this.gallery.populate(color.code, details["Item"]["ImageTypes"]); - this.color = color - this.size = size + this.color = color; + this.size = size; - this.is_onesize = !! this.sizes[1] - this.set_size_label(size_label) - this.set_color_label(color_label) + this.is_onesize = !!this.sizes[1]; + this.set_size_label(size_label); + this.set_color_label(color_label); } - + // console.log(color, color_label, size, size_label) - this.item = data - this.details = details['Item'] - this.code = data['DefaultCode10'] - - console.log( data['DefaultCode10'] ) + this.item = data; + this.details = details["Item"]; + this.code = data["DefaultCode10"]; + + console.log(data["DefaultCode10"]); // title += "
EXTREME COMPACTING ON NYLON BASE
LIMITED EDITION - NUMBERED 01 TO 100" - if (title.indexOf('
') !== -1) { - var title_lines = title.split('
').map(function(s){ - if (s.indexOf("LIMITED EDITION") !== -1) { - return "" + s + "" - } - return s - }.bind(this)) - title = title_lines.join('

') + '
' + if (title.indexOf("
") !== -1) { + var title_lines = title.split("
").map( + function (s) { + if (s.indexOf("LIMITED EDITION") !== -1) { + return "" + s + ""; + } + return s; + }.bind(this) + ); + title = title_lines.join("

") + "
"; } - this.$title.html(title) - this.$type.html(type) - this.$price.html(price) - this.$body.html(body) - + this.$title.html(title); + this.$type.html(type); + this.$price.html(price); + this.$body.html(body); + // window.FirebasePlugin && window.FirebasePlugin.setScreenName('product:' + code) - - this.$productHeader.toggleClass("wide", title.length > 48) - var fits_large = !!(this.fitLargeCodes[this.code]) + this.$productHeader.toggleClass("wide", title.length > 48); + + var fits_large = !!this.fitLargeCodes[this.code]; - this.showFooter() + this.showFooter(); - console.log(app.store.FitsLarge, app.store.fitsLargeText) + console.log(app.store.FitsLarge, app.store.fitsLargeText); if (fits_large) { - if (app.store.FitsLarge === 'use_alt_text' && (app.store.FitsLargeText || "").length) { - var fit_lines = app.store.FitsLargeText.replace(//g, "&rt;").split('\n').join("
") - this.$fitHeader.html(fit_lines) - this.$fitHeader.show() + if ( + app.store.FitsLarge === "use_alt_text" && + (app.store.FitsLargeText || "").length + ) { + var fit_lines = app.store.FitsLargeText.replace(//g, "&rt;") + .split("\n") + .join("
"); + this.$fitHeader.html(fit_lines); + this.$fitHeader.show(); + } else { + this.$fitHeader.hide(); } - else { - this.$fitHeader.hide() - } - - this.$fit.show() - if (app.store.SizingFooter === 'use_alt_text' && (app.store.SizingFooterText || "").length) { - var sizing_lines = app.store.SizingFooterText.replace(//g, "&rt;").split('\n').join("
") - this.$sizing.html(sizing_lines) - this.$sizing.show() - } else if (app.store.SizingFooter === 'true') { - this.$sizing.show() + this.$fit.show(); + + if ( + app.store.SizingFooter === "use_alt_text" && + (app.store.SizingFooterText || "").length + ) { + var sizing_lines = app.store.SizingFooterText.replace(//g, "&rt;") + .split("\n") + .join("
"); + this.$sizing.html(sizing_lines); + this.$sizing.show(); + } else if (app.store.SizingFooter === "true") { + this.$sizing.show(); } } else { - this.$fitHeader.hide() - this.$fit.hide() - this.$sizing.hide() + this.$fitHeader.hide(); + this.$fit.hide(); + this.$sizing.hide(); } - this.$extraMessage.hide() - if (descriptions['Limited_Edition']) { - this.$extraMessage.html(stripHTML( descriptions['Limited_Edition'] )) - this.$extraMessage.show() - app.footer.show(stripHTML( descriptions['Limited_Edition'] )) - } + this.populate_sizes(); + this.populate_colors(); - this.populate_sizes() - this.populate_colors() - - this.deferScrollToTop() + this.deferScrollToTop(); }, - get_descriptions: function (details){ - var descriptions = {} - details['Item']['Descriptions'].forEach(function(pair){ - descriptions[pair.Key] = pair.Value - }) - return descriptions + get_descriptions: function (details) { + var descriptions = {}; + (details["Descriptions"] || []).forEach(function (pair) { + descriptions[pair.Key] = pair.Value; + }); + return descriptions; }, - find_sizes_for_color: function(color_id){ - return Object.keys( this.colors[color_id].sizes ).sort(function(a,b){ - var ao = SIZE_ORDER[ a.label ], bo = SIZE_ORDER[ b.label ] - return ao