PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.1.7
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.1.7
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.1.7, at assets/js/dist/frontend/checkout.js

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