Prompt:
Convert this JavaScript to CoffeeScript.
```javascript
var Linear;

Linear = (function() {
  class Linear extends Domain {
    construct() {
      if (this.paths == null) {
        this.paths = {};
      }
      this.instance = new c.SimplexSolver();
      this.instance.autoSolve = false;
      //@instance._store = []
      if (this.console.level > 2) {
        c.debug = true;
        return c.trace = true;
      }
    }

    perform() {
      if (this.constrained) {
        this.constrained = this.suggested = void 0;
        if (this.instance._needsSolving) {
          this.instance.solve();
          return this.instance._changed;
        }
      } else if (this.suggested) {
        this.suggested = void 0;
        this.instance.resolve();
        return this.instance._changed;
      }
    }

    unedit(variable) {
      var cei, constraint, ref;
      if (constraint = (ref = this.editing) != null ? ref['%' + (variable.name || variable)] : void 0) {
        //@instance.removeConstraint(constraint)
        cei = this.instance._editVarMap.get(constraint.variable);
        this.instance.removeColumn(cei.editMinus);
        this.instance._editVarMap.delete(constraint.variable);
        return delete this.editing[variable.name || variable];
      }
    }

    //@removeConstraint(constraint)
    edit(variable, strength, weight, continuation) {
      var constraint, ref;
      if (!((ref = this.editing) != null ? ref[variable.name] : void 0)) {
        constraint = new c.EditConstraint(variable, this.strength(strength, 'strong'), this.weight(weight));
        constraint.variable = variable;
        this.Constraint.prototype.inject(this, constraint);
        (this.editing || (this.editing = {}))[variable.name] = constraint;
      }
      return constraint;
    }

    nullify(variable, full) {
      this.instance._externalParametricVars.delete(variable);
      return variable.value = 0;
    }

  };

  Linear.prototype.displayName = 'Linear';

  Linear.prototype.priority = 0;

  Linear.prototype.Engine = c;

  return Linear;

}).call(this);

//if full
```

Response:
class Linear extends Domain
  displayName: 'Linear'

  priority: 0

  Engine:  c

  construct: () ->
    @paths    ?= {}
    @instance = new c.SimplexSolver()
    @instance.autoSolve = false
    #@instance._store = []
    if @console.level > 2
      c.debug = true
      c.trace = true

  perform: ->
    if @constrained
      @constrained = @suggested = undefined
      if @instance._needsSolving
        @instance.solve()
        return @instance._changed
    else if @suggested
      @suggested = undefined
      @instance.resolve()
      return @instance._changed

  unedit: (variable) ->
    if constraint = @editing?['%' + (variable.name || variable)]
      #@instance.removeConstraint(constraint)
      cei = @instance._editVarMap.get(constraint.variable)
      @instance.removeColumn(cei.editMinus)
      @instance._editVarMap.delete(constraint.variable)
      delete @editing[(variable.name || variable)]

      #@removeConstraint(constraint)

  edit: (variable, strength, weight, continuation) ->
    unless @editing?[variable.name]
      constraint = new c.EditConstraint(variable, @strength(strength, 'strong'), @weight(weight))
      constraint.variable = variable
      @Constraint::inject @, constraint
      (@editing ||= {})[variable.name] = constraint

    return constraint

  nullify: (variable, full) ->
    @instance._externalParametricVars.delete(variable)
    variable.value = 0
    #if full


Prompt:
class Linear extends Domain
  displayName: 'Linear'

  priority: 0

  Engine:  c

  construct: () ->
    @paths    ?= {}
    @instance = new c.SimplexSolver()
    @instance.autoSolve = false
    #@instance._store = []
    if @console.level > 2
      c.debug = true
      c.trace = true

  perform: ->
    if @constrained
      @constrained = @suggested = undefined
      if @instance._needsSolving
        @instance.solve()
        return @instance._changed
    else if @suggested
      @suggested = undefined
      @instance.resolve()

Response:
return @instance._changed

  unedit: (variable) ->
    if constraint = @editing?['%' + (variable.name || variable)]
      #@instance.removeConstraint(constraint)
      cei = @instance._editVarMap.get(constraint.variable)
      @instance.removeColumn(cei.editMinus)
      @instance._editVarMap.delete(constraint.variable)
      delete @editing[(variable.name || variable)]

      #@removeConstraint(constraint)

  edit: (variable, strength, weight, continuation) ->
    unless @editing?[variable.name]
      constraint = new c.EditConstraint(variable, @strength(strength, 'strong'), @weight(weight))
      constraint.variable = variable
      @Constraint::inject @, constraint
      (@editing ||= {})[variable.name] = constraint

    return constraint

  nullify: (variable, full) ->
    @instance._externalParametricVars.delete(variable)
    variable.value = 0
    #if full


Response:
#@instance.rows.delete(variable)

  suggest: (path, value, strength, weight, continuation) ->
    if typeof path == 'string'
      unless variable = @variables[path]
        variable = @Variable::declare(@, path)
    else
      variable = path

    @edit(variable, strength, weight, continuation)
    @instance.suggestValue(variable, value)
    variable.value = value
    @suggested = true
    return variable

  variable: (name) ->
    return new c.Variable name: name

  strength: (strength, byDefault = 'medium') ->
    return strength && c.Strength[strength] || c.Strength[byDefault]

  weight: (weight, operation) ->
    #if index = operation?.parent[0].index
    #  return index / 1000
    return weight

# Capture values coming from other domains


Prompt:
Convert this CoffeeScript to JavaScript.
```coffeescript
#@instance.rows.delete(variable)

  suggest: (path, value, strength, weight, continuation) ->
    if typeof path == 'string'
      unless variable = @variables[path]
        variable = @Variable::declare(@, path)
    else
      variable = path

    @edit(variable, strength, weight, continuation)
    @instance.suggestValue(variable, value)
    variable.value = value
    @suggested = true
    return variable

  variable: (name) ->
    return new c.Variable name: name

  strength: (strength, byDefault = 'medium') ->
    return strength && c.Strength[strength] || c.Strength[byDefault]

  weight: (weight, operation) ->
    #if index = operation?.parent[0].index
    #  return index / 1000
    return weight

# Capture values coming from other domains
```

Response:
//@instance.rows.delete(variable)
({
  suggest: function(path, value, strength, weight, continuation) {
    var variable;
    if (typeof path === 'string') {
      if (!(variable = this.variables[path])) {
        variable = this.Variable.prototype.declare(this, path);
      }
    } else {
      variable = path;
    }
    this.edit(variable, strength, weight, continuation);
    this.instance.suggestValue(variable, value);
    variable.value = value;
    this.suggested = true;
    return variable;
  },
  variable: function(name) {
    return new c.Variable({
      name: name
    });
  },
  strength: function(strength, byDefault = 'medium') {
    return strength && c.Strength[strength] || c.Strength[byDefault];
  },
  weight: function(weight, operation) {
    //if index = operation?.parent[0].index
    //  return index / 1000
    return weight;
  }
});

// Capture values coming from other domains


Prompt:
Convert this JavaScript to CoffeeScript.
```javascript
//@instance.rows.delete(variable)
({
  suggest: function(path, value, strength, weight, continuation) {
    var variable;
    if (typeof path === 'string') {
      if (!(variable = this.variables[path])) {
        variable = this.Variable.prototype.declare(this, path);
      }
    } else {
      variable = path;
    }
    this.edit(variable, strength, weight, continuation);
    this.instance.suggestValue(variable, value);
    variable.value = value;
    this.suggested = true;
    return variable;
  },
  variable: function(name) {
    return new c.Variable({
      name: name
    });
  },
  strength: function(strength, byDefault = 'medium') {
    return strength && c.Strength[strength] || c.Strength[byDefault];
  },
  weight: function(weight, operation) {
    //if index = operation?.parent[0].index
    //  return index / 1000
    return weight;
  }
});

// Capture values coming from other domains
```

Response:
#@instance.rows.delete(variable)

  suggest: (path, value, strength, weight, continuation) ->
    if typeof path == 'string'
      unless variable = @variables[path]
        variable = @Variable::declare(@, path)
    else
      variable = path

    @edit(variable, strength, weight, continuation)
    @instance.suggestValue(variable, value)
    variable.value = value
    @suggested = true
    return variable

  variable: (name) ->
    return new c.Variable name: name

  strength: (strength, byDefault = 'medium') ->
    return strength && c.Strength[strength] || c.Strength[byDefault]

  weight: (weight, operation) ->
    #if index = operation?.parent[0].index
    #  return index / 1000
    return weight

# Capture values coming from other domains


Prompt:
#@instance.rows.delete(variable)

  suggest: (path, value, strength, weight, continuation) ->
    if typeof path == 'string'
      unless variable = @variables[path]
        variable = @Variable::declare(@, path)
    else
      variable = path

    @edit(variable, strength, weight, continuation)
    @instance.suggestValue(variable, value)
    variable.value = value
    @suggested = true

Response:
return variable

  variable: (name) ->
    return new c.Variable name: name

  strength: (strength, byDefault = 'medium') ->
    return strength && c.Strength[strength] || c.Strength[byDefault]

  weight: (weight, operation) ->
    #if index = operation?.parent[0].index
    #  return index / 1000
    return weight

# Capture values coming from other domains


Response:
Linear.Mixin =
  yield: (result, engine, operation, continuation, scope, ascender) ->
    if typeof result == 'number'
      return operation.parent.domain.suggest('%' + operation.command.toExpression(operation), result, 'require')

