1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5/**
6 * @fileoverview This is a table column representation
7 */
8
9cr.define('cr.ui.table', function() {
10  const EventTarget = cr.EventTarget;
11  const Event = cr.Event;
12
13  /**
14   * A table column that wraps column ids and settings.
15   * @param {!Array} columnIds Array of column ids.
16   * @constructor
17   * @extends {EventTarget}
18   */
19  function TableColumn(id, name, width) {
20    this.id_ = id;
21    this.name_ = name;
22    this.width_ = width;
23  }
24
25  TableColumn.prototype = {
26    __proto__: EventTarget.prototype,
27
28    id_: null,
29
30    name_: null,
31
32    width_: null,
33
34    renderFunction_: null,
35
36    /**
37     * Clones column.
38     * @return {cr.ui.table.TableColumn} Clone of the given column.
39     */
40    clone: function() {
41      var tableColumn = new TableColumn(this.id_, this.name_, this.width_);
42      tableColumn.renderFunction = this.renderFunction_;
43      return tableColumn;
44    },
45
46    /**
47     * Renders table cell. This is the default render function.
48     * @param {*} dataItem The data item to be rendered.
49     * @param {string} columnId The column id.
50     * @param {cr.ui.Table} table The table.
51     * @return {HTMLElement} Rendered element.
52     */
53    renderFunction_: function(dataItem, columnId, table) {
54      var div = table.ownerDocument.createElement('div');
55      div.textContent = dataItem[columnId];
56      return div;
57    },
58  };
59
60  /**
61   * The column id.
62   * @type {string}
63   */
64  cr.defineProperty(TableColumn, 'id');
65
66  /**
67   * The column name
68   * @type {string}
69   */
70  cr.defineProperty(TableColumn, 'name');
71
72  /**
73   * The column width.
74   * @type {number}
75   */
76  cr.defineProperty(TableColumn, 'width');
77
78  /**
79   * The column render function.
80   * @type {Function(*, string, cr.ui.Table): HTMLElement}
81   */
82  cr.defineProperty(TableColumn, 'renderFunction');
83
84  return {
85    TableColumn: TableColumn
86  };
87});
88