Source: InfoView.js

/** @constructor */
hui.ui.InfoView = function(options) {
  this.options = hui.override({clickObjects:false},options);
  this.element = hui.get(options.element);
  this.body = hui.get.firstByTag(this.element,'tbody');
  this.name = options.name;
  hui.ui.extend(this);
};

hui.ui.InfoView.create = function(options) {
  options = options || {};
  var element = options.element = hui.build('div',{'class':'hui_infoview',html:'<table><tbody></tbody></table>'});
  if (options.height) {
    hui.style.set(element,{height:options.height+'px','overflow':'auto','overflowX':'hidden'});
  }
  if (options.margin) {
    element.style.margin = options.margin+'px';
  }
  return new hui.ui.InfoView(options);
};

hui.ui.InfoView.prototype = {
  addHeader : function(text) {
    var row = hui.build('tr',{parent:this.body});
    hui.build('th',{'class' : 'hui_infoview_header',colspan:'2',text:text,parent:row});
  },
  addProperty : function(label,text) {
    var row = hui.build('tr',{parent:this.body});
    hui.build('th',{parent:row,text:label});
    hui.build('td',{parent:row,text:text});
  },
  addObjects : function(label,objects) {
    if (!objects || objects.length === 0) return;
    var row = hui.build('tr',{parent:this.body});
    row.appendChild(hui.build('th',{text:label}));
    var cell = hui.build('td',{parent:row});
    var click = this.options.clickObjects;
    hui.each(objects,function(obj) {
      var node = hui.build('div',{text:obj.title,parent:cell});
      if (click) {
        hui.cls.add(node,'hui_infoview_click');
        hui.listen(node,'click',function() {
          hui.ui.callDelegates(this,'objectWasClicked',obj);
        });
      }
    });
  },
  setBusy : function(busy) {
    hui.cls.set(this,element,'hui_infoview_busy',busy);
  },
  clear : function() {
    hui.dom.clear(this.body);
  },
  update : function(data) {
    this.clear();
    for (var i=0; i < data.length; i++) {
      switch (data[i].type) {
        case 'header': this.addHeader(data[i].value); break;
        case 'property': this.addProperty(data[i].label,data[i].value); break;
        case 'objects': this.addObjects(data[i].label,data[i].value); break;
      }
    }
  }
};