Advertisement
Guest User

Untitled

a guest
Aug 28th, 2014
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (function () {/// Выключить стандартную валидацию целых чисел - она не пропускает пробелы
  2.  
  3.     $.validator.addMethod("modelValidation", function (value, element) {
  4.         var $el = $(element);
  5.         var view = $el.closest("[data-id]");
  6.         if (view.length === 0) {
  7.             return true;
  8.         }
  9.  
  10.         var cid = view.attr("data-id");
  11.         var model = window.Validation.models[cid];
  12.         if (!model) {
  13.             return true;
  14.         }
  15.  
  16.         var actionName = $el.attr("data-bind") || $el.attr("name");
  17.  
  18.         var result = model.validateAttr.call(model, actionName, value);
  19.         if (result !== true) {
  20.             var validator = $el.closest("form").data().validator;
  21.             validator.settings.messages[$el.attr("name")].modelValidation = result;
  22.             $el.closest("form").data('validator', validator);
  23.  
  24.             var unobtrusive = $el.closest("form").data().unobtrusiveValidation;
  25.             unobtrusive.options.messages[$el.attr("name")].modelValidation = result;
  26.             $el.closest("form").data('unobtrusiveValidation', unobtrusive);
  27.  
  28.             return false;
  29.         }
  30.         return true;
  31.     });
  32.  
  33.     /**
  34.      * проверяет существование подобного логина в системе;
  35.      */
  36.     $.validator.addMethod("clientLogin", function (value, element) {
  37.         var validator = this;
  38.         var isNeeded = $(element).attr("data-val-clientLogin-need") || true;
  39.        
  40.         if (validator.optional(element)) {
  41.             return "dependency-mismatch";
  42.         }
  43.  
  44.         var previous = validator.previousValue(element);
  45.         if (!validator.settings.messages[element.name]) {
  46.             validator.settings.messages[element.name] = {};
  47.         }
  48.  
  49.         previous.originalMessage = validator.settings.messages[element.name].checkCashClosedGroup;
  50.  
  51.         if (validator.pending[element.name]) {
  52.             return "pending";
  53.         }
  54.         if (previous.old === value) {
  55.             return previous.valid;
  56.         }
  57.        
  58.         $(element).trigger('checkingEmailForExistStart');
  59.        
  60.         previous.old = value;
  61.         validator.startRequest(element);
  62.         var data = {
  63.             login: value
  64.         };
  65.        
  66.         $.ajax({
  67.             url: "/Agents/Clients/CheckLogin",
  68.             mode: "abort",
  69.             type: "GET",
  70.             port: "validate" + element.name,
  71.             dataType: "json",
  72.             data: data,
  73.             success: function (response) {
  74.                 if (response.Message) {
  75.                     validator.settings.messages[element.name].clientLogin = response.Message;
  76.  
  77.                 }
  78.                 var valid = (isNeeded == 'true') ? response.Status : !response.Status;
  79.                 if (valid) {
  80.                     var submitted = validator.formSubmitted;
  81.                     validator.prepareElement(element);
  82.                     validator.formSubmitted = submitted;
  83.                     validator.successList.push(element);
  84.                     validator.showErrors();
  85.                 } else {
  86.                     var errors = {};
  87.                     var message = validator.settings.messages[element.name].clientLogin;
  88.                     errors[element.name] = previous.message = $.isFunction(message) ? message(value) : message;
  89.                     validator.showErrors(errors);
  90.                 }
  91.                 previous.valid = valid;
  92.                 validator.stopRequest(element, valid);
  93.                 $(element).trigger('checkingEmailForExistStop');
  94.             }
  95.         });
  96.  
  97.         return "pending";
  98.     });
  99.  
  100.     $.validator.addMethod("loginbusy", function (value, element) {
  101.         var validator = this;
  102.         if (validator.optional(element)) {
  103.             return "dependency-mismatch";
  104.         }
  105.  
  106.         var previous = validator.previousValue(element);
  107.         if (!validator.settings.messages[element.name]) {
  108.             validator.settings.messages[element.name] = {};
  109.         }
  110.  
  111.         previous.originalMessage = validator.settings.messages[element.name].checkCashClosedGroup;
  112.  
  113.         if (validator.pending[element.name]) {
  114.             return "pending";
  115.         }
  116.         if (previous.old === value) {
  117.             return previous.valid;
  118.         }
  119.  
  120.         previous.old = value;
  121.         validator.startRequest(element);
  122.         var data = {
  123.             login: value
  124.         };
  125.         $(element).trigger('checkingForLoginBusyStart');
  126.         $.ajax({
  127.             url: "/Agents/Registration/CheckLoginAccessibility",
  128.             mode: "abort",
  129.             type: "GET",
  130.             port: "validate" + element.name,
  131.             dataType: "json",
  132.             data: data,
  133.             success: function (response) {
  134.                 validator.settings.messages[element.name].clientLogin = response.Message;
  135.                 if (response.Status) {
  136.                     if (response.Object){
  137.                         var submitted = validator.formSubmitted;
  138.                         validator.prepareElement(element);
  139.                         validator.formSubmitted = submitted;
  140.                         validator.successList.push(element);
  141.                         validator.showErrors();
  142.                     }
  143.                     else{
  144.                         var errors = {};
  145.                         var message = 'Пользователь с указанным e-mail уже зарегистрирован.<br /> <a id="useExistingLogin">Использовать существующий логин?</a>';
  146.                         errors[element.name] = previous.message = $.isFunction(message) ? message(value) : message;
  147.                         validator.showErrors(errors);
  148.                     }
  149.                 }
  150.                 previous.valid = response.Object;
  151.                 validator.stopRequest(element, response.Status);
  152.                 $(element).trigger('checkingForLoginBusyStop');
  153.             }
  154.         });
  155.  
  156.         return "pending";
  157.     });
  158.  
  159.     $.validator.addMethod("invalidpassword", function (value, element) {
  160.         if ($(element).attr('data-val-invalidpassword-enable') == "true") {
  161.             return false;
  162.         }
  163.         return true;
  164.     });
  165.  
  166.     $.validator.addMethod("email", function (value) {
  167.         var regexp = /^[a-zA-Z0-9\._%+-]+@([A-Z0-9-]+\.){1,2}[A-Z]{2,6}$/igm;
  168.         value = $.trim(value);
  169.         if (regexp.test(value)) {
  170.             return true;
  171.         }
  172.         return false;
  173.     });
  174.    
  175.     $.validator.addMethod("phone", function (value) {
  176.         var regexp = /(^\s*\+?\s*(7|8)?([\s\-\(]*)?\s*(\d[\-\s\)]*){9}\d\s*$)|(^\s*(\d([\s\-]*)){5,9}$)/i;
  177.  
  178.         if (regexp.test(value)) {
  179.             return true;
  180.         }
  181.         return false;
  182.     });
  183.  
  184.     $.validator.addMethod("minMoney", function (value, element) {
  185.         if (_.isUndefined(value) || value.length === 0) {
  186.             return true;
  187.         }
  188.  
  189.         var minValue = parseInt($(element).data("val-minmoney-value"), 10) || 0;
  190.  
  191.         var sum = parseInt(value.replace(/\D/g, ''), 10);
  192.         if (sum !== false && sum < minValue) {
  193.             return false;
  194.         }
  195.         return true;
  196.     });
  197.  
  198.     $.validator.addMethod("maxMoney", function (value, element) {
  199.         if (_.isUndefined(value) || value.length === 0) {
  200.             return true;
  201.         }
  202.  
  203.         var maxValue = parseInt($(element).data("val-maxmoney-value").replace(/\D/g, ''), 10) || Number.MAX_VALUE;
  204.  
  205.         var sum = parseInt(value.replace(/\D/g, ''), 10);
  206.         if (sum !== false && sum > maxValue) {
  207.             return false;
  208.         }
  209.         return true;
  210.     });
  211.  
  212.     /// Положительное целое число
  213.     $.validator.addMethod("positiveInteger", function (value) {
  214.         if (_.isUndefined(value) || value.length == 0) {
  215.             return true;
  216.         }
  217.  
  218.         value = value.replace(/\D/g, '');
  219.         var sum = parseInt(value);
  220.         if (sum === false || _.isNaN(sum) || sum <= 0 || value != sum) {
  221.             return false;
  222.         }
  223.         return true;
  224.     });
  225.  
  226.     $.validator.addMethod("minlength", function (value, element) {
  227.         var defaultLenght = 6;
  228.         if (_.isUndefined(value) || value.length === 0) {
  229.             return true;
  230.         }
  231.  
  232.         var length = value.length,
  233.             customValue = $(element).attr("data-val-minlenght-value"),
  234.             minLength = customValue || defaultLenght;
  235.  
  236.         return length >= minLength;
  237.     });
  238.  
  239.     $.validator.addMethod("balance", function (value) {
  240.         var currentBalance = parseInt($('#balanceValue').text().replace(/\D/g, ''));
  241.         if (_.isUndefined(value)|| value.length == 0 || parseInt(value.replace(/\D/g, '')) > currentBalance) {
  242.             return false;
  243.         }
  244.         return true;
  245.     });
  246.  
  247.     $.validator.addMethod("yandexWallet", function (value) {
  248.         var minLength = 11;
  249.         var maxLength = 26;
  250.  
  251.         if (_.isUndefined(value) || value.length === 0) {
  252.             return true;
  253.         }
  254.  
  255.         var length = value.length,
  256.             N = value.charAt(0).toString(),
  257.             X = value.substr(1, N),
  258.             Z = value.substr(length - 2, 2).toString(),
  259.             Y = value.substr((N + X).length, length - (N + X + Z).length);
  260.  
  261.         var xArray = X.split('').reverse();
  262.         var yArray = Y.split('').reverse();
  263.         var result = 0;
  264.         var a = 70;
  265.         for (var index = 0; index < 20; index++) {
  266.             var yValue = yArray[index];
  267.             var tValue = (_.isUndefined(yValue) || yValue == 0) ? 10 : yValue;
  268.             result = (result + (tValue * a) % 99) % 99;
  269.             a = (13 * a) % 99;
  270.         }
  271.  
  272.         for (var index = 0; index < 10; index++) {
  273.             var xValue = xArray[index];
  274.             var tValue = (_.isUndefined(xValue) || xValue == 0) ? 10 : xValue;
  275.             result = (result + (tValue * a) % 99) % 99;
  276.             a = (13 * a) % 99;
  277.         }
  278.  
  279.         result += 1;
  280.  
  281.         result = result < 10 ? "0" + result : result;
  282.  
  283.         if (length < minLength || length > maxLength || N === "0" || Z === "00" || result != Z || Y.length > 20) {
  284.             return false;
  285.         }
  286.  
  287.         return true;
  288.     });
  289.  
  290.     $.validator.unobtrusive.adapters.addBool("clientLogin");
  291.     $.validator.unobtrusive.adapters.addBool("inn");
  292.     $.validator.unobtrusive.adapters.addBool("phone");
  293.     $.validator.unobtrusive.adapters.addBool("mandatory", "required");
  294.     $.validator.unobtrusive.adapters.addBool("minMoney");
  295.     $.validator.unobtrusive.adapters.addBool("maxMoney");
  296.     $.validator.unobtrusive.adapters.addBool("positiveInteger");
  297.     $.validator.unobtrusive.adapters.addBool("minlength");
  298.     $.validator.unobtrusive.adapters.addBool("balance");
  299.     $.validator.unobtrusive.adapters.addBool("loginbusy");
  300.     $.validator.unobtrusive.adapters.addBool("invalidpassword");
  301.     $.validator.unobtrusive.adapters.addBool("yandexWallet");
  302. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement