| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- /* 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());
- }
- };
|