Get and set dimensions of widget
LSD.Trait.Dimensions = new Class({
options: {
events: {
_dimensions: {
'render': 'setSize'
}
}
},
initialize: function() {
this.size = {};
this.parent.apply(this, arguments);
},
setSize: function(size) {
if (!size || !(size.width || size.width)) size = {height: this.getStyle('height'), width: this.getStyle('width')}
if (!(this.setHeight(size.height, true) + this.setWidth(size.width, true))) return false;
var element = this.element, padding = this.offset.padding;
if (size.height && this.style.expressed.height) element.style.height = size.height - padding.top - padding.bottom + 'px'
if (size.width && this.style.expressed.width) element.style.width = size.width - padding.left - padding.right + 'px';
},
setHeight: function(value, light) {
value = Math.min(this.style.current.maxHeight || 1500, Math.max(this.style.current.minHeight || 0, value));
if (this.size.height == value) return false;
this.size.height = value;
if (!light) this.setStyle('height', value);
return value;
},
setWidth: function(value, light) {
value = Math.min(this.style.current.maxWidth || 3500, Math.max(this.style.current.minWidth || 0, value));
if (this.size.width == value) return false;
this.size.width = value;
if (!light) this.setStyle('width', value);
return value;
},
getClientHeight: function() {
var style = this.style.current, height = style.height, offset = this.offset, padding = offset.padding;
if (!height || (height == "auto")) {
height = this.element.clientHeight;
var inner = offset.inner || padding;
if (height > 0 && inner) height -= inner.top + inner.bottom;
}
if (height != 'auto' && padding) height += padding.top + padding.bottom;
return height;
},
getClientWidth: function() {
var style = this.style.current, offset = this.offset, padding = offset.padding, width = style.width;
if (typeof width != 'number') { //auto, inherit, undefined
var inside = offset.inside, outside = offset.outside, shape = offset.shape;
width = this.element.clientWidth;
if (width > 0) {
if (shape) width -= shape.left + shape.right;
if (inside) width -= inside.left + inside.right;
if (outside) width -= outside.left + outside.right;
}
}
if (style.display != 'block' && padding && inside) width += padding.left + padding.right;
return width;
},
getOffsetHeight: function(height) {
var style = this.style.current, inside = this.offset.inside, bottom = style.borderBottomWidth, top = style.borderTopWidth;
if (!height) height = this.getClientHeight();
if (inside) height += inside.top + inside.bottom;
if (top) height += top;
if (bottom) height += bottom;
return height;
},
getOffsetWidth: function(width) {
var style = this.style.current, inside = this.offset.inside, left = style.borderLeftWidth, right = style.borderRightWidth;
if (!width) width = this.getClientWidth();
if (inside) width += inside.left + inside.right;
if (left) width += left;
if (right) width += right
return width;
},
getLayoutHeight: function(height) {
height = this.getOffsetHeight(height);
if (this.offset.margin) height += this.offset.margin.top + this.offset.margin.bottom;
if (this.offset.outside) height += this.offset.outside.top + this.offset.outside.bottom;
return height;
},
getLayoutWidth: function(width) {
var width = this.getOffsetWidth(width), offset = this.offset, margin = offset.margin, outside = offset.outside
if (margin) width += margin.right + margin.left;
if (outside) width += outside.right + outside.left;
return width;
}
});