jsRazor – New Way of Rendering Json That Is Pure Genius May 9, 2013
Posted by ActiveEngine Sensei in ActiveEngine, Ajax, jQuery, JSON.Net, KnockoutJS, Open Source, Problem Solving.Tags: innovation, jQuery, Json, new thinking, Open Source, template engine
trackback
Click this link immediately, and you’ll see wonderful things! Sensei has said many times that simple is better, and rgubarenko of MakeItSoft has a brand spanking new template engine that is so simple it makes you speechless. His premise: every possible rendering task can be accomplished as a random combination of two functional primitives:
repeat – repeats fragment of HTML code for each object in array
toggle – shows or hides fragment of HTML depending on boolean flag
Here is an example taken from the github site. To get the output display below:
from a Json data set that looks like this:
var data_Themes = [ { name: "Dreaming Theme", colors: ["#2A1910", "#9E7064", "#B0967C", "#E7435E", "#6D4F3F"] }, { name: "Moth Theme", colors: ["#30382D", "#565539", "#78765F", "#403F2B"] }, { name: "5 Dark Theme", colors: ["#000000", "#280705", "#2E0500", "#3B0000", "#3C1100"] }, { name: "Blue Volcano Theme", colors: ["#5077FF", "#8A84FF", "#81C1FF"] } ];
You will have a template that looks like this:
<pre><div id="example"> <ul> <!--repeatfrom:themes--> <li> <div class="name">{name} ({CountColors} colors)</div> <!--repeatfrom:colors--> <div class="wrap"> <div class="color" style="background-color:{item};"> <!--showfrom:dark--> <span style="color:white">{item}</span> <!--showstop:dark--> <!--showfrom:light--> <span style="color:black">{item}</span> <!--showstop:light--> </div> <div class="rgb">({R},{G},{B})</div> </div> <!--repeatstop:colors--> </li> <!--repeatstop:themes--> </ul> </div></pre>
The controller that creates the final result is as follows:
<pre>// get initial template var tmp = document.getElementById("example").innerHTML; // repeat theme objects (pass array of themes to repeat functional) tmp = $.jsrazor.repeat(tmp, "themes", data_Themes, function (tmp, idx, item) { // repeat inner color objects (pass array of colors of the current theme item) tmp = $.jsrazor.repeat(tmp, "colors", item.colors, function (tmp, idx, item) { // use toggle to show dark or light color text (to be contrast with background) tmp = $.jsrazor.toggle(tmp, "dark", hex2rgb(item).mid <= 128); tmp = $.jsrazor.toggle(tmp, "light", hex2rgb(item).mid > 128); // output RGB representation of the color as custom value tmp = tmp .replace("{R}", hex2rgb(item).r) // red .replace("{G}", hex2rgb(item).g) // green .replace("{B}", hex2rgb(item).b); // blue // return processed template for current INNER item return tmp; }); // color counter is not a part of JSON, so we output it as custom value tmp = tmp.replace("{CountColors}", item.colors.length); // return processed template for current item return tmp; }); // put processed output back document.getElementById("example").innerHTML = tmp;</pre>
This looks very promising. In fact, this could be a very cool way of writing reports in jQuery! Think about it – with a tool like jLinq for filtering data sets and jsRazor, you could replace SQL Server Reports.
Comments»
No comments yet — be the first.