/** * A bar * <pre><strong>options:</strong> { * element : «Element», * name : «String» * } * </pre> * @constructor * @param {Object} options The options */ hui.ui.Split = function(options) { this.options = hui.override({},options); this.name = options.name; this.element = hui.get(options.element); this.rows = hui.get.children(this.element); this.handles = []; this.sizes = []; for (var i=0; i < this.rows.length; i++) { if (i>0) { this.handles.push(hui.build('div',{'class':'hui_split_handle',parent:this.element})); } } this._buildSizes(); hui.ui.extend(this); this._attach(); }; hui.ui.Split.prototype = { _attach : function() { hui.each(this.handles,function(handle) { hui.drag.register({ element : handle, //onStart : this._onDragStart.bind(this) , onBeforeMove : function(e) { hui.log('before'); }, onMove : function(e) { hui.log('moving'); } //onMove : this._onMove.bind(this), //onAfterMove : this._onAfterMove.bind(this) }); }); }, _buildSizes : function() { this.sizes = []; var i; for (i=0; i < this.rows.length; i++) { var row = this.rows[i], str = row.getAttribute('data-height'); if (str) { this.sizes.push(this._getSize(str)); } else { this.sizes.push(0); } } var total = 0, unspecified = 0; for (i=0; i < this.sizes.length; i++) { total += this.sizes[i]; unspecified += this.sizes[i] === 0 ? 1 : 0; } var rest = (1 - total) / unspecified; for (i=0; i < this.sizes.length; i++) { if (this.sizes[i] === 0) { this.sizes[i] = rest; } } }, _getSize : function(str) { if (str.indexOf('%')!=-1) { return parseInt(str)/100; } return parseInt(str)/this.element.clientHeight; }, $$layout : function() { this._layout(); }, _getSiblingHeight : function(e) { var height = e.parentNode.clientHeight; var siblings = e.parentNode.childNodes; for (var i=0; i < siblings.length; i++) { var sib = siblings[i]; if (sib!==e && hui.dom.isElement(siblings[i])) { if (hui.style.get(sib,'position')!='absolute') { height-=sib.offsetHeight; } } } return height; }, _layout : function() { var pos = 0, full = hui.position.getRemainingHeight(this.element); for (var i=0; i < this.rows.length; i++) { this.rows[i].style.top = (pos*full)+'px'; var height = (this.sizes[i]*full); if (i<this.rows.length-1) { height-=6; } this.rows[i].style.height = height+'px'; pos+=this.sizes[i]; if (i<this.rows.length-1) { this.handles[i].style.top = (pos*full)+'px'; } } } };