Thanks for these additions Kee. This fixes two of my biggest frustrations with Embperl. Good job and keep on keeping on.
-Allen On Fri, Oct 17, 2008 at 08:47:28PM -0400, Kee Hinckley wrote: > A year or so ago I burst back onto the list with some ideas about > boosting Embperl support, and then I promptly disappeared (my > apologies, work and personal stuff took over my life). Those comments > still stand, but I need to approach things a bit more slowly and > realistically. > > >I think you should look at Catalyst, perhaps the most active Perl Web > >development framework. It's a full-featured MVC framework that meets > >all of > >the above requirements. > > I actually have a library that integrates Embperl into Catalyst so > that you ca use it instead of the default system (Template Toolkit). > Embperl is faster and uses less memory than TT. I have the module > working in a production site, and while it needs documentation and > code cleanup, I'd be happy to share it with folks and even set up a > source repository if people are interested in assisting with the > development. > > I've also added some Embperl syntax additions (see below). > > I think the biggest barrier to expanding Embperl's audience (and > development) is its heavy reliance on some pretty obfuscated C code. > On the other hand, that's one of the reasons it's faster and less > memory hungry than the alternatives. A cleaner rewrite would be nice, > but I think that even just making it more extensible in Perl would be > a big bonus. In particular, the ability to write syntax extensions in > Perl would be a big win and would make it easier to create libraries > to help people move from other systems. The other piece that would > greatly help adoption would be integrating an AJAX system into > Embperl. I'm a big fan of MooTools (it has a *very* well designed > object model, it's clean, and it's small). Anything we could do to > make developing AJAX-based systems in Embperl would be a big win. > > Aside from the speed/memory issues, the place Embperl excels is > security. Embperl understands the syntax of the HTML. Every other > templating language out there relies on the programmer to properly > escape their code to prevent XSS vulnerabilities. Embperl *defaults* > to properly escaping output--that's a huge win. Finally, Embperl's > ability to auto-fill forms *greatly* reduces the amount of code in > many applications. Embperl's MVC support is definitely limited, and > that's why I moved to Catalyst as an MVC platform. At some point a > version of Embperl that blocks out the code no longer needed in that > environment might be a good idea. > > Syntax Additions > > [% %] > Unescaped output. Much easier than [+ do { local($escmode) = 4; ... > } +], particularly useful for generating Javascript. > > [$ set VARIABLE EXPRESSION $] > Sets a module-local "variable" (actually a method call) to the > passed-in value[s]. E.g. > > [$ set TITLE "My Web Page" $] > > The magic comes in retrieval. The simple case works as > expected. > > <title>[+ $epreq->TITLE() +]</title> > > Will return the value appropriate for the current context. > Which means the value set in the current file, or (if this file > was a template (object_base), the file that is the actual > object. In this sense it's just a slightly easier way to do > what is already possible. More interesting, however is when > the method is passed a non-zero value. > > In our template, we define the following. > > [$ set CSS qw(template helper $] > > In our html file that it executes, we define this: > > [$ set CSS qw(index helper $] > > Back in the template, we have the following code. Note that > this can occur before any of the other files are included. > > <style type="text/css"> > <!-- > [$ foreach $file ($epreq->CSS(1)) $] > @import url("/styles/[+ $file +].css"); > [$ endforeach $] > --> > </style> > > The call with the "all" argument set to true will return all of > the values of of all of the "CSS()" methods (with non-unique > elements removed). It will include all methods of all files > that list this file as an "ISA". > [- Execute({ isa => 'filename.epl' }) -] or the case of > "Execute('*')" where the ISA relationship is implicit. > > So the above code will generate: > > <style type="text/css"> > <!-- > @import url("/styles/template.css"); > @import url("/styles/helper.css"); > @import url("/styles/index.css"); > --> > </style> > > This allows you to create templates which will include CSS, > Javascript or > other elements that are required by individual Embperl files that > aren't > even known about at the time the template is created. > > There are a few other additions I've made as well, but the [$ set $] > command is > probably the most useful. > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > -- Happy random title from the Fox News Channel reading list: 'The Lies of George W. Bush: Mastering the Politics of Deception', by David Corn (http://www.foxnews.com/story/0,2933,77956,00.html) ******************************************************************* keep it between you and me: get my pgp key with gpg --keyserver wwwkeys.nl.pgp.net --recv-keys DEDDEE19 key fingerprint: 68B5 83BA 42CE 3305 F274 3D9E 71BF 4E42 DEDD EE19 ******************************************************************* --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]