Linear::Constraint = Constraint.extend {

  before: (args, engine, operation, continuation, scope, ascender, ascending) ->
    return @get(engine, operation, ascending)

  after: (args, result, engine, operation, continuation, scope, ascender, ascending) ->
    if result.hashCode
      return ((engine.operations ||= {})[operation.hash ||= @toExpression(operation)] ||= {})[@toHash(ascending)] ||= result
    return result

  # Get cached operation by expression and set of input variables
  get: (engine, operation, scope) ->
    return engine.operations?[operation.hash ||= @toExpression(operation)]?[@toHash(scope)]

  yield: Linear.Mixin.yield

  inject: (engine, constraint) ->
    engine.instance.addConstraint(constraint)

  eject: (engine, constraint) ->
    engine.instance.removeConstraint(constraint)

},
  '==': (left, right, strength, weight, engine, operation) ->
    return new c.Equation(left, right, engine.strength(strength), engine.weight(weight, operation))

  '<=': (left, right, strength, weight, engine, operation) ->
    return new c.Inequality(left, c.LEQ, right, engine.strength(strength), engine.weight(weight, operation))

  '>=': (left, right, strength, weight, engine, operation) ->
    return new c.Inequality(left, c.GEQ, right, engine.strength(strength), engine.weight(weight, operation))

  '<': (left, right, strength, weight, engine, operation) ->
    return new c.Inequality(left, c.LEQ, engine['+'](right, 1), engine.strength(strength), engine.weight(weight, operation))

  '>': (left, right, strength, weight, engine, operation) ->
    return new c.Inequality(left, c.GEQ, engine['+'](right, 1), engine.strength(strength), engine.weight(weight, operation))

Linear::Variable = Variable.extend Linear.Mixin,
  get: (path, engine, operation) ->
    variable = @declare(engine, path)
    engine.unedit(variable)
    return variable


Prompt:
Convert this CoffeeScript to JavaScript.
```coffeescript
Linear.Mixin =
  yield: (result, engine, operation, continuation, scope, ascender) ->
    if typeof result == 'number'
      return operation.parent.domain.suggest('%' + operation.command.toExpression(operation), result, 'require')

Linear::Constraint = Constraint.extend {

  before: (args, engine, operation, continuation, scope, ascender, ascending) ->
    return @get(engine, operation, ascending)

  after: (args, result, engine, operation, continuation, scope, ascender, ascending) ->
    if result.hashCode
      return ((engine.operations ||= {})[operation.hash ||= @toExpression(operation)] ||= {})[@toHash(ascending)] ||= result
    return result

  # Get cached operation by expression and set of input variables
  get: (engine, operation, scope) ->
    return engine.operations?[operation.hash ||= @toExpression(operation)]?[@toHash(scope)]

  yield: Linear.Mixin.yield

  inject: (engine, constraint) ->
    engine.instance.addConstraint(constraint)

  eject: (engine, constraint) ->
    engine.instance.removeConstraint(constraint)

},
  '==': (left, right, strength, weight, engine, operation) ->
    return new c.Equation(left, right, engine.strength(strength), engine.weight(weight, operation))

  '<=': (left, right, strength, weight, engine, operation) ->
    return new c.Inequality(left, c.LEQ, right, engine.strength(strength), engine.weight(weight, operation))

  '>=': (left, right, strength, weight, engine, operation) ->
    return new c.Inequality(left, c.GEQ, right, engine.strength(strength), engine.weight(weight, operation))

  '<': (left, right, strength, weight, engine, operation) ->
    return new c.Inequality(left, c.LEQ, engine['+'](right, 1), engine.strength(strength), engine.weight(weight, operation))

  '>': (left, right, strength, weight, engine, operation) ->
    return new c.Inequality(left, c.GEQ, engine['+'](right, 1), engine.strength(strength), engine.weight(weight, operation))

Linear::Variable = Variable.extend Linear.Mixin,
  get: (path, engine, operation) ->
    variable = @declare(engine, path)
    engine.unedit(variable)
    return variable
```

Response:
Linear.Mixin = {
  yield: function(result, engine, operation, continuation, scope, ascender) {
    if (typeof result === 'number') {
      return operation.parent.domain.suggest('%' + operation.command.toExpression(operation), result, 'require');
    }
  }
};

Linear.prototype.Constraint = Constraint.extend({
  before: function(args, engine, operation, continuation, scope, ascender, ascending) {
    return this.get(engine, operation, ascending);
  },
  after: function(args, result, engine, operation, continuation, scope, ascender, ascending) {
    var base, base1, name, name1;
    if (result.hashCode) {
      return (base = ((base1 = (engine.operations || (engine.operations = {})))[name1 = operation.hash || (operation.hash = this.toExpression(operation))] || (base1[name1] = {})))[name = this.toHash(ascending)] || (base[name] = result);
    }
    return result;
  },
  // Get cached operation by expression and set of input variables
  get: function(engine, operation, scope) {
    var ref, ref1;
    return (ref = engine.operations) != null ? (ref1 = ref[operation.hash || (operation.hash = this.toExpression(operation))]) != null ? ref1[this.toHash(scope)] : void 0 : void 0;
  },
  yield: Linear.Mixin.yield,
  inject: function(engine, constraint) {
    return engine.instance.addConstraint(constraint);
  },
  eject: function(engine, constraint) {
    return engine.instance.removeConstraint(constraint);
  }
}, {
  '==': function(left, right, strength, weight, engine, operation) {
    return new c.Equation(left, right, engine.strength(strength), engine.weight(weight, operation));
  },
  '<=': function(left, right, strength, weight, engine, operation) {
    return new c.Inequality(left, c.LEQ, right, engine.strength(strength), engine.weight(weight, operation));
  },
  '>=': function(left, right, strength, weight, engine, operation) {
    return new c.Inequality(left, c.GEQ, right, engine.strength(strength), engine.weight(weight, operation));
  },
  '<': function(left, right, strength, weight, engine, operation) {
    return new c.Inequality(left, c.LEQ, engine['+'](right, 1), engine.strength(strength), engine.weight(weight, operation));
  },
  '>': function(left, right, strength, weight, engine, operation) {
    return new c.Inequality(left, c.GEQ, engine['+'](right, 1), engine.strength(strength), engine.weight(weight, operation));
  }
});

Linear.prototype.Variable = Variable.extend(Linear.Mixin, {
  get: function(path, engine, operation) {
    var variable;
    variable = this.declare(engine, path);
    engine.unedit(variable);
    return variable;
  }
});


Prompt:
Convert this JavaScript to CoffeeScript.
```javascript
Linear.Mixin = {
  yield: function(result, engine, operation, continuation, scope, ascender) {
    if (typeof result === 'number') {
      return operation.parent.domain.suggest('%' + operation.command.toExpression(operation), result, 'require');
    }
  }
};

Linear.prototype.Constraint = Constraint.extend({
  before: function(args, engine, operation, continuation, scope, ascender, ascending) {
    return this.get(engine, operation, ascending);
  },
  after: function(args, result, engine, operation, continuation, scope, ascender, ascending) {
    var base, base1, name, name1;
    if (result.hashCode) {
      return (base = ((base1 = (engine.operations || (engine.operations = {})))[name1 = operation.hash || (operation.hash = this.toExpression(operation))] || (base1[name1] = {})))[name = this.toHash(ascending)] || (base[name] = result);
    }
    return result;
  },
  // Get cached operation by expression and set of input variables
  get: function(engine, operation, scope) {
    var ref, ref1;
    return (ref = engine.operations) != null ? (ref1 = ref[operation.hash || (operation.hash = this.toExpression(operation))]) != null ? ref1[this.toHash(scope)] : void 0 : void 0;
  },
  yield: Linear.Mixin.yield,
  inject: function(engine, constraint) {
    return engine.instance.addConstraint(constraint);
  },
  eject: function(engine, constraint) {
    return engine.instance.removeConstraint(constraint);
  }
}, {
  '==': function(left, right, strength, weight, engine, operation) {
    return new c.Equation(left, right, engine.strength(strength), engine.weight(weight, operation));
  },
  '<=': function(left, right, strength, weight, engine, operation) {
    return new c.Inequality(left, c.LEQ, right, engine.strength(strength), engine.weight(weight, operation));
  },
  '>=': function(left, right, strength, weight, engine, operation) {
    return new c.Inequality(left, c.GEQ, right, engine.strength(strength), engine.weight(weight, operation));
  },
  '<': function(left, right, strength, weight, engine, operation) {
    return new c.Inequality(left, c.LEQ, engine['+'](right, 1), engine.strength(strength), engine.weight(weight, operation));
  },
  '>': function(left, right, strength, weight, engine, operation) {
    return new c.Inequality(left, c.GEQ, engine['+'](right, 1), engine.strength(strength), engine.weight(weight, operation));
  }
});

Linear.prototype.Variable = Variable.extend(Linear.Mixin, {
  get: function(path, engine, operation) {
    var variable;
    variable = this.declare(engine, path);
    engine.unedit(variable);
    return variable;
  }
});
```

Response:
Linear.Mixin =
  yield: (result, engine, operation, continuation, scope, ascender) ->
    if typeof result == 'number'
      return operation.parent.domain.suggest('%' + operation.command.toExpression(operation), result, 'require')

