From 093cc6f1322e48e79088a864addd7fff4c34c252 Mon Sep 17 00:00:00 2001 From: Ricardo Markiewicz Date: Fri, 9 Mar 2007 03:05:16 +0000 Subject: [PATCH] Nuevo Widget con 2 listas para pasar datos de una a otra. Esta lista tiene el objetivo de pasar cosas de FROM a TO dando un layout horizontal que queda mas piolas ;). Crea 2 listas ${name}_from y {$name}_to que son pasadas al controller (previamente hay que seleccionar desde JS todos los items de las listas que se deseen leer, puede ser una sola o ambas). Como propiedades utiles tiene : * title_from : El titulo que va arriba de la lista FROM (la de la derecha) * title_to : El titulo que va arriba de la lista FROM (la de la izquierda) * El resto igual que MultiSelectField No puse el texto de los botones configurable porque se rompe muy facil el layour :S, pero creo que con los titulitos se da a entender. Desde JS se accede con form_${name}_from y form_${name}_to a FROM y TO respectivamente. Para inicializar los valores de FROM se usa directamente el atributo options de MultipleSelectField y a TO se lo debe inicializar desde JS. --- sercom/subcontrollers/curso/__init__.py | 46 ++++++------ .../subcontrollers/curso/templates/edit.kid | 26 +------ sercom/subcontrollers/curso/templates/new.kid | 24 ------ sercom/widgets.py | 74 +++++++++++++++++++ 4 files changed, 100 insertions(+), 70 deletions(-) diff --git a/sercom/subcontrollers/curso/__init__.py b/sercom/subcontrollers/curso/__init__.py index 9d1c1f3..7b5fccd 100644 --- a/sercom/subcontrollers/curso/__init__.py +++ b/sercom/subcontrollers/curso/__init__.py @@ -68,7 +68,7 @@ ajax = u""" d.addCallbacks(procesar, err); } - function onsubmit() + function doSubmit() { /* TODO : Validar datos y evitar el submit si no esta completo */ @@ -78,7 +78,7 @@ ajax = u""" l.options[i].selected = true; } /* Selecciono todos los miembros si no, no llegan al controllere*/ - l = MochiKit.DOM.getElement('form_docentes_curso'); + l = MochiKit.DOM.getElement('form_docentes_to'); for (i=0; i - MochiKit.DOM.appendChildNodes("form_docentes_curso", OPTION({"value":${d['id']}}, '${d['label']}')) + + MochiKit.DOM.appendChildNodes("form_docentes_to", OPTION({"value":${d['id']}}, '${d['label']}')) @@ -18,28 +18,6 @@ } MochiKit.DOM.addLoadEvent(init_data) - - function makeOption(option) { - return OPTION({"value": option.value}, option.text); - } - - function moveOption( fromSelect, toSelect) { - // add 'selected' nodes toSelect - appendChildNodes(toSelect, - map( makeOption,ifilter(itemgetter('selected'), $(fromSelect).options))); - // remove the 'selected' fromSelect - // replaceChildNodes(fromSelect, - // list(ifilterfalse(itemgetter('selected'), $(fromSelect).options))); - } - - function mover( src, dest ) { - moveOption(src, dest) - } - - function remover (src, dest) { - replaceChildNodes(src,list(ifilterfalse(itemgetter('selected'), $(src).options))) - } - diff --git a/sercom/subcontrollers/curso/templates/new.kid b/sercom/subcontrollers/curso/templates/new.kid index e50ec76..1724584 100644 --- a/sercom/subcontrollers/curso/templates/new.kid +++ b/sercom/subcontrollers/curso/templates/new.kid @@ -2,30 +2,6 @@ - - new diff --git a/sercom/widgets.py b/sercom/widgets.py index 612d950..b9a14c1 100644 --- a/sercom/widgets.py +++ b/sercom/widgets.py @@ -108,3 +108,77 @@ class AjaxMultiSelect(widgets.MultipleSelectField): self.params.append('on_add') self.on_add = "alert('Not defined action');" widgets.MultipleSelectField.__init__(self, **kw) + +DosListasAjax = ''' + function makeOption(option) { + return OPTION({"value": option.value}, option.text); + } + + function moveOption( fromSelect, toSelect) { + // add 'selected' nodes toSelect + appendChildNodes(toSelect, + map( makeOption,ifilter(itemgetter('selected'), $(fromSelect).options))); + // remove the 'selected' fromSelect + replaceChildNodes(fromSelect, + list(ifilterfalse(itemgetter('selected'), $(fromSelect).options)) + ); + } + +''' + +class AjaxDosListasSelect(widgets.MultipleSelectField): + template = ''' +
+ + + + + + + + + + + +
${title_from} ${title_to}
+ + + +
+
+ +
+ +
+
+ ''' + javascript = [widgets.JSSource(DosListasAjax)] + title_from = "" + title_to = "" + + def __init__(self, **kw): + self.params.append('title_from') + self.params.append('title_to') + self.title_from = " " + self.title_to = " " + widgets.MultipleSelectField.__init__(self, **kw) + -- 2.43.0