Prompt:
Convert this JavaScript to CoffeeScript.
```javascript
it('should work with setInterval', function(done) {
  var interval_id;
  return interval_id = setInterval(function() {
    assert.deepEqual(Array.prototype.slice.call(arguments), [1, 2, 3]);
    clearInterval(interval_id);
    return done();
  }, 1, 1, 2, 3);
});
```

Response:
it 'should work with setInterval', (done) ->
    interval_id = setInterval ->
      assert.deepEqual(Array::slice.call(arguments), [1, 2, 3])
      clearInterval(interval_id)
      done()
    , 1, 1, 2, 3


Response:
do ($$ = Quo) ->

    VENDORS = [ "-webkit-", "-moz-", "-ms-", "-o-", "" ]

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->
            if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        if typeof value != "undefined"
            @each -> @style[property] = value
        else
            this[0].style[property] or _computedStyle(this[0], property)

    $$.fn.css = (property, value) -> @style property, value

    $$.fn.vendor = (property, value) ->
        @style("#{vendor}#{property}", value) for vendor in VENDORS

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]


Prompt:
Convert this CoffeeScript to JavaScript.
```coffeescript
do ($$ = Quo) ->

    VENDORS = [ "-webkit-", "-moz-", "-ms-", "-o-", "" ]

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->
            if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        if typeof value != "undefined"
            @each -> @style[property] = value
        else
            this[0].style[property] or _computedStyle(this[0], property)

    $$.fn.css = (property, value) -> @style property, value

    $$.fn.vendor = (property, value) ->
        @style("#{vendor}#{property}", value) for vendor in VENDORS

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]
```