Linear::Constraint = Constraint.extend {

  before: (args, engine, operation, continuation, scope, ascender, ascending) ->
    return @get(engine, operation, ascending)

  after: (args, result, engine, operation, continuation, scope, ascender, ascending) ->
    if result.hashCode
      return ((engine.operations ||= {})[operation.hash ||= @toExpression(operation)] ||= {})[@toHash(ascending)] ||= result
    return result

  # Get cached operation by expression and set of input variables
  get: (engine, operation, scope) ->
    return engine.operations?[operation.hash ||= @toExpression(operation)]?[@toHash(scope)]

  yield: Linear.Mixin.yield

  inject: (engine, constraint) ->
    engine.instance.addConstraint(constraint)

  eject: (engine, constraint) ->
    engine.instance.removeConstraint(constraint)

},
  '==': (left, right, strength, weight, engine, operation) ->
    return new c.Equation(left, right, engine.strength(strength), engine.weight(weight, operation))

  '<=': (left, right, strength, weight, engine, operation) ->
    return new c.Inequality(left, c.LEQ, right, engine.strength(strength), engine.weight(weight, operation))

  '>=': (left, right, strength, weight, engine, operation) ->
    return new c.Inequality(left, c.GEQ, right, engine.strength(strength), engine.weight(weight, operation))

  '<': (left, right, strength, weight, engine, operation) ->
    return new c.Inequality(left, c.LEQ, engine['+'](right, 1), engine.strength(strength), engine.weight(weight, operation))

  '>': (left, right, strength, weight, engine, operation) ->
    return new c.Inequality(left, c.GEQ, engine['+'](right, 1), engine.strength(strength), engine.weight(weight, operation))

Linear::Variable = Variable.extend Linear.Mixin,
  get: (path, engine, operation) ->
    variable = @declare(engine, path)
    engine.unedit(variable)
    return variable


Prompt:
Linear.Mixin =
  yield: (result, engine, operation, continuation, scope, ascender) ->
    if typeof result == 'number'
      return operation.parent.domain.suggest('%' + operation.command.toExpression(operation), result, 'require')

Linear::Constraint = Constraint.extend {

  before: (args, engine, operation, continuation, scope, ascender, ascending) ->
    return @get(engine, operation, ascending)

  after: (args, result, engine, operation, continuation, scope, ascender, ascending) ->
    if result.hashCode
      return ((engine.operations ||= {})[operation.hash ||= @toExpression(operation)] ||= {})[@toHash(ascending)] ||= result
    return result

  # Get cached operation by expression and set of input variables
  get: (engine, operation, scope) ->
    return engine.operations?[operation.hash ||= @toExpression(operation)]?[@toHash(scope)]

  yield: Linear.Mixin.yield

  inject: (engine, constraint) ->
    engine.instance.addConstraint(constraint)

Response:
eject: (engine, constraint) ->
    engine.instance.removeConstraint(constraint)

},
  '==': (left, right, strength, weight, engine, operation) ->
    return new c.Equation(left, right, engine.strength(strength), engine.weight(weight, operation))

  '<=': (left, right, strength, weight, engine, operation) ->
    return new c.Inequality(left, c.LEQ, right, engine.strength(strength), engine.weight(weight, operation))

  '>=': (left, right, strength, weight, engine, operation) ->
    return new c.Inequality(left, c.GEQ, right, engine.strength(strength), engine.weight(weight, operation))

  '<': (left, right, strength, weight, engine, operation) ->
    return new c.Inequality(left, c.LEQ, engine['+'](right, 1), engine.strength(strength), engine.weight(weight, operation))

  '>': (left, right, strength, weight, engine, operation) ->
    return new c.Inequality(left, c.GEQ, engine['+'](right, 1), engine.strength(strength), engine.weight(weight, operation))

Linear::Variable = Variable.extend Linear.Mixin,
  get: (path, engine, operation) ->
    variable = @declare(engine, path)
    engine.unedit(variable)
    return variable


Response:
Linear::Variable.Expression = Variable.Expression.extend Linear.Mixin,

  '+': (left, right) ->
    return c.plus(left, right)

  '-': (left, right) ->
    return c.minus(left, right)

  '*': (left, right) ->
    return c.times(left, right)

  '/': (left, right) ->
    return c.divide(left, right)

# Handle constraints wrapped into meta constructs provided by Input
Linear::Meta = Command.Meta.extend {},
  'object':
    execute: (constraint, engine, operation) ->
      if constraint?.hashCode?
        operation[1].command.add(constraint, engine, operation[1], operation[0].key)

    descend: (engine, operation) ->

      if meta = operation[0]
        continuation = meta.key
        scope = meta.scope && engine.identity[meta.scope] || engine.scope

      operation[1].parent = operation
      [
        operation[1].command.solve(engine, operation[1], continuation, scope, undefined, operation[0])
        engine,
        operation
      ]

Linear::Stay = Command.extend {
  signature: [
    value: ['Variable']
  ]
},
  stay: (value, engine, operation) ->
    engine.suggested = true
    engine.instance.addStay(value)
    return

Linear::Remove = Command.extend {
  extras: 1

  signature: false
},


Prompt:
Convert this CoffeeScript to JavaScript.
```coffeescript
Linear::Variable.Expression = Variable.Expression.extend Linear.Mixin,

  '+': (left, right) ->
    return c.plus(left, right)

  '-': (left, right) ->
    return c.minus(left, right)

  '*': (left, right) ->
    return c.times(left, right)

  '/': (left, right) ->
    return c.divide(left, right)

# Handle constraints wrapped into meta constructs provided by Input
Linear::Meta = Command.Meta.extend {},
  'object':
    execute: (constraint, engine, operation) ->
      if constraint?.hashCode?
        operation[1].command.add(constraint, engine, operation[1], operation[0].key)

    descend: (engine, operation) ->

      if meta = operation[0]
        continuation = meta.key
        scope = meta.scope && engine.identity[meta.scope] || engine.scope

      operation[1].parent = operation
      [
        operation[1].command.solve(engine, operation[1], continuation, scope, undefined, operation[0])
        engine,
        operation
      ]

Linear::Stay = Command.extend {
  signature: [
    value: ['Variable']
  ]
},
  stay: (value, engine, operation) ->
    engine.suggested = true
    engine.instance.addStay(value)
    return

Linear::Remove = Command.extend {
  extras: 1

  signature: false
},
```

Response:
Linear.prototype.Variable.Expression = Variable.Expression.extend(Linear.Mixin, {
  '+': function(left, right) {
    return c.plus(left, right);
  },
  '-': function(left, right) {
    return c.minus(left, right);
  },
  '*': function(left, right) {
    return c.times(left, right);
  },
  '/': function(left, right) {
    return c.divide(left, right);
  }
});

// Handle constraints wrapped into meta constructs provided by Input
Linear.prototype.Meta = Command.Meta.extend({}, {
  'object': {
    execute: function(constraint, engine, operation) {
      if ((constraint != null ? constraint.hashCode : void 0) != null) {
        return operation[1].command.add(constraint, engine, operation[1], operation[0].key);
      }
    },
    descend: function(engine, operation) {
      var continuation, meta, scope;
      if (meta = operation[0]) {
        continuation = meta.key;
        scope = meta.scope && engine.identity[meta.scope] || engine.scope;
      }
      operation[1].parent = operation;
      return [operation[1].command.solve(engine, operation[1], continuation, scope, void 0, operation[0]), engine, operation];
    }
  }
});

Linear.prototype.Stay = Command.extend({
  signature: [
    {
      value: ['Variable']
    }
  ]
}, {
  stay: function(value, engine, operation) {
    engine.suggested = true;
    engine.instance.addStay(value);
  }
});

Linear.prototype.Remove = Command.extend({
  extras: 1,
  signature: false
});


Prompt:
Convert this JavaScript to CoffeeScript.
```javascript
Linear.prototype.Variable.Expression = Variable.Expression.extend(Linear.Mixin, {
  '+': function(left, right) {
    return c.plus(left, right);
  },
  '-': function(left, right) {
    return c.minus(left, right);
  },
  '*': function(left, right) {
    return c.times(left, right);
  },
  '/': function(left, right) {
    return c.divide(left, right);
  }
});

// Handle constraints wrapped into meta constructs provided by Input
Linear.prototype.Meta = Command.Meta.extend({}, {
  'object': {
    execute: function(constraint, engine, operation) {
      if ((constraint != null ? constraint.hashCode : void 0) != null) {
        return operation[1].command.add(constraint, engine, operation[1], operation[0].key);
      }
    },
    descend: function(engine, operation) {
      var continuation, meta, scope;
      if (meta = operation[0]) {
        continuation = meta.key;
        scope = meta.scope && engine.identity[meta.scope] || engine.scope;
      }
      operation[1].parent = operation;
      return [operation[1].command.solve(engine, operation[1], continuation, scope, void 0, operation[0]), engine, operation];
    }
  }
});

Linear.prototype.Stay = Command.extend({
  signature: [
    {
      value: ['Variable']
    }
  ]
}, {
  stay: function(value, engine, operation) {
    engine.suggested = true;
    engine.instance.addStay(value);
  }
});

Linear.prototype.Remove = Command.extend({
  extras: 1,
  signature: false
});
```

Response:
Linear::Variable.Expression = Variable.Expression.extend Linear.Mixin,

  '+': (left, right) ->
    return c.plus(left, right)

  '-': (left, right) ->
    return c.minus(left, right)

  '*': (left, right) ->
    return c.times(left, right)

  '/': (left, right) ->
    return c.divide(left, right)

# Handle constraints wrapped into meta constructs provided by Input
Linear::Meta = Command.Meta.extend {},
  'object':
    execute: (constraint, engine, operation) ->
      if constraint?.hashCode?
        operation[1].command.add(constraint, engine, operation[1], operation[0].key)

    descend: (engine, operation) ->

      if meta = operation[0]
        continuation = meta.key
        scope = meta.scope && engine.identity[meta.scope] || engine.scope

      operation[1].parent = operation
      [
        operation[1].command.solve(engine, operation[1], continuation, scope, undefined, operation[0])
        engine,
        operation
      ]

Linear::Stay = Command.extend {
  signature: [
    value: ['Variable']
  ]
},
  stay: (value, engine, operation) ->
    engine.suggested = true
    engine.instance.addStay(value)
    return

