I just sent you another patch that allows you to filter by tag also:

text = form.element("input",_type="text")
both = form.elements("input","select",_class="test")

It should be backwards compatible.

On Oct 11, 4:30 pm, mdipierro <mdipie...@cs.depaul.edu> wrote:
> The patch is in trunk. I changed three things:
> 1) bothelementsand element include the current element in the
> search, not just components of the current element.
> 2)elementsreturns an empty list if not matching. element still
> returns None because it is not intended to return a list anyaway.
> 3) following your original suggestion I introduced first_only=False
> argument so that now element callselements.
>
> Massimo
>
> On Oct 11, 4:00 pm, "mr.freeze" <nat...@freezable.com> wrote:
>
> > I sent you a patch. Same as 'element' but returns a list or None.
>
> > On Oct 11, 3:01 pm, mdipierro <mdipie...@cs.depaul.edu> wrote:
>
> > > I would take a patch that defineselements(notice the -s) that
> > > returns all matchingelements.
>
> > > On Oct 11, 2:36 pm, "mr.freeze" <nat...@freezable.com> wrote:
>
> > > > Nice! This would be doubly handy if it returned all matching
> > > > components (jQuery style).  What about adding a first=True arg to make
> > > > return all matches optional ? (or some other more graceful solution
> > > > that I'm sure you've already thought of before finishing this
> > > > sentence :)
>
> > > >     def element(self, first=True, **kargs):
> > > >         components = copy.copy(self.components)
> > > >         matches = []
> > > >         for c in components:
> > > >             try:
> > > >                 components += copy.copy(c.components)
> > > >                 check = True
> > > >                 for (key, value) in kargs.items():
> > > >                     if c[key] != value:
> > > >                         check = False
> > > >                 if check:
> > > >                     if first:
> > > >                         return c
> > > >                     else:
> > > >                         matches.append(c)
> > > >             except:
> > > >                 pass
>
> > > >         if len(matches): return matches
> > > >         return None
>
> > > > On Oct 11, 2:04 pm, mdipierro <mdipie...@cs.depaul.edu> wrote:
>
> > > > > It is there already
>
> > > > > form.element(_type='submit')['_style']="color:white; background-
> > > > > color:blue; font-weight:bold"
>
> > > > > It only finds the first matching element.
>
> > > > > On Oct 11, 1:16 pm, "mr.freeze" <nat...@freezable.com> wrote:
>
> > > > > > >Good point - and addresses the original post (as it could have 
> > > > > > >been more
> > > > > > >simply done this way);
>
> > > > > > Not technically since this would affect everything inside the form 
> > > > > > and
> > > > > > not just the submit button.  What about a member function 'find' 
> > > > > > added
> > > > > > to XmlComponent or DIV (which I think most helpers inherit from) 
> > > > > > that
> > > > > > allows you to traverse the inner components and return the matching
> > > > > > components for given criteria.  The pseudo-code might look like 
> > > > > > this:
>
> > > > > > submit = form.components.find(XML.attribute("type")=="submit")[0]
> > > > > > submit['_style'] = "color:white; background-color:blue; font-
> > > > > > weight:bold"
>
> > > > > > On Oct 11, 12:29 pm, Yarko Tymciurak <yark...@gmail.com> wrote:
>
> > > > > > > On Sun, Oct 11, 2009 at 11:04 AM, mdipierro 
> > > > > > > <mdipie...@cs.depaul.edu> wrote:
>
> > > > > > > > I do not think you cannot use decorators this way.
>
> > > > > > > double negatives.... not sure what you intended to say (but 
> > > > > > > logical analysis
> > > > > > > says "... think you can use decorators this way...");
>
> > > > > > > > But I remind you crud.create is a function that returns  
> > > > > > > > SQLFORM which
> > > > > > > > is a FORM which is a heper as any other helper. Therefore you 
> > > > > > > > can do:
>
> > > > > > > > form = crud.create(...)
> > > > > > > > form['_style']="color:white; background-color:blue; 
> > > > > > > > font-weight:bold"
>
> > > > > > > Good point - and addresses the original post (as it could have 
> > > > > > > been more
> > > > > > > simply done this way);
>
> > > > > > > Regardless, then
>
> > > > > > > @style( color='white', background-color='blue', 
> > > > > > > font-weight='bold')
> > > > > > > form = crud.create(...)
>
> > > > > > > would still be a readable thing (and just trivial to implement);
>
> > > > > > > Alternatively, form.style( ...same kinds of parameters....)   
> > > > > > > could be used;
>
> > > > > > > Anyway, this is about readability, and ease of infding this stuff 
> > > > > > > (as this
> > > > > > > post shows);
>
> > > > > > > If there were a member function to FORM to set style, people who 
> > > > > > > not have to
> > > > > > > stumble upon it.
>
> > > > > > > Thoughts?
>
> > > > > > > > On Oct 11, 10:47 am, Web2py-SuperFan <mwkan...@gmail.com> wrote:
> > > > > > > > > I really like that suggestion, would be much cleaner code and 
> > > > > > > > > easier
> > > > > > > > > to configure different styles that have meaning by variable 
> > > > > > > > > name
>
> > > > > > > > > On Oct 10, 9:47 pm, Yarko Tymciurak <yark...@gmail.com> wrote:
>
> > > > > > > > > > I wonder if we could encapsulate, simplify this with a 
> > > > > > > > > > decorator,
> > > > > > > > something
> > > > > > > > > > like:
>
> > > > > > > > > > @button( color='white', background='blue', font='bold' )
> > > > > > > > > > form = crud.create(...)
>
> > > > > > > > > > Something like this could be useful for something like
>
> > > > > > > > > > @button( my_admin_style )
> > > > > > > > > > form = crud.create(....)
>
> > > > > > > > > > @button( my_warning_style )
> > > > > > > > > > form = ...
>
> > > > > > > > > > .... just thinking out loud....
>
> > > > > > > > > > On Sat, Oct 10, 2009 at 11:10 PM, Web2py-SuperFan 
> > > > > > > > > > <mwkan...@gmail.com
> > > > > > > > >wrote:
>
> > > > > > > > > > > took me a while to dig up the answer/solution, maybe can 
> > > > > > > > > > > save someone
> > > > > > > > > > > else some time
>
> > > > > > > > > > >    form = crud.create(...)
> > > > > > > > > > >    form=DIV(
> > > > > > > > > > >      form,
> > > > > > > > > > >      SCRIPT('''$(document).ready(function() {
> > > > > > > > > > >      $("input[type=submit]").val("Share");
> > > > > > > > > > >      });'''),
> > > > > > > > > > >      SCRIPT('''$(document).ready(function() {
> > > > > > > > > > >      $("input[type=submit]").css({
> > > > > > > > > > >      color:'white',
> > > > > > > > > > >      background:'blue',
> > > > > > > > > > >      font: 'bold'});
> > > > > > > > > > >      });'''),
> > > > > > > > > > >       )
>
> > > > > > > > > > >     return dict(form=form)- Hide quoted text -
>
> > > > > > > > > > - Show quoted text -
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To post to this group, send email to web2py@googlegroups.com
To unsubscribe from this group, send email to 
web2py+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to