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
This commit is contained in:
Kevin Roast
2007-05-24 11:08:53 +00:00
parent dd0544389c
commit 156ff56ed9
17 changed files with 381 additions and 322 deletions

View File

@@ -86,6 +86,7 @@
</table>
</center>
</div>
<div id="spacePanelOverlay"></div>
<div id="spacePanel">
<#-- populated via an AJAX call to 'myspacespanel' webscript -->
<#-- resolved path, filter and home.noderef required as arguments -->
@@ -151,6 +152,17 @@ a.spacefilterLinkSelected:link, a.spacefilterLinkSelected:visited
visibility: hidden;
}
#spacePanelOverlay
{
background-image: url(${url.context}/images/icons/ajax_anim.gif);
background-position: center;
background-repeat: no-repeat;
position: absolute;
height: 320px;
width: 720px;
overflow: hidden;
}
.spaceRow
{
padding-top: 4px;

View File

@@ -42,68 +42,6 @@
</params>
</action>
<!-- Make a document multilingual -->
<action id="make_doc_multilingual">
<permissions>
<permission allow="true">Write</permission>
</permissions>
<evaluator>org.alfresco.web.action.evaluator.MakeMultilingualEvaluator</evaluator>
<label-id>make_multilingual</label-id>
<tooltip-id>make_multilingual_tooltip</tooltip-id>
<image>/images/icons/make_ml.gif</image>
<action>dialog:makeMultilingual</action>
<params>
<param name="id">#{actionContext.id}</param>
</params>
</action>
<!-- Add a translation -->
<action id="add_translation">
<permissions>
<permission allow="true">Write</permission>
</permissions>
<evaluator>org.alfresco.web.action.evaluator.AddTranslationEvaluator</evaluator>
<label-id>add_translation</label-id>
<tooltip-id>add_translation_tooltip</tooltip-id>
<image>/images/icons/add_tranlsation.gif</image>
<action-listener>#{AddTranslationDialog.start}</action-listener>
<action>addTranslation</action>
<params>
<param name="id">#{actionContext.id}</param>
</params>
</action>
<!-- Add a translation whithout content -->
<action id="add_translation_wc">
<permissions>
<permission allow="true">Write</permission>
</permissions>
<evaluator>org.alfresco.web.action.evaluator.AddTranslationEvaluator</evaluator>
<label-id>add_translation_wc</label-id>
<tooltip-id>add_translation_wc_tooltip</tooltip-id>
<image>/images/icons/add_tranlsation_wc.gif</image>
<action>dialog:addTranslationWithoutContent</action>
<params>
<param name="id">#{actionContext.id}</param>
</params>
</action>
<!-- Manage ml container details -->
<action id="ml_details">
<permissions>
<permission allow="true">Read</permission>
</permissions>
<evaluator>org.alfresco.web.action.evaluator.MultilingualDetailsEvaluator</evaluator>
<label-id>manage_multilingual_details</label-id>
<tooltip-id>manage_multilingual_details_tooltip</tooltip-id>
<image>/images/icons/multilingual_details.gif</image>
<action-listener>#{BrowseBean.setupContentAction}</action-listener>
<action>dialog:showMLContainerDetails</action>
<params>
<param name="id">#{actionContext.id}</param>
</params>
</action>
<!-- Edit document action to open using normal HTTP access or inline Edit if set -->
<action id="edit_doc_http">
<permissions>
@@ -634,6 +572,68 @@
<action>#{NavigatorPluginBean.reset}</action>
</action>
<!-- Make a document multilingual -->
<action id="make_doc_multilingual">
<permissions>
<permission allow="true">Write</permission>
</permissions>
<evaluator>org.alfresco.web.action.evaluator.MakeMultilingualEvaluator</evaluator>
<label-id>make_multilingual</label-id>
<tooltip-id>make_multilingual_tooltip</tooltip-id>
<image>/images/icons/make_ml.gif</image>
<action>dialog:makeMultilingual</action>
<params>
<param name="id">#{actionContext.id}</param>
</params>
</action>
<!-- Add a translation -->
<action id="add_translation">
<permissions>
<permission allow="true">Write</permission>
</permissions>
<evaluator>org.alfresco.web.action.evaluator.AddTranslationEvaluator</evaluator>
<label-id>add_translation</label-id>
<tooltip-id>add_translation_tooltip</tooltip-id>
<image>/images/icons/add_tranlsation.gif</image>
<action-listener>#{AddTranslationDialog.start}</action-listener>
<action>addTranslation</action>
<params>
<param name="id">#{actionContext.id}</param>
</params>
</action>
<!-- Add a translation whithout content -->
<action id="add_translation_wc">
<permissions>
<permission allow="true">Write</permission>
</permissions>
<evaluator>org.alfresco.web.action.evaluator.AddTranslationEvaluator</evaluator>
<label-id>add_translation_wc</label-id>
<tooltip-id>add_translation_wc_tooltip</tooltip-id>
<image>/images/icons/add_tranlsation_wc.gif</image>
<action>dialog:addTranslationWithoutContent</action>
<params>
<param name="id">#{actionContext.id}</param>
</params>
</action>
<!-- Manage ml container details -->
<action id="ml_details">
<permissions>
<permission allow="true">Read</permission>
</permissions>
<evaluator>org.alfresco.web.action.evaluator.MultilingualDetailsEvaluator</evaluator>
<label-id>manage_multilingual_details</label-id>
<tooltip-id>manage_multilingual_details_tooltip</tooltip-id>
<image>/images/icons/multilingual_details.gif</image>
<action-listener>#{BrowseBean.setupContentAction}</action-listener>
<action>dialog:showMLContainerDetails</action>
<params>
<param name="id">#{actionContext.id}</param>
</params>
</action>
<!-- the 'action-group' elements define unique blocks of actions that reference the actions
as defined above and can override or supply display elements for the group of actions -->
<!-- the component is responsible for making the context Node object available with name
@@ -747,19 +747,11 @@
<action idref="ml_details" />
</action-group>
<action-group id="Multilingual_details_actions">
<action-group id="multilingual_details_actions">
<action idref="add_translation" />
<action idref="add_translation_wc" />
<!--action idref="cut_container" /-->
<!--action idref="copy_container" /-->
<!--action idref="delete_container" /-->
<!--action idref="take_ownership_container" /-->
<!--action idref="start_discussion_container" /-->
<!--action idref="new_edition_container" /-->
</action-group>
<!-- Actions Menu for Space Details screen -->
<action-group id="space_details_actions">
<action idref="approve_space_details" />

View File

@@ -20,7 +20,7 @@
<!-- Override the cut action to check for discussions, don't allow them to be cut -->
<!-- Cut a document or space to the clipboard, from browse or doc details screens -->
<action id="cut_node">
<evaluator>org.alfresco.web.action.evaluator.CutNodeEvaluator</evaluator>
<evaluator>org.alfresco.web.action.evaluator.DiscussionCutEvaluator</evaluator>
<permissions>
<permission allow="true">Delete</permission>
</permissions>
@@ -36,7 +36,7 @@
<!-- Override the copy action to check for discussions, don't allow them to be copied -->
<!-- Copy a document or space to the clipboard, from browse or doc details screens -->
<action id="copy_node">
<evaluator>org.alfresco.web.action.evaluator.DiscussionCutCopyEvaluator</evaluator>
<evaluator>org.alfresco.web.action.evaluator.DiscussionCopyEvaluator</evaluator>
<label-id>copy</label-id>
<image>/images/icons/copy.gif</image>
<action-listener>#{ClipboardBean.copyNode}</action-listener>

View File

@@ -43,7 +43,6 @@ import org.alfresco.web.bean.repository.Node;
*/
public class AddTranslationEvaluator implements ActionEvaluator
{
public boolean evaluate(Node node)
{
FacesContext fc = FacesContext.getCurrentInstance();
@@ -59,12 +58,9 @@ public class AddTranslationEvaluator implements ActionEvaluator
// the total number of available languages for the translation
int contentFilterLanguagesCount = userprefs.getContentFilterLanguages(false).length;
return (
node.isLocked() == false &&
return (node.isLocked() == false &&
node.hasAspect(ContentModel.ASPECT_WORKING_COPY) == false &&
node.hasAspect(ContentModel.ASPECT_MULTILINGUAL_DOCUMENT) == true &&
availableTranslationCount < contentFilterLanguagesCount
);
availableTranslationCount < contentFilterLanguagesCount);
}
}

View File

@@ -40,20 +40,22 @@ import org.alfresco.web.bean.repository.Node;
*
* @author yanipig
*/
public class CutNodeEvaluator extends DiscussionCutCopyEvaluator
public class CutNodeEvaluator implements ActionEvaluator
{
public boolean evaluate(Node node)
{
boolean eval = super.evaluate(node);
boolean eval = true;
if(eval == true)
// impossible to cut/copy a translation without content.
if (node.getAspects().contains(ContentModel.ASPECT_MULTILINGUAL_EMPTY_TRANSLATION))
{
eval = false;
}
else
{
eval = !node.getAspects().contains(ContentModel.ASPECT_MULTILINGUAL_DOCUMENT);
}
return eval;
}
}

View File

@@ -70,7 +70,6 @@ public class DeleteDocEvaluator implements ActionEvaluator
return (node.isLocked() == false &&
node.hasAspect(ContentModel.ASPECT_WORKING_COPY) == false &&
isPivot == false
);
isPivot == false);
}
}

