diff --git a/source/java/org/alfresco/web/ui/repo/component/UIActions.java b/source/java/org/alfresco/web/ui/repo/component/UIActions.java index 867e9a72ac..d6a2420fde 100644 --- a/source/java/org/alfresco/web/ui/repo/component/UIActions.java +++ b/source/java/org/alfresco/web/ui/repo/component/UIActions.java @@ -103,10 +103,6 @@ public class UIActions extends SelfRenderingComponent this.showLink = (Boolean)values[2]; this.verticalSpacing = (Integer)values[3]; this.groups = new HashSet(4); - - // when the state of the component is restored, clear the child list of components - they - // are always rebuilt on initial page render - otherwise the list will grow forever... - this.getChildren().clear(); } /** @@ -161,6 +157,20 @@ public class UIActions extends SelfRenderingComponent } } + // look to see if we built a component set for that component group on a previous render + // this will need removing from the child component set to ensure that it does not grow endlessly + for (Iterator i=getChildren().iterator(); i.hasNext(); /**/) + { + UIComponent child = (UIComponent)i.next(); + if (contextId.equals(child.getAttributes().get("contextId"))) + { + if (logger.isDebugEnabled()) + logger.debug("***removing old child component set for contextId: " + contextId); + i.remove(); + break; + } + } + String groupId = getValue(); if (groupId != null && groupId.length() != 0) { diff --git a/source/web/scripts/ajax/xforms.js b/source/web/scripts/ajax/xforms.js index 6cbcb2a30e..1d4eb1a76a 100644 --- a/source/web/scripts/ajax/xforms.js +++ b/source/web/scripts/ajax/xforms.js @@ -2844,9 +2844,16 @@ alfresco.xforms.VGroup = alfresco.xforms.AbstractGroup.extend({ var contentDivWidth = "100%"; // the following does avoid devision by zero ... in contentDiv.offsetLeft / child.domContainer.offsetWidth var ow = child.domContainer.offsetWidth; - if (!(child instanceof alfresco.xforms.AbstractGroup) && ow != 0) + if (!(child instanceof alfresco.xforms.AbstractGroup)) { - contentDivWidth = ((1 - (contentDiv.offsetLeft / ow)) * 100) + "%"; + if (ow != 0) + { + contentDivWidth = ((1 - (contentDiv.offsetLeft / ow)) * 100) + "%"; + } + else + { + contentDivWidth = "70%"; + } } contentDiv.style.width = contentDivWidth; child.render(contentDiv); @@ -2873,7 +2880,26 @@ alfresco.xforms.VGroup = alfresco.xforms.AbstractGroup.extend({ // (.5 * contentDiv.labelNode.offsetHeight))) + "px"; contentDiv.labelNode.style.position = "relative"; contentDiv.labelNode.style.top = "0px"; - contentDiv.labelNode.style.height = oh + "px"; + if (oh) + { + contentDiv.labelNode.style.height = oh + "px"; + } + else + { + var defaultHeight = 20; + if (child instanceof alfresco.xforms.RichTextEditor) + { + defaultHeight = 200; + } + contentDiv.labelNode.style.height = defaultHeight + "px"; + contentDiv.style.top = "-" + defaultHeight + "px"; + child.domContainer.style.height = defaultHeight + "px"; + } + + if (!contentDiv.labelNode.scrollWidth) + { + contentDiv.labelNode.style.width = "30%"; + } contentDiv.labelNode.style.lineHeight = contentDiv.labelNode.style.height; } @@ -4222,6 +4248,9 @@ alfresco.xforms.XForm = new Class({ this.rootWidget = new alfresco.xforms.ViewRoot(this, rootGroup); this.rootWidget.render(alfUI); + //par variable is introduced for offline domNode editing, which improves performance + var par = this.rootWidget.domNode.parentNode; + par.removeChild(this.rootWidget.domNode); this.loadWidgets(rootGroup, this.rootWidget); }, @@ -4291,20 +4320,20 @@ alfresco.xforms.XForm = new Class({ { if (alfresco.ieVersion == -1) { - // fix for ETWOTWO-490, hide elements after rendering (Mozila/Firefox) - if ((i == (xformsNode.childNodes.length - 1)) && - (parentWidget instanceof alfresco.xforms.SwitchGroup)) - { - for (var x = 0; x < parentWidget._children.length; x++) - { - if (parentWidget.triggers[x].getActions()["toggle"].properties["case"] != parentWidget._selectedCaseId) - { - parentWidget._children[x].domContainer.style.display = "none"; - } - } - } - } - continue; + // fix for ETWOTWO-490, hide elements after rendering (Mozila/Firefox) + if ((i == (xformsNode.childNodes.length - 1)) && + (parentWidget instanceof alfresco.xforms.SwitchGroup)) + { + for (var x = 0; x < parentWidget._children.length; x++) + { + if (parentWidget.triggers[x].getActions()["toggle"].properties["case"] != parentWidget._selectedCaseId) + { + parentWidget._children[x].domContainer.style.display = "none"; + } + } + } + } + continue; } alfresco.log("loading " + xformsNode.childNodes[i].nodeName + " into " + parentWidget.id);