From 57b45e8de6dd27348782f3478b785d87aa228c65 Mon Sep 17 00:00:00 2001 From: Leandro Lucarella Date: Wed, 21 Feb 2007 04:11:04 +0000 Subject: [PATCH] =?utf8?q?Hacer=20que=20formularios=20sean=20subclase=20de?= =?utf8?q?=20TableForm.=20Si=20los=20formularios=20son=20instancias=20de?= =?utf8?q?=20TableForm=20en=20vez=20de=20subclases,=20cuando=20quieren=20u?= =?utf8?q?sar=20javascript=20modifican=20el=20atributo=20*de=20clase*=20'j?= =?utf8?q?avascript'=20de=20TableForm=20y=20termina=20inyect=C3=A1ndose=20?= =?utf8?q?el=20javascript=20de=20*todos*=20los=20formularios=20juntos=20en?= =?utf8?q?=20cada=20formulario=20renderizado.=20Por=20ahora=20no=20encontr?= =?utf8?q?=C3=A9=20mejor=20soluci=C3=B3n=20que=20la=20subclase.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- sercom/controllers.py | 32 +++++----- .../subcontrollers/caso_de_prueba/__init__.py | 39 +++++++----- sercom/subcontrollers/docente/__init__.py | 62 ++++++++++--------- sercom/subcontrollers/enunciado/__init__.py | 30 +++++---- 4 files changed, 89 insertions(+), 74 deletions(-) diff --git a/sercom/controllers.py b/sercom/controllers.py index 714869a..186fe51 100644 --- a/sercom/controllers.py +++ b/sercom/controllers.py @@ -1,7 +1,7 @@ # vim: set et sw=4 sts=4 encoding=utf-8 : from turbogears import controllers, expose, view -from turbogears import widgets as w, validators +from turbogears import widgets as W, validators as V from turbogears import identity, redirect from cherrypy import request, response from model import * @@ -12,6 +12,17 @@ from subcontrollers import * import logging log = logging.getLogger("sercom.controllers") +class LoginForm(W.TableForm): + fields = [ + W.TextField(name='login_user', label=_(u'Usuario'), + validator=V.NotEmpty()), + W.PasswordField(name='login_password', label=_(u'Contraseña'), + validator=V.NotEmpty()) + ] + javascript = [W.JSSource("MochiKit.DOM.focusOnLoad('form_login_user');")] + submit = W.SubmitButton(name='login_submit') + submit_text = _(u'Ingresar') + class Root(controllers.RootController): @expose(template='.templates.welcome') @@ -46,24 +57,13 @@ class Root(controllers.RootController): msg = _(u'Por favor ingrese.') forward_url = request.headers.get('Referer', '/') - fields = [ - w.TextField(name='login_user', label=_(u'Usuario'), - validator=validators.NotEmpty()), - w.PasswordField(name='login_password', label=_(u'Contraseña'), - validator=validators.NotEmpty()) - ] + fields = list(LoginForm.fields) if forward_url: - fields.append(w.HiddenField(name='forward_url')) - fields.extend([w.HiddenField(name=name) for name in request.params + fields.append(W.HiddenField(name='forward_url')) + fields.extend([W.HiddenField(name=name) for name in request.params if name not in ('login_user', 'login_password', 'login_submit', 'forward_url')]) - - submit = w.SubmitButton(name='login_submit') - - login_form = w.TableForm(fields=fields, action=previous_url, - submit_text=_(u'Ingresar'), submit=submit) - login_form.javascript.append( - w.JSSource("MochiKit.DOM.focusOnLoad('form_login_user');")) + login_form = LoginForm(fields=fields, action=previous_url) values = dict(forward_url=forward_url) values.update(request.params) diff --git a/sercom/subcontrollers/caso_de_prueba/__init__.py b/sercom/subcontrollers/caso_de_prueba/__init__.py index 21451e7..a65f41e 100644 --- a/sercom/subcontrollers/caso_de_prueba/__init__.py +++ b/sercom/subcontrollers/caso_de_prueba/__init__.py @@ -2,8 +2,9 @@ #{{{ Imports from turbogears import controllers, expose, redirect -from turbogears import validate, validators, flash, error_handler -from turbogears.widgets import * +from turbogears import validate, flash, error_handler +from turbogears import validators as V +from turbogears import widgets as W from turbogears import identity from turbogears import paginate from docutils.core import publish_parts @@ -53,20 +54,24 @@ def get_options(): return [(0, _(u'<>'))] + [(fk.id, fk.shortrepr()) for fk in fkcls.select()] -form = TableForm(fields=[ - TextField(name='nombre', label=_(u'Nombre'), - help_text=_(u'Requerido y único.'), - validator=validators.UnicodeString(min=5, max=60, strip=True)), - SingleSelectField(name=fkname+'ID', label=_(fkname.capitalize()), - options=get_options, validator=validators.Int(not_empty=False)), - TextField(name='descripcion', label=_(u'Descripción'), - validator=validators.UnicodeString(not_empty=False, max=255, strip=True)), - TextField(name='retorno', label=_(u'Código de retorno'), - validator=validators.Int(not_empty=False, strip=True)), - TextField(name='tiempo_cpu', label=_(u'Tiempo de CPU'), - validator=validators.Number(not_empty=False, strip=True)), -]) -form.javascript.append(JSSource("MochiKit.DOM.focusOnLoad('form_nombre');")) +class CasoDePruebaForm(W.TableForm): + fields = [ + W.TextField(name='nombre', label=_(u'Nombre'), + help_text=_(u'Requerido y único.'), + validator=V.UnicodeString(min=5, max=60, strip=True)), + W.SingleSelectField(name=fkname+'ID', label=_(fkname.capitalize()), + options=get_options, validator=V.Int(not_empty=False)), + W.TextField(name='descripcion', label=_(u'Descripción'), + validator=V.UnicodeString(not_empty=False, max=255, + strip=True)), + W.TextField(name='retorno', label=_(u'Código de retorno'), + validator=V.Int(not_empty=False, strip=True)), + W.TextField(name='tiempo_cpu', label=_(u'Tiempo de CPU'), + validator=V.Number(not_empty=False, strip=True)), + ] + javascript = [W.JSSource("MochiKit.DOM.focusOnLoad('form_nombre');")] + +form = CasoDePruebaForm() #}}} #{{{ Controlador @@ -84,7 +89,7 @@ class CasoDePruebaController(controllers.Controller, identity.SecureResource): raise redirect('list') @expose(template='kid:%s.templates.list' % __name__) - @validate(validators=dict(enunciado=validators.Int)) + @validate(validators=dict(enunciado=V.Int)) @paginate('records') def list(self, enunciado=None): """List records in model""" diff --git a/sercom/subcontrollers/docente/__init__.py b/sercom/subcontrollers/docente/__init__.py index 12fd147..3ab67c8 100644 --- a/sercom/subcontrollers/docente/__init__.py +++ b/sercom/subcontrollers/docente/__init__.py @@ -3,8 +3,9 @@ #{{{ Imports import cherrypy from turbogears import controllers, expose, redirect -from turbogears import validate, validators, flash, error_handler -from turbogears.widgets import * +from turbogears import validate, flash, error_handler +from turbogears import validators as V +from turbogears import widgets as W from turbogears import identity from turbogears import paginate from docutils.core import publish_parts @@ -30,32 +31,37 @@ def validate_new(data): #}}} #{{{ Formulario -form = TableForm(fields=[ - TextField(name='usuario', label=_(u'Usuario'), - help_text=_(u'Requerido y único.'), - validator=validators.UnicodeString(min=3, max=10, strip=True)), - TextField(name='nombre', label=_(u'Nombre'), - help_text=_(u'Requerido.'), - validator=validators.UnicodeString(min=10, max=255, strip=True)), - TextField(name='email', label=_(u'E-Mail'), - #help_text=_(u'Dirección de e-mail.'), - validator=validators.All( - validators.Email(not_empty=False, resolve_domain=True), - validators.UnicodeString(not_empty=False, max=255, strip=True))), - TextField(name='telefono', label=_(u'Teléfono'), - #help_text=_(u'Texto libre para teléfono, se puede incluir horarios o varias entradas.'), - validator=validators.UnicodeString(not_empty=False, min=7, max=255, strip=True)), - TextArea(name='observaciones', label=_(u'Observaciones'), - #help_text=_(u'Observaciones.'), - validator=validators.UnicodeString(not_empty=False, strip=True)), - CheckBox(name='nombrado', label=_(u'Nombrado'), default=1, - #help_text=_(u'Indica si tiene cargo.'), - validator=validators.Bool(if_empty=1)), - CheckBox(name='activo', label=_(u'Activo'), default=1, - #help_text=_(u'Si no está activo no puede ingresar al sistema.'), - validator=validators.Bool(if_empty=1)), -]) -form.javascript.append(JSSource("MochiKit.DOM.focusOnLoad('form_usuario');")) +class DocenteForm(W.TableForm): + fields = [ + W.TextField(name='usuario', label=_(u'Usuario'), + help_text=_(u'Requerido y único.'), + validator=V.UnicodeString(min=3, max=10, strip=True)), + W.TextField(name='nombre', label=_(u'Nombre'), + help_text=_(u'Requerido.'), + validator=V.UnicodeString(min=10, max=255, strip=True)), + W.TextField(name='email', label=_(u'E-Mail'), + #help_text=_(u'Dirección de e-mail.'), + validator=V.All( + V.Email(not_empty=False, resolve_domain=True), + V.UnicodeString(not_empty=False, max=255, strip=True))), + W.TextField(name='telefono', label=_(u'Teléfono'), + #help_text=_(u'Texto libre para teléfono, se puede incluir ' + # 'horarios o varias entradas.'), + validator=V.UnicodeString(not_empty=False, min=7, max=255, + strip=True)), + W.TextArea(name='observaciones', label=_(u'Observaciones'), + #help_text=_(u'Observaciones.'), + validator=V.UnicodeString(not_empty=False, strip=True)), + W.CheckBox(name='nombrado', label=_(u'Nombrado'), default=1, + #help_text=_(u'Indica si tiene cargo.'), + validator=V.Bool(if_empty=1)), + W.CheckBox(name='activo', label=_(u'Activo'), default=1, + #help_text=_(u'Si no está activo no puede ingresar al sistema.'), + validator=V.Bool(if_empty=1)), + ] + javascript = [W.JSSource("MochiKit.DOM.focusOnLoad('form_usuario');")] + +form = DocenteForm() #}}} #{{{ Controlador diff --git a/sercom/subcontrollers/enunciado/__init__.py b/sercom/subcontrollers/enunciado/__init__.py index 2743f44..31a4c30 100644 --- a/sercom/subcontrollers/enunciado/__init__.py +++ b/sercom/subcontrollers/enunciado/__init__.py @@ -2,8 +2,9 @@ #{{{ Imports from turbogears import controllers, expose, redirect -from turbogears import validate, validators, flash, error_handler -from turbogears.widgets import * +from turbogears import validate, flash, error_handler +from turbogears import validators as V +from turbogears import widgets as W from turbogears import identity from turbogears import paginate from docutils.core import publish_parts @@ -52,16 +53,19 @@ def validate_new(data): def get_options(): return [(0, _(u'--'))] + [(fk.id, fk.shortrepr()) for fk in fkcls.select()] -form = TableForm(fields=[ - TextField(name='nombre', label=_(u'Nombre'), - help_text=_(u'Requerido y único.'), - validator=validators.UnicodeString(min=5, max=60, strip=True)), - SingleSelectField(name=fkname+'ID', label=_(fkname.capitalize()), - options=get_options, validator=validators.Int(not_empty=False)), - TextField(name='descripcion', label=_(u'Descripción'), - validator=validators.UnicodeString(not_empty=False, max=255, strip=True)), -]) -form.javascript.append(JSSource("MochiKit.DOM.focusOnLoad('form_nombre');")) +class EnunciadoForm(W.TableForm): + fields = [ + W.TextField(name='nombre', label=_(u'Nombre'), + help_text=_(u'Requerido y único.'), + validator=V.UnicodeString(min=5, max=60, strip=True)), + W.SingleSelectField(name=fkname+'ID', label=_(fkname.capitalize()), + options=get_options, validator=V.Int(not_empty=False)), + W.TextField(name='descripcion', label=_(u'Descripción'), + validator=V.UnicodeString(not_empty=False, max=255, strip=True)), + ] + javascript = [W.JSSource("MochiKit.DOM.focusOnLoad('form_nombre');")] + +form = EnunciadoForm() #}}} #{{{ Controlador @@ -79,7 +83,7 @@ class EnunciadoController(controllers.Controller, identity.SecureResource): raise redirect('list') @expose(template='kid:%s.templates.list' % __name__) - @validate(validators=dict(autor=validators.Int)) + @validate(validators=dict(autor=V.Int)) @paginate('records') def list(self, autor=None): """List records in model""" -- 2.43.0