View File

@@ -36,13 +36,13 @@ import org.alfresco.web.bean.repository.Node;
import org.alfresco.web.bean.repository.Repository;
/**
* Evaluates whether the cut or copy action should be visible.
* Evaluates whether the copy action should be visible.
*
* If the node is a discussion don't allow the action.
*
* @author gavinc
*/
public class DiscussionCutCopyEvaluator implements ActionEvaluator
public class DiscussionCopyEvaluator implements ActionEvaluator
{
/**
* @see org.alfresco.web.action.ActionEvaluator#evaluate(org.alfresco.web.bean.repository.Node)

View File

@@ -0,0 +1,70 @@
/*
* Copyright (C) 2005-2007 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* As a special exception to the terms and conditions of version 2.0 of
* the GPL, you may redistribute this Program in connection with Free/Libre
* and Open Source Software ("FLOSS") applications as described in Alfresco's
* FLOSS exception. You should have recieved a copy of the text describing
* the FLOSS exception, and it is also available here:
* http://www.alfresco.com/legal/licensing"
*/
package org.alfresco.web.action.evaluator;
import javax.faces.context.FacesContext;
import org.alfresco.model.ContentModel;
import org.alfresco.model.ForumModel;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.namespace.QName;
import org.alfresco.web.action.ActionEvaluator;
import org.alfresco.web.bean.repository.Node;
import org.alfresco.web.bean.repository.Repository;
/**
* Evaluates whether the cut action should be visible.
*
* If the node is a discussion don't allow the action.
*
* @author gavinc
*/
public class DiscussionCutEvaluator extends CutNodeEvaluator
{
/**
* @see org.alfresco.web.action.ActionEvaluator#evaluate(org.alfresco.web.bean.repository.Node)
*/
public boolean evaluate(Node node)
{
boolean result = super.evaluate(node);
// if the node in question is a forum...
if (result && node.getType().equals(ForumModel.TYPE_FORUM))
{
// get the association type
FacesContext context = FacesContext.getCurrentInstance();
NodeService nodeService = Repository.getServiceRegistry(context).getNodeService();
ChildAssociationRef parentAssoc = nodeService.getPrimaryParent(node.getNodeRef());
QName assocType = parentAssoc.getTypeQName();
// only allow the action if the association type is not the discussion assoc
result = (assocType.equals(ForumModel.ASSOC_DISCUSSION) == false);
}
return result;
}
}

View File

@@ -41,7 +41,6 @@ import org.alfresco.web.bean.repository.Node;
*/
public class MakeMultilingualEvaluator implements ActionEvaluator
{
public boolean evaluate(Node node)
{
FacesContext fc = FacesContext.getCurrentInstance();
@@ -55,8 +54,6 @@ public class MakeMultilingualEvaluator implements ActionEvaluator
return (node.isLocked() == false &&
node.hasAspect(ContentModel.ASPECT_WORKING_COPY) == false &&
node.hasAspect(ContentModel.ASPECT_MULTILINGUAL_DOCUMENT) == false &&
contentFilterLanguagesCount > 0
);
contentFilterLanguagesCount > 0);
}
}

