refactor position and new padding code.

This commit is contained in:
Christopher Jeffrey 2013-07-30 23:57:48 -05:00
parent 78a3726f2f
commit 2e58aed1ea
1 changed files with 60 additions and 28 deletions

View File

@ -2332,8 +2332,9 @@ Element.prototype._getPos = function() {
*/ */
Element.prototype._getWidth = function(get) { Element.prototype._getWidth = function(get) {
var parent = get ? this.parent._getPos() : this.parent; var parent = get ? this.parent._getPos() : this.parent
var width = this.position.width || 0; , width = this.position.width || 0
, left;
if (typeof width === 'string') { if (typeof width === 'string') {
if (width === 'half') width = '50%'; if (width === 'half') width = '50%';
@ -2348,7 +2349,7 @@ Element.prototype._getWidth = function(get) {
// decided by the width the element, so it needs to be // decided by the width the element, so it needs to be
// calculated here. // calculated here.
if (!width) { if (!width) {
var left = this.position.left || 0; left = this.position.left || 0;
if (typeof left === 'string') { if (typeof left === 'string') {
if (left === 'center') left = '50%'; if (left === 'center') left = '50%';
left = +left.slice(0, -1) / 100; left = +left.slice(0, -1) / 100;
@ -2356,9 +2357,14 @@ Element.prototype._getWidth = function(get) {
} }
width = parent.width - (this.position.right || 0) - left; width = parent.width - (this.position.right || 0) - left;
if (this.screen.autoPadding) { if (this.screen.autoPadding) {
width -= ((this.position.left != null || this.position.right == null) if ((this.position.left != null || this.position.right == null)
&& this.position.left !== 'center' ? this.parent.ileft : 0); && this.position.left !== 'center') {
width -= (this.position.right != null ? this.parent.iright : 0); width -= (this.position.left != null || this.position.right == null)
&& this.position.left !== 'center' ? this.parent.ileft : 0;
}
if (this.position.right != null) {
width -= this.position.right != null ? this.parent.iright : 0;
}
} }
} }
@ -2370,8 +2376,9 @@ Element.prototype.__defineGetter__('width', function() {
}); });
Element.prototype._getHeight = function(get) { Element.prototype._getHeight = function(get) {
var parent = get ? this.parent._getPos() : this.parent; var parent = get ? this.parent._getPos() : this.parent
var height = this.position.height || 0; , height = this.position.height || 0
, top;
if (typeof height === 'string') { if (typeof height === 'string') {
if (height === 'half') height = '50%'; if (height === 'half') height = '50%';
@ -2386,7 +2393,7 @@ Element.prototype._getHeight = function(get) {
// decided by the width the element, so it needs to be // decided by the width the element, so it needs to be
// calculated here. // calculated here.
if (!height) { if (!height) {
var top = this.position.top || 0; top = this.position.top || 0;
if (typeof top === 'string') { if (typeof top === 'string') {
if (top === 'center') top = '50%'; if (top === 'center') top = '50%';
top = +top.slice(0, -1) / 100; top = +top.slice(0, -1) / 100;
@ -2394,9 +2401,14 @@ Element.prototype._getHeight = function(get) {
} }
height = parent.height - (this.position.bottom || 0) - top; height = parent.height - (this.position.bottom || 0) - top;
if (this.screen.autoPadding) { if (this.screen.autoPadding) {
height -= ((this.position.top != null || this.position.bottom == null) if ((this.position.top != null
&& this.position.top !== 'center' ? this.parent.itop : 0); || this.position.bottom == null)
height -= (this.position.bottom != null ? this.parent.ibottom : 0); && this.position.top !== 'center') {
height -= this.parent.itop;
}
if (this.position.bottom != null) {
height -= this.parent.ibottom;
}
} }
} }
@ -2408,8 +2420,8 @@ Element.prototype.__defineGetter__('height', function() {
}); });
Element.prototype._getLeft = function(get) { Element.prototype._getLeft = function(get) {
var parent = get ? this.parent._getPos() : this.parent; var parent = get ? this.parent._getPos() : this.parent
var left = this.position.left || 0; , left = this.position.left || 0;
if (typeof left === 'string') { if (typeof left === 'string') {
if (left === 'center') left = '50%'; if (left === 'center') left = '50%';
@ -2425,7 +2437,8 @@ Element.prototype._getLeft = function(get) {
} }
if (this.screen.autoPadding) { if (this.screen.autoPadding) {
if ((this.position.left != null || this.position.right == null) if ((this.position.left != null
|| this.position.right == null)
&& this.position.left !== 'center') { && this.position.left !== 'center') {
left += this.parent.ileft; left += this.parent.ileft;
} }
@ -2439,18 +2452,27 @@ Element.prototype.__defineGetter__('left', function() {
}); });
Element.prototype._getRight = function(get) { Element.prototype._getRight = function(get) {
var parent = get ? this.parent._getPos() : this.parent; var parent = get ? this.parent._getPos() : this.parent
, right;
if (this.position.right == null && this.position.left != null) { if (this.position.right == null && this.position.left != null) {
var right = this.screen.cols - (this._getLeft(get) + this._getWidth(get)); right = this.screen.cols - (this._getLeft(get) + this._getWidth(get));
if (this.screen.autoPadding) { if (this.screen.autoPadding) {
right += (this.position.right != null ? this.parent.iright : 0); if (this.position.right != null) {
right += this.parent.iright;
}
} }
return right; return right;
} }
var right = (parent.right || 0) + (this.position.right || 0);
right = (parent.right || 0) + (this.position.right || 0);
if (this.screen.autoPadding) { if (this.screen.autoPadding) {
right += (this.position.right != null ? this.parent.iright : 0); if (this.position.right != null) {
right += this.parent.iright;
}
} }
return right; return right;
}; };
@ -2459,8 +2481,8 @@ Element.prototype.__defineGetter__('right', function() {
}); });
Element.prototype._getTop = function(get) { Element.prototype._getTop = function(get) {
var parent = get ? this.parent._getPos() : this.parent; var parent = get ? this.parent._getPos() : this.parent
var top = this.position.top || 0; , top = this.position.top || 0;
if (typeof top === 'string') { if (typeof top === 'string') {
if (top === 'center') top = '50%'; if (top === 'center') top = '50%';
@ -2476,7 +2498,8 @@ Element.prototype._getTop = function(get) {
} }
if (this.screen.autoPadding) { if (this.screen.autoPadding) {
if ((this.position.top != null || this.position.bottom == null) if ((this.position.top != null
|| this.position.bottom == null)
&& this.position.top !== 'center') { && this.position.top !== 'center') {
top += this.parent.itop; top += this.parent.itop;
} }
@ -2490,18 +2513,27 @@ Element.prototype.__defineGetter__('top', function() {
}); });
Element.prototype._getBottom = function(get) { Element.prototype._getBottom = function(get) {
var parent = get ? this.parent._getPos() : this.parent; var parent = get ? this.parent._getPos() : this.parent
, bottom;
if (this.position.bottom == null && this.position.top != null) { if (this.position.bottom == null && this.position.top != null) {
var bottom = this.screen.rows - (this._getTop(get) + this._getHeight(get)); bottom = this.screen.rows - (this._getTop(get) + this._getHeight(get));
if (this.screen.autoPadding) { if (this.screen.autoPadding) {
bottom += (this.position.bottom != null ? this.parent.ibottom : 0); if (this.position.bottom != null) {
bottom += this.parent.ibottom;
}
} }
return bottom; return bottom;
} }
var bottom = (parent.bottom || 0) + (this.position.bottom || 0);
bottom = (parent.bottom || 0) + (this.position.bottom || 0);
if (this.screen.autoPadding) { if (this.screen.autoPadding) {
bottom += (this.position.bottom != null ? this.parent.ibottom : 0); if (this.position.bottom != null) {
bottom += this.parent.ibottom;
}
} }
return bottom; return bottom;
}; };