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