sharetribe/sharetribe

View on GitHub
app/assets/javascripts/admin2/validator.js

Summary

Maintainability
B
4 hrs
Test Coverage
jQuery.extend(jQuery.validator.defaults,
    {
        errorClass: 'attention',
        errorElement: 'small',
        errorPlacement: function(error, element) {
            var hint = $(element).next('small.form-text:not(.attention)');
            if (hint.length) {
                error.insertAfter(hint);
            } else if ($(element).parents('.input-group').length && $(element).parents('.form-group').length) {
                $(element).parents('.form-group').append(error)
            } else {
                error.insertAfter(element);
            }
            error.addClass('form-text');
            if (element.hasClass('small-attention')) {
              error.addClass('small-margin');
            }
        },
        highlight: function(element, errorClass, validClass) {
            $(element).removeClass(validClass).addClass(errorClass).next('small.attention').addClass('form-text');
        },
        unhighlight: function(element, errorClass, validClass) {
            $(element).removeClass(errorClass).addClass(validClass).next('small.attention').removeClass('form-text');
            if ($(element).parents('.multiple-languages-input').length) {
                $(element).parents('.multiple-languages-input').find('.input-group-text').removeClass('attention');
            }
        }
    });

$.validator.addMethod("regex",
    function(value, element, regexp) {
        var re = new RegExp(regexp);
        return re.test(value);
    }
);

$.validator.addMethod("valid_listing",
    function(value, element, param) {
       var url = $(element).data('url'),
           id = $(element).val(),
           result = false;

        $.ajax({
            url : url,
            data: { id: id },
            type : 'get',
            async : false,
            success : function(data) {
                result = data['listing_exist'];
            }
        });

        return result;
    }
);

$.validator.addMethod('count-validation', function(value, element, params) {
    var name = $(element).data("counter-name");
    var count = $(".edit-dropdown-list-option-trigger:visible").length;
    var min = $(element).data("min");
    var max = $(element).data("max");
    if (max) {
        return count <= max;
    } else {
        return count >= min;
    }
});

$.validator.addMethod("allowed_template_variables", function(value, element, param) {
    var variableRegex  = /\{\{(.*?)\}\}/g,
        variables = _.map(value.match(variableRegex), function(x) { return x.replace(/[\{\}]/g, '') }),
        allowedVariables = param.split(',');
    return variables.every(function(x) { return allowedVariables.includes(x) });
});