Response:
(function($$) {
  var VENDORS, _computedStyle, _existsClass;
  VENDORS = ["-webkit-", "-moz-", "-ms-", "-o-", ""];
  $$.fn.addClass = function(name) {
    return this.each(function() {
      if (!_existsClass(name, this.className)) {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.removeClass = function(name) {
    return this.each(function() {
      if (!name) {
        return this.className = "";
      } else {
        if (_existsClass(name, this.className)) {
          return this.className = this.className.replace(name, " ").replace(/\s+/g, " ").trim();
        }
      }
    });
  };
  $$.fn.toggleClass = function(name) {
    return this.each(function() {
      if (_existsClass(name, this.className)) {
        return this.className = this.className.replace(name, " ");
      } else {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.hasClass = function(name) {
    return _existsClass(name, this[0].className);
  };
  $$.fn.style = function(property, value) {
    if (typeof value !== "undefined") {
      return this.each(function() {
        return this.style[property] = value;
      });
    } else {
      return this[0].style[property] || _computedStyle(this[0], property);
    }
  };
  $$.fn.css = function(property, value) {
    return this.style(property, value);
  };
  $$.fn.vendor = function(property, value) {
    var i, len, results, vendor;
    results = [];
    for (i = 0, len = VENDORS.length; i < len; i++) {
      vendor = VENDORS[i];
      results.push(this.style(`${vendor}${property}`, value));
    }
    return results;
  };
  _existsClass = function(name, className) {
    var classes;
    classes = className.split(/\s+/g);
    return classes.indexOf(name) >= 0;
  };
  return _computedStyle = function(element, property) {
    return document.defaultView.getComputedStyle(element, "")[property];
  };
})(Quo);


Prompt:
Convert this JavaScript to CoffeeScript.
```javascript
(function($$) {
  var VENDORS, _computedStyle, _existsClass;
  VENDORS = ["-webkit-", "-moz-", "-ms-", "-o-", ""];
  $$.fn.addClass = function(name) {
    return this.each(function() {
      if (!_existsClass(name, this.className)) {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.removeClass = function(name) {
    return this.each(function() {
      if (!name) {
        return this.className = "";
      } else {
        if (_existsClass(name, this.className)) {
          return this.className = this.className.replace(name, " ").replace(/\s+/g, " ").trim();
        }
      }
    });
  };
  $$.fn.toggleClass = function(name) {
    return this.each(function() {
      if (_existsClass(name, this.className)) {
        return this.className = this.className.replace(name, " ");
      } else {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.hasClass = function(name) {
    return _existsClass(name, this[0].className);
  };
  $$.fn.style = function(property, value) {
    if (typeof value !== "undefined") {
      return this.each(function() {
        return this.style[property] = value;
      });
    } else {
      return this[0].style[property] || _computedStyle(this[0], property);
    }
  };
  $$.fn.css = function(property, value) {
    return this.style(property, value);
  };
  $$.fn.vendor = function(property, value) {
    var i, len, results, vendor;
    results = [];
    for (i = 0, len = VENDORS.length; i < len; i++) {
      vendor = VENDORS[i];
      results.push(this.style(`${vendor}${property}`, value));
    }
    return results;
  };
  _existsClass = function(name, className) {
    var classes;
    classes = className.split(/\s+/g);
    return classes.indexOf(name) >= 0;
  };
  return _computedStyle = function(element, property) {
    return document.defaultView.getComputedStyle(element, "")[property];
  };
})(Quo);
```

Response:
do ($$ = Quo) ->

    VENDORS = [ "-webkit-", "-moz-", "-ms-", "-o-", "" ]

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->
            if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        if typeof value != "undefined"
            @each -> @style[property] = value
        else
            this[0].style[property] or _computedStyle(this[0], property)

    $$.fn.css = (property, value) -> @style property, value

    $$.fn.vendor = (property, value) ->
        @style("#{vendor}#{property}", value) for vendor in VENDORS

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]


Prompt:
do ($$ = Quo) ->

    VENDORS = [ "-webkit-", "-moz-", "-ms-", "-o-", "" ]

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->
            if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else

Response:
@className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        if typeof value != "undefined"
            @each -> @style[property] = value
        else
            this[0].style[property] or _computedStyle(this[0], property)

    $$.fn.css = (property, value) -> @style property, value

    $$.fn.vendor = (property, value) ->
        @style("#{vendor}#{property}", value) for vendor in VENDORS

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]


Response:
do ($$ = Quo) ->

    VENDORS = [ "-webkit-", "-moz-", "-ms-", "-o-", "" ]

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->
            if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        this.length > 0 and _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        if value
            @each -> @style[property] = value
        else if this.length > 0
            this[0].style[property] or _computedStyle(this[0], property)

    $$.fn.css = (property, value) -> @style property, value

    $$.fn.vendor = (property, value) ->
        @style("#{vendor}#{property}", value) for vendor in VENDORS

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]


Prompt:
Convert this CoffeeScript to JavaScript.
```coffeescript
do ($$ = Quo) ->

    VENDORS = [ "-webkit-", "-moz-", "-ms-", "-o-", "" ]

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->
            if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        this.length > 0 and _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        if value
            @each -> @style[property] = value
        else if this.length > 0
            this[0].style[property] or _computedStyle(this[0], property)

    $$.fn.css = (property, value) -> @style property, value

    $$.fn.vendor = (property, value) ->
        @style("#{vendor}#{property}", value) for vendor in VENDORS

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]
```

Response:
(function($$) {
  var VENDORS, _computedStyle, _existsClass;
  VENDORS = ["-webkit-", "-moz-", "-ms-", "-o-", ""];
  $$.fn.addClass = function(name) {
    return this.each(function() {
      if (!_existsClass(name, this.className)) {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.removeClass = function(name) {
    return this.each(function() {
      if (!name) {
        return this.className = "";
      } else {
        if (_existsClass(name, this.className)) {
          return this.className = this.className.replace(name, " ").replace(/\s+/g, " ").trim();
        }
      }
    });
  };
  $$.fn.toggleClass = function(name) {
    return this.each(function() {
      if (_existsClass(name, this.className)) {
        return this.className = this.className.replace(name, " ");
      } else {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.hasClass = function(name) {
    return this.length > 0 && _existsClass(name, this[0].className);
  };
  $$.fn.style = function(property, value) {
    if (value) {
      return this.each(function() {
        return this.style[property] = value;
      });
    } else if (this.length > 0) {
      return this[0].style[property] || _computedStyle(this[0], property);
    }
  };
  $$.fn.css = function(property, value) {
    return this.style(property, value);
  };
  $$.fn.vendor = function(property, value) {
    var i, len, results, vendor;
    results = [];
    for (i = 0, len = VENDORS.length; i < len; i++) {
      vendor = VENDORS[i];
      results.push(this.style(`${vendor}${property}`, value));
    }
    return results;
  };
  _existsClass = function(name, className) {
    var classes;
    classes = className.split(/\s+/g);
    return classes.indexOf(name) >= 0;
  };
  return _computedStyle = function(element, property) {
    return document.defaultView.getComputedStyle(element, "")[property];
  };
})(Quo);


Prompt:
Convert this JavaScript to CoffeeScript.
```javascript
(function($$) {
  var VENDORS, _computedStyle, _existsClass;
  VENDORS = ["-webkit-", "-moz-", "-ms-", "-o-", ""];
  $$.fn.addClass = function(name) {
    return this.each(function() {
      if (!_existsClass(name, this.className)) {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.removeClass = function(name) {
    return this.each(function() {
      if (!name) {
        return this.className = "";
      } else {
        if (_existsClass(name, this.className)) {
          return this.className = this.className.replace(name, " ").replace(/\s+/g, " ").trim();
        }
      }
    });
  };
  $$.fn.toggleClass = function(name) {
    return this.each(function() {
      if (_existsClass(name, this.className)) {
        return this.className = this.className.replace(name, " ");
      } else {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.hasClass = function(name) {
    return this.length > 0 && _existsClass(name, this[0].className);
  };
  $$.fn.style = function(property, value) {
    if (value) {
      return this.each(function() {
        return this.style[property] = value;
      });
    } else if (this.length > 0) {
      return this[0].style[property] || _computedStyle(this[0], property);
    }
  };
  $$.fn.css = function(property, value) {
    return this.style(property, value);
  };
  $$.fn.vendor = function(property, value) {
    var i, len, results, vendor;
    results = [];
    for (i = 0, len = VENDORS.length; i < len; i++) {
      vendor = VENDORS[i];
      results.push(this.style(`${vendor}${property}`, value));
    }
    return results;
  };
  _existsClass = function(name, className) {
    var classes;
    classes = className.split(/\s+/g);
    return classes.indexOf(name) >= 0;
  };
  return _computedStyle = function(element, property) {
    return document.defaultView.getComputedStyle(element, "")[property];
  };
})(Quo);
```

Response:
do ($$ = Quo) ->

    VENDORS = [ "-webkit-", "-moz-", "-ms-", "-o-", "" ]

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->
            if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        this.length > 0 and _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        if value
            @each -> @style[property] = value
        else if this.length > 0
            this[0].style[property] or _computedStyle(this[0], property)

    $$.fn.css = (property, value) -> @style property, value

    $$.fn.vendor = (property, value) ->
        @style("#{vendor}#{property}", value) for vendor in VENDORS

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]


Prompt:
do ($$ = Quo) ->

    VENDORS = [ "-webkit-", "-moz-", "-ms-", "-o-", "" ]

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->
            if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else

Response:
@className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        this.length > 0 and _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        if value
            @each -> @style[property] = value
        else if this.length > 0
            this[0].style[property] or _computedStyle(this[0], property)

    $$.fn.css = (property, value) -> @style property, value

    $$.fn.vendor = (property, value) ->
        @style("#{vendor}#{property}", value) for vendor in VENDORS

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]


Response:
do ($$ = Quo) ->

    VENDORS = [ "-webkit-", "-moz-", "-ms-", "-o-", "" ]

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->
            if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        if value
            @each -> @style[property] = value
        else
            this[0].style[property] or _computedStyle(this[0], property)

    $$.fn.css = (property, value) -> @style property, value

    $$.fn.vendor = (property, value) ->
        @style("#{vendor}#{property}", value) for vendor in VENDORS

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]


Prompt:
Convert this CoffeeScript to JavaScript.
```coffeescript
do ($$ = Quo) ->

    VENDORS = [ "-webkit-", "-moz-", "-ms-", "-o-", "" ]

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->
            if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        if value
            @each -> @style[property] = value
        else
            this[0].style[property] or _computedStyle(this[0], property)

    $$.fn.css = (property, value) -> @style property, value

    $$.fn.vendor = (property, value) ->
        @style("#{vendor}#{property}", value) for vendor in VENDORS

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]
```

Response:
(function($$) {
  var VENDORS, _computedStyle, _existsClass;
  VENDORS = ["-webkit-", "-moz-", "-ms-", "-o-", ""];
  $$.fn.addClass = function(name) {
    return this.each(function() {
      if (!_existsClass(name, this.className)) {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.removeClass = function(name) {
    return this.each(function() {
      if (!name) {
        return this.className = "";
      } else {
        if (_existsClass(name, this.className)) {
          return this.className = this.className.replace(name, " ").replace(/\s+/g, " ").trim();
        }
      }
    });
  };
  $$.fn.toggleClass = function(name) {
    return this.each(function() {
      if (_existsClass(name, this.className)) {
        return this.className = this.className.replace(name, " ");
      } else {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.hasClass = function(name) {
    return _existsClass(name, this[0].className);
  };
  $$.fn.style = function(property, value) {
    if (value) {
      return this.each(function() {
        return this.style[property] = value;
      });
    } else {
      return this[0].style[property] || _computedStyle(this[0], property);
    }
  };
  $$.fn.css = function(property, value) {
    return this.style(property, value);
  };
  $$.fn.vendor = function(property, value) {
    var i, len, results, vendor;
    results = [];
    for (i = 0, len = VENDORS.length; i < len; i++) {
      vendor = VENDORS[i];
      results.push(this.style(`${vendor}${property}`, value));
    }
    return results;
  };
  _existsClass = function(name, className) {
    var classes;
    classes = className.split(/\s+/g);
    return classes.indexOf(name) >= 0;
  };
  return _computedStyle = function(element, property) {
    return document.defaultView.getComputedStyle(element, "")[property];
  };
})(Quo);


Prompt:
Convert this JavaScript to CoffeeScript.
```javascript
(function($$) {
  var VENDORS, _computedStyle, _existsClass;
  VENDORS = ["-webkit-", "-moz-", "-ms-", "-o-", ""];
  $$.fn.addClass = function(name) {
    return this.each(function() {
      if (!_existsClass(name, this.className)) {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.removeClass = function(name) {
    return this.each(function() {
      if (!name) {
        return this.className = "";
      } else {
        if (_existsClass(name, this.className)) {
          return this.className = this.className.replace(name, " ").replace(/\s+/g, " ").trim();
        }
      }
    });
  };
  $$.fn.toggleClass = function(name) {
    return this.each(function() {
      if (_existsClass(name, this.className)) {
        return this.className = this.className.replace(name, " ");
      } else {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.hasClass = function(name) {
    return _existsClass(name, this[0].className);
  };
  $$.fn.style = function(property, value) {
    if (value) {
      return this.each(function() {
        return this.style[property] = value;
      });
    } else {
      return this[0].style[property] || _computedStyle(this[0], property);
    }
  };
  $$.fn.css = function(property, value) {
    return this.style(property, value);
  };
  $$.fn.vendor = function(property, value) {
    var i, len, results, vendor;
    results = [];
    for (i = 0, len = VENDORS.length; i < len; i++) {
      vendor = VENDORS[i];
      results.push(this.style(`${vendor}${property}`, value));
    }
    return results;
  };
  _existsClass = function(name, className) {
    var classes;
    classes = className.split(/\s+/g);
    return classes.indexOf(name) >= 0;
  };
  return _computedStyle = function(element, property) {
    return document.defaultView.getComputedStyle(element, "")[property];
  };
})(Quo);
```

Response:
do ($$ = Quo) ->

    VENDORS = [ "-webkit-", "-moz-", "-ms-", "-o-", "" ]

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->
            if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        if value
            @each -> @style[property] = value
        else
            this[0].style[property] or _computedStyle(this[0], property)

    $$.fn.css = (property, value) -> @style property, value

    $$.fn.vendor = (property, value) ->
        @style("#{vendor}#{property}", value) for vendor in VENDORS

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]


Prompt:
do ($$ = Quo) ->

    VENDORS = [ "-webkit-", "-moz-", "-ms-", "-o-", "" ]

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->
            if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else

Response:
@className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        if value
            @each -> @style[property] = value
        else
            this[0].style[property] or _computedStyle(this[0], property)

    $$.fn.css = (property, value) -> @style property, value

    $$.fn.vendor = (property, value) ->
        @style("#{vendor}#{property}", value) for vendor in VENDORS

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]


Response:
do ($$ = Quo) ->

    VENDORS = [ "-webkit-", "-moz-", "-ms-", "-o-", "" ]

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->
            if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        if value
            @each -> @style[property] = value
        else
            this[0].style[property] or _computedStyle(this[0], property)

    $$.fn.vendor = (property, value) ->
        @style("#{vendor}#{property}", value) for vendor in VENDORS

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]


Prompt:
Convert this CoffeeScript to JavaScript.
```coffeescript
do ($$ = Quo) ->

    VENDORS = [ "-webkit-", "-moz-", "-ms-", "-o-", "" ]

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->
            if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        if value
            @each -> @style[property] = value
        else
            this[0].style[property] or _computedStyle(this[0], property)

    $$.fn.vendor = (property, value) ->
        @style("#{vendor}#{property}", value) for vendor in VENDORS

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]
```

Response:
(function($$) {
  var VENDORS, _computedStyle, _existsClass;
  VENDORS = ["-webkit-", "-moz-", "-ms-", "-o-", ""];
  $$.fn.addClass = function(name) {
    return this.each(function() {
      if (!_existsClass(name, this.className)) {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.removeClass = function(name) {
    return this.each(function() {
      if (!name) {
        return this.className = "";
      } else {
        if (_existsClass(name, this.className)) {
          return this.className = this.className.replace(name, " ").replace(/\s+/g, " ").trim();
        }
      }
    });
  };
  $$.fn.toggleClass = function(name) {
    return this.each(function() {
      if (_existsClass(name, this.className)) {
        return this.className = this.className.replace(name, " ");
      } else {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.hasClass = function(name) {
    return _existsClass(name, this[0].className);
  };
  $$.fn.style = function(property, value) {
    if (value) {
      return this.each(function() {
        return this.style[property] = value;
      });
    } else {
      return this[0].style[property] || _computedStyle(this[0], property);
    }
  };
  $$.fn.vendor = function(property, value) {
    var i, len, results, vendor;
    results = [];
    for (i = 0, len = VENDORS.length; i < len; i++) {
      vendor = VENDORS[i];
      results.push(this.style(`${vendor}${property}`, value));
    }
    return results;
  };
  _existsClass = function(name, className) {
    var classes;
    classes = className.split(/\s+/g);
    return classes.indexOf(name) >= 0;
  };
  return _computedStyle = function(element, property) {
    return document.defaultView.getComputedStyle(element, "")[property];
  };
})(Quo);


Prompt:
Convert this JavaScript to CoffeeScript.
```javascript
(function($$) {
  var VENDORS, _computedStyle, _existsClass;
  VENDORS = ["-webkit-", "-moz-", "-ms-", "-o-", ""];
  $$.fn.addClass = function(name) {
    return this.each(function() {
      if (!_existsClass(name, this.className)) {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.removeClass = function(name) {
    return this.each(function() {
      if (!name) {
        return this.className = "";
      } else {
        if (_existsClass(name, this.className)) {
          return this.className = this.className.replace(name, " ").replace(/\s+/g, " ").trim();
        }
      }
    });
  };
  $$.fn.toggleClass = function(name) {
    return this.each(function() {
      if (_existsClass(name, this.className)) {
        return this.className = this.className.replace(name, " ");
      } else {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.hasClass = function(name) {
    return _existsClass(name, this[0].className);
  };
  $$.fn.style = function(property, value) {
    if (value) {
      return this.each(function() {
        return this.style[property] = value;
      });
    } else {
      return this[0].style[property] || _computedStyle(this[0], property);
    }
  };
  $$.fn.vendor = function(property, value) {
    var i, len, results, vendor;
    results = [];
    for (i = 0, len = VENDORS.length; i < len; i++) {
      vendor = VENDORS[i];
      results.push(this.style(`${vendor}${property}`, value));
    }
    return results;
  };
  _existsClass = function(name, className) {
    var classes;
    classes = className.split(/\s+/g);
    return classes.indexOf(name) >= 0;
  };
  return _computedStyle = function(element, property) {
    return document.defaultView.getComputedStyle(element, "")[property];
  };
})(Quo);
```

Response:
do ($$ = Quo) ->

    VENDORS = [ "-webkit-", "-moz-", "-ms-", "-o-", "" ]

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->
            if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        if value
            @each -> @style[property] = value
        else
            this[0].style[property] or _computedStyle(this[0], property)

    $$.fn.vendor = (property, value) ->
        @style("#{vendor}#{property}", value) for vendor in VENDORS

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]


Prompt:
do ($$ = Quo) ->

    VENDORS = [ "-webkit-", "-moz-", "-ms-", "-o-", "" ]

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->
            if _existsClass(name, @className)
                @className = @className.replace(name, " ")

Response:
else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        if value
            @each -> @style[property] = value
        else
            this[0].style[property] or _computedStyle(this[0], property)

    $$.fn.vendor = (property, value) ->
        @style("#{vendor}#{property}", value) for vendor in VENDORS

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]


Response:
do ($$ = Quo) ->

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->
            if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        (if (not value) then this[0].style[property] or _computedStyle(this[0], property) else @each(->
            @style[property] = value
        ))

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]


Prompt:
Convert this CoffeeScript to JavaScript.
```coffeescript
do ($$ = Quo) ->

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->
            if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        (if (not value) then this[0].style[property] or _computedStyle(this[0], property) else @each(->
            @style[property] = value
        ))

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]
```

Response:
(function($$) {
  var _computedStyle, _existsClass;
  $$.fn.addClass = function(name) {
    return this.each(function() {
      if (!_existsClass(name, this.className)) {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.removeClass = function(name) {
    return this.each(function() {
      if (!name) {
        return this.className = "";
      } else {
        if (_existsClass(name, this.className)) {
          return this.className = this.className.replace(name, " ").replace(/\s+/g, " ").trim();
        }
      }
    });
  };
  $$.fn.toggleClass = function(name) {
    return this.each(function() {
      if (_existsClass(name, this.className)) {
        return this.className = this.className.replace(name, " ");
      } else {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.hasClass = function(name) {
    return _existsClass(name, this[0].className);
  };
  $$.fn.style = function(property, value) {
    if (!value) {
      return this[0].style[property] || _computedStyle(this[0], property);
    } else {
      return this.each(function() {
        return this.style[property] = value;
      });
    }
  };
  _existsClass = function(name, className) {
    var classes;
    classes = className.split(/\s+/g);
    return classes.indexOf(name) >= 0;
  };
  return _computedStyle = function(element, property) {
    return document.defaultView.getComputedStyle(element, "")[property];
  };
})(Quo);


Prompt:
Convert this JavaScript to CoffeeScript.
```javascript
(function($$) {
  var _computedStyle, _existsClass;
  $$.fn.addClass = function(name) {
    return this.each(function() {
      if (!_existsClass(name, this.className)) {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.removeClass = function(name) {
    return this.each(function() {
      if (!name) {
        return this.className = "";
      } else {
        if (_existsClass(name, this.className)) {
          return this.className = this.className.replace(name, " ").replace(/\s+/g, " ").trim();
        }
      }
    });
  };
  $$.fn.toggleClass = function(name) {
    return this.each(function() {
      if (_existsClass(name, this.className)) {
        return this.className = this.className.replace(name, " ");
      } else {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.hasClass = function(name) {
    return _existsClass(name, this[0].className);
  };
  $$.fn.style = function(property, value) {
    if (!value) {
      return this[0].style[property] || _computedStyle(this[0], property);
    } else {
      return this.each(function() {
        return this.style[property] = value;
      });
    }
  };
  _existsClass = function(name, className) {
    var classes;
    classes = className.split(/\s+/g);
    return classes.indexOf(name) >= 0;
  };
  return _computedStyle = function(element, property) {
    return document.defaultView.getComputedStyle(element, "")[property];
  };
})(Quo);
```

Response:
do ($$ = Quo) ->

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->
            if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        (if (not value) then this[0].style[property] or _computedStyle(this[0], property) else @each(->
            @style[property] = value
        ))

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]


Prompt:
do ($$ = Quo) ->

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->
            if _existsClass(name, @className)

Response:
@className = @className.replace(name, " ")
            else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        (if (not value) then this[0].style[property] or _computedStyle(this[0], property) else @each(->
            @style[property] = value
        ))

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]


Response:
###
  QuoJS
  (c) 2011, 2012 Javi Jiménez Villar (@soyjavi)
  http://quojs.tapquo.com
###

(($$) ->

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->
            if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        (if (not value) then this[0].style[property] or _computedStyle(this[0], property) else @each(->
            @style[property] = value
        ))

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]

    return

) Quo


Prompt:
Convert this CoffeeScript to JavaScript.
```coffeescript
###
  QuoJS
  (c) 2011, 2012 Javi Jiménez Villar (@soyjavi)
  http://quojs.tapquo.com
###

(($$) ->

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->
            if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        (if (not value) then this[0].style[property] or _computedStyle(this[0], property) else @each(->
            @style[property] = value
        ))

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]

    return

) Quo
```

Response:
/*
  QuoJS
  (c) 2011, 2012 Javi Jiménez Villar (@soyjavi)
  http://quojs.tapquo.com
*/
(function($$) {
  var _computedStyle, _existsClass;
  $$.fn.addClass = function(name) {
    return this.each(function() {
      if (!_existsClass(name, this.className)) {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.removeClass = function(name) {
    return this.each(function() {
      if (!name) {
        return this.className = "";
      } else {
        if (_existsClass(name, this.className)) {
          return this.className = this.className.replace(name, " ").replace(/\s+/g, " ").trim();
        }
      }
    });
  };
  $$.fn.toggleClass = function(name) {
    return this.each(function() {
      if (_existsClass(name, this.className)) {
        return this.className = this.className.replace(name, " ");
      } else {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.hasClass = function(name) {
    return _existsClass(name, this[0].className);
  };
  $$.fn.style = function(property, value) {
    if (!value) {
      return this[0].style[property] || _computedStyle(this[0], property);
    } else {
      return this.each(function() {
        return this.style[property] = value;
      });
    }
  };
  _existsClass = function(name, className) {
    var classes;
    classes = className.split(/\s+/g);
    return classes.indexOf(name) >= 0;
  };
  _computedStyle = function(element, property) {
    return document.defaultView.getComputedStyle(element, "")[property];
  };
})(Quo);


Prompt:
Convert this JavaScript to CoffeeScript.
```javascript
/*
  QuoJS
  (c) 2011, 2012 Javi Jiménez Villar (@soyjavi)
  http://quojs.tapquo.com
*/
(function($$) {
  var _computedStyle, _existsClass;
  $$.fn.addClass = function(name) {
    return this.each(function() {
      if (!_existsClass(name, this.className)) {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.removeClass = function(name) {
    return this.each(function() {
      if (!name) {
        return this.className = "";
      } else {
        if (_existsClass(name, this.className)) {
          return this.className = this.className.replace(name, " ").replace(/\s+/g, " ").trim();
        }
      }
    });
  };
  $$.fn.toggleClass = function(name) {
    return this.each(function() {
      if (_existsClass(name, this.className)) {
        return this.className = this.className.replace(name, " ");
      } else {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.hasClass = function(name) {
    return _existsClass(name, this[0].className);
  };
  $$.fn.style = function(property, value) {
    if (!value) {
      return this[0].style[property] || _computedStyle(this[0], property);
    } else {
      return this.each(function() {
        return this.style[property] = value;
      });
    }
  };
  _existsClass = function(name, className) {
    var classes;
    classes = className.split(/\s+/g);
    return classes.indexOf(name) >= 0;
  };
  _computedStyle = function(element, property) {
    return document.defaultView.getComputedStyle(element, "")[property];
  };
})(Quo);
```

Response:
###
  QuoJS
  (c) 2011, 2012 Javi Jiménez Villar (@soyjavi)
  http://quojs.tapquo.com
###

(($$) ->

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->
            if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        (if (not value) then this[0].style[property] or _computedStyle(this[0], property) else @each(->
            @style[property] = value
        ))

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]

    return

) Quo


Prompt:
###
  QuoJS
  (c) 2011, 2012 Javi Jiménez Villar (@soyjavi)
  http://quojs.tapquo.com
###

(($$) ->

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->

Response:
if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        (if (not value) then this[0].style[property] or _computedStyle(this[0], property) else @each(->
            @style[property] = value
        ))

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]

    return

) Quo


Response:
###
  QuoJS 2.2.0
  (c) 2011, 2012 Javi Jiménez Villar (@soyjavi)
  http://quojs.tapquo.com
###

(($$) ->

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->
            if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        (if (not value) then this[0].style[property] or _computedStyle(this[0], property) else @each(->
            @style[property] = value
        ))

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]

    return

) Quo


Prompt:
Convert this CoffeeScript to JavaScript.
```coffeescript
###
  QuoJS 2.2.0
  (c) 2011, 2012 Javi Jiménez Villar (@soyjavi)
  http://quojs.tapquo.com
###

(($$) ->

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->
            if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        (if (not value) then this[0].style[property] or _computedStyle(this[0], property) else @each(->
            @style[property] = value
        ))

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]

    return

) Quo
```

Response:
/*
  QuoJS 2.2.0
  (c) 2011, 2012 Javi Jiménez Villar (@soyjavi)
  http://quojs.tapquo.com
*/
(function($$) {
  var _computedStyle, _existsClass;
  $$.fn.addClass = function(name) {
    return this.each(function() {
      if (!_existsClass(name, this.className)) {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.removeClass = function(name) {
    return this.each(function() {
      if (!name) {
        return this.className = "";
      } else {
        if (_existsClass(name, this.className)) {
          return this.className = this.className.replace(name, " ").replace(/\s+/g, " ").trim();
        }
      }
    });
  };
  $$.fn.toggleClass = function(name) {
    return this.each(function() {
      if (_existsClass(name, this.className)) {
        return this.className = this.className.replace(name, " ");
      } else {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.hasClass = function(name) {
    return _existsClass(name, this[0].className);
  };
  $$.fn.style = function(property, value) {
    if (!value) {
      return this[0].style[property] || _computedStyle(this[0], property);
    } else {
      return this.each(function() {
        return this.style[property] = value;
      });
    }
  };
  _existsClass = function(name, className) {
    var classes;
    classes = className.split(/\s+/g);
    return classes.indexOf(name) >= 0;
  };
  _computedStyle = function(element, property) {
    return document.defaultView.getComputedStyle(element, "")[property];
  };
})(Quo);


Prompt:
Convert this JavaScript to CoffeeScript.
```javascript
/*
  QuoJS 2.2.0
  (c) 2011, 2012 Javi Jiménez Villar (@soyjavi)
  http://quojs.tapquo.com
*/
(function($$) {
  var _computedStyle, _existsClass;
  $$.fn.addClass = function(name) {
    return this.each(function() {
      if (!_existsClass(name, this.className)) {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.removeClass = function(name) {
    return this.each(function() {
      if (!name) {
        return this.className = "";
      } else {
        if (_existsClass(name, this.className)) {
          return this.className = this.className.replace(name, " ").replace(/\s+/g, " ").trim();
        }
      }
    });
  };
  $$.fn.toggleClass = function(name) {
    return this.each(function() {
      if (_existsClass(name, this.className)) {
        return this.className = this.className.replace(name, " ");
      } else {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.hasClass = function(name) {
    return _existsClass(name, this[0].className);
  };
  $$.fn.style = function(property, value) {
    if (!value) {
      return this[0].style[property] || _computedStyle(this[0], property);
    } else {
      return this.each(function() {
        return this.style[property] = value;
      });
    }
  };
  _existsClass = function(name, className) {
    var classes;
    classes = className.split(/\s+/g);
    return classes.indexOf(name) >= 0;
  };
  _computedStyle = function(element, property) {
    return document.defaultView.getComputedStyle(element, "")[property];
  };
})(Quo);
```

Response:
###
  QuoJS 2.2.0
  (c) 2011, 2012 Javi Jiménez Villar (@soyjavi)
  http://quojs.tapquo.com
###

(($$) ->

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->
            if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        (if (not value) then this[0].style[property] or _computedStyle(this[0], property) else @each(->
            @style[property] = value
        ))

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]

    return

) Quo


Prompt:
###
  QuoJS 2.2.0
  (c) 2011, 2012 Javi Jiménez Villar (@soyjavi)
  http://quojs.tapquo.com
###

(($$) ->

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->

Response:
if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        (if (not value) then this[0].style[property] or _computedStyle(this[0], property) else @each(->
            @style[property] = value
        ))

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]

    return

) Quo


Response:
###
  QuoJS 2.1
  (c) 2011, 2012 Javi Jiménez Villar (@soyjavi)
  http://quojs.tapquo.com
###

(($$) ->

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->
            if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        (if (not value) then this[0].style[property] or _computedStyle(this[0], property) else @each(->
            @style[property] = value
        ))

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]

    return

) Quo


Prompt:
Convert this CoffeeScript to JavaScript.
```coffeescript
###
  QuoJS 2.1
  (c) 2011, 2012 Javi Jiménez Villar (@soyjavi)
  http://quojs.tapquo.com
###

(($$) ->

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->
            if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        (if (not value) then this[0].style[property] or _computedStyle(this[0], property) else @each(->
            @style[property] = value
        ))

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]

    return

) Quo
```

Response:
/*
  QuoJS 2.1
  (c) 2011, 2012 Javi Jiménez Villar (@soyjavi)
  http://quojs.tapquo.com
*/
(function($$) {
  var _computedStyle, _existsClass;
  $$.fn.addClass = function(name) {
    return this.each(function() {
      if (!_existsClass(name, this.className)) {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.removeClass = function(name) {
    return this.each(function() {
      if (!name) {
        return this.className = "";
      } else {
        if (_existsClass(name, this.className)) {
          return this.className = this.className.replace(name, " ").replace(/\s+/g, " ").trim();
        }
      }
    });
  };
  $$.fn.toggleClass = function(name) {
    return this.each(function() {
      if (_existsClass(name, this.className)) {
        return this.className = this.className.replace(name, " ");
      } else {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.hasClass = function(name) {
    return _existsClass(name, this[0].className);
  };
  $$.fn.style = function(property, value) {
    if (!value) {
      return this[0].style[property] || _computedStyle(this[0], property);
    } else {
      return this.each(function() {
        return this.style[property] = value;
      });
    }
  };
  _existsClass = function(name, className) {
    var classes;
    classes = className.split(/\s+/g);
    return classes.indexOf(name) >= 0;
  };
  _computedStyle = function(element, property) {
    return document.defaultView.getComputedStyle(element, "")[property];
  };
})(Quo);


Prompt:
Convert this JavaScript to CoffeeScript.
```javascript
/*
  QuoJS 2.1
  (c) 2011, 2012 Javi Jiménez Villar (@soyjavi)
  http://quojs.tapquo.com
*/
(function($$) {
  var _computedStyle, _existsClass;
  $$.fn.addClass = function(name) {
    return this.each(function() {
      if (!_existsClass(name, this.className)) {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.removeClass = function(name) {
    return this.each(function() {
      if (!name) {
        return this.className = "";
      } else {
        if (_existsClass(name, this.className)) {
          return this.className = this.className.replace(name, " ").replace(/\s+/g, " ").trim();
        }
      }
    });
  };
  $$.fn.toggleClass = function(name) {
    return this.each(function() {
      if (_existsClass(name, this.className)) {
        return this.className = this.className.replace(name, " ");
      } else {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.hasClass = function(name) {
    return _existsClass(name, this[0].className);
  };
  $$.fn.style = function(property, value) {
    if (!value) {
      return this[0].style[property] || _computedStyle(this[0], property);
    } else {
      return this.each(function() {
        return this.style[property] = value;
      });
    }
  };
  _existsClass = function(name, className) {
    var classes;
    classes = className.split(/\s+/g);
    return classes.indexOf(name) >= 0;
  };
  _computedStyle = function(element, property) {
    return document.defaultView.getComputedStyle(element, "")[property];
  };
})(Quo);
```

Response:
###
  QuoJS 2.1
  (c) 2011, 2012 Javi Jiménez Villar (@soyjavi)
  http://quojs.tapquo.com
###

(($$) ->

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->
            if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        (if (not value) then this[0].style[property] or _computedStyle(this[0], property) else @each(->
            @style[property] = value
        ))

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]

    return

) Quo


Prompt:
###
  QuoJS 2.1
  (c) 2011, 2012 Javi Jiménez Villar (@soyjavi)
  http://quojs.tapquo.com
###

(($$) ->

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->

Response:
if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        (if (not value) then this[0].style[property] or _computedStyle(this[0], property) else @each(->
            @style[property] = value
        ))

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]

    return

) Quo


Response:
###
  QuoJS 2.0
  (c) 2011, 2012 Javi Jiménez Villar (@soyjavi)
  http://quojs.tapquo.com
###

(($$) ->

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->
            if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        (if (not value) then this[0].style[property] or _computedStyle(this[0], property) else @each(->
            @style[property] = value
        ))

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]

    return

) Quo


Prompt:
Convert this CoffeeScript to JavaScript.
```coffeescript
###
  QuoJS 2.0
  (c) 2011, 2012 Javi Jiménez Villar (@soyjavi)
  http://quojs.tapquo.com
###

(($$) ->

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->
            if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        (if (not value) then this[0].style[property] or _computedStyle(this[0], property) else @each(->
            @style[property] = value
        ))

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]

    return

) Quo
```

Response:
/*
  QuoJS 2.0
  (c) 2011, 2012 Javi Jiménez Villar (@soyjavi)
  http://quojs.tapquo.com
*/
(function($$) {
  var _computedStyle, _existsClass;
  $$.fn.addClass = function(name) {
    return this.each(function() {
      if (!_existsClass(name, this.className)) {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.removeClass = function(name) {
    return this.each(function() {
      if (!name) {
        return this.className = "";
      } else {
        if (_existsClass(name, this.className)) {
          return this.className = this.className.replace(name, " ").replace(/\s+/g, " ").trim();
        }
      }
    });
  };
  $$.fn.toggleClass = function(name) {
    return this.each(function() {
      if (_existsClass(name, this.className)) {
        return this.className = this.className.replace(name, " ");
      } else {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.hasClass = function(name) {
    return _existsClass(name, this[0].className);
  };
  $$.fn.style = function(property, value) {
    if (!value) {
      return this[0].style[property] || _computedStyle(this[0], property);
    } else {
      return this.each(function() {
        return this.style[property] = value;
      });
    }
  };
  _existsClass = function(name, className) {
    var classes;
    classes = className.split(/\s+/g);
    return classes.indexOf(name) >= 0;
  };
  _computedStyle = function(element, property) {
    return document.defaultView.getComputedStyle(element, "")[property];
  };
})(Quo);


Prompt:
Convert this JavaScript to CoffeeScript.
```javascript
/*
  QuoJS 2.0
  (c) 2011, 2012 Javi Jiménez Villar (@soyjavi)
  http://quojs.tapquo.com
*/
(function($$) {
  var _computedStyle, _existsClass;
  $$.fn.addClass = function(name) {
    return this.each(function() {
      if (!_existsClass(name, this.className)) {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.removeClass = function(name) {
    return this.each(function() {
      if (!name) {
        return this.className = "";
      } else {
        if (_existsClass(name, this.className)) {
          return this.className = this.className.replace(name, " ").replace(/\s+/g, " ").trim();
        }
      }
    });
  };
  $$.fn.toggleClass = function(name) {
    return this.each(function() {
      if (_existsClass(name, this.className)) {
        return this.className = this.className.replace(name, " ");
      } else {
        this.className += " " + name;
        return this.className = this.className.trim();
      }
    });
  };
  $$.fn.hasClass = function(name) {
    return _existsClass(name, this[0].className);
  };
  $$.fn.style = function(property, value) {
    if (!value) {
      return this[0].style[property] || _computedStyle(this[0], property);
    } else {
      return this.each(function() {
        return this.style[property] = value;
      });
    }
  };
  _existsClass = function(name, className) {
    var classes;
    classes = className.split(/\s+/g);
    return classes.indexOf(name) >= 0;
  };
  _computedStyle = function(element, property) {
    return document.defaultView.getComputedStyle(element, "")[property];
  };
})(Quo);
```

Response:
###
  QuoJS 2.0
  (c) 2011, 2012 Javi Jiménez Villar (@soyjavi)
  http://quojs.tapquo.com
###

(($$) ->

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->
            if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        (if (not value) then this[0].style[property] or _computedStyle(this[0], property) else @each(->
            @style[property] = value
        ))

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]

    return

) Quo


Prompt:
###
  QuoJS 2.0
  (c) 2011, 2012 Javi Jiménez Villar (@soyjavi)
  http://quojs.tapquo.com
###

(($$) ->

    $$.fn.addClass = (name) ->
        @each ->
            unless _existsClass(name, @className)
                @className += " " + name
                @className = @className.trim()

    $$.fn.removeClass = (name) ->
        @each ->
            unless name
                @className = ""
            else
                @className = @className.replace(name, " ").replace(/\s+/g, " ").trim() if _existsClass(name, @className)

    $$.fn.toggleClass = (name) ->
        @each ->

Response:
if _existsClass(name, @className)
                @className = @className.replace(name, " ")
            else
                @className += " " + name
                @className = @className.trim()

    $$.fn.hasClass = (name) ->
        _existsClass name, this[0].className

    $$.fn.style = (property, value) ->
        (if (not value) then this[0].style[property] or _computedStyle(this[0], property) else @each(->
            @style[property] = value
        ))

    _existsClass = (name, className) ->
        classes = className.split(/\s+/g)
        classes.indexOf(name) >= 0

    _computedStyle = (element, property) ->
        document.defaultView.getComputedStyle(element, "")[property]

    return

) Quo


Response:
module.exports = React.createClass
  displayName: 'app-signup'

  propTypes:
    topics: T.instanceOf(Immutable.Map).isRequired

  getInitialState: ->
    name: ''
    email: ''
    isEmailValid: true

  onNameChange: (event) ->
    name = event.target.value
    @setState {name}

  onEmailChange: (event) ->
    email = event.target.value
    @setState {email, isEmailValid: true}

  onNameKeydown: (event) ->
    if event.keyCode is keyboard.enter
      @refs.email.focus()

  onEmailKeydown: (event) ->
    if event.keyCode is keyboard.enter
      @onSubmit()

  onSubmit: ->
    data =
      name: @state.name
      email: @state.email

    if @state.name.trim().length is 0
      return

    guestActions.userCreate data.name, data.email, undefined,
      (resp) ->
        handlers.registerUser resp
        handlers.joinTopic()
      (resp) =>
        console.error 'signup user error', resp
        @setState isEmailValid: false

  renderForm: ->
    # guest page gets only part of the data,
    # guessing topic name since there's only one topic
    topicName = @props.topics.first().first().get('topic')

    if topicName
      welcome = lang.getText('visiting-topic').replace('%s', topicName)


Prompt:
Convert this CoffeeScript to JavaScript.
```coffeescript
module.exports = React.createClass
  displayName: 'app-signup'

  propTypes:
    topics: T.instanceOf(Immutable.Map).isRequired

  getInitialState: ->
    name: ''
    email: ''
    isEmailValid: true

  onNameChange: (event) ->
    name = event.target.value
    @setState {name}

  onEmailChange: (event) ->
    email = event.target.value
    @setState {email, isEmailValid: true}

  onNameKeydown: (event) ->
    if event.keyCode is keyboard.enter
      @refs.email.focus()

  onEmailKeydown: (event) ->
    if event.keyCode is keyboard.enter
      @onSubmit()

  onSubmit: ->
    data =
      name: @state.name
      email: @state.email

    if @state.name.trim().length is 0
      return

    guestActions.userCreate data.name, data.email, undefined,
      (resp) ->
        handlers.registerUser resp
        handlers.joinTopic()
      (resp) =>
        console.error 'signup user error', resp
        @setState isEmailValid: false

  renderForm: ->
    # guest page gets only part of the data,
    # guessing topic name since there's only one topic
    topicName = @props.topics.first().first().get('topic')

    if topicName
      welcome = lang.getText('visiting-topic').replace('%s', topicName)
```

Response:
module.exports = React.createClass({
  displayName: 'app-signup',
  propTypes: {
    topics: T.instanceOf(Immutable.Map).isRequired
  },
  getInitialState: function() {
    return {
      name: '',
      email: '',
      isEmailValid: true
    };
  },
  onNameChange: function(event) {
    var name;
    name = event.target.value;
    return this.setState({name});
  },
  onEmailChange: function(event) {
    var email;
    email = event.target.value;
    return this.setState({
      email,
      isEmailValid: true
    });
  },
  onNameKeydown: function(event) {
    if (event.keyCode === keyboard.enter) {
      return this.refs.email.focus();
    }
  },
  onEmailKeydown: function(event) {
    if (event.keyCode === keyboard.enter) {
      return this.onSubmit();
    }
  },
  onSubmit: function() {
    var data;
    data = {
      name: this.state.name,
      email: this.state.email
    };
    if (this.state.name.trim().length === 0) {
      return;
    }
    return guestActions.userCreate(data.name, data.email, void 0, function(resp) {
      handlers.registerUser(resp);
      return handlers.joinTopic();
    }, (resp) => {
      console.error('signup user error', resp);
      return this.setState({
        isEmailValid: false
      });
    });
  },
  renderForm: function() {
    var topicName, welcome;
    // guest page gets only part of the data,
    // guessing topic name since there's only one topic
    topicName = this.props.topics.first().first().get('topic');
    if (topicName) {
      return welcome = lang.getText('visiting-topic').replace('%s', topicName);
    }
  }
});


Prompt:
Convert this JavaScript to CoffeeScript.
```javascript
module.exports = React.createClass({
  displayName: 'app-signup',
  propTypes: {
    topics: T.instanceOf(Immutable.Map).isRequired
  },
  getInitialState: function() {
    return {
      name: '',
      email: '',
      isEmailValid: true
    };
  },
  onNameChange: function(event) {
    var name;
    name = event.target.value;
    return this.setState({name});
  },
  onEmailChange: function(event) {
    var email;
    email = event.target.value;
    return this.setState({
      email,
      isEmailValid: true
    });
  },
  onNameKeydown: function(event) {
    if (event.keyCode === keyboard.enter) {
      return this.refs.email.focus();
    }
  },
  onEmailKeydown: function(event) {
    if (event.keyCode === keyboard.enter) {
      return this.onSubmit();
    }
  },
  onSubmit: function() {
    var data;
    data = {
      name: this.state.name,
      email: this.state.email
    };
    if (this.state.name.trim().length === 0) {
      return;
    }
    return guestActions.userCreate(data.name, data.email, void 0, function(resp) {
      handlers.registerUser(resp);
      return handlers.joinTopic();
    }, (resp) => {
      console.error('signup user error', resp);
      return this.setState({
        isEmailValid: false
      });
    });
  },
  renderForm: function() {
    var topicName, welcome;
    // guest page gets only part of the data,
    // guessing topic name since there's only one topic
    topicName = this.props.topics.first().first().get('topic');
    if (topicName) {
      return welcome = lang.getText('visiting-topic').replace('%s', topicName);
    }
  }
});
```

Response:
module.exports = React.createClass
  displayName: 'app-signup'

  propTypes:
    topics: T.instanceOf(Immutable.Map).isRequired

  getInitialState: ->
    name: ''
    email: ''
    isEmailValid: true

  onNameChange: (event) ->
    name = event.target.value
    @setState {name}

  onEmailChange: (event) ->
    email = event.target.value
    @setState {email, isEmailValid: true}

  onNameKeydown: (event) ->
    if event.keyCode is keyboard.enter
      @refs.email.focus()

  onEmailKeydown: (event) ->
    if event.keyCode is keyboard.enter
      @onSubmit()

  onSubmit: ->
    data =
      name: @state.name
      email: @state.email

    if @state.name.trim().length is 0
      return

    guestActions.userCreate data.name, data.email, undefined,
      (resp) ->
        handlers.registerUser resp
        handlers.joinTopic()
      (resp) =>
        console.error 'signup user error', resp
        @setState isEmailValid: false

  renderForm: ->
    # guest page gets only part of the data,
    # guessing topic name since there's only one topic
    topicName = @props.topics.first().first().get('topic')

    if topicName
      welcome = lang.getText('visiting-topic').replace('%s', topicName)


Prompt:
module.exports = React.createClass
  displayName: 'app-signup'

  propTypes:
    topics: T.instanceOf(Immutable.Map).isRequired

  getInitialState: ->
    name: ''
    email: ''
    isEmailValid: true

  onNameChange: (event) ->
    name = event.target.value
    @setState {name}

  onEmailChange: (event) ->
    email = event.target.value
    @setState {email, isEmailValid: true}

  onNameKeydown: (event) ->
    if event.keyCode is keyboard.enter
      @refs.email.focus()

  onEmailKeydown: (event) ->
    if event.keyCode is keyboard.enter

Response:
@onSubmit()

  onSubmit: ->
    data =
      name: @state.name
      email: @state.email

    if @state.name.trim().length is 0
      return

    guestActions.userCreate data.name, data.email, undefined,
      (resp) ->
        handlers.registerUser resp
        handlers.joinTopic()
      (resp) =>
        console.error 'signup user error', resp
        @setState isEmailValid: false

  renderForm: ->
    # guest page gets only part of the data,
    # guessing topic name since there's only one topic
    topicName = @props.topics.first().first().get('topic')

    if topicName
      welcome = lang.getText('visiting-topic').replace('%s', topicName)


Response:
else
      welcome = lang.getText('visiting-guest')
    emailClass = cx
      email: true
      'form-control': true
      'is-invalid': not @state.isEmailValid

    div className: 'box paragraph',
      div className: '', welcome
      div className: 'line',
        input
          className: 'name form-control', value: @state.name, type: 'text'
          placeholder: lang.getText('your-name')
          onChange: @onNameChange, onKeyDown: @onNameKeydown
      div className: 'line',
        input
          type: 'text', className: emailClass, ref: 'email', value: @state.email
          placeholder: lang.getText('email-optional')
          onChange: @onEmailChange, onKeyDown: @onEmailKeydown
        span
          className: 'email-help simpletip is-right'
          'data-tip': lang.getText('may-email-conversation')
          span className: 'icon icon-help muted'
      div className: 'line',
        button className: 'button is-primary is-extended', onClick: @onSubmit,
          lang.getText('join-topic')

  renderFooter: ->

    homeLink = 'https://jianliao.com'
    blogLink = 'https://jianliao.com/blog/'
    loginLink = 'https://account.jianliao.com/signin'
    signupLink = 'https://account.jianliao.com/signup'

    div className: 'footer',
      div className: 'sites line',
        a target: '_blank', className: 'button is-link', href: homeLink,
          lang.getText('home')
        a target: '_blank', className: 'button is-link', href: blogLink,
          lang.getText('blog')
        a target: '_blank', className: 'button is-link', href: loginLink,
          lang.getText('login')
        a target: '_blank', className: 'button is-link', href: signupLink,
          lang.getText('signup')
      div className: 'rights muted',
        'Copyright © 2012-2016 Teambition Ltd.'

  render: ->

    div className: 'app-signup',


Prompt:
else
      welcome = lang.getText('visiting-guest')
    emailClass = cx
      email: true
      'form-control': true
      'is-invalid': not @state.isEmailValid

    div className: 'box paragraph',
      div className: '', welcome
      div className: 'line',
        input
          className: 'name form-control', value: @state.name, type: 'text'
          placeholder: lang.getText('your-name')
          onChange: @onNameChange, onKeyDown: @onNameKeydown
      div className: 'line',
        input
          type: 'text', className: emailClass, ref: 'email', value: @state.email
          placeholder: lang.getText('email-optional')
          onChange: @onEmailChange, onKeyDown: @onEmailKeydown
        span
          className: 'email-help simpletip is-right'
          'data-tip': lang.getText('may-email-conversation')
          span className: 'icon icon-help muted'
      div className: 'line',
        button className: 'button is-primary is-extended', onClick: @onSubmit,

Response:
lang.getText('join-topic')

  renderFooter: ->

    homeLink = 'https://jianliao.com'
    blogLink = 'https://jianliao.com/blog/'
    loginLink = 'https://account.jianliao.com/signin'
    signupLink = 'https://account.jianliao.com/signup'

    div className: 'footer',
      div className: 'sites line',
        a target: '_blank', className: 'button is-link', href: homeLink,
          lang.getText('home')
        a target: '_blank', className: 'button is-link', href: blogLink,
          lang.getText('blog')
        a target: '_blank', className: 'button is-link', href: loginLink,
          lang.getText('login')
        a target: '_blank', className: 'button is-link', href: signupLink,
          lang.getText('signup')
      div className: 'rights muted',
        'Copyright © 2012-2016 Teambition Ltd.'

  render: ->

    div className: 'app-signup',


Response:
div className: "logo is-#{lang.getLang()}"
      @renderForm()
      @renderFooter()


Response:
# # Handle github timeline
#
# Copyright (c) 2013 JeongHoon Byun aka "Outsider", <http://blog.outsider.ne.kr/>
# Licensed under the MIT license.
# <http://outsider.mit-license.org/>

restler = require 'restler'
path = require 'path'
fs = require 'fs'
helpers = require './helpers'
logger = helpers.logger

githubHost = 'https://api.github.com'
# github.json contained token should be in .tokens directory
# ex: { "cliendId": "", "clientSecret": "" }
# WARRING: MUST NOT commit github.json file
tokenPath = path.resolve "#{__dirname}", "../.tokens"
token = JSON.parse(fs.readFileSync "#{tokenPath}/github.json", 'utf8')
postfix = "?client_id=#{token.cliendId}&client_secret=#{token.clientSecret}"

tl = module.exports =
  getCommitUrls: (timeline) ->
    # GET /repos/:owner/:repo/commits/:sha
    timeline = JSON.parse timeline if 'string' is helpers.extractType timeline

    repo = timeline.repository
    "/repos/#{repo.owner}/#{repo.name}/commits/#{sha[0]}" for sha in timeline.payload.shas

  getCommitInfo: (url, callback) ->
    restler.get(generateApiUrl url)
           .on 'success', (data, res) ->
             #'x-ratelimit-limit': '5000',
             #'x-ratelimit-remaining': '4986',
             logger.info "github api limit: #{res.headers['x-ratelimit-remaining']}" if res.headers['x-ratelimit-remaining'] % 50 is 0
             logger.error "github api limit: #{res.headers['x-ratelimit-remaining']}" if res.headers['x-ratelimit-remaining'] < '10'
             callback null, data, res
           .on 'fail', (data, res) ->
             callback data
           .on 'complete', (err) ->
             callback err if err instanceof Error

  checkApiLimit: (callback) ->
    restler.get(generateApiUrl "/users/whatever")
           .on 'success', (data, res) ->
              logger.debug "API rate ramained #{res.headers['x-ratelimit-remaining']}"
              callback res.headers['x-ratelimit-remaining']
           .on 'fail', (data, res) ->
              logger.debug "API rate ramained #{res.headers['x-ratelimit-remaining']}"
              callback res.headers['x-ratelimit-remaining']