Files
alfresco-community-repo/source/web/scripts/ajax/summary-info.js
Kevin Roast 156ff56ed9 MySpaces webscript now shows Ajax wait animation while loading inner panel area.
Summary pop-up panel fade-out anim removed (improves user experience).
Reorg of broken action evaluator class hiearchy (after ML UI changes).
More fixes to ML UI (browse.jsp missing component IDs breaks screen when panels collapsed then expanded).
Code reorg in interceptors to help performance.

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@5772 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
2007-05-24 11:08:53 +00:00

235 lines
6.2 KiB
JavaScript

//
// Supporting JavaScript for the Summary Info pop-up panel objects
// Kevin Roast 24-04-2007
//
// NOTE: This script requires common.js - which needs to be loaded
// prior to this one on the containing HTML page.
var _zIndex = 99;
/**
* Panel Manager constructor
*
* @param serverCall Server call to make on display e.g. NodeInfoBean.sendNodeInfo
* @param argName Argument name to pass panel ID object as e.g. nodeRef
*/
Alfresco.PanelManager = function(serverCall, argName, template)
{
this.serverCall = serverCall;
this.argName = argName;
this.template = template;
}
/**
* Definition of the Panel Manager class.
* Responsible for open/closing InfoPanel dynamic summary panel objects.
*/
Alfresco.PanelManager.prototype =
{
panels: [],
displayed: [],
serverCall: null,
argName: null,
template: null,
/**
* Request toggle of the open/close state of an info panel
*/
toggle: function(id, launchElement)
{
if (this.displayed[id] == undefined || this.displayed[id] == null)
{
var panel = this.panels[id];
if (panel == undefined || panel == null)
{
panel = new Alfresco.InfoPanel(this, id, launchElement);
this.panels[id] = panel;
}
this.displayed[id] = true;
panel.showInfo();
}
else
{
this.close(id);
}
},
/**
* Request a Close of the Summary info panel
*/
close: function(id)
{
var panel = this.panels[id];
if (panel != undefined && panel != null)
{
this.displayed[id] = null;
panel.hideInfo();
}
},
/**
* Return if a given info panel is currently displayable
*/
displayable: function(id)
{
return (this.displayed[id] != undefined && this.displayed[id] != null);
}
}
/**
* Constructor for the Info Panel object
*/
Alfresco.InfoPanel = function(manager, id, launchElement)
{
this.manager = manager;
this.id = id;
this.launchElement = launchElement;
}
/**
* Definition of the Info Panel object
*/
Alfresco.InfoPanel.prototype =
{
manager: null,
id: null,
launchElement: null,
popupElement: null,
visible: false,
loading: false,
/**
* Makes the AJAX request back to the server to get the panel info.
*/
showInfo: function()
{
if (this.loading == false)
{
if (this.popupElement == null)
{
this.loading = true;
var elImg = Alfresco.Dom.getElementByTagName(this.launchElement, "img");
if (elImg != null)
{
elImg.src = getContextPath() + "/images/icons/ajax_anim.gif";
}
YAHOO.util.Connect.asyncRequest(
"POST",
getContextPath() + '/ajax/invoke/' + this.manager.serverCall,
{
success: this.loadInfoHandler,
failure: handleErrorYahoo, // global error handler
argument: [this]
},
this.manager.argName + "=" + this.id +
(this.manager.template != null ? ("&template=" + this.manager.template) : ""));
}
else
{
this.displayInfo();
}
}
},
/**
* Callback function for showInfo() above
*/
loadInfoHandler: function(response)
{
var panel = response.argument[0];
// create a 'div' to hold the summary table - extend with mootools prototypes
var div = $(document.createElement("div"));
// setup the div with the correct appearance
div.innerHTML = response.responseText;
div.setAttribute("class", "summaryDropShadow");
// NOTE: use className for IE
div.setAttribute("className", "summaryDropShadow");
div.setStyle('position', "absolute");
div.setStyle('display', "none");
div.setStyle('left', 0);
div.setStyle('top', 0);
var body = document.getElementsByTagName("body")[0];
body.appendChild(div);
// store a ref to this panel outer object
div.panel = panel;
panel.loading = false;
// drag-drop object
new Drag.Move(div);
// keep track of the div element we created
panel.popupElement = div;
// display the div for the first time
panel.displayInfo();
},
/**
* Display the summary info panel for the panel
*/
displayInfo: function()
{
var elImg = Alfresco.Dom.getElementByTagName(this.launchElement, "img");
if (elImg != null)
{
elImg.src = getContextPath() + "/images/icons/popup.gif";
}
if (this.manager.displayable(this.id) == true)
{
if (this.popupElement != null && this.visible == false)
{
// set opacity in browser independant way
this.popupElement.setStyle("opacity", 0);
this.popupElement.setStyle("display", "block");
this.popupElement.setStyle("zIndex", _zIndex++); // pop to front
Alfresco.Dom.smartAlignElement(this.popupElement, this.launchElement, 700);
// animate the fade-in transition
var fxAnim = new Fx.Style(this.popupElement, 'opacity',
{
duration: 300,
transition: Fx.Transitions.linear,
onComplete: function()
{
this.element.panel.visible = true;
}
});
fxAnim.start(0, 1);
}
}
},
/**
* Hide the summary info panel
*/
hideInfo: function()
{
if (this.popupElement != null && this.visible == true)
{
// fade out and set the visiblilty flag on complete of the anim
/*var fxAnim = new Fx.Style(this.popupElement, 'opacity',
{
duration: 300,
transition: Fx.Transitions.linear,
onComplete: function()
{
this.element.panel.visible = false;
}
});
fxAnim.start(1, 0);*/
this.popupElement.setStyle("opacity", 0);
this.popupElement.setStyle("display", "none");
this.popupElement.panel.visible = false;
}
}
}