class PackedJSNode(Node): def __init__(self, nodelist): self.nodelist = nodelist def render(self, context): from jspacker import JavaScriptPacker p = JavaScriptPacker() script = self.nodelist.render(context).strip() #ugly test on empty script, no reason to pack such small scripts if len(script) < 20: return script packed = p.pack(script, compaction=False, encoding=62, fastDecode=True) return packed def packjs(parser, token): """ Based on jspacker by Dean Edwards, Python port by Florian Schulze: http://www.crowproductions.de/repos/main/public/packer/jspacker.py Packs javascript Example usage:: {% packjs %} var a = 1; var b = 2; var c = 3; alert(a+b); {% endpackjs %} This example would return this script:: eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[c]=k[c]||c;k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp("\\b"+e(c)+"\\b","g"),k[c]);return p}('0 5 = 1;\n 0 4 = 2;\n 0 7 = 3;\n 6(5+4);\n',8,8,'var||||b|a|alert|c'.split('|'),0,{})) """ nodelist = parser.parse(('endpackjs',)) parser.delete_first_token() return PackedJSNode(nodelist) packjs = register.tag(packjs)