// ========================================================================== // Project: SproutCore - JavaScript Application Framework // Copyright: ©2006-2011 Strobe Inc. and contributors. // Portions ©2008-2011 Apple, Inc. All rights reserved. // License: Licensed under MIT license (see license.js) // ==========================================================================

sc_require('views/table_row');

SC.TableCellView = SC.View.extend({

classNames: ['sc-table-cell'],

column: null,
escapeHTMLBinding: SC.Binding.oneWay('.column.escapeHTML'),
formatter: SC.Binding.oneWay('.column.formatter'),

displayValue: function() {
  var value = this.get('content') ;

  // 1. apply the formatter
  var formatter = this.get('column').get('formatter');
  if (formatter) {
    var formattedValue = (SC.typeOf(formatter) === SC.T_FUNCTION) ? formatter(value, this) : formatter.fieldValueForObject(value, this) ;
    if (!SC.none(formattedValue)) value = formattedValue ;
  }

  if (SC.typeOf(value) === SC.T_ARRAY) {
    var ary = [];
    for(var idx=0;idx<value.get('length');idx++) {
      var x = value.objectAt(idx) ;
      if (!SC.none(x) && x.toString) x = x.toString() ;
      ary.push(x) ;
    }
    value = ary.join(',') ;
  }

  if (!SC.none(value) && value.toString) value = value.toString() ;

  if (this.get('escapeHTML')) value = SC.RenderContext.escapeHTML(value);

  return value ;
}.property('content', 'escapeHTML', 'formatter').cacheable(),

render: function(context, firstTime) {
  context.push(this.get('displayValue'));
},

init: function() {
  sc_super();

  var column = this.get('column');

  column.addObserver('width',    this, '_sctcv_layoutDidChange');
  column.addObserver('maxWidth', this, '_sctcv_layoutDidChange');
  column.addObserver('minWidth', this, '_sctcv_layoutDidChange');
},

_sctcv_layoutDidChange: function(sender, key, value, rev) {
  var pv = this.get('parentView');
  SC.run( function() { pv.layoutChildViews(); });
}

});