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];
 ...