Changeset 432
- Timestamp:
- 05/02/07 18:07:15 (2 years ago)
- Files:
-
- branches/experimental/jforms/lib/jelix-www/js/jforms.js (modified) (9 diffs)
- branches/experimental/jforms/lib/jelix/forms/jForms.class.php (modified) (2 diffs)
- branches/experimental/jforms/lib/jelix/forms/jFormsBase.class.php (modified) (5 diffs)
- branches/experimental/jforms/lib/jelix/forms/jFormsCompiler.class.php (modified) (4 diffs)
- branches/experimental/jforms/lib/jelix/forms/jFormsControl.class.php (modified) (2 diffs)
- branches/experimental/jforms/lib/jelix/forms/jFormsDataContainer.class.php (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/experimental/jforms/lib/jelix-www/js/jforms.js
r374 r432 13 13 usage : 14 14 15 16 gForm = new jFormsForm('name');17 gForm.setDecorator(new jFormsErrorDecoratorAlert()); 18 15 gForm = new jFormsForm('name'); // create a form descriptor 16 gForm.setDecorator(new jFormsErrorDecoratorAlert()); // declare an error handler 17 18 // declare a form control 19 19 gControl = new jFormsControl('name', 'a label', 'datatype'); 20 20 gControl.required = true; … … 23 23 gForm.addControl( gControl); 24 24 ... 25 26 // declare the form now 25 27 jForms.declareForm(gForm); 26 28 27 29 On a form tag : 28 30 onsubmit="return jForms.verifyForm(this)" 29 31 30 31 */ 32 33 34 35 var gForm, gFormControl; 32 */ 33 36 34 37 35 /* … … 42 40 43 41 declareForm : function(aForm){ 44 var name = 'jformthis._forms.length45 42 this._forms[aForm.name]=aForm; 46 47 43 }, 48 44 … … 58 54 for(var i =0; i < f.controls.length; i++){ 59 55 var c = f.controls[i]; 60 var val = frmElt.elements[c.name];56 var val = this._getValue(frmElt.elements[c.name]); 61 57 if(val == ''){ 62 58 if(c.required){ … … 73 69 ok = (val == 'true' || val == 'false'); 74 70 break; 75 case 'decimal' : 71 case 'decimal' : 72 var t = parseFloat(val); 73 if(isNaN(t)){ 74 ok = false; 75 }else{ 76 ok = ( t.toString() == val); 77 } 76 78 break; 77 79 case 'integer' : 78 //ok = val.regexp 80 var t = parseInt(val); 81 if(isNaN(t)){ 82 ok = false; 83 }else{ 84 ok = ( t.toString() == val); 85 } 79 86 break; 80 87 case 'hexadecimal' : 88 ok = (val.search(/^0x[a-f0-9A-F]+$/) != -1) 81 89 break; 82 90 case 'datetime' : 83 break; 84 case 'date' : 85 break; 86 case 'time' : 87 break; 88 case 'localedatetime' : 89 break; 90 case 'localedate' : 91 break; 92 case 'localetime' : 93 break; 94 case 'url' : 95 break; 96 case 'email' : 97 break; 98 case 'ipv4' : 99 break; 100 case 'ipv6' : 91 var t = (val.match(/^(\d{4})\-(\d{2})\-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/) != -1) 92 var yy = parseInt(t[1]); 93 var mm = parseInt(t[2]) -1; 94 var dd = parseInt(t[3]); 95 var th = parseInt(t[4]); 96 var tm = parseInt(t[5]); 97 var ts = parseInt(t[6]); 98 var dt = new Date(yy,mm,dd,th,tn,ts); 99 if(yy != dt.getFullYear() || mm != dt.getMonth() || dt != dd.getDate() || th != dt.getHours() || tm != dt.getMinutes() || ts != dt.getSeconds()) 100 ok = false; 101 else 102 ok = true; 103 break; 104 case 'date' : 105 var t = (val.match(/^(\d{4})\-(\d{2})\-(\d{2})$/) != -1) 106 var yy = parseInt(t[1]); 107 var mm = parseInt(t[2]) -1; 108 var dd = parseInt(t[3]); 109 var dt = new Date(yy,mm,dd,0,0,0); 110 if(yy != dt.getFullYear() || mm != dt.getMonth() || dt != dd.getDate()) 111 ok = false; 112 else 113 ok = true; 114 break; 115 case 'time' : 116 var t = (val.match(/^(\d{2}):(\d{2}):(\d{2})$/) != -1) 117 var th = parseInt(t[4]); 118 var tm = parseInt(t[5]); 119 var ts = parseInt(t[6]); 120 var dt = new Date(2007,05,02,th,tn,ts); 121 if(th != dt.getHours() || tm != dt.getMinutes() || ts != dt.getSeconds()) 122 ok = false; 123 else 124 ok = true; 125 break; 126 /*case 'localedatetime' : 127 ok = (val.search(/^$/) != -1) 128 break; 129 case 'localedate' : 130 ok = (val.search(/^$/) != -1) 131 break; 132 case 'localetime' : 133 ok = (val.search(/^$/) != -1) 134 break; 135 case 'url' : 136 ok = (val.search(/^$/) != -1) 137 break;*/ 138 case 'email' : 139 ok = (val.search(/^[A-Z0-9][A-Z0-9_\-]*(\.[A-Z0-9][A-Z0-9_\-]*)*@[A-Z0-9][A-Z0-9_\-]*(\.[A-Z0-9][A-Z0-9_\-]+)$/i) != -1) 140 break; 141 case 'ipv4' : 142 var t = val.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/); 143 if(t) 144 ok = (t[1] > 255 || t[2] > 255 || t[3] > 255 || t[4] > 255) 145 else 146 ok = false; 147 break; 148 case 'ipv6' : 149 ok = (val.search(/^([a-f0-9]{1,4})(:([a-f0-9]{1,4})){7}$/i) != -1) 101 150 break; 102 151 } … … 105 154 valid = false; 106 155 } 107 108 156 } 109 157 } … … 111 159 f.decorator.end(); 112 160 return valid; 161 }, 162 163 164 _getValue : function (elt){ 165 var value=''; 166 switch (elt.localName) { 167 case "input": 168 switch (elt.type) { 169 case "text": 170 case "password": 171 case "hidden": 172 value = elt.value; 173 break; 174 case "checkbox": 175 case "radio": 176 if (elt.checked) 177 value = 'true'; 178 else 179 value = 'false'; 180 break; 181 } 182 break; 183 184 case "textarea": 185 value= elt.value; 186 break; 187 case "select": 188 if (!elt.multiple) { 189 value = elt.value; 190 break; 191 } 192 var options = elt.getElementsByTagName("option"); 193 value = []; 194 for (i = 0; i < options.length; i++) { 195 if (options[i].selected) { 196 value.push(options[i].value); 197 } 198 } 199 break; 200 } 201 return value; 113 202 } 203 114 204 } 115 205 … … 155 245 this.message = ''; 156 246 } 247 157 248 jFormsErrorDecoratorAlert.prototype = { 158 249 start : function(){ … … 162 253 if(messageType == 1){ 163 254 this.message += control.errRequired + "\n"; 255 }else if(messageType == 2){ 256 this.message += control.errInvalid + "\n"; 164 257 }else{ 165 this.message += control.errInvalid + "\n"; 166 } 167 }, 168 258 this.message += "Error on '"+control.label+"' field\n"; 259 } 260 }, 169 261 end : function(){ 170 262 if(this.message != ''){ branches/experimental/jforms/lib/jelix/forms/jForms.class.php
r335 r432 5 5 * @author Laurent Jouanneau 6 6 * @contributor 7 * @copyright 2006 Laurent Jouanneau7 * @copyright 2006-2007 Laurent Jouanneau 8 8 * @link http://www.jelix.org 9 9 * @licence http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public Licence, see LICENCE file … … 18 18 require_once(JELIX_LIB_FORMS_PATH.'jFormsBase.class.php'); 19 19 require_once(JELIX_LIB_FORMS_PATH.'jFormsControl.class.php'); 20 require_once(JELIX_LIB_FORMS_PATH.'jFormsDatasource.class.php'); 20 21 require_once(JELIX_LIB_UTILS_PATH.'jDatatype.class.php'); 21 22 branches/experimental/jforms/lib/jelix/forms/jFormsBase.class.php
r374 r432 44 44 */ 45 45 protected $_readOnly = false; 46 47 /**48 * list of errors49 * @var array50 */51 protected $_errors = array();52 46 53 47 /** … … 70 64 $value = $req->getParam($name); 71 65 //if($value !== null) on commente pour le moment, 72 //@todo �revoir un meilleur test, pour les formulaires sur plusieurs pages66 //@todo à prevoir un meilleur test, pour les formulaires sur plusieurs pages 73 67 $this->_container->datas[$name]= $value; 74 68 } … … 92 86 */ 93 87 public function check(){ 94 $this->_ errors = array();88 $this->_container->errors = array(); 95 89 foreach($this->_controls as $name=>$ctrl){ 96 90 $value=$this->_container->datas[$name]; 97 91 if($value === null && $ctrl->required){ 98 $this->_ errors[$name]=JFORM_ERRDATA_REQUIRED;99 }elseif( $ctrl->datatype->check($value)){100 $this->_ errors[$name]=JFORM_ERRDATA_VALID;92 $this->_container->errors[$name]=JFORM_ERRDATA_REQUIRED; 93 }elseif(!$ctrl->datatype->check($value)){ 94 $this->_container->errors[$name]=JFORM_ERRDATA_INVALID; 101 95 } 102 96 } 103 return count($this-> errors) == 0;97 return count($this->_container->errors) == 0; 104 98 } 105 99 … … 143 137 */ 144 138 public function setReadOnly($r = true){ $this->_readOnly = $r; } 145 139 146 140 /** 147 141 * return list of errors found during the check … … 149 143 * @see jFormsBase::check 150 144 */ 151 public function getErrors(){ return $this->_errors; } 145 public function getErrors(){ return $this->_container->errors; } 146 147 /** 148 * set an error message on a specific field 149 * @param string $field the field name 150 * @param string $mesg the error message string 151 */ 152 public function setErrorOn($field, $mesg){ 153 $this->_container->errors[$field]=$mesg; 154 } 152 155 153 156 /** branches/experimental/jforms/lib/jelix/forms/jFormsCompiler.class.php
r374 r432 188 188 189 189 190 /* on g �re en php, du php qui g�re du javascript ! oui oui :-D190 /* on génére en php, du php qui génère du javascript ! oui oui :-D 191 191 192 au final, le javascript g �r�ans la page html doit ressembler �ela192 au final, le javascript généré dans la page html doit ressembler à cela 193 193 194 194 gForm = new jFormsForm('name'); … … 207 207 208 208 209 // le code php g �r�ans le builder209 // le code php généré dans le builder 210 210 211 211 $js="gForm = new jFormsForm('".$this->getFormName()."');\n"; … … 236 236 $js.="jForms.declareForm(gForm);\n"; 237 237 238 // le code php qui g �re le php238 // le code php qui génère le php 239 239 240 240 … … 255 255 256 256 // on indique un objet form 257 // il renvoi dans un tableau le code g �r�orrespondant257 // il renvoi dans un tableau le code généré correspondant 258 258 /* 259 startform : code g �r�our le debut du formulaire (balise <form> en html) Peut contenir %ATTR%260 head : code g �r� ajouter dans l'en-t�de page261 controls : tableau assoc de chaque contr �g�r�Peuvent contenir %ATTR%262 endform : code g �r�our la fin du formulaire263 264 265 %ATTR% : remplac �par les attributs suppl�ntaires indiqu�par l'utilisateur dans le template259 startform : code généré pour le debut du formulaire (balise <form> en html) Peut contenir %ATTR% 260 head : code généré à ajouter dans l'en-tête de page 261 controls : tableau assoc de chaque contrôle généré. Peuvent contenir %ATTR% 262 endform : code généré pour la fin du formulaire 263 264 265 %ATTR% : remplacés par les attributs supplémentaires indiqués par l'utilisateur dans le template 266 266 */ 267 267 function buildForm($formObject); branches/experimental/jforms/lib/jelix/forms/jFormsControl.class.php
r324 r432 5 5 * @author Laurent Jouanneau 6 6 * @contributor 7 * @copyright 2006 Laurent Jouanneau7 * @copyright 2006-2007 Laurent Jouanneau 8 8 * @link http://www.jelix.org 9 9 * @licence http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public Licence, see LICENCE file … … 27 27 public $value=''; 28 28 public $defaultValue=''; 29 // public $pattern =null;30 29 31 30 function __construct($ref){ branches/experimental/jforms/lib/jelix/forms/jFormsDataContainer.class.php
r324 r432 5 5 * @author Laurent Jouanneau 6 6 * @contributor 7 * @copyright 2006 Laurent Jouanneau7 * @copyright 2006-2007 Laurent Jouanneau 8 8 * @link http://www.jelix.org 9 9 * @licence http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public Licence, see LICENCE file … … 33 33 34 34 /** 35 * list of errors detected in datas 36 * @var array 37 */ 38 public $errors = array(); 39 40 /** 35 41 * 36 42 * @param jSelectorForm $formSelector … … 47 53 48 54 function clear(){ 49 $this->datas=array(); 55 $this->datas = array(); 56 $this->errors = array(); 50 57 } 51 58