View File

@@ -37,12 +37,8 @@ import org.alfresco.web.bean.repository.Node;
*/
public class MultilingualDetailsEvaluator implements ActionEvaluator
{
public boolean evaluate(Node node)
{
return (
node.hasAspect(ContentModel.ASPECT_MULTILINGUAL_DOCUMENT) == true
);
return (node.hasAspect(ContentModel.ASPECT_MULTILINGUAL_DOCUMENT) == true);
}
}

View File

@@ -52,7 +52,6 @@ import org.alfresco.service.cmr.repository.ContentData;
import org.alfresco.service.cmr.repository.InvalidNodeRefException;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.Path;
import org.alfresco.service.cmr.search.LimitBy;
import org.alfresco.service.cmr.search.ResultSet;
import org.alfresco.service.cmr.search.ResultSetRow;
@@ -1083,13 +1082,13 @@ public class BrowseBean implements IContextListener
}
// else if the filter is equal to the lang node : nothing to do [lang = null]
}
return lang;
}
};
// ------------------------------------------------------------------------------
// Navigation action event handlers

View File

@@ -149,10 +149,8 @@ public class UserPreferencesBean
I18NUtil.setContentLocale(I18NUtil.parseLocale(this.contentFilterLanguage));
return this.contentFilterLanguage;
//return (contentFilterLanguage.equals(MSG_CONTENTALLLANGUAGES)) ? "en" : contentFilterLanguage;
}
/**
* @param languageStr A valid locale string or {@link #MSG_CONTENTALLLANGUAGES}
*/
@@ -215,19 +213,13 @@ public class UserPreferencesBean
for (String lang : languages)
{
String label = contentFilterLanguagesService.getLabelByCode(lang);
items[idx] = new SelectItem(
lang,
label);
items[idx++] = new SelectItem(lang, label);
idx++;
}
return items;
}
/**
* return the list of languages in which the given node hasn't be translated yet.
*
@@ -257,7 +249,6 @@ public class UserPreferencesBean
return items;
}
/**
* Helper to return the available language items
*

View File

@@ -503,6 +503,7 @@ a.topToolbarLinkHighlight, a.topToolbarLinkHighlight:link, a.topToolbarLinkHighl
color: #FFFFFF;
padding-left: 2px;
padding-right: 2px;
margin-left: 4px;
letter-spacing: 1px;
border: 1px solid #000000;
background-color: #0000FF;

View File

@@ -422,8 +422,7 @@
</f:facet>
<a:actionLink id="col10-act2" value="#{r.name}" href="#{r.url}" target="new" />
<r:lockIcon id="col10-lock" value="#{r.nodeRef}" align="absmiddle" />
<h:outputLabel value=" " rendered="#{r.lang != null}"/>
<h:outputLabel value="#{r.lang}" styleClass="langCode" rendered="#{r.lang != null}"/>
<h:outputLabel id="col10-lang" value="#{r.lang}" styleClass="langCode" rendered="#{r.lang != null}" />
<r:nodeInfo id="col10-info" value="#{r.id}">
<h:graphicImage id="col10-img" url="/images/icons/popup.gif" styleClass="popupImage" width="16" height="16" />
</r:nodeInfo>
@@ -436,8 +435,7 @@
</f:facet>
<a:actionLink id="col11-act2" value="#{r.name}" href="#{r.url}" target="new" styleClass="header" />
<r:lockIcon id="col11-lock" value="#{r.nodeRef}" align="absmiddle" />
<h:outputLabel value=" " rendered="#{r.lang != null}"/>
<h:outputLabel value="#{r.lang}" styleClass="langCode" rendered="#{r.lang != null}"/>
<h:outputLabel id="col11-lang" value="#{r.lang}" styleClass="langCode" rendered="#{r.lang != null}"/>
<r:nodeInfo id="col11-info" value="#{r.id}">
<h:graphicImage id="col11-img" url="/images/icons/popup.gif" styleClass="popupImage" width="16" height="16" />
</r:nodeInfo>
@@ -450,8 +448,7 @@
</f:facet>
<a:actionLink id="col12-act2" value="#{r.name}" href="#{r.url}" target="new" styleClass="title" />
<r:lockIcon id="col12-lock" value="#{r.nodeRef}" align="absmiddle" />
<h:outputLabel value=" " rendered="#{r.lang != null}"/>
<h:outputLabel value="#{r.lang}" styleClass="langCode" rendered="#{r.lang != null}"/>
<h:outputLabel id="col12-lang" value="#{r.lang}" styleClass="langCode" rendered="#{r.lang != null}"/>
<r:nodeInfo id="col12-info" value="#{r.id}">
<h:graphicImage id="col12-img" url="/images/icons/popup.gif" styleClass="popupImage" width="16" height="16" />
</r:nodeInfo>

View File

@@ -219,7 +219,7 @@
<%-- Document Actions --%>
<a:panel label="#{msg.actions}" id="actions-panel" border="white" bgcolor="white" titleBorder="lbgrey" expandedTitleBorder="dotted" titleBgcolor="white" style="text-align:center"
progressive="true" expanded='#{DocumentDetailsBean.panels["actions-panel"]}' expandedActionListener="#{DocumentDetailsBean.expandPanel}">
<r:actions id="actions_doc" value="Multilingual_details_actions" context="#{DocumentDetailsBean.document}" verticalSpacing="3" style="white-space:nowrap" />
<r:actions id="actions_doc" value="multilingual_details_actions" context="#{DocumentDetailsBean.document}" verticalSpacing="3" style="white-space:nowrap" />
</a:panel>
</td>
</tr>

View File

@@ -40,6 +40,8 @@ var MySpaces = {
init: function()
{
MySpaces.parseSpacePanels();
// hide the ajax wait panel and show the main spaces panel
$('spacePanelOverlay').setStyle('visibility', 'hidden');
$('spacePanel').setStyle('visibility', 'visible');
},
@@ -324,6 +326,8 @@ var MySpaces = {
// empty the main panel div and restart by reloading the panel contents
var spacePanel = $('spacePanel');
spacePanel.setStyle('visibility', 'hidden');
// show the ajax wait panel
$('spacePanelOverlay').setStyle('visibility', 'visible');
spacePanel.empty();
spacePanel.removeEvents('mouseleave');
MySpaces.start();

View File

@@ -216,7 +216,7 @@ Alfresco.InfoPanel.prototype =
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',
/*var fxAnim = new Fx.Style(this.popupElement, 'opacity',
{
duration: 300,
transition: Fx.Transitions.linear,
@@ -225,7 +225,10 @@ Alfresco.InfoPanel.prototype =
this.element.panel.visible = false;
}
});
fxAnim.start(1, 0);
fxAnim.start(1, 0);*/
this.popupElement.setStyle("opacity", 0);
this.popupElement.setStyle("display", "none");
this.popupElement.panel.visible = false;
}
}
}