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.
ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke Smith/*
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * The Columnset class defines and manages a collection of Columns.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith *
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @class Columnset
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @extends Base
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @constructor
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith */
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smithfunction Columnset(config) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith Columnset.superclass.constructor.apply(this, arguments);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith}
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith/////////////////////////////////////////////////////////////////////////////
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith//
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith// STATIC PROPERTIES
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith//
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith/////////////////////////////////////////////////////////////////////////////
a3b15d60042c81a524cebb94370e5a234a19d04bLuke SmithY.mix(Columnset, {
ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke Smith /*
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * Class name.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith *
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @property NAME
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @type String
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @static
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @final
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @value "columnset"
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith */
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith NAME: "columnset",
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith /////////////////////////////////////////////////////////////////////////////
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith //
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // ATTRIBUTES
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith //
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith /////////////////////////////////////////////////////////////////////////////
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith ATTRS: {
ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke 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 definitions: {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith setter: "_setDefinitions"
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith});
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith/////////////////////////////////////////////////////////////////////////////
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith//
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith// PROTOTYPE
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith//
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith/////////////////////////////////////////////////////////////////////////////
a3b15d60042c81a524cebb94370e5a234a19d04bLuke SmithY.extend(Columnset, Y.Base, {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith /////////////////////////////////////////////////////////////////////////////
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith //
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // ATTRIBUTE HELPERS
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith //
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith /////////////////////////////////////////////////////////////////////////////
ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke 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 * @private
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith */
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith _setDefinitions: function(definitions) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith return Y.clone(definitions);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith },
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith /////////////////////////////////////////////////////////////////////////////
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith //
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // PROPERTIES
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith //
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith /////////////////////////////////////////////////////////////////////////////
ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke Smith /*
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * Top-down tree representation of Column hierarchy. Used to create DOM
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * elements.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith *
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @property tree
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @type {Column[]}
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith */
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith tree: null,
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke Smith /*
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * Hash of all Columns by ID.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith *
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @property idHash
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @type Object
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith */
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith idHash: null,
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke Smith /*
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * Hash of all Columns by key.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith *
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @property keyHash
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @type Object
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith */
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith keyHash: null,
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke Smith /*
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * Array of only Columns that are meant to be displayed in DOM.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith *
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @property keys
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @type {Column[]}
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith */
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith keys: null,
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith /////////////////////////////////////////////////////////////////////////////
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith //
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // METHODS
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith //
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith /////////////////////////////////////////////////////////////////////////////
ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke Smith /*
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * Initializer. Generates all internal representations of the collection of
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * Columns.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith *
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @method initializer
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @param config {Object} Config object.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @private
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith */
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith initializer: function() {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // DOM tree representation of all Columns
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith var tree = [],
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Hash of all Columns by ID
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith idHash = {},
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Hash of all Columns by key
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith keyHash = {},
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Flat representation of only Columns that are meant to display data
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith keys = [],
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Original definitions
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith definitions = this.get("definitions"),
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith self = this;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Internal recursive function to define Column instances
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith function parseColumns(depth, currentDefinitions, parent) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith var i=0,
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith len = currentDefinitions.length,
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith currentDefinition,
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith column,
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith currentChildren;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // One level down
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith depth++;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Create corresponding dom node if not already there for this depth
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith if(!tree[depth]) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith tree[depth] = [];
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Parse each node at this depth for attributes and any children
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith for(; i<len; ++i) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith currentDefinition = currentDefinitions[i];
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith currentDefinition = YLang.isString(currentDefinition) ? {key:currentDefinition} : currentDefinition;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Instantiate a new Column for each node
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith column = new Y.Column(currentDefinition);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Cross-reference Column ID back to the original object literal definition
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith currentDefinition.yuiColumnId = column.get("id");
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Add the new Column to the hash
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith idHash[column.get("id")] = column;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith keyHash[column.get("key")] = column;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Assign its parent as an attribute, if applicable
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith if(parent) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith column.parent = parent;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // The Column has descendants
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith if(YLang.isArray(currentDefinition.children)) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith currentChildren = currentDefinition.children;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith column._set("children", currentChildren);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith self._setColSpans(column, currentDefinition);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith self._cascadePropertiesToChildren(column, currentChildren);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // The children themselves must also be parsed for Column instances
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith if(!tree[depth+1]) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith tree[depth+1] = [];
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith parseColumns(depth, currentChildren, column);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // This Column does not have any children
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith else {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith column.keyIndex = keys.length;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Default is already 1
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith //column.colSpan = 1;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith keys.push(column);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Add the Column to the top-down dom tree
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith tree[depth].push(column);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith depth--;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Parse out Column instances from the array of object literals
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith parseColumns(-1, definitions);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Save to the Columnset instance
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith this.tree = tree;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith this.idHash = idHash;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith this.keyHash = keyHash;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith this.keys = keys;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith this._setRowSpans();
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith this._setHeaders();
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith },
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke Smith /*
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * Destructor.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith *
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @method destructor
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @private
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith */
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith destructor: function() {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith },
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith /////////////////////////////////////////////////////////////////////////////
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith //
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // COLUMN HELPERS
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith //
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith /////////////////////////////////////////////////////////////////////////////
ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke Smith /*
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * Cascade certain properties to children if not defined on their own.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith *
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @method _cascadePropertiesToChildren
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @private
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith */
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith _cascadePropertiesToChildren: function(column, currentChildren) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith //TODO: this is all a giant todo
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith var i = 0,
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith len = currentChildren.length,
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith child;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Cascade certain properties to children if not defined on their own
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith for(; i<len; ++i) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith child = currentChildren[i];
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith if(column.get("className") && (child.className === undefined)) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith child.className = column.get("className");
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith if(column.get("editor") && (child.editor === undefined)) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith child.editor = column.get("editor");
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith if(column.get("formatter") && (child.formatter === undefined)) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith child.formatter = column.get("formatter");
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith if(column.get("resizeable") && (child.resizeable === undefined)) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith child.resizeable = column.get("resizeable");
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith if(column.get("sortable") && (child.sortable === undefined)) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith child.sortable = column.get("sortable");
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith if(column.get("hidden")) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith child.hidden = true;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith if(column.get("width") && (child.width === undefined)) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith child.width = column.get("width");
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith if(column.get("minWidth") && (child.minWidth === undefined)) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith child.minWidth = column.get("minWidth");
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith if(column.get("maxAutoWidth") && (child.maxAutoWidth === undefined)) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith child.maxAutoWidth = column.get("maxAutoWidth");
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith },
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke Smith /*
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 * @private
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith */
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith _setColSpans: function(column, definition) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Determine COLSPAN value for this Column
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith var terminalChildNodes = 0;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith function countTerminalChildNodes(ancestor) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith var descendants = ancestor.children,
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith i = 0,
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith len = descendants.length;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Drill down each branch and count terminal nodes
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith for(; i<len; ++i) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Keep drilling down
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith if(YLang.isArray(descendants[i].children)) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith countTerminalChildNodes(descendants[i]);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Reached branch terminus
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith else {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith terminalChildNodes++;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith countTerminalChildNodes(definition);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith column.colSpan = terminalChildNodes;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith },
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke Smith /*
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @method _setRowSpans
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @description Calculates and sets rowSpan attribute on all Columns.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @private
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith */
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith _setRowSpans: function() {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Determine ROWSPAN value for each Column in the DOM tree
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith function parseDomTreeForRowSpan(tree) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith var maxRowDepth = 1,
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith currentRow,
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith currentColumn,
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith m,p;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Calculate the max depth of descendants for this row
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith function countMaxRowDepth(row, tmpRowDepth) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith tmpRowDepth = tmpRowDepth || 1;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith var i = 0,
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith len = row.length,
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith col;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith for(; i<len; ++i) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith col = row[i];
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Column has children, so keep counting
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith if(YLang.isArray(col.children)) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith tmpRowDepth++;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith countMaxRowDepth(col.children, tmpRowDepth);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith tmpRowDepth--;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Column has children, so keep counting
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith else if(col.get && YLang.isArray(col.get("children"))) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith tmpRowDepth++;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith countMaxRowDepth(col.get("children"), tmpRowDepth);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith tmpRowDepth--;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // No children, is it the max depth?
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith else {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith if(tmpRowDepth > maxRowDepth) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith maxRowDepth = tmpRowDepth;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Count max row depth for each row
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith for(m=0; m<tree.length; m++) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith currentRow = tree[m];
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith countMaxRowDepth(currentRow);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Assign the right ROWSPAN values to each Column in the row
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith for(p=0; p<currentRow.length; p++) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith currentColumn = currentRow[p];
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith if(!YLang.isArray(currentColumn.get("children"))) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith currentColumn.rowSpan = maxRowDepth;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Default is already 1
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // else currentColumn.rowSpan =1;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith // Reset counter for next row
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith maxRowDepth = 1;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith parseDomTreeForRowSpan(this.tree);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith },
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
ab9a926b36c2aa87e6e67a5179834093ed233ff4Luke Smith /*
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @method _setHeaders
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @description Calculates and sets headers attribute on all Columns.
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith * @private
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith */
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith _setHeaders: function() {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith var headers, column,
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith allKeys = this.keys,
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith i=0, len = allKeys.length;
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith function recurseAncestorsForHeaders(headers, column) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith headers.push(column.get("id"));
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith if(column.parent) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith recurseAncestorsForHeaders(headers, column.parent);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith for(; i<len; ++i) {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith headers = [];
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith column = allKeys[i];
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith recurseAncestorsForHeaders(headers, column);
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith column.headers = headers.reverse().join(" ");
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith },
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith //TODO
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith getColumn: function() {
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith }
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith});
a3b15d60042c81a524cebb94370e5a234a19d04bLuke Smith
a3b15d60042c81a524cebb94370e5a234a19d04bLuke SmithY.Columnset = Columnset;