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" <nfre...@gmail.com> 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 <mdipie...@cs.depaul.edu> wrote: > > > I like it. I would call Function JFunction instead. > > > Massion > > > On Feb 13, 11:01 am, "mr.freeze" <nfre...@gmail.com> 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 <mdipie...@cs.depaul.edu> wrote: > > > > > This is not an easy one. > > > > > On Feb 12, 10:50 am, "mr.freeze" <nfre...@gmail.com> 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 <mdipie...@cs.depaul.edu> 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" <nfre...@gmail.com> 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 <mdipie...@cs.depaul.edu> 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 <mdipie...@cs.depaul.edu> 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" <nfre...@gmail.com> 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 includepagescripts > > > > > > > > > > pagescripts = '' > > > > > > > > > > for file in self.response.pagescripts: > > > > > > > > > > pagescripts += SCRIPT(_src=file).xml() > > > > > > > > > > return pagescripts > > > > > > > > > > def includestylesheets > > > > > > > > > > stylesheets = '' > > > > > > > > > > for file in self.response.stylesheets: > > > > > > > > > > stylesheets += LINK(_href=file, > > > > > > > > > > _rel="stylesheet", > > > > > > > > > > _type="text/css", > > > > > > > > > > _charset="utf-8").xml() > > > > > > > > > > return stylesheets > > > > > > > > > > > Now if I could just mimicjQuery'ssweet chaining in Python... > > > > > > > > > > > On Feb 11, 3:55 pm, "mr.freeze" <nfre...@gmail.com> wrote: > > > > > > > > > > > > Sure. I think it would look something like this (in > > > > > > > > > > > gluon/ > > > > > > > > > > > clienttools.py): > > > > > > > > > > > > class PageManager(object): > > > > > > > > > > > def __init__(self, response): > > > > > > > > > > > if not response.scripts: response.scripts = [] > > > > > > > > > > > def addscript(self,script): > > > > > > > > > > > response.scripts.append(script) > > > > > > > > > > > > Then in web2py_ajax.html as the last thing in the > > > > > > > > > > > $(document).ready > > > > > > > > > > > function: > > > > > > > > > > > > {{if response.scripts:}} > > > > > > > > > > > {{for s in response.scripts:}} > > > > > > > > > > > {{=s}} > > > > > > > > > > > {{pass}} > > > > > > > > > > > {{pass}} > > > > > > > > > > > > Then in your db.py model: > > > > > > > > > > > > from gluon.clienttools import PageManager > > ... > > 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 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 -~----------~----~----~----~------~----~------~--~---