erikroyall/hilo

View on GitHub
src/misc.js

Summary

Maintainability
C
1 day
Test Coverage

  /**
   * Attaches classes to <body>
   * 
   * @for hilo
   * @method classify
   * @return {Array} List of classes applied
   * @examples
   * <div class="code"><pre class="prettyprint">
   * var classes = Hilo.classify();
   * </pre></div>
   * @since 0.1.0
   */
  hilo.classify = function () {
    var body = win.Hilo("body")
      , classes = ["js"]
      , _i;
    // Remove the default no-js class
    body.removeClass("no-js");

    if (hilo.browser.chrome) {
      classes.push("chrome");
    } else if (hilo.browser.firefox) {
      classes.push("firefox");
    } else if (hilo.browser.safari) {
      classes.push("safari");
    } else if (hilo.browser.ie) {

      for (_i = 6; _i <= 11; _i++) {
        if (hilo.browser.ie <= _i) {
          classes.push("lte-ie" + _i);

          if (hilo.browser.ie < _i) {
            classes.push("lt-ie" + _i);
          }
        }

        if (hilo.browser.ie >= _i) {
          classes.push("gte-ie" + _i);

          if (hilo.browser.ie > _i) {
            classes.push("gt-ie" + _i);
          }
        }

        if (hilo.browser.ie === _i) {
          classes.push("ie" + _i);
        }
      }

      classes.push("ie");
    } else if (hilo.browser.opera) {
      classes.push("opera");
    } else if (hilo.browser.konq) {
      classes.push("konqueror");
    }

    classes.push((function () {
      switch (hilo.platform.name) {
        case "Windows":
          return "windows";
        case "Mac":
          return "mac";
        case "Linux":
          return "linux";
      }
    })());

    if (hilo.engine.webkit) {
      classes.push("webkit");
    } else if (hilo.engine.ie) {
      classes.push("trident");
    } else if (hilo.engine.opera) {
      classes.push("presto");
    } else if (hilo.engine.gecko) {
      classes.push("gecko");
    }

    classes.push(hilo.browser.name.toLowerCase() + parseInt(hilo.browser.version, 10));

    function getBrowserVersion () {
      return String(hilo.browser.version).replace(".", "-");
    }

    if (getBrowserVersion() !== parseInt(hilo.browser.version, 10)) {
      classes.push(hilo.browser.name.toLowerCase() + getBrowserVersion());
    }

    for (_i in hilo.feature) {
      if (hilo.feature.hasOwnProperty(_i)) {
        if (hilo.feature[_i] === true) {
          classes.push(_i.toLowerCase());
        } else if (hilo.feature[_i] === false) {
          classes.push("no-" + _i.toLowerCase());
        }
      }
    }

    body.addClass(classes);

    return classes;
  };