jam-cloud/web/app/assets/javascripts/checkout_signin.js

175 lines
4.7 KiB
JavaScript

(function(context,$) {
"use strict";
context.JK = context.JK || {};
context.JK.CheckoutSignInScreen = function(app) {
var logger = context.JK.logger;
var rest = context.JK.Rest();
var $screen = null;
var $navigation = null;
var $signinForm = null;
var $self = $(this);
var $email = null;
var $password = null;
var $signinBtn = null;
var $signupBtn = null;
var $inputElements = null;
var $contentHolder = null;
var $btnNext = null;
var $btnFacebook = null;
var checkoutUtils = context.JK.CheckoutUtilsInstance;
function beforeShow(data) {
renderNavigation();
renderLoggedInState();
}
function afterShow(data) {
}
function renderLoggedInState(){
if(isLoggedIn()) {
$contentHolder.removeClass('not-signed-in').addClass('signed-in')
}
else {
$contentHolder.removeClass('signed-in').addClass('not-signed-in')
}
}
function isLoggedIn() {
return !!context.JK.currentUserId;
}
function events() {
$signinForm.on('submit', login);
$signinBtn.on('click', login);
$btnNext.on('click', moveNext);
$btnFacebook.on('click', facebookSignup);
}
function reset() {
$inputElements.removeClass('login-error');
}
function moveNext() {
window.location = '/client#/checkoutPayment';
return false;
}
function facebookSignup() {
var $btn = $(this);
if($btn.is('.disabled')) {
logger.debug("ignoring fast attempt at facebook signup")
return false;
}
$btn.addClass('disabled')
rest.createSignupHint({redirect_location: '/client#/checkoutPayment'})
.done(function() {
// send the user on to facebook signin
window.location = $btn.attr('href');
})
.fail(function() {
app.notify({text:"Facebook Signup is not working properly"});
})
.always(function() {
$btn.removeClass('disabled')
})
return false;
}
function login() {
if($signinBtn.is('.disabled')) {
return false;
}
var email = $email.val();
var password = $password.val();
reset();
$signinBtn.text('TRYING...').addClass('disabled')
rest.login({email: email, password: password, remember_me: true})
.done(function(user) {
// now determine where we should send the user
rest.getShoppingCarts()
.done(function(carts) {
if(checkoutUtils.hasOneFreeItemInShoppingCart(carts)) {
window.location = '/client#/redeemComplete'
window.location.reload();
}
else {
window.location = '/client#/checkoutPayment'
window.location.reload();
}
})
.fail(function() {
window.location = '/client#/jamtrack/search'
window.location.reload();
})
})
.fail(function(jqXHR) {
if(jqXHR.status == 422) {
$inputElements.addClass('login-error')
}
else {
app.notifyServerError(jqXHR, "Unable to log in")
}
})
.always(function() {
$signinBtn.text('SIGN IN').removeClass('disabled')
})
return false;
}
function renderNavigation() {
$navigation.html("");
var navigationHtml = $(
context._.template(
$('#template-checkout-navigation').html(),
{current: 1, purchases_disable_class: gon.global.purchases_enabled ? 'hidden' : ''},
{variable: 'data'}
)
);
$navigation.append(navigationHtml);
}
function initialize() {
var screenBindings = {
'beforeShow': beforeShow,
'afterShow': afterShow
};
app.bindScreen('checkoutSignin', screenBindings);
$screen = $("#checkoutSignInScreen");
$navigation = $screen.find(".checkout-navigation-bar");
$signinForm = $screen.find(".signin-form");
$signinBtn = $signinForm.find('.signin-submit');
$email = $signinForm.find('input[name="email"]');
$password = $signinForm.find('input[name="password"]');
$inputElements = $signinForm.find('.input-elements');
$contentHolder = $screen.find('.content-holder');
$btnNext = $screen.find('.btnNext');
$btnFacebook = $screen.find('.signin-facebook')
if($screen.length == 0) throw "$screen must be specified";
if($navigation.length == 0) throw "$navigation must be specified";
events();
}
this.initialize = initialize;
return this;
}
})(window,jQuery);