Linear::Remove = Command.extend {
  extras: 1

  signature: false
},


Prompt:
Linear::Variable.Expression = Variable.Expression.extend Linear.Mixin,

  '+': (left, right) ->
    return c.plus(left, right)

  '-': (left, right) ->
    return c.minus(left, right)

  '*': (left, right) ->
    return c.times(left, right)

  '/': (left, right) ->
    return c.divide(left, right)

# Handle constraints wrapped into meta constructs provided by Input
Linear::Meta = Command.Meta.extend {},
  'object':
    execute: (constraint, engine, operation) ->
      if constraint?.hashCode?
        operation[1].command.add(constraint, engine, operation[1], operation[0].key)

    descend: (engine, operation) ->

      if meta = operation[0]

Response:
continuation = meta.key
        scope = meta.scope && engine.identity[meta.scope] || engine.scope

      operation[1].parent = operation
      [
        operation[1].command.solve(engine, operation[1], continuation, scope, undefined, operation[0])
        engine,
        operation
      ]

Linear::Stay = Command.extend {
  signature: [
    value: ['Variable']
  ]
},
  stay: (value, engine, operation) ->
    engine.suggested = true
    engine.instance.addStay(value)
    return

Linear::Remove = Command.extend {
  extras: 1

  signature: false
},


Response:
remove: (args ..., engine) ->
    engine.remove.apply(engine, args)

# Phantom js doesnt enforce order of numerical keys in plain objects.
# The hack enforces arrays as base structure.
do ->
  unless c.isUnordered?
    obj = {'10': 1, '9': 1}
    for property of obj
      break
    if c.isUnordered = (property > 9)
      set = c.HashTable.prototype.set
      c.HashTable.prototype.set = ->
        if !@_store.push
          store = @_store
          @_store = []
          for property of store
            @_store[property] = store[property]

        return set.apply(@, arguments)


Prompt:
Convert this CoffeeScript to JavaScript.
```coffeescript
remove: (args ..., engine) ->
    engine.remove.apply(engine, args)

# Phantom js doesnt enforce order of numerical keys in plain objects.
# The hack enforces arrays as base structure.
do ->
  unless c.isUnordered?
    obj = {'10': 1, '9': 1}
    for property of obj
      break
    if c.isUnordered = (property > 9)
      set = c.HashTable.prototype.set
      c.HashTable.prototype.set = ->
        if !@_store.push
          store = @_store
          @_store = []
          for property of store
            @_store[property] = store[property]

        return set.apply(@, arguments)
```

Response:
var splice = [].splice;

({
  remove: function(...args) {
    var engine, ref;
    ref = args, [...args] = ref, [engine] = splice.call(args, -1);
    return engine.remove.apply(engine, args);
  }
});

(function() {  // Phantom js doesnt enforce order of numerical keys in plain objects.
  // The hack enforces arrays as base structure.
  var obj, property, set;
  if (c.isUnordered == null) {
    obj = {
      '10': 1,
      '9': 1
    };
    for (property in obj) {
      break;
    }
    if (c.isUnordered = property > 9) {
      set = c.HashTable.prototype.set;
      return c.HashTable.prototype.set = function() {
        var store;
        if (!this._store.push) {
          store = this._store;
          this._store = [];
          for (property in store) {
            this._store[property] = store[property];
          }
        }
        return set.apply(this, arguments);
      };
    }
  }
})();


Prompt:
Convert this JavaScript to CoffeeScript.
```javascript
var splice = [].splice;

({
  remove: function(...args) {
    var engine, ref;
    ref = args, [...args] = ref, [engine] = splice.call(args, -1);
    return engine.remove.apply(engine, args);
  }
});

(function() {  // Phantom js doesnt enforce order of numerical keys in plain objects.
  // The hack enforces arrays as base structure.
  var obj, property, set;
  if (c.isUnordered == null) {
    obj = {
      '10': 1,
      '9': 1
    };
    for (property in obj) {
      break;
    }
    if (c.isUnordered = property > 9) {
      set = c.HashTable.prototype.set;
      return c.HashTable.prototype.set = function() {
        var store;
        if (!this._store.push) {
          store = this._store;
          this._store = [];
          for (property in store) {
            this._store[property] = store[property];
          }
        }
        return set.apply(this, arguments);
      };
    }
  }
})();
```

Response:
remove: (args ..., engine) ->
    engine.remove.apply(engine, args)

# Phantom js doesnt enforce order of numerical keys in plain objects.
# The hack enforces arrays as base structure.
do ->
  unless c.isUnordered?
    obj = {'10': 1, '9': 1}
    for property of obj
      break
    if c.isUnordered = (property > 9)
      set = c.HashTable.prototype.set
      c.HashTable.prototype.set = ->
        if !@_store.push
          store = @_store
          @_store = []
          for property of store
            @_store[property] = store[property]

        return set.apply(@, arguments)


Prompt:
remove: (args ..., engine) ->
    engine.remove.apply(engine, args)

# Phantom js doesnt enforce order of numerical keys in plain objects.
# The hack enforces arrays as base structure.
do ->
  unless c.isUnordered?
    obj = {'10': 1, '9': 1}

Response:
for property of obj
      break
    if c.isUnordered = (property > 9)
      set = c.HashTable.prototype.set
      c.HashTable.prototype.set = ->
        if !@_store.push
          store = @_store
          @_store = []
          for property of store
            @_store[property] = store[property]

        return set.apply(@, arguments)


Response:
###
# Copyright (c) 2013-2018 the original author or authors.
#
# Licensed under the MIT License (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.opensource.org/licenses/mit-license.php
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
# either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
###

cyclotronDirectives.directive 'widgetBody', ($timeout) ->
    {
        restrict: 'C'

        link: (scope, element, attrs) ->
            $widgetBody = $(element)
            $widget = $widgetBody.parent()

            sizer = ->
                $title = $widget.find '.title'
                $footer = $widget.find '.widget-footer'
                widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight()
                widgetBodyHeight -= parseInt($widgetBody.css('marginTop')) + parseInt($widgetBody.css('marginBottom'))
                $widgetBody.height Math.floor(widgetBodyHeight)

                if scope.widgetLayout?
                    scope.widgetLayout.widgetBodyHeight = widgetBodyHeight

            # Update on window resizing
            $widget.add('.title, .widget-footer').on 'resize', _.debounce(->
                scope.$apply ->
                    sizer()
            , 120, { leading: false, maxWait: 500 })

            # Run now & again in 100ms
            sizer()
            timer = $timeout sizer, 100

            scope.$on '$destroy', ->
                $timeout.cancel timer
                $widget.off 'resize'

            return
    }


Prompt:
Convert this CoffeeScript to JavaScript.
```coffeescript
###
# Copyright (c) 2013-2018 the original author or authors.
#
# Licensed under the MIT License (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.opensource.org/licenses/mit-license.php
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
# either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
###

cyclotronDirectives.directive 'widgetBody', ($timeout) ->
    {
        restrict: 'C'

        link: (scope, element, attrs) ->
            $widgetBody = $(element)
            $widget = $widgetBody.parent()

            sizer = ->
                $title = $widget.find '.title'
                $footer = $widget.find '.widget-footer'
                widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight()
                widgetBodyHeight -= parseInt($widgetBody.css('marginTop')) + parseInt($widgetBody.css('marginBottom'))
                $widgetBody.height Math.floor(widgetBodyHeight)

                if scope.widgetLayout?
                    scope.widgetLayout.widgetBodyHeight = widgetBodyHeight

            # Update on window resizing
            $widget.add('.title, .widget-footer').on 'resize', _.debounce(->
                scope.$apply ->
                    sizer()
            , 120, { leading: false, maxWait: 500 })

            # Run now & again in 100ms
            sizer()
            timer = $timeout sizer, 100

            scope.$on '$destroy', ->
                $timeout.cancel timer
                $widget.off 'resize'

            return
    }
```

Response:
/*
 * Copyright (c) 2013-2018 the original author or authors.
 *
 * Licensed under the MIT License (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.opensource.org/licenses/mit-license.php
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * either express or implied. See the License for the specific
 * language governing permissions and limitations under the License.
 */
cyclotronDirectives.directive('widgetBody', function($timeout) {
  return {
    restrict: 'C',
    link: function(scope, element, attrs) {
      var $widget, $widgetBody, sizer, timer;
      $widgetBody = $(element);
      $widget = $widgetBody.parent();
      sizer = function() {
        var $footer, $title, widgetBodyHeight;
        $title = $widget.find('.title');
        $footer = $widget.find('.widget-footer');
        widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight();
        widgetBodyHeight -= parseInt($widgetBody.css('marginTop')) + parseInt($widgetBody.css('marginBottom'));
        $widgetBody.height(Math.floor(widgetBodyHeight));
        if (scope.widgetLayout != null) {
          return scope.widgetLayout.widgetBodyHeight = widgetBodyHeight;
        }
      };
      // Update on window resizing
      $widget.add('.title, .widget-footer').on('resize', _.debounce(function() {
        return scope.$apply(function() {
          return sizer();
        });
      }, 120, {
        leading: false,
        maxWait: 500
      }));
      // Run now & again in 100ms
      sizer();
      timer = $timeout(sizer, 100);
      scope.$on('$destroy', function() {
        $timeout.cancel(timer);
        return $widget.off('resize');
      });
    }
  };
});


