Skip to content

Instantly share code, notes, and snippets.

@DxPoly
Last active April 28, 2024 09:55
Show Gist options
  • Save DxPoly/51f53f423fa5a7292e71d04b3c39c62e to your computer and use it in GitHub Desktop.
Save DxPoly/51f53f423fa5a7292e71d04b3c39c62e to your computer and use it in GitHub Desktop.
对比 demo cart.liquid
<!-- /sections/cart.liquid -->
{%- liquid
assign hide_quantity = 'quantity--hide'
if settings.cart_show_quantity
assign hide_quantity = ''
endif
assign ajax_disable = false
assign no_ajax_class = ''
if settings.cart_style == 'compatible'
assign ajax_disable = true
assign no_ajax_class = 'no--ajax'
endif
assign full_init = ''
assign empty_init = 'cart--hidden'
if cart.item_count == 0
assign empty_init = ''
assign full_init = 'cart--hidden'
endif
assign is_us_store = false
if localization.country.iso_code == 'US'
assign is_us_store = true
endif
-%}
{% assign checkHadSubscribe = false %}
{% for line_item in cart.items %}
{% if line_item.selling_plan_allocation %}
{% assign checkHadSubscribe = true %}
{%- endif -%}
{% endfor %}
{%- if checkHadSubscribe or is_us_store and cart.item_count != 0 -%}
<div class="page-width mb10 wrapper section-padding" id="customer-simple-register" style="display:none;">
<h3 class="cart__page__title body-size-8" style="text-align: center; margin-top: 35px;">{{ 'abovegem.create_account' | t }}</h3>
<div class="s-reg-wrap">
<div class="mb10 w520 relative fIWrap">
<div class="flex" id="r-g-role">
<input type="checkbox" style="margin-right:5px;" id="retail-create-account-cb" />
<span>{{ 'abovegem.register_customer_title' | t }}</span>
</div>
</div>
<div class="mb10 w520 relative fIWrap">
<div id="d-p-role">
<span>Role:</span> <span id="currentRole">Business Partner</span>
</div>
</div>
<div class="mb10 w520 relative fIWrap">
<span class="hide">{{ 'abovegem.username' | t }}</span>
<div class="relative usernameWrap">
<input type="text" class="w100p regInput regUsername mb5" placeholder="" required="" />
<span class="tip-required">{{ 'abovegem.username' | t }}</span>
<p class="errorTips hide"></p>
<div class="tips">
<p>{{ 'abovegem.username_rule_tips1' | t }}</p>
<p>{{ 'abovegem.username_rule_tips2' | t }}</p>
<p>{{ 'abovegem.username_rule_tips3' | t }}</p>
</div>
</div>
</div>
<div class="mb10 w520 relative fIWrap">
<span class="hide">{{ 'abovegem.recognition_name' | t }}</span>
<div>
<input type="text" class="w100p regInput regRecognitionName mb5" placeholder="" required="" />
<span class="tip-required no-required">{{ 'abovegem.recognition_name' | t }}</span>
<p class="errorTips hide"></p>
</div>
</div>
<div class="mb10 w520 flex namewrap" style="justify-content: space-between;">
<div class="mb10 relative fIWrap" style="margin-right: 10px;flex:1;">
<span class="hide">{{ 'abovegem.first_name' | t }}</span>
<div>
<input type="text" class="w100p regInput regFirstName mb5" placeholder="" required="" />
<span class="tip-required">{{ 'abovegem.first_name' | t }}</span>
<p class="errorTips hide"></p>
</div>
</div>
<div class="mb10 relative fIWrap" style="flex:1;">
<span class="hide">{{ 'abovegem.last_name' | t }}</span>
<div>
<input type="text" class="w100p regInput regLastName mb5" placeholder="" required="" />
<span class="tip-required">{{ 'abovegem.last_name' | t }}</span>
<p class="errorTips hide"></p>
</div>
</div>
</div>
<div class="mb10 w520 relative fIWrap">
<span class="hide">{{ 'abovegem.email' | t }}</span>
<div>
<input type="text" class="w100p regInput regEmail mb5" placeholder="" required="" />
<span class="tip-required">{{ 'abovegem.email' | t }}</span>
<p class="errorTips hide"></p>
</div>
</div>
<div class="mb10 w520 relative fIWrap">
<span class="hide">{{ 'abovegem.birthday' | t }}</span>
<div>
<input type="text" class="w100p regInput regBirthday mb5" placeholder="" id="regBirthday" required="" />
<span class="tip-required">{{ 'abovegem.birthday' | t }}</span>
<p class="errorTips hide"></p>
</div>
</div>
<!-- <div class="mb10 w520 relative fIWrap" style="display: none;">
<span class="hide">Social Security Number</span>
<div>
<input type="text" class="w100p regInput regSSN mb5" placeholder="" required="" />
<span class="tip-required">Social Security Number</span>
<p class="errorTips hide"></p>
</div>
</div> -->
<div class="mb10 w520 flex fpwdwrap" style="justify-content: space-between;">
<div class="mb10 relative fIWrap" style="margin-right: 10px;flex:1;">
<span class="hide">{{ 'abovegem.password' | t }}</span>
<div>
<input type="password" class="w100p regInput regPwd mb5" placeholder="" required="" />
<span class="tip-required">{{ 'abovegem.password' | t }}</span>
<p class="errorTips hide"></p>
</div>
</div>
<div class="mb10 relative fIWrap" style="flex:1;">
<span class="hide">{{ 'abovegem.confirm_password' | t }}</span>
<div>
<input type="password" class="w100p regInput regConfPwd mb5" placeholder="" required="" />
<span class="tip-required">{{ 'abovegem.confirm_password' | t }}</span>
<p class="errorTips hide"></p>
</div>
</div>
</div>
<!-- <div class="mb10 w520 relative fIWrap">
<span class="hide">{{ 'abovegem.phone' | t }}</span>
<div class="relative">
<input type="text" class="w100p regInput regPhone mb1" placeholder="{{ 'abovegem.phone' | t }}" required="" style="" />
<p style="position: absolute;top: 14px;font-size: 1.1rem;left: 3px;display: none;">+1</p>
<p style="font-size:12px;">{{ 'abovegem.phone_tips' | t }}</p>
<p class="errorTips hide"></p>
</div>
</div> -->
<div class="mb10 w520 relative fIWrap">
<span class="hide affiliate">{{ 'abovegem.sponsor_id' | t }}</span>
<div class="relative">
<input type="text" class="w100p regInput regSponsorId mb5" data-affiliate="" placeholder="" />
<span class="tip-required">{{ 'abovegem.affiliate_id' | t }}</span>
<a href="javascript:;" style="font-size: 12px;text-decoration: underline;position: absolute;right: 5px;top: 10px;" class="regFindMySponsor hide">{{ 'abovegem.find_my_sponsor' | t }}</a>
<a href="javascript:;" style="font-size: 12px;text-decoration: underline;position: absolute;right: 0;top: 49px;" class="regNoSponsor hide" data-affiliate="{{ 'abovegem.i_do_not_have_affiliate' | t }}">{{ 'abovegem.i_do_not_have_sponsor' | t }}</a>
<p class="errorTips hide"></p>
</div>
</div>
<!-- <div class="mb10 mt10 w520 relative fIWrap">
<span class="hide">Referral ID</span>
<div class="relative">
<input type="text" class="w100p regInput regReferralId mb5" placeholder="Referral ID" />
<span class="tip-required">Referral ID</span>
<a href="javascript:;" style="font-size: 12px;text-decoration: underline;position: absolute;right: 5px;top: 10px;" class="regFindMyReferral hide">find my referral</a>
<p class="errorTips hide"></p>
</div>
</div> -->
<div class="mb10 w520 relative fIWrap flex agreement-wrap">
<div>
{%- render 'agreement' -%}
</div>
<div class="flex" style="margin-top: 10px;justify-content: space-between;">
<div class="flex">
<input type="checkbox" class="" id="accept-agreement" />
<span style="margin-left: 6px;font-size: 18px;">{{ 'abovegem.accept_the_agreement' | t }}</span>
</div>
<div><a target="_blank" style="text-decoration: underline;" href="https://backoffice.liferegen.com/upload/company_document/9/Business_Partner_Agreement_v.3_PDF_-_4882-0476-0177_1.pdf">Download</a></div>
</div>
</div>
<div class="mb10 w520 relative fIWrap text-right">
<button type="submit" name="checkout" class="btn btn--primary btn--large checkout__button" form="reg__cart__form">
{{ 'cart.general.checkout' | t }}
</button>
</div>
</div>
</div>
<div id="popup-change-role">
<div class="a1">
<div style="font-size: 15px;margin-bottom: 30px;">{{ 'abovegem.role_change_tips' | t }}</div>
<div style="margin-top: 20px;">
<button type="button" style="width: 100px;height: 36px;font-size: 16px;color: #000;font-weight: 600;" id="selectChangeRoleBtn">{{ 'abovegem.confirmed' | t }}</button>
<button id="cancelRoleCodeChange" type="button" style="width: 100px;height: 36px;font-size: 16px;color: #000;font-weight: 600;">{{ 'abovegem.cancel' | t }}</button>
</div>
</div>
</div>
<style>
.flex{display: flex;}
.flex1{flex:1;}
.flex-row{flex-direction: row !important;}
.items-center{align-items: center;}
.w520{width: 520px;}
.w100p{width:100%;}
.h48{height:48px;}
.border-right{border-right: 1px solid var(--COLOR-A20);}
.flex-items-end{align-items: flex-end !important;}
.text-right{text-align: right !important;}
.mb1{margin-bottom:1px !important;}
.mb5{margin-bottom:5px !important;}
.mb10{margin-bottom:10px;}
.mt10{margin-top: 10px;}
.ml10{margin-left:10px;}
.hide{display:none;}
.relative{position: relative;}
.regInput{font-size: 18px;padding: 15px 18px 10px 10px;height: 48px;}
.fIWrap span.tip-required {
position: absolute;
top: 16px;
left: 0;
z-index: 1;
padding-left: 10px;
font-size: 16px;
color: #888888;
pointer-events: none;
transition: all 0.1s;
}
.tip-required::after {
content: '*';
color: #ff0000;
margin-left: 2px;
}
.no-required::after {
content: '';
}
.spanTips{position: absolute;top: 0;left: 10px;font-size: 12px;z-index: 1;color:#707070;}
.errorTips{color:red;}
.txtColor{color:#2b2626 !important;}
.s-reg-wrap{display:flex;flex-direction: column;align-items: center;}
input[type="date"]{
border: 1px solid var(--border);
width: 100%;
max-width: 100%;
display: block;
margin: 0 0 1em;
background-color: transparent;
outline: none;
color: var(--text-dark);
}
.flatpickr-monthDropdown-months{display: inline-block !important;}
.usernameWrap .tips{
display: none;
position: absolute;
left: 0;
top: 50px;
border: 1px solid #ccc;
width: 100%;
border-radius: 5px;
z-index: 1000;
padding: 10px;
background-color: #fff;
}
.usernameWrap.focus .tips{display: block !important;}
.agreement-wrap{
flex-direction: column;
border: 1px solid #f1f1f1;
padding: 10px;
margin-top: 20px;
background-color: #f1f1f1;
}
.agreement-wrap h1{
font-size: 17px;
font-weight: 600;
}
.agreement-wrap h2{
font-size: 14px;
font-weight: 600;
}
.agreement-wrap h3{
font-size: 13px;
font-weight: 600;
}
#popup-change-role{
position: fixed;
width: 100%;
height: 100%;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #000;
z-index: 9999;
opacity: 0.9;
display: none;
justify-content: center;
align-items: center;
}
#popup-change-role .a1{
position: relative;
z-index: 1000;
width: 400px;
background-color: #fff;
padding: 20px;
display: flex;
flex-direction: column;
align-items: center;
border-radius: 15px;
color: #000;
font-size: 18px;
font-weight: 600;
}
@media only screen and (max-width: 530px) {
.w520 { width: 100%; }
.fpwdwrap{flex-direction: column;}
.fpwdwrap .fIWrap:first-child{margin-right:0 !important;}
#customer-simple-register{padding: 0 25px;}
}
</style>
<!-- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css">
<script src="https://cdn.jsdelivr.net/npm/flatpickr" defer></script> -->
<script>
function __getCoookieVal__(sKey) {
return decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*" + encodeURIComponent(sKey).replace(/[-.+*]/g, "\\$&") + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1")) || null;
}
function __showButtonBasedOnRoleCode(roleCode) {
if (roleCode === 'D') {
$('.continue__button').show();
$('.first__checkout__button').hide();
} else {
$('.first__checkout__button').show();
$('.continue__button').hide();
}
}
window._requestSponsorResultfn_ = function(res, obj) {
var roleCode = window.__getCoookieVal__('ckRoleCode');
if(res && res.data) {
if(roleCode === 'D') {
if(res.data.roleCode === 'D') {
$('.regSponsorId').val(res.data.id);
$('.regFindMySponsor').remove();
$('.regNoSponsor').remove();
$('.regSponsorId').trigger('focusout');
$('.regSponsorId').prop('disabled', true);
} else if(res.data.roleCode === 'P') {
$('.regSponsorId').val(res.data.sponsorId);
$('.regReferralId').val(res.data.id);
$('.regFindMySponsor').remove();
$('.regNoSponsor').remove();
$('.regSponsorId').trigger('focusout');
$('.regSponsorId').prop('disabled', true);
}
} else {
if(res.data.roleCode === 'D') {
$('.regSponsorId').val(res.data.id);
$('.regReferralId').val(res.data.id);
$('.regFindMyReferral').remove();
$('.regReferralId').trigger('focusout');
$('.regReferralId').prop('disabled', true);
} else if(res.data.roleCode === 'P') {
$('.regSponsorId').val(res.data.sponsorId);
$('.regReferralId').val(res.data.id);
$('.regFindMyReferral').remove();
$('.regReferralId').trigger('focusout');
$('.regReferralId').prop('disabled', true);
}
}
} else {
if(roleCode === 'D' || roleCode === 'P') {
if(roleCode === 'D') {
$('.regFindMySponsor').removeClass('hide');
$('.regNoSponsor').removeClass('hide');
}
if(roleCode === 'P') {
$('.regFindMyReferral').removeClass('hide');
}
} else {
$('.regFindMySponsor').removeClass('hide');
$('.regNoSponsor').removeClass('hide');
}
}
window._requestSponsorResultfn_ = null;
};
window._getUserInfoSuccessCallbackFn_ = function(isLogin, obj) {
var getRoleCode = function() { return window.__getCoookieVal__('ckRoleCode'); };
var checkoutBtn = $('.checkout__button');
if(isLogin) {
$('#customer-simple-register').remove();
$('.first__checkout__button').show();
$('.continue__button').hide();
checkoutBtn.prop('disabled', false);
$('.first__checkout__button').prop('disabled', false);
return;
}
$('#__agInsertContent__').addClass('hide');
var tk = obj.getUserToken();
var apiUrl = 'https://lif.abovegem.com:8043';
var reqHeader = {'Content-Type': 'application/json', "Accept": "application/json", 'X-Shopify-Shop': obj.getShop()};
var validReg = {username: false, firstName: false, lastName: false, pwd: false, confirmPwd: false, phone: true, sponsorId: false, referralId: false, email: true, ssn: true, birthday: false, agreement: false, recognitionName: true};
var validFn = function() {
var isPass = true;
for(var k in validReg) {
if(!validReg[k]) {
console.log(`${k} is not valid`)
isPass = false;
}
}
if(!isPass){ checkoutBtn.prop('disabled', true); return; }
var cartForm = $('form.cart');
var roleCode = getRoleCode();
var userInfo = {
roleCode: roleCode
};
[
{f: 'login', i: 'regUsername'},
{f: 'email', i: 'regEmail'},
{f: 'birthday', i: 'regBirthday'},
//{f: 'ssn', i: 'regSSN'},
{f: 'phone', i: 'regPhone'},
{f: 'sponsor', i: 'regSponsorId'},
{f: 'referralId', i: 'regReferralId'},
{f: 'password', i: 'regPwd'},
{f: 'recognitionName', i: 'regRecognitionName'},
{f: 'firstName', i: 'regFirstName'},
{f: 'lastName', i: 'regLastName'}
].forEach(function(item){
var kWrap = $('.' + item.i);
if(item.f === 'birthday') { kWrap = $('#regBirthday'); }
var kVal = kWrap.val();
if(item.f === 'birthday') { kVal = getBirthDay(); }
if(item.f === 'password' || item.f === 'ssn') {
if(kVal) { kVal = window.btoa(window.encodeURIComponent(kVal)); }
}
userInfo[item.f] = kVal;
});
var uIName = 'attributes[userInfo]';
if(roleCode === 'D' || roleCode === 'P' || roleCode === 'R') {
var uInfoStr = JSON.stringify(userInfo);
var uInfoInput = cartForm.find('textarea[name="' + uIName + '"]');
if(uInfoInput.length) { uInfoInput.val( uInfoStr ).text(uInfoStr); }
else { cartForm.append('<textarea style="display:none" name="' + uIName + '">'+ uInfoStr +'</textarea>'); }
var sponsorId = $('.regSponsorId').val();
if(sponsorId){
var spIdName = 'attributes[sponsor_distributor_id]';
var spIdInput = cartForm.find('input[name="' + spIdName + '"]');
if(spIdInput.length) { spIdInput.attr('value', sponsorId); }
else { cartForm.append('<input type="hidden" name="' + spIdName + '" value=\'' + sponsorId + '\' />'); }
}
} else {
cartForm.find('textarea[name="' + uIName + '"]').remove();
}
checkoutBtn.prop('disabled', false);
}
var getCountryWrap = function() { return $('#homeCountry'); }
var getStateWrap = function() { return $('#homeState'); }
var getCountryId = function() { return 1214; }
var __init_customer_register_form = function() {
console.log('init form');
$('.regInput').trigger('focusout');
}
var getHomeAddressInfo = function() {
var countryWrap = getCountryWrap();
var stateWrap = getStateWrap();
return {
"firstName": $('#homeFirstName').val().trim(),
"lastName": $('#homeLastName').val().trim(),
"street": $('#homeStreet').val().trim(),
"streetCont": $('#homeStreetCont').val().trim(),
"city": $('#homeCity').val().trim(),
"zip": $('#homeZip').val().trim(),
"stateId": stateWrap.val(),
"state": stateWrap.find('option:selected').text(),
"countryId": countryWrap.val(),
"country": countryWrap.find('option:selected').text(),
};
};
$(document).on('click', '.continue__button', function(e) {
e.stopPropagation();
e.preventDefault();
$('.cart__template').hide();
__init_customer_register_form();
$('#customer-simple-register').show();
});
$(document).on('click', '#roleCodeSpanChange', function(e){
var popupRoleWrap = document.getElementById("popup-change-role");
popupRoleWrap.style.display = 'flex';
});
$(document).on('click', '#cancelRoleCodeChange', function(e){
var popupRoleWrap = document.getElementById("popup-change-role");
popupRoleWrap.style.display = 'none';
});
$(document).on('click', '#selectChangeRoleBtn', function(e){
var popupRoleWrap = document.getElementById("popup-change-role");
fetch(window.Shopify.routes.root + 'cart/clear.js',{method: 'post'}).then(function(res){
document.cookie = encodeURIComponent('ckRoleCode') + "=" + encodeURIComponent('') + ';path=/';
popupRoleWrap.style.display = 'none';
var prePath = location.pathname.replaceAll('cart', '');
location.href = prePath + 'pages/join-options';
});
});
$(document).on('focusin, focusout', '.regInput', function(e){
var self = $(this);
var span = self.closest('.fIWrap').find('span');
var value = self.val().trim();
if(value) {
span.removeClass('hide');
span.addClass('spanTips');
self.val(value);
} else {
span.addClass('hide');
span.removeClass('spanTips');
}
});
$(document).on('focusout', '.regInput', function(e){
var self = $(this);
var span_required = self.closest('.fIWrap').find('span.tip-required');
var value = self.val().trim();
if(value) {
span_required.addClass('hide');
} else {
span_required.removeClass('hide');
}
});
$(document).on('focusin', '.regInput', function(e){
var self = $(this);
var span_required = self.closest('.fIWrap').find('span.tip-required');
span_required.addClass('hide');
});
$(document).on('keyup', '.regUsername', function(e){
var self = $(this);
if(self.val()) {
self.val( self.val().toLowerCase() );
}
});
$(document).on('focusin', '.regUsername', function(e){
var self = $(this);
self.parent().addClass('focus');
});
$(document).on('focusout', '.regUsername', function(e){
var self = $(this);
var usernameVal = self.val();
var errorTips = self.parent().find('.errorTips');
self.parent().removeClass('focus');
// errorTips.addClass('hide');
errorTips.text('');
if(usernameVal) {
if(!/^([A-Za-z0-9_-])+$/.test(usernameVal)) {
validReg.username = false;
errorTips.text('Invalid Username (alphanumeric, underscore and dash characters only)');
errorTips.removeClass('hide');
return false;
}
fetch(apiUrl + '/shopify/validate/login', {method: 'POST', mode: 'cors', headers: reqHeader, body: JSON.stringify({login: usernameVal})})
.then(function(res){ return res.json();})
.then(function(d) {
if(d && d.available) {
validReg.username = true;
errorTips.addClass('hide');
errorTips.text('');
} else {
var errmsg = 'Username has been registered';
if(d.error) { errmsg = d.error; }
validReg.username = false;
errorTips.text(errmsg);
errorTips.removeClass('hide');
}
validFn();
})
.catch(function(err){
console.log(err);
validFn();
});
} else {
validReg.username = false;
validFn();
}
});
$(document).on('focusout', '.regRecognitionName', function(e){
var self = $(this);
var recognitionName = self.val();
var errorTips = self.parent().find('.errorTips');
errorTips.addClass('hide');
errorTips.text('');
validFn();
});
$(document).on('focusout', '.regFirstName', function(e){
var self = $(this);
var firstName = self.val();
var errorTips = self.parent().find('.errorTips');
if(firstName) {
validReg.firstName = true;
} else {
validReg.firstName = false;
}
errorTips.addClass('hide');
errorTips.text('');
validFn();
});
$(document).on('focusout', '.regLastName', function(e){
var self = $(this);
var lastName = self.val();
var errorTips = self.parent().find('.errorTips');
if(lastName) {
validReg.lastName = true;
} else {
validReg.lastName = false;
}
errorTips.addClass('hide');
errorTips.text('');
validFn();
});
$(document).on('keyup', '.regEmail', function(e){
var self = $(this);
if(self.val()) {
self.val( self.val().toLowerCase() );
}
});
$(document).on('focusout', '.regEmail', function(e){
var self = $(this);
var emailVal = self.val();
var errorTips = self.parent().find('.errorTips');
if(emailVal) {
fetch(apiUrl + '/shopify/validate/email', {method: 'POST', mode: 'cors', headers: reqHeader, body: JSON.stringify({email: emailVal})})
.then(function(res){ return res.json();})
.then(function(d) {
if(d && d.available) {
validReg.email = true;
errorTips.addClass('hide');
errorTips.text('');
} else {
validReg.email = false;
errorTips.text('Invalid email or email already registered');
errorTips.removeClass('hide');
}
validFn();
})
.catch(function(err){
console.log(err);
validFn();
});
} else {
validReg.email = false;
validFn();
}
});
// $(document).on('focusout', '.regSSN', function(e){
// var self = $(this);
// var ssnVal = self.val();
// var errorTips = self.parent().find('.errorTips');
// if(ssnVal) {
// var params = {
// countryId: getCountryId(),
// roleCode: getRoleCode(),
// ssn: ssnVal
// };
// fetch(apiUrl + '/shopify/validate/ssn', {method: 'POST', mode: 'cors', headers: reqHeader, body: JSON.stringify(params)})
// .then(function(res){ return res.json();})
// .then(function(d) {
// if(d && d.error) {
// validReg.ssn = false;
// errorTips.text(d.error);
// errorTips.removeClass('hide');
// } else {
// validReg.ssn = true;
// errorTips.addClass('hide');
// errorTips.text('');
// }
// validFn();
// })
// .catch(function(err){
// console.log(err);
// validFn();
// });
// } else {
// validReg.ssn = false;
// validFn();
// }
// });
function getBirthDay() {
var birthDayVal = $('#regBirthday').val();
if(birthDayVal) {
var bs = birthDayVal.split('/');
return bs[2] + '-' + bs[0] + '-' + bs[1];
}
}
$(document).on('focusout', '.regBirthday', function(e){
var self = $(this);
var birthDayVal = getBirthDay();
var errorTips = self.parent().find('.errorTips');
if(birthDayVal) {
fetch(apiUrl + '/shopify/validate/birthday?birthday='+birthDayVal+'&roleCode='+getRoleCode(), {method: 'GET', mode: 'cors', headers: reqHeader})
.then(function(res){ return res.json();})
.then(function(d) {
if(d && d.error) {
validReg.birthday = false;
errorTips.text('Birthday invalid');
errorTips.removeClass('hide');
} else {
validReg.birthday = true;
errorTips.addClass('hide');
errorTips.text('');
}
validFn();
})
.catch(function(err){
console.log(err);
validFn();
});
} else {
validReg.birthday = false;
validFn();
}
});
$(document).on('focusout', '.regPwd', function(e){
var self = $(this);
var pwd = self.val();
var errorTips = self.parent().find('.errorTips');
if(pwd) {
validReg.pwd = false;
errorTips.removeClass('hide');
if(pwd.length < 6) {
errorTips.text('The password must be at least 6 characters.');
} else if(pwd.length > 30){
errorTips.text('The password must be no more than 30 characters.');
} else if(!/[A-Za-z]{1,}/g.test(pwd)){
errorTips.text('The password must contain at least one capital letter.');
} else if(!/\d{1,}/g.test(pwd)){
errorTips.text('The password must contain at least one number.');
} else {
validReg.pwd = true;
errorTips.addClass('hide');
errorTips.text('');
}
} else {
validReg.pwd = false;
errorTips.addClass('hide');
errorTips.text('');
}
validFn();
});
$(document).on('focusout', '.regConfPwd', function(e){
var self = $(this);
var pwd = $('.regPwd').val();
if(self.val()) {
var errorTips = self.parent().find('.errorTips');
if(pwd === self.val()) {
validReg.confirmPwd = true;
errorTips.addClass('hide');
errorTips.text('');
} else {
validReg.confirmPwd = false;
errorTips.text('Passwords do not match');
errorTips.removeClass('hide');
}
} else {
validReg.confirmPwd = false;
}
validFn();
});
// $(document).on('input', '.regPhone', function(e){
// var self = $(this);
// self.val( self.val().replace(/[^\d]/, '') );
// });
// $(document).on('focusout', '.regPhone', function(e){
// var self = $(this);
// var phone = self.val();
// var errorTips = self.parent().find('.errorTips');
// if(phone) {
// if(/^\d+$/.test(phone)) {
// validReg.phone = true;
// errorTips.addClass('hide');
// errorTips.text('');
// } else {
// validReg.phone = false;
// errorTips.text('Invalid phone number');
// errorTips.removeClass('hide');
// }
// } else {
// validReg.phone = false;
// errorTips.addClass('hide');
// errorTips.text('');
// }
// validFn();
// });
$(document).on('focusout', '.regSponsorId', function(e){
var self = $(this);
var sponsorId = self.val();
if(sponsorId) {
fetch(apiUrl + '/shopify/validate/sponsor', {method: 'POST', mode: 'cors', headers: reqHeader, body: JSON.stringify({sponsor: sponsorId, role_code: getRoleCode()})})
.then(function(res){ return res.json();})
.then(function(d) {
var errorTips = self.parent().find('.errorTips');
if(d && d.available) {
validReg.sponsorId = true;
errorTips.removeClass('hide');
errorTips.addClass('txtColor');
errorTips.text(d.body.name);
} else {
validReg.sponsorId = false;
var roleCode = getRoleCode();
var sName = 'Sponsor';
if(roleCode === 'R') {sName = 'Affiliate';}
errorTips.text(d.error.replace('Advisor', sName));
errorTips.removeClass('hide');
errorTips.removeClass('txtColor');
}
validFn();
})
.catch(function(err){
console.log(err);
validFn();
});
} else {
validReg.sponsorId = false;
validFn();
}
});
// $(document).on('focusout', '.regReferralId', function(e){
// var self = $(this);
// var referralId = self.val();
// if(referralId) {
// fetch(apiUrl + '/shopify/sponsor_info?sponsor=' + referralId, {method: 'GET', mode: 'cors', headers: reqHeader})
// .then(function(res){ return res.json();})
// .then(function(d) {
// var errorTips = self.parent().find('.errorTips');
// if(d && d.data && d.data.roleCode !== 'R') {
// validReg.referralId = true;
// errorTips.removeClass('hide');
// errorTips.addClass('txtColor');
// errorTips.text(d.data.name);
// if(d.data.roleCode === 'D') {
// $('.regSponsorId').val(d.data.id);
// }
// if(d.data.roleCode === 'P') {
// $('.regSponsorId').val(d.data.sponsorId);
// }
// } else {
// validReg.referralId = false;
// errorTips.text('Does not exist!');
// errorTips.removeClass('hide');
// errorTips.removeClass('txtColor');
// }
// validFn();
// })
// .catch(function(err){
// console.log(err);
// validFn();
// });
// } else {
// validReg.referralId = false;
// validFn();
// }
// });
$(document).on('click', '.regRole', function(e){ validFn(); });
$(document).on('click', '.regFindMySponsor', function(e){
if(obj) {
obj._searchField = 'sponsor';
obj._searchReferralId = '';
obj.regNoSponsor.selectFn = function(obj){
obj.removePopup();
$('.regFindMySponsor').text('change my sponsor');
};
obj.popupFindSponsor({noCount: true, titleName: 'sponsor'});
}
return false;
});
$(document).on('click', '.regFindMyReferral', function(e){
if(obj) {
obj._searchField = 'referral';
obj.regNoSponsor.selectFn = function(obj){
obj.removePopup();
$('.regReferralId').val(obj._searchReferralId);
$('.regReferralId').trigger('focusout');
$('.regFindMyReferral').text('change my referral');
};
obj.popupFindSponsor({noCount: true, titleName: 'referral'});
}
return false;
});
$(document).on('click', '.regNoSponsor', function(e){
$('.regSponsorId').val('10000201').trigger('focusout');
return false;
});
$(document).on('focusout', '#homeFirstName, #homeLastName, #homeStreet, #homeStreetCont, #homeCity, #homeZip', function(e){
validFn();
});
$(document).on('change', '#homeCountry, #homeState', function(e){
validFn();
});
$(document).on('change', '#accept-agreement', function(e){
validReg.agreement = this.checked;
validFn();
});
$(document).on('change', '#retail-create-account-cb', function(e){
if(this.checked) {
setCkRoleCode('R');
retailFn();
} else {
setCkRoleCode(null);
guestFn();
}
});
$('.cart__items__remove').on('click', function() {
console.log('cart item removed');
location.reload();
});
$('.quantity__input').on('change', function() {
if (parseInt(this.value, 10) <= 0) {
console.log('line item count down to 0, reload cart');
location.reload();
}
});
var retailFn = function() {
validReg.username = false;
validReg.pwd = false;
validReg.confirmPwd = false;
validReg.sponsorId = false;
validReg.email = false;
validReg.recognitionName = true;
validReg.firstName = false;
validReg.lastName = false;
$('.regUsername').trigger('focusout').closest('.fIWrap').removeClass('hide');
$('.regPwd').trigger('focusout').closest('.fIWrap').removeClass('hide');
$('.regConfPwd').trigger('focusout').closest('.fIWrap').removeClass('hide');
$('.regSponsorId').trigger('focusout').closest('.fIWrap').removeClass('hide');
$('.regEmail').trigger('focusout').closest('.fIWrap').removeClass('hide');
$('.regFirstName').trigger('focusout').closest('.fIWrap').removeClass('hide');
$('.regLastName').trigger('focusout').closest('.fIWrap').removeClass('hide');
validFn();
}
var guestFn = function() {
validReg.username = true;
validReg.pwd = true;
validReg.confirmPwd = true;
validReg.sponsorId = true;
validReg.email = true;
validReg.recognitionName = true;
validReg.firstName = true;
validReg.lastName = true;
$('.regUsername').closest('.fIWrap').addClass('hide');
$('.regPwd').closest('.fIWrap').addClass('hide');
$('.regConfPwd').closest('.fIWrap').addClass('hide');
$('.regSponsorId').closest('.fIWrap').addClass('hide');
$('.regEmail').closest('.fIWrap').addClass('hide');
$('.regFirstName').closest('.fIWrap').addClass('hide');
$('.regLastName').closest('.fIWrap').addClass('hide');
validFn();
}
if($('.cart__items__row.test-bundle').length) {
setCkRoleCode('D');
} else {
setCkRoleCode('R');
}
var roleCode = getRoleCode();
if(roleCode === 'D' || roleCode === 'P') {
$('#r-g-role').remove();
if(roleCode === 'D') {
validReg.referralId = true;
$('.regReferralId').closest('.fIWrap').addClass('hide');
}
if(roleCode === 'P') {
validReg.ssn = true;
validReg.birthday = true;
validReg.agreement = true;
validReg.sponsorId = true;
$('.regBirthday').closest('.fIWrap').remove();
$('.regSSN').closest('.fIWrap').remove();
$('.agreement-wrap').remove();
$('.regSponsorId').closest('.fIWrap').addClass('hide');
}
// validReg.recognitionName = false;
try {
var paths = location.pathname.split('/');
if(paths && paths[1]) {
if(paths[1].endsWith('-tn')) {
validReg.phone = true;
$('.regPhone').closest('.fIWrap').addClass('hide');
}
}
} catch (e) {
console.log(e);
}
} else {
$('#d-p-role').remove();
//$('.regEmail').closest('.fIWrap').remove();
$('.regBirthday').closest('.fIWrap').remove();
$('.regSSN').closest('.fIWrap').remove();
$('.regPhone').closest('.fIWrap').remove();
$('.regReferralId').closest('.fIWrap').remove();
$('.agreement-wrap').remove();
//validReg.email = true;
validReg.ssn = true;
validReg.birthday = true;
validReg.phone = true;
validReg.agreement = true;
validReg.referralId = true;
validReg.recognitionName = true;
$('.regRecognitionName').closest('.fIWrap').addClass('hide');
$('.regFindMySponsor').remove();
var regNoSponsorWrap = $('.regNoSponsor');
regNoSponsorWrap.text( regNoSponsorWrap.attr('data-affiliate') );
//$('.regNoSponsor').remove();
if(roleCode === 'R'){
var regSponsorWrap = $('.regSponsorId');
regSponsorWrap.attr('placeholder', regSponsorWrap.attr('data-affiliate'));
regSponsorWrap.closest('.fIWrap').find('.affiliate').text(regSponsorWrap.attr('data-affiliate'));
$('#retail-create-account-cb').prop('checked', true);
if($('.selling-plan-allocation').length){
$('#retail-create-account-cb').prop('checked', true).prop('disabled', true);
}
retailFn();
} else {
if($('.selling-plan-allocation').length){
$('#retail-create-account-cb').prop('checked', true).prop('disabled', true);
setCkRoleCode('R');
retailFn();
} else {
guestFn();
}
}
}
var roleWrap = $('#currentRole');
if(roleCode === 'D') {roleWrap.text(roleWrap.attr('data-d'));}
if(roleCode === 'P') {roleWrap.text('Circle Member');}
if(roleCode === 'R') {roleWrap.text('Retail Customer');}
// $('#customer-simple-register').show();
__showButtonBasedOnRoleCode(roleCode);
try {
// var fp = flatpickr('#regBirthday', {
// altInput: true,
// altFormat: "m/d/Y",
// dateFormat: "Y-m-d",
// });
} catch (e) {
console.log(e);
}
};
</script>
{%- endif -%}
{{ localization.country.iso_code }}
<form method="post" action="/localization" id="localization_form" accept-charset="UTF-8" class="shopify-localization-form" enctype="multipart/form-data">
<input type="hidden" name="form_type" value="localization">
<input type="hidden" name="utf8" value="✓">
<input type="hidden" name="_method" value="put">
<input type="hidden" name="country_code" value="US">
<input type="hidden" name="language_code" value="en">
<select name="country_code" style="max-width:200px;">
<option value="">Select</option>
<option value="US" {% if localization.country.iso_code == 'US' %}selected{% endif %}>United States</option>
<option value="CN" {% if localization.country.iso_code == 'CN' %}selected{% endif %}>China</option>
<option value="HK" {% if localization.country.iso_code == 'HK' %}selected{% endif %}>Hong Kong</option>
<option value="TW" {% if localization.country.iso_code == 'TW' %}selected{% endif %}>Taiwan</option>
</select>
<button type="submit" style="padding: 10px;background: #a72727d4;color: white;">Submit</button>
</form>
<div class="cart__template {{ no_ajax_class }} {{ hide_quantity }} {{ section.settings.bg }}"
data-cart-message-container
data-section-id="{{ section.id }}"
data-section-type="cart"
data-ajax-disable="{{ ajax_disable }}"
style="--PT: {{ section.settings.padding_top }}px; --PB: {{ section.settings.padding_bottom }}px;">
{% comment %} Cart is empty {% endcomment %}
<div class="cart__empty__page {{ empty_init }}" data-cart-empty>
{% render 'cart-empty' %}
</div>
{% comment %} Cart is full {% endcomment %}
<div class="{{ section.settings.width }} section-padding {{ full_init }}" data-cart-form data-cart-loading>
<form action="{% if is_us_store or checkHadSubscribe %}{{ routes.cart_url }}{% else %}https://lif.abovegem.com:8043/shopify/checkout?shopify_cart_url={{ routes.cart_url }}{% endif %}" method="post" novalidate class="cart" id="reg__cart__form">
<h3 class="cart__page__title body-size-8">{{ 'cart.general.title' | t }}</h3>
<div class="errors" data-form-errors style="display: none;"></div>
<div class="cart__items__grid cart__heading__wrapper">
<div class="cart__heading__back">
<!--
<a href="{{ settings.cart_continue_browsing | default: routes.all_products_collection_url }}" class="cart__heading cart__return">
{% render 'icon-arrow-long-left' %}
&nbsp;
{{ 'cart.general.continue_browsing' | t }}
</a>
-->
</div>
<div class="cart__items__price">
<p class="cart__heading">{{ 'cart.label.price' | t }}</p>
</div>
<div class="cart__items__quantity">
<p class="cart__heading">{{ 'cart.label.quantity' | t }}</p>
</div>
<div class="cart__items__total">
<p class="cart__heading">{{ 'cart.label.total' | t }}</p>
</div>
</div>
<div class="template__cart__body">
<div class="errors" data-form-errors style="display: none;"></div>
<div data-cart-form>
{% comment %}
The following snippet is refreshed via ajax with
cart.items.liquid when the quantity is adjusted.
{% endcomment %}
<div data-line-items>
{% render 'cart-line-items' %}
</div>
</div>
<div class="template__cart__footer{% if additional_checkout_buttons and settings.cart_show_additional_buttons %} template__cart__footer--additional_buttons{% endif %}" data-cart-bottom>
<div class="cart__footer__notes">
{%- if settings.cart_notes_enable -%}
<label class="cart__notes__label" for="CartSpecialInstructions">{{ 'cart.general.note' | t }}</label>
<textarea name="note" class="input-full" id="CartSpecialInstructions" data-cart-note>{{ cart.note }}</textarea>
{%- endif -%}
</div>
<div class="cart__footer__shipping">
{%- if settings.cart_shipping_enable -%}
{% render 'cart-shipping' %}
{%- endif -%}
</div>
<div class="cart__footer__total">
{% if settings.cart_custom_message_enable and settings.cart_custom_message_text != blank %}
<div class="cart__message cart__message--custom">
{{ settings.cart_custom_message_text }}
</div>
{% endif %}
<div class="cart__page__shipping">
{% assign free_shipping_text = block.settings.message | default: settings.message %}
{% assign is_enable = false %}
{% assign show_wheel = true %}
{% assign font_size_class = font_size_class | default: '' %}
{% if block.settings.show_wheel == false %}
{% assign show_wheel = false %}
{% endif %}
{% if block.settings.message != blank %}
{% assign is_enable = true %}
{% endif %}
{% if settings.show_free_shipping_message and settings.free_shipping_limit != blank and free_shipping_text != blank %}
{% assign is_enable = true %}
{% endif %}
{% if is_enable %}
{% assign limit = settings.free_shipping_limit | plus: 0 %}
{% assign limit_currency = limit | times: 100 %}
{% assign subtotal_without_currency = cart.total_price | plus: 0 | divided_by: 100 %}
{% capture left_to_spend %}
<span data-left-to-spend class="strong">
{% if settings.currency_code_enable %}
{{ limit_currency | minus: cart.total_price | money_with_currency }}
{% else %}
{{ limit_currency | minus: cart.total_price | money_without_trailing_zeros }}
{% endif %}
</span>
{% endcapture %}
{% assign free_shipping_message = free_shipping_text | replace: '||amount||', left_to_spend %}
{% assign qualified_shipping_message = 'cart.general.qualified_shipping_message' | t %}
{% assign class_message = '' %}
{% if subtotal_without_currency >= limit %}
{% if qualified_shipping_message != blank %}
{% assign class_message = 'is-success' %}
{% else %}
{% assign class_message = 'is-hidden' %}
{% endif %}
{% elsif subtotal_without_currency == 0 %}
{% comment %} {% assign class_message = 'is-hidden' %} {% endcomment %}
{% endif %}
<p class="cart__message {{ class_message }} {{ font_size_class }}" data-cart-message="{% if qualified_shipping_message != blank %}true{% else %}false{% endif %}" data-limit="{{ limit }}">
{% if show_wheel %}
{% assign percent = limit | minus: subtotal_without_currency | times: 100 | divided_by: limit %}
{% assign percent = 100 | minus: percent %}
{% if percent > 100 %}
{% assign percent = 100 %}
{% endif %}
<small class="cart__graph">
{% for i in (1..6) %}
<small class="cart__graph-dot cart__graph-dot--{{ i }}"></small>
{% endfor %}
{%- assign stroke_dashoffset = '87.96459430051421' -%}
{%- if settings.cart_style == 'compatible' -%}
{%- assign math_pi = 3.14159265359 -%}
{%- assign stroke_circumference = 28 | times: math_pi -%}
{%- assign stroke_calculate = percent | times: stroke_circumference -%}
{%- assign stroke_calculate = stroke_calculate | divided_by: 100 | divided_by: 2 -%}
{%- assign stroke_dashoffset = stroke_circumference | minus: stroke_calculate -%}
{%- endif -%}
<svg height="18" width="18">
<circle r="7" cx="9" cy="9" />
<circle class="cart__graph-progress" stroke-dasharray="87.96459430051421 87.96459430051421" style="stroke-dashoffset: {{ stroke_dashoffset }}" data-cart-progress data-percent="{{ percent }}" r="7" cx="9" cy="9" />
</svg>
</small>
{% endif %}
{% if qualified_shipping_message != blank %}
<span class="cart__message-success">{{ qualified_shipping_message }}</span>
{% endif %}
<span class="cart__message-default">
{{ free_shipping_message }}
</span>
</p>
{% endif %}
</div>
<div class="page__footer__subtotal" data-cart-subtotal>
{% render 'cart-subtotal' %}
</div>
<p>
<span class="cart__footer__label">{{ 'cart.general.subtotal' | t }}</span>
<span class="cart__footer__value" data-cart-final>
{{ cart.total_price | money_with_currency }}
</span>
</p>
<p class="cart__footer__small">{{ 'cart.general.shipping_at_checkout' | t }}</p>
</div>
<div class="cart__footer__checkout">
{% if is_us_store or checkHadSubscribe %}
<button name="continue" class="btn btn--primary btn--large continue__button" style="display: none;">
{{ 'cart.general.continue' | t }}
</button>
<button type="submit" name="checkout" class="btn btn--primary btn--large first__checkout__button" style="display: none;">
{{ 'cart.general.checkout' | t }}
</button>
{% else %}
<button type="submit" name="checkout" class="btn btn--primary btn--large checkout__button">
{{ 'cart.general.checkout' | t }}
</button>
{% endif %}
</div>
<div class="cart__footer__update">
<span class="cart__update" data-update-button>
<span class="cart__update__icon">{% render 'icon-sync' %}</span>
<button type="submit" name="update" class="text-link">
{{ 'cart.general.update' | t }}
</button>
</span>
</div>
{% if additional_checkout_buttons and settings.cart_show_additional_buttons %}
<div class="cart__footer__additional">
<div class="additional-checkout-buttons">
{{ content_for_additional_checkout_buttons }}
</div>
</div>
{% endif %}
</div>
</div>
</form>
</div>
</div>
<!-- <script>
var $checkJquery0 = setInterval(function(){
if(typeof $ === 'function') {
clearInterval($checkJquery0);
console.log('get$');
//history.pushState(null, null, document.URL);
window.addEventListener('popstate', function(e){
console.log('popstate');
var registerWrap = $('#customer-simple-register');
if(registerWrap.length && registerWrap.is(':visible')) {
console.log('revalid...');
$('.regInput').trigger('focusout');
}
}, false);
}
}, 10);
</script> -->
{% schema %}
{
"settings": [
{
"type": "select",
"id": "bg",
"label": "Background color",
"default": "palette--light bg--neutral",
"options": [
{ "value": "palette--light bg--neutral", "label": "Default"},
{ "value": "palette--light bg--accent", "label": "Light"},
{ "value": "palette--dark bg--invert", "label": "Dark"},
{ "value": "palette--dark bg--invert--accent", "label": "Dark accent"},
{ "value": "palette--bright bg--bright", "label": "Bright"},
{ "value": "palette--bright bg--bright--accent", "label": "Bright accent"}
]
},
{
"type": "header",
"content": "Section spacing"
},
{
"type": "select",
"id": "width",
"label": "Width",
"default": "wrapper",
"options": [
{ "value": "wrapper--full", "label": "Full width padded" },
{ "value": "wrapper", "label": "Page width" },
{ "value": "wrapper--narrow", "label": "Page width narrow" }
]
},
{
"type": "range",
"id": "padding_top",
"min": 0,
"max": 180,
"step": 2,
"unit": "px",
"label": "Padding top",
"default": 36
},
{
"type": "range",
"id": "padding_bottom",
"min": 0,
"max": 180,
"step": 2,
"unit": "px",
"label": "Padding bottom",
"default": 36
}
]
}
{% endschema %}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment