datatable-base-debug.js revision 76ca635d61eb3f9fb7c9d788a44fa8b1690aa138
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassYUI.add('datatable-base', function(Y) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassvar YLang = Y.Lang,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass YisValue = YLang.isValue,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Ysubstitute = Y.Lang.substitute,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass YNode = Y.Node,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Ycreate = YNode.create,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass YgetClassName = Y.ClassNameManager.getClassName,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass DATATABLE = "datatable",
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass COLUMN = "column",
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass FOCUS = "focus",
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass KEYDOWN = "keydown",
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass MOUSEENTER = "mouseenter",
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass MOUSELEAVE = "mouseleave",
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass MOUSEUP = "mouseup",
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass MOUSEDOWN = "mousedown",
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass CLICK = "click",
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass DBLCLICK = "dblclick",
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass CLASS_COLUMNS = YgetClassName(DATATABLE, "columns"),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass CLASS_DATA = YgetClassName(DATATABLE, "data"),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass CLASS_MSG = YgetClassName(DATATABLE, "msg"),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass CLASS_LINER = YgetClassName(DATATABLE, "liner"),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass CLASS_FIRST = YgetClassName(DATATABLE, "first"),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass CLASS_LAST = YgetClassName(DATATABLE, "last"),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass CLASS_EVEN = YgetClassName(DATATABLE, "even"),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass CLASS_ODD = YgetClassName(DATATABLE, "odd"),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass TEMPLATE_TABLE = '<table></table>',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass TEMPLATE_COL = '<col></col>',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass TEMPLATE_THEAD = '<thead class="'+CLASS_COLUMNS+'"></thead>',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass TEMPLATE_TBODY = '<tbody class="'+CLASS_DATA+'"></tbody>',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass TEMPLATE_TH = '<th id="{id}" rowspan="{rowspan}" colspan="{colspan}" class="{classnames}" abbr="{abbr}"><div class="'+CLASS_LINER+'">{value}</div></th>',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass TEMPLATE_TR = '<tr id="{id}"></tr>',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass TEMPLATE_TD = '<td headers="{headers}" class="{classnames}"><div class="'+CLASS_LINER+'">{value}</div></td>',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass TEMPLATE_VALUE = '{value}',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass TEMPLATE_MSG = '<tbody class="'+CLASS_MSG+'"></tbody>';
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * The Column class defines and manages attributes of Columns for DataTable.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @class Column
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @extends Widget
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @constructor
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassfunction Column(config) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Column.superclass.constructor.apply(this, arguments);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass//
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass// STATIC PROPERTIES
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass//
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassY.mix(Column, {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Class name.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property NAME
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type String
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @static
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @final
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @value "column"
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass NAME: "column",
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass//
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass// ATTRIBUTES
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass//
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ATTRS: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute id
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Unique internal identifier, used to stamp ID on TH element.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type String
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @readOnly
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass id: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass valueFn: "_defaultId",
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass readOnly: true
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute key
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description User-supplied identifier. Defaults to id.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type String
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass key: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass valueFn: "_defaultKey"
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute field
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Points to underlying data field (for sorting or formatting,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * for example). Useful when column doesn't hold any data itself, but is
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * just a visual representation of data from another column or record field.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Defaults to key.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type String
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass field: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass valueFn: "_defaultField"
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute label
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Display label for column header. Defaults to key.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type String
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass label: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass valueFn: "_defaultLabel"
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute children
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Array of child column definitions (for nested headers).
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type String
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass children: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass value: null
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute abbr
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description TH abbr attribute.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type String
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass abbr: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass value: ""
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //TODO: support custom classnames
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // TH CSS classnames
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass classnames: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass readOnly: true,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass getter: "_getClassnames"
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Column formatter
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass formatter: {},
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //requires datatable-sort
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass sortable: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass value: false
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //sortOptions:defaultDir, sortFn, field
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //TODO: support editable columns
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Column editor
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass editor: {},
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //TODO: support resizeable columns
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //TODO: support setting widths
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // requires datatable-colresize
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass width: {},
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass resizeable: {},
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass minimized: {},
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass minWidth: {},
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass maxAutoWidth: {}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass});
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass//
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass// PROTOTYPE
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass//
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassY.extend(Column, Y.Widget, {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // ATTRIBUTE HELPERS
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _defaultId
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Return ID for instance.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @returns String
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _defaultId: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return Y.guid();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _defaultKey
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Return key for instance. Defaults to ID if one was not
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * provided.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @returns String
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _defaultKey: function(key) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return key || Y.guid();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _defaultField
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Return field for instance. Defaults to key if one was not
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * provided.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @returns String
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _defaultField: function(field) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return field || this.get("key");
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _defaultLabel
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Return label for instance. Defaults to key if one was not
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * provided.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @returns String
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _defaultLabel: function(label) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return label || this.get("key");
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Updates the UI if changes are made to abbr.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _afterAbbrChange
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param e {Event} Custom event for the attribute change.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _afterAbbrChange: function (e) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._uiSetAbbr(e.newVal);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // PROPERTIES
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Reference to Column's current position index within its Columnset's keys
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * array, if applicable. This property only applies to non-nested and bottom-
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * level child Columns. Value is set by Columnset code.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property keyIndex
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Number
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass keyIndex: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property headers
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Array of TH IDs associated with this column, for TD "headers"
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * attribute. Value is set by Columnset code
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type String[]
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass headers: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Number of cells the header spans. Value is set by Columnset code.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property colSpan
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Number
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @default 1
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass colSpan: 1,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Number of rows the header spans. Value is set by Columnset code.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property rowSpan
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Number
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @default 1
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass rowSpan: 1,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Column's parent Column instance, if applicable. Value is set by Columnset
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * code.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property parent
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Y.Column
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass parent: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * The Node reference to the associated TH element.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property thNode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Y.Node
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass thNode: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /*TODO
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * The Node reference to the associated liner element.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property thLinerNode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Y.Node
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass thLinerNode: null,*/
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // METHODS
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Initializer.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method initializer
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param config {Object} Config object.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass initializer: function(config) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Destructor.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method destructor
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass destructor: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Returns classnames for Column.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _getClassnames
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _getClassnames: function () {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return Y.ClassNameManager.getClassName(COLUMN, this.get("id"));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /*var allClasses;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Add CSS classes
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(lang.isString(oColumn.className)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Single custom class
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass allClasses = [oColumn.className];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass else if(lang.isArray(oColumn.className)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Array of custom classes
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass allClasses = oColumn.className;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass else {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // no custom classes
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass allClasses = [];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Hook for setting width with via dynamic style uses key since ID is too disposable
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass allClasses[allClasses.length] = this.getId() + "-col-" +oColumn.getSanitizedKey();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Column key - minus any chars other than "A-Z", "a-z", "0-9", "_", "-", ".", or ":"
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass allClasses[allClasses.length] = "yui-dt-col-" +oColumn.getSanitizedKey();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var isSortedBy = this.get("sortedBy") || {};
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Sorted
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(oColumn.key === isSortedBy.key) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass allClasses[allClasses.length] = isSortedBy.dir || '';
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Hidden
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(oColumn.hidden) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass allClasses[allClasses.length] = DT.CLASS_HIDDEN;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Selected
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(oColumn.selected) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass allClasses[allClasses.length] = DT.CLASS_SELECTED;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Sortable
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(oColumn.sortable) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass allClasses[allClasses.length] = DT.CLASS_SORTABLE;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Resizeable
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(oColumn.resizeable) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass allClasses[allClasses.length] = DT.CLASS_RESIZEABLE;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Editable
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(oColumn.editor) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass allClasses[allClasses.length] = DT.CLASS_EDITABLE;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Addtnl classes, including First/Last
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(aAddClasses) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass allClasses = allClasses.concat(aAddClasses);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return allClasses.join(' ');*/
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // SYNC
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Syncs UI to intial state.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method syncUI
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass syncUI: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._uiSetAbbr(this.get("abbr"));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Updates abbr.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _uiSetAbbr
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param val {String} New abbr.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @protected
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _uiSetAbbr: function(val) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.thNode.set("abbr", val);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass});
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassY.Column = Column;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * The Columnset class defines and manages a collection of Columns.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @class Columnset
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @extends Base
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @constructor
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassfunction Columnset(config) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Columnset.superclass.constructor.apply(this, arguments);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass//
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass// STATIC PROPERTIES
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass//
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassY.mix(Columnset, {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Class name.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property NAME
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type String
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @static
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @final
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @value "columnset"
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass NAME: "columnset",
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // ATTRIBUTES
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ATTRS: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute definitions
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Array of column definitions that will populate this Columnset.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Array
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass definitions: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass setter: "_setDefinitions"
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass});
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass//
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass// PROTOTYPE
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass//
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassY.extend(Columnset, Y.Base, {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // ATTRIBUTE HELPERS
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _setDefinitions
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Clones definitions before setting.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param definitions {Array} Array of column definitions.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @returns Array
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _setDefinitions: function(definitions) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return Y.clone(definitions);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // PROPERTIES
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Top-down tree representation of Column hierarchy. Used to create DOM
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * elements.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property tree
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Y.Column[]
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass tree: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Hash of all Columns by ID.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property idHash
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Object
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass idHash: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Hash of all Columns by key.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property keyHash
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Object
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass keyHash: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Array of only Columns that are meant to be displayed in DOM.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property keys
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Y.Column[]
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass keys: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // METHODS
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Initializer. Generates all internal representations of the collection of
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Columns.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method initializer
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param config {Object} Config object.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass initializer: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // DOM tree representation of all Columns
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var tree = [],
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Hash of all Columns by ID
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass idHash = {},
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Hash of all Columns by key
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass keyHash = {},
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Flat representation of only Columns that are meant to display data
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass keys = [],
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Original definitions
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass definitions = this.get("definitions"),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass self = this;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Internal recursive function to define Column instances
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass function parseColumns(depth, currentDefinitions, parent) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var i=0,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass len = currentDefinitions.length,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass currentDefinition,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass column,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass currentChildren;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // One level down
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass depth++;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Create corresponding dom node if not already there for this depth
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(!tree[depth]) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass tree[depth] = [];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Parse each node at this depth for attributes and any children
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass for(; i<len; ++i) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass currentDefinition = currentDefinitions[i];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass currentDefinition = YLang.isString(currentDefinition) ? {key:currentDefinition} : currentDefinition;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Instantiate a new Column for each node
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass column = new Y.Column(currentDefinition);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Cross-reference Column ID back to the original object literal definition
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass currentDefinition.yuiColumnId = column.get("id");
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Add the new Column to the hash
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass idHash[column.get("id")] = column;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass keyHash[column.get("key")] = column;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Assign its parent as an attribute, if applicable
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(parent) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass column.parent = parent;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // The Column has descendants
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(YLang.isArray(currentDefinition.children)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass currentChildren = currentDefinition.children;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass column._set("children", currentChildren);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass self._setColSpans(column, currentDefinition);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass self._cascadePropertiesToChildren(column, currentChildren);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // The children themselves must also be parsed for Column instances
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(!tree[depth+1]) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass tree[depth+1] = [];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass parseColumns(depth, currentChildren, column);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // This Column does not have any children
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass else {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass column.keyIndex = keys.length;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Default is already 1
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //column.colSpan = 1;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass keys.push(column);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Add the Column to the top-down dom tree
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass tree[depth].push(column);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass depth--;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Parse out Column instances from the array of object literals
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass parseColumns(-1, definitions);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Save to the Columnset instance
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.tree = tree;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.idHash = idHash;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.keyHash = keyHash;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.keys = keys;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._setRowSpans();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._setHeaders();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Destructor.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method destructor
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass destructor: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // COLUMN HELPERS
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Cascade certain properties to children if not defined on their own.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _cascadePropertiesToChildren
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _cascadePropertiesToChildren: function(column, currentChildren) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //TODO: this is all a giant todo
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var i = 0,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass len = currentChildren.length,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass child;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Cascade certain properties to children if not defined on their own
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass for(; i<len; ++i) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass child = currentChildren[i];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(column.get("className") && (child.className === undefined)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass child.className = column.get("className");
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(column.get("editor") && (child.editor === undefined)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass child.editor = column.get("editor");
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(column.get("formatter") && (child.formatter === undefined)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass child.formatter = column.get("formatter");
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(column.get("resizeable") && (child.resizeable === undefined)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass child.resizeable = column.get("resizeable");
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(column.get("sortable") && (child.sortable === undefined)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass child.sortable = column.get("sortable");
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(column.get("hidden")) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass child.hidden = true;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(column.get("width") && (child.width === undefined)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass child.width = column.get("width");
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(column.get("minWidth") && (child.minWidth === undefined)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass child.minWidth = column.get("minWidth");
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(column.get("maxAutoWidth") && (child.maxAutoWidth === undefined)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass child.maxAutoWidth = column.get("maxAutoWidth");
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _setColSpans
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Calculates and sets colSpan attribute on given Column.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param column {Array} Column instance.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param definition {Object} Column definition.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _setColSpans: function(column, definition) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Determine COLSPAN value for this Column
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var terminalChildNodes = 0;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass function countTerminalChildNodes(ancestor) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var descendants = ancestor.children,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass i = 0,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass len = descendants.length;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Drill down each branch and count terminal nodes
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass for(; i<len; ++i) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Keep drilling down
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(YLang.isArray(descendants[i].children)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass countTerminalChildNodes(descendants[i]);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Reached branch terminus
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass else {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass terminalChildNodes++;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass countTerminalChildNodes(definition);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass column.colSpan = terminalChildNodes;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _setRowSpans
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Calculates and sets rowSpan attribute on all Columns.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _setRowSpans: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Determine ROWSPAN value for each Column in the DOM tree
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass function parseDomTreeForRowSpan(tree) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var maxRowDepth = 1,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass currentRow,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass currentColumn,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass m,p;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Calculate the max depth of descendants for this row
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass function countMaxRowDepth(row, tmpRowDepth) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass tmpRowDepth = tmpRowDepth || 1;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var i = 0,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass len = row.length,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass col;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass for(; i<len; ++i) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass col = row[i];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Column has children, so keep counting
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(YLang.isArray(col.children)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass tmpRowDepth++;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass countMaxRowDepth(col.children, tmpRowDepth);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass tmpRowDepth--;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Column has children, so keep counting
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass else if(col.get && YLang.isArray(col.get("children"))) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass tmpRowDepth++;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass countMaxRowDepth(col.get("children"), tmpRowDepth);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass tmpRowDepth--;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // No children, is it the max depth?
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass else {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(tmpRowDepth > maxRowDepth) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass maxRowDepth = tmpRowDepth;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Count max row depth for each row
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass for(m=0; m<tree.length; m++) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass currentRow = tree[m];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass countMaxRowDepth(currentRow);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Assign the right ROWSPAN values to each Column in the row
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass for(p=0; p<currentRow.length; p++) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass currentColumn = currentRow[p];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(!YLang.isArray(currentColumn.get("children"))) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass currentColumn.rowSpan = maxRowDepth;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Default is already 1
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // else currentColumn.rowSpan =1;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Reset counter for next row
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass maxRowDepth = 1;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass parseDomTreeForRowSpan(this.tree);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _setHeaders
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Calculates and sets headers attribute on all Columns.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _setHeaders: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var headers, column,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass allKeys = this.keys,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass i=0, len = allKeys.length;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass function recurseAncestorsForHeaders(headers, column) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass headers.push(column.get("id"));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(column.parent) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass recurseAncestorsForHeaders(headers, column.parent);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass for(; i<len; ++i) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass headers = [];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass column = allKeys[i];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass recurseAncestorsForHeaders(headers, column);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass column.headers = headers.reverse().join(" ");
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //TODO
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass getColumn: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass});
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassY.Columnset = Columnset;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * The DataTable widget provides a progressively enhanced DHTML control for
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * displaying tabular data across A-grade browsers.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @module datatable
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Provides the base DataTable implementation, which can be extended to add
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * additional functionality, such as sorting or scrolling.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @module datatable
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @submodule datatable-base
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Base class for the DataTable widget.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @class DataTable.Base
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @extends Widget
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @constructor
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassfunction DTBase(config) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass DTBase.superclass.constructor.apply(this, arguments);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass//
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass// STATIC PROPERTIES
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass//
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassY.mix(DTBase, {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Class name.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property NAME
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type String
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @static
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @final
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @value "dataTable"
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass NAME: "dataTable",
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass//
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass// ATTRIBUTES
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass//
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ATTRS: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute columnset
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Pointer to Columnset instance.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Array | Y.Columnset
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass columnset: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass setter: "_setColumnset"
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute recordset
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Pointer to Recordset instance.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Array | Y.Recordset
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass recordset: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass valueFn: '_initRecordset',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass setter: "_setRecordset"
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /*TODO
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute state
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Internal state.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @readonly
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /*state: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass value: new Y.State(),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass readOnly: true
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },*/
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute summary
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Summary.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type String
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass summary: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute caption
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Caption
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type String
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass caption: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute thValueTemplate
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Tokenized markup template for TH value.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type String
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @default '{value}'
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass thValueTemplate: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass value: TEMPLATE_VALUE
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute tdValueTemplate
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Tokenized markup template for TD value.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type String
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @default '{value}'
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass tdValueTemplate: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass value: TEMPLATE_VALUE
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute trTemplate
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Tokenized markup template for TR node creation.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type String
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @default '<tr id="{id}"></tr>'
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass trTemplate: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass value: TEMPLATE_TR
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass//
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass// TODO: HTML_PARSER
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass//
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass HTML_PARSER: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /*caption: function (srcNode) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }*/
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass});
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass//
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass// PROTOTYPE
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass//
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassY.extend(DTBase, Y.Widget, {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property thTemplate
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Tokenized markup template for TH node creation.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type String
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @default '<th id="{id}" rowspan="{rowspan}" colspan="{colspan}" class="{classnames}" abbr="{abbr}"><div class="'+CLASS_LINER+'">{value}</div></th>'
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass thTemplate: TEMPLATE_TH,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property tdTemplate
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Tokenized markup template for TD node creation.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type String
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @default '<td headers="{headers}"><div class="'+CLASS_LINER+'">{value}</div></td>'
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass tdTemplate: TEMPLATE_TD,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property _theadNode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Pointer to THEAD node.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Y.Node
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _theadNode: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property _tbodyNode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Pointer to TBODY node.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Y.Node
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _tbodyNode: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property _msgNode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Pointer to message display node.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Y.Node
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _msgNode: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // ATTRIBUTE HELPERS
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _setColumnset
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Converts Array to Y.Columnset.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param columns {Array | Y.Columnset}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @returns Y.Columnset
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _setColumnset: function(columns) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return YLang.isArray(columns) ? new Y.Columnset({definitions:columns}) : columns;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Updates the UI if Columnset is changed.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _afterColumnsetChange
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param e {Event} Custom event for the attribute change.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @protected
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _afterColumnsetChange: function (e) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(this.get("rendered")) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._uiSetColumnset(e.newVal);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _setRecordset
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Converts Array to Y.Recordset.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param records {Array | Y.Recordset}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @returns Y.Recordset
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _setRecordset: function(rs) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(YLang.isArray(rs)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass rs = new Y.Recordset({records:rs});
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass rs.addTarget(this);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return rs;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Updates the UI if Recordset is changed.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _afterRecordsetChange
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param e {Event} Custom event for the attribute change.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @protected
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _afterRecordsetChange: function (e) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(this.get("rendered")) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._uiSetRecordset(e.newVal);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Updates the UI if summary is changed.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _afterSummaryChange
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param e {Event} Custom event for the attribute change.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @protected
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _afterSummaryChange: function (e) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(this.get("rendered")) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._uiSetSummary(e.newVal);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Updates the UI if caption is changed.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _afterCaptionChange
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param e {Event} Custom event for the attribute change.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @protected
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _afterCaptionChange: function (e) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(this.get("rendered")) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._uiSetCaption(e.newVal);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // METHODS
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Initializer.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method initializer
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param config {Object} Config object.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass initializer: function(config) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.after("columnsetChange", this._afterColumnsetChange);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.after("recordsetChange", this._afterRecordsetChange);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.after("summaryChange", this._afterSummaryChange);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.after("captionChange", this._afterCaptionChange);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Destructor.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method destructor
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass destructor: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.get("recordset").removeTarget(this);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // RENDER
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Renders UI.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method renderUI
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass renderUI: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // TABLE
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return (this._addTableNode(this.get("contentBox")) &&
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // COLGROUP
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._addColgroupNode(this._tableNode) &&
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // THEAD
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._addTheadNode(this._tableNode) &&
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Primary TBODY
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._addTbodyNode(this._tableNode) &&
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Message TBODY
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._addMessageNode(this._tableNode) &&
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // CAPTION
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._addCaptionNode(this._tableNode));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Creates and attaches TABLE element to given container.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _addTableNode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param containerNode {Y.Node} Parent node.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @protected
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @returns Y.Node
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _addTableNode: function(containerNode) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (!this._tableNode) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._tableNode = containerNode.appendChild(Ycreate(TEMPLATE_TABLE));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return this._tableNode;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Creates and attaches COLGROUP element to given TABLE.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _addColgroupNode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param tableNode {Y.Node} Parent node.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @protected
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @returns Y.Node
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _addColgroupNode: function(tableNode) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Add COLs to DOCUMENT FRAGMENT
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var len = this.get("columnset").keys.length,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass i = 0,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass allCols = ["<colgroup>"];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass for(; i<len; ++i) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass allCols.push(TEMPLATE_COL);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass allCols.push("</colgroup>");
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Create COLGROUP
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._colgroupNode = tableNode.insertBefore(Ycreate(allCols.join("")), tableNode.get("firstChild"));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return this._colgroupNode;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Creates and attaches THEAD element to given container.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _addTheadNode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param tableNode {Y.Node} Parent node.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @protected
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @returns Y.Node
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _addTheadNode: function(tableNode) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(tableNode) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._theadNode = tableNode.insertBefore(Ycreate(TEMPLATE_THEAD), this._colgroupNode.next());
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return this._theadNode;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Creates and attaches TBODY element to given container.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _addTbodyNode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param tableNode {Y.Node} Parent node.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @protected
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @returns Y.Node
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _addTbodyNode: function(tableNode) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._tbodyNode = tableNode.appendChild(Ycreate(TEMPLATE_TBODY));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return this._tbodyNode;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Creates and attaches message display element to given container.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _addMessageNode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param tableNode {Y.Node} Parent node.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @protected
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @returns Y.Node
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _addMessageNode: function(tableNode) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._msgNode = tableNode.insertBefore(Ycreate(TEMPLATE_MSG), this._tbodyNode);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return this._msgNode;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Creates and attaches CAPTION element to given container.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _addCaptionNode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param tableNode {Y.Node} Parent node.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @protected
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @returns Y.Node
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _addCaptionNode: function(tableNode) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._captionNode = tableNode.createCaption();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return this._captionNode;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // BIND
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Binds events.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method bindUI
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass bindUI: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var theadFilter = "thead."+CLASS_COLUMNS+">tr>th",
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass tbodyFilter ="tbody."+CLASS_DATA+">tr>td",
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass msgFilter = "tbody."+CLASS_MSG+">tr>td";
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass delegate: function(type) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //TODO: is this necessary?
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(type==="dblclick") {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.get("boundingBox").delegate.apply(this.get("boundingBox"), arguments);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass else {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.get("contentBox").delegate.apply(this.get("contentBox"), arguments);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // SYNC
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Syncs UI to intial state.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method syncUI
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass syncUI: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // THEAD ROWS
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._uiSetColumnset(this.get("columnset"));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // DATA ROWS
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._uiSetRecordset(this.get("recordset"));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // SUMMARY
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._uiSetSummary(this.get("summary"));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // CAPTION
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._uiSetCaption(this.get("caption"));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Updates summary.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _uiSetSummary
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param val {String} New summary.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @protected
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _uiSetSummary: function(val) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass val = YisValue(val) ? val : "";
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._tableNode.set("summary", val);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Updates caption.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _uiSetCaption
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param val {String} New caption.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @protected
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _uiSetCaption: function(val) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass val = YisValue(val) ? val : "";
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._captionNode.setContent(val);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // THEAD/COLUMNSET FUNCTIONALITY
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Updates THEAD.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _uiSetColumnset
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param cs {Y.Columnset} New Columnset.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @protected
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _uiSetColumnset: function(cs) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var tree = cs.tree,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass thead = this._theadNode,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass i = 0,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass len = tree.length,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass parent = thead.get("parentNode"),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass nextSibling = thead.next();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Move THEAD off DOM
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass thead.remove();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass thead.get("children").remove(true);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Iterate tree of columns to add THEAD rows
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass for(; i<len; ++i) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._addTheadTrNode({thead:thead, columns:tree[i]}, (i === 0), (i === len-1));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Column helpers needs _theadNode to exist
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //this._createColumnHelpers();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Re-attach THEAD to DOM
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass parent.insert(thead, nextSibling);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Creates and attaches header row element.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _addTheadTrNode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param o {Object} {thead, columns}.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param isFirst {Boolean} Is first row.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param isFirst {Boolean} Is last row.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @protected
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _addTheadTrNode: function(o, isFirst, isLast) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass o.tr = this._createTheadTrNode(o, isFirst, isLast);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._attachTheadTrNode(o);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Creates header row element.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _createTheadTrNode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param o {Object} {thead, columns}.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param isFirst {Boolean} Is first row.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param isLast {Boolean} Is last row.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @protected
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @returns Y.Node
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _createTheadTrNode: function(o, isFirst, isLast) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //TODO: custom classnames
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var tr = Ycreate(Ysubstitute(this.get("trTemplate"), o)),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass i = 0,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass columns = o.columns,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass len = columns.length,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass column;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Set FIRST/LAST class
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(isFirst) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass tr.addClass(CLASS_FIRST);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(isLast) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass tr.addClass(CLASS_LAST);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass for(; i<len; ++i) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass column = columns[i];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._addTheadThNode({value:column.get("label"), column: column, tr:tr});
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return tr;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Attaches header row element.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _attachTheadTrNode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param o {Object} {thead, columns, tr}.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @protected
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _attachTheadTrNode: function(o) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass o.thead.appendChild(o.tr);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Creates and attaches header cell element.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _addTheadThNode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param o {Object} {value, column, tr}.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @protected
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _addTheadThNode: function(o) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass o.th = this._createTheadThNode(o);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._attachTheadThNode(o);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //TODO: assign all node pointers: thNode, thLinerNode, thLabelNode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass o.column.thNode = o.th;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Creates header cell element.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _createTheadThNode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param o {Object} {value, column, tr}.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @protected
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @returns Y.Node
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _createTheadThNode: function(o) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var column = o.column;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Populate template object
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass o.id = column.get("id");//TODO: validate 1 column ID per document
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass o.colspan = column.colSpan;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass o.rowspan = column.rowSpan;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass o.abbr = column.get("abbr");
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass o.classnames = column.get("classnames");
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass o.value = Ysubstitute(this.get("thValueTemplate"), o);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /*TODO
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Clear minWidth on hidden Columns
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(column.get("hidden")) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //this._clearMinWidth(column);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return Ycreate(Ysubstitute(this.thTemplate, o));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Attaches header cell element.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _attachTheadThNode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param o {Object} {value, column, tr}.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @protected
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _attachTheadThNode: function(o) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass o.tr.appendChild(o.th);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // TBODY/RECORDSET FUNCTIONALITY
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ////////////////////////////////////////////////////////////////////////////
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Updates TBODY.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _uiSetRecordset
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param rs {Y.Recordset} New Recordset.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @protected
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _uiSetRecordset: function(rs) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var i = 0,//TODOthis.get("state.offsetIndex")
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass len = rs.getLength(), //TODOthis.get("state.pageLength")
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass oldTbody = this._tbodyNode,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass parent = oldTbody.get("parentNode"),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass nextSibling = oldTbody.next(),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass o = {},
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass newTbody;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Replace TBODY with a new one
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //TODO: split _addTbodyNode into create/attach
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass oldTbody.remove();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass oldTbody = null;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass newTbody = this._addTbodyNode(this._tableNode);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass newTbody.remove();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._tbodyNode = newTbody;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass o.tbody = newTbody;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Iterate Recordset to use existing TR when possible or add new TR
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass for(; i<len; ++i) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass o.record = rs.getRecord(i);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass o.rowindex = i;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._addTbodyTrNode(o); //TODO: sometimes rowindex != recordindex
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // TBODY to DOM
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass parent.insert(this._tbodyNode, nextSibling);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Creates and attaches data row element.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _addTbodyTrNode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param o {Object} {tbody, record}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @protected
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _addTbodyTrNode: function(o) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var tbody = o.tbody,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass record = o.record;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass o.tr = tbody.one("#"+record.get("id")) || this._createTbodyTrNode(o);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._attachTbodyTrNode(o);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Creates data row element.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _createTbodyTrNode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param o {Object} {tbody, record}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @protected
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @returns Y.Node
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _createTbodyTrNode: function(o) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var tr = Ycreate(Ysubstitute(this.get("trTemplate"), {id:o.record.get("id")})),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass i = 0,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass allKeys = this.get("columnset").keys,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass len = allKeys.length;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass o.tr = tr;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass for(; i<len; ++i) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass o.column = allKeys[i];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._addTbodyTdNode(o);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return tr;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Attaches data row element.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _attachTbodyTrNode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param o {Object} {tbody, record, tr}.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @protected
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _attachTbodyTrNode: function(o) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var tbody = o.tbody,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass tr = o.tr,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass index = o.rowindex,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass nextSibling = tbody.get("children").item(index) || null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass isEven = (index%2===0);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if(isEven) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass tr.replaceClass(CLASS_ODD, CLASS_EVEN);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass else {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass tr.replaceClass(CLASS_EVEN, CLASS_ODD);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass tbody.insertBefore(tr, nextSibling);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Creates and attaches data cell element.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _addTbodyTdNode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param o {Object} {record, column, tr}.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @protected
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _addTbodyTdNode: function(o) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass o.td = this._createTbodyTdNode(o);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._attachTbodyTdNode(o);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Creates data cell element.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _createTbodyTdNode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param o {Object} {record, column, tr}.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @protected
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @returns Y.Node
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _createTbodyTdNode: function(o) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var column = o.column;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //TODO: attributes? or methods?
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass o.headers = column.headers;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass o.classnames = column.get("classnames");
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass o.value = this.formatDataCell(o);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return Ycreate(Ysubstitute(this.tdTemplate, o));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Attaches data cell element.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _attachTbodyTdNode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param o {Object} {record, column, tr, headers, classnames, value}.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @protected
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _attachTbodyTdNode: function(o) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass o.tr.appendChild(o.td);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Returns markup to insert into data cell element.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method formatDataCell
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param @param o {Object} {record, column, tr, headers, classnames}.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass formatDataCell: function(o) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var record = o.record,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass column = o.column,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass formatter = column.get("formatter");
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass o.data = record.get("data");
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass o.value = record.getValue(column.get("field"));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return YLang.isString(formatter) ?
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Ysubstitute(formatter, o) : // Custom template
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass YLang.isFunction(formatter) ?
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass formatter.call(this, o) : // Custom function
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Ysubstitute(this.get("tdValueTemplate"), o); // Default template
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _initRecordset: function () {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return new Y.Recordset({ records: [] });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass});
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassY.namespace("DataTable").Base = DTBase;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass}, '@VERSION@' ,{requires:['recordset-base','widget','substitute','event-mouseenter']});