Massimo, do you think jQuery UI should be included with web2py?

BTW, with the PageManager class this works in a controller :)
pagemanager.addscript(JQuery("#footer").bind("click",JFunction(JQuery
("this").hide("slow")() + JQuery("this").show("slow")() ,'e'))())

On Feb 13, 11:26 am, "mr.freeze" <[email protected]> wrote:
> Okay here it is:
>
> >>>print 
> >>>JQuery("p").bind("click",JFunction(JQuery("this").slideUp()(),'e','o'))()
>
> $('p').bind("click", function(e, o){$(this).slideUp();});>>>print 
> JQuery("this").slideUp()()
>
> $(this).slideUp();
>
> class JQuery:
>     def __init__(self,name,attr=None,*args):
>         self.name=name
>         self.attr=attr
>         self.args=args
>     def __str__(self):
>         import gluon.contrib.simplejson as json
>         def encode(obj):
>             if isinstance(obj,JQuery): return str(obj)
>             if isinstance(obj,JFunction): return str(obj)
>             return json.dumps(obj)
>         if not self.attr:
>             return ("$('%s')" % self.name).replace
> ("'this'","this")
>         args=', '.join([encode(a) for a in self.args])
>         return '%s.%s(%s)' % (self.name, self.attr, args)
>     def xml(self):
>         raise AttributeError
>     def __getattr__(self,attr):
>         def f(*args):
>             return JQuery(self,attr,*args)
>         return f
>     def __call__(self,*args):
>         if not args:
>             jq = str(JQuery(self))
>             jq = jq[3:]
>             jq = jq[:-2]
>             return jq + ";"
>
> class JFunction:
>     def __init__(self,body,*args):
>         self.body = body
>         self.args = args
>     def __str__(self):
>         args=', '.join([str(a) for a in self.args])
>         body=self.body
>         return "function(" + args + "){" + body + "}"
>
> On Feb 13, 11:15 am, "mr.freeze" <[email protected]> wrote:
>
> > Sorry, just removed the previous post because of an error.  It doesn't
> > account for jQuery function calls like slideUp().  I'll repost once
> > fixed and rename Function to JFunction.
>
> > On Feb 13, 11:13 am, mdipierro <[email protected]> wrote:
>
> > > I like it. I would call Function JFunction instead.
>
> > > Massion
>
> > > On Feb 13, 11:01 am, "mr.freeze" <[email protected]> wrote:
>
> > > > What about this? '()' at the end of a JQuery statement terminates the
> > > > line (;). Also added a simple Function wrapper class. Treats 'this' as
> > > > a keyword.
>
> > > > Mind you, there is a good chance that these helpers are more difficult
> > > > that just writing jQuery code :)
>
> > > > So this:
> > > > print JQuery('#test').click(Function(JQuery("this").hide("slow")
> > > > (),'event'))()
> > > > print JQuery("p").bind("click",Function(JQuery("span").text("Click
> > > > happened!")(),'e'))()
>
> > > > Returns this:
> > > > $('#test').click(function(event){$(this).hide("slow");});
> > > > $('p').bind("click", function(e){$('span').text("Click happened!");});
>
> > > > class JQuery:
> > > >     def __init__(self,name,attr=None,*args):
> > > >         self.name=name
> > > >         self.attr=attr
> > > >         self.args=args
> > > >     def __str__(self):
> > > >         import gluon.contrib.simplejson as json
> > > >         def encode(obj):
> > > >             if isinstance(obj,JQuery): return str(obj)
> > > >             if isinstance(obj,Function): return str(obj)
> > > >             return json.dumps(obj)
> > > >         if not self.attr:
> > > >             return ("$('%s')" % self.name).replace
> > > > ("'this'","this")
> > > >         args=', '.join([encode(a) for a in self.args])
> > > >         return '%s.%s(%s)' % (self.name, self.attr, args)
> > > >     def xml(self):
> > > >         raise AttributeError
> > > >     def __getattr__(self,attr):
> > > >         def f(*args):
> > > >             return JQuery(self,attr,*args)
> > > >         return f
> > > >     def __call__(self,*args):
> > > >         if not args:
> > > >             jq = str(JQuery(self))
> > > >             jq = jq[3:]
> > > >             jq = jq[:-2]
> > > >             return jq + ";"
>
> > > > class Function:
> > > >     def __init__(self,body,*args):
> > > >         self.body = body
> > > >         self.args = args
> > > >     def __str__(self):
> > > >         args=', '.join([str(a) for a in self.args])
> > > >         body=self.body
> > > >         return "function(" + args + "){" + body + "}"
>
> > > > On Feb 12, 11:18 am, mdipierro <[email protected]> wrote:
>
> > > > > This is not an easy one.
>
> > > > > On Feb 12, 10:50 am, "mr.freeze" <[email protected]> wrote:
>
> > > > > > Maybe a static methodJQuery.function(body, *args) that just wraps a
> > > > > >JQueryobject with function(args){body}? There's probably a better
> > > > > > way.
> > > > > > You would also need to add logic to handle the 'this' keyword and 
> > > > > > line
> > > > > > termination I think.
>
> > > > > > On Feb 12, 9:28 am, mdipierro <[email protected]> wrote:
>
> > > > > > > Not quite. This works:
>
> > > > > > > printJQuery("a").filter(".clickclass").click('xxx').end().filter
> > > > > > > (".hideclass").click('yyy').end();
>
> > > > > > > but here is no mechanism to pass a function yet....
>
> > > > > > > Massimo
>
> > > > > > > On Feb 12, 9:14 am, "mr.freeze" <[email protected]> wrote:
>
> > > > > > > > OMG, you just portedJQueryto Python in about 20 lines of code.
> > > > > > > > Speechless...
>
> > > > > > > > Would this work for more complicatedjQuerylike this?:
> > > > > > > > $("a")
> > > > > > > >    .filter(".clickclass")
> > > > > > > >      .click(function(){
> > > > > > > >        alert("web2py rocks!");
> > > > > > > >      })
> > > > > > > >    .end()
> > > > > > > >    .filter(".hideclass")
> > > > > > > >      .click(function(){
> > > > > > > >        $(this).hide();
> > > > > > > >        return false;
> > > > > > > >      })
> > > > > > > >    .end();
>
> > > > > > > > On Feb 12, 12:33 am, mdipierro <[email protected]> wrote:
>
> > > > > > > > > from gluon.html import *
>
> > > > > > > > > classJQuery:
> > > > > > > > >     def __init__(self,name,attr=None,*args):
> > > > > > > > >         self.name=name
> > > > > > > > >         self.attr=attr
> > > > > > > > >         self.args=args
> > > > > > > > >     def __str__(self):
> > > > > > > > >         import gluon.contrib.simplejson as json
> > > > > > > > >         def encode(obj):
> > > > > > > > >             if isinstance(obj,JQuery): return str(obj)
> > > > > > > > >             return json.dumps(obj)
> > > > > > > > >         if not self.attr:
> > > > > > > > >             return "$('%s')" % self.name
> > > > > > > > >         args=', '.join([encode(a) for a in self.args])
> > > > > > > > >         return '%s.%s(%s)' % (self.name, self.attr, args)
> > > > > > > > >     def xml(self):
> > > > > > > > >         raise AttributeError
> > > > > > > > >     def __getattr__(self,attr):
> > > > > > > > >         def f(*args):
> > > > > > > > >             returnJQuery(self,attr,*args)
> > > > > > > > >         return f
>
> > > > > > > > > ### examples
>
> > > > > > > > > >>> printJQuery('test').set(1,'',{},JQuery('#12').val()).get(45)
>
> > > > > > > > > $('test').set(1, "", {}, $('#12').val()).get(45)
>
> > > > > > > > > >>> print 
> > > > > > > > > >>> DIV(H1('clickme',_onclick=JQuery('#1').slideToggle()),P('bla
> > > > > > > > > >>>  '*10,_id=1))
>
> > > > > > > > > <div><h1 onclick="$('#1').slideToggle()">clickme</h1><p 
> > > > > > > > > id="1">bla bla
> > > > > > > > > bla bla bla bla bla bla bla bla </p></div>
>
> > > > > > > > > On Feb 11, 11:56 pm, mdipierro <[email protected]> 
> > > > > > > > > wrote:
>
> > > > > > > > > > Try something like this:
>
> > > > > > > > > > classJQuery:
> > > > > > > > > >    def __init__(self,name,attr=None,*args):
> > > > > > > > > >        self.name=name
> > > > > > > > > >        self.attr=attr
> > > > > > > > > >        self.args=args
> > > > > > > > > >    def __str__(self):
> > > > > > > > > >        if not self.attr:
> > > > > > > > > >            return "$('%s')" % self.name
> > > > > > > > > >        import gluon.contrib.simplejson as json
> > > > > > > > > >        args=', '.join([json.dumps(a) for a in self.args])
> > > > > > > > > >        return "%s.%s(%s)" % (self.name, self.attr, args)
> > > > > > > > > >    def __getattr__(self,attr):
> > > > > > > > > >        def f(*args):
> > > > > > > > > >            returnJQuery(self,attr,*args)
> > > > > > > > > >        return f
>
> > > > > > > > > > printJQuery('test').set(1,"",{}).get(45)
>
> > > > > > > > > > On Feb 11, 11:37 pm, "mr.freeze" <[email protected]> wrote:
>
> > > > > > > > > > > All together now... (gluon/clientutils.py)...
>
> > > > > > > > > > > class PageManager(object):
> > > > > > > > > > >     def __init__(self, response):
> > > > > > > > > > >         self.response = response
> > > > > > > > > > >         self.response.scripts=[]
> > > > > > > > > > >         self.response.pagescripts=[]
> > > > > > > > > > >         self.response.stylesheets=[]
> > > > > > > > > > >     def addscript(self,script):
> > > > > > > > > > >         if not script in self.response.scripts:
> > > > > > > > > > >             self.response.scripts.append(script)
> > > > > > > > > > >     def addpagescript(self,pagescript):
> > > > > > > > > > >         if not pagescript in response.pagescripts:
> > > > > > > > > > >             response.pagescripts.append(pagescript)
> > > > > > > > > > >     def addstylesheet(self,stylesheet):
> > > > > > > > > > >         if not stylesheet in response.stylesheets:
> > > > > > > > > > >             response.stylesheets.append(stylesheet)
> > > > > > > > > > >     """
> > > > > > > > > > >     The three methods below should not be used because
> > > > > > > > > > >     they require an instance variable in
> > > > > > > > > > >     the view making it non-generic.  Here for testing.
> > > > > > > > > > >     """
> > > > > > > > > > >     def includescripts
> > > > > > > > > > >         scripts = ''
> > > > > > > > > > >         for script in self.response.scripts:
> > > > > > > > > > >             scripts += script
> > > > > > > > > > >         return scripts
> > > > > > > > > > >     def
>
> ...
>
> read more »
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py Web Framework" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to