From 10f3bbb922d9fabbb770ac49a973ed0f9aeb1d72 Mon Sep 17 00:00:00 2001 From: Nicolas Forney Date: Thu, 25 Apr 2013 00:25:08 +0300 Subject: [PATCH 01/83] Corrected README links --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 4e6f036..646b4a8 100755 --- a/README.md +++ b/README.md @@ -899,10 +899,10 @@ Contribution --- Contributions are always welcome, please follow these steps to submit your changes: -1. Install git from [http://git-scm.com/]() -2. Create a github account on [https://github.com]() -3. Set up your git ssh key using these instructions [http://help.github.com/set-up-git-redirect]() -4. Open the jQuery Validation Engine project home page on github on [https://github.com/posabsolute/jQuery-Validation-Engine]() +1. Install git from [http://git-scm.com/](http://git-scm.com/) +2. Create a github account on [https://github.com](https://github.com) +3. Set up your git ssh key using these instructions [http://help.github.com/set-up-git-redirect](http://help.github.com/set-up-git-redirect) +4. Open the jQuery Validation Engine project home page on github on [https://github.com/posabsolute/jQuery-Validation-Engine](https://github.com/posabsolute/jQuery-Validation-Engine) 5. Click the "Fork" button, this will get you to a new page: your own copy of the code. 6. Copy the SSH URL at the top of the page and clone the repository on your local machine From c240c45006b03fa2d9a23c9f00ee8f39251c72c7 Mon Sep 17 00:00:00 2001 From: pl71 Date: Sat, 22 Jun 2013 21:37:51 +0300 Subject: [PATCH 02/83] Create jquery.validationEngine-bg.js Bulgarian translation (alpha) --- js/languages/jquery.validationEngine-bg.js | 192 +++++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100644 js/languages/jquery.validationEngine-bg.js diff --git a/js/languages/jquery.validationEngine-bg.js b/js/languages/jquery.validationEngine-bg.js new file mode 100644 index 0000000..a33787b --- /dev/null +++ b/js/languages/jquery.validationEngine-bg.js @@ -0,0 +1,192 @@ +(function($){ + $.fn.validationEngineLanguage = function(){ + }; + $.validationEngineLanguage = { + newLang: function(){ + $.validationEngineLanguage.allRules = { + "required": { // Add your regex rules here, you can take telephone as an example + "regex": "none", + "alertText": "* Това поле е задължително", + "alertTextCheckboxMultiple": "* Моля, изберете от списъка", + "alertTextCheckboxe": "* Този чек е задължителен", + "alertTextDateRange": "* И двете полета за дата са задължителни" + }, + "requiredInFunction": { + "func": function(field, rules, i, options){ + return (field.val() == "test") ? true : false; + }, + "alertText": "* Полето трябва да е test" + }, + "dateRange": { + "regex": "none", + "alertText": "* Невалиден ", + "alertText2": "период" + }, + "dateTimeRange": { + "regex": "none", + "alertText": "* Невалиден ", + "alertText2": "дата/час период" + }, + "minSize": { + "regex": "none", + "alertText": "* минимум ", + "alertText2": " символа" + }, + "maxSize": { + "regex": "none", + "alertText": "* максимум ", + "alertText2": " символа" + }, + "groupRequired": { + "regex": "none", + "alertText": "* Трябва да попълните едно от следните полета" + }, + "min": { + "regex": "none", + "alertText": "* Мин. стойност е " + }, + "max": { + "regex": "none", + "alertText": "* Макс. стойност е " + }, + "past": { + "regex": "none", + "alertText": "* Дата преди " + }, + "future": { + "regex": "none", + "alertText": "* Дата след " + }, + "maxCheckbox": { + "regex": "none", + "alertText": "* Най-много ", + "alertText2": " опции са позволени" + }, + "minCheckbox": { + "regex": "none", + "alertText": "* Моля, изберете ", + "alertText2": " опции" + }, + "equals": { + "regex": "none", + "alertText": "* Полетата не съвпадат" + }, + "creditCard": { + "regex": "none", + "alertText": "* Невалиден номер на кредитна карта" + }, + "phone": { + // credit: jquery.h5validate.js / orefalo + "regex": /^([\+][0-9]{1,3}[\ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9\ \.\-\/]{3,20})((x|ext|extension)[\ ]?[0-9]{1,4})?$/, + "alertText": "* Невалиден телефонен номер" + }, + "email": { + // HTML5 compatible email regex ( http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html# e-mail-state-%28type=email%29 ) + "regex": /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, + "alertText": "* Невалиден адрес на ел.поща" + }, + "integer": { + "regex": /^[\-\+]?\d+$/, + "alertText": "* Не е цяло число" + }, + "number": { + // Number, including positive, negative, and floating decimal. credit: orefalo + "regex": /^[\-\+]?((([0-9]{1,3})([,][0-9]{3})*)|([0-9]+))?([\.]([0-9]+))?$/, + "alertText": "* Невалидно десетично число" + }, + "date": { + // Check if date is valid by leap year + "func": function (field) { + var pattern = new RegExp(/^(\d{4})[\/\-\.](0?[1-9]|1[012])[\/\-\.](0?[1-9]|[12][0-9]|3[01])$/); + var match = pattern.exec(field.val()); + if (match == null) + return false; + + var year = match[1]; + var month = match[2]*1; + var day = match[3]*1; + var date = new Date(year, month - 1, day); // because months starts from 0. + + return (date.getFullYear() == year && date.getMonth() == (month - 1) && date.getDate() == day); + }, + "alertText": "* Невалидна дата, трябва да бъде във формат: YYYY-MM-DD" + }, + "ipv4": { + "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, + "alertText": "* Invalid IP address" + }, + "url": { + "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i, + "alertText": "* Невалиден URL" + }, + "onlyNumberSp": { + "regex": /^[0-9\ ]+$/, + "alertText": "* Само цифри" + }, + "onlyLetterSp": { + "regex": /^[a-zA-Z\ \']+$/, + "alertText": "* Само букви" + }, + "onlyLetterNumber": { + "regex": /^[0-9a-zA-Z]+$/, + "alertText": "* Не са позволени спец. символи" + }, + // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings + "ajaxUserCall": { + "url": "ajaxValidateFieldUser", + // you may want to pass extra data on the ajax call + "extraData": "name=eric", + "alertText": "* Потребителското име е заето", + "alertTextLoad": "* Проверява се, моля почакайте" + }, + "ajaxUserCallPhp": { + "url": "phpajax/ajaxValidateFieldUser.php", + // you may want to pass extra data on the ajax call + "extraData": "name=eric", + // if you provide an "alertTextOk", it will show as a green prompt when the field validates + "alertTextOk": "* This username is available", + "alertText": "* This user is already taken", + "alertTextLoad": "* Validating, please wait" + }, + "ajaxNameCall": { + // remote json service location + "url": "ajaxValidateFieldName", + // error + "alertText": "* This name is already taken", + // if you provide an "alertTextOk", it will show as a green prompt when the field validates + "alertTextOk": "* This name is available", + // speaks by itself + "alertTextLoad": "* Validating, please wait" + }, + "ajaxNameCallPhp": { + // remote json service location + "url": "phpajax/ajaxValidateFieldName.php", + // error + "alertText": "* This name is already taken", + // speaks by itself + "alertTextLoad": "* Validating, please wait" + }, + "validate2fields": { + "alertText": "* Please input HELLO" + }, + //tls warning:homegrown not fielded + "dateFormat":{ + "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(?:(?:0?[1-9]|1[0-2])(\/|-)(?:0?[1-9]|1\d|2[0-8]))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(0?2(\/|-)29)(\/|-)(?:(?:0[48]00|[13579][26]00|[2468][048]00)|(?:\d\d)?(?:0[48]|[2468][048]|[13579][26]))$/, + "alertText": "* Невалидна дата" + }, + //tls warning:homegrown not fielded + "dateTimeFormat": { + "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1}$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^((1[012]|0?[1-9]){1}\/(0?[1-9]|[12][0-9]|3[01]){1}\/\d{2,4}\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1})$/, + "alertText": "* Невалидна дата или грешен формат за дата", + "alertText2": "Очакван формат: ", + "alertText3": "mm/dd/yyyy hh:mm:ss AM|PM or ", + "alertText4": "yyyy-mm-dd hh:mm:ss AM|PM" + } + }; + + } + }; + + $.validationEngineLanguage.newLang(); + +})(jQuery); From 1689b1cfc5cb1bf90dae043d7fa71acefb9feae2 Mon Sep 17 00:00:00 2001 From: pl Date: Tue, 25 Jun 2013 11:04:30 +0300 Subject: [PATCH 03/83] language bg corrected --- js/languages/jquery.validationEngine-bg.js | 395 +++++++++++---------- 1 file changed, 203 insertions(+), 192 deletions(-) diff --git a/js/languages/jquery.validationEngine-bg.js b/js/languages/jquery.validationEngine-bg.js index a33787b..e2773bb 100644 --- a/js/languages/jquery.validationEngine-bg.js +++ b/js/languages/jquery.validationEngine-bg.js @@ -1,192 +1,203 @@ -(function($){ - $.fn.validationEngineLanguage = function(){ - }; - $.validationEngineLanguage = { - newLang: function(){ - $.validationEngineLanguage.allRules = { - "required": { // Add your regex rules here, you can take telephone as an example - "regex": "none", - "alertText": "* Това поле е задължително", - "alertTextCheckboxMultiple": "* Моля, изберете от списъка", - "alertTextCheckboxe": "* Този чек е задължителен", - "alertTextDateRange": "* И двете полета за дата са задължителни" - }, - "requiredInFunction": { - "func": function(field, rules, i, options){ - return (field.val() == "test") ? true : false; - }, - "alertText": "* Полето трябва да е test" - }, - "dateRange": { - "regex": "none", - "alertText": "* Невалиден ", - "alertText2": "период" - }, - "dateTimeRange": { - "regex": "none", - "alertText": "* Невалиден ", - "alertText2": "дата/час период" - }, - "minSize": { - "regex": "none", - "alertText": "* минимум ", - "alertText2": " символа" - }, - "maxSize": { - "regex": "none", - "alertText": "* максимум ", - "alertText2": " символа" - }, - "groupRequired": { - "regex": "none", - "alertText": "* Трябва да попълните едно от следните полета" - }, - "min": { - "regex": "none", - "alertText": "* Мин. стойност е " - }, - "max": { - "regex": "none", - "alertText": "* Макс. стойност е " - }, - "past": { - "regex": "none", - "alertText": "* Дата преди " - }, - "future": { - "regex": "none", - "alertText": "* Дата след " - }, - "maxCheckbox": { - "regex": "none", - "alertText": "* Най-много ", - "alertText2": " опции са позволени" - }, - "minCheckbox": { - "regex": "none", - "alertText": "* Моля, изберете ", - "alertText2": " опции" - }, - "equals": { - "regex": "none", - "alertText": "* Полетата не съвпадат" - }, - "creditCard": { - "regex": "none", - "alertText": "* Невалиден номер на кредитна карта" - }, - "phone": { - // credit: jquery.h5validate.js / orefalo - "regex": /^([\+][0-9]{1,3}[\ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9\ \.\-\/]{3,20})((x|ext|extension)[\ ]?[0-9]{1,4})?$/, - "alertText": "* Невалиден телефонен номер" - }, - "email": { - // HTML5 compatible email regex ( http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html# e-mail-state-%28type=email%29 ) - "regex": /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, - "alertText": "* Невалиден адрес на ел.поща" - }, - "integer": { - "regex": /^[\-\+]?\d+$/, - "alertText": "* Не е цяло число" - }, - "number": { - // Number, including positive, negative, and floating decimal. credit: orefalo - "regex": /^[\-\+]?((([0-9]{1,3})([,][0-9]{3})*)|([0-9]+))?([\.]([0-9]+))?$/, - "alertText": "* Невалидно десетично число" - }, - "date": { - // Check if date is valid by leap year - "func": function (field) { - var pattern = new RegExp(/^(\d{4})[\/\-\.](0?[1-9]|1[012])[\/\-\.](0?[1-9]|[12][0-9]|3[01])$/); - var match = pattern.exec(field.val()); - if (match == null) - return false; - - var year = match[1]; - var month = match[2]*1; - var day = match[3]*1; - var date = new Date(year, month - 1, day); // because months starts from 0. - - return (date.getFullYear() == year && date.getMonth() == (month - 1) && date.getDate() == day); - }, - "alertText": "* Невалидна дата, трябва да бъде във формат: YYYY-MM-DD" - }, - "ipv4": { - "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, - "alertText": "* Invalid IP address" - }, - "url": { - "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i, - "alertText": "* Невалиден URL" - }, - "onlyNumberSp": { - "regex": /^[0-9\ ]+$/, - "alertText": "* Само цифри" - }, - "onlyLetterSp": { - "regex": /^[a-zA-Z\ \']+$/, - "alertText": "* Само букви" - }, - "onlyLetterNumber": { - "regex": /^[0-9a-zA-Z]+$/, - "alertText": "* Не са позволени спец. символи" - }, - // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings - "ajaxUserCall": { - "url": "ajaxValidateFieldUser", - // you may want to pass extra data on the ajax call - "extraData": "name=eric", - "alertText": "* Потребителското име е заето", - "alertTextLoad": "* Проверява се, моля почакайте" - }, - "ajaxUserCallPhp": { - "url": "phpajax/ajaxValidateFieldUser.php", - // you may want to pass extra data on the ajax call - "extraData": "name=eric", - // if you provide an "alertTextOk", it will show as a green prompt when the field validates - "alertTextOk": "* This username is available", - "alertText": "* This user is already taken", - "alertTextLoad": "* Validating, please wait" - }, - "ajaxNameCall": { - // remote json service location - "url": "ajaxValidateFieldName", - // error - "alertText": "* This name is already taken", - // if you provide an "alertTextOk", it will show as a green prompt when the field validates - "alertTextOk": "* This name is available", - // speaks by itself - "alertTextLoad": "* Validating, please wait" - }, - "ajaxNameCallPhp": { - // remote json service location - "url": "phpajax/ajaxValidateFieldName.php", - // error - "alertText": "* This name is already taken", - // speaks by itself - "alertTextLoad": "* Validating, please wait" - }, - "validate2fields": { - "alertText": "* Please input HELLO" - }, - //tls warning:homegrown not fielded - "dateFormat":{ - "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(?:(?:0?[1-9]|1[0-2])(\/|-)(?:0?[1-9]|1\d|2[0-8]))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(0?2(\/|-)29)(\/|-)(?:(?:0[48]00|[13579][26]00|[2468][048]00)|(?:\d\d)?(?:0[48]|[2468][048]|[13579][26]))$/, - "alertText": "* Невалидна дата" - }, - //tls warning:homegrown not fielded - "dateTimeFormat": { - "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1}$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^((1[012]|0?[1-9]){1}\/(0?[1-9]|[12][0-9]|3[01]){1}\/\d{2,4}\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1})$/, - "alertText": "* Невалидна дата или грешен формат за дата", - "alertText2": "Очакван формат: ", - "alertText3": "mm/dd/yyyy hh:mm:ss AM|PM or ", - "alertText4": "yyyy-mm-dd hh:mm:ss AM|PM" - } - }; - - } - }; - - $.validationEngineLanguage.newLang(); - -})(jQuery); +(function($){ + $.fn.validationEngineLanguage = function(){ + }; + $.validationEngineLanguage = { + newLang: function(){ + $.validationEngineLanguage.allRules = { + "required": { // Add your regex rules here, you can take telephone as an example + "regex": "none", + "alertText": "* Това поле е задължително", + "alertTextCheckboxMultiple": "* Моля, изберете от списъка", + "alertTextCheckboxe": "* Трябва да отметните", + "alertTextDateRange": "* И двете полета за дата са задължителни" + }, + "requiredInFunction": { + "func": function(field, rules, i, options){ + return (field.val() == "test") ? true : false; + }, + "alertText": "* Полето трябва да е test" + }, + "dateRange": { + "regex": "none", + "alertText": "* Невалиден ", + "alertText2": "период" + }, + "dateTimeRange": { + "regex": "none", + "alertText": "* Невалиден ", + "alertText2": "дата/час период" + }, + "minSize": { + "regex": "none", + "alertText": "* минимум ", + "alertText2": " символа" + }, + "maxSize": { + "regex": "none", + "alertText": "* максимум ", + "alertText2": " символа" + }, + "groupRequired": { + "regex": "none", + "alertText": "* Трябва да попълните едно от следните полета" + }, + "min": { + "regex": "none", + "alertText": "* Мин. стойност е " + }, + "max": { + "regex": "none", + "alertText": "* Макс. стойност е " + }, + "past": { + "regex": "none", + "alertText": "* Дата преди " + }, + "future": { + "regex": "none", + "alertText": "* Дата след " + }, + "maxCheckbox": { + "regex": "none", + "alertText": "* Най-много ", + "alertText2": " опции са позволени" + }, + "minCheckbox": { + "regex": "none", + "alertText": "* Моля, изберете ", + "alertText2": " опции" + }, + "equals": { + "regex": "none", + "alertText": "* Полетата не съвпадат" + }, + "creditCard": { + "regex": "none", + "alertText": "* Невалиден номер на кредитна карта" + }, + "phone": { + // credit: jquery.h5validate.js / orefalo + "regex": /^([\+][0-9]{1,3}[\ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9\ \.\-\/]{3,20})((x|ext|extension)[\ ]?[0-9]{1,4})?$/, + "alertText": "* Невалиден телефонен номер" + }, + "email": { + // HTML5 compatible email regex ( http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html# e-mail-state-%28type=email%29 ) + "regex": /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, + "alertText": "* Невалиден адрес на ел.поща" + }, + "integer": { + "regex": /^[\-\+]?\d+$/, + "alertText": "* Не е цяло число" + }, + "number": { + // Number, including positive, negative, and floating decimal. credit: orefalo + "regex": /^[\-\+]?((([0-9]{1,3})([,][0-9]{3})*)|([0-9]+))?([\.]([0-9]+))?$/, + "alertText": "* Невалидно десетично число" + }, + "date": { + //Check if date is valid by leap year + "func": function (field) { + var pattern = new RegExp(/^(\d{4})[\/\-\.](0?[1-9]|1[012])[\/\-\.](0?[1-9]|[12][0-9]|3[01])$/); + var match = pattern.exec(field.val()); + if (match === null) + return false; + + var year = match[1]; + var month = match[2]*1; + var day = match[3]*1; + var date = new Date(year, month - 1, day); // because months starts from 0. + + return (date.getFullYear() == year && date.getMonth() == (month - 1) && date.getDate() == day); + }, + "alertText": "* Невалидна дата, трябва да бъде във формат: YYYY-MM-DD" + }, + "ipv4": { + "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, + "alertText": "* Невалиден IP адрес" + }, + "url": { + "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i, + "alertText": "* Невалиден URL" + }, + "onlyNumberSp": { + "regex": /^[0-9\ ]+$/, + "alertText": "* Само цифри и интервал" + }, + "onlyLetterSp": { + "regex": /^[a-zA-Z\ \']+$/, + "alertText": "* Само букви" + }, + // --- Bulgarian NAMES in cyrillic alphabet + "onlyBGname": { + "regex": /^[а-яА-Я\-]+$/, + "alertText": "* Без латиница, цифри и спец. символи" + }, + // --- Only numbers, no space + "onlyDigits": { + "regex": /^[0-9]+$/, + "alertText": "* Само цифри" + }, + + "onlyLetterNumber": { + "regex": /^[0-9a-zA-Z]+$/, + "alertText": "* Не са позволени спец. символи" + }, + // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings + "ajaxUserCall": { + "url": "ajaxValidateFieldUser", + // you may want to pass extra data on the ajax call + "extraData": "name=eric", + "alertText": "* Потребителското име е заето", + "alertTextLoad": "* Проверява се, моля почакайте" + }, + "ajaxUserCallPhp": { + "url": "phpajax/ajaxValidateFieldUser.php", + // you may want to pass extra data on the ajax call + "extraData": "name=eric", + // if you provide an "alertTextOk", it will show as a green prompt when the field validates + "alertTextOk": "* Името е свободно", + "alertText": "* Името е заето", + "alertTextLoad": "* Проверява се, моля почакайте" + }, + "ajaxNameCall": { + // remote json service location + "url": "ajaxValidateFieldName", + // error + "alertText": "* Това име е заето", + // if you provide an "alertTextOk", it will show as a green prompt when the field validates + "alertTextOk": "* Това име е свободно", + // speaks by itself + "alertTextLoad": "* Проверява се, моля почакайте" + }, + "ajaxNameCallPhp": { + // remote json service location + "url": "phpajax/ajaxValidateFieldName.php", + // error + "alertText": "* Името е заето", + // speaks by itself + "alertTextLoad": "* Проверява се, моля почакайте" + }, + "validate2fields": { + "alertText": "* Please input HELLO" + }, + //tls warning:homegrown not fielded + "dateFormat":{ + "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(?:(?:0?[1-9]|1[0-2])(\/|-)(?:0?[1-9]|1\d|2[0-8]))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(0?2(\/|-)29)(\/|-)(?:(?:0[48]00|[13579][26]00|[2468][048]00)|(?:\d\d)?(?:0[48]|[2468][048]|[13579][26]))$/, + "alertText": "* Невалидна дата" + }, + //tls warning:homegrown not fielded + "dateTimeFormat": { + "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1}$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^((1[012]|0?[1-9]){1}\/(0?[1-9]|[12][0-9]|3[01]){1}\/\d{2,4}\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1})$/, + "alertText": "* Невалидна дата или грешен формат за дата", + "alertText2": "Очакван формат: ", + "alertText3": "mm/dd/yyyy hh:mm:ss AM|PM or ", + "alertText4": "yyyy-mm-dd hh:mm:ss AM|PM" + } + }; + + } + }; + + $.validationEngineLanguage.newLang(); + +})(jQuery); From dec1fad3d87322d299c5eaef3b70e88e3474e304 Mon Sep 17 00:00:00 2001 From: pl Date: Tue, 25 Jun 2013 11:15:08 +0300 Subject: [PATCH 04/83] bg corrected --- js/languages/jquery.validationEngine-bg.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/languages/jquery.validationEngine-bg.js b/js/languages/jquery.validationEngine-bg.js index e2773bb..48d8261 100644 --- a/js/languages/jquery.validationEngine-bg.js +++ b/js/languages/jquery.validationEngine-bg.js @@ -8,7 +8,7 @@ "regex": "none", "alertText": "* Това поле е задължително", "alertTextCheckboxMultiple": "* Моля, изберете от списъка", - "alertTextCheckboxe": "* Трябва да отметните", + "alertTextCheckboxe": "* Трябва да отметнeте", "alertTextDateRange": "* И двете полета за дата са задължителни" }, "requiredInFunction": { From 757d04f355f33b6b1a4b1f7c63140490406999b4 Mon Sep 17 00:00:00 2001 From: pl Date: Tue, 25 Jun 2013 11:38:26 +0300 Subject: [PATCH 05/83] bg corrected --- js/languages/jquery.validationEngine-bg.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/js/languages/jquery.validationEngine-bg.js b/js/languages/jquery.validationEngine-bg.js index 48d8261..15e330a 100644 --- a/js/languages/jquery.validationEngine-bg.js +++ b/js/languages/jquery.validationEngine-bg.js @@ -29,12 +29,12 @@ }, "minSize": { "regex": "none", - "alertText": "* минимум ", + "alertText": "* Минимум ", "alertText2": " символа" }, "maxSize": { "regex": "none", - "alertText": "* максимум ", + "alertText": "* Максимум ", "alertText2": " символа" }, "groupRequired": { @@ -178,7 +178,7 @@ "alertTextLoad": "* Проверява се, моля почакайте" }, "validate2fields": { - "alertText": "* Please input HELLO" + "alertText": "*Моля, въведете HELLO" }, //tls warning:homegrown not fielded "dateFormat":{ From 8414a7f089db8c4dc29fb8e81b73c9a029b94e0c Mon Sep 17 00:00:00 2001 From: Zach Shallbetter Date: Thu, 27 Jun 2013 12:15:15 -0700 Subject: [PATCH 06/83] Added Zip and Fullname to en Fullname requires a first and last name. Zip requires a US formatted zip code. E.g. five digits (99204) or five digits a hiphen and four digits (99204-2622) --- js/languages/jquery.validationEngine-en.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/js/languages/jquery.validationEngine-en.js b/js/languages/jquery.validationEngine-en.js index aa03251..45bce30 100644 --- a/js/languages/jquery.validationEngine-en.js +++ b/js/languages/jquery.validationEngine-en.js @@ -85,6 +85,14 @@ "regex": /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, "alertText": "* Invalid email address" }, + "fullname": { + "regex":/^([a-zA-Z]+[\'\,\.\-]?[a-zA-Z ]*)+[ ]([a-zA-Z]+[\'\,\.\-]?[a-zA-Z ]+)+$/, + "alertText":"* Must be first and last name" + }, + "zip": { + "regex":/^\d{5}$|^\d{5}-\d{4}$/, + "alertText":"* Invalid zip format" + }, "integer": { "regex": /^[\-\+]?\d+$/, "alertText": "* Not a valid integer" From f96fa4ec7269b31ef3cc6d89b70a023ef08667b8 Mon Sep 17 00:00:00 2001 From: Vassilis Karapatakis Date: Wed, 24 Jul 2013 15:59:15 +0300 Subject: [PATCH 07/83] Updated greek translation --- js/languages/jquery.validationEngine-el.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/languages/jquery.validationEngine-el.js b/js/languages/jquery.validationEngine-el.js index 34c59ce..3eb21fe 100644 --- a/js/languages/jquery.validationEngine-el.js +++ b/js/languages/jquery.validationEngine-el.js @@ -91,7 +91,7 @@ }, "number": { // Number, including positive, negative, and floating decimal. credit: orefalo - "regex": /^[\-\+]?((([0-9]{1,3})([,][0-9]{3})*)|([0-9]+))?([\.]([0-9]+))?$/, + "regex": /^[\-\+]?((([0-9]{1,3})([\.][0-9]{3})*)|([0-9]+))?([,]([0-9]+))?$/, "alertText": "* Μη έγκυρος δεκαδικός" }, "date": { From 0ba1c9991d281e349deb0f75b0ec407f8438be22 Mon Sep 17 00:00:00 2001 From: Eli Sherer Date: Sun, 22 Sep 2013 00:41:58 -0700 Subject: [PATCH 08/83] Fix onFieldFailure and onFieldSuccess events to run only once. also add options initialization in case no options were found in form's jqv data (as same as other methods). --- js/jquery.validationEngine.js | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/js/jquery.validationEngine.js b/js/jquery.validationEngine.js index 50cab02..5435561 100644 --- a/js/jquery.validationEngine.js +++ b/js/jquery.validationEngine.js @@ -132,11 +132,6 @@ var form = element.closest('form, .validationEngineContainer'), options = (form.data('jqv')) ? form.data('jqv') : $.validationEngine.defaults, valid = methods._validateField(element, options); - - if (valid && options.onFieldSuccess) - options.onFieldSuccess(); - else if (options.onFieldFailure && options.InvalidFields.length > 0) { - options.onFieldFailure(); } } if(options.onValidationComplete) { @@ -159,6 +154,8 @@ var options = form.data('jqv'); // No option, take default one + if (!options) + options = methods._saveOptions(form, options); form.find('['+options.validateAttribute+'*=validate]').not(":disabled").each(function(){ var field = $(this); if (options.prettySelect && field.is(":hidden")) @@ -198,6 +195,9 @@ hide: function() { var form = $(this).closest('form, .validationEngineContainer'); var options = form.data('jqv'); + // No option, take default one + if (!options) + options = methods._saveOptions(form, options); var fadeDuration = (options && options.fadeDuration) ? options.fadeDuration : 0.3; var closingtag; @@ -234,15 +234,13 @@ var field = $(this); var form = field.closest('form, .validationEngineContainer'); var options = form.data('jqv'); + // No option, take default one + if (!options) + options = methods._saveOptions(form, options); options.eventTrigger = "field"; // validate the current field window.setTimeout(function() { methods._validateField(field, options); - if (options.InvalidFields.length == 0 && options.onFieldSuccess) { - options.onFieldSuccess(); - } else if (options.InvalidFields.length > 0 && options.onFieldFailure) { - options.onFieldFailure(); - } }, (event.data) ? event.data.delay : 0); }, @@ -711,7 +709,7 @@ //the 3rd condition is added so that even empty password fields should be equal //otherwise if one is filled and another left empty, the "equal" condition would fail //which does not make any sense - if(!required && !(field.val()) && field.val().length < 1 && rules.indexOf("equals") < 0) options.isError = false; + if(!required && !(field.val()) && field.val().length < 1 && $.inArray('equals', rules) < 0) options.isError = false; // Hack for radio/checkbox group button, the validation go into the // first radio/checkbox of the group From 3bb9c4c4993c15e0a656f856ff31b24d9d8abb9c Mon Sep 17 00:00:00 2001 From: Eli Sherer Date: Tue, 24 Sep 2013 06:37:54 -0700 Subject: [PATCH 09/83] Add hebrew to langauges --- js/languages/jquery.validationEngine-he.js | 141 +++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 js/languages/jquery.validationEngine-he.js diff --git a/js/languages/jquery.validationEngine-he.js b/js/languages/jquery.validationEngine-he.js new file mode 100644 index 0000000..79986a6 --- /dev/null +++ b/js/languages/jquery.validationEngine-he.js @@ -0,0 +1,141 @@ +(function($){ + $.fn.validationEngineLanguage = function(){ + }; + $.validationEngineLanguage = { + newLang: function(){ + $.validationEngineLanguage.allRules = { + "required": { // Add your regex rules here, you can take telephone as an example + "regex": "none", + "alertText": "* שדה זה הוא חובה", + "alertTextCheckboxMultiple": "* אנא בחר אפשרות", + "alertTextCheckboxe": "* תיבת הבחירה היא חובה", + "alertTextDateRange": "* שני תאריכי הטווח הם חובה" + }, + "requiredInFunction": { + "func": function(field, rules, i, options){ + return (field.val() == "test") ? true : false; + }, + "alertText": "* שדה חייב להיות שווה לבדיקה" + }, + "dateRange": { + "regex": "none", + "alertText": "* טווח תאריכים ", + "alertText2": "לא תקין" + }, + "dateTimeRange": { + "regex": "none", + "alertText": "* טווח תאריך-זמן ", + "alertText2": "לא תקין" + }, + "minSize": { + "regex": "none", + "alertText": "* דרושים לפחות ", + "alertText2": " תוים" + }, + "maxSize": { + "regex": "none", + "alertText": "* מותרים לכל היותר ", + "alertText2": " תוים" + }, + "groupRequired": { + "regex": "none", + "alertText": "* חובה למלא אחד מהשדות" + }, + "min": { + "regex": "none", + "alertText": "* הערך המינימלי הוא " + }, + "max": { + "regex": "none", + "alertText": "* הערך המקסימלי הוא " + }, + "past": { + "regex": "none", + "alertText": "* תאריך קודם ל " + }, + "future": { + "regex": "none", + "alertText": "* תאריך מאוחר מ " + }, + "maxCheckbox": { + "regex": "none", + "alertText": "* מותרות לכל היותר ", + "alertText2": " אופציות" + }, + "minCheckbox": { + "regex": "none", + "alertText": "* אנא בחר ", + "alertText2": " אופציות" + }, + "equals": { + "regex": "none", + "alertText": "* השדות לא תואמים" + }, + "creditCard": { + "regex": "none", + "alertText": "* מספר כרטיס אשראי לא תקין" + }, + "phone": { + // credit: jquery.h5validate.js / orefalo + "regex": /^([\+][0-9]{1,3}[\ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9\ \.\-\/]{3,20})((x|ext|extension)[\ ]?[0-9]{1,4})?$/, + "alertText": "* מספר טלפון לא תקין" + }, + "email": { + // HTML5 compatible email regex ( http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html# e-mail-state-%28type=email%29 ) + "regex": /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, + "alertText": "* תיבת דואר אלקטרוני לא תקינה" + }, + "integer": { + "regex": /^[\-\+]?\d+$/, + "alertText": "* מספר שלם לא תקין" + }, + "number": { + // Number, including positive, negative, and floating decimal. credit: orefalo + "regex": /^[\-\+]?((([0-9]{1,3})([,][0-9]{3})*)|([0-9]+))?([\.]([0-9]+))?$/, + "alertText": "* מספר בעל נקודה עשרונית לא תקין" + }, + "date": { + // Check if date is valid by leap year + "func": function (field) { + var pattern = new RegExp(/^(\d{4})[\/\-\.](0?[1-9]|1[012])[\/\-\.](0?[1-9]|[12][0-9]|3[01])$/); + var match = pattern.exec(field.val()); + if (match == null) + return false; + + var year = match[1]; + var month = match[2]*1; + var day = match[3]*1; + var date = new Date(year, month - 1, day); // because months starts from 0. + + return (date.getFullYear() == year && date.getMonth() == (month - 1) && date.getDate() == day); + }, + "alertText": "* תאריך לא תקין, חייב ליות בתבנית YYYY-MM-DD" + }, + "ipv4": { + "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, + "alertText": "* כתובת IP לא תקינה" + }, + "url": { + "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i, + "alertText": "* קישור לא תקין" + }, + "onlyNumberSp": { + "regex": /^[0-9\ ]+$/, + "alertText": "* מספרים בלבד" + }, + "onlyLetterSp": { + "regex": /^[a-zA-Z\ \']+$/, + "alertText": "* אותיות באנגלית בלבד" + }, + "onlyLetterNumber": { + "regex": /^[0-9a-zA-Z]+$/, + "alertText": "* אסורים תוים מיוחדים" + } + }; + + } + }; + + $.validationEngineLanguage.newLang(); + +})(jQuery); From 81023344d8a2acdc44ec22843286bf0998d90d4b Mon Sep 17 00:00:00 2001 From: joxxxe Date: Tue, 19 Nov 2013 20:57:25 -0500 Subject: [PATCH 10/83] updated but still not working please advise --- demos/demoChosenLibrary.html | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/demos/demoChosenLibrary.html b/demos/demoChosenLibrary.html index 2dee5a4..3df5f84 100644 --- a/demos/demoChosenLibrary.html +++ b/demos/demoChosenLibrary.html @@ -3,13 +3,15 @@ JQuery Validation Engine - - - - - - - + + + + + + + + + + + + + + + +

onValidationComplete stop the submit and let you handle the form after the validation

+
+
+ + Phone + + +
+
+ + OnlyLetter + + +

+
+ + + + \ No newline at end of file diff --git a/js/jquery.validationEngine.js b/js/jquery.validationEngine.js index f55b4b0..9605f07 100644 --- a/js/jquery.validationEngine.js +++ b/js/jquery.validationEngine.js @@ -238,10 +238,28 @@ if (!options) options = methods._saveOptions(form, options); options.eventTrigger = "field"; - // validate the current field - window.setTimeout(function() { - methods._validateField(field, options); - }, (event.data) ? event.data.delay : 0); + + if (options.notEmpty == true){ + + if(field.val().length > 0){ + // validate the current field + window.setTimeout(function() { + methods._validateField(field, options); + }, (event.data) ? event.data.delay : 0); + + } + + }else{ + + // validate the current field + window.setTimeout(function() { + methods._validateField(field, options); + }, (event.data) ? event.data.delay : 0); + + } + + + }, /** @@ -2048,6 +2066,8 @@ custom_error_messages:{}, // true if you want to validate the input fields on blur event binded: true, + // set to true if you want to validate the input fields on blur only if the field it's not empty + notEmpty: false, // set to true, when the prompt arrow needs to be displayed showArrow: true, // set to false, determines if the prompt arrow should be displayed when validating From ae66043307c5c706eeb654cf032c5d77abc79081 Mon Sep 17 00:00:00 2001 From: UltraMCPL Date: Sat, 24 May 2014 11:32:37 +0200 Subject: [PATCH 27/83] Update README.md typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5fe327c..f507591 100644 --- a/README.md +++ b/README.md @@ -354,7 +354,7 @@ jQuery("#formID2").validationEngine('attach', { This is where custom messages for IDs, Classes, or validation types are stored. -Custom error messages areexclusive from one another.ID messages will be displayed instead of anything else; +Custom error messages are exclusive from one another.ID messages will be displayed instead of anything else; Class messages will only be used if there is no ID message, and only the first message found associated with one of the classes will be used; Global Validator messages will only be used if there are no Class messages or ID messages. From 2a841abad740ef4a1ce4215b5e664798fb374c0e Mon Sep 17 00:00:00 2001 From: Nitin Pasumarthy Date: Sat, 14 Jun 2014 22:18:59 +0530 Subject: [PATCH 28/83] Fixed README file: Corrected one of the mis-spelt typos --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5fe327c..a7d0021 100644 --- a/README.md +++ b/README.md @@ -473,7 +473,7 @@ Please refer to the section *Custom Regex* for a list of available regular expre ### custom[function_name] -Validates the element's value to a predefined function included in the language file (compared to funCall that can be anywhere in your application), +Validates the element's value to a predefined function included in the language file (compared to funcCall that can be anywhere in your application), ```html From 7409a97480d786618a64d92ec63c4ab3bc99fa91 Mon Sep 17 00:00:00 2001 From: Zhang Ping Date: Tue, 24 Jun 2014 16:45:25 +0800 Subject: [PATCH 29/83] support jQuery object for options.overflownDiv --- js/jquery.validationEngine.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/jquery.validationEngine.js b/js/jquery.validationEngine.js index f55b4b0..09d19fa 100644 --- a/js/jquery.validationEngine.js +++ b/js/jquery.validationEngine.js @@ -397,7 +397,7 @@ var scrollContainerPos = -parseInt(overflowDIV.offset().top); destination += scrollContainerScroll + scrollContainerPos - 5; - var scrollContainer = $(options.overflownDIV + ":not(:animated)"); + var scrollContainer = $(options.overflownDIV).filter(":not(:animated)"); scrollContainer.animate({ scrollTop: destination }, 1100, function(){ if(options.focusFirstField) first_err.focus(); From 2debd25a02d5443a4af227c4cf2331260f74d957 Mon Sep 17 00:00:00 2001 From: Filip Date: Tue, 15 Jul 2014 12:01:52 +0300 Subject: [PATCH 30/83] make so that you can use custom options when you use the 'validate' method! $(this).validationEngine('validate',{promptPosition: 'centerRight'}); for example --- js/jquery.validationEngine.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/js/jquery.validationEngine.js b/js/jquery.validationEngine.js index 7546f49..44c1748 100644 --- a/js/jquery.validationEngine.js +++ b/js/jquery.validationEngine.js @@ -101,9 +101,10 @@ * * @return true if the form validates, false if it fails */ - validate: function() { + validate: function(userOptions) { var element = $(this); var valid = null; + var options; if (element.is("form") || element.hasClass("validationEngineContainer")) { if (element.hasClass('validating')) { @@ -112,7 +113,10 @@ return false; } else { element.addClass('validating'); - var options = element.data('jqv'); + if(userOptions) + options = methods._saveOptions(element, userOptions); + else + options = element.data('jqv'); var valid = methods._validateFields(this); // If the form doesn't validate, clear the 'validating' class before the user has a chance to submit again @@ -518,7 +522,7 @@ if(field.hasClass(options.ignoreFieldsWithClass)) return false; - + if (!options.validateNonVisibleFields && (field.is(":hidden") && !options.prettySelect || field.parent().is(":hidden"))) return false; @@ -698,7 +702,7 @@ break; } } - + //funcCallRequired, first in rules, and has error, skip anything else if( i==0 && str.indexOf('funcCallRequired')==0 && errorMsg !== undefined ){ promptText += errorMsg + "
"; @@ -2020,7 +2024,7 @@ // Should we attempt to validate non-visible input fields contained in the form? (Useful in cases of tabbed containers, e.g. jQuery-UI tabs) validateNonVisibleFields: false, // ignore the validation for fields with this specific class (Useful in cases of tabbed containers AND hidden fields we don't want to validate) - ignoreFieldsWithClass: 'ignoreMe', + ignoreFieldsWithClass: 'ignoreMe', // Opening box position, possible locations are: topLeft, // topRight, bottomLeft, centerRight, bottomRight, inline // inline gets inserted after the validated field or into an element specified in data-prompt-target From c9f18697a274e841313b7c2c5c525eb4a90ef3eb Mon Sep 17 00:00:00 2001 From: vitorlima Date: Mon, 4 Aug 2014 10:38:19 -0300 Subject: [PATCH 31/83] Accepting accents in words. Created a custom format "onlyLetterAccentSp" that allow letters with accents. Solving the issue #805 (https://github.com/posabsolute/jQuery-Validation-Engine/issues/805) --- js/languages/jquery.validationEngine-ca.js | 4 ++++ js/languages/jquery.validationEngine-cz.js | 4 ++++ js/languages/jquery.validationEngine-da.js | 6 +++++- js/languages/jquery.validationEngine-de.js | 4 ++++ js/languages/jquery.validationEngine-en.js | 4 ++++ js/languages/jquery.validationEngine-es.js | 4 ++++ js/languages/jquery.validationEngine-et.js | 6 +++++- js/languages/jquery.validationEngine-fi.js | 6 +++++- js/languages/jquery.validationEngine-he.js | 4 ++++ js/languages/jquery.validationEngine-hr.js | 6 +++++- js/languages/jquery.validationEngine-hu.js | 4 ++++ js/languages/jquery.validationEngine-id.js | 4 ++++ js/languages/jquery.validationEngine-it.js | 6 +++++- js/languages/jquery.validationEngine-lt.js | 4 ++++ js/languages/jquery.validationEngine-nl.js | 4 ++++ js/languages/jquery.validationEngine-no.js | 4 ++++ js/languages/jquery.validationEngine-pl.js | 4 ++++ js/languages/jquery.validationEngine-pt.js | 4 ++++ js/languages/jquery.validationEngine-pt_BR.js | 4 ++++ js/languages/jquery.validationEngine-ro.js | 6 +++++- js/languages/jquery.validationEngine-sr_Cyrl.js | 4 ++++ js/languages/jquery.validationEngine-sr_Latn.js | 4 ++++ js/languages/jquery.validationEngine-sv.js | 6 +++++- js/languages/jquery.validationEngine-tr.js | 6 +++++- js/languages/jquery.validationEngine-vi.js | 4 ++++ js/languages/jquery.validationEngine-zh_CN.js | 4 ++++ js/languages/jquery.validationEngine-zh_TW.js | 4 ++++ 27 files changed, 116 insertions(+), 8 deletions(-) diff --git a/js/languages/jquery.validationEngine-ca.js b/js/languages/jquery.validationEngine-ca.js index cbfd5d2..1f9fe83 100644 --- a/js/languages/jquery.validationEngine-ca.js +++ b/js/languages/jquery.validationEngine-ca.js @@ -102,6 +102,10 @@ "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Només lletres" + }, + "onlyLetterAccentSp":{ + "regex": /^[a-z\u00C0-\u017F\ ]+$/i, + "alertText": "* Només lletres" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, diff --git a/js/languages/jquery.validationEngine-cz.js b/js/languages/jquery.validationEngine-cz.js index 4a89838..9a21638 100644 --- a/js/languages/jquery.validationEngine-cz.js +++ b/js/languages/jquery.validationEngine-cz.js @@ -122,6 +122,10 @@ "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Pouze písmena" + }, + "onlyLetterAccentSp":{ + "regex": /^[a-z\u00C0-\u017F\ ]+$/i, + "alertText": "* Pouze písmena" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, diff --git a/js/languages/jquery.validationEngine-da.js b/js/languages/jquery.validationEngine-da.js index 40c43b0..52d3075 100644 --- a/js/languages/jquery.validationEngine-da.js +++ b/js/languages/jquery.validationEngine-da.js @@ -101,6 +101,10 @@ "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Kun bogstaver" + }, + "onlyLetterAccentSp":{ + "regex": /^[a-z\u00C0-\u017F\ ]+$/i, + "alertText": "* Kun bogstaver" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, @@ -132,4 +136,4 @@ } }; $.validationEngineLanguage.newLang(); -})(jQuery); \ No newline at end of file +})(jQuery); diff --git a/js/languages/jquery.validationEngine-de.js b/js/languages/jquery.validationEngine-de.js index 05c20f4..ebb4861 100644 --- a/js/languages/jquery.validationEngine-de.js +++ b/js/languages/jquery.validationEngine-de.js @@ -98,6 +98,10 @@ "onlyLetterSp": { "regex": /^[a-zA-ZäüöÄÜÖßs\ \\\']+$/, "alertText": "* Nur Buchstaben erlaubt" + }, + "onlyLetterAccentSp":{ + "regex": /^[a-zß\u00C0-\u017F\ ]+$/i, + "alertText": "* Nur Buchstaben erlaubt" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-ZäüöÄÜÖßs-]+$/, diff --git a/js/languages/jquery.validationEngine-en.js b/js/languages/jquery.validationEngine-en.js index 6852d62..ce08433 100644 --- a/js/languages/jquery.validationEngine-en.js +++ b/js/languages/jquery.validationEngine-en.js @@ -136,6 +136,10 @@ "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Letters only" + }, + "onlyLetterAccentSp":{ + "regex": /^[a-z\u00C0-\u017F\ ]+$/i, + "alertText": "* Letters only (accents allowed)" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, diff --git a/js/languages/jquery.validationEngine-es.js b/js/languages/jquery.validationEngine-es.js index 962c59c..c1d6a97 100644 --- a/js/languages/jquery.validationEngine-es.js +++ b/js/languages/jquery.validationEngine-es.js @@ -102,6 +102,10 @@ "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Sólo letras" + }, + "onlyLetterAccentSp":{ + "regex": /^[a-z\u00C0-\u017F\ ]+$/i, + "alertText": "* Sólo letras" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, diff --git a/js/languages/jquery.validationEngine-et.js b/js/languages/jquery.validationEngine-et.js index 78a0764..3ddf223 100644 --- a/js/languages/jquery.validationEngine-et.js +++ b/js/languages/jquery.validationEngine-et.js @@ -113,6 +113,10 @@ "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Tähed ainult" + }, + "onlyLetterAccentSp":{ + "regex": /^[a-z\u00C0-\u017F\ ]+$/i, + "alertText": "* Tähed ainult" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, @@ -136,4 +140,4 @@ } }; $.validationEngineLanguage.newLang(); -})(jQuery); \ No newline at end of file +})(jQuery); diff --git a/js/languages/jquery.validationEngine-fi.js b/js/languages/jquery.validationEngine-fi.js index 5f21564..a0445bf 100644 --- a/js/languages/jquery.validationEngine-fi.js +++ b/js/languages/jquery.validationEngine-fi.js @@ -98,6 +98,10 @@ "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Ainoastaan kirjaimin" + }, + "onlyLetterAccentSp":{ + "regex": /^[a-z\u00C0-\u017F\ ]+$/i, + "alertText": "* Ainoastaan kirjaimin" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, @@ -108,4 +112,4 @@ } }; $.validationEngineLanguage.newLang(); -})(jQuery); \ No newline at end of file +})(jQuery); diff --git a/js/languages/jquery.validationEngine-he.js b/js/languages/jquery.validationEngine-he.js index 79986a6..003b502 100644 --- a/js/languages/jquery.validationEngine-he.js +++ b/js/languages/jquery.validationEngine-he.js @@ -126,6 +126,10 @@ "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* אותיות באנגלית בלבד" + }, + "onlyLetterAccentSp":{ + "regex": /^[a-z\u00C0-\u017F\ ]+$/i, + "alertText": "* אותיות באנגלית בלבד" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, diff --git a/js/languages/jquery.validationEngine-hr.js b/js/languages/jquery.validationEngine-hr.js index 07e81e6..89159da 100644 --- a/js/languages/jquery.validationEngine-hr.js +++ b/js/languages/jquery.validationEngine-hr.js @@ -113,6 +113,10 @@ "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Dozvoljena su samo slova" + }, + "onlyLetterAccentSp":{ + "regex": /^[a-z\u00C0-\u017F\ ]+$/i, + "alertText": "* Dozvoljena su samo slova" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, @@ -174,4 +178,4 @@ } }; $.validationEngineLanguage.newLang(); -})(jQuery); \ No newline at end of file +})(jQuery); diff --git a/js/languages/jquery.validationEngine-hu.js b/js/languages/jquery.validationEngine-hu.js index eea7c9a..c71f194 100644 --- a/js/languages/jquery.validationEngine-hu.js +++ b/js/languages/jquery.validationEngine-hu.js @@ -113,6 +113,10 @@ "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Csak betűket" + }, + "onlyLetterAccentSp":{ + "regex": /^[a-z\u00C0-\u017F\ ]+$/i, + "alertText": "* Csak betűket" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, diff --git a/js/languages/jquery.validationEngine-id.js b/js/languages/jquery.validationEngine-id.js index 754aa17..bcccc0e 100644 --- a/js/languages/jquery.validationEngine-id.js +++ b/js/languages/jquery.validationEngine-id.js @@ -126,6 +126,10 @@ "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Huruf saja" + }, + "onlyLetterAccentSp":{ + "regex": /^[a-z\u00C0-\u017F\ ]+$/i, + "alertText": "* Huruf saja" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, diff --git a/js/languages/jquery.validationEngine-it.js b/js/languages/jquery.validationEngine-it.js index d965446..a12ba98 100644 --- a/js/languages/jquery.validationEngine-it.js +++ b/js/languages/jquery.validationEngine-it.js @@ -81,6 +81,10 @@ "onlyLetter": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Solo lettere" + }, + "onlyLetterAccentSp":{ + "regex": /^[a-z\u00C0-\u017F\ ]+$/i, + "alertText": "* Solo lettere" }, "validate2fields": { "nname": "validate2fields", @@ -108,4 +112,4 @@ } }; $.validationEngineLanguage.newLang(); -})(jQuery); \ No newline at end of file +})(jQuery); diff --git a/js/languages/jquery.validationEngine-lt.js b/js/languages/jquery.validationEngine-lt.js index 04a367c..f8f0f87 100644 --- a/js/languages/jquery.validationEngine-lt.js +++ b/js/languages/jquery.validationEngine-lt.js @@ -139,6 +139,10 @@ "regex" : /^[a-zA-Z\ \']+$/, "alertText" : "* Tik raidės" }, + "onlyLetterAccentSp":{ + "regex": /^[a-z\u00C0-\u017F\ ]+$/i, + "alertText" : "* Tik raidės" + }, "onlyLetterNumber" : { "regex" : /^[0-9a-zA-Z]+$/, "alertText" : "* Specialūs simboliai neleidžiami" diff --git a/js/languages/jquery.validationEngine-nl.js b/js/languages/jquery.validationEngine-nl.js index 94ae41c..edc6bba 100644 --- a/js/languages/jquery.validationEngine-nl.js +++ b/js/languages/jquery.validationEngine-nl.js @@ -104,6 +104,10 @@ "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Alleen leestekens" }, + "onlyLetterAccentSp":{ + "regex": /^[a-z\u00C0-\u017F\ ]+$/i, + "alertText": "* Alleen leestekens" + }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, "alertText": "* Geen vreemde tekens toegestaan" diff --git a/js/languages/jquery.validationEngine-no.js b/js/languages/jquery.validationEngine-no.js index bb46694..8969d2e 100644 --- a/js/languages/jquery.validationEngine-no.js +++ b/js/languages/jquery.validationEngine-no.js @@ -126,6 +126,10 @@ "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Kun bokstaver" + }, + "onlyLetterAccentSp":{ + "regex": /^[a-z\u00C0-\u017F\ ]+$/i, + "alertText": "* Kun bokstaver" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, diff --git a/js/languages/jquery.validationEngine-pl.js b/js/languages/jquery.validationEngine-pl.js index f03142c..971db1f 100644 --- a/js/languages/jquery.validationEngine-pl.js +++ b/js/languages/jquery.validationEngine-pl.js @@ -106,6 +106,10 @@ "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Tylko litery" + }, + "onlyLetterAccentSp":{ + "regex": /^[a-z\u00C0-\u017F\ ]+$/i, + "alertText": "* Tylko litery" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, diff --git a/js/languages/jquery.validationEngine-pt.js b/js/languages/jquery.validationEngine-pt.js index 51f6b35..59d61af 100644 --- a/js/languages/jquery.validationEngine-pt.js +++ b/js/languages/jquery.validationEngine-pt.js @@ -126,6 +126,10 @@ "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Só é permitido letras" + }, + "onlyLetterAccentSp":{ + "regex": /^[a-z\u00C0-\u017F\ ]+$/i, + "alertText": "* Só letras e espaços são permitidos" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, diff --git a/js/languages/jquery.validationEngine-pt_BR.js b/js/languages/jquery.validationEngine-pt_BR.js index 808b2b4..642ba44 100644 --- a/js/languages/jquery.validationEngine-pt_BR.js +++ b/js/languages/jquery.validationEngine-pt_BR.js @@ -107,6 +107,10 @@ "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Apenas letras" + }, + "onlyLetterAccentSp":{ + "regex": /^[a-z\u00C0-\u017F\ ]+$/i, + "alertText": "* Apenas letras e espaços." }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, diff --git a/js/languages/jquery.validationEngine-ro.js b/js/languages/jquery.validationEngine-ro.js index e5dc22c..33f312b 100644 --- a/js/languages/jquery.validationEngine-ro.js +++ b/js/languages/jquery.validationEngine-ro.js @@ -113,6 +113,10 @@ "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Sunt admise doar literele" + }, + "onlyLetterAccentSp":{ + "regex": /^[a-z\u00C0-\u017F\ ]+$/i, + "alertText": "* Sunt admise doar literele" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, @@ -174,4 +178,4 @@ } }; $.validationEngineLanguage.newLang(); -})(jQuery); \ No newline at end of file +})(jQuery); diff --git a/js/languages/jquery.validationEngine-sr_Cyrl.js b/js/languages/jquery.validationEngine-sr_Cyrl.js index b0bce33..630ae8a 100644 --- a/js/languages/jquery.validationEngine-sr_Cyrl.js +++ b/js/languages/jquery.validationEngine-sr_Cyrl.js @@ -136,6 +136,10 @@ "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Дозвољена само слова" + }, + "onlyLetterAccentSp":{ + "regex": /^[a-z\u00C0-\u017F\ ]+$/i, + "alertText": "* Дозвољена само слова" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, diff --git a/js/languages/jquery.validationEngine-sr_Latn.js b/js/languages/jquery.validationEngine-sr_Latn.js index 90b9ca4..0292765 100644 --- a/js/languages/jquery.validationEngine-sr_Latn.js +++ b/js/languages/jquery.validationEngine-sr_Latn.js @@ -136,6 +136,10 @@ "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Dozvoljena samo slova" + }, + "onlyLetterAccentSp":{ + "regex": /^[a-z\u00C0-\u017F\ ]+$/i, + "alertText": "* Dozvoljena samo slova" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, diff --git a/js/languages/jquery.validationEngine-sv.js b/js/languages/jquery.validationEngine-sv.js index 379600a..ce96d45 100644 --- a/js/languages/jquery.validationEngine-sv.js +++ b/js/languages/jquery.validationEngine-sv.js @@ -102,6 +102,10 @@ "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Enbart bokstäver" + }, + "onlyLetterAccentSp":{ + "regex": /^[a-z\u00C0-\u017F\ ]+$/i, + "alertText": "* Enbart bokstäver" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, @@ -150,4 +154,4 @@ } }; $.validationEngineLanguage.newLang(); -})(jQuery); \ No newline at end of file +})(jQuery); diff --git a/js/languages/jquery.validationEngine-tr.js b/js/languages/jquery.validationEngine-tr.js index 112e778..d1c7147 100644 --- a/js/languages/jquery.validationEngine-tr.js +++ b/js/languages/jquery.validationEngine-tr.js @@ -105,6 +105,10 @@ "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Bu alanda sadece harf olmalı" + }, + "onlyLetterAccentSp":{ + "regex": /^[a-z\u00C0-\u017F\ \']+$/i, + "alertText": "* Bu alanda sadece harf olmalı" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, @@ -153,4 +157,4 @@ } }; $.validationEngineLanguage.newLang(); -})(jQuery); \ No newline at end of file +})(jQuery); diff --git a/js/languages/jquery.validationEngine-vi.js b/js/languages/jquery.validationEngine-vi.js index 9703f44..5b9b6ca 100644 --- a/js/languages/jquery.validationEngine-vi.js +++ b/js/languages/jquery.validationEngine-vi.js @@ -113,6 +113,10 @@ "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Chỉ điền chữ" + }, + "onlyLetterAccentSp":{ + "regex": /^[a-z\u00C0-\u017F\ ]+$/i, + "alertText": "* Chỉ điền chữ" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, diff --git a/js/languages/jquery.validationEngine-zh_CN.js b/js/languages/jquery.validationEngine-zh_CN.js index efe0ef2..1eea97c 100644 --- a/js/languages/jquery.validationEngine-zh_CN.js +++ b/js/languages/jquery.validationEngine-zh_CN.js @@ -113,6 +113,10 @@ "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* 只接受英文字母大小写" + }, + "onlyLetterAccentSp":{ + "regex": /^[a-z\u00C0-\u017F\ ]+$/i, + "alertText": "* 只接受英文字母大小写" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, diff --git a/js/languages/jquery.validationEngine-zh_TW.js b/js/languages/jquery.validationEngine-zh_TW.js index 94036f4..c2908d0 100644 --- a/js/languages/jquery.validationEngine-zh_TW.js +++ b/js/languages/jquery.validationEngine-zh_TW.js @@ -113,6 +113,10 @@ "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* 只接受英文字母大小寫" + }, + "onlyLetterAccentSp":{ + "regex": /^[a-z\u00C0-\u017F\ \']+$/i, + "alertText": "* 只接受英文字母大小寫" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, From c3dfba2c6a19cf81911e4e08eaa5a463c70a634c Mon Sep 17 00:00:00 2001 From: cronzon Date: Sat, 9 Aug 2014 17:39:25 +0000 Subject: [PATCH 32/83] Fixes bug #834 --- js/jquery.validationEngine.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/js/jquery.validationEngine.js b/js/jquery.validationEngine.js index 7546f49..85c114e 100644 --- a/js/jquery.validationEngine.js +++ b/js/jquery.validationEngine.js @@ -1715,7 +1715,8 @@ var pos = methods._calculatePosition(field, prompt, options); var css = {"top": pos.callerTopPosition, "left": pos.callerleftPosition, - "marginTop": pos.marginTopSize}; + "marginTop": pos.marginTopSize, + "opacity": 0.87}; if (noAnimation) prompt.css(css); From 73cfa5824f4e399eef2745492652d613cfd8a2ec Mon Sep 17 00:00:00 2001 From: cronzon Date: Sat, 9 Aug 2014 23:33:23 +0000 Subject: [PATCH 33/83] Fixes bug #836 --- js/jquery.validationEngine.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/js/jquery.validationEngine.js b/js/jquery.validationEngine.js index 85c114e..497b02a 100644 --- a/js/jquery.validationEngine.js +++ b/js/jquery.validationEngine.js @@ -1718,6 +1718,11 @@ "marginTop": pos.marginTopSize, "opacity": 0.87}; + prompt.css({ + "opacity": 0, + "display": "block" + }); + if (noAnimation) prompt.css(css); else From d3052f5f5c3bb8bfa71e181ee10f8411274843a5 Mon Sep 17 00:00:00 2001 From: Tim Fevens Date: Thu, 21 Aug 2014 16:30:02 -0300 Subject: [PATCH 34/83] Outdated Class 'formErrorOuter' used. Fixes #836 #824 #834 --- js/jquery.validationEngine.js | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/js/jquery.validationEngine.js b/js/jquery.validationEngine.js index b72fc9a..58b39fe 100644 --- a/js/jquery.validationEngine.js +++ b/js/jquery.validationEngine.js @@ -28,7 +28,7 @@ $(document).on("click", ".formError", function() { $(this).fadeOut(150, function() { // remove prompt once invisible - $(this).closest('.formErrorOuter').remove(); + $(this).closest('.formError').remove(); }); }); } @@ -209,21 +209,20 @@ } else { closingtag = methods._getClassName($(this).attr("id")) +"formError"; } - $('.'+closingtag).fadeTo(fadeDuration, 0.3, function() { - $(this).closest('.formErrorOuter').remove(); + $('.'+closingtag).fadeTo(fadeDuration, 0, function() { + $(this).closest('.formError').remove(); }); return this; }, /** * Closes all error prompts on the page */ - hideAll: function() { - + hideAll: function() { var form = this; var options = form.data('jqv'); var duration = options ? options.fadeDuration:300; - $('.formError').fadeTo(duration, 300, function() { - $(this).closest('.formErrorOuter').remove(); + $('.formError').fadeTo(duration, 0, function() { + $(this).closest('.formError').remove(); }); return this; }, @@ -1697,7 +1696,7 @@ prompt.animate({ "opacity": 0 },function(){ - prompt.closest('.formErrorOuter').remove(); + prompt.closest('.formError').remove(); }); }, options.autoHideDelay); } @@ -1756,7 +1755,7 @@ var prompt = methods._getPrompt(field); if (prompt) prompt.fadeTo("fast", 0, function() { - prompt.closest('.formErrorOuter').remove(); + prompt.closest('.formError').remove(); }); }, closePrompt: function(field) { From 1a17846221514825a30b886d624a04b36698e97d Mon Sep 17 00:00:00 2001 From: Tim Fevens Date: Fri, 22 Aug 2014 09:06:24 -0300 Subject: [PATCH 35/83] Change to fadeDuration default This should be set to a millisecond value (300) instead of seconds (0.3). --- js/jquery.validationEngine.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/jquery.validationEngine.js b/js/jquery.validationEngine.js index b72fc9a..a51eca0 100644 --- a/js/jquery.validationEngine.js +++ b/js/jquery.validationEngine.js @@ -2103,7 +2103,7 @@ // Delay before auto-hide autoHideDelay: 10000, // Fade out duration while hiding the validations - fadeDuration: 0.3, + fadeDuration: 300, // Use Prettify select library prettySelect: false, // Add css class on prompt From d7f3eee94d0ba44ddf2cb972bea4d86321f90df6 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 15 Oct 2014 11:26:02 +0200 Subject: [PATCH 36/83] some fixes and extensions to the italian localization --- js/languages/jquery.validationEngine-it.js | 179 ++++++++++++++++----- 1 file changed, 135 insertions(+), 44 deletions(-) diff --git a/js/languages/jquery.validationEngine-it.js b/js/languages/jquery.validationEngine-it.js index a12ba98..3713eab 100644 --- a/js/languages/jquery.validationEngine-it.js +++ b/js/languages/jquery.validationEngine-it.js @@ -1,5 +1,6 @@ (function($){ - $.fn.validationEngineLanguage = function(){}; + $.fn.validationEngineLanguage = function(){ + }; $.validationEngineLanguage = { newLang: function(){ $.validationEngineLanguage.allRules = { @@ -7,31 +8,65 @@ "regex": "none", "alertText": "* Campo richiesto", "alertTextCheckboxMultiple": "* Per favore selezionare un'opzione", - "alertTextCheckboxe": "* E' richiesta la selezione della casella" + "alertTextCheckboxe": "* E' richiesta la selezione della casella", + "alertTextDateRange": "* Sono richiesti entrambi gli intervalli temporali" }, - "requiredInFunction": { + "requiredInFunction": { "func": function(field, rules, i, options){ return (field.val() == "test") ? true : false; }, - "alertText": "* Field must equal test" + "alertText": "* Il campo deve avere valore 'test'" }, - "length": { + "dateRange": { "regex": "none", - "alertText": "* Fra ", - "alertText2": " e ", - "alertText3": " caratteri permessi" + "alertText": "* Intervallo ", + "alertText2": "non valido" }, - "maxCheckbox": { + "dateTimeRange": { "regex": "none", - "alertText": "* Numero di caselle da selezionare in eccesso" + "alertText": "* Intervallo ", + "alertText2": "non valido" }, - "groupRequired": { + "minSize": { + "regex": "none", + "alertText": "* E' richiesto un minimo di ", + "alertText2": " caratteri" + }, + "maxSize": { + "regex": "none", + "alertText": "* E' richiesto un massimo di ", + "alertText2": " caratteri" + }, + "groupRequired": { + "regex": "none", + "alertText": "* Uno dei seguenti campi deve essere selezionato", + "alertTextCheckboxMultiple": "* Selezionare una opzione", + "alertTextCheckboxe": "* Segno di spunta richiesto" + }, + "min": { + "regex": "none", + "alertText": "* Il valore minimo accettato è " + }, + "max": { + "regex": "none", + "alertText": "* Il valore massimo accettato è " + }, + "past": { + "regex": "none", + "alertText": "* Data antecedente al " + }, + "future": { + "regex": "none", + "alertText": "* Data successiva al " + }, + "maxCheckbox": { "regex": "none", - "alertText": "* You must fill one of the following fields" + "alertText": "* Massimo ", + "alertText2": " opzioni consentite" }, "minCheckbox": { "regex": "none", - "alertText": "* Per favore selezionare ", + "alertText": "* Selezionare almeno ", "alertText2": " opzioni" }, "equals": { @@ -40,7 +75,7 @@ }, "creditCard": { "regex": "none", - "alertText": "* Non valido numero di carta di credito" + "alertText": "* Numero di carta di credito non valido" }, "phone": { // credit: jquery.h5validate.js / orefalo @@ -48,68 +83,124 @@ "alertText": "* Numero di telefono non corretto" }, "email": { - // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ - "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, + // HTML5 compatible email regex ( http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html# e-mail-state-%28type=email%29 ) + "regex": /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, "alertText": "* Indirizzo non corretto" }, + "fullname": { + "regex":/^([a-zA-Z]+[\'\,\.\-]?[a-zA-Z ]*)+[ ]([a-zA-Z]+[\'\,\.\-]?[a-zA-Z ]+)+$/, + "alertText":"* Nome e cognome richiesti" + }, + "zip": { + "regex":/^\d{5}$|^\d{5}-\d{4}$/, + "alertText":"* Formato zip non valido" + }, "integer": { "regex": /^[\-\+]?\d+$/, - "alertText": "* Numero intero non corretto" + "alertText": "* Richiesto un numero intero" }, "number": { - // Number, including positive, negative, and floating decimal. Credit: bassistance - "regex": /^[\-\+]?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)$/, - "alertText": "* Numero decimale non corretto" + // Number, including positive, negative, and floating decimal. credit: orefalo + "regex": /^[\-\+]?((([0-9]{1,3})([,][0-9]{3})*)|([0-9]+))?([\.]([0-9]+))?$/, + "alertText": "* Richiesto un numero decimale" }, "date": { - "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, - "alertText": "* Data non corretta, re-inserire secondo formato AAAA-MM-GG" + // Check if date is valid by leap year + "func": function (field) { + var pattern = new RegExp(/^(\d{4})[\/\-\.](0?[1-9]|1[012])[\/\-\.](0?[1-9]|[12][0-9]|3[01])$/); + var match = pattern.exec(field.val()); + if (match == null) + return false; + + var year = match[1]; + var month = match[2]*1; + var day = match[3]*1; + var date = new Date(year, month - 1, day); // because months starts from 0. + + return (date.getFullYear() == year && date.getMonth() == (month - 1) && date.getDate() == day); + }, + "alertText": "* Data non corretta, è richeisto il formato AAAA-MM-GG" }, - "ipv4": { - "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, + "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, "alertText": "* IP non corretto" }, "url": { "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i, "alertText": "* URL non corretta" }, - "onlyNumber": { + "onlyNumberSp": { "regex": /^[0-9\ ]+$/, "alertText": "* Solo numeri" }, - "onlyLetter": { + "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Solo lettere" }, - "onlyLetterAccentSp":{ + "onlyLetterAccentSp":{ "regex": /^[a-z\u00C0-\u017F\ ]+$/i, - "alertText": "* Solo lettere" - }, - "validate2fields": { - "nname": "validate2fields", - "alertText": "* Occorre inserire nome e cognome" + "alertText": "* Solo lettere (è possibile inserire lettere accentate)" }, - "noSpecialCharacters": { + "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, - "alertText": "* Caratteri speciali non permessi" + "alertText": "* Non è possibile inserire caratteri speciali" }, + // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings "ajaxUserCall": { - "file": "ajaxValidateFieldName", + "url": "ajaxValidateFieldUser", + // you may want to pass extra data on the ajax call "extraData": "name=eric", - "alertTextLoad": "* Caricamento, attendere per favore", - "alertText": "* Questo user � gi� stato utilizzato" + "alertText": "* Questo nome utente è già stato registrato", + "alertTextLoad": "* Caricamento in corso, attendere prego" + }, + "ajaxUserCallPhp": { + "url": "phpajax/ajaxValidateFieldUser.php", + // you may want to pass extra data on the ajax call + "extraData": "name=eric", + // if you provide an "alertTextOk", it will show as a green prompt when the field validates + "alertTextOk": "* Questo nome utente è disponibile", + "alertText": "* Questo nome utente è già stato registrato", + "alertTextLoad": "* Caricamento in corso, attendere prego" }, "ajaxNameCall": { - "file": "ajaxValidateFieldName", - "alertText": "* Questo nome � gi� stato utilizzato", - "alertTextOk": "* Questo nome � disponibile", - "alertTextLoad": "* Caricamento, attendere per favore" + // remote json service location + "url": "ajaxValidateFieldName", + // error + "alertText": "* Questo nome utente è già stato registrato", + // if you provide an "alertTextOk", it will show as a green prompt when the field validates + "alertTextOk": "* Questo nome utente è disponibile", + // speaks by itself + "alertTextLoad": "* Caricamento in corso, attendere prego" + }, + "ajaxNameCallPhp": { + // remote json service location + "url": "phpajax/ajaxValidateFieldName.php", + // error + "alertText": "* Questo nome utente è già stato registrato", + // speaks by itself + "alertTextLoad": "* Caricamento in corso, attendere prego" + }, + "validate2fields": { + "alertText": "* Prego inserire 'HELLO'" + }, + //tls warning:homegrown not fielded + "dateFormat":{ + "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(?:(?:0?[1-9]|1[0-2])(\/|-)(?:0?[1-9]|1\d|2[0-8]))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(0?2(\/|-)29)(\/|-)(?:(?:0[48]00|[13579][26]00|[2468][048]00)|(?:\d\d)?(?:0[48]|[2468][048]|[13579][26]))$/, + "alertText": "* Data non valida" + }, + //tls warning:homegrown not fielded + "dateTimeFormat": { + "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1}$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^((1[012]|0?[1-9]){1}\/(0?[1-9]|[12][0-9]|3[01]){1}\/\d{2,4}\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1})$/, + "alertText": "* Data o formato non validi", + "alertText2": "Formato richiesto: ", + "alertText3": "mm/gg/aaaa oo:mm:ss AM|PM oppure ", + "alertText4": "aaaa-mm-gg oo:mm:ss AM|PM" } - }; - + } }; + $.validationEngineLanguage.newLang(); -})(jQuery); + +})(jQuery); \ No newline at end of file From cfcd71a1597a0f4e83d5a38c45bd9cf459c7bc07 Mon Sep 17 00:00:00 2001 From: Emanuele Tessore Date: Wed, 15 Oct 2014 11:34:38 +0200 Subject: [PATCH 37/83] some fixes and extensions to the italian localization --- js/languages/jquery.validationEngine-it.js | 179 ++++++++++++++++----- 1 file changed, 135 insertions(+), 44 deletions(-) diff --git a/js/languages/jquery.validationEngine-it.js b/js/languages/jquery.validationEngine-it.js index a12ba98..3713eab 100644 --- a/js/languages/jquery.validationEngine-it.js +++ b/js/languages/jquery.validationEngine-it.js @@ -1,5 +1,6 @@ (function($){ - $.fn.validationEngineLanguage = function(){}; + $.fn.validationEngineLanguage = function(){ + }; $.validationEngineLanguage = { newLang: function(){ $.validationEngineLanguage.allRules = { @@ -7,31 +8,65 @@ "regex": "none", "alertText": "* Campo richiesto", "alertTextCheckboxMultiple": "* Per favore selezionare un'opzione", - "alertTextCheckboxe": "* E' richiesta la selezione della casella" + "alertTextCheckboxe": "* E' richiesta la selezione della casella", + "alertTextDateRange": "* Sono richiesti entrambi gli intervalli temporali" }, - "requiredInFunction": { + "requiredInFunction": { "func": function(field, rules, i, options){ return (field.val() == "test") ? true : false; }, - "alertText": "* Field must equal test" + "alertText": "* Il campo deve avere valore 'test'" }, - "length": { + "dateRange": { "regex": "none", - "alertText": "* Fra ", - "alertText2": " e ", - "alertText3": " caratteri permessi" + "alertText": "* Intervallo ", + "alertText2": "non valido" }, - "maxCheckbox": { + "dateTimeRange": { "regex": "none", - "alertText": "* Numero di caselle da selezionare in eccesso" + "alertText": "* Intervallo ", + "alertText2": "non valido" }, - "groupRequired": { + "minSize": { + "regex": "none", + "alertText": "* E' richiesto un minimo di ", + "alertText2": " caratteri" + }, + "maxSize": { + "regex": "none", + "alertText": "* E' richiesto un massimo di ", + "alertText2": " caratteri" + }, + "groupRequired": { + "regex": "none", + "alertText": "* Uno dei seguenti campi deve essere selezionato", + "alertTextCheckboxMultiple": "* Selezionare una opzione", + "alertTextCheckboxe": "* Segno di spunta richiesto" + }, + "min": { + "regex": "none", + "alertText": "* Il valore minimo accettato è " + }, + "max": { + "regex": "none", + "alertText": "* Il valore massimo accettato è " + }, + "past": { + "regex": "none", + "alertText": "* Data antecedente al " + }, + "future": { + "regex": "none", + "alertText": "* Data successiva al " + }, + "maxCheckbox": { "regex": "none", - "alertText": "* You must fill one of the following fields" + "alertText": "* Massimo ", + "alertText2": " opzioni consentite" }, "minCheckbox": { "regex": "none", - "alertText": "* Per favore selezionare ", + "alertText": "* Selezionare almeno ", "alertText2": " opzioni" }, "equals": { @@ -40,7 +75,7 @@ }, "creditCard": { "regex": "none", - "alertText": "* Non valido numero di carta di credito" + "alertText": "* Numero di carta di credito non valido" }, "phone": { // credit: jquery.h5validate.js / orefalo @@ -48,68 +83,124 @@ "alertText": "* Numero di telefono non corretto" }, "email": { - // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ - "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, + // HTML5 compatible email regex ( http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html# e-mail-state-%28type=email%29 ) + "regex": /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, "alertText": "* Indirizzo non corretto" }, + "fullname": { + "regex":/^([a-zA-Z]+[\'\,\.\-]?[a-zA-Z ]*)+[ ]([a-zA-Z]+[\'\,\.\-]?[a-zA-Z ]+)+$/, + "alertText":"* Nome e cognome richiesti" + }, + "zip": { + "regex":/^\d{5}$|^\d{5}-\d{4}$/, + "alertText":"* Formato zip non valido" + }, "integer": { "regex": /^[\-\+]?\d+$/, - "alertText": "* Numero intero non corretto" + "alertText": "* Richiesto un numero intero" }, "number": { - // Number, including positive, negative, and floating decimal. Credit: bassistance - "regex": /^[\-\+]?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)$/, - "alertText": "* Numero decimale non corretto" + // Number, including positive, negative, and floating decimal. credit: orefalo + "regex": /^[\-\+]?((([0-9]{1,3})([,][0-9]{3})*)|([0-9]+))?([\.]([0-9]+))?$/, + "alertText": "* Richiesto un numero decimale" }, "date": { - "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, - "alertText": "* Data non corretta, re-inserire secondo formato AAAA-MM-GG" + // Check if date is valid by leap year + "func": function (field) { + var pattern = new RegExp(/^(\d{4})[\/\-\.](0?[1-9]|1[012])[\/\-\.](0?[1-9]|[12][0-9]|3[01])$/); + var match = pattern.exec(field.val()); + if (match == null) + return false; + + var year = match[1]; + var month = match[2]*1; + var day = match[3]*1; + var date = new Date(year, month - 1, day); // because months starts from 0. + + return (date.getFullYear() == year && date.getMonth() == (month - 1) && date.getDate() == day); + }, + "alertText": "* Data non corretta, è richeisto il formato AAAA-MM-GG" }, - "ipv4": { - "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, + "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, "alertText": "* IP non corretto" }, "url": { "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i, "alertText": "* URL non corretta" }, - "onlyNumber": { + "onlyNumberSp": { "regex": /^[0-9\ ]+$/, "alertText": "* Solo numeri" }, - "onlyLetter": { + "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, "alertText": "* Solo lettere" }, - "onlyLetterAccentSp":{ + "onlyLetterAccentSp":{ "regex": /^[a-z\u00C0-\u017F\ ]+$/i, - "alertText": "* Solo lettere" - }, - "validate2fields": { - "nname": "validate2fields", - "alertText": "* Occorre inserire nome e cognome" + "alertText": "* Solo lettere (è possibile inserire lettere accentate)" }, - "noSpecialCharacters": { + "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, - "alertText": "* Caratteri speciali non permessi" + "alertText": "* Non è possibile inserire caratteri speciali" }, + // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings "ajaxUserCall": { - "file": "ajaxValidateFieldName", + "url": "ajaxValidateFieldUser", + // you may want to pass extra data on the ajax call "extraData": "name=eric", - "alertTextLoad": "* Caricamento, attendere per favore", - "alertText": "* Questo user � gi� stato utilizzato" + "alertText": "* Questo nome utente è già stato registrato", + "alertTextLoad": "* Caricamento in corso, attendere prego" + }, + "ajaxUserCallPhp": { + "url": "phpajax/ajaxValidateFieldUser.php", + // you may want to pass extra data on the ajax call + "extraData": "name=eric", + // if you provide an "alertTextOk", it will show as a green prompt when the field validates + "alertTextOk": "* Questo nome utente è disponibile", + "alertText": "* Questo nome utente è già stato registrato", + "alertTextLoad": "* Caricamento in corso, attendere prego" }, "ajaxNameCall": { - "file": "ajaxValidateFieldName", - "alertText": "* Questo nome � gi� stato utilizzato", - "alertTextOk": "* Questo nome � disponibile", - "alertTextLoad": "* Caricamento, attendere per favore" + // remote json service location + "url": "ajaxValidateFieldName", + // error + "alertText": "* Questo nome utente è già stato registrato", + // if you provide an "alertTextOk", it will show as a green prompt when the field validates + "alertTextOk": "* Questo nome utente è disponibile", + // speaks by itself + "alertTextLoad": "* Caricamento in corso, attendere prego" + }, + "ajaxNameCallPhp": { + // remote json service location + "url": "phpajax/ajaxValidateFieldName.php", + // error + "alertText": "* Questo nome utente è già stato registrato", + // speaks by itself + "alertTextLoad": "* Caricamento in corso, attendere prego" + }, + "validate2fields": { + "alertText": "* Prego inserire 'HELLO'" + }, + //tls warning:homegrown not fielded + "dateFormat":{ + "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(?:(?:0?[1-9]|1[0-2])(\/|-)(?:0?[1-9]|1\d|2[0-8]))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(0?2(\/|-)29)(\/|-)(?:(?:0[48]00|[13579][26]00|[2468][048]00)|(?:\d\d)?(?:0[48]|[2468][048]|[13579][26]))$/, + "alertText": "* Data non valida" + }, + //tls warning:homegrown not fielded + "dateTimeFormat": { + "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1}$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^((1[012]|0?[1-9]){1}\/(0?[1-9]|[12][0-9]|3[01]){1}\/\d{2,4}\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1})$/, + "alertText": "* Data o formato non validi", + "alertText2": "Formato richiesto: ", + "alertText3": "mm/gg/aaaa oo:mm:ss AM|PM oppure ", + "alertText4": "aaaa-mm-gg oo:mm:ss AM|PM" } - }; - + } }; + $.validationEngineLanguage.newLang(); -})(jQuery); + +})(jQuery); \ No newline at end of file From c48da24bb8b6927e0414fc1a81dac89cd9a4119b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Powro=C5=BAnik?= Date: Sat, 25 Oct 2014 14:24:40 +0200 Subject: [PATCH 38/83] added validation popular input data PESEL number and TAX ID - NIP --- js/languages/jquery.validationEngine-pl.js | 37 ++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/js/languages/jquery.validationEngine-pl.js b/js/languages/jquery.validationEngine-pl.js index 971db1f..e5ccea5 100644 --- a/js/languages/jquery.validationEngine-pl.js +++ b/js/languages/jquery.validationEngine-pl.js @@ -26,7 +26,7 @@ "alertText": "* Maksymalna liczba znaków to ", "alertText2": "" }, - "groupRequired": { + "groupRequired": { "regex": "none", "alertText": "* Proszę wypełnić wymienione opcje" }, @@ -91,6 +91,40 @@ "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, "alertText": "* Data musi być w postaci RRRR-MM-DD" }, + "nip":{ + "func": function(field, rules, i, options){ + var nipNumber = field.val().replace(/[\s-]/gi, ''); + var verificator_nip = new Array(6,5,7,2,3,4,5,6,7); + if (nipNumber.length == 10) { + var n=0; + for (var i=0; i<9; i++) + { + n += nipNumber[i] * verificator_nip[i]; + } + n %= 11; + if (n == nipNumber[9]) {return true;} + } + return false; + }, + "alertText": "* Nieprawidłowy numer NIP" + }, + "pesel":{ + "func": function(field, rules, i, options){ + var pesel = field.val().replace(/[\s-]/gi, ''); + var peselArr = new Array(1,3,7,9,1,3,7,9,1,3); + if(pesel.length == 11){ + var peselCRC=0; + for (var i=0; i<10;i++){ + peselCRC += peselArr[i]*pesel[i]; + } + peselCRC%=10; + if(peselCRC == 0) peselCRC=10; + peselCRC = 10 - peselCRC; + if(pesel[10]==peselCRC) return true; else return false; + } + }, + "alertText": "* Nieprawidłowy numer PESEL" + }, "ipv4": { "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, "alertText": "* Nieprawidłowy adres IP" @@ -137,7 +171,6 @@ "alertText": "* Proszę wpisać HELLO" } }; - } }; $.validationEngineLanguage.newLang(); From 6ddd55a91609a4decbefa64e50a11b110b1fa0d2 Mon Sep 17 00:00:00 2001 From: Stephen Rodriguez Date: Wed, 29 Oct 2014 14:07:34 -0400 Subject: [PATCH 39/83] Serious bug with the input validate method I was working with some form validation on a public facing site and noticed that the current validationEngine code does not properly validate single input fields in a form. The bug was discovered as an issue of "re-scoping". Within the else block of the methods._validate() function, the valid variable was being rescoped and edited within. However, the variable assignment would not transcend up to the global function variables (see Line 106). As such, I removed the "re-scoping" and added a return !valid because the value of valid after Lines 140-144 is inverted. We need to properly return True for Valid and False for Invalid. --- js/jquery.validationEngine.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/js/jquery.validationEngine.js b/js/jquery.validationEngine.js index 61d99c3..75b0bb1 100644 --- a/js/jquery.validationEngine.js +++ b/js/jquery.validationEngine.js @@ -133,9 +133,17 @@ element.removeClass('validating'); } else { // field validation - var form = element.closest('form, .validationEngineContainer'), - options = (form.data('jqv')) ? form.data('jqv') : $.validationEngine.defaults, - valid = methods._validateField(element, options); + var form = element.closest('form, .validationEngineContainer'); + options = (form.data('jqv')) ? form.data('jqv') : $.validationEngine.defaults; + valid = methods._validateField(element, options); + + if (valid && options.onFieldSuccess) + options.onFieldSuccess(); + else if (options.onFieldFailure && options.InvalidFields.length > 0) { + options.onFieldFailure(); + } + + return !valid; } if(options.onValidationComplete) { // !! ensures that an undefined return is interpreted as return false but allows a onValidationComplete() to possibly return true and have form continue processing From e5a16bfc0458df8107e32976174107e4c585c736 Mon Sep 17 00:00:00 2001 From: Stephen Rodriguez Date: Wed, 29 Oct 2014 14:10:30 -0400 Subject: [PATCH 40/83] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 42d4ea7..82da8cf 100644 --- a/README.md +++ b/README.md @@ -232,7 +232,7 @@ $("#formID1").validationEngine('detach'); Validates a form or field, displays error prompts accordingly. Returns *true* if the form validates, *false* if it contains errors. -It is inversed for *fields*, it return false on validate and true on errors. +For *fields*, it returns true on validate and false on errors. When using form validation with ajax, it returns *undefined* , the result is delivered asynchronously via function *options.onAjaxFormComplete*. From 8fffdb24664b82218c1a0fc7fc0bc95f846fa059 Mon Sep 17 00:00:00 2001 From: Stephen Rodriguez Date: Wed, 29 Oct 2014 14:11:06 -0400 Subject: [PATCH 41/83] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 82da8cf..ac7a414 100644 --- a/README.md +++ b/README.md @@ -236,7 +236,7 @@ For *fields*, it returns true on validate and false on errors. When using form validation with ajax, it returns *undefined* , the result is delivered asynchronously via function *options.onAjaxFormComplete*. -``` +```html // form validation alert( $("#formID1").validationEngine('validate') ); From 0c3d9b9f009c97bae4f632dff8f0d0faeebcec44 Mon Sep 17 00:00:00 2001 From: Stephen Rodriguez Date: Wed, 29 Oct 2014 14:11:44 -0400 Subject: [PATCH 42/83] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ac7a414..8e2bbdc 100644 --- a/README.md +++ b/README.md @@ -236,7 +236,7 @@ For *fields*, it returns true on validate and false on errors. When using form validation with ajax, it returns *undefined* , the result is delivered asynchronously via function *options.onAjaxFormComplete*. -```html +```js // form validation alert( $("#formID1").validationEngine('validate') ); From 47b0e1097166f2a9f9040f1d504305ec9bd8fd5f Mon Sep 17 00:00:00 2001 From: Lahphim Date: Mon, 29 Dec 2014 10:09:30 +0700 Subject: [PATCH 43/83] add for support thai language --- js/languages/jquery.validationEngine-th.js | 206 +++++++++++++++++++++ 1 file changed, 206 insertions(+) create mode 100644 js/languages/jquery.validationEngine-th.js diff --git a/js/languages/jquery.validationEngine-th.js b/js/languages/jquery.validationEngine-th.js new file mode 100644 index 0000000..aef6204 --- /dev/null +++ b/js/languages/jquery.validationEngine-th.js @@ -0,0 +1,206 @@ +(function($){ + $.fn.validationEngineLanguage = function(){ + }; + $.validationEngineLanguage = { + newLang: function(){ + $.validationEngineLanguage.allRules = { + "required": { // Add your regex rules here, you can take telephone as an example + "regex": "none", + "alertText": "* กรุณากรอกข้อมูล", + "alertTextCheckboxMultiple": "* กรุเลือกตัวเลือก", + "alertTextCheckboxe": "* กรุณาเลือก 1 ตัวเลือก", + "alertTextDateRange": "* กรุณาเลือกวันที่" + }, + "requiredInFunction": { + "func": function(field, rules, i, options){ + return (field.val() == "test") ? true : false; + }, + "alertText": "* ข้อมูลช่องนี้ต้องมีค่าเท่ากับ test" + }, + "dateRange": { + "regex": "none", + "alertText": "* ข้อมูลไม่ถูกต้อง ", + "alertText2": "ช่วงของวันที่" + }, + "dateTimeRange": { + "regex": "none", + "alertText": "* ข้อมูลไม่ถูกต้อง ", + "alertText2": "ช่วงของวันที่และเวลา" + }, + "minSize": { + "regex": "none", + "alertText": "* ข้อมูลอย่างน้อย ", + "alertText2": " ตัวอักษร" + }, + "maxSize": { + "regex": "none", + "alertText": "* ข้อมูลมากสุด ", + "alertText2": " ตัวอักษร" + }, + "groupRequired": { + "regex": "none", + "alertText": "* กรุณาเลือก 1 ตัวเลือกจากทั้งหมด", + "alertTextCheckboxMultiple": "* กรุณาเลือกตัวเลือก", + "alertTextCheckboxe": "* กรุณาเลือก 1 ตัวเลือก" + }, + "min": { + "regex": "none", + "alertText": "* ข้อมูลอย่างน้อยคือ " + }, + "max": { + "regex": "none", + "alertText": "* ข้อมูลอย่างมากคือ " + }, + "past": { + "regex": "none", + "alertText": "* วันก่อนหน้า " + }, + "future": { + "regex": "none", + "alertText": "* วันในอดีต " + }, + "maxCheckbox": { + "regex": "none", + "alertText": "* มากที่สุด ", + "alertText2": " จำนวนของที่เลือกได้" + }, + "minCheckbox": { + "regex": "none", + "alertText": "* กรุณาเลือก ", + "alertText2": " ข้อ" + }, + "equals": { + "regex": "none", + "alertText": "* ข้อมูลไม่ตรงกัน" + }, + "creditCard": { + "regex": "none", + "alertText": "* เลขบัตรเครติดไม่ถูกต้อง" + }, + "phone": { + // credit: jquery.h5validate.js / orefalo + "regex": /^([\+][0-9]{1,3}([ \.\-])?)?([\(][0-9]{1,6}[\)])?([0-9 \.\-]{1,32})(([A-Za-z \:]{1,11})?[0-9]{1,4}?)$/, + "alertText": "* เบอร์โทรศัพท์ไม่ถูกต้อง" + }, + "email": { + // HTML5 compatible email regex ( http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html# e-mail-state-%28type=email%29 ) + "regex": /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, + "alertText": "* อีเมล์ไม่ถูกต้อง" + }, + "fullname": { + "regex":/^([a-zA-Z]+[\'\,\.\-]?[a-zA-Z ]*)+[ ]([a-zA-Z]+[\'\,\.\-]?[a-zA-Z ]+)+$/, + "alertText": "* ต้องใส่ชื่อและนามสกุล" + }, + "zip": { + "regex":/^\d{5}$|^\d{5}-\d{4}$/, + "alertText": "* รหัสไปรษณีย์ไม่ถูกต้อง" + }, + "integer": { + "regex": /^[\-\+]?\d+$/, + "alertText": "* จำนวนเต็มไม่ถูกต้อง" + }, + "number": { + // Number, including positive, negative, and floating decimal. credit: orefalo + "regex": /^[\-\+]?((([0-9]{1,3})([,][0-9]{3})*)|([0-9]+))?([\.]([0-9]+))?$/, + "alertText": "* ตัวเลขไม่ถูกต้อง" + }, + "date": { + // Check if date is valid by leap year + "func": function (field) { + var pattern = new RegExp(/^(\d{4})[\/\-\.](0?[1-9]|1[012])[\/\-\.](0?[1-9]|[12][0-9]|3[01])$/); + var match = pattern.exec(field.val()); + if (match == null) + return false; + + var year = match[1]; + var month = match[2]*1; + var day = match[3]*1; + var date = new Date(year, month - 1, day); // because months starts from 0. + + return (date.getFullYear() == year && date.getMonth() == (month - 1) && date.getDate() == day); + }, + "alertText": "* วันที่ไม่ถูกต้อง, ต้องเป็นรูปแบบ ปปปป-ดด-วว" + }, + "ipv4": { + "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, + "alertText": "* ที่อยู่ IP ไม่ถูกต้อง" + }, + "url": { + "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i, + "alertText": "* ลิงค์ไม่ถูกต้อง" + }, + "onlyNumberSp": { + "regex": /^[0-9\ ]+$/, + "alertText": "* ตัวเลขเท่านั้น" + }, + "onlyLetterSp": { + "regex": /^[a-zA-Z\ \']+$/, + "alertText": "* ตัวหนังสือเท่านั้น" + }, + "onlyLetterAccentSp":{ + "regex": /^[a-z\u00C0-\u017F\ ]+$/i, + "alertText": "* ตัวหนังสือเท่านั้น" + }, + "onlyLetterNumber": { + "regex": /^[0-9a-zA-Z]+$/, + "alertText": "alertText": "* ไม่สามารถใช้อักษรพิเศษ" + }, + // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings + "ajaxUserCall": { + "url": "ajaxValidateFieldUser", + // you may want to pass extra data on the ajax call + "extraData": "name=eric", + "alertText": "* ข้อมูลถูกใช้ไปแล้ว", + "alertTextLoad": "* กำลังตรวจสอบข้อมูล" + }, + "ajaxUserCallPhp": { + "url": "phpajax/ajaxValidateFieldUser.php", + // you may want to pass extra data on the ajax call + "extraData": "name=eric", + // if you provide an "alertTextOk", it will show as a green prompt when the field validates + "alertTextOk": "* ใช้ username นี้ได้", + "alertText": "* ชื่อผู้ใช้นี้ถูกใช้ไปแล้ว", + "alertTextLoad": "* กำลังตรวจสอบข้อมูล" + }, + "ajaxNameCall": { + // remote json service location + "url": "ajaxValidateFieldName", + // error + "alertText": "* ชื่อนี้ถูกใช้ไปแล้ว", + // if you provide an "alertTextOk", it will show as a green prompt when the field validates + "alertTextOk": "* ใช้ชื่อนี้ได้", + // speaks by itself + "alertTextLoad": "* กำลังจรวจสอบข้อมูล" + }, + "ajaxNameCallPhp": { + // remote json service location + "url": "phpajax/ajaxValidateFieldName.php", + // error + "alertText": "* ชื่อนี้ถูกใช้ไปแล้ว", + // speaks by itself + "alertTextLoad": "* กำลังจรวจสอบข้อมูล" + }, + "validate2fields": { + "alertText": "* กรอกข้อมูล HELLO" + }, + //tls warning:homegrown not fielded + "dateFormat":{ + "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(?:(?:0?[1-9]|1[0-2])(\/|-)(?:0?[1-9]|1\d|2[0-8]))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(0?2(\/|-)29)(\/|-)(?:(?:0[48]00|[13579][26]00|[2468][048]00)|(?:\d\d)?(?:0[48]|[2468][048]|[13579][26]))$/, + "alertText": "* วันที่ไม่ถูกต้อง" + }, + //tls warning:homegrown not fielded + "dateTimeFormat": { + "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1}$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^((1[012]|0?[1-9]){1}\/(0?[1-9]|[12][0-9]|3[01]){1}\/\d{2,4}\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1})$/, + "alertText": "* รูปแบบวันที่และเวลาไม่ถูกต้อง", + "alertText2": "ต้องการรูปแบบตามนี้: ", + "alertText3": "ดด/วว/ปปปป hh:mm:ss AM|PM หรือ ", + "alertText4": "ปปปป-ดด-วว hh:mm:ss AM|PM" + } + }; + + } + }; + + $.validationEngineLanguage.newLang(); + +})(jQuery); From 57095e29c401ff246a37821cce5984c40d737542 Mon Sep 17 00:00:00 2001 From: iceddante Date: Thu, 22 Jan 2015 20:46:51 -0500 Subject: [PATCH 44/83] Hide Prompt Fix For situations where validationEngineContainer is used instead of the form, hiding prompts was not working. I reviewed the "hide" source code and it looked like the logic is faulty (using this instead of the form variable). Making that change fixes the issue. --- js/jquery.validationEngine.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/js/jquery.validationEngine.js b/js/jquery.validationEngine.js index f8233e4..ef88e0f 100644 --- a/js/jquery.validationEngine.js +++ b/js/jquery.validationEngine.js @@ -212,10 +212,10 @@ var fadeDuration = (options && options.fadeDuration) ? options.fadeDuration : 0.3; var closingtag; - if($(this).is("form") || $(this).hasClass("validationEngineContainer")) { - closingtag = "parentForm"+methods._getClassName($(this).attr("id")); + if(form.is("form") || form.hasClass("validationEngineContainer")) { + closingtag = "parentForm"+methods._getClassName($(form).attr("id")); } else { - closingtag = methods._getClassName($(this).attr("id")) +"formError"; + closingtag = methods._getClassName($(form).attr("id")) +"formError"; } $('.'+closingtag).fadeTo(fadeDuration, 0, function() { $(this).closest('.formError').remove(); From 06b5d686bcb6fe620fba5a997eadd985e49fbf1d Mon Sep 17 00:00:00 2001 From: dstream Date: Wed, 1 Jul 2015 14:47:37 +0700 Subject: [PATCH 45/83] 'replace' method on IE8 issue Object doesn't support property or method 'replace' at line 523 --- js/jquery.validationEngine.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/jquery.validationEngine.js b/js/jquery.validationEngine.js index ef88e0f..da410b1 100644 --- a/js/jquery.validationEngine.js +++ b/js/jquery.validationEngine.js @@ -577,7 +577,7 @@ var form = $(field.closest("form, .validationEngineContainer")); // Fix for adding spaces in the rules for (var i = 0; i < rules.length; i++) { - rules[i] = rules[i].replace(" ", ""); + rules[i] = rules[i].toString().replace(" ", "");//.toString to worked on IE8 // Remove any parsing errors if (rules[i] === '') { delete rules[i]; From 54597128624c5304518996c48929d44c45bef591 Mon Sep 17 00:00:00 2001 From: Henk Spaan Date: Tue, 8 Sep 2015 12:32:13 +0200 Subject: [PATCH 46/83] Avoid trailing
in prompt --- js/jquery.validationEngine.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/js/jquery.validationEngine.js b/js/jquery.validationEngine.js index ef88e0f..172990a 100644 --- a/js/jquery.validationEngine.js +++ b/js/jquery.validationEngine.js @@ -730,7 +730,10 @@ //funcCallRequired, first in rules, and has error, skip anything else if( i==0 && str.indexOf('funcCallRequired')==0 && errorMsg !== undefined ){ - promptText += errorMsg + "
"; + if(promptText != '') { + promptText += "
" + } + promptText += errorMsg; options.isError=true; field_errors++; end_validation=true; @@ -743,7 +746,10 @@ // If we have a string, that means that we have an error, so add it to the error message. if (typeof errorMsg == 'string') { - promptText += errorMsg + "
"; + if(promptText != '') { + promptText += "
" + } + promptText += errorMsg; options.isError = true; field_errors++; } From 8e906d725219621126225e631f2787d58a46441d Mon Sep 17 00:00:00 2001 From: Henk Spaan Date: Tue, 8 Sep 2015 12:38:35 +0200 Subject: [PATCH 47/83] Avoid trailing
in prompt --- js/jquery.validationEngine.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/jquery.validationEngine.js b/js/jquery.validationEngine.js index 172990a..aa011c2 100644 --- a/js/jquery.validationEngine.js +++ b/js/jquery.validationEngine.js @@ -731,7 +731,7 @@ //funcCallRequired, first in rules, and has error, skip anything else if( i==0 && str.indexOf('funcCallRequired')==0 && errorMsg !== undefined ){ if(promptText != '') { - promptText += "
" + promptText += "
"; } promptText += errorMsg; options.isError=true; @@ -747,7 +747,7 @@ // If we have a string, that means that we have an error, so add it to the error message. if (typeof errorMsg == 'string') { if(promptText != '') { - promptText += "
" + promptText += "
"; } promptText += errorMsg; options.isError = true; From 85edc1cc05e41e60791fc696bd99a5af4e6e31b1 Mon Sep 17 00:00:00 2001 From: Paul Date: Fri, 11 Sep 2015 14:43:50 +0300 Subject: [PATCH 48/83] Create jquery.validationEngine-uk Added support for ukrainian language --- js/languages/jquery.validationEngine-uk | 135 ++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 js/languages/jquery.validationEngine-uk diff --git a/js/languages/jquery.validationEngine-uk b/js/languages/jquery.validationEngine-uk new file mode 100644 index 0000000..c9cc4e3 --- /dev/null +++ b/js/languages/jquery.validationEngine-uk @@ -0,0 +1,135 @@ +(function($){ + $.fn.validationEngineLanguage = function(){ + }; + $.validationEngineLanguage = { + newLang: function(){ + $.validationEngineLanguage.allRules = { + "required": { // Add your regex rules here, you can take telephone as an example + "regex": "none", + "alertText": "* Необхідно заповнити", + "alertTextCheckboxMultiple": "* Ви повинні вибрати варіант", + "alertTextCheckboxe": "* Необхідно відмітити" + }, + "requiredInFunction": { + "func": function(field, rules, i, options){ + return (field.val() == "test") ? true : false; + }, + "alertText": "* Значення поля повинно бути test" + }, + "minSize": { + "regex": "none", + "alertText": "* Мінімум ", + "alertText2": " символа(ів)" + }, + "maxSize": { + "regex": "none", + "alertText": "* Максимум ", + "alertText2": " символа(ів)" + }, + "groupRequired": { + "regex": "none", + "alertText": "* Ви повинні заповнити одне за наступних полів" + }, + "min": { + "regex": "none", + "alertText": "* Мінімальне значення " + }, + "max": { + "regex": "none", + "alertText": "* Максимальне значення " + }, + "past": { + "regex": "none", + "alertText": "* Дата до " + }, + "future": { + "regex": "none", + "alertText": "* Дата від " + }, + "maxCheckbox": { + "regex": "none", + "alertText": "* Не можна вибирати стільки варіантів" + }, + "minCheckbox": { + "regex": "none", + "alertText": "* Будь ласка, оберіть ", + "alertText2": " опцію(ії)" + }, + "equals": { + "regex": "none", + "alertText": "* Поля не співпадають" + }, + "creditCard": { + "regex": "none", + "alertText": "* Невірний номер кредитної карти" + }, + "phone": { + // credit: jquery.h5validate.js / orefalo + "regex": /^([\+][0-9]{1,3}([ \.\-])?)?([\(][0-9]{1,6}[\)])?([0-9 \.\-]{1,32})(([A-Za-z \:]{1,11})?[0-9]{1,4}?)$/, + "alertText": "* Неправильний формат телефону" + }, + "email": { + // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ + "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, + "alertText": "* Невірний формат email" + }, + "integer": { + "regex": /^[\-\+]?\d+$/, + "alertText": "* Не ціле число" + }, + "number": { + // Number, including positive, negative, and floating decimal. credit: orefalo + "regex": /^[\-\+]?((([0-9]{1,3})([,][0-9]{3})*)|([0-9]+))?([\.]([0-9]+))?$/, + "alertText": "* Невірне число з плаваючою точкою" + }, + "date": { + "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, + "alertText": "* Неправильна дата (повинно бути у форматі ДД.MM.РРРР)" + }, + "ipv4": { + "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, + "alertText": "* Неправильна IP-адреса" + }, + "url": { + "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i, + "alertText": "* Невірний URL" + }, + "onlyNumberSp": { + "regex": /^[0-9\ ]+$/, + "alertText": "* Тільки числа" + }, + "onlyLetterSp": { + "regex": /^[a-zA-Z\u0400-\u04FF\ \']+$/, + "alertText": "* Тільки літери" + }, + "onlyLetterNumber": { + "regex": /^[0-9a-zA-Z\u0400-\u04FF]+$/, + "alertText": "* Заборонені спеціальні символи" + }, + // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings + "ajaxUserCall": { + "url": "ajaxValidateFieldUser", + // you may want to pass extra data on the ajax call + "extraData": "name=eric", + "alertText": "* Цей користувач уже зайнятий", + "alertTextLoad": "* Перевірка, зачекайте..." + }, + "ajaxNameCall": { + // remote json service location + "url": "ajaxValidateFieldName", + // error + "alertText": "* Це ім'я уже зайнято", + // if you provide an "alertTextOk", it will show as a green prompt when the field validates + "alertTextOk": "* Це ім'я доступне", + // speaks by itself + "alertTextLoad": "* Перевірка, зачекайте..." + }, + "validate2fields": { + "alertText": "* Будь ласка, введіть HELLO" + } + }; + + } + }; + $.validationEngineLanguage.newLang(); +})(jQuery); From c87a6cf3a244c062371492f07c27f761efb4125b Mon Sep 17 00:00:00 2001 From: gurskyi Date: Thu, 24 Sep 2015 12:50:11 +0300 Subject: [PATCH 49/83] Create jquery.validationEngine-uk.js --- js/languages/jquery.validationEngine-uk.js | 206 +++++++++++++++++++++ 1 file changed, 206 insertions(+) create mode 100644 js/languages/jquery.validationEngine-uk.js diff --git a/js/languages/jquery.validationEngine-uk.js b/js/languages/jquery.validationEngine-uk.js new file mode 100644 index 0000000..72d2ce8 --- /dev/null +++ b/js/languages/jquery.validationEngine-uk.js @@ -0,0 +1,206 @@ +(function($){ + $.fn.validationEngineLanguage = function(){ + }; + $.validationEngineLanguage = { + newLang: function(){ + $.validationEngineLanguage.allRules = { + "required": { // Add your regex rules here, you can take telephone as an example + "regex": "none", + "alertText": "* This field is required", + "alertTextCheckboxMultiple": "* Please select an option", + "alertTextCheckboxe": "* This checkbox is required", + "alertTextDateRange": "* Both date range fields are required" + }, + "requiredInFunction": { + "func": function(field, rules, i, options){ + return (field.val() == "test") ? true : false; + }, + "alertText": "* Field must equal test" + }, + "dateRange": { + "regex": "none", + "alertText": "* Invalid ", + "alertText2": "Date Range" + }, + "dateTimeRange": { + "regex": "none", + "alertText": "* Invalid ", + "alertText2": "Date Time Range" + }, + "minSize": { + "regex": "none", + "alertText": "* Minimum ", + "alertText2": " characters required" + }, + "maxSize": { + "regex": "none", + "alertText": "* Maximum ", + "alertText2": " characters allowed" + }, + "groupRequired": { + "regex": "none", + "alertText": "* You must fill one of the following fields", + "alertTextCheckboxMultiple": "* Please select an option", + "alertTextCheckboxe": "* This checkbox is required" + }, + "min": { + "regex": "none", + "alertText": "* Minimum value is " + }, + "max": { + "regex": "none", + "alertText": "* Maximum value is " + }, + "past": { + "regex": "none", + "alertText": "* Date prior to " + }, + "future": { + "regex": "none", + "alertText": "* Date past " + }, + "maxCheckbox": { + "regex": "none", + "alertText": "* Maximum ", + "alertText2": " options allowed" + }, + "minCheckbox": { + "regex": "none", + "alertText": "* Please select ", + "alertText2": " options" + }, + "equals": { + "regex": "none", + "alertText": "* Fields do not match" + }, + "creditCard": { + "regex": "none", + "alertText": "* Invalid credit card number" + }, + "phone": { + // credit: jquery.h5validate.js / orefalo + "regex": /^([\+][0-9]{1,3}([ \.\-])?)?([\(][0-9]{1,6}[\)])?([0-9 \.\-]{1,32})(([A-Za-z \:]{1,11})?[0-9]{1,4}?)$/, + "alertText": "* Invalid phone number" + }, + "email": { + // HTML5 compatible email regex ( http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html# e-mail-state-%28type=email%29 ) + "regex": /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, + "alertText": "* Invalid email address" + }, + "fullname": { + "regex":/^([a-zA-Z]+[\'\,\.\-]?[a-zA-Z ]*)+[ ]([a-zA-Z]+[\'\,\.\-]?[a-zA-Z ]+)+$/, + "alertText":"* Must be first and last name" + }, + "zip": { + "regex":/^\d{5}$|^\d{5}-\d{4}$/, + "alertText":"* Invalid zip format" + }, + "integer": { + "regex": /^[\-\+]?\d+$/, + "alertText": "* Not a valid integer" + }, + "number": { + // Number, including positive, negative, and floating decimal. credit: orefalo + "regex": /^[\-\+]?((([0-9]{1,3})([,][0-9]{3})*)|([0-9]+))?([\.]([0-9]+))?$/, + "alertText": "* Invalid floating decimal number" + }, + "date": { + // Check if date is valid by leap year + "func": function (field) { + var pattern = new RegExp(/^(\d{4})[\/\-\.](0?[1-9]|1[012])[\/\-\.](0?[1-9]|[12][0-9]|3[01])$/); + var match = pattern.exec(field.val()); + if (match == null) + return false; + + var year = match[1]; + var month = match[2]*1; + var day = match[3]*1; + var date = new Date(year, month - 1, day); // because months starts from 0. + + return (date.getFullYear() == year && date.getMonth() == (month - 1) && date.getDate() == day); + }, + "alertText": "* Invalid date, must be in YYYY-MM-DD format" + }, + "ipv4": { + "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, + "alertText": "* Invalid IP address" + }, + "url": { + "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i, + "alertText": "* Invalid URL" + }, + "onlyNumberSp": { + "regex": /^[0-9\ ]+$/, + "alertText": "* Numbers only" + }, + "onlyLetterSp": { + "regex": /^[a-zA-Z\ \']+$/, + "alertText": "* Letters only" + }, + "onlyLetterAccentSp":{ + "regex": /^[a-z\u00C0-\u017F\ ]+$/i, + "alertText": "* Letters only (accents allowed)" + }, + "onlyLetterNumber": { + "regex": /^[0-9a-zA-Z]+$/, + "alertText": "* No special characters allowed" + }, + // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings + "ajaxUserCall": { + "url": "ajaxValidateFieldUser", + // you may want to pass extra data on the ajax call + "extraData": "name=eric", + "alertText": "* This user is already taken", + "alertTextLoad": "* Validating, please wait" + }, + "ajaxUserCallPhp": { + "url": "phpajax/ajaxValidateFieldUser.php", + // you may want to pass extra data on the ajax call + "extraData": "name=eric", + // if you provide an "alertTextOk", it will show as a green prompt when the field validates + "alertTextOk": "* This username is available", + "alertText": "* This user is already taken", + "alertTextLoad": "* Validating, please wait" + }, + "ajaxNameCall": { + // remote json service location + "url": "ajaxValidateFieldName", + // error + "alertText": "* This name is already taken", + // if you provide an "alertTextOk", it will show as a green prompt when the field validates + "alertTextOk": "* This name is available", + // speaks by itself + "alertTextLoad": "* Validating, please wait" + }, + "ajaxNameCallPhp": { + // remote json service location + "url": "phpajax/ajaxValidateFieldName.php", + // error + "alertText": "* This name is already taken", + // speaks by itself + "alertTextLoad": "* Validating, please wait" + }, + "validate2fields": { + "alertText": "* Please input HELLO" + }, + //tls warning:homegrown not fielded + "dateFormat":{ + "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(?:(?:0?[1-9]|1[0-2])(\/|-)(?:0?[1-9]|1\d|2[0-8]))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(0?2(\/|-)29)(\/|-)(?:(?:0[48]00|[13579][26]00|[2468][048]00)|(?:\d\d)?(?:0[48]|[2468][048]|[13579][26]))$/, + "alertText": "* Invalid Date" + }, + //tls warning:homegrown not fielded + "dateTimeFormat": { + "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1}$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^((1[012]|0?[1-9]){1}\/(0?[1-9]|[12][0-9]|3[01]){1}\/\d{2,4}\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1})$/, + "alertText": "* Invalid Date or Date Format", + "alertText2": "Expected Format: ", + "alertText3": "mm/dd/yyyy hh:mm:ss AM|PM or ", + "alertText4": "yyyy-mm-dd hh:mm:ss AM|PM" + } + }; + + } + }; + + $.validationEngineLanguage.newLang(); + +})(jQuery); From c2bafea6d4b814c4c069f5666fe76c476f110e1b Mon Sep 17 00:00:00 2001 From: gurskyi Date: Thu, 24 Sep 2015 13:08:30 +0300 Subject: [PATCH 50/83] Update and rename jquery.validationEngine-uk.js to jquery.validationEngine-uk_UA.js --- ...uk.js => jquery.validationEngine-uk_UA.js} | 110 +++++++++--------- 1 file changed, 55 insertions(+), 55 deletions(-) rename js/languages/{jquery.validationEngine-uk.js => jquery.validationEngine-uk_UA.js} (64%) diff --git a/js/languages/jquery.validationEngine-uk.js b/js/languages/jquery.validationEngine-uk_UA.js similarity index 64% rename from js/languages/jquery.validationEngine-uk.js rename to js/languages/jquery.validationEngine-uk_UA.js index 72d2ce8..14a6f4d 100644 --- a/js/languages/jquery.validationEngine-uk.js +++ b/js/languages/jquery.validationEngine-uk_UA.js @@ -6,103 +6,103 @@ $.validationEngineLanguage.allRules = { "required": { // Add your regex rules here, you can take telephone as an example "regex": "none", - "alertText": "* This field is required", - "alertTextCheckboxMultiple": "* Please select an option", - "alertTextCheckboxe": "* This checkbox is required", - "alertTextDateRange": "* Both date range fields are required" + "alertText": "* Це поле обов'язкове для заповнення", + "alertTextCheckboxMultiple": "* Будь ласка оберіть опцію", + "alertTextCheckboxe": "* Цей чекбокс є обов'язковим", + "alertTextDateRange": "* Обидва діапазони обов'язкові для заповнення" }, "requiredInFunction": { "func": function(field, rules, i, options){ return (field.val() == "test") ? true : false; }, - "alertText": "* Field must equal test" + "alertText": "* Поле має урівнювати тест" }, "dateRange": { "regex": "none", - "alertText": "* Invalid ", - "alertText2": "Date Range" + "alertText": "* Недійсне ", + "alertText2": "Діапазон дат" }, "dateTimeRange": { "regex": "none", - "alertText": "* Invalid ", - "alertText2": "Date Time Range" + "alertText": "* Недійсне ", + "alertText2": "Діапазон дати і часу" }, "minSize": { "regex": "none", - "alertText": "* Minimum ", - "alertText2": " characters required" + "alertText": "* Мінімум ", + "alertText2": " символів" }, "maxSize": { "regex": "none", - "alertText": "* Maximum ", - "alertText2": " characters allowed" + "alertText": "* Максимум ", + "alertText2": " символів" }, "groupRequired": { "regex": "none", - "alertText": "* You must fill one of the following fields", - "alertTextCheckboxMultiple": "* Please select an option", - "alertTextCheckboxe": "* This checkbox is required" + "alertText": "* Ви маєте заповнити одне з наступних полей", + "alertTextCheckboxMultiple": "* Будь ласка оберіть опцію", + "alertTextCheckboxe": "* Цей чекбокс є обов'язковим" }, "min": { "regex": "none", - "alertText": "* Minimum value is " + "alertText": "* Мінімальне значення: " }, "max": { "regex": "none", - "alertText": "* Maximum value is " + "alertText": "* Максимальне значення: " }, "past": { "regex": "none", - "alertText": "* Date prior to " + "alertText": "* Дата, що передує " }, "future": { "regex": "none", - "alertText": "* Date past " + "alertText": "* Дата після " }, "maxCheckbox": { "regex": "none", - "alertText": "* Maximum ", - "alertText2": " options allowed" + "alertText": "* Максимум ", + "alertText2": " опцій дозволено" }, "minCheckbox": { "regex": "none", - "alertText": "* Please select ", - "alertText2": " options" + "alertText": "* Будь ласка оберіть ", + "alertText2": " опцій" }, "equals": { "regex": "none", - "alertText": "* Fields do not match" + "alertText": "* Поля не співпадають" }, "creditCard": { "regex": "none", - "alertText": "* Invalid credit card number" + "alertText": "* Недійсний номер банківської картки" }, "phone": { // credit: jquery.h5validate.js / orefalo "regex": /^([\+][0-9]{1,3}([ \.\-])?)?([\(][0-9]{1,6}[\)])?([0-9 \.\-]{1,32})(([A-Za-z \:]{1,11})?[0-9]{1,4}?)$/, - "alertText": "* Invalid phone number" + "alertText": "* Недійсний номер телефону" }, "email": { // HTML5 compatible email regex ( http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html# e-mail-state-%28type=email%29 ) "regex": /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, - "alertText": "* Invalid email address" + "alertText": "* Недійсний email" }, "fullname": { "regex":/^([a-zA-Z]+[\'\,\.\-]?[a-zA-Z ]*)+[ ]([a-zA-Z]+[\'\,\.\-]?[a-zA-Z ]+)+$/, - "alertText":"* Must be first and last name" + "alertText":"* Має містити ім'я та по-батькові" }, "zip": { "regex":/^\d{5}$|^\d{5}-\d{4}$/, - "alertText":"* Invalid zip format" + "alertText":"* Недійсний поштовий індекс" }, "integer": { "regex": /^[\-\+]?\d+$/, - "alertText": "* Not a valid integer" + "alertText": "* Недійсне число" }, "number": { // Number, including positive, negative, and floating decimal. credit: orefalo "regex": /^[\-\+]?((([0-9]{1,3})([,][0-9]{3})*)|([0-9]+))?([\.]([0-9]+))?$/, - "alertText": "* Invalid floating decimal number" + "alertText": "* Недійсний десятковий дріб" }, "date": { // Check if date is valid by leap year @@ -119,82 +119,82 @@ return (date.getFullYear() == year && date.getMonth() == (month - 1) && date.getDate() == day); }, - "alertText": "* Invalid date, must be in YYYY-MM-DD format" + "alertText": "* Недійсна дата, має бути у форматі РРРР-ММ-ДД" }, "ipv4": { "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, - "alertText": "* Invalid IP address" + "alertText": "* Недійсна IP-адреса" }, "url": { "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i, - "alertText": "* Invalid URL" + "alertText": "* Недійсне посилання" }, "onlyNumberSp": { "regex": /^[0-9\ ]+$/, - "alertText": "* Numbers only" + "alertText": "* Тільки цифри" }, "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, - "alertText": "* Letters only" + "alertText": "* Тільки літери" }, "onlyLetterAccentSp":{ "regex": /^[a-z\u00C0-\u017F\ ]+$/i, - "alertText": "* Letters only (accents allowed)" + "alertText": "* Тільки літери" }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, - "alertText": "* No special characters allowed" + "alertText": "* Спеціальні символи недозволені" }, // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings "ajaxUserCall": { "url": "ajaxValidateFieldUser", // you may want to pass extra data on the ajax call "extraData": "name=eric", - "alertText": "* This user is already taken", - "alertTextLoad": "* Validating, please wait" + "alertText": "* Такий користувач вже існує", + "alertTextLoad": "* Перевірка, будь ласка, зачекайте" }, "ajaxUserCallPhp": { "url": "phpajax/ajaxValidateFieldUser.php", // you may want to pass extra data on the ajax call "extraData": "name=eric", // if you provide an "alertTextOk", it will show as a green prompt when the field validates - "alertTextOk": "* This username is available", - "alertText": "* This user is already taken", - "alertTextLoad": "* Validating, please wait" + "alertTextOk": "* Ім'я користувача вільне", + "alertText": "* Такий користувач вже існує", + "alertTextLoad": "* Перевірка, будь ласка, зачекайте" }, "ajaxNameCall": { // remote json service location "url": "ajaxValidateFieldName", // error - "alertText": "* This name is already taken", + "alertText": "* Таке ім'я вже зайняте", // if you provide an "alertTextOk", it will show as a green prompt when the field validates - "alertTextOk": "* This name is available", + "alertTextOk": "* Ім'я доступне", // speaks by itself - "alertTextLoad": "* Validating, please wait" + "alertTextLoad": "* Перевірка, будь ласка, зачекайте" }, "ajaxNameCallPhp": { // remote json service location "url": "phpajax/ajaxValidateFieldName.php", // error - "alertText": "* This name is already taken", + "alertText": "* Таке ім'я вже зайняте", // speaks by itself - "alertTextLoad": "* Validating, please wait" + "alertTextLoad": "* Перевірка, будь ласка, зачекайте" }, "validate2fields": { - "alertText": "* Please input HELLO" + "alertText": "* Будь ласка введіть HELLO" }, //tls warning:homegrown not fielded "dateFormat":{ "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(?:(?:0?[1-9]|1[0-2])(\/|-)(?:0?[1-9]|1\d|2[0-8]))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(0?2(\/|-)29)(\/|-)(?:(?:0[48]00|[13579][26]00|[2468][048]00)|(?:\d\d)?(?:0[48]|[2468][048]|[13579][26]))$/, - "alertText": "* Invalid Date" + "alertText": "* Недійсна дата" }, //tls warning:homegrown not fielded "dateTimeFormat": { "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1}$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^((1[012]|0?[1-9]){1}\/(0?[1-9]|[12][0-9]|3[01]){1}\/\d{2,4}\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1})$/, - "alertText": "* Invalid Date or Date Format", - "alertText2": "Expected Format: ", - "alertText3": "mm/dd/yyyy hh:mm:ss AM|PM or ", - "alertText4": "yyyy-mm-dd hh:mm:ss AM|PM" + "alertText": "* Недійсна дата або формат дати", + "alertText2": "Очікуваний формат: ", + "alertText3": "мм/дд/рррр гг:хх:сс AM|PM або ", + "alertText4": "рррр-мм-дд гг:мм:сс AM|PM" } }; From 3707a07a0a6ee33da95f60f91b85be7bd13864d6 Mon Sep 17 00:00:00 2001 From: iae SAUDI Date: Mon, 28 Sep 2015 11:51:47 +0300 Subject: [PATCH 51/83] Add support for RTL languages Adjusted css conditions to support RTL layouts for RTL languages like Arabic, Hebrew and Persian ... etc --- js/jquery.validationEngine.js | 45 ++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 11 deletions(-) diff --git a/js/jquery.validationEngine.js b/js/jquery.validationEngine.js index da410b1..7c20e6e 100644 --- a/js/jquery.validationEngine.js +++ b/js/jquery.validationEngine.js @@ -1690,13 +1690,26 @@ } var pos = methods._calculatePosition(field, prompt, options); - prompt.css({ - 'position': positionType === 'inline' ? 'relative' : 'absolute', - "top": pos.callerTopPosition, - "left": pos.callerleftPosition, - "marginTop": pos.marginTopSize, - "opacity": 0 - }).data("callerField", field); + // Support RTL layouts by @yasser_lotfy ( Yasser Lotfy ) + if ($('body').hasClass('rtl')) { + prompt.css({ + 'position': positionType === 'inline' ? 'relative' : 'absolute', + "top": pos.callerTopPosition, + "left": "initial", + "right": pos.callerleftPosition, + "marginTop": pos.marginTopSize, + "opacity": 0 + }).data("callerField", field); + } else { + prompt.css({ + 'position': positionType === 'inline' ? 'relative' : 'absolute', + "top": pos.callerTopPosition, + "left": pos.callerleftPosition, + "right": "initial", + "marginTop": pos.marginTopSize, + "opacity": 0 + }).data("callerField", field); + } if (options.autoHidePrompt) { @@ -1742,10 +1755,20 @@ prompt.find(".formErrorContent").html(promptText); var pos = methods._calculatePosition(field, prompt, options); - var css = {"top": pos.callerTopPosition, - "left": pos.callerleftPosition, - "marginTop": pos.marginTopSize, - "opacity": 0.87}; + // Support RTL layouts by @yasser_lotfy ( Yasser Lotfy ) + if ($('body').hasClass('rtl')) { + var css = {"top": pos.callerTopPosition, + "left": "initial", + "right": pos.callerleftPosition, + "marginTop": pos.marginTopSize, + "opacity": 0.87}; + } else { + var css = {"top": pos.callerTopPosition, + "left": pos.callerleftPosition, + "right": "initial", + "marginTop": pos.marginTopSize, + "opacity": 0.87}; + } prompt.css({ "opacity": 0, From 5bce28d1e1dc9d71f94941b09f3622322b47822d Mon Sep 17 00:00:00 2001 From: iae SAUDI Date: Mon, 28 Sep 2015 12:04:56 +0300 Subject: [PATCH 52/83] Arabic language for ValidationEngine Arabic language file for jquery.validationEngine.js (ver2.6.x) --- js/languages/jquery.validationEngine-ar.js | 213 +++++++++++++++++++++ 1 file changed, 213 insertions(+) create mode 100644 js/languages/jquery.validationEngine-ar.js diff --git a/js/languages/jquery.validationEngine-ar.js b/js/languages/jquery.validationEngine-ar.js new file mode 100644 index 0000000..3994c35 --- /dev/null +++ b/js/languages/jquery.validationEngine-ar.js @@ -0,0 +1,213 @@ +/***************************************************************** + * Arabic language file for jquery.validationEngine.js (ver2.6.x) + * + * Transrator: @yasser_lotfy ( Yasser Lotfy ) + * http://be.net/YasserLotfy + * Licenced under the MIT Licence + *******************************************************************/ +(function($){ + $.fn.validationEngineLanguage = function(){ + }; + $.validationEngineLanguage = { + newLang: function(){ + $.validationEngineLanguage.allRules = { + "required": { // Add your regex rules here, you can take telephone as an example + "regex": "none", + "alertText": "* هذا الحقل مطلوب", + "alertTextCheckboxMultiple": "* برجاء إختيار إحدى الخيارات", + "alertTextCheckboxe": "* هذا المربع الإختياري مطلوب", + "alertTextDateRange": "* كلا حقلين نطاق التاريخ مطلوبة" + }, + "requiredInFunction": { + "func": function(field, rules, i, options){ + return (field.val() == "test") ? true : false; + }, + "alertText": "* الحقل يجب أن يساوى test" + }, + "dateRange": { + "regex": "none", + "alertText": "* غير صالح ", + "alertText2": "نطاق التاريخ" + }, + "dateTimeRange": { + "regex": "none", + "alertText": "* غير صالح ", + "alertText2": "نطاق التاريخ والوقت" + }, + "minSize": { + "regex": "none", + "alertText": "* على الأقل ", + "alertText2": " حروف مطلوبة" + }, + "maxSize": { + "regex": "none", + "alertText": "* على الأكثر ", + "alertText2": " حروف مسموحة" + }, + "groupRequired": { + "regex": "none", + "alertText": "* يجب عليك ملئ إحدى الحقول التالية", + "alertTextCheckboxMultiple": "* برجاء إختيار إحدى الخيارات", + "alertTextCheckboxe": "* هذا المربع الإختياري مطلوب" + }, + "min": { + "regex": "none", + "alertText": "* الحد الأدنى للقيمة هو " + }, + "max": { + "regex": "none", + "alertText": "* الحد الأقصى للقيمة هو " + }, + "past": { + "regex": "none", + "alertText": "* التاريخ قبل " + }, + "future": { + "regex": "none", + "alertText": "* التاريخ بعد " + }, + "maxCheckbox": { + "regex": "none", + "alertText": "* على الأكثر ", + "alertText2": " خيارات مسموحة" + }, + "minCheckbox": { + "regex": "none", + "alertText": "* برجاء إختيار ", + "alertText2": " خيارات" + }, + "equals": { + "regex": "none", + "alertText": "* الحقول غير متساوية" + }, + "creditCard": { + "regex": "none", + "alertText": "* رقم بطاقة الإتمان غير صالح" + }, + "phone": { + // credit: jquery.h5validate.js / orefalo + "regex": /^([\+][0-9]{1,3}([ \.\-])?)?([\(][0-9]{1,6}[\)])?([0-9 \.\-]{1,32})(([A-Za-z \:]{1,11})?[0-9]{1,4}?)$/, + "alertText": "* رقم الهاتف غير صالح" + }, + "email": { + // HTML5 compatible email regex ( http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html# e-mail-state-%28type=email%29 ) + "regex": /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, + "alertText": "* عنوان بريد إلكتروني غير صالح" + }, + "fullname": { + "regex":/^([a-zA-Z]+[\'\,\.\-]?[a-zA-Z ]*)+[ ]([a-zA-Z]+[\'\,\.\-]?[a-zA-Z ]+)+$/, + "alertText":"* يجب أن يكون الإسم الأول والأخير" + }, + "zip": { + "regex":/^\d{5}$|^\d{5}-\d{4}$/, + "alertText":"* صيغة الرمز البريدي غير صالحة" + }, + "integer": { + "regex": /^[\-\+]?\d+$/, + "alertText": "* هذا ليس عدد صحيح صالح" + }, + "number": { + // Number, including positive, negative, and floating decimal. credit: orefalo + "regex": /^[\-\+]?((([0-9]{1,3})([,][0-9]{3})*)|([0-9]+))?([\.]([0-9]+))?$/, + "alertText": "* عدد عشري غير صالح" + }, + "date": { + // Check if date is valid by leap year + "func": function (field) { + var pattern = new RegExp(/^(\d{4})[\/\-\.](0?[1-9]|1[012])[\/\-\.](0?[1-9]|[12][0-9]|3[01])$/); + var match = pattern.exec(field.val()); + if (match == null) + return false; + + var year = match[1]; + var month = match[2]*1; + var day = match[3]*1; + var date = new Date(year, month - 1, day); // because months starts from 0. + + return (date.getFullYear() == year && date.getMonth() == (month - 1) && date.getDate() == day); + }, + "alertText": "* تاريخ غير صالح، يجب أن يكون في هيئة YYYY-MM-DD" + }, + "ipv4": { + "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, + "alertText": "* عنوان IP غير صالح" + }, + "url": { + "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i, + "alertText": "* عنوان إلكتروني غير صالح" + }, + "onlyNumberSp": { + "regex": /^[0-9\ ]+$/, + "alertText": "* أرقام فقط" + }, + "onlyLetterSp": { + "regex": /^[a-zA-Z\ \']+$/, + "alertText": "* حروف فقط" + }, + "onlyLetterAccentSp": { + "regex": /^[a-z\u00C0-\u017F\ ]+$/i, + "alertText": "* حروف فقط (مسموح بالنبرات)" + }, + "onlyLetterNumber": { + "regex": /^[0-9a-zA-Z]+$/, + "alertText": "* غير مسموح بحروف خاصة" + }, + // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings + "ajaxUserCall": { + "url": "ajaxValidateFieldUser", + // you may want to pass extra data on the ajax call + "extraData": "name=eric", + "alertText": "* هذا المستخدم بالفعل موجود", + "alertTextLoad": "* جاري التحقق، برجاء الإنتظار" + }, + "ajaxUserCallPhp": { + "url": "phpajax/ajaxValidateFieldUser.php", + // you may want to pass extra data on the ajax call + "extraData": "name=eric", + // if you provide an "alertTextOk", it will show as a green prompt when the field validates + "alertTextOk": "* إسم المستخدم هذا متاح", + "alertText": "* هذا المستخدم بالفعل موجود", + "alertTextLoad": "* جاري التحقق، برجاء الإنتظار" + }, + "ajaxNameCall": { + // remote json service location + "url": "ajaxValidateFieldName", + // error + "alertText": "* هذا الإسم موجود بالفعل", + // if you provide an "alertTextOk", it will show as a green prompt when the field validates + "alertTextOk": "* هذا الإسم متاح", + // speaks by itself + "alertTextLoad": "* جاري التحقق، برجاء الإنتظار" + }, + "ajaxNameCallPhp": { + // remote json service location + "url": "phpajax/ajaxValidateFieldName.php", + // error + "alertText": "* هذا الإسم موجود بالفعل", + // speaks by itself + "alertTextLoad": "* جاري التحقق، برجاء الإنتظار" + }, + "validate2fields": { + "alertText": "* برجاء إدخال HELLO" + }, + //tls warning:homegrown not fielded + "dateFormat":{ + "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(?:(?:0?[1-9]|1[0-2])(\/|-)(?:0?[1-9]|1\d|2[0-8]))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(0?2(\/|-)29)(\/|-)(?:(?:0[48]00|[13579][26]00|[2468][048]00)|(?:\d\d)?(?:0[48]|[2468][048]|[13579][26]))$/, + "alertText": "* تاريخ غير صالح" + }, + //tls warning:homegrown not fielded + "dateTimeFormat": { + "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1}$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^((1[012]|0?[1-9]){1}\/(0?[1-9]|[12][0-9]|3[01]){1}\/\d{2,4}\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1})$/, + "alertText": "* التاريخ أو هيئة التاريخ غير صالحة", + "alertText2": "الهيئة المتوقعة: ", + "alertText3": "mm/dd/yyyy hh:mm:ss AM|PM أو ", + "alertText4": "yyyy-mm-dd hh:mm:ss AM|PM" + } + }; + + } + }; + + $.validationEngineLanguage.newLang(); + +})(jQuery); From 648918df5f2fe70fc92a789c406fc7fba6ac9621 Mon Sep 17 00:00:00 2001 From: Cedric Dugas Date: Fri, 2 Oct 2015 09:44:19 -0400 Subject: [PATCH 53/83] Update README.md --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 8e2bbdc..3b32d7e 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,11 @@ jQuery.validationEngine v2.6.2 ===== +Looking for official contributors +--- +This project has now been going on for more than 7 years, right now I only maintain the project through pull request contributions. However, I would love to have help improving the code quality and maintain an acceptable level of open issues. + + Summary --- From e5498918fa311ee81e9a463edcaaae3a0595ec66 Mon Sep 17 00:00:00 2001 From: Devon Crosby Date: Sun, 27 Dec 2015 00:16:17 -0330 Subject: [PATCH 54/83] Add sass option Nothing fancy, just duplicated the .less and made a sass version --- sass/validationEngine.jquery.scss | 188 ++++++++++++++++++++++++++++++ 1 file changed, 188 insertions(+) create mode 100644 sass/validationEngine.jquery.scss diff --git a/sass/validationEngine.jquery.scss b/sass/validationEngine.jquery.scss new file mode 100644 index 0000000..69cb506 --- /dev/null +++ b/sass/validationEngine.jquery.scss @@ -0,0 +1,188 @@ +$popupBg: #00579a !default; +$popupTextColor: #FFF !default; +$borderColor: #FFF !default; +$borderWidth: 1px !default; +$popupFontSize: 12px !default; +$popupRadius: 0 !default; +$popupShadowWidth: 2px !default; +$popupShadowColor: #333 !default; + +/* Z-INDEX */ + .formError { z-index: 990; } + .formError .formErrorContent { z-index: 991; } + .formError .formErrorArrow { z-index: 996; } + + .ui-dialog .formError { z-index: 5000; } + .ui-dialog .formError .formErrorContent { z-index: 5001; } + .ui-dialog .formError .formErrorArrow { z-index: 5006; } + + + + +.inputContainer { + position: relative; + float: left; +} + +.formError { + position: absolute; + top: 300px; + left: 300px; + display: block; + cursor: pointer; + text-align: left; +} + +.formError.inline { + position: relative; + top: 0; + left: 0; + display: inline-block; +} + +.ajaxSubmit { + padding: 20px; + background: #55ea55; + border: 1px solid #999; + display: none; +} + +.formError .formErrorContent { + width: 100%; + background: $popupBg; + position:relative; + color: $popupTextColor; + min-width: 120px; + font-size: $popupFontSize; + border: $borderWidth solid $borderColor; + box-shadow: 0 0 $popupShadowWidth $popupShadowColor; + -moz-box-shadow: 0 0 $popupShadowWidth $popupShadowColor; + -webkit-box-shadow: 0 0 $popupShadowWidth $popupShadowColor; + -o-box-shadow: 0 0 $popupShadowWidth $popupShadowColor; + padding: 4px 10px 4px 10px; + border-radius: $popupRadius; + -moz-border-radius: $popupRadius; + -webkit-border-radius: $popupRadius; + -o-border-radius: $popupRadius; +} + +.formError.inline .formErrorContent { + box-shadow: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + -o-box-shadow: none; + border: none; + border-radius: 0; + -moz-border-radius: 0; + -webkit-border-radius: 0; + -o-border-radius: 0; +} + +.greenPopup .formErrorContent { + background: #33be40; +} + +.blackPopup .formErrorContent { + background: #393939; + color: #FFF; +} + +.formError .formErrorArrow { + width: 15px; + margin: -2px 0 0 13px; + position:relative; +} +body[dir='rtl'] .formError .formErrorArrow, +body.rtl .formError .formErrorArrow { + margin: -2px 13px 0 0; +} + +.formError .formErrorArrowBottom { + box-shadow: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + -o-box-shadow: none; + margin: 0px 0 0 12px; + top:2px; +} + +.formError .formErrorArrow div { + border-left: $borderWidth solid $borderColor; + border-right: $borderWidth solid $borderColor; + box-shadow: 0 ceil($popupShadowWidth/3) ceil($popupShadowWidth/2) lighten($popupShadowColor,10%); + -moz-box-shadow: 0 ceil($popupShadowWidth/3) ceil($popupShadowWidth/2) lighten($popupShadowColor,10%); + -webkit-box-shadow: 0 ceil($popupShadowWidth/3) ceil($popupShadowWidth/2) lighten($popupShadowColor,10%); + -o-box-shadow: 0 ceil($popupShadowWidth/3) ceil($popupShadowWidth/2) lighten($popupShadowColor,10%); + font-size: 0px; + height: 1px; + background: $popupBg; + margin: 0 auto; + line-height: 0; + font-size: 0; + display: block; +} + +.formError .formErrorArrowBottom div { + box-shadow: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + -o-box-shadow: none; +} + +.greenPopup .formErrorArrow div { + background: #33be40; +} + +.blackPopup .formErrorArrow div { + background: #393939; + color: #FFF; +} + +.formError .formErrorArrow .line10 { + width: 13px; + border: none; +} + +.formError .formErrorArrow .line9 { + width: 11px; + border: none; +} + +.formError .formErrorArrow .line8 { + width: 11px; +} + +.formError .formErrorArrow .line7 { + width: 9px; +} + +.formError .formErrorArrow .line6 { + width: 7px; +} + +.formError .formErrorArrow .line5 { + width: 5px; +} + +.formError .formErrorArrow .line4 { + width: 3px; +} + +.formError .formErrorArrow .line3 { + width: ceil($borderWidth/2); + border-left: $borderWidth solid $borderColor; + border-right: $borderWidth solid $borderColor; + border-bottom: 0 solid $borderColor; +} + +.formError .formErrorArrow .line2 { + width: 3px; + border: none; + background: $borderColor; +} + +.formError .formErrorArrow .line1 { + width: 1px; + border: none; + background: $borderColor; +} From 5261db4f52db96a436255be4d54057822cfc14ba Mon Sep 17 00:00:00 2001 From: Devon Crosby Date: Sun, 27 Dec 2015 12:06:17 -0330 Subject: [PATCH 55/83] Revert "Add sass option" This reverts commit e5498918fa311ee81e9a463edcaaae3a0595ec66. --- sass/validationEngine.jquery.scss | 188 ------------------------------ 1 file changed, 188 deletions(-) delete mode 100644 sass/validationEngine.jquery.scss diff --git a/sass/validationEngine.jquery.scss b/sass/validationEngine.jquery.scss deleted file mode 100644 index 69cb506..0000000 --- a/sass/validationEngine.jquery.scss +++ /dev/null @@ -1,188 +0,0 @@ -$popupBg: #00579a !default; -$popupTextColor: #FFF !default; -$borderColor: #FFF !default; -$borderWidth: 1px !default; -$popupFontSize: 12px !default; -$popupRadius: 0 !default; -$popupShadowWidth: 2px !default; -$popupShadowColor: #333 !default; - -/* Z-INDEX */ - .formError { z-index: 990; } - .formError .formErrorContent { z-index: 991; } - .formError .formErrorArrow { z-index: 996; } - - .ui-dialog .formError { z-index: 5000; } - .ui-dialog .formError .formErrorContent { z-index: 5001; } - .ui-dialog .formError .formErrorArrow { z-index: 5006; } - - - - -.inputContainer { - position: relative; - float: left; -} - -.formError { - position: absolute; - top: 300px; - left: 300px; - display: block; - cursor: pointer; - text-align: left; -} - -.formError.inline { - position: relative; - top: 0; - left: 0; - display: inline-block; -} - -.ajaxSubmit { - padding: 20px; - background: #55ea55; - border: 1px solid #999; - display: none; -} - -.formError .formErrorContent { - width: 100%; - background: $popupBg; - position:relative; - color: $popupTextColor; - min-width: 120px; - font-size: $popupFontSize; - border: $borderWidth solid $borderColor; - box-shadow: 0 0 $popupShadowWidth $popupShadowColor; - -moz-box-shadow: 0 0 $popupShadowWidth $popupShadowColor; - -webkit-box-shadow: 0 0 $popupShadowWidth $popupShadowColor; - -o-box-shadow: 0 0 $popupShadowWidth $popupShadowColor; - padding: 4px 10px 4px 10px; - border-radius: $popupRadius; - -moz-border-radius: $popupRadius; - -webkit-border-radius: $popupRadius; - -o-border-radius: $popupRadius; -} - -.formError.inline .formErrorContent { - box-shadow: none; - -moz-box-shadow: none; - -webkit-box-shadow: none; - -o-box-shadow: none; - border: none; - border-radius: 0; - -moz-border-radius: 0; - -webkit-border-radius: 0; - -o-border-radius: 0; -} - -.greenPopup .formErrorContent { - background: #33be40; -} - -.blackPopup .formErrorContent { - background: #393939; - color: #FFF; -} - -.formError .formErrorArrow { - width: 15px; - margin: -2px 0 0 13px; - position:relative; -} -body[dir='rtl'] .formError .formErrorArrow, -body.rtl .formError .formErrorArrow { - margin: -2px 13px 0 0; -} - -.formError .formErrorArrowBottom { - box-shadow: none; - -moz-box-shadow: none; - -webkit-box-shadow: none; - -o-box-shadow: none; - margin: 0px 0 0 12px; - top:2px; -} - -.formError .formErrorArrow div { - border-left: $borderWidth solid $borderColor; - border-right: $borderWidth solid $borderColor; - box-shadow: 0 ceil($popupShadowWidth/3) ceil($popupShadowWidth/2) lighten($popupShadowColor,10%); - -moz-box-shadow: 0 ceil($popupShadowWidth/3) ceil($popupShadowWidth/2) lighten($popupShadowColor,10%); - -webkit-box-shadow: 0 ceil($popupShadowWidth/3) ceil($popupShadowWidth/2) lighten($popupShadowColor,10%); - -o-box-shadow: 0 ceil($popupShadowWidth/3) ceil($popupShadowWidth/2) lighten($popupShadowColor,10%); - font-size: 0px; - height: 1px; - background: $popupBg; - margin: 0 auto; - line-height: 0; - font-size: 0; - display: block; -} - -.formError .formErrorArrowBottom div { - box-shadow: none; - -moz-box-shadow: none; - -webkit-box-shadow: none; - -o-box-shadow: none; -} - -.greenPopup .formErrorArrow div { - background: #33be40; -} - -.blackPopup .formErrorArrow div { - background: #393939; - color: #FFF; -} - -.formError .formErrorArrow .line10 { - width: 13px; - border: none; -} - -.formError .formErrorArrow .line9 { - width: 11px; - border: none; -} - -.formError .formErrorArrow .line8 { - width: 11px; -} - -.formError .formErrorArrow .line7 { - width: 9px; -} - -.formError .formErrorArrow .line6 { - width: 7px; -} - -.formError .formErrorArrow .line5 { - width: 5px; -} - -.formError .formErrorArrow .line4 { - width: 3px; -} - -.formError .formErrorArrow .line3 { - width: ceil($borderWidth/2); - border-left: $borderWidth solid $borderColor; - border-right: $borderWidth solid $borderColor; - border-bottom: 0 solid $borderColor; -} - -.formError .formErrorArrow .line2 { - width: 3px; - border: none; - background: $borderColor; -} - -.formError .formErrorArrow .line1 { - width: 1px; - border: none; - background: $borderColor; -} From 8412a08c9f85966fd3ef33d2bef0b175ec317339 Mon Sep 17 00:00:00 2001 From: Devon Crosby Date: Sun, 27 Dec 2015 12:44:00 -0330 Subject: [PATCH 56/83] New bower.json Modified from validationengine.jquery.json --- bower.json | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 bower.json diff --git a/bower.json b/bower.json new file mode 100644 index 0000000..8e0db0a --- /dev/null +++ b/bower.json @@ -0,0 +1,25 @@ +{ + "name": "validationengine", + "description": "Validate your forms with style. Complete api included for advanced users", + "main": [ + "js/jquery.validationEngine.js", + "css/validationEngine.jquery.css" + ], + "dependencies": { + "jquery": ">=1.6" + }, + "keywords": [ + "form", + "field", + "validation" + ], + "authors": [ + { "name": "Cedric Dugas", "homepage": "http://www.position-absolute.com/" }, + { "name": "Olivier Refalo", "homepage": "http://www.crionics.com/" } + ], + "license": "MIT", + "ignore": [ + "test/", + "tests/" + ] +} \ No newline at end of file From b587df40d3c9fe5feb90d17b15c21773b9b79f8f Mon Sep 17 00:00:00 2001 From: ZacharySato Date: Mon, 1 Feb 2016 17:59:58 +0300 Subject: [PATCH 57/83] Update jquery.validationEngine-ru.js MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ДД.MM.ГГГГ is equal to DD.MM.YYYY format so there is a little mistake. Changing pattern is better option 'cuz the format above is more common in russian documents. --- js/languages/jquery.validationEngine-ru.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/languages/jquery.validationEngine-ru.js b/js/languages/jquery.validationEngine-ru.js index 7b4bed0..56b9c24 100644 --- a/js/languages/jquery.validationEngine-ru.js +++ b/js/languages/jquery.validationEngine-ru.js @@ -83,7 +83,7 @@ "alertText": "* Неправильное число с плавающей точкой" }, "date": { - "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, + "regex": /^(0[1-9]|[12][0-9]|3[01])[ \.](0[1-9]|1[012])[ \.](19|20)\d{2}$/, "alertText": "* Неправильная дата (должно быть в ДД.MM.ГГГГ формате)" }, "ipv4": { From eab06ff49f4011dd9fc82854c6b0f04fc0aea784 Mon Sep 17 00:00:00 2001 From: Sandro Miguel Marques Date: Tue, 23 Feb 2016 16:15:39 +0000 Subject: [PATCH 58/83] Update jquery.validationEngine-pt.js MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A mensagem anterior "Selecione uma ou mais opções" não faz sentido no caso de haver apenas uma checkbox e foi alterado para "Assinale a caixa de seleção". A mensagem original em inglês é "This checkbox is required". --- js/languages/jquery.validationEngine-pt.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/languages/jquery.validationEngine-pt.js b/js/languages/jquery.validationEngine-pt.js index 59d61af..d2ac4b2 100644 --- a/js/languages/jquery.validationEngine-pt.js +++ b/js/languages/jquery.validationEngine-pt.js @@ -8,7 +8,7 @@ "regex": "none", "alertText": "* Campo obrigatório", "alertTextCheckboxMultiple": "* Selecione uma opção", - "alertTextCheckboxe": "* Selecione uma ou mais opções", + "alertTextCheckboxe": "* Assinale a caixa de seleção", "alertTextDateRange": "* Ambos os campos de datas são obrigatórios" }, "requiredInFunction": { From 95b1aad4e8dbcd1fe819e8559b2485373687ad7e Mon Sep 17 00:00:00 2001 From: Kensuke Ohta Date: Tue, 15 Mar 2016 14:15:31 +0900 Subject: [PATCH 59/83] fix thai localization file. --- js/languages/jquery.validationEngine-th.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/languages/jquery.validationEngine-th.js b/js/languages/jquery.validationEngine-th.js index aef6204..ed1f6e4 100644 --- a/js/languages/jquery.validationEngine-th.js +++ b/js/languages/jquery.validationEngine-th.js @@ -143,7 +143,7 @@ }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, - "alertText": "alertText": "* ไม่สามารถใช้อักษรพิเศษ" + "alertText": "* ไม่สามารถใช้อักษรพิเศษ" }, // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings "ajaxUserCall": { From e63b8c1af9ae5add1d34a6b2abb8f9826315b696 Mon Sep 17 00:00:00 2001 From: Cristian Nicolae Nicorici Date: Tue, 7 Jun 2016 15:43:47 +0300 Subject: [PATCH 60/83] Add missing french characters from validation rule --- js/languages/jquery.validationEngine-fr.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/languages/jquery.validationEngine-fr.js b/js/languages/jquery.validationEngine-fr.js index 6800139..53e257e 100644 --- a/js/languages/jquery.validationEngine-fr.js +++ b/js/languages/jquery.validationEngine-fr.js @@ -99,11 +99,11 @@ "alertText": "* Seuls les chiffres sont acceptés" }, "onlyLetterSp": { - "regex": /^[a-zA-Z\u00C0-\u00D6\u00D9-\u00F6\u00F9-\u00FD\ \']+$/, + "regex": /^[a-zA-Z\u0152\u0153\u0178\u00C0-\u00D6\u00D9-\u00F6\u00F9-\u00FD\u00FF\ \']+$/, "alertText": "* Seules les lettres sont acceptées" }, "onlyLetterNumber": { - "regex": /^[0-9a-zA-Z\u00C0-\u00D6\u00D9-\u00F6\u00F9-\u00FD]+$/, + "regex": /^[0-9a-zA-Z\u0152\u0153\u0178\u00C0-\u00D6\u00D9-\u00F6\u00F9-\u00FD\u00FF]+$/, "alertText": "* Aucun caractère spécial n'est accepté" }, // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings From 6424b22f92274a943235291ab2adfd236aabba0d Mon Sep 17 00:00:00 2001 From: ToshikiYamamoto Date: Wed, 3 Aug 2016 23:04:34 +0900 Subject: [PATCH 61/83] Fixing issue #925, show arrow option enabled demo added: demos/demoWithoutArrow.html --- demos/demoWithoutArrow.html | 69 +++++++++++++++++++++++++++++++++++ js/jquery.validationEngine.js | 2 +- 2 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 demos/demoWithoutArrow.html diff --git a/demos/demoWithoutArrow.html b/demos/demoWithoutArrow.html new file mode 100644 index 0000000..b384cb3 --- /dev/null +++ b/demos/demoWithoutArrow.html @@ -0,0 +1,69 @@ + + + + + JQuery Validation Engine + + + + + + + + +

+ This demonstration shows onFormSuccess() and onFormFailure() +
+

+
This is a div element
+
+
+ + Required! + + +
+
+
+ + diff --git a/js/jquery.validationEngine.js b/js/jquery.validationEngine.js index 4d4244c..4f6a7be 100644 --- a/js/jquery.validationEngine.js +++ b/js/jquery.validationEngine.js @@ -567,7 +567,7 @@ var required = false; var limitErrors = false; options.isError = false; - options.showArrow = true; + options.showArrow = options.showArrow ==true; // If the programmer wants to limit the amount of error messages per field, if (options.maxErrorsPerField > 0) { From c1fda9e9311297c5b110918483ec8d94b2bd09fb Mon Sep 17 00:00:00 2001 From: Masashi Umezawa Date: Tue, 11 Oct 2016 11:03:01 +0900 Subject: [PATCH 62/83] Just added jquery.validationEngine-zh_HK file. The content is currently the same as of TW. --- js/languages/jquery.validationEngine-zh_HK.js | 181 ++++++++++++++++++ 1 file changed, 181 insertions(+) create mode 100644 js/languages/jquery.validationEngine-zh_HK.js diff --git a/js/languages/jquery.validationEngine-zh_HK.js b/js/languages/jquery.validationEngine-zh_HK.js new file mode 100644 index 0000000..c2908d0 --- /dev/null +++ b/js/languages/jquery.validationEngine-zh_HK.js @@ -0,0 +1,181 @@ +(function($){ + $.fn.validationEngineLanguage = function(){ + }; + $.validationEngineLanguage = { + newLang: function(){ + $.validationEngineLanguage.allRules = { + "required": { // Add your regex rules here, you can take telephone as an example + "regex": "none", + "alertText": "* 此欄位不可空白", + "alertTextCheckboxMultiple": "* 請選擇一個項目", + "alertTextCheckboxe": "* 您必需勾選此欄位", + "alertTextDateRange": "* 日期範圍欄位都不可空白" + }, + "requiredInFunction": { + "func": function(field, rules, i, options){ + return (field.val() == "test") ? true : false; + }, + "alertText": "* Field must equal test" + }, + "dateRange": { + "regex": "none", + "alertText": "* 無效的 ", + "alertText2": " 日期範圍" + }, + "dateTimeRange": { + "regex": "none", + "alertText": "* 無效的 ", + "alertText2": " 時間範圍" + }, + "minSize": { + "regex": "none", + "alertText": "* 最少 ", + "alertText2": " 個字元" + }, + "maxSize": { + "regex": "none", + "alertText": "* 最多 ", + "alertText2": " 個字元" + }, + "groupRequired": { + "regex": "none", + "alertText": "* 你必需選填其中一個欄位" + }, + "min": { + "regex": "none", + "alertText": "* 最小值為 " + }, + "max": { + "regex": "none", + "alertText": "* 最大值為 " + }, + "past": { + "regex": "none", + "alertText": "* 日期必需早於 " + }, + "future": { + "regex": "none", + "alertText": "* 日期必需晚於 " + }, + "maxCheckbox": { + "regex": "none", + "alertText": "* 最多選取 ", + "alertText2": " 個項目" + }, + "minCheckbox": { + "regex": "none", + "alertText": "* 請選取 ", + "alertText2": " 個項目" + }, + "equals": { + "regex": "none", + "alertText": "* 欄位內容不相符" + }, + "creditCard": { + "regex": "none", + "alertText": "* 无效的信用卡号码" + }, + "phone": { + // credit: jquery.h5validate.js / orefalo + "regex": /^([\+][0-9]{1,3}([ \.\-])?)?([\(][0-9]{1,6}[\)])?([0-9 \.\-]{1,32})(([A-Za-z \:]{1,11})?[0-9]{1,4}?)$/, + "alertText": "* 無效的電話號碼" + }, + "email": { + // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ + "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, + "alertText": "* Invalid email address" + }, + "integer": { + "regex": /^[\-\+]?\d+$/, + "alertText": "* 不是有效的整數" + }, + "number": { + // Number, including positive, negative, and floating decimal. credit: orefalo + "regex": /^[\-\+]?((([0-9]{1,3})([,][0-9]{3})*)|([0-9]+))?([\.]([0-9]+))?$/, + "alertText": "* 無效的數字" + }, + "date": { + "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, + "alertText": "* 無效的日期,格式必需為 YYYY-MM-DD" + }, + "ipv4": { + "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, + "alertText": "* 無效的 IP 位址" + }, + "url": { + "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i, + "alertText": "* Invalid URL" + }, + "onlyNumberSp": { + "regex": /^[0-9\ ]+$/, + "alertText": "* 只能填數字" + }, + "onlyLetterSp": { + "regex": /^[a-zA-Z\ \']+$/, + "alertText": "* 只接受英文字母大小寫" + }, + "onlyLetterAccentSp":{ + "regex": /^[a-z\u00C0-\u017F\ \']+$/i, + "alertText": "* 只接受英文字母大小寫" + }, + "onlyLetterNumber": { + "regex": /^[0-9a-zA-Z]+$/, + "alertText": "* 不接受特殊字元" + }, + // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings + "ajaxUserCall": { + "url": "ajaxValidateFieldUser", + // you may want to pass extra data on the ajax call + "extraData": "name=eric", + "alertText": "* 此名稱已經被其他人使用", + "alertTextLoad": "* 正在確認名稱是否有其他人使用,請稍等。" + }, + "ajaxUserCallPhp": { + "url": "phpajax/ajaxValidateFieldUser.php", + // you may want to pass extra data on the ajax call + "extraData": "name=eric", + // if you provide an "alertTextOk", it will show as a green prompt when the field validates + "alertTextOk": "* 此帳號名稱可以使用", + "alertText": "* 此帳號名稱已經被其他人使用", + "alertTextLoad": "* 正在確認帳號名稱是否有其他人使用,請稍等。" + }, + "ajaxNameCall": { + // remote json service location + "url": "ajaxValidateFieldName", + // error + "alertText": "* 此名稱可以使用", + // if you provide an "alertTextOk", it will show as a green prompt when the field validates + "alertTextOk": "* 此名稱已經被其他人使用", + // speaks by itself + "alertTextLoad": "* 正在確認名稱是否有其他人使用,請稍等。" + }, + "ajaxNameCallPhp": { + // remote json service location + "url": "phpajax/ajaxValidateFieldName.php", + // error + "alertText": "* 此名稱已經被其他人使用", + // speaks by itself + "alertTextLoad": "* 正在確認名稱是否有其他人使用,請稍等。" + }, + "validate2fields": { + "alertText": "* 請輸入 HELLO" + }, + //tls warning:homegrown not fielded + "dateFormat":{ + "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(?:(?:0?[1-9]|1[0-2])(\/|-)(?:0?[1-9]|1\d|2[0-8]))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(0?2(\/|-)29)(\/|-)(?:(?:0[48]00|[13579][26]00|[2468][048]00)|(?:\d\d)?(?:0[48]|[2468][048]|[13579][26]))$/, + "alertText": "* 無效的日期格式" + }, + //tls warning:homegrown not fielded + "dateTimeFormat": { + "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1}$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^((1[012]|0?[1-9]){1}\/(0?[1-9]|[12][0-9]|3[01]){1}\/\d{2,4}\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1})$/, + "alertText": "* 無效的日期或時間格式", + "alertText2": "可接受的格式: ", + "alertText3": "mm/dd/yyyy hh:mm:ss AM|PM 或 ", + "alertText4": "yyyy-mm-dd hh:mm:ss AM|PM" + } + }; + + } + }; + $.validationEngineLanguage.newLang(); +})(jQuery); From 10459f5dd1c6b0e28406c3df77736d5cabfb0f97 Mon Sep 17 00:00:00 2001 From: Sho Yoshida Date: Sat, 15 Oct 2016 21:16:45 +0900 Subject: [PATCH 63/83] fix jquery.validationEngine-zh_HK, jquery.validationEngine-zh_TW file. --- js/languages/jquery.validationEngine-zh_HK.js | 58 ++++++++++--------- js/languages/jquery.validationEngine-zh_TW.js | 2 +- 2 files changed, 32 insertions(+), 28 deletions(-) diff --git a/js/languages/jquery.validationEngine-zh_HK.js b/js/languages/jquery.validationEngine-zh_HK.js index c2908d0..d9c84da 100644 --- a/js/languages/jquery.validationEngine-zh_HK.js +++ b/js/languages/jquery.validationEngine-zh_HK.js @@ -6,9 +6,9 @@ $.validationEngineLanguage.allRules = { "required": { // Add your regex rules here, you can take telephone as an example "regex": "none", - "alertText": "* 此欄位不可空白", - "alertTextCheckboxMultiple": "* 請選擇一個項目", - "alertTextCheckboxe": "* 您必需勾選此欄位", + "alertText": "* 必須填寫", + "alertTextCheckboxMultiple": "* 請選擇", + "alertTextCheckboxe": "* 請剔選方格", "alertTextDateRange": "* 日期範圍欄位都不可空白" }, "requiredInFunction": { @@ -29,13 +29,13 @@ }, "minSize": { "regex": "none", - "alertText": "* 最少 ", - "alertText2": " 個字元" + "alertText": "* 請輸入 ", + "alertText2": " 字以上" }, "maxSize": { "regex": "none", - "alertText": "* 最多 ", - "alertText2": " 個字元" + "alertText": "* 最多可輸入 ", + "alertText2": " 字" }, "groupRequired": { "regex": "none", @@ -43,76 +43,80 @@ }, "min": { "regex": "none", - "alertText": "* 最小值為 " + "alertText": "* 請輸入不小於 ", + "alertText2": "* 的數值" }, "max": { "regex": "none", - "alertText": "* 最大值為 " + "alertText": "* 請輸入不大於 ", + "alertText2": "* 的數值" }, "past": { "regex": "none", - "alertText": "* 日期必需早於 " + "alertText": "* 請輸入 ", + "alertText2": "* 或之前的日期", }, "future": { "regex": "none", - "alertText": "* 日期必需晚於 " + "alertText": "* 請輸入", + "alertText2": "* 以後的日期" }, "maxCheckbox": { "regex": "none", - "alertText": "* 最多選取 ", - "alertText2": " 個項目" + "alertText": "* ", + "alertText2": " 剔選項目過多" }, "minCheckbox": { "regex": "none", - "alertText": "* 請選取 ", - "alertText2": " 個項目" + "alertText": "* 請剔選 ", + "alertText2": " 個以上" }, "equals": { "regex": "none", - "alertText": "* 欄位內容不相符" + "alertText": "* 輸入的數值不一致" }, "creditCard": { "regex": "none", - "alertText": "* 无效的信用卡号码" + "alertText": "* 信用卡號碼無效" }, "phone": { // credit: jquery.h5validate.js / orefalo "regex": /^([\+][0-9]{1,3}([ \.\-])?)?([\(][0-9]{1,6}[\)])?([0-9 \.\-]{1,32})(([A-Za-z \:]{1,11})?[0-9]{1,4}?)$/, - "alertText": "* 無效的電話號碼" + "alertText": "* 電話號碼輸入不正確" }, "email": { // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, - "alertText": "* Invalid email address" + "alertText": "* 電子郵件地址無效" }, "integer": { "regex": /^[\-\+]?\d+$/, - "alertText": "* 不是有效的整數" + "alertText": "* 請以半形文字輸入整數" }, "number": { // Number, including positive, negative, and floating decimal. credit: orefalo "regex": /^[\-\+]?((([0-9]{1,3})([,][0-9]{3})*)|([0-9]+))?([\.]([0-9]+))?$/, - "alertText": "* 無效的數字" + "alertText": "* 請以半形文字輸入數值" }, "date": { "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/, - "alertText": "* 無效的日期,格式必需為 YYYY-MM-DD" + "alertText": "* 請以YYYY-MM-DD格式及半形文字輸入日期" }, "ipv4": { "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/, - "alertText": "* 無效的 IP 位址" + "alertText": "* IP位址無效" }, "url": { "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i, - "alertText": "* Invalid URL" + "alertText": "* 網站連結無效" }, "onlyNumberSp": { "regex": /^[0-9\ ]+$/, - "alertText": "* 只能填數字" + "alertText": "* 請以半形數字輸入" }, "onlyLetterSp": { "regex": /^[a-zA-Z\ \']+$/, - "alertText": "* 只接受英文字母大小寫" + "alertText": "* 請輸入半形字母" }, "onlyLetterAccentSp":{ "regex": /^[a-z\u00C0-\u017F\ \']+$/i, @@ -120,7 +124,7 @@ }, "onlyLetterNumber": { "regex": /^[0-9a-zA-Z]+$/, - "alertText": "* 不接受特殊字元" + "alertText": "* 請輸入半形數字或英文" }, // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings "ajaxUserCall": { diff --git a/js/languages/jquery.validationEngine-zh_TW.js b/js/languages/jquery.validationEngine-zh_TW.js index c2908d0..8eb677f 100644 --- a/js/languages/jquery.validationEngine-zh_TW.js +++ b/js/languages/jquery.validationEngine-zh_TW.js @@ -83,7 +83,7 @@ "email": { // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, - "alertText": "* Invalid email address" + "alertText": "* 您輸入的電子郵件地址不正確" }, "integer": { "regex": /^[\-\+]?\d+$/, From 6eb039a4474e084934b741550a974a6a57fa88ae Mon Sep 17 00:00:00 2001 From: Ryan Ip Date: Thu, 8 Dec 2016 06:53:53 +0800 Subject: [PATCH 64/83] Change .size() to .length since .size() is deprecated after jQuery1.8 --- js/jquery.validationEngine.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/js/jquery.validationEngine.js b/js/jquery.validationEngine.js index 4f6a7be..289b230 100644 --- a/js/jquery.validationEngine.js +++ b/js/jquery.validationEngine.js @@ -136,13 +136,13 @@ var form = element.closest('form, .validationEngineContainer'); options = (form.data('jqv')) ? form.data('jqv') : $.validationEngine.defaults; valid = methods._validateField(element, options); - + if (valid && options.onFieldSuccess) options.onFieldSuccess(); else if (options.onFieldFailure && options.InvalidFields.length > 0) { options.onFieldFailure(); } - + return !valid; } if(options.onValidationComplete) { @@ -225,11 +225,11 @@ /** * Closes all error prompts on the page */ - hideAll: function() { + hideAll: function() { var form = this; var options = form.data('jqv'); var duration = options ? options.fadeDuration:300; - $('.formError').fadeTo(duration, 0, function() { + $('.formError').fadeTo(duration, 0, function() { $(this).closest('.formError').remove(); }); return this; @@ -765,7 +765,7 @@ var fieldType = field.prop("type"); var positionType=field.data("promptPosition") || options.promptPosition; - if ((fieldType == "radio" || fieldType == "checkbox") && form.find("input[name='" + fieldName + "']").size() > 1) { + if ((fieldType == "radio" || fieldType == "checkbox") && form.find("input[name='" + fieldName + "']").length > 1) { if(positionType === 'inline') { field = $(form.find("input[name='" + fieldName + "'][type!=hidden]:last")); } else { @@ -965,8 +965,8 @@ // old validation style var form = field.closest("form, .validationEngineContainer"); var name = field.attr("name"); - if (form.find("input[name='" + name + "']:checked").size() == 0) { - if (form.find("input[name='" + name + "']:visible").size() == 1) + if (form.find("input[name='" + name + "']:checked").length == 0) { + if (form.find("input[name='" + name + "']:visible").length == 1) return options.allrules[rules[i]].alertTextCheckboxe; else return options.allrules[rules[i]].alertTextCheckboxMultiple; @@ -1338,7 +1338,7 @@ var nbCheck = rules[i + 1]; var groupname = field.attr("name"); - var groupSize = form.find("input[name='" + groupname + "']:checked").size(); + var groupSize = form.find("input[name='" + groupname + "']:checked").length; if (groupSize > nbCheck) { options.showArrow = false; if (options.allrules.maxCheckbox.alertText2) @@ -1360,7 +1360,7 @@ var nbCheck = rules[i + 1]; var groupname = field.attr("name"); - var groupSize = form.find("input[name='" + groupname + "']:checked").size(); + var groupSize = form.find("input[name='" + groupname + "']:checked").length; if (groupSize < nbCheck) { options.showArrow = false; return options.allrules.minCheckbox.alertText + " " + nbCheck + " " + options.allrules.minCheckbox.alertText2; @@ -1780,7 +1780,7 @@ "opacity": 0, "display": "block" }); - + if (noAnimation) prompt.css(css); else From 694be47c5b7cdb84a06baf3af1eea90f90dd1d05 Mon Sep 17 00:00:00 2001 From: Kaido Date: Thu, 11 May 2017 11:54:26 +0300 Subject: [PATCH 65/83] Update jquery.validationEngine-et.js Estonian translation correction. If its email written in Estonian then it would mean enamel + address in estonian should be "aadress" with two "s" --- js/languages/jquery.validationEngine-et.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/languages/jquery.validationEngine-et.js b/js/languages/jquery.validationEngine-et.js index 3ddf223..e225d81 100644 --- a/js/languages/jquery.validationEngine-et.js +++ b/js/languages/jquery.validationEngine-et.js @@ -83,7 +83,7 @@ "email": { // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/ "regex": /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/, - "alertText": "* Vigane emaili aadres" + "alertText": "* Vigane e-posti aadress" }, "integer": { "regex": /^[\-\+]?\d+$/, From 49cb4f77c2b830b88f1fee976f7c5c3fdadf2f96 Mon Sep 17 00:00:00 2001 From: Artem Sklyanchuk Date: Wed, 1 Nov 2017 12:32:58 +0300 Subject: [PATCH 66/83] Remove double id in Readme.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3b32d7e..b07d44c 100644 --- a/README.md +++ b/README.md @@ -439,7 +439,7 @@ Speaks for itself, fails if the element has no value. This validator can apply t - From 7b7b75307490714c102e2a35249eba57ac7e2602 Mon Sep 17 00:00:00 2001 From: Atsushi Kanaya Date: Thu, 1 Mar 2018 14:55:14 +0900 Subject: [PATCH 67/83] Fix markdown syntax for documentation links --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3b32d7e..5e9c430 100644 --- a/README.md +++ b/README.md @@ -21,8 +21,8 @@ Bundled with many locales, the error prompts can be translated into the language Documentation : --- -###[Nicer documention](http://posabsolute.github.com/jQuery-Validation-Engine/) -###[Release Notes](http://posabsolute.github.com/jQuery-Validation-Engine/releases.html) +### [Nicer documention](http://posabsolute.github.com/jQuery-Validation-Engine/) +### [Release Notes](http://posabsolute.github.com/jQuery-Validation-Engine/releases.html) Demo : From 1c96785df4de8a0760da7b0ced5d1af2a613d00f Mon Sep 17 00:00:00 2001 From: Hans Kuijpers Date: Wed, 7 Mar 2018 16:57:18 +0100 Subject: [PATCH 68/83] add space between header indicator and title --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index d43aa0e..0523e87 100644 --- a/README.md +++ b/README.md @@ -658,7 +658,7 @@ You can see a tutorial that makes the use of php here: [http://www.position-abso ### Field ajax validation -####Protocol +#### Protocol The client sends the fieldId and the fieldValue as a GET request to the server url. @@ -676,7 +676,7 @@ Server responds with an array: [fieldid, status, errorMsg]. ### Form ajax validation -####Protocol +#### Protocol The client sends the form fields and values as a GET request to the form.action url. @@ -692,13 +692,13 @@ Server responds with an *array of arrays*: [fieldid, status, errorMsg]. Note that normally errors (status=false) are returned from the server. However you may also decide to return an entry with a status=true in which case the errorMsg will show as a green prompt. -####Validation URL +#### Validation URL By default the engine use the form action to validate the form, you can however set a default url using: **ajaxFormValidationURL -####Callbacks +#### Callbacks Since the form validation is asynchronously delegated to the form action, we provide two callback methods: From eeddc5f0500b0d95a07626544b050f08e9abee4c Mon Sep 17 00:00:00 2001 From: Namila Perera Date: Fri, 19 Oct 2018 14:05:22 +0530 Subject: [PATCH 69/83] package.json added --- package.json | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 package.json diff --git a/package.json b/package.json new file mode 100644 index 0000000..3428f76 --- /dev/null +++ b/package.json @@ -0,0 +1,25 @@ +{ + "name": "jquery-validation-engine", + "version": "1.0.0", + "description": "jQuery.validationEngine v2.6.2 =====", + "main": "index.js", + "directories": { + "test": "tests" + }, + "dependencies":{ + "jquery": ">=1.6" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/namila/jQuery-Validation-Engine.git" + }, + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/namila/jQuery-Validation-Engine/issues" + }, + "homepage": "https://github.com/namila/jQuery-Validation-Engine#readme" +} From e7023c6395066a5912cbbd55d5a26522269a8c84 Mon Sep 17 00:00:00 2001 From: duy pham Date: Tue, 29 Jan 2019 11:21:15 +0700 Subject: [PATCH 70/83] Issue #964: Add Issue template and Pull request template --- .github/ISSUE_TEMPLATE.md | 41 ++++++++++++++++++++++++++++++++ .github/PULL_REQUEST_TEMPLATE.md | 31 ++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..21dfcea --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,41 @@ +## I'm submitting a... + +

+[ ] Bug report  
+[ ] Feature request
+[ ] Documentation issue or request
+
+ +## Current behavior + + + +## Expected behavior + + + + +## Minimal reproduction of the problem with instructions + +## If this is a feature request please fill out the following: + +

+As a (user, developer, contributor, etc):
+I want:
+So that:
+
+
+ +## Environment + +

+Browser:
+- [ ] Chrome (desktop) version XX
+- [ ] Chrome (Android) version XX
+- [ ] Chrome (iOS) version XX
+- [ ] Firefox version XX
+- [ ] Safari (desktop) version XX
+- [ ] Safari (iOS) version XX
+- [ ] IE version XX
+- [ ] Edge version XX
+
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..4cab221 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,31 @@ +# jQuery Validation Engine PR Request Template + +#### Please note: Has this feature already been added? Sometimes, duplicate pull requests happen. It's worth checking the pull requests and issue page to see if the change you are requesting has already been made. + +#### Descriptive name. +Your pull request should have a descriptive name. + +#### Type of Change was Made? +What type of change does your code introduce? After creating the PR, tick the checkboxes that apply. +- [ ] Small bug fix (non-breaking change which fixes an issue) +- [ ] New feature (non-breaking change which adds new functionality) +- [ ] Improvement (Enhance an existing functionality) +- [ ] Breaking change (fix or feature that would change existing functionality) + +#### Description of the Change Being Made. +It's helpful to outline what changes were made to which files so that I have an idea of what will be involved in reviewing the code and—hopefully—merging it into the codebase. + +#### Issue Number +If your pull request is related to a specific issue, please included it in your description and or pull request name. It helps to keep changes linked. Any issues that are referenced in pull requests become part of the discussion history of the issue. + +#### Potential Performance Issues +Does the PR have a potential impact on performance on the codebase? If so, to what degree and why does the PR warrant the performance hit? + +#### Tests/Checks +What tests were conducted to ensure the PR functions have no impact on previous functionalities of the code base? + +#### New Dependencies +Have new dependencies been introduced? Please list them with links to documentation and add installation steps to the README. + + + From a8d590040fdd958105b8332aad955b2cbe21dd67 Mon Sep 17 00:00:00 2001 From: Denny Brandes Date: Thu, 4 Jul 2019 16:15:17 +0200 Subject: [PATCH 71/83] bumb version 3.0.0 in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0523e87..fc58a09 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -jQuery.validationEngine v2.6.2 +jQuery.validationEngine v3.0.0 (under development) ===== Looking for official contributors From f9b0749e6d62f8c0ee4533d16637e987f4ec9225 Mon Sep 17 00:00:00 2001 From: Denny Brandes Date: Thu, 4 Jul 2019 16:29:22 +0200 Subject: [PATCH 72/83] deleted unused file js/script.js --- js/script.js | 51 --------------------------------------------------- 1 file changed, 51 deletions(-) delete mode 100755 js/script.js diff --git a/js/script.js b/js/script.js deleted file mode 100755 index 7cfd5c5..0000000 --- a/js/script.js +++ /dev/null @@ -1,51 +0,0 @@ -(function($) -{ - - var defaultSettings = { - milestoneNumber : 10, - usePHPapi : true, - apiPath : '/', - repo : 'rails', - username : 'rails' - }; - - $.fn.releaseNotes = function(settings){ - settings = $.extend({}, defaultSettings, settings || {}); - var apiPath = apiPath."api.php"; - var respType = (settings.usePHPapi) ? "jsonp" : "json" - - return this.each(function(){ - releases.load(this, settings); - }); - - var releases = { - - load: function(){ - this.callApi({ - action:"milestones" - }).success(function(resp){ - console.log(resp) - }) - }, - callApi: function(action){ - - return $.ajax({ - url:this.urls[action](), - dataType:respType, - data:settings - }) - }, - urls : { - milestones : function(){ - if(settings.usePHPapi){ - return $url = "/repos/". $configs["username"] ."/". $configs["repo"] ."/milestones"; - }else{ - return apiPath; - } - } - } - } - - - } -})(jQuery); \ No newline at end of file From 1f10d674b43f0c80a741752324878def02bc7f6c Mon Sep 17 00:00:00 2001 From: Denny Brandes Date: Thu, 4 Jul 2019 16:46:13 +0200 Subject: [PATCH 73/83] adjust README for latest realeas 2.6.5 --- README.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0523e87..71733b4 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -jQuery.validationEngine v2.6.2 +jQuery.validationEngine v2.6.5 ===== Looking for official contributors @@ -22,7 +22,7 @@ Bundled with many locales, the error prompts can be translated into the language Documentation : --- ### [Nicer documention](http://posabsolute.github.com/jQuery-Validation-Engine/) -### [Release Notes](http://posabsolute.github.com/jQuery-Validation-Engine/releases.html) +### [Release Notes](https://github.com/posabsolute/jQuery-Validation-Engine/releases) Demo : @@ -36,6 +36,11 @@ Installation ### What's in the archive? +Download +[tar.gz 2.6.5](https://github.com/posabsolute/jQuery-Validation-Engine/archive/v2.6.5.tar.gz) +or +[zip 2.6.5](https://github.com/posabsolute/jQuery-Validation-Engine/archive/v2.6.5.zip) + The archive holds, of course, the core library along with translations in different languages. It also comes with a set of demo pages and a simple ajax server (built in Java and php). From 19fc0c829764009f4dad140313b6f400c5f6cc40 Mon Sep 17 00:00:00 2001 From: Denny Brandes Date: Thu, 4 Jul 2019 17:29:57 +0200 Subject: [PATCH 74/83] prepare release 3.0.0 --- .gitignore | 3 ++- README.md | 10 ++++++++-- demos/demoAdjustments.html | 2 +- demos/demoAjaxInlinePHP.html | 2 +- demos/demoAjaxJAVA.html | 2 +- demos/demoAjaxSubmitPHP.html | 2 +- demos/demoAttr.html | 2 +- demos/demoAutoHide.html | 2 +- demos/demoCheckBox.html | 2 +- demos/demoCustomErrorMessages.html | 2 +- demos/demoDatepicker.html | 2 +- demos/demoDivContainer.html | 2 +- demos/demoErrorLimit.html | 2 +- demos/demoFieldTypes.html | 2 +- demos/demoGlobalSettings.html | 2 +- demos/demoHooks.html | 2 +- demos/demoInlineMessages.html | 2 +- demos/demoLiveEvent.html | 2 +- demos/demoMultipleForms.html | 2 +- demos/demoNotEmpty.html | 2 +- demos/demoOnForm.html | 2 +- demos/demoOneMessage.html | 2 +- demos/demoOverflown.html | 2 +- demos/demoPerFieldPromptDirection.html | 2 +- demos/demoPositioning.html | 2 +- demos/demoRegExp.html | 2 +- demos/demoSelectBoxLibrary.html | 2 +- demos/demoShowPrompt.html | 2 +- demos/demoSilent.html | 2 +- demos/demoValidationComplete.html | 2 +- demos/demoValidators.html | 2 +- demos/demoValidators.ja.html | 2 +- demos/demoWithoutArrow.html | 2 +- demos/demoWithoutId.html | 2 +- js/jquery-3.4.1.min.js | 2 ++ js/jquery.validationEngine.js | 8 ++++---- js/jquery.validationEngine.min.js | 1 + js/languages/jquery.validationEngine-ar.js | 2 +- tests/issue430.html | 2 +- tests/issue451.html | 2 +- tests/issue480.html | 2 +- tests/issue493.html | 2 +- tests/issue498.html | 2 +- tests/issue507.html | 2 +- tests/issue524.html | 2 +- tests/placeholders.html | 3 +-- validationengine.jquery.json | 2 +- 47 files changed, 59 insertions(+), 50 deletions(-) create mode 100644 js/jquery-3.4.1.min.js create mode 100644 js/jquery.validationEngine.min.js diff --git a/.gitignore b/.gitignore index e78b07f..257722c 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ .DS_Store /js/jquery.validationEngine.log.txt /js/jquery.validationEngine.js.min.js.log.txt -/js/jquery.validationEngine-en.log.txt \ No newline at end of file +/js/jquery.validationEngine-en.log.txt +.idea \ No newline at end of file diff --git a/README.md b/README.md index fc58a09..e1850d9 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ Bundled with many locales, the error prompts can be translated into the language Documentation : --- ### [Nicer documention](http://posabsolute.github.com/jQuery-Validation-Engine/) -### [Release Notes](http://posabsolute.github.com/jQuery-Validation-Engine/releases.html) +### [Release Notes](https://github.com/posabsolute/jQuery-Validation-Engine/releases) Demo : @@ -36,6 +36,12 @@ Installation ### What's in the archive? +Download +[tar.gz 3.0.0](https://github.com/posabsolute/jQuery-Validation-Engine/archive/v3.0.0.tar.gz) +or +[zip 3.0.0](https://github.com/posabsolute/jQuery-Validation-Engine/archive/v3.0.0.zip) + + The archive holds, of course, the core library along with translations in different languages. It also comes with a set of demo pages and a simple ajax server (built in Java and php). @@ -61,7 +67,7 @@ Usage First include jQuery on your page ```html - ``` diff --git a/demos/demoAdjustments.html b/demos/demoAdjustments.html index 3a0823b..a6af03b 100644 --- a/demos/demoAdjustments.html +++ b/demos/demoAdjustments.html @@ -5,7 +5,7 @@ JQuery Validation Engine - diff --git a/demos/demoAjaxInlinePHP.html b/demos/demoAjaxInlinePHP.html index 6a8dc02..753ce5e 100644 --- a/demos/demoAjaxInlinePHP.html +++ b/demos/demoAjaxInlinePHP.html @@ -5,7 +5,7 @@ JQuery Validation Engine - diff --git a/demos/demoAjaxJAVA.html b/demos/demoAjaxJAVA.html index fdcd69d..8de14f3 100644 --- a/demos/demoAjaxJAVA.html +++ b/demos/demoAjaxJAVA.html @@ -5,7 +5,7 @@ JQuery Validation Engine - diff --git a/demos/demoAjaxSubmitPHP.html b/demos/demoAjaxSubmitPHP.html index 76c09d2..61cb670 100644 --- a/demos/demoAjaxSubmitPHP.html +++ b/demos/demoAjaxSubmitPHP.html @@ -5,7 +5,7 @@ JQuery Validation Engine - diff --git a/demos/demoAttr.html b/demos/demoAttr.html index 7d58a89..61cbabe 100644 --- a/demos/demoAttr.html +++ b/demos/demoAttr.html @@ -5,7 +5,7 @@ JQuery Validation Engine - diff --git a/demos/demoAutoHide.html b/demos/demoAutoHide.html index 9c870ef..66cce01 100644 --- a/demos/demoAutoHide.html +++ b/demos/demoAutoHide.html @@ -5,7 +5,7 @@ JQuery Validation Engine - diff --git a/demos/demoCheckBox.html b/demos/demoCheckBox.html index b08ae9e..94570cf 100644 --- a/demos/demoCheckBox.html +++ b/demos/demoCheckBox.html @@ -5,7 +5,7 @@ JQuery Validation Engine - diff --git a/demos/demoCustomErrorMessages.html b/demos/demoCustomErrorMessages.html index 243941d..f0bcb70 100644 --- a/demos/demoCustomErrorMessages.html +++ b/demos/demoCustomErrorMessages.html @@ -6,7 +6,7 @@ - diff --git a/demos/demoDatepicker.html b/demos/demoDatepicker.html index 36ebba7..53dffd8 100644 --- a/demos/demoDatepicker.html +++ b/demos/demoDatepicker.html @@ -5,7 +5,7 @@ JQuery Validation Engine - diff --git a/demos/demoDivContainer.html b/demos/demoDivContainer.html index fc958b0..7bc0838 100644 --- a/demos/demoDivContainer.html +++ b/demos/demoDivContainer.html @@ -5,7 +5,7 @@ JQuery Validation Engine - diff --git a/demos/demoErrorLimit.html b/demos/demoErrorLimit.html index 616802a..02376aa 100755 --- a/demos/demoErrorLimit.html +++ b/demos/demoErrorLimit.html @@ -5,7 +5,7 @@ JQuery Validation Engine - diff --git a/demos/demoFieldTypes.html b/demos/demoFieldTypes.html index c72d1b1..048dd49 100644 --- a/demos/demoFieldTypes.html +++ b/demos/demoFieldTypes.html @@ -5,7 +5,7 @@ JQuery Validation Engine - diff --git a/demos/demoGlobalSettings.html b/demos/demoGlobalSettings.html index c18a0b6..82c247c 100644 --- a/demos/demoGlobalSettings.html +++ b/demos/demoGlobalSettings.html @@ -5,7 +5,7 @@ JQuery Validation Engine - diff --git a/demos/demoHooks.html b/demos/demoHooks.html index 2212a1a..f8f34c3 100644 --- a/demos/demoHooks.html +++ b/demos/demoHooks.html @@ -5,7 +5,7 @@ JQuery Validation Engine - diff --git a/demos/demoInlineMessages.html b/demos/demoInlineMessages.html index 1d3e9a6..e2d3781 100755 --- a/demos/demoInlineMessages.html +++ b/demos/demoInlineMessages.html @@ -5,7 +5,7 @@ JQuery Validation Engine - diff --git a/demos/demoLiveEvent.html b/demos/demoLiveEvent.html index e32d2fc..bee4fa0 100644 --- a/demos/demoLiveEvent.html +++ b/demos/demoLiveEvent.html @@ -5,7 +5,7 @@ JQuery Validation Engine - diff --git a/demos/demoMultipleForms.html b/demos/demoMultipleForms.html index 1d9e11c..ebb7c3a 100644 --- a/demos/demoMultipleForms.html +++ b/demos/demoMultipleForms.html @@ -5,7 +5,7 @@ JQuery Validation Engine - diff --git a/demos/demoNotEmpty.html b/demos/demoNotEmpty.html index 65c1366..ec15aab 100644 --- a/demos/demoNotEmpty.html +++ b/demos/demoNotEmpty.html @@ -5,7 +5,7 @@ JQuery Validation Engine - diff --git a/demos/demoOnForm.html b/demos/demoOnForm.html index 616802a..02376aa 100755 --- a/demos/demoOnForm.html +++ b/demos/demoOnForm.html @@ -5,7 +5,7 @@ JQuery Validation Engine - diff --git a/demos/demoOneMessage.html b/demos/demoOneMessage.html index 74e5a3c..016ff42 100755 --- a/demos/demoOneMessage.html +++ b/demos/demoOneMessage.html @@ -5,7 +5,7 @@ JQuery Validation Engine - diff --git a/demos/demoOverflown.html b/demos/demoOverflown.html index 5d38e37..cf031cf 100644 --- a/demos/demoOverflown.html +++ b/demos/demoOverflown.html @@ -8,7 +8,7 @@ - diff --git a/demos/demoPerFieldPromptDirection.html b/demos/demoPerFieldPromptDirection.html index 7b05835..db08156 100644 --- a/demos/demoPerFieldPromptDirection.html +++ b/demos/demoPerFieldPromptDirection.html @@ -5,7 +5,7 @@ JQuery Validation Engine - diff --git a/demos/demoPositioning.html b/demos/demoPositioning.html index de7590e..b964006 100644 --- a/demos/demoPositioning.html +++ b/demos/demoPositioning.html @@ -5,7 +5,7 @@ JQuery Validation Engine - diff --git a/demos/demoRegExp.html b/demos/demoRegExp.html index 630f85c..aa10f2a 100644 --- a/demos/demoRegExp.html +++ b/demos/demoRegExp.html @@ -5,7 +5,7 @@ JQuery Validation Engine - diff --git a/demos/demoSelectBoxLibrary.html b/demos/demoSelectBoxLibrary.html index 1c4509f..ad9de8e 100644 --- a/demos/demoSelectBoxLibrary.html +++ b/demos/demoSelectBoxLibrary.html @@ -6,7 +6,7 @@ - + diff --git a/demos/demoShowPrompt.html b/demos/demoShowPrompt.html index 760c709..7ca29e7 100644 --- a/demos/demoShowPrompt.html +++ b/demos/demoShowPrompt.html @@ -5,7 +5,7 @@ JQuery Validation Engine - diff --git a/demos/demoSilent.html b/demos/demoSilent.html index f4639a2..5472e17 100644 --- a/demos/demoSilent.html +++ b/demos/demoSilent.html @@ -5,7 +5,7 @@ JQuery Validation Engine - diff --git a/demos/demoValidationComplete.html b/demos/demoValidationComplete.html index 0b82053..e377aa9 100644 --- a/demos/demoValidationComplete.html +++ b/demos/demoValidationComplete.html @@ -5,7 +5,7 @@ JQuery Validation Engine - diff --git a/demos/demoValidators.html b/demos/demoValidators.html index 6a3a6ea..dec9ed0 100755 --- a/demos/demoValidators.html +++ b/demos/demoValidators.html @@ -5,7 +5,7 @@ JQuery Validation Engine - diff --git a/demos/demoValidators.ja.html b/demos/demoValidators.ja.html index f919eac..4c5211e 100644 --- a/demos/demoValidators.ja.html +++ b/demos/demoValidators.ja.html @@ -5,7 +5,7 @@ JQuery Validation Engine - diff --git a/demos/demoWithoutArrow.html b/demos/demoWithoutArrow.html index b384cb3..cce768b 100644 --- a/demos/demoWithoutArrow.html +++ b/demos/demoWithoutArrow.html @@ -5,7 +5,7 @@ JQuery Validation Engine - diff --git a/demos/demoWithoutId.html b/demos/demoWithoutId.html index e3e5268..1544835 100644 --- a/demos/demoWithoutId.html +++ b/demos/demoWithoutId.html @@ -5,7 +5,7 @@ JQuery Validation Engine - diff --git a/js/jquery-3.4.1.min.js b/js/jquery-3.4.1.min.js new file mode 100644 index 0000000..a1c07fd --- /dev/null +++ b/js/jquery-3.4.1.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0=t.maxErrorsPerField){if(!u){var m=T.inArray("required",s);u=-1!=m&&v<=m}break}var g=void 0;switch(s[v]){case"required":u=!0,g=F._getErrorMessage(f,e,s[v],s,v,t,F._required);break;case"custom":g=F._getErrorMessage(f,e,s[v],s,v,t,F._custom);break;case"groupRequired":var h="["+t.validateAttribute+"*="+s[v+1]+"]",x=f.find(h).eq(0);x[0]!=e[0]&&(F._validateField(x,t,a),t.showArrow=!0),(g=F._getErrorMessage(f,e,s[v],s,v,t,F._groupRequired))&&(u=!0),t.showArrow=!1;break;case"ajax":(g=F._ajax(e,s,v,t))&&(d="load");break;case"minSize":g=F._getErrorMessage(f,e,s[v],s,v,t,F._minSize);break;case"maxSize":g=F._getErrorMessage(f,e,s[v],s,v,t,F._maxSize);break;case"min":g=F._getErrorMessage(f,e,s[v],s,v,t,F._min);break;case"max":g=F._getErrorMessage(f,e,s[v],s,v,t,F._max);break;case"past":g=F._getErrorMessage(f,e,s[v],s,v,t,F._past);break;case"future":g=F._getErrorMessage(f,e,s[v],s,v,t,F._future);break;case"dateRange":h="["+t.validateAttribute+"*="+s[v+1]+"]";t.firstOfGroup=f.find(h).eq(0),t.secondOfGroup=f.find(h).eq(1),(t.firstOfGroup[0].value||t.secondOfGroup[0].value)&&(g=F._getErrorMessage(f,e,s[v],s,v,t,F._dateRange)),g&&(u=!0),t.showArrow=!1;break;case"dateTimeRange":h="["+t.validateAttribute+"*="+s[v+1]+"]";t.firstOfGroup=f.find(h).eq(0),t.secondOfGroup=f.find(h).eq(1),(t.firstOfGroup[0].value||t.secondOfGroup[0].value)&&(g=F._getErrorMessage(f,e,s[v],s,v,t,F._dateTimeRange)),g&&(u=!0),t.showArrow=!1;break;case"maxCheckbox":e=T(f.find("input[name='"+n+"']")),g=F._getErrorMessage(f,e,s[v],s,v,t,F._maxCheckbox);break;case"minCheckbox":e=T(f.find("input[name='"+n+"']")),g=F._getErrorMessage(f,e,s[v],s,v,t,F._minCheckbox);break;case"equals":g=F._getErrorMessage(f,e,s[v],s,v,t,F._equals);break;case"funcCall":g=F._getErrorMessage(f,e,s[v],s,v,t,F._funcCall);break;case"creditCard":g=F._getErrorMessage(f,e,s[v],s,v,t,F._creditCard);break;case"condRequired":void 0!==(g=F._getErrorMessage(f,e,s[v],s,v,t,F._condRequired))&&(u=!0);break;case"funcCallRequired":void 0!==(g=F._getErrorMessage(f,e,s[v],s,v,t,F._funcCallRequired))&&(u=!0)}var _=!1;if("object"==typeof g)switch(g.status){case"_break":_=!0;break;case"_error":g=g.message;break;case"_error_no_prompt":return!0}if(0==v&&0==o.indexOf("funcCallRequired")&&void 0!==g&&(""!=l&&(l+="
"),l+=g,p++,_=t.isError=!0),_)break;"string"==typeof g&&(""!=l&&(l+="
"),l+=g,t.isError=!0,p++)}!u&&!e.val()&&e.val().length<1&&T.inArray("equals",s)<0&&(t.isError=!1);var C=e.prop("type"),b=e.data("promptPosition")||t.promptPosition;("radio"==C||"checkbox"==C)&&1");switch(o.addClass(F._getClassName(e.attr("id"))+"formError"),o.addClass("parentForm"+F._getClassName(e.closest("form, .validationEngineContainer").attr("id"))),o.addClass("formError"),a){case"pass":o.addClass("greenPopup");break;case"load":o.addClass("blackPopup")}r&&o.addClass("ajaxed");T("
").addClass("formErrorContent").html(t).appendTo(o);var s=e.data("promptPosition")||i.promptPosition;if(i.showArrow){var n=T("
").addClass("formErrorArrow");if("string"==typeof s)-1!=(u=s.indexOf(":"))&&(s=s.substring(0,u));switch(s){case"bottomLeft":case"bottomRight":o.find(".formErrorContent").before(n),n.addClass("formErrorArrowBottom").html('
\x3c!-- --\x3e
\x3c!-- --\x3e
\x3c!-- --\x3e
\x3c!-- --\x3e
\x3c!-- --\x3e
\x3c!-- --\x3e
\x3c!-- --\x3e
\x3c!-- --\x3e
\x3c!-- --\x3e
\x3c!-- --\x3e
');break;case"topLeft":case"topRight":n.html('
\x3c!-- --\x3e
\x3c!-- --\x3e
\x3c!-- --\x3e
\x3c!-- --\x3e
\x3c!-- --\x3e
\x3c!-- --\x3e
\x3c!-- --\x3e
\x3c!-- --\x3e
\x3c!-- --\x3e
\x3c!-- --\x3e
'),o.append(n)}}i.addPromptClass&&o.addClass(i.addPromptClass);var l=e.attr("data-required-class");if(void 0!==l)o.addClass(l);else if(i.prettySelect&&T("#"+e.attr("id")).next().is("select")){var d=T("#"+e.attr("id").substr(i.usePrefix.length).substring(i.useSuffix.length)).attr("data-required-class");void 0!==d&&o.addClass(d)}o.css({opacity:0}),"inline"===s?(o.addClass("inline"),void 0!==e.attr("data-prompt-target")&&0\|])/g,"\\$1")},isRTL:function(e){var t=T(document),a=T("body"),r=e&&e.hasClass("rtl")||e&&"rtl"===(e.attr("dir")||"").toLowerCase()||t.hasClass("rtl")||"rtl"===(t.attr("dir")||"").toLowerCase()||a.hasClass("rtl")||"rtl"===(a.attr("dir")||"").toLowerCase();return Boolean(r)},_calculatePosition:function(e,t,a){var r,i,o,s=e.width(),n=e.position().left,l=e.position().top;e.height();r=i=0,o=-t.height();var d=e.data("promptPosition")||a.promptPosition,u="",c="",f=0,v=0;switch("string"==typeof d&&-1!=d.indexOf(":")&&(u=d.substring(d.indexOf(":")+1),d=d.substring(0,d.indexOf(":")),-1!=u.indexOf(",")&&(c=u.substring(u.indexOf(",")+1),u=u.substring(0,u.indexOf(",")),v=parseInt(c),isNaN(v)&&(v=0)),f=parseInt(u),isNaN(u)&&(u=0)),d){default:case"topRight":i+=n+s-27,r+=l;break;case"topLeft":r+=l,i+=n;break;case"centerRight":r=l+4,o=0,i=n+e.outerWidth(!0)+5;break;case"centerLeft":i=n-(t.width()+2),r=l+4,o=0;break;case"bottomLeft":r=l+e.height()+5,o=0,i=n;break;case"bottomRight":i=n+s-27,r=l+e.height()+5,o=0;break;case"inline":o=r=i=0}return{callerTopPosition:(r+=v)+"px",callerleftPosition:(i+=f)+"px",marginTopSize:o+"px"}},_saveOptions:function(e,t){if(T.validationEngineLanguage)var a=T.validationEngineLanguage.allRules;else T.error("jQuery.validationEngine rules are not loaded, plz add localization files to the page");T.validationEngine.defaults.allrules=a;var r=T.extend(!0,{},T.validationEngine.defaults,t);return e.data("jqv",r),r},_getClassName:function(e){if(e)return e.replace(/:/g,"_").replace(/\./g,"_")},_jqSelector:function(e){return e.replace(/([;&,\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g,"\\$1")},_condRequired:function(e,t,a,r){var i,o;for(i=a+1;iIssue #430: Do not validate empty fields that is not required. - + + + + + diff --git a/tests/issue507.html b/tests/issue507.html index 75c98ac..d8ac264 100644 --- a/tests/issue507.html +++ b/tests/issue507.html @@ -4,7 +4,7 @@ Issue #430: Do not validate empty fields that is not required. - + + - + - - - - - -

- This demonstration shows the prompt position adjustments -
-

-
This is a div element
-
-
- - - -
-
-
-
-
- - diff --git a/demos/demoAjaxInlinePHP.html b/demos/demoAjaxInlinePHP.html deleted file mode 100644 index 753ce5e..0000000 --- a/demos/demoAjaxInlinePHP.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - -

- Return true or false without binding anything - | Build a prompt on a div - | Load validation date - | Close all prompt - | Back to index -

-

Please run this demo from a WebServer, it will fail otherwise. -

-

- This demonstrations shows the use of inline Ajax validations. The inline ajax validation is never fired on submit. -
- The form validation implements callback hooks, so please check the javascript console -

-
-
- - Ajax validation - - - - -
-
-
- - \ No newline at end of file diff --git a/demos/demoAjaxJAVA.html b/demos/demoAjaxJAVA.html deleted file mode 100644 index 8de14f3..0000000 --- a/demos/demoAjaxJAVA.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - -

- Return true or false without binding anything - | Build a prompt on a div - | Load validation date - | Close all prompt - | Back to index -

-

Please run this demo from a WebServer (ie. http://localhost:9173/demoAjax.html after running the demo server), it will fail if you double click demoAjax.html -> It needs a server. -

-

- This demonstrations shows the use of Ajax form - and field - validations. -
- The form validation implements callback hooks, so please check the javascript console -

-
-
- - Ajax validation - - - - -
-
-
- - \ No newline at end of file diff --git a/demos/demoAjaxSubmitPHP.html b/demos/demoAjaxSubmitPHP.html deleted file mode 100644 index 61cb670..0000000 --- a/demos/demoAjaxSubmitPHP.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - -

Please run this demo from a WebServer, it will fail otherwise. -

-

- This demonstrations shows the use of Ajax form - and field - validations. -
- The form validation implements callback hooks, so please check the javascript console -

-
-
- - Ajax validation - - - - -
-
-
- - \ No newline at end of file diff --git a/demos/demoAttr.html b/demos/demoAttr.html deleted file mode 100644 index 61cbabe..0000000 --- a/demos/demoAttr.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - -

- Evaluate form - | Validate sport1 select - | Close favorite sport 1 prompt - | Close all prompts on form - | Update all prompts positions - | Build a prompt on a div - | Close div prompt - | Back to index -

-

- This demonstration shows the different validators available -
-

-
This is a div element
-
-
- - Required! - - - - -
- validate[required] -
- -
-
- - diff --git a/demos/demoAutoHide.html b/demos/demoAutoHide.html deleted file mode 100644 index 66cce01..0000000 --- a/demos/demoAutoHide.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - -

- Evaluate form - | Validate sport1 select - | Close favorite sport 1 prompt - | Close all prompts on form - | Update all prompts positions - | Build a prompt on a div - | Close div prompt - | Back to index -

-

- This demonstration shows the different validators available -
-

-
This is a div element
-
-
- - Lists - - - - -
- validate[required] -
- -
- - Custom - - -
- -
- - Equals - - - -
-
-
- - diff --git a/demos/demoCheckBox.html b/demos/demoCheckBox.html deleted file mode 100644 index 94570cf..0000000 --- a/demos/demoCheckBox.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - -

- Evaluate form - | Build a prompt on a div - | Close all prompts - | Back to index -

-

- This demonstration shows extended features around checkboxes -

-
-
- - Phone - -
- Radio Groupe : -
-
- radio 1: - radio 2: - radio 3: - -
-
- Minimum 2 checkbox : -
-
- - - -
-
- Maximum 2 checkbox : -
-
- - - -
- - -
-
- Conditional Require (Checkbox) -
- The text field is only required when the last checkbox is selected -
-
- Option 1
- Option 2
- Other: -
-
-
- Conditional Require (Radio) -
- The text field is only required when the last radiobutton is selected -
-
- Option 1
- Option 2
- Other: -
-
-
- - Conditions - -
- Checking this box indicates that you accept terms of use. If you do not accept these terms, do not use this website : -
- -

-
- - \ No newline at end of file diff --git a/demos/demoChosenLibrary.html b/demos/demoChosenLibrary.html deleted file mode 100644 index 3df5f84..0000000 --- a/demos/demoChosenLibrary.html +++ /dev/null @@ -1,294 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - - - - - -

- Back to index -

-

- This demonstration shows the validation with the Chosen Library -

-
-
- - Select single - - -
- - -
-
- - diff --git a/demos/demoCustomErrorMessages.html b/demos/demoCustomErrorMessages.html deleted file mode 100644 index f0bcb70..0000000 --- a/demos/demoCustomErrorMessages.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - - -

- Custom Error Messages -

-

- Back to index -

-
-
- - Required Fields! - - - - - -
- -
- - Custom - - -
-
-
- - diff --git a/demos/demoDatepicker.html b/demos/demoDatepicker.html deleted file mode 100644 index 53dffd8..0000000 --- a/demos/demoDatepicker.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - - - - -

- Back to index -

-

- This demonstration shows how to use a datepicker with the validation engine -
-

-
-
- - Datepicker - - - -
-
- - diff --git a/demos/demoDivContainer.html b/demos/demoDivContainer.html deleted file mode 100644 index 7bc0838..0000000 --- a/demos/demoDivContainer.html +++ /dev/null @@ -1,411 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - -

- Evaluate form - | Validate sport1 select field - | Close favorite sport 1 prompt - | Close all prompts on form - | Update all prompts positions - | Build a prompt on a div - | Close div prompt - | Back to index -

-

- This demonstration shows the different validators available -
-

-
This is a div element
-
-
- - Required! - - - - Optional - - - - Placeholder & required - - - - -
- validate[required] -
- -
- - Custom - - -
- -
- - Equals - - - -
- -
- - Function - - -
- -
- - Conditional required - - - - - - - - -
- -
- - MinSize - - -
- -
- - MaxSize - - -
- -
- - Min - - -
- -
- - Max - - -
- -
- - Past - - -
- -
- - Future - -
- -
- - Group required - - - -
- - -
- - -
- - -
- -
- - Date Range
-
- - -
-
- -
-
- - Date Time Range
-
- - -
- -
- - - Date compare
-
- - Checks that the first date is before the second date. - Please enter the second date ealier than the first date

- - -
- validate[custom[date],past[#dateCmp2]]

- - -
- validate[custom[date],future[#dateCmp1]]
-
- -
- - Credit Card - - -
- -
- - Checkbox - - -
-
- - Ajax - - -
-
-
- - diff --git a/demos/demoErrorLimit.html b/demos/demoErrorLimit.html deleted file mode 100755 index 02376aa..0000000 --- a/demos/demoErrorLimit.html +++ /dev/null @@ -1,68 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - -

- This demonstration shows onFormSuccess() and onFormFailure() -
-

-
This is a div element
-
-
- - Required! - - -
-
-
- - diff --git a/demos/demoFieldTypes.html b/demos/demoFieldTypes.html deleted file mode 100644 index 048dd49..0000000 --- a/demos/demoFieldTypes.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - -

- Evaluate form - | Build a prompt on a div - | Close all prompts - | Back to index -

-

- This demonstration shows the different HTML field types we support -

-
-
- - Text field - - -
-
- - TextArea - - -
-
- - Select single - - -
-
- - Select mutiple - - -
-
- - Radio - -
-
Radio Groupe :
-
radio 1: -
-
radio 2: -
-
radio 3: -
-
-
-
- - Checkbox - -
- Minimum 2 checkbox : - - - -
-
-
- - File - -
- Please select a file: - -
-
- - - -
-
- - diff --git a/demos/demoGlobalSettings.html b/demos/demoGlobalSettings.html deleted file mode 100644 index 82c247c..0000000 --- a/demos/demoGlobalSettings.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - -

- Evaluate form - | Validate sport1 select - | Close favorite sport 1 prompt - | Close all prompts on form - | Build a prompt on a div - | Close div prompt - | Back to index -

-

- This demonstration shows how to use the global settings -
-

-
This is a div element
-
-
- - - - - - -
- -
-
- - diff --git a/demos/demoHooks.html b/demos/demoHooks.html deleted file mode 100644 index f8f34c3..0000000 --- a/demos/demoHooks.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - -

- This demonstration shows How the hooks work -
-

-
This is a div element
-
-
-
- - - - - - -
- validate[required] -
-
- - Custom - - -
-
- - Equals - - - -
- -
-
- - diff --git a/demos/demoInlineMessages.html b/demos/demoInlineMessages.html deleted file mode 100755 index e2d3781..0000000 --- a/demos/demoInlineMessages.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - -

- Evaluate form - | Validate sport1 select field - | Close favorite sport 1 prompt - | Close all prompts on form - | Update all prompts positions - | Build a prompt on a div - | Close div prompt - | Back to index -

-

- This demonstration shows the different validators available -
-

-
This is a div element
-
-
- - Required! - - - - Placeholder & required - - -
-
- - -
- - Function - - -
- -
- - MinSize - - -
- -
- - MaxSize - - -
- -
- - Past - - -
-
- - IP Address - - -
- - - - - - -
-
- - diff --git a/demos/demoLiveEvent.html b/demos/demoLiveEvent.html deleted file mode 100644 index 3dcabb6..0000000 --- a/demos/demoLiveEvent.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - -

- Evaluate form - | Detach - | Back to index -

-

- This demonstration shows how to use the predefined regular expressions -

-
-
- - Phone - - -
-
- - URL - - -
-
- - Email - - -
-
- - IP(V4) Address - - -
-
- - IP(V4/V6) Address - - -
-
- - Date - - -
-
- - Number - - -
-
- - Integer - - -
-
- - onlyLetterNumber - - -
-
- - Only Numbers (char) - - -
-
- - OnlyLetter - - -

-
- - \ No newline at end of file diff --git a/demos/demoMultipleForms.html b/demos/demoMultipleForms.html deleted file mode 100644 index ebb7c3a..0000000 --- a/demos/demoMultipleForms.html +++ /dev/null @@ -1,238 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - -

- Evaluate form - | Close all prompts - | Back to index -

-

- This demonstration shows the use of multiple forms on the same page.
- Note: field ids MUST be unique across the page - -

- - - - - - - - - - - - - - -
-
-
- - Phone - - -
-
- - URL - - -
-
- - Email - - -
-
- - IP Address - - -
- Hide prompts -
-
-
-
-
- - Date - - -
-
- - Number - - -
-
- - Integer - - -

-
-
- -
-
- - Phone - - -
-
- - URL - - -
-
- - Email - - -
-
- - IP Address - - -

-
-
- -
-
- - Date - - -
-
- - Number - - -
-
- - Integer - - -

-
-
- - \ No newline at end of file diff --git a/demos/demoNotEmpty.html b/demos/demoNotEmpty.html deleted file mode 100644 index ec15aab..0000000 --- a/demos/demoNotEmpty.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - - -

onValidationComplete stop the submit and let you handle the form after the validation

-
-
- - Phone - - -
-
- - OnlyLetter - - -

-
- - - - \ No newline at end of file diff --git a/demos/demoOnForm.html b/demos/demoOnForm.html deleted file mode 100755 index 02376aa..0000000 --- a/demos/demoOnForm.html +++ /dev/null @@ -1,68 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - -

- This demonstration shows onFormSuccess() and onFormFailure() -
-

-
This is a div element
-
-
- - Required! - - -
-
-
- - diff --git a/demos/demoOneMessage.html b/demos/demoOneMessage.html deleted file mode 100755 index 016ff42..0000000 --- a/demos/demoOneMessage.html +++ /dev/null @@ -1,401 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - -

- Evaluate form - | Validate sport1 select field - | Close favorite sport 1 prompt - | Close all prompts on form - | Update all prompts positions - | Build a prompt on a div - | Close div prompt - | Back to index -

-

- This demonstration shows the different validators available -
-

-
This is a div element
-
-
- - Required! - - - - Placeholder & required - - - - -
- validate[required] -
- -
- - Custom - - -
- -
- - Equals - - - -
- -
- - Function - - -
- -
- - Conditional required - - - - - - - - -
- -
- - MinSize - - -
- -
- - MaxSize - - -
- -
- - Min - - -
- -
- - Max - - -
- -
- - Past - - -
- -
- - Future - -
- -
- - Group required - - - -
- - -
- - -
- - -
- -
- - Date Range
-
- - -
-
- -
-
- - Date Time Range
-
- - -
- -
- - - Date compare
-
- - Checks that the first date is before the second date. - Please enter the second date ealier than the first date

- - -
- validate[custom[date],past[#dateCmp2]]

- - -
- validate[custom[date],future[#dateCmp1]]
-
- -
- - Credit Card - - -
- -
- - Checkbox - - -
-
- - Ajax - - -
-
-
- - diff --git a/demos/demoOverflown.html b/demos/demoOverflown.html deleted file mode 100644 index cf031cf..0000000 --- a/demos/demoOverflown.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - - -
-
-
- - Phone - - -
-
- - URL - - -
-
- - Email - - -
-
- - IP Address - - -
-
- - Date - - -
-
- - Number - - -
-
- - Integer - - -
-
- - onlyLetterNumber - - -
-
- - onlyNumberSp - - -
-
- - onlyLetterSp - - -
-
-
-
- - \ No newline at end of file diff --git a/demos/demoPerFieldPromptDirection.html b/demos/demoPerFieldPromptDirection.html deleted file mode 100644 index db08156..0000000 --- a/demos/demoPerFieldPromptDirection.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - -

- This demonstration shows how the per field show prompt position setting work -
- Show inline prompts on footnotes -

-
-
- - absolute positioning - - - - -
- validate[required] - - Custom - - -
-
- - inline positioning - - -
- -
- - inline positioning with data-prompt-target - - - -
- -
- - inline positioning with data-prompt-target to a combined summary - -

- - - - -

All prompts are appended to the same container.

- -
- -
-
- - diff --git a/demos/demoPositioning.html b/demos/demoPositioning.html deleted file mode 100644 index b964006..0000000 --- a/demos/demoPositioning.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - - -

- Evaluate form - | Close all prompts on form -
TopRight - | TopLeft - | BottomRight - | BottomLeft - | CenterRight - | CenterLeft - | Inline -
- Left to Right - Right to Left -
Back to index -

-

- This demonstration shows positioning -
-

-
-
-
-
- - - - - - - - - - - - - - - -
radio 1: -
-
radio 2: -
-
radio 3: -
- - - - - -
- -
-
-
-
- - diff --git a/demos/demoRegExp.html b/demos/demoRegExp.html deleted file mode 100644 index aa10f2a..0000000 --- a/demos/demoRegExp.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - -

- Evaluate form - | Evaluate one field - | Build a prompt on a div - | Close all prompts - | Close Telephone prompt - | Back to index -

-

- This demonstration shows how to use the predefined regular expressions -

-
-
- - Phone - - -
-
- - URL - - -
-
- - Email - - -
-
- - IP Address - - -
-
- - Date - - -
-
- - Number - - -
-
- - Integer - - -
-
- - onlyLetterNumber - - -
-
- - Only Numbers (char) - - -
-
- - OnlyLetter - - -

-
- - - - - - \ No newline at end of file diff --git a/demos/demoSelectBoxLibrary.html b/demos/demoSelectBoxLibrary.html deleted file mode 100644 index ad9de8e..0000000 --- a/demos/demoSelectBoxLibrary.html +++ /dev/null @@ -1,353 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - - - - - -

- Back to index -

-

- This demonstration shows the validation with the jQuery SelectBox plugin -

-
-
- - Select single - - -
- -
- - Hidden Form Sections - - - -
-
- -
- -
- -
-
-
- - -
-
- - diff --git a/demos/demoShowPrompt.html b/demos/demoShowPrompt.html deleted file mode 100644 index 7ca29e7..0000000 --- a/demos/demoShowPrompt.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - -

- Build a prompt on form - | Build a prompt on field - | Build a prompt on something else - | Close all prompts - | Back to index -

-

- This demonstration shows how you can use the API to create prompts. - IMPORTANT: Prompts can only apply to elements with an ID -

-
-
- - Phone - - -
-
- - URL - - -
-
- - Email - - -
-
- - \ No newline at end of file diff --git a/demos/demoSilent.html b/demos/demoSilent.html deleted file mode 100644 index 5472e17..0000000 --- a/demos/demoSilent.html +++ /dev/null @@ -1,393 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - -

- This demonstration shows submit without prompts -
-

-
This is a div element
-
-
- - Required! - - - - Placeholder & required - - - - -
- validate[required] -
- -
- - Custom - - -
- -
- - Equals - - - -
- -
- - Function - - -
- -
- - Conditional required - - - - - - - - -
- -
- - MinSize - - -
- -
- - MaxSize - - -
- -
- - Min - - -
- -
- - Max - - -
- -
- - Past - - -
- -
- - Future - -
- -
- - Group required - - - -
- - -
- - -
- - -
- -
- - Date Range
-
- - -
-
- -
-
- - Date Time Range
-
- - -
- -
- - - Date compare
-
- - Checks that the first date is before the second date. - Please enter the second date ealier than the first date

- - -
- validate[custom[date],past[#dateCmp2]]

- - -
- validate[custom[date],future[#dateCmp1]]
-
- -
- - Credit Card - - -
- -
- - Checkbox - - -
-
- - Ajax - - -
-
-
- - diff --git a/demos/demoValidationComplete.html b/demos/demoValidationComplete.html deleted file mode 100644 index e377aa9..0000000 --- a/demos/demoValidationComplete.html +++ /dev/null @@ -1,64 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - - -

onValidationComplete stop the submit and let you handle the form after the validation

-
-
- - Phone - - -
-
- - OnlyLetter - - -

-
- - - - \ No newline at end of file diff --git a/demos/demoValidators.html b/demos/demoValidators.html deleted file mode 100755 index dec9ed0..0000000 --- a/demos/demoValidators.html +++ /dev/null @@ -1,409 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - -

- Evaluate form - | Validate sport1 select field - | Close favorite sport 1 prompt - | Close all prompts on form - | Update all prompts positions - | Build a prompt on a div - | Close div prompt - | Back to index -

-

- This demonstration shows the different validators available -
-

-
This is a div element
-
-
- - Required! - - - - Optional - - - - Placeholder & required - - - - -
- validate[required] -
- -
- - Custom - - -
- -
- - Equals - - - -
- -
- - Function - - -
- -
- - Conditional required - - - - - - - - -
- -
- - MinSize - - -
- -
- - MaxSize - - -
- -
- - Min - - -
- -
- - Max - - -
- -
- - Past - - -
- -
- - Future - -
- -
- - Group required - - - -
- - -
- - -
- - -
- -
- - Date Range
-
- - -
-
- -
-
- - Date Time Range
-
- - -
- -
- - - Date compare
-
- - Checks that the first date is before the second date. - Please enter the second date ealier than the first date

- - -
- validate[custom[date],past[#dateCmp2]]

- - -
- validate[custom[date],future[#dateCmp1]]
-
- -
- - Credit Card - - -
- -
- - Checkbox - - -
-
- - Ajax - - -
-
-
-
- - diff --git a/demos/demoValidators.ja.html b/demos/demoValidators.ja.html deleted file mode 100644 index 4c5211e..0000000 --- a/demos/demoValidators.ja.html +++ /dev/null @@ -1,209 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - -

- Evaluate form - | Build a prompt on a div - | Close all prompts - | Back to index -

-

- This demonstration shows the different validators available -
-

-
-
- - Required - - - - -
- validate[required] -
-
- - Custom - - -
-
- - Equals - - - -
-
- - Function - - -
-
- - MinSize - - -
-
- - MaxSize - - -
-
- - Min - - -
-
- - Max - - -
-
- - Past - - -
-
- - Future - - -
-
- - Checkbox - - -
-
- - Ajax - - -
-
-
- - \ No newline at end of file diff --git a/demos/demoWithoutArrow.html b/demos/demoWithoutArrow.html deleted file mode 100644 index cce768b..0000000 --- a/demos/demoWithoutArrow.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - -

- This demonstration shows onFormSuccess() and onFormFailure() -
-

-
This is a div element
-
-
- - Required! - - -
-
-
- - diff --git a/demos/demoWithoutId.html b/demos/demoWithoutId.html deleted file mode 100644 index 1544835..0000000 --- a/demos/demoWithoutId.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - - -

- Demo validators without id's. -
-

- -
-
- - Required! - - - - Placeholder & required - - - - -

- - -
- Radio Groupe : -
-
- radio 1: - radio 2: - radio 3: - -
-
-
- Minimum 2 checkbox : -
-
- - - -
-
-
-
- - diff --git a/demos/phpajax/ajaxValidateFieldName.php b/demos/phpajax/ajaxValidateFieldName.php deleted file mode 100755 index 03d69de..0000000 --- a/demos/phpajax/ajaxValidateFieldName.php +++ /dev/null @@ -1,30 +0,0 @@ - \ No newline at end of file diff --git a/demos/phpajax/ajaxValidateFieldUser.php b/demos/phpajax/ajaxValidateFieldUser.php deleted file mode 100755 index ec83776..0000000 --- a/demos/phpajax/ajaxValidateFieldUser.php +++ /dev/null @@ -1,30 +0,0 @@ - \ No newline at end of file diff --git a/demos/phpajax/ajaxValidateSubmit.php b/demos/phpajax/ajaxValidateSubmit.php deleted file mode 100755 index 66dc255..0000000 --- a/demos/phpajax/ajaxValidateSubmit.php +++ /dev/null @@ -1,44 +0,0 @@ - \ No newline at end of file diff --git a/favicon.ico b/favicon.ico deleted file mode 100755 index 203d6aaf432aa3d0f92df8e9f2d108f7bdd0b12f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 Ze8*C(-2c`7`gX5B{!i5Z%U{C|{{fq6?w9}o diff --git a/images/bg_new.png b/images/bg_new.png deleted file mode 100755 index 33e6f6b4a8e4a7f07a0c18c947f4a0fe958235a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29593 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 UiL4bEn*aa+07*qoM6N<$g4=RpBLDyZ diff --git a/images/bodybg.png b/images/bodybg.png deleted file mode 100755 index fe3da9981efc921afff42a073fac343d2ada8366..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17029 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 XLvDn-=VWGk00000NkvXXu0mjf_DFwa diff --git a/images/bubble-arrow.png b/images/bubble-arrow.png deleted file mode 100755 index 7795d7de92e0b0f865d68554ebe17d40f3924b48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1038 zcmaJ=%WD%s9Nx5QYi%LEKnu0w_9U2nB+aH-8k@(aHsF?$2F#&{Zg!{5lJ3rScWO4J zLK-je>P36@;64zc7DuWN37V zqNtI~oRlT|X|jd~Pm%xgrH7Bnb{VJhcoD7OvSLFjp`ii<8ADlxS*U20^?f)^QT?=@ z%j3L!OH`4;C?1A!4U4cTYI?@C6tx5~D8N4|L`oXhCo(Mjr*0mlr?^*${*oE}(J( z2LztsLz9t6VJ{?+Kt6`3CI*d1G9bO#@rWZG>q*0p;N-jgR$%Sefw+bnGT_&V0_+uN7o z3E+RX{OYPsHO^PxUTGvEnZf!K-$CV3pTD}(7;gNGFAX$)e|cTIP@&dYf9ZpL>5V9C z?G9XP`Wnsn(r{z^VCVap`mbvKV*T^S?1}zo+fyg&Bio07NpqI3K31I?t&g7_I)L$~ aKL0WWKAqcZ_8s2!UT7vgFYP9mYkvS+%1Rml diff --git a/images/icons.png b/images/icons.png deleted file mode 100755 index 924d73ea9ad1e6983edb9e69f27c700f62c24fe1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1164 zcmeAS@N?(olHy`uVBq!ia0vp^0t^g{HXLj~*2!0fGk}z2iEBhjaDG}zd16s2gJVj5 zQmTSyZen_BP-?MkcwMxX216i4wN|l{*n%RGuNp@AM&1jI?i*} zWUYZ`h{PqMP6aKImMU4T#vhC99Yh?N?yq>TnnO}d=g68w{Y62CZa6L9Ddzg4+w3}j z%<8XmD*I*E=dD{L^2_eS-M!`C=bW!Rw|TSq^V1hwoD^UBCv|^m7d&rgBGvojuHU42 zTV^j&u2ui(X}sk664rYYQrC0V>o7{ZF?h+K>F{adz6oMCC6?rhbh<6R_`JYkUSWep z>tnBUvq`f}{D1lUa^sq0r>m!TF7SE&)~#EYUa_>%IUaCZ@2MM^ znwhDEgoVAbmFvI$v`Ckw+0k?T_3YxJqHjxq;8IdjZvMpu{8zLunwXfVh>MEOU05yt z(o)ki^3oc{)xT6;vTpspKH`+u2Dj8D=1Vq4yk2c}DeQL*D%*B5?7!+I&1tT|!IyXb{Q2{EZf@@M)JQusW8=>g z9<@zMj4+%1wr56ToM&aDmGrAuuh#vpvGe!#KE34lV@@7^{`;p-pSHF)Fi3dzvah$d z)mChtqv*?&prD|GZ{EC7mio)NwAM*x;A9>>E6D+sH+BYcakH&%W$`^IGneA^SAx= zeXZ3xcNWZ0SgL(Bz7H69nA|I zaVA`@`!JtzTKTq6JMQl6RnNmdHs-4zUvGS1$&JKbM>9v>Y1@x!?#;fqY=O%vgQeHD zW*JCk` - - - - - - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/images/lineseparator.png b/images/lineseparator.png deleted file mode 100755 index 3c82685ad25e9f795d82b14d10d9d0eb5c2ced59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1183 zcmah}TWHfz7>){}13}Rj73U#))HX@CHfvmUU0Pkyl+hI}!=YJnwq`XsF*#e)?L|aT z5m9_lmNX43w#Ac5TSf`0^peG(!V!po4zUazeVt(oPKX}W6^QR1Gc*{5;7o}ARa8o<0V1*> z@OxR0!Uk9n;JjRE8PD?zfsf@_hV?O=&%^OTsZU^8F!sq(N5HoBn8w!j?LNrnEYMLrk`Km;o7x_RS z%5z+l3yWo96<1#7=fps1nD^(o5u~)}(7<`F`kPx`kn663Zj#IqXlbobU1}j6jJ7Oj zg=_H_)Encfg=+~Elo!jLRdJ`ULyn;IjuET1T9EkG5A%tOOG_ z{Len!a{E>1(6={_>tD9o%g@Zcw*FP^^??I-o};eSd#~R8e&j=6UGo)o)9|NrM|VHy zu0Q#b@9aA={Mde%+c&b{+{la7XM3J}&gL#>Iu4^ppTGR5_nbbla>vc*uj`6?x}w9! zdImb{UiWsl2M70j>B{u)AL!5Q7}Wba)8~y(i|@DJ8e*2&z3t+}i)&gbu#=iz{eN42 cYBM#7npbkZIQ8PpSNE3@i^e0}Rckl?1X;0~%K!iX diff --git a/index.html b/index.html deleted file mode 100644 index 018fb0f..0000000 --- a/index.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - diff --git a/js/jquery-1.8.2.min.js b/js/jquery-1.8.2.min.js deleted file mode 100644 index f65cf1d..0000000 --- a/js/jquery-1.8.2.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v1.8.2 jquery.com | jquery.org/license */ -(function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write(""),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bS[a]=c,c}function ci(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||ce.test(a)?d(a,e):ci(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ci(a+"["+e+"]",b[e],c,d);else d(a,b)}function cz(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.2",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return a!=null?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b
a",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="
t
",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="
",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||p.guid++:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.length,e=c.shift(),f=p._queueHooks(a,b),g=function(){p.dequeue(a,b)};e==="inprogress"&&(e=c.shift(),d--),e&&(b==="fx"&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c=0)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c=0)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,d+""),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j=0:p.find(m,this,null,[f]).length),h[m]&&j.push(l);j.length&&u.push({elem:f,matches:j})}o.length>q&&u.push({elem:this,matches:o.slice(q)});for(d=0;d0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function bc(a,b,c,d){c=c||[],b=b||r;var e,f,i,j,k=b.nodeType;if(!a||typeof a!="string")return c;if(k!==1&&k!==9)return[];i=g(b);if(!i&&!d)if(e=P.exec(a))if(j=e[1]){if(k===9){f=b.getElementById(j);if(!f||!f.parentNode)return c;if(f.id===j)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(j))&&h(b,f)&&f.id===j)return c.push(f),c}else{if(e[2])return w.apply(c,x.call(b.getElementsByTagName(a),0)),c;if((j=e[3])&&_&&b.getElementsByClassName)return w.apply(c,x.call(b.getElementsByClassName(j),0)),c}return bp(a.replace(L,"$1"),b,c,d,i)}function bd(a){return function(b){var c=b.nodeName.toLowerCase();return c==="input"&&b.type===a}}function be(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}}function bf(a){return z(function(b){return b=+b,z(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function bg(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}function bh(a,b){var c,d,f,g,h,i,j,k=C[o][a];if(k)return b?0:k.slice(0);h=a,i=[],j=e.preFilter;while(h){if(!c||(d=M.exec(h)))d&&(h=h.slice(d[0].length)),i.push(f=[]);c=!1;if(d=N.exec(h))f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=d[0].replace(L," ");for(g in e.filter)(d=W[g].exec(h))&&(!j[g]||(d=j[g](d,r,!0)))&&(f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=g,c.matches=d);if(!c)break}return b?h.length:h?bc.error(a):C(a,i).slice(0)}function bi(a,b,d){var e=b.dir,f=d&&b.dir==="parentNode",g=u++;return b.first?function(b,c,d){while(b=b[e])if(f||b.nodeType===1)return a(b,c,d)}:function(b,d,h){if(!h){var i,j=t+" "+g+" ",k=j+c;while(b=b[e])if(f||b.nodeType===1){if((i=b[o])===k)return b.sizset;if(typeof i=="string"&&i.indexOf(j)===0){if(b.sizset)return b}else{b[o]=k;if(a(b,d,h))return b.sizset=!0,b;b.sizset=!1}}}else while(b=b[e])if(f||b.nodeType===1)if(a(b,d,h))return b}}function bj(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function bk(a,b,c,d,e){var f,g=[],h=0,i=a.length,j=b!=null;for(;h-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==l)||((b=c).nodeType?j(a,c,d):k(a,c,d))}];for(;i1&&bj(m),i>1&&a.slice(0,i-1).join("").replace(L,"$1"),c,i0,f=a.length>0,g=function(h,i,j,k,m){var n,o,p,q=[],s=0,u="0",x=h&&[],y=m!=null,z=l,A=h||f&&e.find.TAG("*",m&&i.parentNode||i),B=t+=z==null?1:Math.E;y&&(l=i!==r&&i,c=g.el);for(;(n=A[u])!=null;u++){if(f&&n){for(o=0;p=a[o];o++)if(p(n,i,j)){k.push(n);break}y&&(t=B,c=++g.el)}d&&((n=!p&&n)&&s--,h&&x.push(n))}s+=u;if(d&&u!==s){for(o=0;p=b[o];o++)p(x,q,i,j);if(h){if(s>0)while(u--)!x[u]&&!q[u]&&(q[u]=v.call(k));q=bk(q)}w.apply(k,q),y&&!h&&q.length>0&&s+b.length>1&&bc.uniqueSort(k)}return y&&(t=B,l=z),x};return g.el=0,d?z(g):g}function bo(a,b,c,d){var e=0,f=b.length;for(;e2&&(j=h[0]).type==="ID"&&b.nodeType===9&&!f&&e.relative[h[1].type]){b=e.find.ID(j.matches[0].replace(V,""),b,f)[0];if(!b)return c;a=a.slice(h.shift().length)}for(g=W.POS.test(a)?-1:h.length-1;g>=0;g--){j=h[g];if(e.relative[k=j.type])break;if(l=e.find[k])if(d=l(j.matches[0].replace(V,""),R.test(h[0].type)&&b.parentNode||b,f)){h.splice(g,1),a=d.length&&h.join("");if(!a)return w.apply(c,x.call(d,0)),c;break}}}return i(a,m)(d,b,f,c,R.test(a)),c}function bq(){}var c,d,e,f,g,h,i,j,k,l,m=!0,n="undefined",o=("sizcache"+Math.random()).replace(".",""),q=String,r=a.document,s=r.documentElement,t=0,u=0,v=[].pop,w=[].push,x=[].slice,y=[].indexOf||function(a){var b=0,c=this.length;for(;be.cacheLength&&delete a[b.shift()],a[c]=d},a)},B=A(),C=A(),D=A(),E="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",G=F.replace("w","w#"),H="([*^$|!~]?=)",I="\\["+E+"*("+F+")"+E+"*(?:"+H+E+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+G+")|)|)"+E+"*\\]",J=":("+F+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+I+")|[^:]|\\\\.)*|.*))\\)|)",K=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+E+"*((?:-\\d)?\\d*)"+E+"*\\)|)(?=[^-]|$)",L=new RegExp("^"+E+"+|((?:^|[^\\\\])(?:\\\\.)*)"+E+"+$","g"),M=new RegExp("^"+E+"*,"+E+"*"),N=new RegExp("^"+E+"*([\\x20\\t\\r\\n\\f>+~])"+E+"*"),O=new RegExp(J),P=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,Q=/^:not/,R=/[\x20\t\r\n\f]*[+~]/,S=/:not\($/,T=/h\d/i,U=/input|select|textarea|button/i,V=/\\(?!\\)/g,W={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),NAME:new RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:new RegExp("^("+F.replace("w","w*")+")"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+J),POS:new RegExp(K,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+E+"*(even|odd|(([+-]|)(\\d*)n|)"+E+"*(?:([+-]|)"+E+"*(\\d+)|))"+E+"*\\)|)","i"),needsContext:new RegExp("^"+E+"*[>+~]|"+K,"i")},X=function(a){var b=r.createElement("div");try{return a(b)}catch(c){return!1}finally{b=null}},Y=X(function(a){return a.appendChild(r.createComment("")),!a.getElementsByTagName("*").length}),Z=X(function(a){return a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!==n&&a.firstChild.getAttribute("href")==="#"}),$=X(function(a){a.innerHTML="";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),_=X(function(a){return a.innerHTML="
",!a.getElementsByClassName||!a.getElementsByClassName("e").length?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length===2)}),ba=X(function(a){a.id=o+0,a.innerHTML="
",s.insertBefore(a,s.firstChild);var b=r.getElementsByName&&r.getElementsByName(o).length===2+r.getElementsByName(o+0).length;return d=!r.getElementById(o),s.removeChild(a),b});try{x.call(s.childNodes,0)[0].nodeType}catch(bb){x=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}bc.matches=function(a,b){return bc(a,null,null,b)},bc.matchesSelector=function(a,b){return bc(b,null,null,[a]).length>0},f=bc.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=f(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=f(b);return c},g=bc.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},h=bc.contains=s.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b&&b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:s.compareDocumentPosition?function(a,b){return b&&!!(a.compareDocumentPosition(b)&16)}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},bc.attr=function(a,b){var c,d=g(a);return d||(b=b.toLowerCase()),(c=e.attrHandle[b])?c(a):d||$?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},e=bc.selectors={cacheLength:50,createPseudo:z,match:W,attrHandle:Z?{}:{href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}},find:{ID:d?function(a,b,c){if(typeof b.getElementById!==n&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==n&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==n&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:Y?function(a,b){if(typeof b.getElementsByTagName!==n)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c},NAME:ba&&function(a,b){if(typeof b.getElementsByName!==n)return b.getElementsByName(name)},CLASS:_&&function(a,b,c){if(typeof b.getElementsByClassName!==n&&!c)return b.getElementsByClassName(a)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(V,""),a[3]=(a[4]||a[5]||"").replace(V,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||bc.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&bc.error(a[0]),a},PSEUDO:function(a){var b,c;if(W.CHILD.test(a[0]))return null;if(a[3])a[2]=a[3];else if(b=a[4])O.test(b)&&(c=bh(b,!0))&&(c=b.indexOf(")",b.length-c)-b.length)&&(b=b.slice(0,c),a[0]=a[0].slice(0,c)),a[2]=b;return a.slice(0,3)}},filter:{ID:d?function(a){return a=a.replace(V,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(V,""),function(b){var c=typeof b.getAttributeNode!==n&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(V,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=B[o][a];return b||(b=B(a,new RegExp("(^|"+E+")"+a+"("+E+"|$)"))),function(a){return b.test(a.className||typeof a.getAttribute!==n&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return function(d,e){var f=bc.attr(d,a);return f==null?b==="!=":b?(f+="",b==="="?f===c:b==="!="?f!==c:b==="^="?c&&f.indexOf(c)===0:b==="*="?c&&f.indexOf(c)>-1:b==="$="?c&&f.substr(f.length-c.length)===c:b==="~="?(" "+f+" ").indexOf(c)>-1:b==="|="?f===c||f.substr(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d){return a==="nth"?function(a){var b,e,f=a.parentNode;if(c===1&&d===0)return!0;if(f){e=0;for(b=f.firstChild;b;b=b.nextSibling)if(b.nodeType===1){e++;if(a===b)break}}return e-=d,e===c||e%c===0&&e/c>=0}:function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b){var c,d=e.pseudos[a]||e.setFilters[a.toLowerCase()]||bc.error("unsupported pseudo: "+a);return d[o]?d(b):d.length>1?(c=[a,a,"",b],e.setFilters.hasOwnProperty(a.toLowerCase())?z(function(a,c){var e,f=d(a,b),g=f.length;while(g--)e=y.call(a,f[g]),a[e]=!(c[e]=f[g])}):function(a){return d(a,0,c)}):d}},pseudos:{not:z(function(a){var b=[],c=[],d=i(a.replace(L,"$1"));return d[o]?z(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)if(f=g[h])a[h]=!(b[h]=f)}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:z(function(a){return function(b){return bc(a,b).length>0}}),contains:z(function(a){return function(b){return(b.textContent||b.innerText||f(b)).indexOf(a)>-1}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!e.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},header:function(a){return T.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:bd("radio"),checkbox:bd("checkbox"),file:bd("file"),password:bd("password"),image:bd("image"),submit:be("submit"),reset:be("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return U.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement},first:bf(function(a,b,c){return[0]}),last:bf(function(a,b,c){return[b-1]}),eq:bf(function(a,b,c){return[c<0?c+b:c]}),even:bf(function(a,b,c){for(var d=0;d=0;)a.push(d);return a}),gt:bf(function(a,b,c){for(var d=c<0?c+b:c;++d",a.querySelectorAll("[selected]").length||e.push("\\["+E+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),X(function(a){a.innerHTML="

",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+E+"*(?:\"\"|'')"),a.innerHTML="",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=new RegExp(e.join("|")),bp=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a))){var i,j,k=!0,l=o,m=d,n=d.nodeType===9&&a;if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){i=bh(a),(k=d.getAttribute("id"))?l=k.replace(c,"\\$&"):d.setAttribute("id",l),l="[id='"+l+"'] ",j=i.length;while(j--)i[j]=l+i[j].join("");m=R.test(a)&&d.parentNode||d,n=i.join(",")}if(n)try{return w.apply(f,x.call(m.querySelectorAll(n),0)),f}catch(p){}finally{k||d.removeAttribute("id")}}return b(a,d,f,g,h)},h&&(X(function(b){a=h.call(b,"div");try{h.call(b,"[test!='']:sizzle"),f.push("!=",J)}catch(c){}}),f=new RegExp(f.join("|")),bc.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!g(b)&&!f.test(c)&&(!e||!e.test(c)))try{var i=h.call(b,c);if(i||a||b.document&&b.document.nodeType!==11)return i}catch(j){}return bc(c,null,null,[b]).length>0})}(),e.pseudos.nth=e.pseudos.eq,e.filters=bq.prototype=e.pseudos,e.setFilters=new bq,bc.attr=p.attr,p.find=bc,p.expr=bc.selectors,p.expr[":"]=p.expr.pseudos,p.unique=bc.uniqueSort,p.text=bc.getText,p.isXMLDoc=bc.isXML,p.contains=bc.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b0)for(e=d;e=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*\s*$/g,bz={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X
","
"]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1>");try{for(;d1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=b===e&&bA,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(f=0;(h=a[f])!=null;f++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{s=s||bk(b),l=b.createElement("div"),s.appendChild(l),h=h.replace(bo,"<$1>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]===""&&!m?l.childNodes:[];for(g=n.length-1;g>=0;--g)p.nodeName(n[g],"tbody")&&!n[g].childNodes.length&&n[g].parentNode.removeChild(n[g])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l.parentNode.removeChild(l)}h.nodeType?t.push(h):p.merge(t,h)}l&&(h=l=s=null);if(!p.support.appendChecked)for(f=0;(h=t[f])!=null;f++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(f=0;(h=t[f])!=null;f++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[f+1,0].concat(r)),f+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.chrome?b.webkit=!0:b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^(none|table(?!-c[ea]).+)/,bO=/^margin/,bP=new RegExp("^("+q+")(.*)$","i"),bQ=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bR=new RegExp("^([-+])=("+q+")","i"),bS={},bT={position:"absolute",visibility:"hidden",display:"block"},bU={letterSpacing:0,fontWeight:400},bV=["Top","Right","Bottom","Left"],bW=["Webkit","O","Moz","ms"],bX=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return b$(this,!0)},hide:function(){return b$(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bX.apply(this,arguments):this.each(function(){(c?a:bZ(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bY(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bR.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bY(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bU&&(f=bU[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(b,c){var d,e,f,g,h=a.getComputedStyle(b,null),i=b.style;return h&&(d=h[c],d===""&&!p.contains(b.ownerDocument,b)&&(d=p.style(b,c)),bQ.test(d)&&bO.test(c)&&(e=i.width,f=i.minWidth,g=i.maxWidth,i.minWidth=i.maxWidth=i.width=d,d=h.width,i.width=e,i.minWidth=f,i.maxWidth=g)),d}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bQ.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth===0&&bN.test(bH(a,"display"))?p.swap(a,bT,function(){return cb(a,b,d)}):cb(a,b,d)},set:function(a,c,d){return b_(a,c,d?ca(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bQ.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bV[d]+b]=e[d]||e[d-2]||e[0];return f}},bO.test(a)||(p.cssHooks[a+b].set=b_)});var cd=/%20/g,ce=/\[\]$/,cf=/\r?\n/g,cg=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ch=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ch.test(this.nodeName)||cg.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(cf,"\r\n")}}):{name:b.name,value:c.replace(cf,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ci(d,a[d],c,f);return e.join("&").replace(cd,"+")};var cj,ck,cl=/#.*$/,cm=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,co=/^(?:GET|HEAD)$/,cp=/^\/\//,cq=/\?/,cr=/)<[^<]*)*<\/script>/gi,cs=/([?&])_=[^&]*/,ct=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,cu=p.fn.load,cv={},cw={},cx=["*/"]+["*"];try{ck=f.href}catch(cy){ck=e.createElement("a"),ck.href="",ck=ck.href}cj=ct.exec(ck.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&cu)return cu.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):c&&typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("
").append(a.replace(cr,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cB(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cB(a,b),a},ajaxSettings:{url:ck,isLocal:cn.test(cj[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cx},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cz(cv),ajaxTransport:cz(cw),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cC(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cD(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=(c||y)+"",k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cm.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(cl,"").replace(cp,cj[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=ct.exec(l.url.toLowerCase())||!1,l.crossDomain=i&&i.join(":")+(i[3]?"":i[1]==="http:"?80:443)!==cj.join(":")+(cj[3]?"":cj[1]==="http:"?80:443)),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cA(cv,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!co.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cq.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cs,"$1_="+z);l.url=A+(A===l.url?(cq.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cx+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cA(cw,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cE=[],cF=/\?/,cG=/(=)\?(?=&|$)|\?\?/,cH=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cE.pop()||p.expando+"_"+cH++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cG.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cG.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cG,"$1"+f):m?c.data=i.replace(cG,"$1"+f):k&&(c.url+=(cF.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cE.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cI,cJ=a.ActiveXObject?function(){for(var a in cI)cI[a](0,1)}:!1,cK=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cL()||cM()}:cL,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cJ&&delete cI[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cK,cJ&&(cI||(cI={},p(a).unload(cJ)),cI[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cN,cO,cP=/^(?:toggle|show|hide)$/,cQ=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cR=/queueHooks$/,cS=[cY],cT={"*":[function(a,b){var c,d,e=this.createTween(a,b),f=cQ.exec(b),g=e.cur(),h=+g||0,i=1,j=20;if(f){c=+f[2],d=f[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&h){h=p.css(e.elem,a,!0)||c||1;do i=i||".5",h=h/i,p.style(e.elem,a,h+d);while(i!==(i=e.cur()/g)&&i!==1&&--j)}e.unit=d,e.start=h,e.end=f[1]?h+(f[1]+1)*c:c}return e}]};p.Animation=p.extend(cW,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c_.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c_.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=da(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g,null)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window); \ No newline at end of file diff --git a/js/jquery-3.4.1.min.js b/js/jquery-3.4.1.min.js deleted file mode 100644 index a1c07fd..0000000 --- a/js/jquery-3.4.1.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"
","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
"+""+"
",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
t
",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; -f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() -{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file diff --git a/js/libs/marked.js b/js/libs/marked.js deleted file mode 100755 index 25c31cf..0000000 --- a/js/libs/marked.js +++ /dev/null @@ -1,771 +0,0 @@ -/** - * marked - A markdown parser (https://github.com/chjj/marked) - * Copyright (c) 2011-2012, Christopher Jeffrey. (MIT Licensed) - */ - -;(function() { - -/** - * Block-Level Grammar - */ - -var block = { - newline: /^\n+/, - code: /^( {4}[^\n]+\n*)+/, - fences: noop, - hr: /^( *[\-*_]){3,} *(?:\n+|$)/, - heading: /^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/, - lheading: /^([^\n]+)\n *(=|-){3,} *\n*/, - blockquote: /^( *>[^\n]+(\n[^\n]+)*\n*)+/, - list: /^( *)([*+-]|\d+\.) [^\0]+?(?:\n{2,}(?! )(?!\1bullet)\n*|\s*$)/, - html: /^ *(?:comment|closed|closing) *(?:\n{2,}|\s*$)/, - def: /^ *\[([^\]]+)\]: *([^\s]+)(?: +["(]([^\n]+)[")])? *(?:\n+|$)/, - paragraph: /^([^\n]+\n?(?!body))+\n*/, - text: /^[^\n]+/ -}; - -block.list = replace(block.list) - ('bullet', /(?:[*+-](?!(?: *[-*]){2,})|\d+\.)/) - (); - -block.html = replace(block.html) - ('comment', //) - ('closed', /<(tag)[^\0]+?<\/\1>/) - ('closing', /])*?>/) - (/tag/g, tag()) - (); - -block.paragraph = (function() { - var paragraph = block.paragraph.source - , body = []; - - (function push(rule) { - rule = block[rule] ? block[rule].source : rule; - body.push(rule.replace(/(^|[^\[])\^/g, '$1')); - return push; - }) - ('hr') - ('heading') - ('lheading') - ('blockquote') - ('<' + tag()) - ('def'); - - return new - RegExp(paragraph.replace('body', body.join('|'))); -})(); - -block.normal = { - fences: block.fences, - paragraph: block.paragraph -}; - -block.gfm = { - fences: /^ *``` *(\w+)? *\n([^\0]+?)\s*``` *(?:\n+|$)/, - paragraph: /^/ -}; - -block.gfm.paragraph = replace(block.paragraph) - ('(?!', '(?!' + block.gfm.fences.source.replace(/(^|[^\[])\^/g, '$1') + '|') - (); - -/** - * Block Lexer - */ - -block.lexer = function(src) { - var tokens = []; - - tokens.links = {}; - - src = src - .replace(/\r\n|\r/g, '\n') - .replace(/\t/g, ' '); - - return block.token(src, tokens, true); -}; - -block.token = function(src, tokens, top) { - var src = src.replace(/^ +$/gm, '') - , next - , loose - , cap - , item - , space - , i - , l; - - while (src) { - // newline - if (cap = block.newline.exec(src)) { - src = src.substring(cap[0].length); - if (cap[0].length > 1) { - tokens.push({ - type: 'space' - }); - } - } - - // code - if (cap = block.code.exec(src)) { - src = src.substring(cap[0].length); - cap = cap[0].replace(/^ {4}/gm, ''); - tokens.push({ - type: 'code', - text: !options.pedantic - ? cap.replace(/\n+$/, '') - : cap - }); - continue; - } - - // fences (gfm) - if (cap = block.fences.exec(src)) { - src = src.substring(cap[0].length); - tokens.push({ - type: 'code', - lang: cap[1], - text: cap[2] - }); - continue; - } - - // heading - if (cap = block.heading.exec(src)) { - src = src.substring(cap[0].length); - tokens.push({ - type: 'heading', - depth: cap[1].length, - text: cap[2] - }); - continue; - } - - // lheading - if (cap = block.lheading.exec(src)) { - src = src.substring(cap[0].length); - tokens.push({ - type: 'heading', - depth: cap[2] === '=' ? 1 : 2, - text: cap[1] - }); - continue; - } - - // hr - if (cap = block.hr.exec(src)) { - src = src.substring(cap[0].length); - tokens.push({ - type: 'hr' - }); - continue; - } - - // blockquote - if (cap = block.blockquote.exec(src)) { - src = src.substring(cap[0].length); - - tokens.push({ - type: 'blockquote_start' - }); - - cap = cap[0].replace(/^ *> ?/gm, ''); - - // Pass `top` to keep the current - // "toplevel" state. This is exactly - // how markdown.pl works. - block.token(cap, tokens, top); - - tokens.push({ - type: 'blockquote_end' - }); - - continue; - } - - // list - if (cap = block.list.exec(src)) { - src = src.substring(cap[0].length); - - tokens.push({ - type: 'list_start', - ordered: isFinite(cap[2]) - }); - - // Get each top-level item. - cap = cap[0].match( - /^( *)([*+-]|\d+\.) [^\n]*(?:\n(?!\1(?:[*+-]|\d+\.) )[^\n]*)*/gm - ); - - next = false; - l = cap.length; - i = 0; - - for (; i < l; i++) { - item = cap[i]; - - // Remove the list item's bullet - // so it is seen as the next token. - space = item.length; - item = item.replace(/^ *([*+-]|\d+\.) +/, ''); - - // Outdent whatever the - // list item contains. Hacky. - if (~item.indexOf('\n ')) { - space -= item.length; - item = !options.pedantic - ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '') - : item.replace(/^ {1,4}/gm, ''); - } - - // Determine whether item is loose or not. - // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/ - // for discount behavior. - loose = next || /\n\n(?!\s*$)/.test(item); - if (i !== l - 1) { - next = item[item.length-1] === '\n'; - if (!loose) loose = next; - } - - tokens.push({ - type: loose - ? 'loose_item_start' - : 'list_item_start' - }); - - // Recurse. - block.token(item, tokens); - - tokens.push({ - type: 'list_item_end' - }); - } - - tokens.push({ - type: 'list_end' - }); - - continue; - } - - // html - if (cap = block.html.exec(src)) { - src = src.substring(cap[0].length); - tokens.push({ - type: 'html', - pre: cap[1] === 'pre', - text: cap[0] - }); - continue; - } - - // def - if (top && (cap = block.def.exec(src))) { - src = src.substring(cap[0].length); - tokens.links[cap[1].toLowerCase()] = { - href: cap[2], - title: cap[3] - }; - continue; - } - - // top-level paragraph - if (top && (cap = block.paragraph.exec(src))) { - src = src.substring(cap[0].length); - tokens.push({ - type: 'paragraph', - text: cap[0] - }); - continue; - } - - // text - if (cap = block.text.exec(src)) { - // Top-level should never reach here. - src = src.substring(cap[0].length); - tokens.push({ - type: 'text', - text: cap[0] - }); - continue; - } - } - - return tokens; -}; - -/** - * Inline Processing - */ - -var inline = { - escape: /^\\([\\`*{}\[\]()#+\-.!_>])/, - autolink: /^<([^ >]+(@|:\/)[^ >]+)>/, - url: noop, - tag: /^|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/, - link: /^!?\[(inside)\]\(href\)/, - reflink: /^!?\[(inside)\]\s*\[([^\]]*)\]/, - nolink: /^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/, - strong: /^__([^\0]+?)__(?!_)|^\*\*([^\0]+?)\*\*(?!\*)/, - em: /^\b_((?:__|[^\0])+?)_\b|^\*((?:\*\*|[^\0])+?)\*(?!\*)/, - code: /^(`+)([^\0]*?[^`])\1(?!`)/, - br: /^ {2,}\n(?!\s*$)/, - text: /^[^\0]+?(?=[\\?(?:\s+['"]([^\0]*?)['"])?\s*/; - -inline.link = replace(inline.link) - ('inside', inline._linkInside) - ('href', inline._linkHref) - (); - -inline.reflink = replace(inline.reflink) - ('inside', inline._linkInside) - (); - -inline.normal = { - url: inline.url, - strong: inline.strong, - em: inline.em, - text: inline.text -}; - -inline.pedantic = { - strong: /^__(?=\S)([^\0]*?\S)__(?!_)|^\*\*(?=\S)([^\0]*?\S)\*\*(?!\*)/, - em: /^_(?=\S)([^\0]*?\S)_(?!_)|^\*(?=\S)([^\0]*?\S)\*(?!\*)/ -}; - -inline.gfm = { - url: /^(https?:\/\/[^\s]+[^.,:;"')\]\s])/, - text: /^[^\0]+?(?=[\\' - + text - + ''; - continue; - } - - // url (gfm) - if (cap = inline.url.exec(src)) { - src = src.substring(cap[0].length); - text = escape(cap[1]); - href = text; - out += '' - + text - + ''; - continue; - } - - // tag - if (cap = inline.tag.exec(src)) { - src = src.substring(cap[0].length); - out += options.sanitize - ? escape(cap[0]) - : cap[0]; - continue; - } - - // link - if (cap = inline.link.exec(src)) { - src = src.substring(cap[0].length); - out += outputLink(cap, { - href: cap[2], - title: cap[3] - }); - continue; - } - - // reflink, nolink - if ((cap = inline.reflink.exec(src)) - || (cap = inline.nolink.exec(src))) { - src = src.substring(cap[0].length); - link = (cap[2] || cap[1]).replace(/\s+/g, ' '); - link = links[link.toLowerCase()]; - if (!link || !link.href) { - out += cap[0][0]; - src = cap[0].substring(1) + src; - continue; - } - out += outputLink(cap, link); - continue; - } - - // strong - if (cap = inline.strong.exec(src)) { - src = src.substring(cap[0].length); - out += '' - + inline.lexer(cap[2] || cap[1]) - + ''; - continue; - } - - // em - if (cap = inline.em.exec(src)) { - src = src.substring(cap[0].length); - out += '' - + inline.lexer(cap[2] || cap[1]) - + ''; - continue; - } - - // code - if (cap = inline.code.exec(src)) { - src = src.substring(cap[0].length); - out += '' - + escape(cap[2], true) - + ''; - continue; - } - - // br - if (cap = inline.br.exec(src)) { - src = src.substring(cap[0].length); - out += '
'; - continue; - } - - // text - if (cap = inline.text.exec(src)) { - src = src.substring(cap[0].length); - out += escape(cap[0]); - continue; - } - } - - return out; -}; - -var outputLink = function(cap, link) { - if (cap[0][0] !== '!') { - return '' - + inline.lexer(cap[1]) - + ''; - } else { - return ''
-      + escape(cap[1])
-      + ''; - } -}; - -/** - * Parsing - */ - -var tokens - , token; - -var next = function() { - return token = tokens.pop(); -}; - -var tok = function() { - switch (token.type) { - case 'space': { - return ''; - } - case 'hr': { - return '
\n'; - } - case 'heading': { - return '' - + inline.lexer(token.text) - + '\n'; - } - case 'code': { - return '
'
-        + (token.escaped
-        ? token.text
-        : escape(token.text, true))
-        + '
\n'; - } - case 'blockquote_start': { - var body = ''; - - while (next().type !== 'blockquote_end') { - body += tok(); - } - - return '
\n' - + body - + '
\n'; - } - case 'list_start': { - var type = token.ordered ? 'ol' : 'ul' - , body = ''; - - while (next().type !== 'list_end') { - body += tok(); - } - - return '<' - + type - + '>\n' - + body - + '\n'; - } - case 'list_item_start': { - var body = ''; - - while (next().type !== 'list_item_end') { - body += token.type === 'text' - ? parseText() - : tok(); - } - - return '
  • ' - + body - + '
  • \n'; - } - case 'loose_item_start': { - var body = ''; - - while (next().type !== 'list_item_end') { - body += tok(); - } - - return '
  • ' - + body - + '
  • \n'; - } - case 'html': { - if (options.sanitize) { - return inline.lexer(token.text); - } - return !token.pre && !options.pedantic - ? inline.lexer(token.text) - : token.text; - } - case 'paragraph': { - return '

    ' - + inline.lexer(token.text) - + '

    \n'; - } - case 'text': { - return '

    ' - + parseText() - + '

    \n'; - } - } -}; - -var parseText = function() { - var body = token.text - , top; - - while ((top = tokens[tokens.length-1]) - && top.type === 'text') { - body += '\n' + next().text; - } - - return inline.lexer(body); -}; - -var parse = function(src) { - tokens = src.reverse(); - - var out = ''; - while (next()) { - out += tok(); - } - - tokens = null; - token = null; - - return out; -}; - -/** - * Helpers - */ - -var escape = function(html, encode) { - return html - .replace(!encode ? /&(?!#?\w+;)/g : /&/g, '&') - .replace(//g, '>') - .replace(/"/g, '"') - .replace(/'/g, '''); -}; - -var mangle = function(text) { - var out = '' - , l = text.length - , i = 0 - , ch; - - for (; i < l; i++) { - ch = text.charCodeAt(i); - if (Math.random() > 0.5) { - ch = 'x' + ch.toString(16); - } - out += '&#' + ch + ';'; - } - - return out; -}; - -function tag() { - var tag = '(?!(?:' - + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code' - + '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo' - + '|span|br|wbr|ins|del|img)\\b)\\w+'; - - return tag; -} - -function replace(regex) { - regex = regex.source; - return function self(name, val) { - if (!name) return new RegExp(regex); - regex = regex.replace(name, val.source || val); - return self; - }; -} - -function noop() {} -noop.exec = noop; - -/** - * Marked - */ - -var marked = function(src, opt) { - setOptions(opt); - return parse(block.lexer(src)); -}; - -/** - * Options - */ - -var options - , defaults; - -var setOptions = function(opt) { - if (!opt) opt = defaults; - if (options === opt) return; - options = opt; - - if (options.gfm) { - block.fences = block.gfm.fences; - block.paragraph = block.gfm.paragraph; - inline.text = inline.gfm.text; - inline.url = inline.gfm.url; - } else { - block.fences = block.normal.fences; - block.paragraph = block.normal.paragraph; - inline.text = inline.normal.text; - inline.url = inline.normal.url; - } - - if (options.pedantic) { - inline.em = inline.pedantic.em; - inline.strong = inline.pedantic.strong; - } else { - inline.em = inline.normal.em; - inline.strong = inline.normal.strong; - } -}; - -marked.options = -marked.setOptions = function(opt) { - defaults = opt; - setOptions(opt); -}; - -marked.options({ - gfm: true, - pedantic: false, - sanitize: false -}); - -/** - * Expose - */ - -marked.parser = function(src, opt) { - setOptions(opt); - return parse(src); -}; - -marked.lexer = function(src, opt) { - setOptions(opt); - return block.lexer(src); -}; - -marked.parse = marked; - -if (typeof module !== 'undefined') { - module.exports = marked; -} else { - this.marked = marked; -} - -}).call(this); diff --git a/js/libs/modernizr-2.0.6.min.js b/js/libs/modernizr-2.0.6.min.js deleted file mode 100755 index c02c265..0000000 --- a/js/libs/modernizr-2.0.6.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/* Modernizr 2.0.6 | MIT & BSD - * Contains: All core tests, html5shiv, yepnope, respond.js. Get your own custom build at www.modernizr.com/download/ - */ -;window.Modernizr=function(a,b,c){function I(){e.input=function(a){for(var b=0,c=a.length;b",a,""].join(""),k.id=i,k.innerHTML+=f,g.appendChild(k),h=c(k,a),k.parentNode.removeChild(k);return!!h},w=function(b){if(a.matchMedia)return matchMedia(b).matches;var c;v("@media "+b+" { #"+i+" { position: absolute; } }",function(b){c=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle).position=="absolute"});return c},x=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=D(e[d],"function"),D(e[d],c)||(e[d]=c),e.removeAttribute(d))),e=null;return f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),y,z={}.hasOwnProperty,A;!D(z,c)&&!D(z.call,c)?A=function(a,b){return z.call(a,b)}:A=function(a,b){return b in a&&D(a.constructor.prototype[b],c)};var H=function(c,d){var f=c.join(""),g=d.length;v(f,function(c,d){var f=b.styleSheets[b.styleSheets.length-1],h=f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"",i=c.childNodes,j={};while(g--)j[i[g].id]=i[g];e.touch="ontouchstart"in a||j.touch.offsetTop===9,e.csstransforms3d=j.csstransforms3d.offsetLeft===9,e.generatedcontent=j.generatedcontent.offsetHeight>=1,e.fontface=/src/i.test(h)&&h.indexOf(d.split(" ")[0])===0},g,d)}(['@font-face {font-family:"font";src:url("https://")}',["@media (",o.join("touch-enabled),("),i,")","{#touch{top:9px;position:absolute}}"].join(""),["@media (",o.join("transform-3d),("),i,")","{#csstransforms3d{left:9px;position:absolute}}"].join(""),['#generatedcontent:after{content:"',m,'";visibility:hidden}'].join("")],["fontface","touch","csstransforms3d","generatedcontent"]);r.flexbox=function(){function c(a,b,c,d){a.style.cssText=o.join(b+":"+c+";")+(d||"")}function a(a,b,c,d){b+=":",a.style.cssText=(b+o.join(c+";"+b)).slice(0,-b.length)+(d||"")}var d=b.createElement("div"),e=b.createElement("div");a(d,"display","box","width:42px;padding:0;"),c(e,"box-flex","1","width:10px;"),d.appendChild(e),g.appendChild(d);var f=e.offsetWidth===42;d.removeChild(e),g.removeChild(d);return f},r.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},r.canvastext=function(){return!!e.canvas&&!!D(b.createElement("canvas").getContext("2d").fillText,"function")},r.webgl=function(){return!!a.WebGLRenderingContext},r.touch=function(){return e.touch},r.geolocation=function(){return!!navigator.geolocation},r.postmessage=function(){return!!a.postMessage},r.websqldatabase=function(){var b=!!a.openDatabase;return b},r.indexedDB=function(){for(var b=-1,c=p.length;++b7)},r.history=function(){return!!a.history&&!!history.pushState},r.draganddrop=function(){return x("dragstart")&&x("drop")},r.websockets=function(){for(var b=-1,c=p.length;++b";return(a.firstChild&&a.firstChild.namespaceURI)==q.svg},r.smil=function(){return!!b.createElementNS&&/SVG/.test(n.call(b.createElementNS(q.svg,"animate")))},r.svgclippaths=function(){return!!b.createElementNS&&/SVG/.test(n.call(b.createElementNS(q.svg,"clipPath")))};for(var J in r)A(r,J)&&(y=J.toLowerCase(),e[y]=r[J](),u.push((e[y]?"":"no-")+y));e.input||I(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)A(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return;b=typeof b=="boolean"?b:!!b(),g.className+=" "+(b?"":"no-")+a,e[a]=b}return e},B(""),j=l=null,a.attachEvent&&function(){var a=b.createElement("div");a.innerHTML="";return a.childNodes.length!==1}()&&function(a,b){function s(a){var b=-1;while(++b=u.minw)&&(!u.maxw||u.maxw&&l<=u.maxw))m[u.media]||(m[u.media]=[]),m[u.media].push(f[u.rules])}for(var t in g)g[t]&&g[t].parentNode===j&&j.removeChild(g[t]);for(var t in m){var v=c.createElement("style"),w=m[t].join("\n");v.type="text/css",v.media=t,v.styleSheet?v.styleSheet.cssText=w:v.appendChild(c.createTextNode(w)),n.appendChild(v),g.push(v)}j.insertBefore(n,o.nextSibling)}},s=function(a,b){var c=t();if(!!c){c.open("GET",a,!0),c.onreadystatechange=function(){c.readyState==4&&(c.status==200||c.status==304)&&b(c.responseText)};if(c.readyState==4)return;c.send()}},t=function(){var a=!1,b=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new XMLHttpRequest}],c=b.length;while(c--){try{a=b[c]()}catch(d){continue}break}return function(){return a}}();m(),respond.update=m,a.addEventListener?a.addEventListener("resize",u,!1):a.attachEvent&&a.attachEvent("onresize",u)}}(this,Modernizr.mq("only all")),function(a,b,c){function k(a){return!a||a=="loaded"||a=="complete"}function j(){var a=1,b=-1;while(p.length- ++b)if(p[b].s&&!(a=p[b].r))break;a&&g()}function i(a){var c=b.createElement("script"),d;c.src=a.s,c.onreadystatechange=c.onload=function(){!d&&k(c.readyState)&&(d=1,j(),c.onload=c.onreadystatechange=null)},m(function(){d||(d=1,j())},H.errorTimeout),a.e?c.onload():n.parentNode.insertBefore(c,n)}function h(a){var c=b.createElement("link"),d;c.href=a.s,c.rel="stylesheet",c.type="text/css";if(!a.e&&(w||r)){var e=function(a){m(function(){if(!d)try{a.sheet.cssRules.length?(d=1,j()):e(a)}catch(b){b.code==1e3||b.message=="security"||b.message=="denied"?(d=1,m(function(){j()},0)):e(a)}},0)};e(c)}else c.onload=function(){d||(d=1,m(function(){j()},0))},a.e&&c.onload();m(function(){d||(d=1,j())},H.errorTimeout),!a.e&&n.parentNode.insertBefore(c,n)}function g(){var a=p.shift();q=1,a?a.t?m(function(){a.t=="c"?h(a):i(a)},0):(a(),j()):q=0}function f(a,c,d,e,f,h){function i(){!o&&k(l.readyState)&&(r.r=o=1,!q&&j(),l.onload=l.onreadystatechange=null,m(function(){u.removeChild(l)},0))}var l=b.createElement(a),o=0,r={t:d,s:c,e:h};l.src=l.data=c,!s&&(l.style.display="none"),l.width=l.height="0",a!="object"&&(l.type=d),l.onload=l.onreadystatechange=i,a=="img"?l.onerror=i:a=="script"&&(l.onerror=function(){r.e=r.r=1,g()}),p.splice(e,0,r),u.insertBefore(l,s?null:n),m(function(){o||(u.removeChild(l),r.r=r.e=o=1,j())},H.errorTimeout)}function e(a,b,c){var d=b=="c"?z:y;q=0,b=b||"j",C(a)?f(d,a,b,this.i++,l,c):(p.splice(this.i++,0,a),p.length==1&&g());return this}function d(){var a=H;a.loader={load:e,i:0};return a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=r&&!s,u=s?l:n.parentNode,v=a.opera&&o.call(a.opera)=="[object Opera]",w="webkitAppearance"in l.style,x=w&&"async"in b.createElement("script"),y=r?"object":v||x?"img":"script",z=w?"img":y,A=Array.isArray||function(a){return o.call(a)=="[object Array]"},B=function(a){return Object(a)===a},C=function(a){return typeof a=="string"},D=function(a){return o.call(a)=="[object Function]"},E=[],F={},G,H;H=function(a){function f(a){var b=a.split("!"),c=E.length,d=b.pop(),e=b.length,f={url:d,origUrl:d,prefixes:b},g,h;for(h=0;h date2) return -1; - return 0; - }, - sortLabel :function(thisObject,thatObject) { - if(!thisObject.labels.length) return 1; - if(!thatObject.labels.length) return -1; - if (thisObject.labels[0].name > thatObject.labels[0].name){ - return 1; - } - else if (thisObject.labels[0].name < thatObject.labels[0].name){ - return -1; - } - return 0; - }, - callApi: function(options){ - var myoption = $.extend({}, options); - var url = this.urls[options.action](options); - - if(myoption.repo) delete myoption.repo; - if(myoption.username) delete myoption.username; - if(myoption.id) delete myoption.id; - if(myoption.action) delete myoption.action; - - return $.ajax({ - url:this.urls[options.action](options), - dataType:respType, - data:myoption - }); - }, - urls : { - domainName : "https://api.github.com/", - milestones : function(){ - if(!settings.phpApi){ - return $url = this.domainName+ "/repos/"+settings.username +"/"+ settings.repo +"/milestones"; - }else{ - return apiPath; - }; - }, - issues : function(){ - if(!settings.phpApi){ - return $url = this.domainName+"/repos/"+ settings.username +"/"+ settings.repo +"/issues"; - }else{ - return apiPath; - }; - }, - comments : function(options){ - if(!settings.phpApi){ - return $url = this.domainName+"/repos/"+ settings.username +"/"+ settings.repo+"/issues/"+ options.id +"/comments"; - }else{ - return apiPath; - } - } - } - }; - - return this.each(function(){ - releases.load(this, settings); - }); - }; - var components = { - milestone : function(data){ - return $('
    \ -

    '+data.title+'

    \ -

    Release Date: '+data.prettyDate+'

    \ -
    \ -
    ').data("milestone", data); - }, - issue : function(data){ - var labels = "", - _this = this; - - $.each(data.labels, function(i, label){ labels += _this.label(label); }); - return $('
    \ -
    \ -
    '+labels+' '+$("").html(data.title).text()+'
    \ -
    \ -
    \ -
    \ -
    \ -
    ').data("issue", data); - }, - label : function(data){ - return ''+data.name+''; - }, - bigIssue : function(data, showComment){ - var commentLink = (data.comments != 0 && showComment) ? 'See Comments' : ""; - - return $('
    \ - \ -
    \ -
    \ -
    \ -

    Opened by '+data.user.login+', issue closed on '+data.prettyDate+'

    \ -

    '+$("").html(data.title).text()+'

    \ -
    \ -
    \ - '+marked(data.body)+'\ -
    \ -
    \ -
    \ -
    \ -
    \ -
    '+commentLink).data("issue", data); - }, - comment : function(data){ - return '
    \ - \ -
    \ -
    \ -
    \ -

    \ - \ - '+data.user.login+'\ - \ - commented\ - \ -

    \ -

    \ - '+data.prettyDate+'\ -

    \ -
    \ -
    \ -
    \ -
    '+marked(data.body)+'
    \ -
    \ -
    \ -
    \ -
    \ -
    '; - } - } -})(jQuery); \ No newline at end of file diff --git a/releases.html b/releases.html deleted file mode 100644 index f021c63..0000000 --- a/releases.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - Release Notes - - - - - - - - - - - -
    -
    -

    jQuery Validation Engine Release Notes

    - -
    - -
    -
    - - diff --git a/runDemo.bat b/runDemo.bat deleted file mode 100644 index 0aee377..0000000 --- a/runDemo.bat +++ /dev/null @@ -1,3 +0,0 @@ - -rem code compiled with jdk 6 -java -cp .\test AjaxTestServer diff --git a/runDemo.sh b/runDemo.sh deleted file mode 100755 index c5ff700..0000000 --- a/runDemo.sh +++ /dev/null @@ -1,3 +0,0 @@ - -# code compiled with jdk 6 -java -cp ./test AjaxTestServer diff --git a/test/AjaxTestServer$AjaxValidationFieldResponse.class b/test/AjaxTestServer$AjaxValidationFieldResponse.class deleted file mode 100644 index ac52f8082599fc39c81d1c74d39d1d12daf8b6d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5047 zcmeHLZI2r@5FY1_%Vjy5MbsnVp;ZYTc1?19UPZ+?P^G_Z5Ry<2-PF zu7CKOM+`P^>WHM>Wl(=4)GcGQ*@it<|LI$0(CT=I5f62e%6P0RPmMl~F|nWXpw=58 zmr1IPommFuh0sl*CV9G zb0!O&HvFzo`kP+w{?`quT$42Eqp_Zvtj-f@EiK%55ql9Oo50(M8%VX}a& z;8|5jw-Ps9q4|7NNze^+M4=-eL8o@#=wuv6e30U^vAwk_0T) zbz{V+BPrC*Cpy!)htJT&DMz199r9EdL7sp{{z%!BUwF%fL9P`AYD%0ax1yYi%RaX{ zGa>RAhZy?+|4Hk!p!Q5AE#%_mfzGF3%QuEL$yvVL$YnU>lkI)T^AAhYwj7dYrqhYv z^I6ZXG-X-1JP#?4=^5^)H8O)j&?k>EQwv=r#PkLR1>Fc2T=UwBPB@dL4x^$MuR?3O z{Ai$%TJ(N4by-`W!0hq;_Xb|Y)Zx+&?7(FPmmBkUdw->` zcjzv7H%pGu^gN?4IOtHsN5V+oo_yT&wFL%;=L!bPsv1;vsP=uCqfJ!|MuWG{QW^%A z8qIlew&5KHe-@}A6mo$aRA@)64PD_1g|bElL3bRvZ%c3Wi|68qFOD$SX)A^1W-P2l zTZMfF7iMt`uJ{j+Ei8RVi!c$V3eA}+Q?515aVM`%^n8v1?*fAjDr0Rx1zvzHdaFPc zw&{NtY7kKGi}dcl(nxrTo)@U~fbg62AN&gS@Ah8)87}@l#=Jt$Ey4i(UZv+jj)K?V zb!riQ%$dKvF+m1!h3518Z^By>{!fYDv*i45FW|pA=HJOt6aEe0G^Rp2UG-zBkHLHJ OK0Obpy+u7AK;v(XYonw9 diff --git a/test/AjaxTestServer$AjaxValidationFormResponse.class b/test/AjaxTestServer$AjaxValidationFormResponse.class deleted file mode 100644 index a3b424de8140418ddbb5ecdbd83c47197a624ab6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5131 zcmeHL>yH~X5Fh6rxh&V-acy~&mkS3Z^hiM}UwDbOv}&aEArekP;)`!HX?*P3E880` z{1f~+NFc#?{wTzFH%Ieovf)B2p?=}E0o+ZM!-r)kF{s@*7AI}A zu7#$LX5TjtMI<}INv-Z^6Mus?(aK^O)*0*`i@vxP3H9jOgQH^%9fOkWFxYE89%wlu z)uYcCY+5H=Y8h0TH?@vXDC*omW3-_`*OPYtBNEvhH-Rvf)eeCd1$BB%xP2h>qM-j&M zQyx^>J>)V@v~k>vs7uX5p_F#~2>I#kX;|uHbT(kVt21P9r@7#6kYG@0Jh*)lV&Yx5 z0O{8el3SfgL#GYDFON#p+y29CykU$OG$p0lX`(aAJv?UzrwaR~I3xlk^PF(-O>}5cKRhX5=UpNipr7K|wFV8PB|iq8rYn ziNj9OhgTt=&c7Ncr51gkjXc(7EMWZlelj1KlVktY5bdb`F}we#H+96O0CwThHk^Z( z7+k8(e$wwW=`DCajgQc@y+mJ%(4mM9g^|8J>|FQN1_oCrN(ghx9aM%WcRd?vPXc@1@W*t>c}8yWjX$i^!~Xpk#T$( zg~4`1DKxhtVJ+G+yvN}DIF7+(-|?i{RE^vASep2Quh0D|;d?qvh_1X{_!0V*9l#RYYeQPxLO?Ydl>3Y^a)x>9L`XbY` jooNk*n%3ZLl2?LvU_X;fAq?-r`}94a_9l%~;e)>cx^lU- diff --git a/test/AjaxTestServer.class b/test/AjaxTestServer.class deleted file mode 100644 index ffbfea81832e664fd8cd60636d0e27960ddbd6f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8056 zcmeHM-BTPz5bxn5dv}n4V9*dX6N7pe@i3bB5h4l%%;E7-+)0(CRn~Gh9D}VM&*Rch(G@BTX}dv@X2YAgT{DGzQmt-0CNQwEzF8$eN(8PhO5u8@@U~3LXZ-+o{zBT- z((2OJE0y&%0%PSpbKjh?OwpLBc#4b0YzBr2jGB&P@tWyzDQ5OuDF|G7#0B@}2=wO* zTLf}T2Q}vC@2&yQ5g011H+xWqMOkMCJWpWcgu#+hQe|L*jQsGqP|TIqKC9E3v>k2* zoT#JZw#97sALa>iP~-EyAsD@3ESfFHr7MU)0$S7pz{StG??|b`bt%9a1j#Rn|Zskj-ey`16S=GCG8-N=paQ~^Ms;qVjjTj zL9AWo%&KoP*TK-F(d!iG~Jt~L7GY=@!>C`lJ zOl6`cFvY*aY)Tv6rKVz33JlbkIALyuIThtQ)Rn%fF>0}WX6XQbulOLBy%45}Ts%FZ z(0`Sv{lUGR^Tu@+qO?QN#28c}Z^$eL+w znTqT7QRjfS%U#?+D7P+mvjhfRyLPFeyFiqqO=@G>Tqtlf~B)DGY zsiF}ZszV!HR8F3rha^G59eQ7J+^`S#2k>PVvnr+t3`YYg24pN9ZH(1MgNg7s;8woe zoM*Fz_Mn`ByM%n7R-A3J>b4@MS?`7#OqBojKziP(G8#1~|IvCw5tHd8%VNyI1DO0u zVJib~6L1okE7ioCK&I}iV3P??p;k~9+vIqFG?D+Z-J`US?-8<=K*%J%ADkMUU3C9n z@_E#`sT$}U;~i9vXLprgCuo`LEPlK-Q7`JlHe4!7LNK*xnXb$5fbSy$cU$SEbn}eu zL;^Qsz8dfefkHf5B(@QlJOvi{Xuu-YA?+0b`rvVKV8Ak-c{bM?1D>D)PLgs1&_hR0 z4k<$~Lj|mcM{!lXp$4}BS5-WN?Sn}ege%xGf>s7@Ko)Y%_7Hx>V^_F_lp{znfUQv& z!?*kRKf!12R~Y|d?E25}!XE*`B;GY1;B^!4!yy&C1TP1DufQ$r(Fk85!XQ3F1lj>% zDL}X%QXL^6J-ix7sNe43)u%CF3SJ9Fl!MptZ2&UUJKaw7@wbMIZ+o&XtPhD^f##ld-4DP diff --git a/test/AjaxTestServer.java b/test/AjaxTestServer.java deleted file mode 100644 index c68857c..0000000 --- a/test/AjaxTestServer.java +++ /dev/null @@ -1,202 +0,0 @@ -import java.io.IOException; -import java.util.ArrayList; -import java.util.Properties; - -/** - * This java class implements a basic HTTP server aimed at testing the - * jQuery.validate AJAX capabilities. Note that this file shouldn't be taken as - * best practice for java back end development. There are much better frameworks - * to do server side processing in Java, for instance, the Play Framework. - * - * @author Olivier Refalo - */ -public class AjaxTestServer extends NanoHTTPD { - - private static final int PORT = 9173; - public static final String MIME_JSON = "application/json"; - - public AjaxTestServer() throws IOException { - super(PORT); - } - - public class AjaxValidationFieldResponse { - - // the html field id - private String id; - // true - field is valid - private Boolean status; - - public AjaxValidationFieldResponse(String fieldId, Boolean s) { - id = fieldId; - status = s; - } - - public String toString() { - - StringBuffer json = new StringBuffer(); - json.append("[\"").append(id).append("\",").append(status.toString()).append(']'); - return json.toString(); - } - } - - public class AjaxValidationFormResponse { - - // the html field id - private String id; - - // true, the field is valid : the client logic displays a green prompt - // false, the field is invalid : the client logic displays a red prompt - private Boolean status; - - // either the string to display in the prompt or an error - // selector to pick the error message from the translation.js - private String error; - - public AjaxValidationFormResponse(String fieldId, Boolean s, String err) { - id = fieldId; - status = s; - error = err; - } - - public String toString() { - - StringBuffer json = new StringBuffer(); - json.append("[\"").append(id).append("\",").append(status).append(",\"").append(error.toString()).append("\"]"); - return json.toString(); - } - } - - public Response serve(String uri, String method, Properties header, Properties parms) { - - // field validation - if ("/ajaxValidateFieldUser".equals(uri)) { - System.out.println("-> " + method + " '" + uri + "'"); - - // purposely sleep to let the UI display the AJAX loading prompts - sleep(3000); - - String fieldId = parms.getProperty("fieldId"); - String fieldValue = parms.getProperty("fieldValue"); - - AjaxValidationFieldResponse result = new AjaxValidationFieldResponse(fieldId, new Boolean( - "karnius".equals(fieldValue))); - // return ["fieldid", true or false] - return new NanoHTTPD.Response(HTTP_OK, MIME_JSON, result.toString()); - } - // field validation - else if ("/ajaxValidateFieldName".equals(uri)) { - - System.out.println("-> " + method + " '" + uri + "'"); - - // purposely sleep to let the UI display the AJAX loading prompts - sleep(3000); - - String fieldId = parms.getProperty("fieldId"); - String fieldValue = parms.getProperty("fieldValue"); - - AjaxValidationFieldResponse result = new AjaxValidationFieldResponse(fieldId, new Boolean( - "duncan".equals(fieldValue))); - // return ["fieldid", true or false] - return new NanoHTTPD.Response(HTTP_OK, MIME_JSON, result.toString()); - } - // form validation, we get the form data (read: all the form fields), we - // return ALL the errors - else if ("/ajaxSubmitForm".equals(uri)) { - - System.out.println("-> " + method + " '" + uri + "'"); - - // purposely sleep to let the UI display the AJAX loading prompts - sleep(1000); - - ArrayList errors = new ArrayList(); - - String user = parms.getProperty("user"); - String firstname = parms.getProperty("firstname"); - String email = parms.getProperty("email"); - - if (!"karnius".equals(user)) { - // error selector: indirection to the error message -> done in - // javascript - errors.add(new AjaxValidationFormResponse("user", false, "ajaxUserCall")); - } - - if (!"duncan".equals(firstname)) { - errors.add(new AjaxValidationFormResponse("firstname", false, "Please enter DUNCAN")); - } else { - errors.add(new AjaxValidationFormResponse("firstname", true, "You got it!")); - } - - if (!"someone@here.com".equals(email)) { - - errors.add(new AjaxValidationFormResponse("email", false, "The email doesn't match someone@here.com")); - } - - String json = "true"; - if (errors.size() != 0) { - json = genJSON(errors); - } - - return new NanoHTTPD.Response(HTTP_OK, MIME_JSON, json); - } - return super.serve(uri, method, header, parms); - } - - /** - * Form validation error generation Generates a list of errors - * - * @param errors - * @return [["field1", "this field is required
    - * it doesn't match
    - * "],["field2","another error"]] - */ - private String genJSON(ArrayList errors) { - StringBuffer json = new StringBuffer(); - json.append('['); - for (int i = 0; i < errors.size(); i++) { - - AjaxValidationFormResponse err = errors.get(i); - json.append(err.toString()); - if (i < errors.size() - 1) { - json.append(','); - } - } - json.append(']'); - return json.toString(); - } - - /** - * Sleeps the current thread for the given delay - * - * @param duration - * in milliseconds - * */ - private void sleep(long duration) { - try { - Thread.sleep(duration); - } catch (InterruptedException e) { - - e.printStackTrace(); - } - } - - /** - * Application start point, starts the httpd server - * - * @param args - * command line arguments - */ - public static void main(String[] args) { - try { - new AjaxTestServer(); - } catch (IOException ioe) { - System.err.println("Couldn't start server:\n" + ioe); - System.exit(-1); - } - System.out.println("Listening on port " + PORT + ". Hit Enter to stop.\nPlease open your browsers to http://localhost:" - + PORT); - try { - System.in.read(); - } catch (Throwable t) { - } - } -} \ No newline at end of file diff --git a/test/NanoHTTPD$HTTPSession.class b/test/NanoHTTPD$HTTPSession.class deleted file mode 100644 index 2690dcca1048a76f1384b5d30a130c7c3171d2c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5803 zcmeHLZFAd15MDV>{F1Z@X`AwnXahJml|E6+Dvg5A~(3;>ZV02m6S{$Vr|c&{HEVx1zNIbacISs zl)fy|vbA*SD`^ied6$bL{~@#SuY`Y#V+e+^Hsb54 zu~P(*f=A5BT5D*uSvJl|#)2p3YVF?EBbNnn@iisaF?qyf zQYB7FB4*}|&r=g}vk`PnD0ZlG&q$q!6f{BYxVkUBO?6e8&WeK)xx$57ORCOLPeAsw zJ&tM|rDR;jrl>BLQa2f9rWH;yc)TwLsop?jg6@AedjfE?E&cEH`D6+&{bS4&F{1@* zzL)jVk}?VuYng7G)0twlF^tGCLo&|>2q<%K%p2K^=~ZsBoJ_XojuW<(!Rj%UOUP)V zq7nRu%#@P$;>n~yP#9+oi_Wx|i-yQ9lP(izw=7rceK-08 zi^_wH5*FyPMd!0JN0DB$sA*!{lO`%SA1WEQg5sS9UgmpdJJQqq4UDc2E0s77vq2(Z z1r{x&U!rXkGSP|~KNg)E0`$E{5a&YWs7Ob^3lA}0Pq@#*07nn>sIH96N#oa3F@PmS z+OTMQIys5<$$JVtEDviK_O+3|7>LQY9OWRE$CM&$4L?Fybq2HO?4TZ~>J^KnTNAom z;5cmxwZn0)ly18VH)}#Lxv5)G4BbvZ^| zfV{@)qrL(?IeHb(@_2J8#<~ftoR*3$T+P7xF~(X+qy|`JdY#^g@hh}8f_mKVEYzRI z`2A)NwM=i(m00K7Xw?4Q>go88$KbCI@ULQ|J%5MZ?eY38xR@Pq@m>ZOzsIN>iByV< zA?o`*)G~bl`{UTthx8E`&(p`i&e1ixj$fi1`090I(I<2Z&v$UYgf;akBJ(*k+@@`s F`3o~yAMOAE diff --git a/test/NanoHTTPD$Response.class b/test/NanoHTTPD$Response.class deleted file mode 100644 index c53828686fe8546468efbeb62a5df487dbc4d73a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5283 zcmeHLTXWnr6h7WucGpe2A-!-1Q9{{J*p$l?W%^Q*$(jY>wvOcQ_dkCA6##nhX%iX&Y}}_p?u|wd zzubJpbS8ynO;`?K{Ry4W?SzWM?Fai$SY!fN)rOi}2hbV}jpE|)Hr}Q@WuxPa1+W}b zLj$-t=!+~jh+s5D#Oj#Qn5h8P1`n0Ym@=Gc``nDV-ng&8x$BZPdx z1vhsBxYVs+wjQIeyE4W&F9*<>#kr%DR4up~tY801D5hmHVKIqhn(>4hE(OVy+)r4l zKPO>(G-kwL;KUl}*+hFTQ4&!hq#^r^JTuZGeM7h=T*O=<7s)XW9Wcd2gdPr*OtJr6 zj$<+DMG4iK9PotcS}%^fGxx&NOe*8D;j+fO3+8`V`BtBs5W$QWzh{lh4Ntrr|2KfA zE+k?kp~d13+g_kqVXC3GYRwxsJl2M#HP*uRj>uD{TtPZnYO3D6Vn1)t>51)P$*ak@ zno&Q^5*~3wbdEa#)@GrN$|EBcamBa0W$SD%Vs^jybrycUKR8Ge@hs{y`H{J~uCHhn%PpXIqn_1JiP z7QQ$~#t2U|g8xukQmVz_@1cETu>Zdc=sQf!u1f2EdR%xDs<>q(Yx1Fr;dwL6%p2#)02R%Pf6@CUIn>MNJKrPUJG zf_DShov(&iF~m)n{}rI>B4~;vtW0Q(p-}%OO{sqHxk|Ntv**<8dGaWjadhbqq`*yo~d)wdt{`prTTBL22G74qO zmg}w6>+1!TCKNh#&)T;xwJmq=Qf22JYXl0Z;_G(hhC zuFz~aFIK86MxmgW4-v|hda<%mE+}*|L|9oaRP~!1dJS9V!WE-j*Q@1aQ?FJlRfSH6 zi`ZtA)=j;n<104LmW-0Vy>2cG>|5BI4HwqxB@; z4yzw@n6J=rbItNwfwdEUR83=5FR$tfP5OePLQDBW!zFN?dmY9DoB7wwzVU*Y9LIc> z`5n*o1;2?^ugO$;4QA|}kIuQrr|E*C{ITJ3=6mgZ*3=rF)3MuDV0*6C;T}YC{Ht0n z8=aiiuw2&*v>m1;I|5I$v;dk&BK5=_Lrog7cHjrhNuid@>TcIzJW}TfWIsA9$Wa=u znDC?&jkVrsOIntn zgSae^vhPvjbpyLC#rXe$XgHm=-LM1A@8Uwk_2c>h?=}LDYf&WU7evr@-6q>bifS%u zrLG@n>|wMGL2SGG-hHN_48g5BKtb|C8XC)e$u#@a$mw>v0W@M(+J)G!k(Am}NQN}e zr^Sj=YCmBlc`Hj7PSS`+r)u9VpOOU!{Ijpz9)}t}E5;!WFQ!HmkW!i(Zou|L?s=p- zMhY6iRz_@5eDr6VKujBlk!)}h?^SP4waWtQQ(S{kGrbpyKsW5zY)5%<8GRbB589m*Aaq;3uAcd9MViCV5_tajUbfbJ_AJ{~_XZ9hPLgqH3WI#4yQ%Ns0WGn>>^iy~to zJ`LApd{y*;7&=rX^v)8LdC_IAG1OWfBKdgVOr>?$r-yjhghfyIaHvuZ78YDp+JLS} zR#xd72-T~}RYD(nroYRq(jD~IqCi#YTa2T-4rryQ@(Vl4bb*k*(4;>_=V+3qFgizS z45wq5jbSc^$747X!xJ%_jp4}1m7u0 z@-n@G-&Zla3#ldr)-QDa_MG+;z5W|!8G0+mBr@r3jITskl&1yE1l4y!N@DabMwxK! zJ-QfbnZtiZT%-x`n5Rql_CCIf+2xSu5^zHNkmrXfJe82=*_djN=SR>KoHOi+M>Jv0I-Qd*Z=?k diff --git a/test/NanoHTTPD.java b/test/NanoHTTPD.java deleted file mode 100644 index 9e02e5d..0000000 --- a/test/NanoHTTPD.java +++ /dev/null @@ -1,759 +0,0 @@ -import java.io.BufferedReader; -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.PrintWriter; -import java.net.ServerSocket; -import java.net.Socket; -import java.net.URLEncoder; -import java.util.Date; -import java.util.Enumeration; -import java.util.Hashtable; -import java.util.Locale; -import java.util.Properties; -import java.util.StringTokenizer; -import java.util.TimeZone; - -/** - * A simple, tiny, nicely embeddable HTTP 1.0 server in Java - * - *

    NanoHTTPD version 1.14, - * Copyright © 2001,2005-2010 Jarno Elonen (elonen@iki.fi, http://iki.fi/elonen/) - * - *

    Features + limitations:

      - * - *
    • Only one Java file
    • - *
    • Java 1.1 compatible
    • - *
    • Released as open source, Modified BSD licence
    • - *
    • No fixed config files, logging, authorization etc. (Implement yourself if you need them.)
    • - *
    • Supports parameter parsing of GET and POST methods
    • - *
    • Supports both dynamic content and file serving
    • - *
    • Never caches anything
    • - *
    • Doesn't limit bandwidth, request time or simultaneous connections
    • - *
    • Default code serves files and shows all HTTP parameters and headers
    • - *
    • File server supports directory listing, index.html and index.htm
    • - *
    • File server does the 301 redirection trick for directories without '/'
    • - *
    • File server supports simple skipping for files (continue download)
    • - *
    • File server uses current directory as a web root
    • - *
    • File server serves also very long files without memory overhead
    • - *
    • Contains a built-in list of most common mime types
    • - *
    • All header names are converted lowercase so they don't vary between browsers/clients
    • - * - *
    - * - *

    Ways to use:

      - * - *
    • Run as a standalone app, serves files from current directory and shows requests
    • - *
    • Subclass serve() and embed to your own program
    • - *
    • Call serveFile() from serve() with your own base directory
    • - * - *
    - * - * See the end of the source file for distribution license - * (Modified BSD licence) - */ -public class NanoHTTPD -{ - // ================================================== - // API parts - // ================================================== - - /** - * Override this to customize the server.

    - * - * (By default, this delegates to serveFile() and allows directory listing.) - * - * @parm uri Percent-decoded URI without parameters, for example "/index.cgi" - * @parm method "GET", "POST" etc. - * @parm parms Parsed, percent decoded parameters from URI and, in case of POST, data. - * @parm header Header entries, percent decoded - * @return HTTP response, see class Response for details - */ - public Response serve( String uri, String method, Properties header, Properties parms ) - { - System.out.println( method + " '" + uri + "' " ); - - Enumeration e = header.propertyNames(); - while ( e.hasMoreElements()) - { - String value = (String)e.nextElement(); - // orefalo: way to much logging - // System.out.println( " HDR: '" + value + "' = '" + - // header.getProperty( value ) + "'" ); - } - e = parms.propertyNames(); - while ( e.hasMoreElements()) - { - String value = (String)e.nextElement(); - System.out.println( " PRM: '" + value + "' = '" + - parms.getProperty( value ) + "'" ); - } - - return serveFile( uri, header, new File("."), true ); - } - - /** - * HTTP response. - * Return one of these from serve(). - */ - public class Response - { - /** - * Default constructor: response = HTTP_OK, data = mime = 'null' - */ - public Response() - { - this.status = HTTP_OK; - } - - /** - * Basic constructor. - */ - public Response( String status, String mimeType, InputStream data ) - { - this.status = status; - this.mimeType = mimeType; - this.data = data; - } - - /** - * Convenience method that makes an InputStream out of - * given text. - */ - public Response( String status, String mimeType, String txt ) - { - this.status = status; - this.mimeType = mimeType; - this.data = new ByteArrayInputStream( txt.getBytes()); - } - - /** - * Adds given line to the header. - */ - public void addHeader( String name, String value ) - { - header.put( name, value ); - } - - /** - * HTTP status code after processing, e.g. "200 OK", HTTP_OK - */ - public String status; - - /** - * MIME type of content, e.g. "text/html" - */ - public String mimeType; - - /** - * Data of the response, may be null. - */ - public InputStream data; - - /** - * Headers for the HTTP response. Use addHeader() - * to add lines. - */ - public Properties header = new Properties(); - } - - /** - * Some HTTP response status codes - */ - public static final String - HTTP_OK = "200 OK", - HTTP_REDIRECT = "301 Moved Permanently", - HTTP_FORBIDDEN = "403 Forbidden", - HTTP_NOTFOUND = "404 Not Found", - HTTP_BADREQUEST = "400 Bad Request", - HTTP_INTERNALERROR = "500 Internal Server Error", - HTTP_NOTIMPLEMENTED = "501 Not Implemented"; - - /** - * Common mime types for dynamic content - */ - public static final String - MIME_PLAINTEXT = "text/plain", - MIME_HTML = "text/html", - MIME_DEFAULT_BINARY = "application/octet-stream"; - - // ================================================== - // Socket & server code - // ================================================== - - /** - * Starts a HTTP server to given port.

    - * Throws an IOException if the socket is already in use - */ - public NanoHTTPD( int port ) throws IOException - { - myTcpPort = port; - myServerSocket = new ServerSocket( myTcpPort ); - myThread = new Thread( new Runnable() - { - public void run() - { - try - { - while( true ) - new HTTPSession( myServerSocket.accept()); - } - catch ( IOException ioe ) - {} - } - }); - myThread.setDaemon( true ); - myThread.start(); - } - - /** - * Stops the server. - */ - public void stop() - { - try - { - myServerSocket.close(); - myThread.join(); - } - catch ( IOException ioe ) {} - catch ( InterruptedException e ) {} - } - - - /** - * Starts as a standalone file server and waits for Enter. - */ - public static void main( String[] args ) - { - System.out.println( "NanoHTTPD 1.14 (C) 2001,2005-2010 Jarno Elonen\n" + - "(Command line options: [port] [--licence])\n" ); - - // Show licence if requested - int lopt = -1; - for ( int i=0; i 0 && lopt != 0 ) - port = Integer.parseInt( args[0] ); - - if ( args.length > 1 && - args[1].toLowerCase().endsWith( "licence" )) - System.out.println( LICENCE + "\n" ); - - NanoHTTPD nh = null; - try - { - nh = new NanoHTTPD( port ); - } - catch( IOException ioe ) - { - System.err.println( "Couldn't start server:\n" + ioe ); - System.exit( -1 ); - } - nh.myFileDir = new File(""); - - System.out.println( "Now serving files in port " + port + " from \"" + - new File("").getAbsolutePath() + "\"" ); - System.out.println( "Hit Enter to stop.\n" ); - - try { System.in.read(); } catch( Throwable t ) {}; - } - - /** - * Handles one session, i.e. parses the HTTP request - * and returns the response. - */ - private class HTTPSession implements Runnable - { - public HTTPSession( Socket s ) - { - mySocket = s; - Thread t = new Thread( this ); - t.setDaemon( true ); - t.start(); - } - - public void run() - { - try - { - InputStream is = mySocket.getInputStream(); - if ( is == null) return; - BufferedReader in = new BufferedReader( new InputStreamReader( is )); - - // Read the request line - String inLine = in.readLine(); - if (inLine == null) return; - StringTokenizer st = new StringTokenizer( inLine ); - if ( !st.hasMoreTokens()) - sendError( HTTP_BADREQUEST, "BAD REQUEST: Syntax error. Usage: GET /example/file.html" ); - - String method = st.nextToken(); - - if ( !st.hasMoreTokens()) - sendError( HTTP_BADREQUEST, "BAD REQUEST: Missing URI. Usage: GET /example/file.html" ); - - String uri = st.nextToken(); - - // Decode parameters from the URI - Properties parms = new Properties(); - int qmi = uri.indexOf( '?' ); - if ( qmi >= 0 ) - { - decodeParms( uri.substring( qmi+1 ), parms ); - uri = decodePercent( uri.substring( 0, qmi )); - } - else uri = decodePercent(uri); - - - // If there's another token, it's protocol version, - // followed by HTTP headers. Ignore version but parse headers. - // NOTE: this now forces header names uppercase since they are - // case insensitive and vary by client. - Properties header = new Properties(); - if ( st.hasMoreTokens()) - { - String line = in.readLine(); - while ( line.trim().length() > 0 ) - { - int p = line.indexOf( ':' ); - header.put( line.substring(0,p).trim().toLowerCase(), line.substring(p+1).trim()); - line = in.readLine(); - } - } - - // If the method is POST, there may be parameters - // in data section, too, read it: - if ( method.equalsIgnoreCase( "POST" )) - { - long size = 0x7FFFFFFFFFFFFFFFl; - String contentLength = header.getProperty("content-length"); - if (contentLength != null) - { - try { size = Integer.parseInt(contentLength); } - catch (NumberFormatException ex) {} - } - String postLine = ""; - char buf[] = new char[512]; - int read = in.read(buf); - while ( read >= 0 && size > 0 && !postLine.endsWith("\r\n") ) - { - size -= read; - postLine += String.valueOf(buf, 0, read); - if ( size > 0 ) - read = in.read(buf); - } - postLine = postLine.trim(); - decodeParms( postLine, parms ); - } - - // Ok, now do the serve() - Response r = serve( uri, method, header, parms ); - if ( r == null ) - sendError( HTTP_INTERNALERROR, "SERVER INTERNAL ERROR: Serve() returned a null response." ); - else - sendResponse( r.status, r.mimeType, r.header, r.data ); - - in.close(); - } - catch ( IOException ioe ) - { - try - { - sendError( HTTP_INTERNALERROR, "SERVER INTERNAL ERROR: IOException: " + ioe.getMessage()); - } - catch ( Throwable t ) {} - } - catch ( InterruptedException ie ) - { - // Thrown by sendError, ignore and exit the thread. - } - } - - /** - * Decodes the percent encoding scheme.
    - * For example: "an+example%20string" -> "an example string" - */ - private String decodePercent( String str ) throws InterruptedException - { - try - { - StringBuffer sb = new StringBuffer(); - for( int i=0; i= 0 ) - uri = uri.substring(0, uri.indexOf( '?' )); - - // Prohibit getting out of current directory - if ( uri.startsWith( ".." ) || uri.endsWith( ".." ) || uri.indexOf( "../" ) >= 0 ) - return new Response( HTTP_FORBIDDEN, MIME_PLAINTEXT, - "FORBIDDEN: Won't serve ../ for security reasons." ); - - File f = new File( homeDir, uri ); - if ( !f.exists()) - return new Response( HTTP_NOTFOUND, MIME_PLAINTEXT, - "Error 404, file not found." ); - - // List the directory, if necessary - if ( f.isDirectory()) - { - // Browsers get confused without '/' after the - // directory, send a redirect. - if ( !uri.endsWith( "/" )) - { - uri += "/"; - Response r = new Response( HTTP_REDIRECT, MIME_HTML, - "Redirected:
    " + - uri + ""); - r.addHeader( "Location", uri ); - return r; - } - - // First try index.html and index.htm - if ( new File( f, "index.html" ).exists()) - f = new File( homeDir, uri + "/index.html" ); - else if ( new File( f, "index.htm" ).exists()) - f = new File( homeDir, uri + "/index.htm" ); - - // No index file, list the directory - else if ( allowDirectoryListing ) - { - String[] files = f.list(); - String msg = "

    Directory " + uri + "


    "; - - if ( uri.length() > 1 ) - { - String u = uri.substring( 0, uri.length()-1 ); - int slash = u.lastIndexOf( '/' ); - if ( slash >= 0 && slash < u.length()) - msg += "..
    "; - } - - for ( int i=0; i" + - files[i] + ""; - - // Show file size - if ( curFile.isFile()) - { - long len = curFile.length(); - msg += "  ("; - if ( len < 1024 ) - msg += curFile.length() + " bytes"; - else if ( len < 1024 * 1024 ) - msg += curFile.length()/1024 + "." + (curFile.length()%1024/10%100) + " KB"; - else - msg += curFile.length()/(1024*1024) + "." + curFile.length()%(1024*1024)/10%100 + " MB"; - - msg += ")"; - } - msg += "
    "; - if ( dir ) msg += ""; - } - return new Response( HTTP_OK, MIME_HTML, msg ); - } - else - { - return new Response( HTTP_FORBIDDEN, MIME_PLAINTEXT, - "FORBIDDEN: No directory listing." ); - } - } - - try - { - // Get MIME type from file name extension, if possible - String mime = null; - int dot = f.getCanonicalPath().lastIndexOf( '.' ); - if ( dot >= 0 ) - mime = (String)theMimeTypes.get( f.getCanonicalPath().substring( dot + 1 ).toLowerCase()); - if ( mime == null ) - mime = MIME_DEFAULT_BINARY; - - // Support (simple) skipping: - long startFrom = 0; - String range = header.getProperty( "range" ); - if ( range != null ) - { - if ( range.startsWith( "bytes=" )) - { - range = range.substring( "bytes=".length()); - int minus = range.indexOf( '-' ); - if ( minus > 0 ) - range = range.substring( 0, minus ); - try { - startFrom = Long.parseLong( range ); - } - catch ( NumberFormatException nfe ) {} - } - } - - FileInputStream fis = new FileInputStream( f ); - fis.skip( startFrom ); - Response r = new Response( HTTP_OK, mime, fis ); - r.addHeader( "Content-length", "" + (f.length() - startFrom)); - r.addHeader( "Content-range", "" + startFrom + "-" + - (f.length()-1) + "/" + f.length()); - return r; - } - catch( IOException ioe ) - { - return new Response( HTTP_FORBIDDEN, MIME_PLAINTEXT, "FORBIDDEN: Reading file failed." ); - } - } - - /** - * Hashtable mapping (String)FILENAME_EXTENSION -> (String)MIME_TYPE - */ - private static Hashtable theMimeTypes = new Hashtable(); - static - { - StringTokenizer st = new StringTokenizer( - "htm text/html "+ - "html text/html "+ - //orefalo: added css and js mime types - "css text/css "+ - "js application/javascript "+ - "txt text/plain "+ - "asc text/plain "+ - "gif image/gif "+ - "jpg image/jpeg "+ - "jpeg image/jpeg "+ - "png image/png "+ - "mp3 audio/mpeg "+ - "m3u audio/mpeg-url " + - "pdf application/pdf "+ - "doc application/msword "+ - "ogg application/x-ogg "+ - "zip application/octet-stream "+ - "exe application/octet-stream "+ - "class application/octet-stream " ); - while ( st.hasMoreTokens()) - theMimeTypes.put( st.nextToken(), st.nextToken()); - } - - /** - * GMT date formatter - */ - private static java.text.SimpleDateFormat gmtFrmt; - static - { - gmtFrmt = new java.text.SimpleDateFormat( "E, d MMM yyyy HH:mm:ss 'GMT'", Locale.US); - gmtFrmt.setTimeZone(TimeZone.getTimeZone("GMT")); - } - - /** - * The distribution licence - */ - private static final String LICENCE = - "Copyright (C) 2001,2005-2010 by Jarno Elonen \n"+ - "\n"+ - "Redistribution and use in source and binary forms, with or without\n"+ - "modification, are permitted provided that the following conditions\n"+ - "are met:\n"+ - "\n"+ - "Redistributions of source code must retain the above copyright notice,\n"+ - "this list of conditions and the following disclaimer. Redistributions in\n"+ - "binary form must reproduce the above copyright notice, this list of\n"+ - "conditions and the following disclaimer in the documentation and/or other\n"+ - "materials provided with the distribution. The name of the author may not\n"+ - "be used to endorse or promote products derived from this software without\n"+ - "specific prior written permission. \n"+ - " \n"+ - "THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n"+ - "IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n"+ - "OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n"+ - "IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n"+ - "INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n"+ - "NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n"+ - "DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n"+ - "THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n"+ - "(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n"+ - "OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."; -} \ No newline at end of file diff --git a/tests/issue430.html b/tests/issue430.html deleted file mode 100644 index def8603..0000000 --- a/tests/issue430.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - Issue #430: Do not validate empty fields that is not required. - - - - - - - - -

    Issue #430: Do not validate empty fields that is not required.

    -

    - See https://github.com/posabsolute/jQuery-Validation-Engine/issues/430 - for information. -

    -
    -

    -
    -
    -

    -

    -
    - -

    - - - - diff --git a/tests/issue451.html b/tests/issue451.html deleted file mode 100644 index d75fb2f..0000000 --- a/tests/issue451.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - Issue #451 - - - - - - - - - -

    - See https://github.com/posabsolute/jQuery-Validation-Engine/issues/451 - for information. -

    -
    - - - - - - - - diff --git a/tests/issue480.html b/tests/issue480.html deleted file mode 100644 index e143066..0000000 --- a/tests/issue480.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - Issue #451 - - - - - - - - - -

    - See https://github.com/posabsolute/jQuery-Validation-Engine/issues/480 - for information. -

    -
    - - - - - - - diff --git a/tests/issue493.html b/tests/issue493.html deleted file mode 100644 index 6b473d2..0000000 --- a/tests/issue493.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - Issue #451 - - - - - - - - - -

    - See https://github.com/posabsolute/jQuery-Validation-Engine/issues/493 - for information. -

    -
    - - - - - diff --git a/tests/issue498.html b/tests/issue498.html deleted file mode 100644 index 2734d34..0000000 --- a/tests/issue498.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - Issue #498: validate method show only one prompt - - - - - - - - - - - - - -
    -
    - - -
    - - -

    - - -
    - - diff --git a/tests/issue507.html b/tests/issue507.html deleted file mode 100644 index d8ac264..0000000 --- a/tests/issue507.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - Issue #430: Do not validate empty fields that is not required. - - - - - - - - -
    - - - - - diff --git a/tests/issue524.html b/tests/issue524.html deleted file mode 100644 index 45ab0b3..0000000 --- a/tests/issue524.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - Issue #524 - - - - - - - - - -

    - See https://github.com/posabsolute/jQuery-Validation-Engine/issues/524 - for information. -

    -
    -
    -
    -
    - - - -
    -
    - - -​ - - \ No newline at end of file diff --git a/tests/placeholders.html b/tests/placeholders.html deleted file mode 100644 index 0113873..0000000 --- a/tests/placeholders.html +++ /dev/null @@ -1,295 +0,0 @@ - - - - - JQuery Validation Engine - - - - - - - - -

    - Evaluate form - | Back to index -

    -

    - file input not included in tests, as it can only be set by the user
    - select does not have a placeholder attribute in html5, however a custom placeholder value can be defined with jquery data attribute
    -
    - ids to check: -

  • b4b650107d6715de9804f6506f94c98894264230 - broken -
  • 30092b1e57e277f22d0ffcb8bd768ffeb9eb02d6 - broken -
  • 8c690f39fdc6cde2a30abe4a5098da48c1e2f7fb - broken -
  • 70734226e588e662dc83b0e66aa91853a03f0c19 - broken -
  • 7f6df30e7cffc680b725eb14f32af4e464cc539e - broken -
  • 7c5b05527af47832468b9d6682266d11081fc24f - broken -
  • 391b738156e23e05121199d7539746bf8f2c0f68 - broken -
  • a4649825cbfd996e76c37e8a0683de5f5362db0d - working -

    -
    - -

    none of the following should validate

    - -
    - required + empty - - text - - - password - - - textarea - - - select-one - - - select-multiple - - -
    - -
    - required + whitespace - - text - - - password - - - textarea - - - select-one - - - select-multiple - - -
    - -
    - - required + data-validation-placeholder - - - text - - - password - - - textarea - - - select-one - - - select-multiple - - -
    - -
    - required + data-validation-placeholder + partial whitespace - - text - - - password - - - textarea - - - select-one - - - select-multiple - - -
    - -
    - - required + placeholder - - - text - - - password - - - textarea - - -
    - -
    - - required + placeholder + partial whitespace - - - text - - - password - - - textarea - - -
    - -

    the following should all validate

    - -
    - required + data-validation-placeholder + valid data - - text - - - password - - - textarea - - - select-one - - - select-multiple - - -
    - -
    - - required + placeholder + valid data - - - text - - - password - - - textarea - - -
    - -
    - - - diff --git a/validationengine.jquery.json b/validationengine.jquery.json deleted file mode 100644 index b664995..0000000 --- a/validationengine.jquery.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "validationengine", - "title": "Form Validation Engine", - "description": "Validate your forms with style. Complete api included for advanced users", - "keywords": [ - "form", - "field", - "validation" - ], - "version": "3.0.0", - "author": { - "name": "Cedric Dugas", - "url": "http://www.position-absolute.com/" - }, - "maintainers": [ - { - "name": "Olivier Refalo", - "url": "http://www.crionics.com/" - } - ], - "licenses": [ - { - "type": "MIT", - "url": "http://opensource.org/licenses/MIT" - } - ], - "docs": "http://posabsolute.github.com/jQuery-Validation-Engine/", - "demo": "http://www.position-relative.net/creation/formValidator/", - "dependencies": { - "jquery": ">=1.6" - } -} \ No newline at end of file From 6f8ab85aad8de1bd014063de3808abcf25dff69e Mon Sep 17 00:00:00 2001 From: Denny Brandes Date: Thu, 29 Aug 2019 14:55:08 +0200 Subject: [PATCH 78/83] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0477334..96c12a8 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -jQuery.validationEngine v3.1.1 +jQuery.validationEngine v3.1.0 ===== Looking for official contributors From eace9f16f24291e7ffb6c448c1a4159063690383 Mon Sep 17 00:00:00 2001 From: Denny Brandes Date: Thu, 29 Aug 2019 15:14:09 +0200 Subject: [PATCH 79/83] Update README.md --- README.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/README.md b/README.md index 96c12a8..628d07c 100644 --- a/README.md +++ b/README.md @@ -25,12 +25,6 @@ Documentation : ### [Release Notes](https://github.com/posabsolute/jQuery-Validation-Engine/releases) -Demo : ---- -### http://www.position-relative.net/creation/formValidator/ - - - Installation --- From bd7ec6d283f374f78d3d65e7e381991646551ef9 Mon Sep 17 00:00:00 2001 From: Denny Brandes Date: Thu, 29 Aug 2019 15:14:32 +0200 Subject: [PATCH 80/83] Update README.md --- README.md | 9 --------- 1 file changed, 9 deletions(-) diff --git a/README.md b/README.md index 628d07c..c7f12c9 100644 --- a/README.md +++ b/README.md @@ -45,15 +45,6 @@ It also comes with a set of demo pages and a simple ajax server (built in Java a 3. Pick the locale of the choice and include it in your page: jquery.validationEngine-XX.js 4. **Read this manual** and understand the API - -### Running the Demos - -Most demos are fully functional by simply opening their respective HTML file. However, the Ajax demos require the use of Java6 to launch a lightweight http server. - -1. Run the script `runDemo.bat` (Windows) or `runDemo.sh` (Unix) from the folder -2. Open a browser and point it at [http://localhost:9173](http://localhost:9173) - - Usage --- From aa48ad0c3a85f5418e8a70c29d08afd832b3ed11 Mon Sep 17 00:00:00 2001 From: "hai.0007.0007" Date: Wed, 11 Dec 2019 22:21:48 +0700 Subject: [PATCH 81/83] Fixed issue (hide) hiding all error prompts?! --- js/jquery.validationEngine.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/js/jquery.validationEngine.js b/js/jquery.validationEngine.js index ac040a5..cc84b52 100644 --- a/js/jquery.validationEngine.js +++ b/js/jquery.validationEngine.js @@ -1,5 +1,5 @@ /* - * Inline Form Validation Engine 3.1.1, jQuery plugin + * Inline Form Validation Engine 3.0.0, jQuery plugin * * Copyright(c) 2010, Cedric Dugas * http://www.position-absolute.com @@ -202,9 +202,12 @@ }, /** * Closes form error prompts, CAN be invidual + * Fixed issue (hide) hiding all error prompts?! + * (https://github.com/posabsolute/jQuery-Validation-Engine/issues/966) */ hide: function() { var form = $(this).closest('form, .validationEngineContainer'); + var field = $(this).attr("id"); var options = form.data('jqv'); // No option, take default one if (!options) @@ -213,12 +216,12 @@ var closingtag; if(form.is("form") || form.hasClass("validationEngineContainer")) { - closingtag = "parentForm"+methods._getClassName($(form).attr("id")); + closingtag = methods._getClassName(field) +"formError"; } else { - closingtag = methods._getClassName($(form).attr("id")) +"formError"; + closingtag = "parentForm"+methods._getClassName(field); } $('.'+closingtag).fadeTo(fadeDuration, 0, function() { - $(this).closest('.formError').remove(); + $('.'+closingtag).remove(); }); return this; }, From c2066968759c915c33c4dfaf08b23e20e95d734d Mon Sep 17 00:00:00 2001 From: "hai.0007.0007" Date: Wed, 11 Dec 2019 22:23:47 +0700 Subject: [PATCH 82/83] Fixed issue (hide) hiding all error prompts?! --- js/jquery.validationEngine.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/jquery.validationEngine.js b/js/jquery.validationEngine.js index cc84b52..2b3b78f 100644 --- a/js/jquery.validationEngine.js +++ b/js/jquery.validationEngine.js @@ -1,5 +1,5 @@ /* - * Inline Form Validation Engine 3.0.0, jQuery plugin + * Inline Form Validation Engine 3.1.1, jQuery plugin * * Copyright(c) 2010, Cedric Dugas * http://www.position-absolute.com From 514d9dcd130c66198515c13213b6c610c947d059 Mon Sep 17 00:00:00 2001 From: Denny Brandes Date: Mon, 6 Jul 2020 09:38:02 +0200 Subject: [PATCH 83/83] Update README.md Change bugfix in documentation --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c7f12c9..d20b8fc 100644 --- a/README.md +++ b/README.md @@ -229,7 +229,7 @@ $("#formID1").validationEngine('detach'); Validates a form or field, displays error prompts accordingly. Returns *true* if the form validates, *false* if it contains errors. -For *fields*, it returns true on validate and false on errors. +For *fields*, it returns false on validate and true on errors. When using form validation with ajax, it returns *undefined* , the result is delivered asynchronously via function *options.onAjaxFormComplete*.