| Новости | 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)