Prompt:
Convert this JavaScript to CoffeeScript.
```javascript
/*
 * Copyright (c) 2013-2018 the original author or authors.
 *
 * Licensed under the MIT License (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.opensource.org/licenses/mit-license.php
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * either express or implied. See the License for the specific
 * language governing permissions and limitations under the License.
 */
cyclotronDirectives.directive('widgetBody', function($timeout) {
  return {
    restrict: 'C',
    link: function(scope, element, attrs) {
      var $widget, $widgetBody, sizer, timer;
      $widgetBody = $(element);
      $widget = $widgetBody.parent();
      sizer = function() {
        var $footer, $title, widgetBodyHeight;
        $title = $widget.find('.title');
        $footer = $widget.find('.widget-footer');
        widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight();
        widgetBodyHeight -= parseInt($widgetBody.css('marginTop')) + parseInt($widgetBody.css('marginBottom'));
        $widgetBody.height(Math.floor(widgetBodyHeight));
        if (scope.widgetLayout != null) {
          return scope.widgetLayout.widgetBodyHeight = widgetBodyHeight;
        }
      };
      // Update on window resizing
      $widget.add('.title, .widget-footer').on('resize', _.debounce(function() {
        return scope.$apply(function() {
          return sizer();
        });
      }, 120, {
        leading: false,
        maxWait: 500
      }));
      // Run now & again in 100ms
      sizer();
      timer = $timeout(sizer, 100);
      scope.$on('$destroy', function() {
        $timeout.cancel(timer);
        return $widget.off('resize');
      });
    }
  };
});
```

Response:
###
# Copyright (c) 2013-2018 the original author or authors.
#
# Licensed under the MIT License (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.opensource.org/licenses/mit-license.php
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
# either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
###

cyclotronDirectives.directive 'widgetBody', ($timeout) ->
    {
        restrict: 'C'

        link: (scope, element, attrs) ->
            $widgetBody = $(element)
            $widget = $widgetBody.parent()

            sizer = ->
                $title = $widget.find '.title'
                $footer = $widget.find '.widget-footer'
                widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight()
                widgetBodyHeight -= parseInt($widgetBody.css('marginTop')) + parseInt($widgetBody.css('marginBottom'))
                $widgetBody.height Math.floor(widgetBodyHeight)

                if scope.widgetLayout?
                    scope.widgetLayout.widgetBodyHeight = widgetBodyHeight

            # Update on window resizing
            $widget.add('.title, .widget-footer').on 'resize', _.debounce(->
                scope.$apply ->
                    sizer()
            , 120, { leading: false, maxWait: 500 })

            # Run now & again in 100ms
            sizer()
            timer = $timeout sizer, 100

            scope.$on '$destroy', ->
                $timeout.cancel timer
                $widget.off 'resize'

            return
    }


Prompt:
###
# Copyright (c) 2013-2018 the original author or authors.
#
# Licensed under the MIT License (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.opensource.org/licenses/mit-license.php
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
# either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
###

cyclotronDirectives.directive 'widgetBody', ($timeout) ->
    {
        restrict: 'C'

        link: (scope, element, attrs) ->
            $widgetBody = $(element)
            $widget = $widgetBody.parent()

            sizer = ->

Response:
$title = $widget.find '.title'
                $footer = $widget.find '.widget-footer'
                widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight()
                widgetBodyHeight -= parseInt($widgetBody.css('marginTop')) + parseInt($widgetBody.css('marginBottom'))
                $widgetBody.height Math.floor(widgetBodyHeight)

                if scope.widgetLayout?
                    scope.widgetLayout.widgetBodyHeight = widgetBodyHeight

            # Update on window resizing
            $widget.add('.title, .widget-footer').on 'resize', _.debounce(->
                scope.$apply ->
                    sizer()
            , 120, { leading: false, maxWait: 500 })

            # Run now & again in 100ms
            sizer()
            timer = $timeout sizer, 100

            scope.$on '$destroy', ->
                $timeout.cancel timer
                $widget.off 'resize'

            return
    }


Response:
###
# Copyright (c) 2013-2015 the original author or authors.
#
# Licensed under the MIT License (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.opensource.org/licenses/mit-license.php
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
# either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
###

cyclotronDirectives.directive 'widgetBody', ($timeout) ->
    {
        restrict: 'C'

        link: (scope, element, attrs) ->
            $widgetBody = $(element)
            $widget = $widgetBody.parent()

            sizer = ->
                $title = $widget.find '.title'
                $footer = $widget.find '.widget-footer'
                widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight()
                widgetBodyHeight -= parseInt($widgetBody.css('marginTop')) + parseInt($widgetBody.css('marginBottom'))
                $widgetBody.height Math.floor(widgetBodyHeight)

                if scope.widgetLayout?
                    scope.widgetLayout.widgetBodyHeight = widgetBodyHeight

            # Update on window resizing
            $widget.add('.title, .widget-footer').on 'resize', _.debounce(->
                scope.$apply ->
                    sizer()
            , 120, { leading: false, maxWait: 500 })

            # Run now & again in 100ms
            sizer()
            timer = $timeout sizer, 100

            scope.$on '$destroy', ->
                $timeout.cancel timer
                $widget.off 'resize'

            return
    }


Prompt:
Convert this CoffeeScript to JavaScript.
```coffeescript
###
# Copyright (c) 2013-2015 the original author or authors.
#
# Licensed under the MIT License (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.opensource.org/licenses/mit-license.php
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
# either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
###

cyclotronDirectives.directive 'widgetBody', ($timeout) ->
    {
        restrict: 'C'

        link: (scope, element, attrs) ->
            $widgetBody = $(element)
            $widget = $widgetBody.parent()

            sizer = ->
                $title = $widget.find '.title'
                $footer = $widget.find '.widget-footer'
                widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight()
                widgetBodyHeight -= parseInt($widgetBody.css('marginTop')) + parseInt($widgetBody.css('marginBottom'))
                $widgetBody.height Math.floor(widgetBodyHeight)

                if scope.widgetLayout?
                    scope.widgetLayout.widgetBodyHeight = widgetBodyHeight

            # Update on window resizing
            $widget.add('.title, .widget-footer').on 'resize', _.debounce(->
                scope.$apply ->
                    sizer()
            , 120, { leading: false, maxWait: 500 })

            # Run now & again in 100ms
            sizer()
            timer = $timeout sizer, 100

            scope.$on '$destroy', ->
                $timeout.cancel timer
                $widget.off 'resize'

            return
    }
```

Response:
/*
 * Copyright (c) 2013-2015 the original author or authors.
 *
 * Licensed under the MIT License (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.opensource.org/licenses/mit-license.php
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * either express or implied. See the License for the specific
 * language governing permissions and limitations under the License.
 */
cyclotronDirectives.directive('widgetBody', function($timeout) {
  return {
    restrict: 'C',
    link: function(scope, element, attrs) {
      var $widget, $widgetBody, sizer, timer;
      $widgetBody = $(element);
      $widget = $widgetBody.parent();
      sizer = function() {
        var $footer, $title, widgetBodyHeight;
        $title = $widget.find('.title');
        $footer = $widget.find('.widget-footer');
        widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight();
        widgetBodyHeight -= parseInt($widgetBody.css('marginTop')) + parseInt($widgetBody.css('marginBottom'));
        $widgetBody.height(Math.floor(widgetBodyHeight));
        if (scope.widgetLayout != null) {
          return scope.widgetLayout.widgetBodyHeight = widgetBodyHeight;
        }
      };
      // Update on window resizing
      $widget.add('.title, .widget-footer').on('resize', _.debounce(function() {
        return scope.$apply(function() {
          return sizer();
        });
      }, 120, {
        leading: false,
        maxWait: 500
      }));
      // Run now & again in 100ms
      sizer();
      timer = $timeout(sizer, 100);
      scope.$on('$destroy', function() {
        $timeout.cancel(timer);
        return $widget.off('resize');
      });
    }
  };
});


Prompt:
Convert this JavaScript to CoffeeScript.
```javascript
/*
 * Copyright (c) 2013-2015 the original author or authors.
 *
 * Licensed under the MIT License (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.opensource.org/licenses/mit-license.php
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * either express or implied. See the License for the specific
 * language governing permissions and limitations under the License.
 */
cyclotronDirectives.directive('widgetBody', function($timeout) {
  return {
    restrict: 'C',
    link: function(scope, element, attrs) {
      var $widget, $widgetBody, sizer, timer;
      $widgetBody = $(element);
      $widget = $widgetBody.parent();
      sizer = function() {
        var $footer, $title, widgetBodyHeight;
        $title = $widget.find('.title');
        $footer = $widget.find('.widget-footer');
        widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight();
        widgetBodyHeight -= parseInt($widgetBody.css('marginTop')) + parseInt($widgetBody.css('marginBottom'));
        $widgetBody.height(Math.floor(widgetBodyHeight));
        if (scope.widgetLayout != null) {
          return scope.widgetLayout.widgetBodyHeight = widgetBodyHeight;
        }
      };
      // Update on window resizing
      $widget.add('.title, .widget-footer').on('resize', _.debounce(function() {
        return scope.$apply(function() {
          return sizer();
        });
      }, 120, {
        leading: false,
        maxWait: 500
      }));
      // Run now & again in 100ms
      sizer();
      timer = $timeout(sizer, 100);
      scope.$on('$destroy', function() {
        $timeout.cancel(timer);
        return $widget.off('resize');
      });
    }
  };
});
```

Response:
###
# Copyright (c) 2013-2015 the original author or authors.
#
# Licensed under the MIT License (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.opensource.org/licenses/mit-license.php
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
# either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
###

