PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.2.0
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.2.0
4.4.8 4.4.7 4.4.6 4.4.5 4.4.4 4.4.3 4.4.2 4.4.1 4.4.0 4.3.9.1 4.3.9 4.3.8 4.3.7 4.1.6.9 4.1.6.9.1 4.1.6.9.2 4.1.6.9.3 4.1.6.9.4 4.1.7 4.1.7.1 4.1.7.2 4.1.7.3 4.1.7.3.1 4.1.7.3.2 4.2.0 All 139 releases
learnpress / assets / js / dist / frontend / checkout.js

checkout.js in LearnPress – WordPress LMS Plugin for Create and Sell Online Courses 4.2.0, at assets/js/dist/frontend/checkout.js

274 lines 10.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /******/ (() => { // webpackBootstrap
2 var __webpack_exports__ = {};
3 /*!*************************************************!*\
4 !*** ./assets/src/apps/js/frontend/checkout.js ***!
5 \*************************************************/
6 (function ($, settings) {
7 'use strict';
8
9 if (window.LP === undefined) {
10 window.LP = {};
11 }
12
13 /**
14 * Checkout
15 *
16 * @param options
17 */
18 const Checkout = LP.Checkout = function (options) {
19 const $formCheckout = $('#learn-press-checkout-form'),
20 $formLogin = $('#learn-press-checkout-login'),
21 $formRegister = $('#learn-press-checkout-register'),
22 $payments = $('.payment-methods'),
23 $buttonCheckout = $('#learn-press-checkout-place-order'),
24 $checkoutEmail = $('input[name="guest_email"]');
25 let selectedMethod = '';
26 if (String.prototype.isEmail === undefined) {
27 String.prototype.isEmail = function () {
28 return new RegExp('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$').test(this);
29 };
30 }
31 const needPayment = function () {
32 return $payments.length > 0;
33 };
34 const selectedPayment = function () {
35 return $payments.find('input[name="payment_method"]:checked').val();
36 };
37 const isLoggedIn = function () {
38 return $formCheckout.find('input[name="checkout-account-switch-form"]:checked').length = 0;
39 };
40 const getActiveFormData = function () {
41 const formName = $formCheckout.find('input[name="checkout-account-switch-form"]:checked').val();
42 const $form = $('#checkout-account-' + formName);
43 return $form.serializeJSON();
44 };
45 const getPaymentData = function () {
46 return $('#checkout-payment').serializeJSON();
47 };
48 const getPaymentNote = function () {
49 return $('.learn-press-checkout-comment').serializeJSON();
50 };
51 const showErrors = function (errors) {
52 showMessage(errors);
53 const firstId = Object.keys(errors)[0];
54 $('input[name="' + firstId + '"]:visible').trigger('focus');
55 };
56 const _formSubmit = function (e) {
57 e.preventDefault();
58 if (needPayment() && !selectedPayment()) {
59 showMessage('Please select payment method', true);
60 return false;
61 }
62 let formData = {};
63 if (!isLoggedIn()) {
64 formData = $.extend(formData, getActiveFormData(), getPaymentNote());
65 }
66 formData = $.extend(formData, getPaymentData());
67 removeMessage();
68 const btnText = $buttonCheckout.text();
69 const urlHandle = new URL(options.ajaxurl);
70 urlHandle.searchParams.set('lp-ajax', 'checkout');
71 $.ajax({
72 url: urlHandle,
73 dataType: 'html',
74 data: formData,
75 type: 'POST',
76 beforeSend() {
77 $('#learn-press-checkout-place-order').addClass('loading');
78 $buttonCheckout.html(options.i18n_processing);
79 },
80 success(response) {
81 response = LP.parseJSON(response);
82 if (response.messages) {
83 showErrors(response.messages);
84 } else if (response.message) {
85 showMessage('<div class="learn-press-message error">' + response.message + '</div>');
86 }
87 $('#learn-press-checkout-place-order').removeClass('loading');
88 if ('success' === response.result) {
89 if (response.redirect && response.redirect.match(/https?/)) {
90 $buttonCheckout.html(options.i18n_redirecting);
91 window.location = response.redirect;
92 }
93 } else {
94 $buttonCheckout.html(btnText);
95 }
96 },
97 error(jqXHR, textStatus, errorThrown) {
98 $('#learn-press-checkout-place-order').removeClass('loading');
99 showMessage('<div class="learn-press-message error">' + errorThrown + '</div>');
100 $buttonCheckout.html(btnText);
101 LP.unblockContent();
102 }
103 });
104 return false;
105 };
106 const _selectPaymentChange = function () {
107 const id = $(this).val(),
108 $selected = $payments.children().filter('.selected').removeClass('selected'),
109 buttonText = $selected.find('#payment_method_' + selectedMethod).data('order_button_text');
110 $selected.find('.payment-method-form').slideUp();
111 $selected.end().filter('#learn-press-payment-method-' + id).addClass('selected').find('.payment-method-form').hide().slideDown();
112 selectedMethod = $selected.find('payment_method').val();
113 if (buttonText) {
114 $buttonCheckout.html(buttonText);
115 }
116 };
117
118 /**
119 * Button to switch between mode login/register or place order
120 * in case user is not logged in and guest checkout is enabled.
121 */
122 const _guestCheckoutClick = function () {
123 const showOrHide = $formCheckout.toggle().is(':visible');
124 $formLogin.toggle(!showOrHide);
125 $formRegister.toggle(!showOrHide);
126 $('#learn-press-button-guest-checkout').toggle(!showOrHide);
127 };
128
129 /**
130 * Append messages into document.
131 *
132 * @param message
133 * @param wrap
134 */
135 const showMessage = function (message) {
136 let wrap = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
137 removeMessage();
138 if ($.isPlainObject(message)) {
139 Object.keys(message).reverse().forEach(id => {
140 const m = message[id];
141 let msg = Array.isArray(m) ? m[0] : m;
142 const type = Array.isArray(m) ? m[1] : '';
143 msg = '<div class="learn-press-message ' + (typeof type === 'string' ? type : '') + '">' + msg + '</div>';
144 $formCheckout.prepend(msg);
145 });
146 return;
147 }
148 if (wrap) {
149 message = '<div class="learn-press-message ' + (typeof wrap === 'string' ? wrap : '') + '">' + message + '</div>';
150 }
151 if (Array.isArray(message)) {
152 message.map(msg => $formCheckout.prepend('<div class="learn-press-message error">' + msg + '</div>'));
153 } else {
154 $formCheckout.prepend('<div class="learn-press-message error">' + message + '</div>');
155 }
156 $('html, body').animate({
157 scrollTop: $formCheckout.offset().top - 100
158 }, 1000);
159 $(document).trigger('learn-press/checkout-error');
160 };
161
162 /**
163 * Callback function for guest email.
164 *
165 * @private
166 */
167 const _checkEmail = function () {
168 if (!this.value.isEmail()) {
169 return;
170 }
171 this.timer && clearTimeout(this.timer);
172 $checkoutEmail.addClass('loading');
173 this.timer = setTimeout(function () {
174 $.post({
175 url: window.location.href,
176 data: {
177 'lp-ajax': 'checkout-user-email-exists',
178 email: $checkoutEmail.val()
179 },
180 success(response) {
181 const res = LP.parseJSON(response);
182 $checkoutEmail.removeClass('loading');
183 $('.lp-guest-checkout-output').remove();
184 if (res && res.output) {
185 $checkoutEmail.after(res.output);
186 }
187 }
188 });
189 }, 500);
190 };
191
192 /**
193 * Remove all messages
194 */
195 const removeMessage = function () {
196 $('.learn-press-error, .learn-press-notice, .learn-press-message').remove();
197 };
198
199 /**
200 * Callback function for showing/hiding register form.
201 *
202 * @param e
203 * @param toggle
204 */
205 const _toggleRegisterForm = function (e, toggle) {
206 toggle = $formRegister.find('.learn-press-form-register').toggle(toggle).is(':visible');
207 $formRegister.find('.checkout-form-register-toggle[data-toggle="show"]').toggle(!toggle);
208 e && (e.preventDefault(), _toggleLoginForm(null, !toggle));
209 };
210
211 /**
212 * Callback function for showing/hiding login form.
213 *
214 * @param e {Event}
215 * @param toggle {boolean}
216 * @private
217 */
218 const _toggleLoginForm = function (e, toggle) {
219 toggle = $formLogin.find('.learn-press-form-login').toggle(toggle).is(':visible');
220 $formLogin.find('.checkout-form-login-toggle[data-toggle="show"]').toggle(!toggle);
221 e && (e.preventDefault(), _toggleRegisterForm(null, !toggle));
222 };
223
224 /**
225 * Place order action
226 */
227 $buttonCheckout.on('click', function (e) {});
228 $('.lp-button-guest-checkout').on('click', _guestCheckoutClick);
229 $('#learn-press-button-cancel-guest-checkout').on('click', _guestCheckoutClick);
230 $checkoutEmail.on('keyup changex', _checkEmail).trigger('changex');
231 $payments.on('change select', 'input[name="payment_method"]', _selectPaymentChange);
232 $formCheckout.on('submit', _formSubmit);
233 $payments.children('.selected').find('input[name="payment_method"]').trigger('select');
234 $formLogin.on('click', '.checkout-form-login-toggle', _toggleLoginForm);
235 $formRegister.on('click', '.checkout-form-register-toggle', _toggleRegisterForm);
236 $formRegister.find('input').each(function () {
237 if (-1 !== $.inArray($(this).attr('type').toLowerCase(), ['text', 'email', 'number']) && $(this).val()) {
238 _toggleRegisterForm();
239 return false;
240 }
241 });
242 $formLogin.find('input:not([type="hidden"])').each(function () {
243 if (-1 !== $.inArray($(this).attr('type').toLowerCase(), ['text', 'email', 'number']) && $(this).val()) {
244 _toggleLoginForm();
245 return false;
246 }
247 });
248
249 // Show form if there is only one form Register or Login
250 if ($formRegister.length && !$formLogin.length) {
251 _toggleRegisterForm();
252 } else if (!$formRegister.length && $formLogin.length) {
253 _toggleLoginForm();
254 }
255 $formCheckout.on('change', 'input[name="checkout-account-switch-form"]', function () {
256 $(this).next().find('input:not([type="hidden"]):visible').first().trigger('focus');
257 }).on('change', '#guest_email', function () {
258 $formCheckout.find('#reg_email').val(this.value);
259 }).on('change', '#reg_email', function () {
260 $formCheckout.find('#guest_email').val(this.value);
261 });
262 setTimeout(function () {
263 $formCheckout.find('input:not([type="hidden"]):visible').first().trigger('focus');
264 }, 300);
265 };
266 $(document).ready(function () {
267 if (typeof lpCheckoutSettings !== 'undefined') {
268 LP.$checkout = new Checkout(lpCheckoutSettings);
269 }
270 });
271 })(jQuery);
272 /******/ })()
273 ;
274 //# sourceMappingURL=checkout.js.map