JSFiddle - React, Tailwind, and code Playground
by val2048
HTML
<ul id=result></ul>
JavaScript
function Chain(str)
{
var next = null;
var param = null;
this.exec = function(aggregatingParameter)
{
return next.exec((aggregatingParameter || "") + str);
};
this.setNext = function(v)
{
next = v;
};
this.setLast = function(v)
{
if(next === null)
this.setNext(v);
else
this.setLast(v);
};
}
function ChainTerminator()
{
this.exec = function(aggregatingParameter)
{
return aggregatingParameter;
};
this.setNext = function(){};
this.setLast = function(){};
}
function Renderer()
{
this.add = function(s)
{
$("<li></li>").text(s).appendTo("#result");
};
}
function FizzBuzzBuilder()
{
var chains = {};
var uBound = 0;
var renderer = function(){};
this.addStrategy = function(divisor, chainOfResp)
{
var str = chains[divisor];
if(str != null)
{
chainOfResp.setNext(str);
}
chains[divisor] = chainOfResp;
};
this.setUBound = function(aUBound)
{
uBound = aUBound;
};
this.setRenderer = function(aRenderer)
{
renderer = aRenderer;
};
this.build = function()
{
return function()
{
for(var i = 0; i < uBound; i++)
{
var chain = concatChains(getStrategies(i));
renderer.add(chain.exec(null) || i.toString());
}
};
};
function concatChains(chains)
{
if(chains.length == 0)
return new ChainTerminator();
for(var i = 0; i < chains.length - 1;i++)
{
chains[i].setLast(chains[i + 1]);
}
chains[chains.length - 1].setLast(new ChainTerminator());
return chains[0];
...