cyclotronDirectives.directive 'widgetBody', ($timeout) ->
    {
        restrict: 'C'

        link: (scope, element, attrs) ->
            $widgetBody = $(element)
            $widget = $widgetBody.parent()

            sizer = ->
                $title = $widget.find '.title'
                $footer = $widget.find '.widget-footer'
                widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight()
                widgetBodyHeight -= parseInt($widgetBody.css('marginTop')) + parseInt($widgetBody.css('marginBottom'))
                $widgetBody.height Math.floor(widgetBodyHeight)

                if scope.widgetLayout?
                    scope.widgetLayout.widgetBodyHeight = widgetBodyHeight

            # Update on window resizing
            $widget.add('.title, .widget-footer').on 'resize', _.debounce(->
                scope.$apply ->
                    sizer()
            , 120, { leading: false, maxWait: 500 })

            # Run now & again in 100ms
            sizer()
            timer = $timeout sizer, 100

            scope.$on '$destroy', ->
                $timeout.cancel timer
                $widget.off 'resize'

            return
    }


Prompt:
###
# Copyright (c) 2013-2015 the original author or authors.
#
# Licensed under the MIT License (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.opensource.org/licenses/mit-license.php
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
# either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
###

cyclotronDirectives.directive 'widgetBody', ($timeout) ->
    {
        restrict: 'C'

        link: (scope, element, attrs) ->
            $widgetBody = $(element)
            $widget = $widgetBody.parent()

            sizer = ->

Response:
$title = $widget.find '.title'
                $footer = $widget.find '.widget-footer'
                widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight()
                widgetBodyHeight -= parseInt($widgetBody.css('marginTop')) + parseInt($widgetBody.css('marginBottom'))
                $widgetBody.height Math.floor(widgetBodyHeight)

                if scope.widgetLayout?
                    scope.widgetLayout.widgetBodyHeight = widgetBodyHeight

            # Update on window resizing
            $widget.add('.title, .widget-footer').on 'resize', _.debounce(->
                scope.$apply ->
                    sizer()
            , 120, { leading: false, maxWait: 500 })

            # Run now & again in 100ms
            sizer()
            timer = $timeout sizer, 100

            scope.$on '$destroy', ->
                $timeout.cancel timer
                $widget.off 'resize'

            return
    }


Response:
###
# Copyright (c) 2013-2015 the original author or authors.
#
# Licensed under the MIT License (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.opensource.org/licenses/mit-license.php
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
# either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
###

cyclotronDirectives.directive 'widgetBody', ($timeout) ->
    {
        restrict: 'C'

        link: (scope, element, attrs) ->
            $widgetBody = $(element)
            $widget = $widgetBody.parent()

            sizer = ->
                $title = $widget.find '.title'
                $footer = $widget.find '.widget-footer'
                widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight()
                $widgetBody.height Math.floor(widgetBodyHeight)

                if scope.widgetLayout?
                    scope.widgetLayout.widgetBodyHeight = widgetBodyHeight

            # Update on window resizing
            $widget.add('.title, .widget-footer').on 'resize', _.debounce(->
                scope.$apply ->
                    sizer()
            , 120, { leading: false, maxWait: 500 })

            # Run now & again in 100ms
            sizer()
            timer = $timeout sizer, 100

            scope.$on '$destroy', ->
                $timeout.cancel timer
                $widget.off 'resize'

            return
    }


Prompt:
Convert this CoffeeScript to JavaScript.
```coffeescript
###
# Copyright (c) 2013-2015 the original author or authors.
#
# Licensed under the MIT License (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.opensource.org/licenses/mit-license.php
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
# either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
###

cyclotronDirectives.directive 'widgetBody', ($timeout) ->
    {
        restrict: 'C'

        link: (scope, element, attrs) ->
            $widgetBody = $(element)
            $widget = $widgetBody.parent()

            sizer = ->
                $title = $widget.find '.title'
                $footer = $widget.find '.widget-footer'
                widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight()
                $widgetBody.height Math.floor(widgetBodyHeight)

                if scope.widgetLayout?
                    scope.widgetLayout.widgetBodyHeight = widgetBodyHeight

            # Update on window resizing
            $widget.add('.title, .widget-footer').on 'resize', _.debounce(->
                scope.$apply ->
                    sizer()
            , 120, { leading: false, maxWait: 500 })

            # Run now & again in 100ms
            sizer()
            timer = $timeout sizer, 100

            scope.$on '$destroy', ->
                $timeout.cancel timer
                $widget.off 'resize'

            return
    }
```

Response:
/*
 * Copyright (c) 2013-2015 the original author or authors.
 *
 * Licensed under the MIT License (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.opensource.org/licenses/mit-license.php
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * either express or implied. See the License for the specific
 * language governing permissions and limitations under the License.
 */
cyclotronDirectives.directive('widgetBody', function($timeout) {
  return {
    restrict: 'C',
    link: function(scope, element, attrs) {
      var $widget, $widgetBody, sizer, timer;
      $widgetBody = $(element);
      $widget = $widgetBody.parent();
      sizer = function() {
        var $footer, $title, widgetBodyHeight;
        $title = $widget.find('.title');
        $footer = $widget.find('.widget-footer');
        widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight();
        $widgetBody.height(Math.floor(widgetBodyHeight));
        if (scope.widgetLayout != null) {
          return scope.widgetLayout.widgetBodyHeight = widgetBodyHeight;
        }
      };
      // Update on window resizing
      $widget.add('.title, .widget-footer').on('resize', _.debounce(function() {
        return scope.$apply(function() {
          return sizer();
        });
      }, 120, {
        leading: false,
        maxWait: 500
      }));
      // Run now & again in 100ms
      sizer();
      timer = $timeout(sizer, 100);
      scope.$on('$destroy', function() {
        $timeout.cancel(timer);
        return $widget.off('resize');
      });
    }
  };
});


Prompt:
Convert this JavaScript to CoffeeScript.
```javascript
/*
 * Copyright (c) 2013-2015 the original author or authors.
 *
 * Licensed under the MIT License (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.opensource.org/licenses/mit-license.php
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * either express or implied. See the License for the specific
 * language governing permissions and limitations under the License.
 */
cyclotronDirectives.directive('widgetBody', function($timeout) {
  return {
    restrict: 'C',
    link: function(scope, element, attrs) {
      var $widget, $widgetBody, sizer, timer;
      $widgetBody = $(element);
      $widget = $widgetBody.parent();
      sizer = function() {
        var $footer, $title, widgetBodyHeight;
        $title = $widget.find('.title');
        $footer = $widget.find('.widget-footer');
        widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight();
        $widgetBody.height(Math.floor(widgetBodyHeight));
        if (scope.widgetLayout != null) {
          return scope.widgetLayout.widgetBodyHeight = widgetBodyHeight;
        }
      };
      // Update on window resizing
      $widget.add('.title, .widget-footer').on('resize', _.debounce(function() {
        return scope.$apply(function() {
          return sizer();
        });
      }, 120, {
        leading: false,
        maxWait: 500
      }));
      // Run now & again in 100ms
      sizer();
      timer = $timeout(sizer, 100);
      scope.$on('$destroy', function() {
        $timeout.cancel(timer);
        return $widget.off('resize');
      });
    }
  };
});
```

Response:
###
# Copyright (c) 2013-2015 the original author or authors.
#
# Licensed under the MIT License (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.opensource.org/licenses/mit-license.php
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
# either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
###

cyclotronDirectives.directive 'widgetBody', ($timeout) ->
    {
        restrict: 'C'

        link: (scope, element, attrs) ->
            $widgetBody = $(element)
            $widget = $widgetBody.parent()

            sizer = ->
                $title = $widget.find '.title'
                $footer = $widget.find '.widget-footer'
                widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight()
                $widgetBody.height Math.floor(widgetBodyHeight)

                if scope.widgetLayout?
                    scope.widgetLayout.widgetBodyHeight = widgetBodyHeight

            # Update on window resizing
            $widget.add('.title, .widget-footer').on 'resize', _.debounce(->
                scope.$apply ->
                    sizer()
            , 120, { leading: false, maxWait: 500 })

            # Run now & again in 100ms
            sizer()
            timer = $timeout sizer, 100

            scope.$on '$destroy', ->
                $timeout.cancel timer
                $widget.off 'resize'

            return
    }


Prompt:
###
# Copyright (c) 2013-2015 the original author or authors.
#
# Licensed under the MIT License (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.opensource.org/licenses/mit-license.php
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
# either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
###

cyclotronDirectives.directive 'widgetBody', ($timeout) ->
    {
        restrict: 'C'

        link: (scope, element, attrs) ->
            $widgetBody = $(element)
            $widget = $widgetBody.parent()

Response:
sizer = ->
                $title = $widget.find '.title'
                $footer = $widget.find '.widget-footer'
                widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight()
                $widgetBody.height Math.floor(widgetBodyHeight)

                if scope.widgetLayout?
                    scope.widgetLayout.widgetBodyHeight = widgetBodyHeight

            # Update on window resizing
            $widget.add('.title, .widget-footer').on 'resize', _.debounce(->
                scope.$apply ->
                    sizer()
            , 120, { leading: false, maxWait: 500 })

            # Run now & again in 100ms
            sizer()
            timer = $timeout sizer, 100

            scope.$on '$destroy', ->
                $timeout.cancel timer
                $widget.off 'resize'

            return
    }


Response:
###
# Copyright (c) 2013-2015 the original author or authors.
#
# Licensed under the MIT License (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.opensource.org/licenses/mit-license.php
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
# either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
###

cyclotronDirectives.directive 'widgetBody', ($timeout) ->
    {
        restrict: 'C'

        link: (scope, element, attrs) ->
            $widgetBody = $(element)
            $widget = $widgetBody.parent()

            sizer = ->
                $title = $widget.find '.title'
                $footer = $widget.find '.widget-footer'
                widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight()
                $widgetBody.height Math.floor(widgetBodyHeight)

                if scope.widgetLayout?
                    scope.widgetLayout.widgetBodyHeight = widgetBodyHeight

            # Update on window resizing
            $widget.add('.title, .widget-footer').on 'resize', _.throttle(->
                scope.$apply ->
                    sizer()
            , 65)

            # Run now & again in 100ms
            sizer()
            timer = $timeout sizer, 100

            scope.$on '$destroy', ->
                $timeout.cancel timer
                $widget.off 'resize'

            return
    }


