[ Index ]

PHP Cross Reference of phpwcms V1.4.7 _r403 (01.11.10)

title

Body

[close]

/template/lib/mootools/more/Forms/ -> Form.Validator.Extras.js (source)

   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  ]);


Generated: Tue Nov 16 22:51:00 2010 Cross-referenced by PHPXref 0.7