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();
Lau nhà sạch đúng nghĩa là không chỉ sạch bởi vẻ bề ngoài mà sàn nhà còn cần ngát hương thơm. Vậy thì đã bao giờ các bạn thắc mắc tại sao khi lau nhà mà sàn vẫn có mùi tanh hay hôi chưa? Hãy cùng YourCare tìm hiểu nguyên nhân và một số mẹo khử mùi tanh và hôi trên sàn nhà nhé !
Điều đầu tiên là cần chú ý tới cây lau nhà
Một trong những nguyên nhân khá là thiết yếu khiến sàn nhà có mùi tanh hay hôi đó chính là cây lau sàn chưa thực sự sạch sẽ. Bởi lẽ, việc lau sàn nếu cây lau không sạch chỉ khiến vết lau ngày càng bị bẩn đi. Nên dù cho bạn có lau kỹ càng cỡ nào đi chăng nữa thì chắc chắn ngôi nhà của bạn vẫn ám mùi hôi từ chính nó mà thôi. Vậy thì đầu tiên hãy bắt tay ngay vào việc làm sạch sẽ cây lau nhà đi nào.
Vật dụng cần thiết để tiến hành vệ sinh cây lau nhà là một cái xô, nước và giấm. Bạn cần giặt kỹ và sạch bông lau của cây lau sàn bằng nước sạch sau đó sẽ đem ngâm xô nước trong hỗn hợp giấm – nước với tỉ lệ 1 : 1 qua một đêm. Hôm sau, chỉ cần giặt lại bằng nước nóng rồi phơi khô dưới ánh nắng là bạn có thể đem cây lau đi lau nhà được rồi đấy!
Để ý về cây lau sàn – YourCare
Thứ hai là sử dụng một vài công thức nước lau sàn để khử sạch mùi tanh
Công thức với chanh: Nguyên liệu để thực hiện cách lau nhà sạch bóng khá là đơn giản. Bạn chỉ cần chuẩn bị nguyên liệu bao gồm một cốc dầu oliu nhỏ hoặc dầu jojoba cùng nửa cốc nước cốt chanh. Sau khi tiến hành trộn những nguyên liệu trên với nhau bạn đổ vào bình xịt sau đó xịt dung dịch lên bề mặt sàn khu vực bạn cần làm sạch rồi dùng khăn lau lại. Công thức khử mùi với chanh rất thích hợp để lau sàn gỗ bởi nó giúp đánh bóng bề mặt sàn nhà cực tốt.
Công thức với giấm: giấm có thể là một nguyên liệu để lau sàn rất hiệu quả. Bạn chỉ cần trộn hỗn hợp giấm và nước theo tỉ lệ 1 : 1 gồm 2 ly giấm và 2 ly nước và sau đó phun hay trải đều xuống sàn nhà trước khi lau, sau đó sử dụng cây lau nhà sạch lau lại với nước sạch.
Công thức với Baking Soda có thể giúp khử sạch mùi hôi và tanh của nền nhà. Có thể sử dụng chanh cùng với hai thìa Baking Soda để tạo hỗn hợp và lau lại bề mặt nhà.
Sử dụng dung dịch lau sàn – YourCare
Bên cạnh đó, sử dụng dịch vụ vệ sinh cũng là giải pháp tối ưu
YourCare cung cấp tất cả các dịch vụ vệ sinh nhằm đáp ứng mọi nhu cầu của khách hàng.
Đến với dịch vụ của YOURCARE khách hàng sẽ hoàn toàn yên tâm về chất lượng, giá cả, thái độ và phong cách làm việc chuyên nghiệp của chúng tôi, là một Cty uy tín, chúng tôi luôn đặt sự hài lòng của khách hàng lên hàng đầu. Khách hàng gọi và đặt lịch dịch vụ bất kể lúc nào chúng tôi đều đáp ứng, làm việc cả ngày nghỉ, ngày chủ nhật, làm việc ngoài giờ hành chính, làm ca đêm và tăng ca.
Xem tất cả các dịch vụ vệ sinh của YourCare -> Tại đây
Hãy liên hệ trực tiếp hotline 0931.144.818 để được tư vấn và hỗ trợ về dịch vụ vệ sinh nhanh chóng.