Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Азат Разетдинов 18.05.2007 02:58
Исправленный вариант:@CLASS WebForms @USE Node.p @auto[] $FIELD[field] $MATCHES[ $.date[\d{4}-\d{2}-\d{2}] $.month[\d{4}-\d{2}] $.week[\d{4}-W\d{2}] $.time[\d{4}:\d{2}(?::\d{2}(?:\.\d+)?)?] $.url[(?:[a-z]+://)?[:\w~%{}./?=&@,#-]+] $.number[-?\d+(?:\.\d+)?(?:e\d+)?] ] ^MATCHES.add[ $.range[$MATCHES.number] $.datetime[${MATCHES.date}T${MATCHES.time}Z] $.datetime-local[${MATCHES.date}T$MATCHES.time] ] #end @auto[] @checkValidity[xForm][hNodes;xNode] $hNodes[^xForm.select[//$FIELD]] ^hNodes.foreach[;xNode]{^checkNode[$xNode]} $result(^xForm.selectBool[not(//${FIELD}[@valid = 0])]) #end @checkValidity[] @checkNode[xNode][hAttr;bIsValid] $hAttr[^Node:getAttributes[$xNode]] ^xNode.setAttribute[valid;1] ^if(def $hAttr.value){ ^if($hAttr.type eq email){ ^use[Lib.p] $bIsValid(^Lib:isEmail[$hAttr.value]) }{ $bIsValid( !def $MATCHES.[$hAttr.type] || ^hAttr.value.match[^^$MATCHES.[$hAttr.type]^$] ) } ^if(!$bIsValid){ ^xNode.setAttribute[typeMismatch;1] ^xNode.setAttribute[valid;0] } ^if(def $hAttr.maxlength && ^hAttr.value.length[] > ^hAttr.maxlength.int(0)){ ^xNode.setAttribute[tooLong;1] ^xNode.setAttribute[valid;0] } ^if(def $hAttr.pattern){ ^try{ ^if(!^hAttr.value.match[^^(?:$hAttr.pattern)^$]){ ^xNode.setAttribute[patternMismatch;1] ^xNode.setAttribute[valid;0] } }{ $exception.handled(1) } } }{ ^if(def $hAttr.required){ ^xNode.setAttribute[valueMissing;1] ^xNode.setAttribute[valid;0] } } ^if(def $hAttr.customError){ ^xNode.setAttribute[valid;0] } $result[] #end @checkNode[]P.S. Про ^Node:getAttributes[] не знал, пока не скачал новую версию. У вас там в двух местах есть конструкция
(!def $sNodeName || (def $sNodeName && $xNode.nodeName eq $sNodeName))которую можно сократить до
(!def $sNodeName || $xNode.nodeName eq $sNodeName)