mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Ajax pop-up summary panel code refactored into generic library.
First cut of the My Tasks webscript.. Added "url.context" help object to template model for TemplateContentServlet. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@5549 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -11,8 +11,8 @@
|
||||
<#assign navurl="/navigate/showSpaceDetails/">
|
||||
</#if>
|
||||
<#assign navurl=navurl + node.nodeRef.storeRef.protocol + '/' + node.nodeRef.storeRef.identifier + '/' + node.nodeRef.id>
|
||||
<td width=24><center><a href='${absurl(navurl)}'><img src='${absurl("/images/icons/View_details.gif")}' style='cursor:pointer' width=12 height=16 border=0 title="Details" alt="Details"></a></center></td>
|
||||
<td width=14 align=right><img src='${absurl("/images/icons/close_panel.gif")}' onclick="AlfNodeInfoMgr.close('${node.nodeRef}');" style='cursor:pointer' width=14 height=14 border=0 title="Close" alt="Close"></td>
|
||||
<td width=24><center><a href='${url.context}${navurl}'><img src='${url.context}/images/icons/View_details.gif' style='cursor:pointer' width=12 height=16 border=0 title="Details" alt="Details"></a></center></td>
|
||||
<td width=14 align=right><img src='${url.context}/images/icons/close_panel.gif' onclick="AlfNodeInfoMgr.close('${node.nodeRef}');" style='cursor:pointer' width=14 height=14 border=0 title="Close" alt="Close"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
@@ -23,27 +23,27 @@
|
||||
<#assign isImage=node.isDocument && (node.mimetype = "image/gif" || node.mimetype = "image/jpeg" || node.mimetype = "image/png")>
|
||||
<#assign isVideo=node.isDocument && node.mimetype?starts_with("video/")>
|
||||
<#if isImage>
|
||||
<a href="${absurl(node.url)}" target="new"><img src="${absurl(node.url)}" width=120 border=0></a>
|
||||
<a href="${url.context}${node.url}" target="new"><img src="${url.context}${node.url}" width=120 border=0></a>
|
||||
<#elseif isVideo>
|
||||
<object width="320" height="240" border="0" id="player">
|
||||
<param name="UIMode" value="none" />
|
||||
<param name="URL" value="${absurl(node.url)}" />
|
||||
<param name="URL" value="${url.context}${node.url}" />
|
||||
<param name="autoStart" value="true" />
|
||||
<#--<embed type="application/x-mplayer2" pluginspage="http://microsoft.com/windows/mediaplayer/en/download/" src="${absurl(node.url)}" showcontrols="1" showdisplay="0" showstatusbar="0" autosize="1" autoplay="0" autoStart="0" height="240" width="320"></embed>-->
|
||||
<embed width="320" height="240" src="${absurl(node.url)}" border="0" showcontrols="1" showdisplay="0" showstatusbar="0" autosize="1" autoplay="0" autoStart="0"></embed>
|
||||
<#--<embed type="application/x-mplayer2" pluginspage="http://microsoft.com/windows/mediaplayer/en/download/" src="${url.context}${node.url}" showcontrols="1" showdisplay="0" showstatusbar="0" autosize="1" autoplay="0" autoStart="0" height="240" width="320"></embed>-->
|
||||
<embed width="320" height="240" src="${url.context}${node.url}" border="0" showcontrols="1" showdisplay="0" showstatusbar="0" autosize="1" autoplay="0" autoStart="0"></embed>
|
||||
</object>
|
||||
<#else>
|
||||
<table cellspacing=0 cellpadding=0 border=0>
|
||||
<tr>
|
||||
<td>
|
||||
<div style="border: thin solid #cccccc; padding:4px">
|
||||
<a href="${absurl(node.url)}" <#if node.isDocument>target="new"</#if>><img src="${absurl(node.icon32)}" width=32 height=32 border=0></a>
|
||||
<a href="${url.context}${node.url}" <#if node.isDocument>target="new"</#if>><img src="${url.context}${node.icon32}" width=32 height=32 border=0></a>
|
||||
</div>
|
||||
</td>
|
||||
<td><img src="${absurl('/images/parts/rightSideShadow42.gif')}" width=6 height=42></td>
|
||||
<td><img src="${url.context}/images/parts/rightSideShadow42.gif" width=6 height=42></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan=2><img src="${absurl('/images/parts/bottomShadow42.gif')}" width=48 height=5></td>
|
||||
<td colspan=2><img src="${url.context}/images/parts/bottomShadow42.gif" width=48 height=5></td>
|
||||
</tr>
|
||||
</table>
|
||||
</#if>
|
48
config/alfresco/templates/client/task_summary_panel.ftl
Normal file
48
config/alfresco/templates/client/task_summary_panel.ftl
Normal file
@@ -0,0 +1,48 @@
|
||||
<div class="taskPopupPanel">
|
||||
<table cellpadding='3' cellspacing='0'>
|
||||
<tr>
|
||||
<td colspan='2' class='mainSubTitle'>
|
||||
<table cellspacing='0' cellpadding='0' width='100%' style='cursor:move' id='dragable'>
|
||||
<tr>
|
||||
<td class='mainSubTitle'>${task.description}</td>
|
||||
<td width=14 align=right><img src='${url.context}/images/icons/close_panel.gif' onclick="TaskInfoMgr.close('${task.id}');" style='cursor:pointer' width=14 height=14 border=0 title="Close" alt="Close"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td valign='top'>
|
||||
<table cellpadding='2' cellspacing='0'>
|
||||
<tr><td>Type:</td><td>${task.type?html}</td></tr>
|
||||
<tr><td>Name:</td><td>${task.name?html}</td></tr>
|
||||
<tr><td>Start Date:</td><td>${task.startDate?date}</td></tr>
|
||||
<tr><td>Due Date:</td><td>
|
||||
<#if task.properties["bpm:dueDate"]?exists>
|
||||
${task.startDate?date}
|
||||
<#else>
|
||||
<i>None</i>
|
||||
</#if>
|
||||
</td></tr>
|
||||
<tr><td>Priority:</td><td>${task.properties["bpm:priority"]}</td>
|
||||
<tr><td>Percent Completed:</td><td>${task.properties["bpm:percentComplete"]}</td>
|
||||
<tr><td>Status:</td><td>${task.properties["bpm:status"]}</td>
|
||||
<tr><td>Completed:</td><td>${task.isCompleted?string("Yes", "No")}</td>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<STYLE type="text/css">
|
||||
.taskPopupPanel
|
||||
{
|
||||
background-image: url(../images/parts/popup_bg.gif);
|
||||
background-repeat: repeat-x;
|
||||
background-color: #F9F1A8;
|
||||
border: 1px solid #F6DEA0;
|
||||
padding: 4px;
|
||||
max-width: 700px;
|
||||
margin: 0px 0px 0px 0px;
|
||||
}
|
||||
</STYLE>
|
@@ -0,0 +1,7 @@
|
||||
<webscript>
|
||||
<shortname>My Tasks</shortname>
|
||||
<description>Generate the My Tasks portlet page</description>
|
||||
<url format="html" template="/mytasks?f={filter?}"/>
|
||||
<authentication>user</authentication>
|
||||
<transaction>required</transaction>
|
||||
</webscript>
|
@@ -0,0 +1,173 @@
|
||||
<link rel="stylesheet" href="${url.context}/css/main.css" TYPE="text/css">
|
||||
|
||||
<script type="text/javascript" src="/alfresco/scripts/ajax/yahoo/yahoo/yahoo-min.js"></script>
|
||||
<script type="text/javascript" src="/alfresco/scripts/ajax/yahoo/connection/connection-min.js"></script>
|
||||
<script type="text/javascript" src="/alfresco/scripts/ajax/yahoo/dom/dom-min.js"></script>
|
||||
<script type="text/javascript" src="/alfresco/scripts/ajax/yahoo/event/event-min.js"></script>
|
||||
<script type="text/javascript" src="/alfresco/scripts/ajax/yahoo/animation/animation-min.js"></script>
|
||||
<script type="text/javascript" src="/alfresco/scripts/ajax/yahoo/dragdrop/dragdrop-min.js"></script>
|
||||
<script type="text/javascript" src="/alfresco/scripts/ajax/common.js"></script>
|
||||
<script type="text/javascript" src="/alfresco/scripts/ajax/summary-info.js"></script>
|
||||
<script type="text/javascript">setContextPath('${url.context}');</script>
|
||||
|
||||
<script>
|
||||
// create manager object for the pop-up summary panels
|
||||
var TaskInfoMgr = new Alfresco.PanelManager("TaskInfoBean.sendTaskInfo", "taskId");
|
||||
|
||||
function taskMouseOver(el)
|
||||
{
|
||||
el._prevbg = el.style.backgroundColor;
|
||||
el.style.backgroundColor = "#FFE500";
|
||||
el.style.borderBottom = "1px solid #82770B";
|
||||
el.style.borderTop = "1px solid #82770B";
|
||||
}
|
||||
|
||||
function taskMouseOut(el)
|
||||
{
|
||||
el.style.backgroundColor = el._prevbg;
|
||||
el.style.borderBottom = "1px solid #EBE398";
|
||||
el.style.borderTop = "1px solid #FEF8BC";
|
||||
}
|
||||
</script>
|
||||
|
||||
<#-- get the filter mode from the passed in args -->
|
||||
<#-- filters: 0=all, 1=today, 2=next week, 3=no due date, 4=overdue -->
|
||||
<#if args.f?exists><#assign filter=args.f?number><#else><#assign filter=0></#if>
|
||||
|
||||
<table border=0 cellspacing=0 cellpadding=0 class="taskTable">
|
||||
<tr>
|
||||
<td width=36 bgcolor="#F9F3B0"> </td>
|
||||
<td align=center height=40 style="border-left: 1px solid #EBE398;">
|
||||
<table border=0 cellspacing=8 cellpadding=0>
|
||||
<tr>
|
||||
<th><a class="filterLink <#if filter=0>filterLinkSelected</#if>" href="${url.service}?f=0">Tasks to do</a></th>
|
||||
<th><a class="filterLink <#if filter=1>filterLinkSelected</#if>" href="${url.service}?f=1">Due Today</a></th>
|
||||
<th><a class="filterLink <#if filter=2>filterLinkSelected</#if>" href="${url.service}?f=2">Next 7 days</a></th>
|
||||
<th><a class="filterLink <#if filter=3>filterLinkSelected</#if>" href="${url.service}?f=3">No due date</a></th>
|
||||
<th><a class="filterLink <#if filter=4>filterLinkSelected</#if>" href="${url.service}?f=4">Overdue</a></th>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr><td bgcolor="#F9F3B0"> </td><td>
|
||||
<div class="taskPanel">
|
||||
<#assign weekms=1000*60*60*24*7>
|
||||
<#list workflow.assignedTasks?sort_by('startDate') as t>
|
||||
<#-- TODO: is it better to use a js script to pre-filter the list? -->
|
||||
<#assign hasDue=t.properties["bpm:dueDate"]?exists>
|
||||
<#if hasDue>
|
||||
<#assign due=t.properties["bpm:dueDate"]>
|
||||
</#if>
|
||||
<#if (filter=0) ||
|
||||
(filter=3 && !hasDue) ||
|
||||
(filter=1 && hasDue && (dateCompare(date?date, due?date, 0, "==") == 1)) ||
|
||||
(filter=2 && hasDue && (dateCompare(due?date, date?date) == 1 && dateCompare(date?date, due?date, weekms) == 1)) ||
|
||||
(filter=4 && hasDue && (dateCompare(date?date, due?date) == 1))>
|
||||
<div class="taskRow" onmouseover="taskMouseOver(this)" onmouseout="taskMouseOut(this)">
|
||||
<div class="taskIndicator">
|
||||
<#if hasDue>
|
||||
<#-- items due today? -->
|
||||
<#if (filter=0 || filter=1) && (dateCompare(date?date, due?date, 0, "==") == 1)>
|
||||
<img src="${url.context}/images/icons/task_today.gif"></div><div class="taskItem taskItemToday">
|
||||
<#-- items overdue? -->
|
||||
<#elseif (filter=0 || filter=4) && (dateCompare(date?date, due?date) == 1)>
|
||||
<img src="${url.context}/images/icons/task_overdue.gif"></div><div class="taskItem taskItemOverdue">
|
||||
<#else>
|
||||
</div><div class="taskItem">
|
||||
</#if>
|
||||
<#else>
|
||||
</div><div class="taskItem">
|
||||
</#if>
|
||||
${t.description?html} [${t.name?html}]
|
||||
<#if hasDue>
|
||||
(Due: ${due?date})
|
||||
</#if>
|
||||
<div style="display:inline" onclick="TaskInfoMgr.toggle('${t.id}',this);">
|
||||
<img src="${url.context}/images/icons/popup.gif" styleClass="popupImage" width="16" height="16" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</#if>
|
||||
</#list>
|
||||
</div>
|
||||
</td></tr>
|
||||
</table>
|
||||
|
||||
<STYLE type="text/css">
|
||||
a.filterLink:link, a.filterLink:visited
|
||||
{
|
||||
color: #5A5741;
|
||||
font-family: Trebuchet MS, Arial, Helvetica, sans-serif;
|
||||
font-size: 13px;
|
||||
font-weight: bold;
|
||||
text-decoration: none;
|
||||
padding-left: 4px;
|
||||
padding-right: 4px;
|
||||
}
|
||||
|
||||
a.filterLink:hover
|
||||
{
|
||||
color: #FFFFFF;
|
||||
background-color: #FDB64F;
|
||||
}
|
||||
|
||||
a.filterLinkSelected:link, a.filterLinkSelected:visited
|
||||
{
|
||||
color: #FFFFFF;
|
||||
background-color: #FDB64F;
|
||||
}
|
||||
|
||||
.taskTable
|
||||
{
|
||||
background-color: #FEF8BC;
|
||||
border: 1px solid #EBE398;
|
||||
}
|
||||
|
||||
.taskPanel
|
||||
{
|
||||
height: 300px;
|
||||
width: 700px;
|
||||
overflow: auto;
|
||||
border-top: 1px solid #EBE398;
|
||||
border-left: 1px solid #F6DEA0;
|
||||
background-image: url(../images/logo/alf_task_bg.png);
|
||||
background-repeat: no-repeat;
|
||||
background-position: 0 0;
|
||||
}
|
||||
|
||||
.taskRow
|
||||
{
|
||||
padding-top: 4px;
|
||||
padding-left: 8px;
|
||||
padding-right: 8px;
|
||||
padding-bottom: 4px;
|
||||
border-bottom: 1px solid #EBE398;
|
||||
border-top: 1px solid #FEF8BC;
|
||||
}
|
||||
|
||||
.taskItem
|
||||
{
|
||||
font-family: Trebuchet MS, Arial, Helvetica, sans-serif;
|
||||
font-size: 14px;
|
||||
color: #5A5741;
|
||||
margin: 0 0 0 24;
|
||||
}
|
||||
|
||||
.taskItemOverdue
|
||||
{
|
||||
color: #DF3704;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.taskItemToday
|
||||
{
|
||||
color: #399DF7;
|
||||
}
|
||||
|
||||
.taskIndicator
|
||||
{
|
||||
float: left;
|
||||
padding-top:6px;
|
||||
padding-left:4px;
|
||||
}
|
||||
</STYLE>
|
@@ -297,8 +297,8 @@ public abstract class BaseTemplateContentServlet extends BaseServlet
|
||||
}
|
||||
root.put("args", args);
|
||||
|
||||
// method to allow absolute client urls to be generated
|
||||
root.put("absurl", new AbsoluteUrlMethod(req.getContextPath()));
|
||||
// method to allow client urls to be generated
|
||||
root.put("url", new URLHelper(req.getContextPath()));
|
||||
|
||||
return root;
|
||||
}
|
||||
@@ -311,4 +311,22 @@ public abstract class BaseTemplateContentServlet extends BaseServlet
|
||||
return Utils.getFileTypeImage(getServletContext(), filename, small);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Helper to return context path for generating urls
|
||||
*/
|
||||
public static class URLHelper
|
||||
{
|
||||
String context;
|
||||
|
||||
public URLHelper(String context)
|
||||
{
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
public String getContext()
|
||||
{
|
||||
return context;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -39,6 +39,7 @@ import org.alfresco.repo.template.UrlEncodeMethod;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.repository.NodeService;
|
||||
import org.alfresco.service.cmr.repository.TemplateImageResolver;
|
||||
import org.alfresco.web.app.servlet.BaseTemplateContentServlet;
|
||||
import org.alfresco.web.bean.repository.Repository;
|
||||
import org.alfresco.web.ui.common.Utils;
|
||||
import org.apache.commons.logging.Log;
|
||||
@@ -77,7 +78,7 @@ public class NodeInfoBean
|
||||
if (this.nodeService.exists(nodeRef))
|
||||
{
|
||||
Repository.getServiceRegistry(context).getTemplateService().processTemplate(
|
||||
"/alfresco/templates/client/summary_panel.ftl", getModel(nodeRef), out);
|
||||
"/alfresco/templates/client/node_summary_panel.ftl", getModel(nodeRef), out);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -104,12 +105,13 @@ public class NodeInfoBean
|
||||
private Map<String, Object> getModel(NodeRef nodeRef)
|
||||
{
|
||||
FacesContext context = FacesContext.getCurrentInstance();
|
||||
Map<String, Object> model = new HashMap<String, Object>(7, 1.0f);
|
||||
Map<String, Object> model = new HashMap<String, Object>(8, 1.0f);
|
||||
|
||||
// create api methods
|
||||
model.put("date", new Date());
|
||||
model.put("cropContent", new CropContentMethod());
|
||||
model.put("absurl", new AbsoluteUrlMethod(context.getExternalContext().getRequestContextPath()));
|
||||
model.put("url", new BaseTemplateContentServlet.URLHelper(
|
||||
context.getExternalContext().getRequestContextPath()));
|
||||
model.put("node", new TemplateNode(
|
||||
nodeRef,
|
||||
Repository.getServiceRegistry(context),
|
||||
|
130
source/java/org/alfresco/web/bean/ajax/TaskInfoBean.java
Normal file
130
source/java/org/alfresco/web/bean/ajax/TaskInfoBean.java
Normal file
@@ -0,0 +1,130 @@
|
||||
/*
|
||||
* 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.bean.ajax;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.faces.context.FacesContext;
|
||||
import javax.faces.context.ResponseWriter;
|
||||
|
||||
import org.alfresco.repo.template.AbsoluteUrlMethod;
|
||||
import org.alfresco.repo.template.CropContentMethod;
|
||||
import org.alfresco.repo.template.TemplateNode;
|
||||
import org.alfresco.repo.template.UrlEncodeMethod;
|
||||
import org.alfresco.repo.template.Workflow;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.repository.NodeService;
|
||||
import org.alfresco.service.cmr.repository.TemplateImageResolver;
|
||||
import org.alfresco.service.cmr.workflow.WorkflowService;
|
||||
import org.alfresco.service.cmr.workflow.WorkflowTask;
|
||||
import org.alfresco.web.app.servlet.BaseTemplateContentServlet;
|
||||
import org.alfresco.web.bean.repository.Repository;
|
||||
import org.alfresco.web.ui.common.Utils;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
/**
|
||||
* Bean used by an AJAX control to send information back on the requested workflow task.
|
||||
*
|
||||
* @author Kevin Roast
|
||||
*/
|
||||
public class TaskInfoBean
|
||||
{
|
||||
private WorkflowService workflowService;
|
||||
|
||||
/**
|
||||
* Returns information on the node identified by the 'taskId'
|
||||
* parameter found in the ExternalContext.
|
||||
* <p>
|
||||
* The result is the formatted HTML to show on the client.
|
||||
*/
|
||||
public void sendTaskInfo() throws IOException
|
||||
{
|
||||
FacesContext context = FacesContext.getCurrentInstance();
|
||||
ResponseWriter out = context.getResponseWriter();
|
||||
|
||||
String taskId = (String)context.getExternalContext().getRequestParameterMap().get("taskId");
|
||||
if (taskId == null || taskId.length() == 0)
|
||||
{
|
||||
throw new IllegalArgumentException("'taskId' parameter is missing");
|
||||
}
|
||||
|
||||
WorkflowTask task = this.workflowService.getTaskById(taskId);
|
||||
if (task != null)
|
||||
{
|
||||
Repository.getServiceRegistry(context).getTemplateService().processTemplate(
|
||||
"/alfresco/templates/client/task_summary_panel.ftl", getModel(task), out);
|
||||
}
|
||||
else
|
||||
{
|
||||
out.write("<span class='errorMessage'>Task could not be found.</span>");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// Bean getters and setters
|
||||
|
||||
/**
|
||||
* @param workflowService The WorkflowService to set.
|
||||
*/
|
||||
public void setWorkflowService(WorkflowService workflowService)
|
||||
{
|
||||
this.workflowService = workflowService;
|
||||
}
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// Helper methods
|
||||
|
||||
private Map<String, Object> getModel(WorkflowTask task)
|
||||
{
|
||||
FacesContext context = FacesContext.getCurrentInstance();
|
||||
Map<String, Object> model = new HashMap<String, Object>(8, 1.0f);
|
||||
|
||||
// create template api methods and objects
|
||||
model.put("date", new Date());
|
||||
model.put("url", new BaseTemplateContentServlet.URLHelper(
|
||||
context.getExternalContext().getRequestContextPath()));
|
||||
model.put("task", new Workflow.WorkflowTaskItem(
|
||||
Repository.getServiceRegistry(context),
|
||||
this.imageResolver,
|
||||
task));
|
||||
|
||||
return model;
|
||||
}
|
||||
|
||||
/** Template Image resolver helper */
|
||||
private TemplateImageResolver imageResolver = new TemplateImageResolver()
|
||||
{
|
||||
public String resolveImagePathForName(String filename, boolean small)
|
||||
{
|
||||
return Utils.getFileTypeImage(FacesContext.getCurrentInstance(), filename, small);
|
||||
}
|
||||
};
|
||||
}
|
@@ -91,9 +91,8 @@ public class UINodeInfo extends SelfRenderingComponent
|
||||
get(NODE_INFO_SCRIPTS_WRITTEN);
|
||||
if (present == null)
|
||||
{
|
||||
out.write("<script type=\"text/javascript\" src=\"");
|
||||
out.write(context.getExternalContext().getRequestContextPath());
|
||||
out.write("/scripts/ajax/node-info.js\"></script>");
|
||||
out.write("<script>var AlfNodeInfoMgr = new Alfresco.PanelManager(" +
|
||||
"\"NodeInfoBean.sendNodeInfo\", \"noderef\");</script>");
|
||||
|
||||
context.getExternalContext().getRequestMap().put(
|
||||
NODE_INFO_SCRIPTS_WRITTEN, Boolean.TRUE);
|
||||
|
@@ -199,6 +199,11 @@ public class PageTag extends TagSupport
|
||||
out.write(reqPath);
|
||||
out.write("/scripts/ajax/common.js\"></script>");
|
||||
|
||||
// pop-up panel helper objects
|
||||
out.write("<script type=\"text/javascript\" src=\"");
|
||||
out.write(reqPath);
|
||||
out.write("/scripts/ajax/summary-info.js\"></script>");
|
||||
|
||||
// set the context path used by some Alfresco script objects
|
||||
out.write("<script type=\"text/javascript\">");
|
||||
out.write("setContextPath('");
|
||||
|
@@ -3177,6 +3177,19 @@
|
||||
</managed-property>
|
||||
</managed-bean>
|
||||
|
||||
<managed-bean>
|
||||
<description>
|
||||
Bean that returns information on a workflow task
|
||||
</description>
|
||||
<managed-bean-name>TaskInfoBean</managed-bean-name>
|
||||
<managed-bean-class>org.alfresco.web.bean.ajax.TaskInfoBean</managed-bean-class>
|
||||
<managed-bean-scope>request</managed-bean-scope>
|
||||
<managed-property>
|
||||
<property-name>workflowService</property-name>
|
||||
<value>#{WorkflowService}</value>
|
||||
</managed-property>
|
||||
</managed-bean>
|
||||
|
||||
<managed-bean>
|
||||
<description>
|
||||
Bean that returns manages the tree data for the navigator component
|
||||
|
BIN
source/web/images/icons/task_overdue.gif
Normal file
BIN
source/web/images/icons/task_overdue.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 110 B |
BIN
source/web/images/icons/task_today.gif
Normal file
BIN
source/web/images/icons/task_today.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 104 B |
BIN
source/web/images/logo/alf_task_bg.png
Normal file
BIN
source/web/images/logo/alf_task_bg.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.9 KiB |
Binary file not shown.
Before Width: | Height: | Size: 125 B After Width: | Height: | Size: 125 B |
@@ -1,103 +1,106 @@
|
||||
//
|
||||
// Supporting JavaScript for the NodeInfo component
|
||||
// Gavin Cornwell 17-07-2006
|
||||
// Kevin Roast 21-02-2007 (rewrite to use individual panel objects and convert to YUI)
|
||||
// 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;
|
||||
var _zIndex = 99;
|
||||
|
||||
/**
|
||||
* Node Info Manager constructor
|
||||
* 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.NodeInfoManager = function()
|
||||
Alfresco.PanelManager = function(serverCall, argName)
|
||||
{
|
||||
this.serverCall = serverCall;
|
||||
this.argName = argName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Definition of the Node Info Manager class.
|
||||
* Responsible for open/closing NodeInfoPanel dynamic summary panel objects.
|
||||
* Definition of the Panel Manager class.
|
||||
* Responsible for open/closing InfoPanel dynamic summary panel objects.
|
||||
*/
|
||||
Alfresco.NodeInfoManager.prototype =
|
||||
Alfresco.PanelManager.prototype =
|
||||
{
|
||||
panels: [],
|
||||
displayed: [],
|
||||
serverCall: null,
|
||||
argName: null,
|
||||
|
||||
/**
|
||||
* Request toggle of the open/close state of a node info panel
|
||||
* Request toggle of the open/close state of an info panel
|
||||
*/
|
||||
toggle: function(nodeRef, launchElement)
|
||||
toggle: function(id, launchElement)
|
||||
{
|
||||
if (this.displayed[nodeRef] == undefined || this.displayed[nodeRef] == null)
|
||||
if (this.displayed[id] == undefined || this.displayed[id] == null)
|
||||
{
|
||||
var panel = this.panels[nodeRef];
|
||||
var panel = this.panels[id];
|
||||
if (panel == undefined || panel == null)
|
||||
{
|
||||
panel = new Alfresco.NodeInfoPanel(nodeRef, launchElement);
|
||||
this.panels[nodeRef] = panel;
|
||||
panel = new Alfresco.InfoPanel(this, id, launchElement);
|
||||
this.panels[id] = panel;
|
||||
}
|
||||
this.displayed[nodeRef] = true;
|
||||
panel.showNodeInfo();
|
||||
this.displayed[id] = true;
|
||||
panel.showInfo();
|
||||
}
|
||||
else
|
||||
{
|
||||
this.close(nodeRef);
|
||||
this.close(id);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Request a Close of the node info panel
|
||||
* Request a Close of the Summary info panel
|
||||
*/
|
||||
close: function(nodeRef)
|
||||
close: function(id)
|
||||
{
|
||||
var panel = this.panels[nodeRef];
|
||||
var panel = this.panels[id];
|
||||
if (panel != undefined && panel != null)
|
||||
{
|
||||
this.displayed[nodeRef] = null;
|
||||
panel.hideNodeInfo();
|
||||
this.displayed[id] = null;
|
||||
panel.hideInfo();
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Return if a given node info panel is currently displayable
|
||||
* Return if a given info panel is currently displayable
|
||||
*/
|
||||
displayable: function(nodeRef)
|
||||
displayable: function(id)
|
||||
{
|
||||
return (this.displayed[nodeRef] != undefined && this.displayed[nodeRef] != null);
|
||||
return (this.displayed[id] != undefined && this.displayed[id] != null);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct the single Node Info Manager instance
|
||||
*/
|
||||
var AlfNodeInfoMgr = new Alfresco.NodeInfoManager();
|
||||
|
||||
|
||||
/**
|
||||
* Constructor for the Node Info Panel object
|
||||
* Constructor for the Info Panel object
|
||||
*/
|
||||
Alfresco.NodeInfoPanel = function(nodeRef, launchElement)
|
||||
Alfresco.InfoPanel = function(manager, id, launchElement)
|
||||
{
|
||||
this.nodeRef = nodeRef;
|
||||
this.manager = manager;
|
||||
this.id = id;
|
||||
this.launchElement = launchElement;
|
||||
}
|
||||
|
||||
/**
|
||||
* Definition of the Node Info Panel object
|
||||
* Definition of the Info Panel object
|
||||
*/
|
||||
Alfresco.NodeInfoPanel.prototype =
|
||||
Alfresco.InfoPanel.prototype =
|
||||
{
|
||||
nodeRef: null,
|
||||
manager: null,
|
||||
id: null,
|
||||
launchElement: null,
|
||||
popupElement: null,
|
||||
visible: false,
|
||||
loading: false,
|
||||
|
||||
/**
|
||||
* Makes the AJAX request back to the server to get the node info.
|
||||
* Makes the AJAX request back to the server to get the panel info.
|
||||
*/
|
||||
showNodeInfo: function()
|
||||
showInfo: function()
|
||||
{
|
||||
if (this.loading == false)
|
||||
{
|
||||
@@ -113,25 +116,25 @@ Alfresco.NodeInfoPanel.prototype =
|
||||
|
||||
YAHOO.util.Connect.asyncRequest(
|
||||
"POST",
|
||||
getContextPath() + '/ajax/invoke/NodeInfoBean.sendNodeInfo',
|
||||
getContextPath() + '/ajax/invoke/' + this.manager.serverCall,
|
||||
{
|
||||
success: this.loadNodeInfoHandler,
|
||||
success: this.loadInfoHandler,
|
||||
failure: handleErrorYahoo, // global error handler
|
||||
argument: [this]
|
||||
},
|
||||
"noderef=" + this.nodeRef);
|
||||
this.manager.argName + "=" + this.id);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.displayNodeInfo();
|
||||
this.displayInfo();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Callback function for showNodeInfo() above
|
||||
* Callback function for showInfo() above
|
||||
*/
|
||||
loadNodeInfoHandler: function(response)
|
||||
loadInfoHandler: function(response)
|
||||
{
|
||||
var panel = response.argument[0];
|
||||
|
||||
@@ -156,13 +159,13 @@ Alfresco.NodeInfoPanel.prototype =
|
||||
panel.loading = false;
|
||||
|
||||
// display the div for the first time
|
||||
panel.displayNodeInfo();
|
||||
panel.displayInfo();
|
||||
},
|
||||
|
||||
/**
|
||||
* Display the summary info panel for the node
|
||||
* Display the summary info panel for the panel
|
||||
*/
|
||||
displayNodeInfo: function()
|
||||
displayInfo: function()
|
||||
{
|
||||
var elImg = Alfresco.Dom.getElementByTagName(this.launchElement, "img");
|
||||
if (elImg != null)
|
||||
@@ -170,14 +173,14 @@ Alfresco.NodeInfoPanel.prototype =
|
||||
elImg.src = getContextPath() + "/images/icons/popup.gif";
|
||||
}
|
||||
|
||||
if (AlfNodeInfoMgr.displayable(this.nodeRef) == true)
|
||||
if (this.manager.displayable(this.id) == true)
|
||||
{
|
||||
if (this.popupElement != null && this.visible == false)
|
||||
{
|
||||
// set opacity in browser independant way
|
||||
YAHOO.util.Dom.setStyle(this.popupElement, "opacity", 0.0);
|
||||
this.popupElement.style.display = "block";
|
||||
this.popupElement.style.zIndex = zIndex++; // pop to front
|
||||
this.popupElement.style.zIndex = _zIndex++; // pop to front
|
||||
|
||||
Alfresco.Dom.smartAlignElement(this.popupElement, this.launchElement, 700);
|
||||
|
||||
@@ -194,9 +197,9 @@ Alfresco.NodeInfoPanel.prototype =
|
||||
},
|
||||
|
||||
/**
|
||||
* Hide the summary info panel for the node
|
||||
* Hide the summary info panel
|
||||
*/
|
||||
hideNodeInfo: function()
|
||||
hideInfo: function()
|
||||
{
|
||||
if (this.popupElement != null && this.visible == true)
|
||||
{
|
Reference in New Issue
Block a user