Permalink
Cannot retrieve contributors at this time
Fetching contributors…

window.common = (function({ $, common = { init: [] }}) { | |
const stepClass = '.challenge-step'; | |
const prevBtnClass = '.challenge-step-btn-prev'; | |
const nextBtnClass = '.challenge-step-btn-next'; | |
const actionBtnClass = '.challenge-step-btn-action'; | |
const finishBtnClass = '.challenge-step-btn-finish'; | |
const submitBtnId = '#challenge-step-btn-submit'; | |
const submitModalId = '#challenge-step-modal'; | |
function getPreviousStep($challengeSteps) { | |
var $prevStep = false; | |
var prevStepIndex = 0; | |
$challengeSteps.each(function(index) { | |
var $step = $(this); | |
if (!$step.hasClass('hidden')) { | |
prevStepIndex = index - 1; | |
} | |
}); | |
$prevStep = $challengeSteps[prevStepIndex]; | |
return $prevStep; | |
} | |
function getNextStep($challengeSteps) { | |
var length = $challengeSteps.length; | |
var $nextStep = false; | |
var nextStepIndex = 0; | |
$challengeSteps.each(function(index) { | |
var $step = $(this); | |
if ( | |
!$step.hasClass('hidden') && | |
index + 1 !== length | |
) { | |
nextStepIndex = index + 1; | |
} | |
}); | |
$nextStep = $challengeSteps[nextStepIndex]; | |
return $nextStep; | |
} | |
function handlePrevStepClick(e) { | |
e.preventDefault(); | |
var prevStep = getPreviousStep($(stepClass)); | |
$(this) | |
.parent() | |
.parent() | |
.removeClass('slideInLeft slideInRight') | |
.addClass('animated fadeOutRight fast-animation') | |
.delay(250) | |
.queue(function(prev) { | |
$(this).addClass('hidden'); | |
if (prevStep) { | |
$(prevStep) | |
.removeClass('hidden') | |
.removeClass('fadeOutLeft fadeOutRight') | |
.addClass('animated slideInLeft fast-animation') | |
.delay(500) | |
.queue(function(prev) { | |
prev(); | |
}); | |
} | |
prev(); | |
}); | |
} | |
function handleNextStepClick(e) { | |
e.preventDefault(); | |
var nextStep = getNextStep($(stepClass)); | |
$(this) | |
.parent() | |
.parent() | |
.removeClass('slideInRight slideInLeft') | |
.addClass('animated fadeOutLeft fast-animation') | |
.delay(250) | |
.queue(function(next) { | |
$(this).addClass('hidden'); | |
if (nextStep) { | |
$(nextStep) | |
.removeClass('hidden') | |
.removeClass('fadeOutRight fadeOutLeft') | |
.addClass('animated slideInRight fast-animation') | |
.delay(500) | |
.queue(function(next) { | |
next(); | |
}); | |
} | |
next(); | |
}); | |
} | |
function handleActionClick(e) { | |
var props = common.challengeSeed[0] || { stepIndex: [] }; | |
var $el = $(this); | |
var index = +$el.attr('id'); | |
var propIndex = props.stepIndex.indexOf(index); | |
if (propIndex === -1) { | |
return $el.parent() | |
.find('.disabled') | |
.removeClass('disabled'); | |
} | |
// an API action | |
// prevent link from opening | |
e.preventDefault(); | |
var prop = props.properties[propIndex]; | |
var api = props.apis[propIndex]; | |
if (common[prop]) { | |
return $el.parent() | |
.find('.disabled') | |
.removeClass('disabled'); | |
} | |
return $.post(api) | |
.done(function(data) { | |
// assume a boolean indicates passing | |
if (typeof data === 'boolean') { | |
return $el.parent() | |
.find('.disabled') | |
.removeClass('disabled'); | |
} | |
// assume api returns string when fails | |
return $el.parent() | |
.find('.disabled') | |
.replaceWith('<p>' + data + '</p>'); | |
}) | |
.fail(function() { | |
console.log('failed'); | |
}); | |
} | |
function handleFinishClick(e) { | |
e.preventDefault(); | |
$(submitModalId).modal('show'); | |
$(submitModalId + '.modal-header').click(); | |
$(submitBtnId).click(handleSubmitClick); | |
} | |
function handleSubmitClick(e) { | |
e.preventDefault(); | |
$('#submit-challenge') | |
.attr('disabled', 'true') | |
.removeClass('btn-primary') | |
.addClass('btn-warning disabled'); | |
var $checkmarkContainer = $('#checkmark-container'); | |
$checkmarkContainer.css({ height: $checkmarkContainer.innerHeight() }); | |
$('#challenge-checkmark') | |
.addClass('zoomOutUp') | |
.delay(1000) | |
.queue(function(next) { | |
$(this).replaceWith( | |
'<div id="challenge-spinner" ' + | |
'class="animated zoomInUp inner-circles-loader">' + | |
'submitting...</div>' | |
); | |
next(); | |
}); | |
$.ajax({ | |
url: '/completed-challenge/', | |
type: 'POST', | |
data: JSON.stringify({ | |
id: common.challengeId, | |
name: common.challengeName, | |
challengeType: +common.challengeType | |
}), | |
contentType: 'application/json', | |
dataType: 'json' | |
}) | |
.success(function(res) { | |
if (res) { | |
window.location = | |
'/challenges/next-challenge?id=' + common.challengeId; | |
} | |
}) | |
.fail(function() { | |
window.location.replace(window.location.href); | |
}); | |
} | |
common.init.push(function($) { | |
if (common.challengeType !== '7') { | |
return null; | |
} | |
$(prevBtnClass).click(handlePrevStepClick); | |
$(nextBtnClass).click(handleNextStepClick); | |
$(actionBtnClass).click(handleActionClick); | |
$(finishBtnClass).click(handleFinishClick); | |
return null; | |
}); | |
return common; | |
}(window)); |