Prompt:
Convert this CoffeeScript to JavaScript.
```coffeescript
###
# Copyright (c) 2013-2015 the original author or authors.
#
# Licensed under the MIT License (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.opensource.org/licenses/mit-license.php
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
# either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
###

cyclotronDirectives.directive 'widgetBody', ($timeout) ->
    {
        restrict: 'C'

        link: (scope, element, attrs) ->
            $widgetBody = $(element)
            $widget = $widgetBody.parent()

            sizer = ->
                $title = $widget.find '.title'
                $footer = $widget.find '.widget-footer'
                widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight()
                $widgetBody.height Math.floor(widgetBodyHeight)

                if scope.widgetLayout?
                    scope.widgetLayout.widgetBodyHeight = widgetBodyHeight

            # Update on window resizing
            $widget.add('.title, .widget-footer').on 'resize', _.throttle(->
                scope.$apply ->
                    sizer()
            , 65)

            # Run now & again in 100ms
            sizer()
            timer = $timeout sizer, 100

            scope.$on '$destroy', ->
                $timeout.cancel timer
                $widget.off 'resize'

            return
    }
```

Response:
/*
 * Copyright (c) 2013-2015 the original author or authors.
 *
 * Licensed under the MIT License (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.opensource.org/licenses/mit-license.php
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * either express or implied. See the License for the specific
 * language governing permissions and limitations under the License.
 */
cyclotronDirectives.directive('widgetBody', function($timeout) {
  return {
    restrict: 'C',
    link: function(scope, element, attrs) {
      var $widget, $widgetBody, sizer, timer;
      $widgetBody = $(element);
      $widget = $widgetBody.parent();
      sizer = function() {
        var $footer, $title, widgetBodyHeight;
        $title = $widget.find('.title');
        $footer = $widget.find('.widget-footer');
        widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight();
        $widgetBody.height(Math.floor(widgetBodyHeight));
        if (scope.widgetLayout != null) {
          return scope.widgetLayout.widgetBodyHeight = widgetBodyHeight;
        }
      };
      // Update on window resizing
      $widget.add('.title, .widget-footer').on('resize', _.throttle(function() {
        return scope.$apply(function() {
          return sizer();
        });
      }, 65));
      // Run now & again in 100ms
      sizer();
      timer = $timeout(sizer, 100);
      scope.$on('$destroy', function() {
        $timeout.cancel(timer);
        return $widget.off('resize');
      });
    }
  };
});


Prompt:
Convert this JavaScript to CoffeeScript.
```javascript
/*
 * Copyright (c) 2013-2015 the original author or authors.
 *
 * Licensed under the MIT License (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.opensource.org/licenses/mit-license.php
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * either express or implied. See the License for the specific
 * language governing permissions and limitations under the License.
 */
cyclotronDirectives.directive('widgetBody', function($timeout) {
  return {
    restrict: 'C',
    link: function(scope, element, attrs) {
      var $widget, $widgetBody, sizer, timer;
      $widgetBody = $(element);
      $widget = $widgetBody.parent();
      sizer = function() {
        var $footer, $title, widgetBodyHeight;
        $title = $widget.find('.title');
        $footer = $widget.find('.widget-footer');
        widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight();
        $widgetBody.height(Math.floor(widgetBodyHeight));
        if (scope.widgetLayout != null) {
          return scope.widgetLayout.widgetBodyHeight = widgetBodyHeight;
        }
      };
      // Update on window resizing
      $widget.add('.title, .widget-footer').on('resize', _.throttle(function() {
        return scope.$apply(function() {
          return sizer();
        });
      }, 65));
      // Run now & again in 100ms
      sizer();
      timer = $timeout(sizer, 100);
      scope.$on('$destroy', function() {
        $timeout.cancel(timer);
        return $widget.off('resize');
      });
    }
  };
});
```

Response:
###
# Copyright (c) 2013-2015 the original author or authors.
#
# Licensed under the MIT License (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.opensource.org/licenses/mit-license.php
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
# either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
###

cyclotronDirectives.directive 'widgetBody', ($timeout) ->
    {
        restrict: 'C'

        link: (scope, element, attrs) ->
            $widgetBody = $(element)
            $widget = $widgetBody.parent()

            sizer = ->
                $title = $widget.find '.title'
                $footer = $widget.find '.widget-footer'
                widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight()
                $widgetBody.height Math.floor(widgetBodyHeight)

                if scope.widgetLayout?
                    scope.widgetLayout.widgetBodyHeight = widgetBodyHeight

            # Update on window resizing
            $widget.add('.title, .widget-footer').on 'resize', _.throttle(->
                scope.$apply ->
                    sizer()
            , 65)

            # Run now & again in 100ms
            sizer()
            timer = $timeout sizer, 100

            scope.$on '$destroy', ->
                $timeout.cancel timer
                $widget.off 'resize'

            return
    }


Prompt:
###
# Copyright (c) 2013-2015 the original author or authors.
#
# Licensed under the MIT License (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.opensource.org/licenses/mit-license.php
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
# either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
###

cyclotronDirectives.directive 'widgetBody', ($timeout) ->
    {
        restrict: 'C'

        link: (scope, element, attrs) ->
            $widgetBody = $(element)
            $widget = $widgetBody.parent()

Response:
sizer = ->
                $title = $widget.find '.title'
                $footer = $widget.find '.widget-footer'
                widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight()
                $widgetBody.height Math.floor(widgetBodyHeight)

                if scope.widgetLayout?
                    scope.widgetLayout.widgetBodyHeight = widgetBodyHeight

            # Update on window resizing
            $widget.add('.title, .widget-footer').on 'resize', _.throttle(->
                scope.$apply ->
                    sizer()
            , 65)

            # Run now & again in 100ms
            sizer()
            timer = $timeout sizer, 100

            scope.$on '$destroy', ->
                $timeout.cancel timer
                $widget.off 'resize'

            return
    }


Response:
###
# Copyright (c) 2013-2015 the original author or authors.
#
# Licensed under the MIT License (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.opensource.org/licenses/mit-license.php
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
# either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
###

cyclotronDirectives.directive 'widgetBody', ($timeout) ->
    {
        restrict: 'C'

        link: (scope, element, attrs) ->
            $widgetBody = $(element)
            $widget = $widgetBody.parent()

            sizer = ->
                $title = $widget.find '.title'
                $footer = $widget.find '.widget-footer'
                widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight()
                $widgetBody.height Math.floor(widgetBodyHeight)

                if scope.layout?
                    scope.layout.widget.widgetBodyHeight = widgetBodyHeight

            # Update on window resizing
            $widget.add('.title, .widget-footer').on 'resize', _.throttle(->
                scope.$apply ->
                    sizer()
            , 65)

            # Run now & again in 100ms
            sizer()
            timer = $timeout sizer, 100

            scope.$on '$destroy', ->
                $timeout.cancel timer
                $widget.off 'resize'

            return
    }


Prompt:
Convert this CoffeeScript to JavaScript.
```coffeescript
###
# Copyright (c) 2013-2015 the original author or authors.
#
# Licensed under the MIT License (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.opensource.org/licenses/mit-license.php
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
# either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
###

cyclotronDirectives.directive 'widgetBody', ($timeout) ->
    {
        restrict: 'C'

        link: (scope, element, attrs) ->
            $widgetBody = $(element)
            $widget = $widgetBody.parent()

            sizer = ->
                $title = $widget.find '.title'
                $footer = $widget.find '.widget-footer'
                widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight()
                $widgetBody.height Math.floor(widgetBodyHeight)

                if scope.layout?
                    scope.layout.widget.widgetBodyHeight = widgetBodyHeight

            # Update on window resizing
            $widget.add('.title, .widget-footer').on 'resize', _.throttle(->
                scope.$apply ->
                    sizer()
            , 65)

            # Run now & again in 100ms
            sizer()
            timer = $timeout sizer, 100

            scope.$on '$destroy', ->
                $timeout.cancel timer
                $widget.off 'resize'

            return
    }
```

Response:
/*
 * Copyright (c) 2013-2015 the original author or authors.
 *
 * Licensed under the MIT License (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.opensource.org/licenses/mit-license.php
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * either express or implied. See the License for the specific
 * language governing permissions and limitations under the License.
 */
cyclotronDirectives.directive('widgetBody', function($timeout) {
  return {
    restrict: 'C',
    link: function(scope, element, attrs) {
      var $widget, $widgetBody, sizer, timer;
      $widgetBody = $(element);
      $widget = $widgetBody.parent();
      sizer = function() {
        var $footer, $title, widgetBodyHeight;
        $title = $widget.find('.title');
        $footer = $widget.find('.widget-footer');
        widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight();
        $widgetBody.height(Math.floor(widgetBodyHeight));
        if (scope.layout != null) {
          return scope.layout.widget.widgetBodyHeight = widgetBodyHeight;
        }
      };
      // Update on window resizing
      $widget.add('.title, .widget-footer').on('resize', _.throttle(function() {
        return scope.$apply(function() {
          return sizer();
        });
      }, 65));
      // Run now & again in 100ms
      sizer();
      timer = $timeout(sizer, 100);
      scope.$on('$destroy', function() {
        $timeout.cancel(timer);
        return $widget.off('resize');
      });
    }
  };
});


