ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke Smith// API Doc comments disabled to avoid deprecated class leakage into
ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke Smith// non-deprecated class API docs. See the 3.4.1 datatable API doc files in the
ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke Smith// download at http://yui.zenfs.com/releases/yui3/yui_3.4.1.zip for reference.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * The Columnset class defines and manages a collection of Columns.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @class Columnset
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @extends Base
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @constructor
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith Columnset.superclass.constructor.apply(this, arguments);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith/////////////////////////////////////////////////////////////////////////////
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith// STATIC PROPERTIES
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith/////////////////////////////////////////////////////////////////////////////
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * Class name.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @property NAME
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @type String
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @value "columnset"
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith /////////////////////////////////////////////////////////////////////////////
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // ATTRIBUTES
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith /////////////////////////////////////////////////////////////////////////////
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @attribute definitions
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @description Array of column definitions that will populate this Columnset.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @type Array
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith/////////////////////////////////////////////////////////////////////////////
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith/////////////////////////////////////////////////////////////////////////////
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith /////////////////////////////////////////////////////////////////////////////
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // ATTRIBUTE HELPERS
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith /////////////////////////////////////////////////////////////////////////////
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @method _setDefinitions
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @description Clones definitions before setting.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @param definitions {Array} Array of column definitions.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @return Array
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith /////////////////////////////////////////////////////////////////////////////
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // PROPERTIES
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith /////////////////////////////////////////////////////////////////////////////
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * Top-down tree representation of Column hierarchy. Used to create DOM
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @property tree
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @type {Column[]}
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * Hash of all Columns by ID.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @property idHash
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @type Object
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * Hash of all Columns by key.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @property keyHash
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @type Object
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * Array of only Columns that are meant to be displayed in DOM.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @property keys
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @type {Column[]}
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith /////////////////////////////////////////////////////////////////////////////
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith /////////////////////////////////////////////////////////////////////////////
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * Initializer. Generates all internal representations of the collection of
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @method initializer
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @param config {Object} Config object.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // DOM tree representation of all Columns
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Hash of all Columns by ID
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Hash of all Columns by key
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Flat representation of only Columns that are meant to display data
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Original definitions
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Internal recursive function to define Column instances
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith function parseColumns(depth, currentDefinitions, parent) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // One level down
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Create corresponding dom node if not already there for this depth
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Parse each node at this depth for attributes and any children
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith for(; i<len; ++i) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith currentDefinition = YLang.isString(currentDefinition) ? {key:currentDefinition} : currentDefinition;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Instantiate a new Column for each node
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Cross-reference Column ID back to the original object literal definition
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith currentDefinition.yuiColumnId = column.get("id");
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Add the new Column to the hash
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Assign its parent as an attribute, if applicable
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // The Column has descendants
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith self._cascadePropertiesToChildren(column, currentChildren);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // The children themselves must also be parsed for Column instances
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // This Column does not have any children
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Default is already 1
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith //column.colSpan = 1;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Add the Column to the top-down dom tree
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Parse out Column instances from the array of object literals
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Save to the Columnset instance
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * Destructor.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @method destructor
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith destructor: function() {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith /////////////////////////////////////////////////////////////////////////////
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // COLUMN HELPERS
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith /////////////////////////////////////////////////////////////////////////////
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * Cascade certain properties to children if not defined on their own.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @method _cascadePropertiesToChildren
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith _cascadePropertiesToChildren: function(column, currentChildren) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith //TODO: this is all a giant todo
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Cascade certain properties to children if not defined on their own
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith for(; i<len; ++i) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith if(column.get("className") && (child.className === undefined)) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith if(column.get("editor") && (child.editor === undefined)) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith if(column.get("formatter") && (child.formatter === undefined)) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith if(column.get("resizeable") && (child.resizeable === undefined)) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith if(column.get("sortable") && (child.sortable === undefined)) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith if(column.get("width") && (child.width === undefined)) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith if(column.get("minWidth") && (child.minWidth === undefined)) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith if(column.get("maxAutoWidth") && (child.maxAutoWidth === undefined)) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @method _setColSpans
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @description Calculates and sets colSpan attribute on given Column.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @param column {Array} Column instance.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @param definition {Object} Column definition.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Determine COLSPAN value for this Column
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Drill down each branch and count terminal nodes
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith for(; i<len; ++i) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Keep drilling down
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Reached branch terminus
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @method _setRowSpans
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @description Calculates and sets rowSpan attribute on all Columns.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Determine ROWSPAN value for each Column in the DOM tree
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Calculate the max depth of descendants for this row
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith for(; i<len; ++i) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Column has children, so keep counting
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Column has children, so keep counting
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith else if(col.get && YLang.isArray(col.get("children"))) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith countMaxRowDepth(col.get("children"), tmpRowDepth);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // No children, is it the max depth?
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Count max row depth for each row
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Assign the right ROWSPAN values to each Column in the row
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith if(!YLang.isArray(currentColumn.get("children"))) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Default is already 1
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // else currentColumn.rowSpan =1;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Reset counter for next row
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @method _setHeaders
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @description Calculates and sets headers attribute on all Columns.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith function recurseAncestorsForHeaders(headers, column) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith recurseAncestorsForHeaders(headers, column.parent);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith for(; i<len; ++i) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith getColumn: function() {