You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
183 lines
5.4 KiB
183 lines
5.4 KiB
/* Copyright (c) Business Objects 2006. All rights reserved. */
|
|
|
|
if (typeof(bobj.crv.SharedWidgetHolder) == 'undefined') {
|
|
bobj.crv.SharedWidgetHolder = {};
|
|
bobj.crv.SharedWidgetHolder._registry = {};
|
|
}
|
|
|
|
/**
|
|
* Constructor. SharedWidgetHolder is a placeholder for a widget.
|
|
* SharedWidgetHolder instances belong to groups, in which one managed
|
|
* widget will be shown in one placeholder at a time. When show(true) is called
|
|
* for any member of the group, the managed widget will be displayed in that
|
|
* member.
|
|
*
|
|
* @param id [String] DHTML id
|
|
* @param group [String] Group the new instance will belong to
|
|
* @param width [int | String] Width of the placeholder
|
|
* @param height [int | String] Height of the placeholder
|
|
* @param resizeWidget [bool] Resize to the placeholder's dimensions
|
|
*/
|
|
bobj.crv.newSharedWidgetHolder = function(kwArgs) {
|
|
var mb = MochiKit.Base;
|
|
var ms = MochiKit.Signal;
|
|
|
|
kwArgs = mb.update({
|
|
id: bobj.uniqueId(),
|
|
group: 'SharedWidgetHolder',
|
|
width: null,
|
|
height: null,
|
|
resizeWidget: true
|
|
}, kwArgs);
|
|
|
|
var o = newWidget(kwArgs.id);
|
|
o.widgetType = 'SharedWidgetHolder';
|
|
bobj.fillIn(o, kwArgs);
|
|
|
|
o._setVisible = o.show;
|
|
o._resizeHolder = o.resize;
|
|
o._initHolder = o.init;
|
|
mb.update(o, bobj.crv.SharedWidgetHolder);
|
|
|
|
o._register();
|
|
|
|
return o;
|
|
};
|
|
|
|
bobj.crv.SharedWidgetHolder.init = function() {
|
|
this._initHolder();
|
|
var regInfo = this._regInfo;
|
|
if (regInfo.managedWidget && this === regInfo.visibleHolder) {
|
|
regInfo.managedWidget.init();
|
|
this.resize();
|
|
}
|
|
};
|
|
|
|
bobj.crv.SharedWidgetHolder.getHTML = function() {
|
|
var ISNUMBER = bobj.isNumber;
|
|
var ISSTRING = bobj.isString;
|
|
|
|
var vis = this.isHoldingWidget() ? 'visible' : 'hidden';
|
|
var innerHTML = this.isHoldingWidget() ? this._regInfo.managedWidget.getHTML() : '';
|
|
|
|
var style = {visibility: vis};
|
|
|
|
var width = this.width;
|
|
if (ISNUMBER(width)) {
|
|
width = width + 'px';
|
|
}
|
|
if (ISSTRING(width)) {
|
|
style.width = width;
|
|
}
|
|
|
|
var height = this.height;
|
|
if (ISNUMBER(height)) {
|
|
height = height + 'px';
|
|
}
|
|
if (ISSTRING(height)) {
|
|
style.height = height;
|
|
}
|
|
|
|
return bobj.html.DIV({id: this.id, style: style}, innerHTML);
|
|
};
|
|
|
|
/**
|
|
* Private. Register this instance in a group.
|
|
*/
|
|
bobj.crv.SharedWidgetHolder._register = function() {
|
|
var registry = bobj.crv.SharedWidgetHolder._registry;
|
|
var holderInfo = registry[this.group];
|
|
|
|
if (!holderInfo) {
|
|
holderInfo = {
|
|
managedWidget: null,
|
|
visibleHolder: this
|
|
};
|
|
registry[this.group] = holderInfo;
|
|
}
|
|
|
|
this._regInfo = holderInfo;
|
|
};
|
|
|
|
/**
|
|
* @return [bool] True if and only if this instance is currently holding a
|
|
* non-null managed widget. Only one member of a group can return
|
|
* true at any given time.
|
|
*/
|
|
bobj.crv.SharedWidgetHolder.isHoldingWidget = function() {
|
|
var regInfo = this._regInfo;
|
|
return ((regInfo.visibleHolder === this) && regInfo.managedWidget);
|
|
};
|
|
|
|
/**
|
|
* @return [Widget] The widget that is managed by the holder group that this
|
|
* instance belongs to.
|
|
*/
|
|
bobj.crv.SharedWidgetHolder.getManagedWidget = function() {
|
|
return this._regInfo.managedWidget;
|
|
};
|
|
|
|
/**
|
|
* Set the widget that is managed by the group that this isntance belongs to.
|
|
* The widget will be displayed in the currently visible member of the group.
|
|
*
|
|
* @param widget [Widget] The widget that should be managed.
|
|
*/
|
|
bobj.crv.SharedWidgetHolder.setManagedWidget = function(widget) {
|
|
var regInfo = this._regInfo;
|
|
var oldWidget = regInfo.managedWidget;
|
|
regInfo.managedWidget = widget;
|
|
|
|
if (oldWidget && oldWidget.layer) {
|
|
MochiKit.DOM.removeElement(oldWidget.layer);
|
|
}
|
|
|
|
if (!regInfo.visibleHolder) {
|
|
regInfo.visibleHolder = this;
|
|
}
|
|
|
|
var holder = regInfo.visibleHolder;
|
|
|
|
if (holder.layer && widget && widget.layer) {
|
|
holder.layer.appendChild(widget.layer);
|
|
holder.resize();
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Alias for setManagedWidget. Allows instantiation using bobj.crv.createWidget();
|
|
*/
|
|
bobj.crv.SharedWidgetHolder.addChild = bobj.crv.SharedWidgetHolder.setManagedWidget;
|
|
|
|
/**
|
|
* Show or hide the managed widget in this holder instance.
|
|
*
|
|
* @param show [bool] If true, the managed widget will be displayed in this
|
|
* instance. If false and this holder is currently showing
|
|
* the managed widget, the widget will be hidden.
|
|
*/
|
|
bobj.crv.SharedWidgetHolder.show = function(show) {
|
|
var regInfo = this._regInfo;
|
|
if (show && (regInfo.visibleHolder !== this) && regInfo.managedWidget) {
|
|
this.layer.appendChild(regInfo.managedWidget.layer);
|
|
regInfo.visibleHolder._setVisible(false);
|
|
regInfo.visibleHolder = this;
|
|
this.resize();
|
|
}
|
|
this._setVisible(show);
|
|
};
|
|
|
|
/**
|
|
* Resize the holder instance. If resizeWidget property is true, the managed
|
|
* widget will be resized to the dimensions of the placeholder.
|
|
*
|
|
* @param w [width, optional] Width in pixels
|
|
* @param h [height, optional] Height in pixels
|
|
*/
|
|
bobj.crv.SharedWidgetHolder.resize = function(w, h) {
|
|
this._resizeHolder(w, h);
|
|
|
|
if (this.resizeWidget && this.isHoldingWidget()) {
|
|
this._regInfo.managedWidget.resize(this.getWidth(), this.getHeight());
|
|
}
|
|
}; |