Prompt:
Convert this JavaScript to CoffeeScript.
```javascript
/*
 * Copyright (c) 2013-2015 the original author or authors.
 *
 * Licensed under the MIT License (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.opensource.org/licenses/mit-license.php
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * either express or implied. See the License for the specific
 * language governing permissions and limitations under the License.
 */
cyclotronDirectives.directive('widgetBody', function($timeout) {
  return {
    restrict: 'C',
    link: function(scope, element, attrs) {
      var $widget, $widgetBody, sizer, timer;
      $widgetBody = $(element);
      $widget = $widgetBody.parent();
      sizer = function() {
        var $footer, $title, widgetBodyHeight;
        $title = $widget.find('.title');
        $footer = $widget.find('.widget-footer');
        widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight();
        $widgetBody.height(Math.floor(widgetBodyHeight));
        if (scope.layout != null) {
          return scope.layout.widget.widgetBodyHeight = widgetBodyHeight;
        }
      };
      // Update on window resizing
      $widget.add('.title, .widget-footer').on('resize', _.throttle(function() {
        return scope.$apply(function() {
          return sizer();
        });
      }, 65));
      // Run now & again in 100ms
      sizer();
      timer = $timeout(sizer, 100);
      scope.$on('$destroy', function() {
        $timeout.cancel(timer);
        return $widget.off('resize');
      });
    }
  };
});
```

Response:
###
# Copyright (c) 2013-2015 the original author or authors.
#
# Licensed under the MIT License (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.opensource.org/licenses/mit-license.php
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
# either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
###

cyclotronDirectives.directive 'widgetBody', ($timeout) ->
    {
        restrict: 'C'

        link: (scope, element, attrs) ->
            $widgetBody = $(element)
            $widget = $widgetBody.parent()

            sizer = ->
                $title = $widget.find '.title'
                $footer = $widget.find '.widget-footer'
                widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight()
                $widgetBody.height Math.floor(widgetBodyHeight)

                if scope.layout?
                    scope.layout.widget.widgetBodyHeight = widgetBodyHeight

            # Update on window resizing
            $widget.add('.title, .widget-footer').on 'resize', _.throttle(->
                scope.$apply ->
                    sizer()
            , 65)

            # Run now & again in 100ms
            sizer()
            timer = $timeout sizer, 100

            scope.$on '$destroy', ->
                $timeout.cancel timer
                $widget.off 'resize'

            return
    }


Prompt:
###
# Copyright (c) 2013-2015 the original author or authors.
#
# Licensed under the MIT License (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.opensource.org/licenses/mit-license.php
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
# either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
###

cyclotronDirectives.directive 'widgetBody', ($timeout) ->
    {
        restrict: 'C'

        link: (scope, element, attrs) ->
            $widgetBody = $(element)
            $widget = $widgetBody.parent()

Response:
sizer = ->
                $title = $widget.find '.title'
                $footer = $widget.find '.widget-footer'
                widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight()
                $widgetBody.height Math.floor(widgetBodyHeight)

                if scope.layout?
                    scope.layout.widget.widgetBodyHeight = widgetBodyHeight

            # Update on window resizing
            $widget.add('.title, .widget-footer').on 'resize', _.throttle(->
                scope.$apply ->
                    sizer()
            , 65)

            # Run now & again in 100ms
            sizer()
            timer = $timeout sizer, 100

            scope.$on '$destroy', ->
                $timeout.cancel timer
                $widget.off 'resize'

            return
    }


Response:
###
# Copyright (c) 2013-2015 the original author or authors.
#
# Licensed under the MIT License (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.opensource.org/licenses/mit-license.php
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
# either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
###

cyclotronDirectives.directive 'widgetBody', ($timeout) ->
    {
        restrict: 'C'

        link: (scope, element, attrs) ->
            $widgetBody = $(element)
            $widget = $widgetBody.parent()

            sizer = ->
                $title = $widget.find('.title')
                $footer = $widget.find('.widget-footer')
                widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight()
                $widgetBody.height(Math.floor(widgetBodyHeight))

            # Update on window resizing
            $widget.add('.title, .widget-footer').on 'resize', _.throttle(->
                scope.$apply ->
                    sizer()
            , 65)

            # Run now & again in 100ms
            sizer()
            timer = $timeout(sizer, 100)

            scope.$on '$destroy', ->
                $timeout.cancel timer
                $widget.off('resize')

            return
    }


Prompt:
Convert this CoffeeScript to JavaScript.
```coffeescript
###
# Copyright (c) 2013-2015 the original author or authors.
#
# Licensed under the MIT License (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.opensource.org/licenses/mit-license.php
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
# either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
###

cyclotronDirectives.directive 'widgetBody', ($timeout) ->
    {
        restrict: 'C'

        link: (scope, element, attrs) ->
            $widgetBody = $(element)
            $widget = $widgetBody.parent()

            sizer = ->
                $title = $widget.find('.title')
                $footer = $widget.find('.widget-footer')
                widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight()
                $widgetBody.height(Math.floor(widgetBodyHeight))

            # Update on window resizing
            $widget.add('.title, .widget-footer').on 'resize', _.throttle(->
                scope.$apply ->
                    sizer()
            , 65)

            # Run now & again in 100ms
            sizer()
            timer = $timeout(sizer, 100)

            scope.$on '$destroy', ->
                $timeout.cancel timer
                $widget.off('resize')

            return
    }
```

Response:
/*
 * Copyright (c) 2013-2015 the original author or authors.
 *
 * Licensed under the MIT License (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.opensource.org/licenses/mit-license.php
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * either express or implied. See the License for the specific
 * language governing permissions and limitations under the License.
 */
cyclotronDirectives.directive('widgetBody', function($timeout) {
  return {
    restrict: 'C',
    link: function(scope, element, attrs) {
      var $widget, $widgetBody, sizer, timer;
      $widgetBody = $(element);
      $widget = $widgetBody.parent();
      sizer = function() {
        var $footer, $title, widgetBodyHeight;
        $title = $widget.find('.title');
        $footer = $widget.find('.widget-footer');
        widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight();
        return $widgetBody.height(Math.floor(widgetBodyHeight));
      };
      // Update on window resizing
      $widget.add('.title, .widget-footer').on('resize', _.throttle(function() {
        return scope.$apply(function() {
          return sizer();
        });
      }, 65));
      // Run now & again in 100ms
      sizer();
      timer = $timeout(sizer, 100);
      scope.$on('$destroy', function() {
        $timeout.cancel(timer);
        return $widget.off('resize');
      });
    }
  };
});


Prompt:
Convert this JavaScript to CoffeeScript.
```javascript
/*
 * Copyright (c) 2013-2015 the original author or authors.
 *
 * Licensed under the MIT License (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.opensource.org/licenses/mit-license.php
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * either express or implied. See the License for the specific
 * language governing permissions and limitations under the License.
 */
cyclotronDirectives.directive('widgetBody', function($timeout) {
  return {
    restrict: 'C',
    link: function(scope, element, attrs) {
      var $widget, $widgetBody, sizer, timer;
      $widgetBody = $(element);
      $widget = $widgetBody.parent();
      sizer = function() {
        var $footer, $title, widgetBodyHeight;
        $title = $widget.find('.title');
        $footer = $widget.find('.widget-footer');
        widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight();
        return $widgetBody.height(Math.floor(widgetBodyHeight));
      };
      // Update on window resizing
      $widget.add('.title, .widget-footer').on('resize', _.throttle(function() {
        return scope.$apply(function() {
          return sizer();
        });
      }, 65));
      // Run now & again in 100ms
      sizer();
      timer = $timeout(sizer, 100);
      scope.$on('$destroy', function() {
        $timeout.cancel(timer);
        return $widget.off('resize');
      });
    }
  };
});
```

Response:
###
# Copyright (c) 2013-2015 the original author or authors.
#
# Licensed under the MIT License (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.opensource.org/licenses/mit-license.php
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
# either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
###

cyclotronDirectives.directive 'widgetBody', ($timeout) ->
    {
        restrict: 'C'

        link: (scope, element, attrs) ->
            $widgetBody = $(element)
            $widget = $widgetBody.parent()

            sizer = ->
                $title = $widget.find('.title')
                $footer = $widget.find('.widget-footer')
                widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight()
                $widgetBody.height(Math.floor(widgetBodyHeight))

            # Update on window resizing
            $widget.add('.title, .widget-footer').on 'resize', _.throttle(->
                scope.$apply ->
                    sizer()
            , 65)

            # Run now & again in 100ms
            sizer()
            timer = $timeout(sizer, 100)

            scope.$on '$destroy', ->
                $timeout.cancel timer
                $widget.off('resize')

            return
    }


Prompt:
###
# Copyright (c) 2013-2015 the original author or authors.
#
# Licensed under the MIT License (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.opensource.org/licenses/mit-license.php
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
# either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
###

cyclotronDirectives.directive 'widgetBody', ($timeout) ->
    {
        restrict: 'C'

        link: (scope, element, attrs) ->
            $widgetBody = $(element)
            $widget = $widgetBody.parent()

Response:
sizer = ->
                $title = $widget.find('.title')
                $footer = $widget.find('.widget-footer')
                widgetBodyHeight = $widget.outerHeight() - $title.outerHeight() - $footer.outerHeight()
                $widgetBody.height(Math.floor(widgetBodyHeight))

            # Update on window resizing
            $widget.add('.title, .widget-footer').on 'resize', _.throttle(->
                scope.$apply ->
                    sizer()
            , 65)

            # Run now & again in 100ms
            sizer()
            timer = $timeout(sizer, 100)

            scope.$on '$destroy', ->
                $timeout.cancel timer
                $widget.off('resize')

            return
    }