import Checkout from './checkout'; import $ from 'jquery'; function Frontend() { var _this = this; this.init = function () { window.ppFormRecaptchaLoadCallback = this.recaptcha_processing; $('.pp-del-profile-avatar').on('click', this.delete_avatar); $('.pp-del-cover-image').on('click', this.delete_profile_image_cover); $(document).on('click', '.has-password-visibility-icon .pp-form-material-icons', this.toggle_password_visibility); // used by the WooCommerce module for toggling wc overridden checkout login form $(document.body).on('click', 'a.showlogin', function () { $(".pp_wc_login").slideToggle(); }); $(window).on('load resize ppress_updated_checkout', function () { _this.defaultUserProfileResponsive(); }); $(window).on('ppress_updated_checkout', function () { _this.recaptcha_processing(); }); $(document).on('click', '.ppress-confirm-delete', function (e) { e.preventDefault(); if (confirm(pp_ajax_form.confirm_delete)) { window.location.href = $(this).attr('href'); } }); this.submit_reload_form_on_billing_country_field_change(); // only enable if pp_disable_ajax_form filter is false. if (pp_ajax_form.disable_ajax_form === 'true') return; $(document).on('submit', 'form[data-pp-form-submit="login"]', this.ajax_login); $(document).on('submit', 'form[data-pp-form-submit="signup"]', this.ajax_registration); $(document).on('submit', 'form[data-pp-form-submit="passwordreset"]', this.ajax_password_reset); $(document).on('submit', 'form[data-pp-form-submit="editprofile"]', this.ajax_edit_profile); this.myaccount_password_strength_meter(); }; this.recaptcha_processing = function () { $('.pp-g-recaptcha').each(function (index, el) { var $site_key = $(el).attr('data-sitekey'); var $form = $(this).parents('.pp-form-container').find('form'); if ($(el).attr('data-type') === 'v3') { $form.find('input.pp-submit-form').on('click', function (e) { e.preventDefault(); _this._add_processing_label($form); grecaptcha.ready(function () { grecaptcha.execute($site_key, {action: 'form'}).then(function (token) { $form.find('[name="g-recaptcha-response"]').remove(); $form.append($('', { type: 'hidden', value: token, name: 'g-recaptcha-response' })); $form.trigger('submit'); }); }); }); } else { try { var widgetId1 = grecaptcha.render(el, { 'sitekey': $site_key, 'theme': $(el).attr('data-theme'), 'size': $(el).attr('data-size') }); } catch (error) { } $form.on('pp_form_submitted', function () { grecaptcha.reset(widgetId1) }); $(document).on('ppress_process_checkout_success_callback ppress_process_checkout_error_callback', function () { grecaptcha.reset(widgetId1) }); } }); }; this.toggle_password_visibility = function (e) { e.preventDefault(); var input = $(this).parents('.pp-form-field-input-textarea-wrap').find('.pp-form-field'); if (input.attr('type') === 'password') { input.attr('type', 'text'); $(this).text('visibility_off') } else { input.attr('type', 'password'); $(this).text('visibility') } }; this.submit_reload_form_on_billing_country_field_change = function () { $(document).on('change', '.pp-edit-profile-form-wrap select[name=ppress_billing_country]', function (e) { $(document).on('pp_form_edit_profile_success', function () { window.location.reload(); }); $(this).closest('form').find('input.pp-submit-form').trigger('click'); }); }; this.ajax_edit_profile = function (e) { if (typeof window.FormData === 'undefined' || !window.FormData) return; e.preventDefault(); var $editprofile_form = $('form[data-pp-form-submit="editprofile"]'); var melange_id = _this.get_melange_id($editprofile_form); var formData = new FormData(this); formData.append("action", "pp_ajax_editprofile"); formData.append("nonce", pp_ajax_form.nonce); formData.append("melange_id", melange_id); // remove any prior edit profile error. $('.profilepress-edit-profile-status').remove(); $('.profilepress-edit-profile-success').remove(); // remove any prior status message. Fixes removal of message with custom class. if ("" !== window.edit_profile_msg_class) { $('.' + window.edit_profile_msg_class).remove(); } _this._add_processing_label($editprofile_form); $.post({ url: pp_ajax_form.ajaxurl, data: formData, cache: false, contentType: false, enctype: 'multipart/form-data', processData: false, dataType: 'json', success: function (response) { $editprofile_form.trigger('pp_form_submitted'); $editprofile_form.trigger('pp_form_edit_profile_success', [$editprofile_form]); if ("avatar_url" in response && response.avatar_url !== '') { $("img[data-del='avatar'], img.pp-user-avatar").attr('src', response.avatar_url); // remove the picture upload path text. $('input[name=eup_avatar]', $editprofile_form).val(''); } if ("cover_image_url" in response && response.cover_image_url !== '') { $("img[data-del='cover-image'], img.pp-user-cover-image").attr('src', response.cover_image_url); // remove the picture upload path text. $('input[name=eup_cover_image]', $editprofile_form).val(''); $('.profilepress-myaccount-has-cover-image', $editprofile_form).show(); $('.profilepress-myaccount-cover-image-empty', $editprofile_form).hide(); } if ('message' in response) { // save the response error message class for early removal in next request. window.edit_profile_msg_class = $(response.message).attr('class'); $editprofile_form.before(response.message); } if ('redirect' in response) { $editprofile_form.trigger('pp_edit_profile_success_before_redirect'); window.location.assign(response.redirect) } _this._remove_processing_label($editprofile_form); } }, 'json'); }; this.ajax_password_reset = function (e) { e.preventDefault(); var $passwordreset_form = $(this), melange_id = _this.get_melange_id($passwordreset_form), is_tab_widget = $passwordreset_form.find('input[name="is-pp-tab-widget"]').val() === 'true', ajaxData = { action: 'pp_ajax_passwordreset', // if this is melange, we need it ID thus "&melange_id". data: $(this).serialize() + '&melange_id=' + melange_id }; _this._remove_status_notice(); $passwordreset_form.parents('.pp-tab-widget-form').prev('.pp-tab-status').remove(); _this._add_processing_label($passwordreset_form); $.post(pp_ajax_form.ajaxurl, ajaxData, function (response) { $passwordreset_form.trigger('pp_form_submitted'); // remove the processing label and do nothing if 0 is returned which perhaps means the user is // already logged in. if (typeof response !== 'object') { return _this._remove_processing_label($passwordreset_form); } if ('message' in response) { $passwordreset_form.trigger('pp_password_reset_status'); if (is_tab_widget) { // tab widget has its own class for status notice/message which is pp-tab-status thus the replacement. var notice = response.message.replace('profilepress-reset-status', 'pp-tab-status'); $passwordreset_form.parents('.pp-tab-widget-form').before(notice); } else if ($passwordreset_form.parents('.lucidContainer').length > 0) { $passwordreset_form.parents('.lucidContainer').before(response.message) } else { $passwordreset_form.before(response.message); } if ('status' in response && response.status === true) { $passwordreset_form.hide(); } $('input[name="user_login"]', $passwordreset_form).val(''); } _this._remove_processing_label($passwordreset_form); }, 'json'); }; this.ajax_registration = function (e) { if (typeof window.FormData === 'undefined' || !window.FormData) return; e.preventDefault(); var $signup_form = $(this), melange_id = _this.get_melange_id($signup_form), formData = new FormData(this), is_tab_widget = $signup_form.find('input[name="is-pp-tab-widget"]').val() === 'true'; formData.append("action", "pp_ajax_signup"); formData.append("melange_id", melange_id); _this._remove_status_notice(); $signup_form.parents('.pp-tab-widget-form').prev('.pp-tab-status').remove(); _this._add_processing_label($signup_form); $.post({ url: pp_ajax_form.ajaxurl, data: formData, cache: false, contentType: false, enctype: 'multipart/form-data', processData: false, dataType: 'json', success: function (response) { $signup_form.trigger('pp_form_submitted'); // remove the processing label and do nothing if 0 is returned which perhaps means the user is // already logged in. if (typeof response !== 'object') { return _this._remove_processing_label($signup_form); } if ('message' in response) { // backward compat. To be removed in future $signup_form.trigger('pp_registration_error', [response]); $signup_form.trigger('pp_registration_ajax_response', [response]); if (is_tab_widget) { // tab widget has its own class for status notice/message which is pp-tab-status thus the replacement. var notice = response.message.replace('profilepress-reg-status', 'pp-tab-status'); $signup_form.parents('.pp-tab-widget-form').before(notice); } // if lucid tab widget else if ($signup_form.parents('.lucidContainer').length > 0) { $signup_form.parents('.lucidContainer').before(response.message) } else { $signup_form.before(response.message); } } else if ('redirect' in response) { $signup_form.trigger('pp_registration_success', [response]); window.location.assign(response.redirect) } _this._remove_processing_label($signup_form); } }); }; this.ajax_login = function (e) { e.preventDefault(); var $login_form = $(this), ajaxData = {action: 'pp_ajax_login', data: $(this).serialize()}, is_tab_widget = $login_form.find('input[name="is-pp-tab-widget"]').val() === 'true'; _this._remove_status_notice(); _this._add_processing_label($login_form); $.post(pp_ajax_form.ajaxurl, ajaxData, function (response) { $login_form.trigger('pp_form_submitted'); // remove the processing label and do nothing if 0 is returned which perhaps means the user is // already logged in. // we are checking for null because response can be null hence we want the processing label removed. if (response === null || typeof response !== 'object') { return _this._remove_processing_label($login_form); } if ('success' in response && response.success === true && 'redirect' in response) { $login_form.trigger('pp_login_form_success'); window.location.assign(response.redirect) } else { $login_form.trigger('pp_login_form_error'); if ('code' in response && response.code == 'pp2fa_auth_code_invalid') { $login_form.find('.pp-2fa').show(); } if (is_tab_widget) { // tab widget has its own class for status notice/message which is pp-tab-status thus the replacement. var notice = response.message.replace('profilepress-login-status', 'pp-tab-status'); $login_form.parents('.pp-tab-widget-form').before(notice); } // if lucid tab widget else if ($login_form.parents('.lucidContainer').length > 0) { $login_form.parents('.lucidContainer').before(response.message) } else { $login_form.before(response.message); } } _this._remove_processing_label($login_form); }, 'json'); }; this.delete_avatar = function (e) { e.preventDefault(); var button_text = $(this).text(), this_obj = $(this); e.preventDefault(); if (confirm(pp_ajax_form.confirm_delete)) { if (this_obj.is('button')) { this_obj.text(pp_ajax_form.deleting_text); } $.post(pp_ajax_form.ajaxurl, { action: 'pp_del_avatar', nonce: pp_ajax_form.nonce }).done(function (data) { if ('error' in data && data.error === 'nonce_failed') { this_obj.text(button_text); alert(pp_ajax_form.deleting_error); } else if ('success' in data) { $("img[data-del='avatar']").attr('src', data.default); this_obj.remove(); } }); } }; this.delete_profile_image_cover = function (e) { e.preventDefault(); var button_text = $(this).text(), this_obj = $(this); e.preventDefault(); if (confirm(pp_ajax_form.confirm_delete)) { if (this_obj.is('button')) { this_obj.text(pp_ajax_form.deleting_text); } $.post(pp_ajax_form.ajaxurl, { action: 'pp_del_cover_image', nonce: pp_ajax_form.nonce }).done(function (data) { if ('error' in data && data.error === 'nonce_failed') { this_obj.text(button_text); alert(pp_ajax_form.deleting_error); } if ('success' in data) { if (data.default !== '') { $("img[data-del='cover-image']").attr('src', data.default); this_obj.parent().find('.profilepress-myaccount-has-cover-image').show(); this_obj.parent().find('.profilepress-myaccount-cover-image-empty').hide(); } else { this_obj.parent().find('.profilepress-myaccount-has-cover-image').hide(); this_obj.parent().find('.profilepress-myaccount-cover-image-empty').show(); } this_obj.remove(); } }); } }; this.get_melange_id = function ($scope) { var melange_id = $('input.pp_melange_id', $scope).val(); return melange_id === undefined ? '' : melange_id; }; this._add_processing_label = function (obj) { var submit_btn = obj.find('input[data-pp-submit-label]'); submit_btn.attr({ 'value': submit_btn.data('pp-processing-label'), 'disabled': 'disabled', }).css("opacity", ".4"); }; this._remove_processing_label = function (obj) { var submit_btn = obj.find('input[data-pp-submit-label]'); submit_btn.attr('value', submit_btn.data('pp-submit-label')); submit_btn.attr({ 'value': submit_btn.data('pp-submit-label'), // set to null to remove. See https://api.jquery.com/attr/#attr-attributeName-value 'disabled': null, }).css("opacity", ""); }; this._remove_status_notice = function () { $('.profilepress-login-status,.pp-tab-status,.profilepress-edit-profile-success,.profilepress-edit-profile-status,.pp-reset-success,.profilepress-reset-status,.profilepress-reg-status').remove(); }; this.defaultUserProfileResponsive = function () { $('.ppress-default-profile, .pp-member-directory, .ppress-checkout__form').each(function () { var obj = $(this), element_width = obj.width(); if (element_width <= 340) { obj.removeClass('ppressui340'); obj.removeClass('ppressui500'); obj.removeClass('ppressui800'); obj.removeClass('ppressui768'); obj.removeClass('ppressui960'); obj.addClass('ppressui340'); } else if (element_width <= 500) { obj.removeClass('ppressui340'); obj.removeClass('ppressui500'); obj.removeClass('ppressui768'); obj.removeClass('ppressui800'); obj.removeClass('ppressui960'); obj.addClass('ppressui500'); } else if (element_width <= 768) { obj.removeClass('ppressui340'); obj.removeClass('ppressui500'); obj.removeClass('ppressui768'); obj.removeClass('ppressui800'); obj.removeClass('ppressui960'); obj.addClass('ppressui768'); } else if (element_width <= 800) { obj.removeClass('ppressui340'); obj.removeClass('ppressui500'); obj.removeClass('ppressui768'); obj.removeClass('ppressui800'); obj.removeClass('ppressui960'); obj.addClass('ppressui800'); } else if (element_width <= 960) { obj.removeClass('ppressui340'); obj.removeClass('ppressui500'); obj.removeClass('ppressui768'); obj.removeClass('ppressui800'); obj.removeClass('ppressui960'); obj.addClass('ppressui960'); } else if (element_width > 960) { obj.removeClass('ppressui340'); obj.removeClass('ppressui500'); obj.removeClass('ppressui768'); obj.removeClass('ppressui800'); obj.removeClass('ppressui960'); } obj.css('opacity', 1); }); $('.ppress-default-profile-cover, .ppress-default-profile-cover-e').each(function () { var elem = $(this), calcHeight = Math.round(elem.width() / elem.data('ratio')) + 'px'; elem.height(calcHeight); elem.find('.ppress-dpf-cover-add').height(calcHeight); }); }; this.myaccount_password_strength_meter = function () { function checkPasswordStrength($pass1, $pass2, $strengthResult, $submitButton, blacklistArray) { var pass1 = $pass1.val(); var pass2 = $pass2.val(); // Reset the form & meter $submitButton.attr('disabled', 'disabled'); $strengthResult.removeClass('short bad good strong'); // Extend our blacklist array with those from the inputs & site data blacklistArray = blacklistArray.concat(wp.passwordStrength.userInputDisallowedList()); // Get the password strength var strength = wp.passwordStrength.meter(pass1, blacklistArray, pass2); // Add the strength meter results switch (strength) { case 2: $strengthResult.addClass('bad').html(pwsL10n.bad); break; case 3: $strengthResult.addClass('good').html(pwsL10n.good); break; case 4: $strengthResult.addClass('strong').html(pwsL10n.strong); break; case 5: $strengthResult.addClass('short').html(pwsL10n.mismatch); break; default: $strengthResult.addClass('short').html(pwsL10n.short); } // The meter function returns a result even if pass2 is empty, // enable only the submit button if the password is strong and // both passwords are filled up if (myacPwsL10n.disable_enforcement === 'false' && 4 === strength && '' !== pass2.trim()) { $submitButton.removeAttr('disabled'); } return strength; } $(function () { var password1 = $('input[name=password_new]'); var password2 = $('input[name=password_confirm_new]'); var submitButton = $('input[name=submit-form]'); var strengthMeterId = $('#pp-pass-strength-result'); // Binding to trigger checkPasswordStrength $('body').on('keyup', 'input[name=password_new], input[name=password_confirm_new]', function (event) { checkPasswordStrength( password1, // First password field password2, // Second password field strengthMeterId, // Strength meter submitButton, // Submit button [] // Blacklisted words ); } ); }); }; } (new Frontend()).init(); (new Checkout()).init(); https://dichvuvesinhnha.com.vn/post-sitemap.xml 2025-06-21T19:44:49+00:00 https://dichvuvesinhnha.com.vn/page-sitemap.xml 2025-06-05T03:19:14+00:00 https://dichvuvesinhnha.com.vn/product-sitemap.xml 2025-06-24T02:55:48+00:00 https://dichvuvesinhnha.com.vn/category-sitemap.xml 2025-06-21T19:44:49+00:00 https://dichvuvesinhnha.com.vn/local-sitemap.xml 2021-12-13T14:10:22+00:00