Source: Rows.js

(function (_super) {

  /**
   * Vertical rows
   * @class
   * @augments hui.ui.Component
   * @param {Object} options
   */
  hui.ui.Rows = function(options) {
    _super.call(this, options);
    this.rows = [];
    this._attach();
  };

  hui.ui.Rows.prototype = {
    _attach : function() {
      var children = hui.get.children(this.element);
      for (var i = 0; i < children.length; i++) {
        var node = children[i];
        var info = hui.string.fromJSON(node.getAttribute('data')) || {};
        info.node = node;
        this.rows.push(info);
      }
    },
    _findSizes : function(fullHeight) {
      var sizes = [];
      var count = this.rows.length;
      var fixedCount = 0;
      var fixedHeight = 0;
      for (var i = 0; i < count; i++) {
        var row = this.rows[i];
        if (row.height=='content') {
          var contentHeight = this._getContentHeight(row.node);
          fixedHeight += contentHeight;
          sizes.push(contentHeight);
          fixedCount++;
        } else {
          sizes.push(null);
        }
      }
      var remainingHeight = fullHeight - fixedHeight;
      var remainder = count - fixedCount;
      for (var j = 0; j < sizes.length; j++) {
        if (sizes[j] === null) {
          sizes[j] = 1 / remainder * remainingHeight;
        }
      }
      this.sizes = sizes;
    },
    _getContentHeight : function(node) {
      var height = 0;
      var children = hui.get.children(node);
      for (var i = 0; i < children.length; i++) {
        height += children[i].clientHeight;
      }
      return height;
    },
    $$childSizeChanged : function() {
      this.$$layout();
    },
    $$layout : function() {
      var fullHeight = this.element.parentNode.clientHeight;
      this.element.style.height = fullHeight + 'px';
      this._findSizes(fullHeight);
      var count = this.rows.length;
      for (var i = 0; i < count; i++) {
        var row = this.rows[i];
        row.node.style.height = this.sizes[i] + 'px';
      }
    }
  };

  hui.extend(hui.ui.Rows, _super);

})(hui.ui.Component);