1
0
Fork 0
forked from 0x2620/oxjs

Ox.Dialog rewrite

This commit is contained in:
rolux 2011-08-15 14:18:14 +02:00
commit e063626bdc
10 changed files with 762 additions and 513 deletions

View file

@ -1,401 +1,678 @@
// vim: et:ts=4:sw=4:sts=4:ft=javascript
/*@
Ox.Dialog <f:Ox.Element> Dialog Object
() -> <f> Dialog Object
(options) -> <f> Dialog Object
(options, self) -> <f> Dialog Object
Ox.Dialog <f:Ox.Element> Window object
() -> <f> Window object
(options) -> <f> Window object
(options, self) -> <f> Window object
options <o> Options object
self <o> shared private variable
draggable <b|true> is window draggable
fullscreenable <b|true> fixme: silly name
height <n|225> height
resizeable <b|true> resizeable
scaleable <b|true> sccaleable
width <n|400> width
self <o> Shared private variable
@*/
Ox.Dialog = function(options, self) {
// fixme: dialog should be derived from a generic draggable
// fixme: buttons should have a close attribute, or the dialog a close id
// fixme: use controlsTop/controlsBottom options, like in VideoPlayer (????)
self = self || {};
var that = Ox.Element({}, self)
.defaults({
title: '',
buttons: [],
controlsBottom: [],
controlsTop: [],
closeButton: false,
content: null,
fixedCenter: false,
fixedSize: false,
fixedRatio: false,
focus: true,
height: 216,
keys: {},
minHeight: 144,
minWidth: 256,
movable: true,
padding: 16,
resizable: true,
width: 384
height: 200,
maxHeight: Infinity,
maximizeButton: false,
maxWidth: Infinity,
minHeight: 64,
minWidth: 128,
title: '',
width: 400
})
.options(options || {})
.addClass('OxDialog')
.bindEvent({
key_enter: function() {
keypress('enter');
},
key_escape: function() {
//Ox.print('KEY ESCAPE')
keypress('escape');
}
});
.addClass('OxWindow')
.hide()
.appendTo(Ox.UI.$body);
$.extend(self, {
initialWidth: self.options.width,
initialHeight: self.options.height
self.hasButtons = !!self.options.buttons.length;
self.barsHeight = 24 + 24 * self.hasButtons;
self.initialHeight = self.options.height;
self.initialWidth = self.options.width;
self.initialMaxHeight = self.options.maxHeight;
self.initialMaxWidth = self.options.maxWidth;
self.titleMargin = 8 + (self.options.closeButton ? 20 : 0)
+ (self.options.maximizeButton ? 20 : 0);
if (self.options.focus) {
self.$layer = Ox.Element() // fixme: Layer widget that would handle click?
.addClass('OxLayer')
.mousedown(mousedownLayer)
.mouseup(mouseupLayer)
.hide()
.appendTo(Ox.UI.$body);
}
self.$box = $('<div>')
.addClass('OxDialogBox')
.css({zIndex: 11});
self.$titlebar = Ox.Bar({
size: 24
})
.addClass('OxTitlebar')
.appendTo(that);
if (self.options.closeButton) {
self.$closeButton = Ox.Button({
title: 'close',
type: 'image'
})
.css({
top: '4px',
left: '4px'
})
.bindEvent({
click: function() {
that.close();
}
})
.appendTo(self.$titlebar);
}
if (self.options.maximizeButton) {
self.$maximizeButton = Ox.Button({
title: [
{id: 'add', title: 'add'},
{id: 'remove', title: 'remove'}
],
type: 'image'
})
.css({
top: '4px',
left: '24px'
})
.bindEvent({
click: maximize
})
.appendTo(self.$titlebar);
}
self.$title = Ox.Element()
.addClass('OxTitle')
.css({
marginLeft: self.titleMargin + 'px',
marginRight: self.titleMargin + 'px'
})
.html(self.options.title)
.appendTo(self.$titlebar);
setContent();
if (self.hasButtons) {
self.$buttonsbar = Ox.Bar({
size: 24
})
.addClass('OxButtonsbar')
.appendTo(that);
self.$buttonsLeft = $('<div>')
.addClass('OxButtonsLeft')
.appendTo(self.$buttonsbar.$element);
self.$buttonsRight = $('<div>')
.addClass('OxButtonsRight')
.appendTo(self.$buttonsbar.$element);
var buttonsLeft,
buttonsRight,
index = Ox.map(self.options.buttons, function(v, i) {
return Ox.isEmpty(v) ? i : null;
})[0];
if (index) {
buttonsLeft = Ox.sub(self.options.buttons, 0, index);
buttonsRight = Ox.sub(self.options.buttons, index + 1);
} else {
buttonsLeft = [];
buttonsRight = self.options.buttons;
}
buttonsLeft.forEach(function($button) {
$button.addClass('OxLeft').appendTo(self.$buttonsLeft);
});
buttonsRight.forEach(function($button) {
$button.addClass('OxRight').appendTo(self.$buttonsRight);
});
}
if (!self.options.fixedCenter) {
self.$titlebar.css({
cursor: 'move'
})
.bindEvent({
doubleclick: function() {
!self.centered && center(true);
},
dragstart: dragstart,
drag: drag,
dragend: dragend,
});
self.hasButtons && self.$buttonsbar.css({
cursor: 'move'
})
.bindEvent({
doubleclick: function() {
!self.centered && center(true);
},
dragstart: dragstart,
drag: drag,
dragend: dragend
});
}
!self.options.fixedSize && [
'TopLeft', 'Top', 'TopRight', 'Left', 'Right', 'BottomLeft', 'Bottom', 'BottomRight'
].forEach(function(edge) {
Ox.Element()
.addClass('OxResize OxResize' + edge)
.bindEvent({
doubleclick: function() {
reset(true);
},
dragstart: resizestart,
drag: resize,
dragend: resizeend
})
.appendTo(that);
});
that.$titlebar = Ox.Bar({
size: 'medium'
})
.addClass('OxTitleBar')
.appendTo(that);
self.options.movable && that.$titlebar
.dblclick(center)
.bindEvent({
dragstart: dragstart,
drag: drag
});
that.$title = Ox.Element()
.addClass('OxTitle')
.html(self.options.title)
.appendTo(that.$titlebar);
that.$content = Ox.Element()
.addClass('OxContent')
.css({
padding: self.options.padding + 'px',
overflow: 'auto'
})
.append(self.options.content)
.appendTo(that);
that.$buttonsbar = Ox.Bar({})
.addClass('OxButtonsBar')
.appendTo(that);
loadButtons();
//that.$buttons[0].focus();
that.$layer = Ox.Element() // fixme: Layer widget that would handle click?
.addClass('OxLayer')
.mousedown(mousedownLayer)
.mouseup(mouseupLayer);
function center() {
var documentHeight = Ox.UI.$document.height();
that.css({
left: 0,
top: Math.max(parseInt(-documentHeight / 10), self.options.height - documentHeight + 40) + 'px',
right: 0,
bottom: 0,
margin: 'auto'
function center(animate) {
var ms = animate ? 100 : 0;
self.centered && decenter();
that.animate({
left: Math.round(
(window.innerWidth - self.options.width) / 2
) + 'px',
top: Math.round(
(window.innerHeight - self.options.height - self.barsHeight) * 0.4
) + 'px',
width: self.options.width + 'px',
height: self.options.height + self.barsHeight + 'px'
}, ms, function() {
that.css({
left: 0,
top: 0,
right: 0,
bottom: Math.round(
(window.innerHeight - self.options.height - self.barsHeight) * 0.2
) + 'px',
margin: 'auto'
});
self.centered = true;
Ox.isFunction(animate) && animate();
});
}
function dragstart(event, e) {
self.drag = {
bodyWidth: Ox.UI.$body.width(),
bodyHeight: Ox.UI.$document.height(),
elementWidth: that.width(),
offset: that.offset(),
x: e.clientX,
y: e.clientY
};
that.css({
margin: 0
});
function decenter() {
var offset = that.offset();
if (self.centered) {
that.css({
left: offset.left + 'px',
top: offset.top + 'px',
margin: 0
});
self.centered = false;
}
}
function drag(event, e) {
function dragstart(event) {
var offset;
if (!$(event.target).is('.OxButton')) {
offset = that.offset();
self.drag = {
left: offset.left,
top: offset.top,
x: event.clientX,
y: event.clientY
};
decenter();
that.wrap(self.$box);
}
}
function drag(event) {
Ox.print(document.body.scrollTop, '...')
var left = Ox.limit(
self.drag.offset.left - self.drag.x + e.clientX,
24 - self.drag.elementWidth, self.drag.bodyWidth - 24
//0, self.drag.documentWidth - self.drag.elementWidth
self.drag.left - self.drag.x + event.clientX,
self.minLeft, self.maxLeft
),
top = Ox.limit(
self.drag.offset.top - self.drag.y + e.clientY,
24, self.drag.bodyHeight - 24
//24, self.drag.documentHeight - self.drag.elementHeight
self.drag.top - self.drag.y + event.clientY,
self.minTop, self.maxTop
);
that.css({
left: left + 'px',
top: top + 'px'
setCSS({
left: left,
top: top
});
}
function dragstartResize(event, e) {
self.drag = {
documentWidth: Ox.UI.$document.width(),
documentHeight: Ox.UI.$document.height(),
elementWidth: that.width(),
elementHeight: that.height(),
offset: that.offset(),
x: e.clientX,
y: e.clientY
};
$.extend(self.drag, {
ratio: self.drag.elementWidth / self.drag.elementHeight
});
that.css({
left: self.drag.offset.left,
top: self.drag.offset.top,
margin: 0
});
function dragend() {
that.unwrap();
}
function dragResize(event, e) {
if (!e.shiftKey) {
self.drag.ratio = self.options.width / self.options.height;
function maximize() {
var offset = that.offset();
decenter();
if (!self.maximized) {
self.originalLeft = offset.left;
self.originalTop = offset.top;
self.originalWidth = self.options.width;
self.originalHeight = self.options.height;
}
self.options.width = Ox.limit(
self.drag.elementWidth - self.drag.x + e.clientX,
self.options.minWidth,
Math.min(
self.drag.documentWidth,
self.drag.documentWidth - self.drag.offset.left
)
);
self.options.height = Ox.limit(
self.drag.elementHeight - self.drag.y + e.clientY,
self.options.minHeight,
Math.min(
self.drag.documentHeight,
self.drag.documentHeight - self.drag.offset.top
)
);
if (e.shiftKey) {
self.options.height = Ox.limit(
self.options.width / self.drag.ratio,
self.options.minHeight,
Math.min(
self.drag.documentHeight,
self.drag.documentHeight - self.drag.offset.top
)
);
self.options.width = self.options.height * self.drag.ratio;
}
that.width(self.options.width);
that.height(self.options.height);
that.$content.height(self.options.height - 48 - 2 * self.options.padding); // fixme: this should happen automatically
}
function dragendResize(event, e) {
triggerResizeEvent();
}
function getButtonById(id) {
var ret = null;
//Ox.print('that.$buttons', that.$buttons, id)
Ox.forEach(that.$buttons, function(button) {
if (button.options('id') == id) {
ret = button;
return false;
}
});
return ret;
}
function keypress(key) {
var id = self.options.keys[key];
//Ox.print('X', key, self.options.keys)
id && getButtonById(id).$element.trigger('click');
}
function loadButtons() {
/*Ox.print('loadButtons', $.map(self.options.buttons, function(v) {
return v;
}));*/
if (that.$buttons) {
that.$buttons.forEach(function($button) {
$button.removeElement();
});
that.$resize.removeElement();
// that.$buttonsbar.empty();
}
that.$buttons = [];
if (!Ox.isArray(self.options.buttons[0])) {
self.options.buttons = [[], self.options.buttons];
}
self.options.buttons[0].forEach(function(button, i) {
that.$buttons[i] = button
.addClass('OxLeft')
.appendTo(that.$buttonsbar);
});
if (self.options.resizable) {
that.$resize = Ox.Element()
.addClass('OxResize')
.dblclick(reset)
.bindEvent({
dragstart: dragstartResize,
drag: dragResize,
dragend: dragendResize
})
.appendTo(that.$buttonsbar);
}
self.options.buttons[1].reverse().forEach(function(button) {
that.$buttons[that.$buttons.length] = button
.addClass('OxRight')
.appendTo(that.$buttonsbar);
});
setCSS(self.maximized ? {
left: self.originalLeft,
top: self.originalTop,
width: self.originalWidth,
height: self.originalHeight
} : {
left: Math.round((window.innerWidth - self.options.maxWidth) / 2),
top: Math.round((window.innerHeight - self.options.maxHeight - self.barsHeight) / 2),
width: self.options.maxWidth,
height: self.options.maxHeight
}, true);
self.maximized = !self.maximized;
}
function mousedownLayer() {
that.$layer.stop().animate({
self.$layer.stop().animate({
opacity: 0.5
}, 0);
}
function mouseupLayer() {
that.$layer.stop().animate({
self.$layer.stop().animate({
opacity: 0
}, 0);
}
function reset() {
$.extend(self.options, {
height: self.initialHeight,
width: self.initialWidth
});
that/*.css({
left: Math.max(that.offset().left, 24 - that.width())
})*/
.width(self.options.width)
.height(self.options.height);
that.$content.height(self.options.height - 48 - 2 * self.options.padding); // fixme: this should happen automatically
triggerResizeEvent();
function reset(animate) {
var offset, left, top;
if (!self.centered) {
offset = that.offset();
left = Ox.limit(
offset.left + Math.round((self.options.width - self.initialWidth) / 2),
self.minLeft, self.maxLeft
);
top = Ox.limit(
offset.top + Math.round((self.options.height - self.initialHeight) / 2),
self.minTop, self.maxTop
);
}
setCSS(Ox.extend({
width: self.initialWidth,
height: self.initialHeight
}, self.centered ? {} : {
left: left,
top: top
}), animate);
}
function triggerResizeEvent() {
function resizestart(event) {
var edge = event.target.className.substr(17).toLowerCase(),
offset = that.offset();
self.drag = {
edge: edge,
height: self.options.height,
isLeft: edge.indexOf('left') > -1,
isTop: edge.indexOf('top') > -1,
isRight: edge.indexOf('right') > -1,
isBottom: edge.indexOf('bottom') > -1,
left: offset.left,
top: offset.top,
width: self.options.width
};
decenter();
if (self.maximized) {
self.$maximizeButton.toggleTitle();
self.maximized = false;
}
that.wrap(self.$box);
}
function resize(event) {
var ratio = self.drag.width / self.drag.height, horizontal, vertical;
if (!self.drag.fixedRatio && event.shiftKey) {
self.drag.centerX = Math.round(self.drag.left + self.drag.width / 2);
self.drag.centerY = Math.round(self.drag.top + self.drag.height / 2);
}
self.drag.fixedCenter = self.options.fixedCenter || event.altKey;
self.drag.fixedRatio = self.options.fixedRatio || event.shiftKey;
horizontal = self.drag.edge == 'left' || self.drag.edge == 'right'
|| ratio >= 1 || !self.drag.fixedRatio;
vertical = self.drag.edge == 'top' || self.drag.edge == 'bottom'
|| ratio < 1 || !self.drag.fixedRatio;
if (self.drag.isLeft && horizontal) {
self.options.width = Ox.limit(
self.options.width + (
self.drag.left - Math.min(event.clientX, self.maxLeft)
) * (self.drag.fixedCenter ? 2 : 1),
self.options.minWidth,
self.options.maxWidth
);
if (self.drag.fixedRatio) {
self.options.height = Ox.limit(
Math.round(self.options.width / ratio),
self.options.minHeight,
self.options.maxHeight
);
self.options.width = Math.round(self.options.height * ratio);
}
setCSS(Ox.extend({
left: self.drag.left + (
self.drag.width - self.options.width
) / (self.drag.fixedCenter ? 2 : 1),
width: self.options.width,
}, self.drag.fixedRatio ? {
top: Math.max(Math.round(
self.drag.edge == 'topleft'
? self.drag.top + self.drag.height - self.options.height
: self.drag.edge == 'bottomleft'
? self.drag.top
: self.drag.centerY - self.options.height / 2
), self.minTop),
height: self.options.height
} : {}));
}
if (self.drag.isTop && vertical) {
self.options.height = Ox.limit(
self.options.height + (
self.drag.top - Ox.limit(event.clientY, self.minTop, self.maxTop)
) * (self.drag.fixedCenter ? 2 : 1),
self.options.minHeight,
self.options.maxHeight
);
if (self.drag.fixedRatio) {
self.options.width = Ox.limit(
Math.round(self.options.height * ratio),
self.options.minWidth,
self.options.maxWidth
);
self.options.height = Math.round(self.options.width / ratio);
}
setCSS(Ox.extend({
top: Math.max(self.drag.top + (
self.drag.height - self.options.height
) / (self.drag.fixedCenter ? 2 : 1), self.minTop),
height: self.options.height,
}, (self.drag.fixedRatio) ? {
left: Math.round(
self.drag.edge == 'topleft'
? self.drag.left + self.drag.width - self.options.width
: self.drag.edge == 'topright'
? self.drag.left
: self.drag.centerX - self.options.width / 2
),
width: self.options.width
} : {}));
}
if (self.drag.isRight && horizontal) {
self.options.width = Ox.limit(
self.options.width + (
Math.max(event.clientX, 24) - self.drag.left - self.drag.width
) * (self.drag.fixedCenter ? 2 : 1),
self.options.minWidth,
self.options.maxWidth
);
if (self.drag.fixedRatio) {
self.options.height = Ox.limit(
Math.round(self.options.width / ratio),
self.options.minHeight,
self.options.maxHeight
);
self.options.width = Math.round(self.options.height * ratio);
}
setCSS(Ox.extend({
width: self.options.width,
}, self.drag.fixedCenter ? {
left: self.drag.left + (
self.drag.width - self.options.width
) / 2
} : {}, self.drag.fixedRatio ? {
top: Math.max(Math.round(
self.drag.edge == 'topright'
? self.drag.top + self.drag.height - self.options.height
: self.drag.edge == 'bottomright'
? self.drag.top
: self.drag.centerY - self.options.height / 2
), self.minTop),
height: self.options.height
} : {}));
}
if (self.drag.isBottom && vertical) {
self.options.height = Ox.limit(
self.options.height + (
Math.max(event.clientY, 24) - self.drag.top - self.drag.height - self.barsHeight
) * (self.drag.fixedCenter ? 2 : 1),
self.options.minHeight,
self.options.maxHeight
);
if (self.drag.fixedRatio) {
self.options.width = Ox.limit(
Math.round(self.options.height * ratio),
self.options.minWidth,
self.options.maxWidth
);
self.options.height = Math.round(self.options.width / ratio);
}
setCSS(Ox.extend({
height: self.options.height,
}, self.drag.fixedCenter ? {
top: Math.max(self.drag.top + (
self.drag.height - self.options.height
) / 2, self.minTop)
} : {}, self.drag.fixedRatio && self.drag.edge == 'bottom' ? {
left: Math.round(
self.drag.edge == 'bottomleft'
? self.drag.left + self.drag.width - self.options.width
: self.drag.edge == 'bottomright'
? self.drag.left
: self.drag.centerX - self.options.width / 2
),
width: self.options.width
} : {}));
}
var offset = that.offset();
self.drag.left = offset.left;
self.drag.top = offset.top;
self.drag.width = self.options.width;
self.drag.height = self.options.height;
self.drag.minLeft = 24 - self.options.width;
self.drag.minTop = self.hasButtons ? 24 - self.options.height - self.barsHeight : 0;
that.triggerEvent('resize', {
width: self.options.width,
height: self.options.height
});
}
self.setOption = function(key, value) {
if (key == 'buttons') {
loadButtons();
/*
that.$buttonsbar.children().animate({
function resizeend() {
that.unwrap();
}
function setContent() {
var animate = !!self.$content
isImage = !self.options.content.ox && self.options.content.is('img');
if (animate) {
self.$content.animate({
opacity: 0
}, 100, function() {
loadButtons();
that.$buttonsbar.children().animate({
opacity: 1
}, 100);
$(this).remove() // fixme: removeElement?
});
*/
} else if (key == 'content') {
that.$content.html(value);
} else if (key == 'height' || key == 'width') {
that.animate({
height: self.options.height + 'px',
width: self.options.width + 'px'
}, 100);
that.$content.height(self.options.height - 48 - 2 * self.options.padding); // fixme: this should happen automatically
} else if (key == 'title') {
that.$title.animate({
self.options.content.css({
opacity: 0
}, 100, function() {
that.$title.html(value).animate({
opacity: 1
}, 100);
});
}
};
self.$content = (isImage ? self.options.content : Ox.Element())
.addClass('OxContent')
.css(self.hasButtons ? {
bottom: '24px'
} : {
bottom: 0,
borderBottomLeftRadius: '8px',
borderBottomRightRadius: '8px'
})
.appendTo(that.$element);
!isImage && self.$content.append(
self.options.content.css(self.hasButtons ? {} : {
borderBottomLeftRadius: '8px',
borderBottomRightRadius: '8px'
})
);
animate && self.options.content.animate({
opacity: 1
}, 100);
}
that.center = function() {
function setCSS(css, animate) {
var ms = animate ? 100 : 0,
offset = that.offset(),
triggerEvent = (css.width && css.width != self.options.width)
|| (css.height && css.height != self.options.height)
css = Ox.extend({
left: offset.left,
top: offset.top,
width: self.options.width,
height: self.options.height
}, css);
that.animate({
left: css.left + 'px',
top: css.top + 'px',
width: css.width + 'px',
height: css.height + self.barsHeight + 'px'
}, ms, function() {
self.options.width = css.width;
self.options.height = css.height;
self.minLeft = 24 - self.options.width;
self.minTop = self.hasButtons ? 24 - self.options.height - self.barsHeight : 0;
triggerEvent && that.triggerEvent('resize', {
width: self.options.width,
height: self.options.height
});
Ox.isFunction(animate) && animate();
});
}
function setMinAndMax() {
var ratio, maxRatio, minRatio;
self.maxLeft = window.innerWidth - 24;
self.maxTop = window.innerHeight - 24;
self.minLeft = 24 - self.options.width;
self.minTop = self.hasButtons ? 24 - self.options.height : 0;
self.options.maxHeight = Ox.limit(self.initialMaxHeight, 64, window.innerHeight - self.barsHeight);
self.options.maxWidth = Ox.limit(self.initialMaxWidth, 128, window.innerWidth);
if (self.options.fixedRatio) {
ratio = self.options.width / self.options.height;
maxRatio = self.options.maxWidth / self.options.maxHeight;
minRatio = self.options.minWidth / self.options.minHeight;
if (maxRatio > ratio) {
self.options.maxWidth = Math.round(self.options.maxHeight * ratio);
} else if (maxRatio < ratio) {
self.options.maxHeight = Math.round(self.options.maxWidth / ratio);
}
if (minRatio > ratio) {
self.options.minWidth = Math.round(self.options.minHeight * ratio);
} else if (minRatio < ratio) {
self.options.minHeight = Math.round(self.options.minWidth / ratio);
}
}
Ox.print('sMM', self, window.innerHeight, maxRatio)
}
self.setOption = function(key, value) {
if (key == 'content') {
setContent();
} else if (key == 'title') {
self.$title.animate({
opacity: 0
}, 50, function() {
self.$title.html(value).animate({
opacity: 1
}, 50);
});
}
};
that.close = function(callback) {
callback = callback || function() {};
that.animate({
opacity: 0
}, 200, function() {
that.$buttons.forEach(function($button) {
$button.removeElement();
});
if (self.options.focus) {
that.loseFocus();
that.$layer.removeElement();
}
that.removeElement();
callback();
}, 100, function() {
//that.removeElement();
that.hide();
callback && callback();
});
Ox.UI.$window.unbind('mouseup', mouseupLayer);
if (self.maximized) {
self.$maximizeButton.toggleTitle();
self.maximized = false;
}
if (self.options.focus) {
self.$layer.hide();
that.loseFocus();
Ox.UI.$window.unbind({mouseup: mouseupLayer});
}
return that;
};
that.content = function($element) {
that.$content.empty().append($element);
return that;
};
that.disable = function() {
// to be used on submit of form, like login
that.$layer.addClass('OxFront');
return that;
};
that.disableButton = function(id) {
getButtonById(id).options({
disabled: true
});
return that;
};
that.enable = function() {
that.$layer.removeClass('OxFront');
return that;
};
that.enableButton = function(id) {
getButtonById(id).options({
disabled: false
});
return that;
that.fullscreen = function() {
};
that.open = function() {
//Ox.print('before open')
if (self.options.focus) {
that.$layer.appendTo(Ox.UI.$body);
}
that.css({
opacity: 0
}).appendTo(Ox.UI.$body).animate({
opacity: 1
}, 200);
setMinAndMax();
center();
reset();
that.css({
opacity: 0
}).show().animate({
opacity: 1
}, 100);
if (self.options.focus) {
self.$layer.show();
that.gainFocus();
Ox.UI.$window.bind('mouseup', mouseupLayer);
Ox.UI.$window.bind({mouseup: mouseupLayer});
}
//Ox.print('after open')
return that;
Ox.UI.$window.bind({
resize: function() {
var offset = that.offset();
setMinAndMax();
if (self.centered) {
center();
} else {
that.css({
left: Math.min(offset.left, self.maxLeft) + 'px',
top: Math.min(offset.top, self.maxTop) + 'px'
});
}
}
});
return that;
};
that.size = function(width, height, callback) {
$.extend(self, {
initialWidth: width,
initialHeight: height
});
$.extend(self.options, {
width: width,
height: height
});
// fixme: duplicated
that.animate({
height: self.options.height + 'px',
width: self.options.width + 'px'
}, 100, function() {
that.$content.height(self.options.height - 48 - 2 * self.options.padding); // fixme: this should happen automatically
callback();
that.setSize = function(width, height) {
self.options.width = width;
self.options.height = height;
setMinAndMax();
if (self.maximized) {
self.options.width = self.options.maxWidth;
self.options.height = self.options.maxHeight;
}
center(true);
that.triggerEvent('resize', {
width: self.options.width,
height: self.options.height
});
};