From e212f84f69dffd535bdbb532965e9c5e3b27c6f6 Mon Sep 17 00:00:00 2001 From: Jim Cowart Date: Fri, 28 Oct 2011 14:56:05 -0400 Subject: [PATCH] Updating the main API to support rendering a completed template from a template engine during the pre-Render call --- examples/shorthand/main.js | 7 +++++-- examples/trafficcop/index.html | 2 +- examples/trafficcop/main.js | 7 +++++-- lib/infuser.js | 5 +++-- lib/infuser.min.gz.js | Bin 1097 -> 1102 bytes lib/infuser.min.js | 2 +- src/Api.js | 5 +++-- 7 files changed, 18 insertions(+), 10 deletions(-) diff --git a/examples/shorthand/main.js b/examples/shorthand/main.js index d7e3926..750b494 100644 --- a/examples/shorthand/main.js +++ b/examples/shorthand/main.js @@ -31,8 +31,11 @@ $(function(){ "Example", $("#targetFancy"), { - preRender: function(target) { $(target).children().remove().end().fadeOut().hide(); }, - render: function(target, template) { $(target).append($.tmpl(template, model)).slideDown('slow'); }, + preRender: function(target, template, setTemplate) { + $(target).children().remove().end().fadeOut().hide(); + setTemplate($.tmpl(template, model)); + }, + render: function(target, template) { $(target).append(template).slideDown('slow'); }, postRender: toggleFancy } ); diff --git a/examples/trafficcop/index.html b/examples/trafficcop/index.html index 6f4b18a..08b3644 100644 --- a/examples/trafficcop/index.html +++ b/examples/trafficcop/index.html @@ -2,7 +2,7 @@ "http://www.w3.org/TR/html4/loose.dtd"> - jQuery-tmpl Example + Traffic Cop Example diff --git a/examples/trafficcop/main.js b/examples/trafficcop/main.js index e7f275e..86ec68e 100644 --- a/examples/trafficcop/main.js +++ b/examples/trafficcop/main.js @@ -4,8 +4,11 @@ var toggled = false, "Example", $("#target"), { - render: function(target, template) { - $(target).append($.tmpl(template, menus[modelNum])).slideDown('slow'); + preRender: function(target, template, setTemplate) { + setTemplate($.tmpl(template, menus[modelNum])); + }, + render: function(target, template) { + $(target).append(template).slideDown('slow'); } } ); diff --git a/lib/infuser.js b/lib/infuser.js index aa20fe6..dda20fe 100644 --- a/lib/infuser.js +++ b/lib/infuser.js @@ -190,8 +190,9 @@ var infuser = { infuse: function(templateId, targetDomElement, renderOptions) { var options = $.extend({}, defaultRenderOptions, renderOptions); this.get(templateId, function(template) { - options.preRender(targetDomElement); - options.render(targetDomElement, template); + var _template = template; + options.preRender(targetDomElement, _template, function(renderedTemplate) { _template = renderedTemplate; }); + options.render(targetDomElement, _template); options.postRender(targetDomElement); }); } diff --git a/lib/infuser.min.gz.js b/lib/infuser.min.gz.js index 90b63c8d4dcd52dba10ccb374110205990277de2..afef6970acc4b7a9331911395a9821bc0ab32631 100644 GIT binary patch literal 1102 zcmV-U1hM-ciwFQ%`KnF;1C3T$Pvkfd{wpCu5UV|gc}*~gnL)EivsyIWXde(-Id*j? z5R#VTa46)zZ#fq^y3xEPb)R3^TNkM`ah7_5hNOHJ+L64ck+PzSms<_LAyuG#NpZZZw4mNJRNL~+h~={s@H!-{Ue><}lV22<$Nndx8vh29Kgr*?T+RTW)- z#C5H5|L*?N$ePlsOcqa&8ip}lC15|ly!HRUlxu$qJLmmpJ1+>oe@%btOr&DpxgcE64^W$=L_4m!M%hlEG?_bsNdH;L;qdGeg=Z?&ZL^)|@ zoDiHO6ABb_%H`^Eb-P3fba(F3h!4kr%D#-7Zty*~({ZUF1M0w^ixaeiV*|tXV&P*< zlRofr(7PL9qEY{v2~3#G(sjJ)YjlIj#;*&pm~ocH8aY85@Qi({6CBy_{e2I|buXm9 zi??u3+yyRnNBRk7Sx5P;F0J4wOZXcOCwB?<4h><9e1HH5=)>qk6>TW zfNQru=!!n_GEQ%Fw$ZjW7K~#J(#*OVa#3&n!u`)(2&RM)tB>D8CkPyNFM@dO9UvO? zHt)jw#)2AxzJdgB5hj8)5a&&wzKbLYg?vQR6Rf4((|VgmteS$jIP0#hE(mE6f8vHs zT@c!<)t!PqnuzDaA3p+{@L0Da4;f~M?TQz2KejtL?WfxJ--|*pYOVKyx_je znmaK@1S{BF`|C6}x~QvV?=cSQ&f8Wa@2**FF;IN7O zEtUSkDa8r)7462_ciV95@1IvIw;!+vHpi4Y#CB3f{2B<5tB{Yo#+v2w0N*H~XF(OC zTG|Na>$X2tSto1vEZmtdk-O7X_3a;I{k6_o{z=xu`0&ur)*>8X*$m0h_f8apR|)lm zwOEGd$=;f(8-K8x&70+-HgTCcMf#X#FR4>U;AB!3TH{%4RDEwyw<#7X1n~WJCEXRm z_epcSX9(Wl@o-lalAHGc8bh)9F%$u?{&j1SU?hWl!~|fvXWPGz$0-)JvUnj_`<~!Q UMZA|dRoM&qA4g7GFP|VaH zL$yO+Qm&#n(a82GPas{}NCw(MzuuAHd$_4k0k@K zweW;O7V-ci%57#~*-%E2*eK3ht`cyc-`=h@Ml)Afue3;#qa%Od4Q=yHkw+-QdIppM zWHvT@k}DH$EI|=&-!>qKg;#qL*{6gcDb_-=PBqN*Tho*8t`EMVl^$yRLAmy)u%m9P z%=j*IDNg6|Y?43mETclX$8i-Vd;w!Jb9}yxz-v{!GwDSJR^oWOy!!j**X8o+_V=&y_`LhQ{!yNt$a7C+MWVel zvt9^Zl1UAkd)vkGa(TNz33PW(SS0#mz*JYpbvyVzX>|ybv`6jvBRD}jI4&@3FBU$= zG}(jL_Ih_CZ8Yd#J%I^VS-OhXU5#!q+4yxPXA{n%SRrTL1UzBingmBSe1G4=A>={@ zyLdBlLT0$wE$JuNMWGbr`DkYv&m9q~m+)%I_+ZsgT2U7IEwfhzOq`YjS68m*!Je*k zWR0lCPUd-c_e}HJv z*}MzyYYVy$`Wh0zMHmTIK%Cco`Yw|sl$X2tRVC~8EZmtdRlC#G)$Q+P{k6(k{YlpS`0&tA)*>8W*#ybZ_f8apR|VCC zHCTq{$=#Z=9e;3|^_%6QGI5!DMf#X#FR52W;AKh`#^713RRh0Qw=ouK1n~WJrR^2M z_ep)cCkS5Saer4elI!;X8bh&uoq%_*THlQaH_bP5v&TPPpvWy9C`jHs8bnf3|0Pa! P_Co&$mC9nqKMMc=h?pFf diff --git a/lib/infuser.min.js b/lib/infuser.min.js index 430e62d..0aa1f1d 100644 --- a/lib/infuser.min.js +++ b/lib/infuser.min.js @@ -1 +1 @@ -(function(a,b){var c=function(){},d={preRender:c,render:function(a,b){$(a).children().length===0?$(a).append($(b)):$(a).children().replaceWith($(b))},postRender:c},e={templates:{},storeTemplate:function(a,b){this.templates[a]=b},getTemplate:function(a){return this.templates[a]},purge:function(){this.templates={}}},f={templateIds:[],storeTemplate:function(a,b){var c=document.getElementById(a);c===null&&(this.templateIds.push(a),c=document.createElement("script"),c.type="text/html",c.id=a,document.body.appendChild(c)),c.text=b},getTemplate:function(a){return document.getElementById(a)},purge:function(){for(var a=0;aThe template {TEMPLATEID} could not be loaded. {STATUS}",h=function(a,b,c){return g.replace("{STATUS}",a).replace("{TEMPLATEID}",b).replace("{TEMPLATEURL}",c)},i=[],j={getTemplatePath:function(a){var c=l.config.templatePrefix+a+l.config.templateSuffix;return l.config.templateUrl===b||l.config.templateUrl===""?c:l.config.templateUrl+"/"+c},templateGetSuccess:function(a,b){return function(c){l.store.storeTemplate(a,c),b(l.store.getTemplate(a))}},templateGetError:function(a,b,c){return function(d){$.inArray(a,i)===-1&&i.push(a);var e=h("HTTP Status code: "+d.status,a,b);l.store.storeTemplate(a,e),c(l.store.getTemplate(a))}}},k={inProgress:{},direct:function(a){var b=a.type+"_"+a.dataType+"_"+a.url,c=this;if(!c.inProgress[b]){var d=function(){delete c.inProgress[b]},e={successCallbacks:[a.success],errorCallbacks:[a.error],success:function(a){$.each($(c.inProgress[b].successCallbacks),function(b,c){c(a)}),d()},error:function(a){$.each($(c.inProgress[b].errorCallbacks),function(b,c){c(a)}),d()}};c.inProgress[b]=$.extend({},a,e),$.ajax(c.inProgress[b])}else c.inProgress[b].successCallbacks.push(a.success),c.inProgress[b].errorCallbacks.push(a.error)}},l={storageOptions:{hash:e,script:f},store:e,config:{templateUrl:"",templateSuffix:".html",templatePrefix:"",renderInstruction:c},get:function(a,b){var c=this.store.getTemplate(a),d,e;!c||$.inArray(a,i)!==-1?(d=j.getTemplatePath(a),e={async:!0,url:d,dataType:"html",type:"GET",success:j.templateGetSuccess(a,b),error:j.templateGetError(a,d,b)},k.direct(e)):b(c)},getSync:function(a){var b=this.store.getTemplate(a),c,d,e;if(!b||$.inArray(a,i)!==-1)c=j.getTemplatePath(a),d=null,e={async:!1,url:c,dataType:"html",type:"GET",success:function(a){d=a},error:function(b){$.inArray(a)===-1&&i.push(a),d=h("HTTP Status code: exception.status",a,c)}},$.ajax(e),d===null?d=h("An unknown error occurred.",a,c):(this.store.storeTemplate(a,d),b=this.store.getTemplate(a));return b},infuse:function(a,b,c){var e=$.extend({},d,c);this.get(a,function(a){e.preRender(b),e.render(b,a),e.postRender(b)})}};a.infuser=l})(window) \ No newline at end of file +(function(a,b){var c=function(){},d={preRender:c,render:function(a,b){$(a).children().length===0?$(a).append($(b)):$(a).children().replaceWith($(b))},postRender:c},e={templates:{},storeTemplate:function(a,b){this.templates[a]=b},getTemplate:function(a){return this.templates[a]},purge:function(){this.templates={}}},f={templateIds:[],storeTemplate:function(a,b){var c=document.getElementById(a);c===null&&(this.templateIds.push(a),c=document.createElement("script"),c.type="text/html",c.id=a,document.body.appendChild(c)),c.text=b},getTemplate:function(a){return document.getElementById(a)},purge:function(){for(var a=0;aThe template {TEMPLATEID} could not be loaded. {STATUS}",h=function(a,b,c){return g.replace("{STATUS}",a).replace("{TEMPLATEID}",b).replace("{TEMPLATEURL}",c)},i=[],j={getTemplatePath:function(a){var c=l.config.templatePrefix+a+l.config.templateSuffix;return l.config.templateUrl===b||l.config.templateUrl===""?c:l.config.templateUrl+"/"+c},templateGetSuccess:function(a,b){return function(c){l.store.storeTemplate(a,c),b(l.store.getTemplate(a))}},templateGetError:function(a,b,c){return function(d){$.inArray(a,i)===-1&&i.push(a);var e=h("HTTP Status code: "+d.status,a,b);l.store.storeTemplate(a,e),c(l.store.getTemplate(a))}}},k={inProgress:{},direct:function(a){var b=a.type+"_"+a.dataType+"_"+a.url,c=this;if(!c.inProgress[b]){var d=function(){delete c.inProgress[b]},e={successCallbacks:[a.success],errorCallbacks:[a.error],success:function(a){$.each($(c.inProgress[b].successCallbacks),function(b,c){c(a)}),d()},error:function(a){$.each($(c.inProgress[b].errorCallbacks),function(b,c){c(a)}),d()}};c.inProgress[b]=$.extend({},a,e),$.ajax(c.inProgress[b])}else c.inProgress[b].successCallbacks.push(a.success),c.inProgress[b].errorCallbacks.push(a.error)}},l={storageOptions:{hash:e,script:f},store:e,config:{templateUrl:"",templateSuffix:".html",templatePrefix:"",renderInstruction:c},get:function(a,b){var c=this.store.getTemplate(a),d,e;!c||$.inArray(a,i)!==-1?(d=j.getTemplatePath(a),e={async:!0,url:d,dataType:"html",type:"GET",success:j.templateGetSuccess(a,b),error:j.templateGetError(a,d,b)},k.direct(e)):b(c)},getSync:function(a){var b=this.store.getTemplate(a),c,d,e;if(!b||$.inArray(a,i)!==-1)c=j.getTemplatePath(a),d=null,e={async:!1,url:c,dataType:"html",type:"GET",success:function(a){d=a},error:function(b){$.inArray(a)===-1&&i.push(a),d=h("HTTP Status code: exception.status",a,c)}},$.ajax(e),d===null?d=h("An unknown error occurred.",a,c):(this.store.storeTemplate(a,d),b=this.store.getTemplate(a));return b},infuse:function(a,b,c){var e=$.extend({},d,c);this.get(a,function(a){var c=a;e.preRender(b,c,function(a){c=a}),e.render(b,c),e.postRender(b)})}};a.infuser=l})(window) \ No newline at end of file diff --git a/src/Api.js b/src/Api.js index 8b2deed..906d78a 100644 --- a/src/Api.js +++ b/src/Api.js @@ -70,8 +70,9 @@ var infuser = { infuse: function(templateId, targetDomElement, renderOptions) { var options = $.extend({}, defaultRenderOptions, renderOptions); this.get(templateId, function(template) { - options.preRender(targetDomElement); - options.render(targetDomElement, template); + var _template = template; + options.preRender(targetDomElement, _template, function(renderedTemplate) { _template = renderedTemplate; }); + options.render(targetDomElement, _template); options.postRender(targetDomElement); }); }