JSFiddle - React, Tailwind, and code Playground

by jrab227

HTML

<script src="documentcloud.github.io/underscore/underscore-min.js"></script>
<div ng-app="application">
  <div ng-controller="myCtr1">
  </div>
</div>

JavaScript

angular.module('application', [])
  .factory('Diskshelf', function() {

    function Diskshelf(params) {
      this.params = params
      this.disks = 0
      _.extend(this.params, params)
      return
    }

    Diskshelf.prototype.addDisk = function(success, error) {
      if (this.disks < params.diskLimit) {
        this.disks += 1
        success()
        return this;
      }
      error()

      return this;
    }

    return Diskshelf
  })
  .factory('Node', function() {

    function Node(params) {
      this.params = params
      this.diskshelves = [];
      return;
    }

    Node.prototype.addDiskshelf = function(diskshelf, success, error) {

      if (this.diskshelves.length < params.diskshelfLimit) {
        this.diskshelves.push(diskshelve);
        success()
        return this;
      }
      error()

      return this;

    }

    Node.prototype.addDisk = function(success, error) {

      this.diskshelves = _.reduce(this.diskshelves, function(diskshelves, diskshelf) {
        if (!diskshelves.alreadyAddedDisk) {
          diskshelf.addDisk(function() {
            diskshelves.alreadyAddedDisk = true
          })
        }
        diskshelves.push(diskshelf)
        return diskshelves
      }, [])

      if (!this.diskshelves.alreadyAddedDisk) {
        error()
        return this;
      }

      success()
      return this;
    }

    return Node

  })
  .controller('myCtr1', ['$scope', 'Node', 'Diskshelf', function($scope, Node, Diskshelf) {

    var diskshelf1 = new Diskshelf({
      diskLimit: 2
    })
    var diskshelf2 = new Diskshelf({
      diskLimit: 4
    })

    var node1 = new Node({
      diskshelfLimit: 2
    })

    node1.addDiskshelf(diskshelf1, function success() {
        return
      }, function error() {
        return
      })
      .addDiskshelf(diskshelf2, function success() {
        return
      }, function error() {
        return
      })
      .addDisk(function success() {
        return
      }, function error() {
     ...