var ComponentsFormTools = function () { var handleBootstrapMaxlength = function() { $('#maxlength_defaultconfig').maxlength({ limitReachedClass: "label label-danger", }) $('#maxlength_thresholdconfig').maxlength({ limitReachedClass: "label label-danger", threshold: 20 }); $('#maxlength_alloptions').maxlength({ alwaysShow: true, warningClass: "label label-success", limitReachedClass: "label label-danger", separator: ' out of ', preText: 'You typed ', postText: ' chars available.', validate: true }); $('#maxlength_textarea').maxlength({ limitReachedClass: "label label-danger", alwaysShow: true }); $('#maxlength_placement').maxlength({ limitReachedClass: "label label-danger", alwaysShow: true, placement: App.isRTL() ? 'top-right' : 'top-left' }); } var handlePasswordStrengthChecker = function () { var initialized = false; var input = $("#password_strength"); input.keydown(function () { if (initialized === false) { // set base options input.pwstrength({ raisePower: 1.4, minChar: 8, verdicts: ["Weak", "Normal", "Medium", "Strong", "Very Strong"], scores: [17, 26, 40, 50, 60] }); // add your own rule to calculate the password strength input.pwstrength("addRule", "demoRule", function (options, word, score) { return word.match(/[a-z].[0-9]/) && score; }, 10, true); // set as initialized initialized = true; } }); } var handleUsernameAvailabilityChecker1 = function () { var input = $("#username1_input"); $("#username1_checker").click(function (e) { var pop = $(this); if (input.val() === "") { input.closest('.form-group').removeClass('has-success').addClass('has-error'); pop.popover('destroy'); pop.popover({ 'placement': (App.isRTL() ? 'left' : 'right'), 'html': true, 'container': 'body', 'content': 'Please enter a username to check its availability.', }); // add error class to the popover pop.data('bs.popover').tip().addClass('error'); // set last poped popover to be closed on click(see App.js => handlePopovers function) App.setLastPopedPopover(pop); pop.popover('show'); e.stopPropagation(); // prevent closing the popover return; } var btn = $(this); btn.attr('disabled', true); input.attr("readonly", true). attr("disabled", true). addClass("spinner"); $.post('../demo/username_checker.php', { username: input.val() }, function (res) { btn.attr('disabled', false); input.attr("readonly", false). attr("disabled", false). removeClass("spinner"); if (res.status == 'OK') { input.closest('.form-group').removeClass('has-error').addClass('has-success'); pop.popover('destroy'); pop.popover({ 'html': true, 'placement': (App.isRTL() ? 'left' : 'right'), 'container': 'body', 'content': res.message, }); pop.popover('show'); pop.data('bs.popover').tip().removeClass('error').addClass('success'); } else { input.closest('.form-group').removeClass('has-success').addClass('has-error'); pop.popover('destroy'); pop.popover({ 'html': true, 'placement': (App.isRTL() ? 'left' : 'right'), 'container': 'body', 'content': res.message, }); pop.popover('show'); pop.data('bs.popover').tip().removeClass('success').addClass('error'); App.setLastPopedPopover(pop); } }, 'json'); }); } var handleUsernameAvailabilityChecker2 = function () { $("#username2_input").change(function () { var input = $(this); if (input.val() === "") { input.closest('.form-group').removeClass('has-error').removeClass('has-success'); $('.fa-check, fa-warning', input.closest('.form-group')).remove(); return; } input.attr("readonly", true). attr("disabled", true). addClass("spinner"); $.post('../demo/username_checker.php', { username: input.val() }, function (res) { input.attr("readonly", false). attr("disabled", false). removeClass("spinner"); // change popover font color based on the result if (res.status == 'OK') { input.closest('.form-group').removeClass('has-error').addClass('has-success'); $('.fa-warning', input.closest('.form-group')).remove(); input.before(''); input.data('bs.popover').tip().removeClass('error').addClass('success'); } else { input.closest('.form-group').removeClass('has-success').addClass('has-error'); $('.fa-check', input.closest('.form-group')).remove(); input.before(''); input.popover('destroy'); input.popover({ 'html': true, 'placement': (App.isRTL() ? 'left' : 'right'), 'container': 'body', 'content': res.message, }); input.popover('show'); input.data('bs.popover').tip().removeClass('success').addClass('error'); App.setLastPopedPopover(input); } }, 'json'); }); } return { //main function to initiate the module init: function () { handleBootstrapMaxlength(); handlePasswordStrengthChecker(); handleUsernameAvailabilityChecker1(); handleUsernameAvailabilityChecker2(); } }; }(); if (App.isAngularJsApp() === false) { jQuery(document).ready(function() { ComponentsFormTools.init(); // init metronic core componets }); }