[ Index ] |
PHP Cross Reference of phpwcms V1.4.7 _r403 (01.11.10) |
[Summary view] [Print] [Text view]
1 /* 2 --- 3 4 script: Form.Validator.Extras.js 5 6 name: Form.Validator.Extras 7 8 description: Additional validators for the Form.Validator class. 9 10 license: MIT-style license 11 12 authors: 13 - Aaron Newton 14 15 requires: 16 - /Form.Validator 17 18 provides: [Form.Validator.Extras] 19 20 ... 21 */ 22 Form.Validator.addAllThese([ 23 24 ['validate-enforce-oncheck', { 25 test: function(element, props){ 26 var fv = element.getParent('form').retrieve('validator'); 27 if (!fv) return true; 28 (props.toEnforce || document.id(props.enforceChildrenOf).getElements('input, select, textarea')).map(function(item){ 29 if (element.checked) { 30 fv.enforceField(item); 31 } else { 32 fv.ignoreField(item); 33 fv.resetField(item); 34 } 35 }); 36 return true; 37 } 38 }], 39 40 ['validate-ignore-oncheck', { 41 test: function(element, props){ 42 var fv = element.getParent('form').retrieve('validator'); 43 if (!fv) return true; 44 (props.toIgnore || document.id(props.ignoreChildrenOf).getElements('input, select, textarea')).each(function(item){ 45 if (element.checked) { 46 fv.ignoreField(item); 47 fv.resetField(item); 48 } else { 49 fv.enforceField(item); 50 } 51 }); 52 return true; 53 } 54 }], 55 56 ['validate-nospace', { 57 errorMsg: function(){ 58 return Form.Validator.getMsg('noSpace'); 59 }, 60 test: function(element, props){ 61 return !element.get('value').test(/\s/); 62 } 63 }], 64 65 ['validate-toggle-oncheck', { 66 test: function(element, props){ 67 var fv = element.getParent('form').retrieve('validator'); 68 if (!fv) return true; 69 var eleArr = props.toToggle || document.id(props.toToggleChildrenOf).getElements('input, select, textarea'); 70 if (!element.checked){ 71 eleArr.each(function(item){ 72 fv.ignoreField(item); 73 fv.resetField(item); 74 }); 75 } else { 76 eleArr.each(function(item){ 77 fv.enforceField(item); 78 }); 79 } 80 return true; 81 } 82 }], 83 84 ['validate-reqchk-bynode', { 85 errorMsg: function(){ 86 return Form.Validator.getMsg('reqChkByNode'); 87 }, 88 test: function(element, props){ 89 return (document.id(props.nodeId).getElements(props.selector || 'input[type=checkbox], input[type=radio]')).some(function(item){ 90 return item.checked; 91 }); 92 } 93 }], 94 95 ['validate-required-check', { 96 errorMsg: function(element, props){ 97 return props.useTitle ? element.get('title') : Form.Validator.getMsg('requiredChk'); 98 }, 99 test: function(element, props){ 100 return !!element.checked; 101 } 102 }], 103 104 ['validate-reqchk-byname', { 105 errorMsg: function(element, props){ 106 return Form.Validator.getMsg('reqChkByName').substitute({label: props.label || element.get('type')}); 107 }, 108 test: function(element, props){ 109 var grpName = props.groupName || element.get('name'); 110 var oneCheckedItem = $$(document.getElementsByName(grpName)).some(function(item, index){ 111 return item.checked; 112 }); 113 var fv = element.getParent('form').retrieve('validator'); 114 if (oneCheckedItem && fv) fv.resetField(element); 115 return oneCheckedItem; 116 } 117 }], 118 119 ['validate-match', { 120 errorMsg: function(element, props){ 121 return Form.Validator.getMsg('match').substitute({matchName: props.matchName || document.id(props.matchInput).get('name')}); 122 }, 123 test: function(element, props){ 124 var eleVal = element.get('value'); 125 var matchVal = document.id(props.matchInput) && document.id(props.matchInput).get('value'); 126 return eleVal && matchVal ? eleVal == matchVal : true; 127 } 128 }], 129 130 ['validate-after-date', { 131 errorMsg: function(element, props){ 132 return Form.Validator.getMsg('afterDate').substitute({ 133 label: props.afterLabel || (props.afterElement ? Form.Validator.getMsg('startDate') : Form.Validator.getMsg('currentDate')) 134 }); 135 }, 136 test: function(element, props){ 137 var start = document.id(props.afterElement) ? Date.parse(document.id(props.afterElement).get('value')) : new Date(); 138 var end = Date.parse(element.get('value')); 139 return end && start ? end >= start : true; 140 } 141 }], 142 143 ['validate-before-date', { 144 errorMsg: function(element, props){ 145 return Form.Validator.getMsg('beforeDate').substitute({ 146 label: props.beforeLabel || (props.beforeElement ? Form.Validator.getMsg('endDate') : Form.Validator.getMsg('currentDate')) 147 }); 148 }, 149 test: function(element, props){ 150 var start = Date.parse(element.get('value')); 151 var end = document.id(props.beforeElement) ? Date.parse(document.id(props.beforeElement).get('value')) : new Date(); 152 return end && start ? end >= start : true; 153 } 154 }], 155 156 ['validate-custom-required', { 157 errorMsg: function(){ 158 return Form.Validator.getMsg('required'); 159 }, 160 test: function(element, props){ 161 return element.get('value') != props.emptyValue; 162 } 163 }], 164 165 ['validate-same-month', { 166 errorMsg: function(element, props){ 167 var startMo = document.id(props.sameMonthAs) && document.id(props.sameMonthAs).get('value'); 168 var eleVal = element.get('value'); 169 if (eleVal != '') return Form.Validator.getMsg(startMo ? 'sameMonth' : 'startMonth'); 170 }, 171 test: function(element, props){ 172 var d1 = Date.parse(element.get('value')); 173 var d2 = Date.parse(document.id(props.sameMonthAs) && document.id(props.sameMonthAs).get('value')); 174 return d1 && d2 ? d1.format('%B') == d2.format('%B') : true; 175 } 176 }], 177 178 179 ['validate-cc-num', { 180 errorMsg: function(element){ 181 var ccNum = element.get('value').replace(/[^0-9]/g, ''); 182 return Form.Validator.getMsg('creditcard').substitute({length: ccNum.length}); 183 }, 184 test: function(element){ 185 // required is a different test 186 if (Form.Validator.getValidator('IsEmpty').test(element)) { return true; } 187 188 // Clean number value 189 var ccNum = element.get('value'); 190 ccNum = ccNum.replace(/[^0-9]/g, ''); 191 192 var valid_type = false; 193 194 if (ccNum.test(/^4[0-9]{12}([0-9]{3})?$/)) valid_type = 'Visa'; 195 else if (ccNum.test(/^5[1-5]([0-9]{14})$/)) valid_type = 'Master Card'; 196 else if (ccNum.test(/^3[47][0-9]{13}$/)) valid_type = 'American Express'; 197 else if (ccNum.test(/^6011[0-9]{12}$/)) valid_type = 'Discover'; 198 199 if (valid_type) { 200 var sum = 0; 201 var cur = 0; 202 203 for(var i=ccNum.length-1; i>=0; --i) { 204 cur = ccNum.charAt(i).toInt(); 205 if (cur == 0) { continue; } 206 207 if ((ccNum.length-i) % 2 == 0) { cur += cur; } 208 if (cur > 9) { cur = cur.toString().charAt(0).toInt() + cur.toString().charAt(1).toInt(); } 209 210 sum += cur; 211 } 212 if ((sum % 10) == 0) { return true; } 213 } 214 215 var chunks = ''; 216 while (ccNum != '') { 217 chunks += ' ' + ccNum.substr(0,4); 218 ccNum = ccNum.substr(4); 219 } 220 221 element.getParent('form').retrieve('validator').ignoreField(element); 222 element.set('value', chunks.clean()); 223 element.getParent('form').retrieve('validator').enforceField(element); 224 return false; 225 } 226 }] 227 228 229 ]);
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Nov 16 22:51:00 2010 | Cross-referenced by PHPXref 0.7 |