Merged V2.1 to HEAD
6609: Portlet UI (doclist, myspaces, mytasks) updates following design review 6610: AR-1270 6611: debugging WCM-778. 6612: Improved API documentation. 6613: Added store lookup cache to EHCache config for default and extended cluster sample 6614: AWC-1531 and AWC-1146. Link objects that have targets which the user does not have access to are now filtered from the view. 6615: AR-1664: Bootstraping from full export fails if file names differs only with a space: my file, my file 6616: Fixed AR-1519: Possible duplicate entries when moving nodes between stores 6617: Removed deprecated aspects; Added emailed aspect to messages; Added OOo command line options 6618: Fix for AWC-1350 6619: Fix for AWC-1509 6620: AWC-1179: Searching for users in Invite User Wizard is slow with large number of users 6621: Changed shutdown logic to avoid classloader cleanup race. 6622: Fix for AWC-1533 (can't save office docs to Company Home) 6623: Fix for AR-1705 6624: Better fix for AWC-1256 (links generated by tinyMCE editor) 6625: Fixed AR-1713: Transformers that do nothing don't break full text indexing 6626: Fixed AWC-1438: Added explcit TXT to PDF converter that wraps the PDFBox TextToPDF class 6627: Portlet templates now handle missing description property on web form 6628: Fix WCM-788 6635: Make workflow available for users who cannot see company home Resolved conflicted state of 'root\projects\repository\source\java\org\alfresco\repo\workflow\jbpm\JBPMEngine.java' git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@6748 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
@@ -13,34 +13,44 @@
|
||||
</#if>
|
||||
</div>
|
||||
</td>
|
||||
<td width="24"></td>
|
||||
<td width="24" align="center">
|
||||
<table cellpadding="0" cellspacing="0" border="0" width="1">
|
||||
<tr>
|
||||
<td width="1" style="background-color: #75badd; height: 140px; width: 1px;"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td width="300">
|
||||
<table width="100%" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<#assign navurl='/navigate/showDocDetails/' + node.nodeRef.storeRef.protocol + '/' + node.nodeRef.storeRef.identifier + '/' + node.nodeRef.id>
|
||||
<#if node.isLocked >
|
||||
<#if node.isLocked>
|
||||
<td class="docAction docActionCheckout docActionLocked">(Locked)</td>
|
||||
<#elseif hasAspect(node, "cm:workingcopy") == 1>
|
||||
<td class="docAction docActionCheckin" <#if node.hasPermission("CheckIn")>onclick='event.cancelBubble=true;MyDocs.checkinItem("${node.name}", "${node.nodeRef}");'</#if>>Check In</td>
|
||||
<#else>
|
||||
<td class="docAction docActionCheckout" <#if node.hasPermission("CheckOut")>onclick='event.cancelBubble=true;MyDocs.checkoutItem("${node.name}", "${node.nodeRef}");'</#if>>Check Out</td>
|
||||
</#if>
|
||||
<#if node.isLocked >
|
||||
<#if node.isLocked>
|
||||
<td class="docAction docActionEditDetails docActionLocked">Edit Details</td>
|
||||
<#else>
|
||||
<td class="docAction docActionEditDetails" onclick="openWindowCallback('${url.context}/command/ui/editcontentprops?container=plain&noderef=${node.nodeRef}', MyDocs.editDetailsCallback);">Edit Details</td>
|
||||
</#if>
|
||||
</tr>
|
||||
<tr>
|
||||
<#if node.isLocked >
|
||||
<#if node.isLocked>
|
||||
<td class="docAction docActionUpdate docActionLocked">Update</td>
|
||||
<#else>
|
||||
<td class="docAction docActionUpdate" onclick="event.cancelBubble=true;MyDocs.updateItem(this, '${node.nodeRef}');">Update</td>
|
||||
</#if>
|
||||
<td class="docAction docActionViewContent" onclick="window.open('${url.context}${node.downloadUrl}', '_blank');">View Content</td>
|
||||
<td class="docAction docActionViewContent" onclick="window.open('${url.context}${node.downloadUrl}', '_blank');">Download</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<#if node.isLocked>
|
||||
<td class="docAction docActionDelete docActionLocked">Delete</td>
|
||||
<#else>
|
||||
<td class="docAction docActionDelete" <#if node.hasPermission("Delete")>onclick='event.cancelBubble=true;MyDocs.deleteItem("${node.name}", "${node.nodeRef}");'</#if>>Delete</td>
|
||||
</#if>
|
||||
<td class="docAction docActionMoreActions" onclick="window.open('${url.context}${navurl}', '_blank');">More Actions...</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
@@ -33,29 +33,33 @@
|
||||
<#assign navurl='/navigate/showDocDetails/' + node.nodeRef.storeRef.protocol + '/' + node.nodeRef.storeRef.identifier + '/' + node.nodeRef.id>
|
||||
<#if node.isDocument>
|
||||
<tr>
|
||||
<#if node.isLocked>
|
||||
<#if node.isLocked>
|
||||
<td class="spaceAction docActionCheckout docActionLocked">(Locked)</td>
|
||||
<#elseif hasAspect(node, "cm:workingcopy") == 1>
|
||||
<#elseif hasAspect(node, "cm:workingcopy") == 1>
|
||||
<td class="spaceAction docActionCheckin" <#if node.hasPermission("CheckIn")>onclick='event.cancelBubble=true;MySpaces.checkinItem("${node.name}", "${node.nodeRef}");'</#if>>Check In</td>
|
||||
<#else>
|
||||
<#else>
|
||||
<td class="spaceAction docActionCheckout" <#if node.hasPermission("CheckOut")>onclick='event.cancelBubble=true;MySpaces.checkoutItem("${node.name}", "${node.nodeRef}");'</#if>>Check Out</td>
|
||||
</#if>
|
||||
<#if node.isLocked >
|
||||
</#if>
|
||||
<#if node.isLocked>
|
||||
<td class="spaceAction docActionEditDetails docActionLocked">Edit Details</td>
|
||||
<#else>
|
||||
<#else>
|
||||
<td class="spaceAction docActionEditDetails" onclick="openWindowCallback('${url.context}/command/ui/editcontentprops?container=plain&noderef=${node.nodeRef}', MySpaces.editDetailsCallback);">Edit Details</td>
|
||||
</#if>
|
||||
</#if>
|
||||
</tr>
|
||||
<tr>
|
||||
<#if node.isLocked >
|
||||
<#if node.isLocked>
|
||||
<td class="spaceAction docActionUpdate docActionLocked">Update</td>
|
||||
<#else>
|
||||
<#else>
|
||||
<td class="spaceAction docActionUpdate" onclick="event.cancelBubble=true;MySpaces.updateItem(this, '${node.nodeRef}');">Update</td>
|
||||
</#if>
|
||||
</#if>
|
||||
<td class="spaceAction docActionViewContent" onclick="window.open('${url.context}${node.downloadUrl}', '_blank');">View Content</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<#if node.isLocked>
|
||||
<td class="spaceAction docActionDelete docActionLocked">Delete</td>
|
||||
<#else>
|
||||
<td class="spaceAction docActionDelete" <#if node.hasPermission("Delete")>onclick='event.cancelBubble=true;MySpaces.deleteItem("${node.name}", "${node.nodeRef}");'</#if>>Delete</td>
|
||||
</#if>
|
||||
<td class="spaceAction docActionMoreActions" onclick="window.open('${url.context}${navurl}', '_blank');">More Actions...</td>
|
||||
</tr>
|
||||
<#else>
|
||||
|
@@ -42,17 +42,17 @@
|
||||
|
||||
<table border=0 cellspacing=0 cellpadding=0 class="docTable">
|
||||
<tr>
|
||||
<td height="30" class="docHeader">
|
||||
<table border="0" cellspacing="6" cellpadding="0" width="100%">
|
||||
<td class="docHeader">
|
||||
<table border="0" cellspacing="0" cellpadding="0" width="100%">
|
||||
<tr>
|
||||
<th><a id="docFilter0" class="docfilterLink <#if filter=0>docfilterLinkSelected</#if>" href="#" onclick="MyDocs.filter(0); return false;">All Items</a></th>
|
||||
<th><a id="docFilter1" class="docfilterLink <#if filter=1>docfilterLinkSelected</#if>" href="#" onclick="MyDocs.filter(1); return false;">Word Documents</a></th>
|
||||
<th><a id="docFilter2" class="docfilterLink <#if filter=2>docfilterLinkSelected</#if>" href="#" onclick="MyDocs.filter(2); return false;">HTML Documents</a></th>
|
||||
<th><a id="docFilter3" class="docfilterLink <#if filter=3>docfilterLinkSelected</#if>" href="#" onclick="MyDocs.filter(3); return false;">PDF Documents</a></th>
|
||||
<th><a id="docFilter4" class="docfilterLink <#if filter=4>docfilterLinkSelected</#if>" href="#" onclick="MyDocs.filter(4); return false;">Recently Modified</a></th>
|
||||
<td align=right>
|
||||
<th><a id="docFilter0" class="docfilterLink <#if filter=0>docfilterLinkSelected</#if>" href="#" onclick="MyDocs.filter(0); return false;"><span>All Items</span></a></th>
|
||||
<th><a id="docFilter1" class="docfilterLink <#if filter=1>docfilterLinkSelected</#if>" href="#" onclick="MyDocs.filter(1); return false;"><span>Word Documents</span></a></th>
|
||||
<th><a id="docFilter2" class="docfilterLink <#if filter=2>docfilterLinkSelected</#if>" href="#" onclick="MyDocs.filter(2); return false;"><span>HTML Documents</span></a></th>
|
||||
<th><a id="docFilter3" class="docfilterLink <#if filter=3>docfilterLinkSelected</#if>" href="#" onclick="MyDocs.filter(3); return false;"><span>PDF Documents</span></a></th>
|
||||
<th><a id="docFilter4" class="docfilterLink <#if filter=4>docfilterLinkSelected</#if>" href="#" onclick="MyDocs.filter(4); return false;"><span>Recently Modified</span></a></th>
|
||||
<th align=right>
|
||||
<a href="#" onclick="MyDocs.refreshList(); return false;" class="refreshViewLink"><img src="${url.context}/images/icons/reset.gif" border="0" width="16" height="16" style="vertical-align:-25%;padding-right:4px">Refresh</a>
|
||||
</td>
|
||||
</th>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
@@ -75,6 +75,10 @@
|
||||
MyDocs.Query="${query?replace("\"","\\\"")}";
|
||||
</script>
|
||||
</div>
|
||||
<div id="docMessagePanel">
|
||||
<div class="docMessagePanelClose"><img id="docMessagePanelCloseImage" src="${url.context}/images/icons/close_portlet_static.gif" onclick="MyDocs.closeMessage();" /></div>
|
||||
<div class="docMessagePanelLabel"></div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -87,21 +91,29 @@
|
||||
</table>
|
||||
|
||||
<style type="text/css">
|
||||
a.docfilterLink:link, a.docfilterLink:visited
|
||||
a.docfilterLink, a.docfilterLink:hover
|
||||
{
|
||||
color: #8EA1B3;
|
||||
font-family: Trebuchet MS, Arial, Helvetica, sans-serif;
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
text-decoration: none;
|
||||
padding-left: 4px;
|
||||
padding-right: 4px;
|
||||
padding: 8px 4px 16px;
|
||||
outline: none;
|
||||
display: block;
|
||||
}
|
||||
|
||||
a.docfilterLink:hover
|
||||
a.docfilterLink:hover span
|
||||
{
|
||||
color: #168ECE;
|
||||
background-color: #EEF7FB;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a.docfilterLinkSelected
|
||||
{
|
||||
background: transparent url("${url.context}/images/parts/doclist_item_marker.png") no-repeat scroll center 29px !important;
|
||||
padding-bottom: 16px;
|
||||
}
|
||||
|
||||
a.docfilterLinkSelected:link, a.docfilterLinkSelected:visited
|
||||
@@ -111,7 +123,7 @@ a.docfilterLinkSelected:link, a.docfilterLinkSelected:visited
|
||||
|
||||
.docTable
|
||||
{
|
||||
background-color: #F8FCFD;
|
||||
background-color: #FFFFFF;
|
||||
border: 1px solid #CCD4DB;
|
||||
}
|
||||
|
||||
@@ -119,7 +131,7 @@ a.docfilterLinkSelected:link, a.docfilterLinkSelected:visited
|
||||
{
|
||||
height: 320px;
|
||||
width: 716px;
|
||||
overflow: auto;
|
||||
overflow: none;
|
||||
overflow-y: scroll;
|
||||
border-top: 1px solid #CCD4DB;
|
||||
border-bottom: 1px solid #CCD4DB;
|
||||
@@ -170,6 +182,8 @@ a.docfilterLinkSelected:link, a.docfilterLinkSelected:visited
|
||||
.docHeader
|
||||
{
|
||||
background-image: url(${url.context}/images/parts/doclist_headerbg.png);
|
||||
height: 40px;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
|
||||
@@ -193,12 +207,13 @@ a.docfilterLinkSelected:link, a.docfilterLinkSelected:visited
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
.docItem
|
||||
a.docItem, a.docItem:hover
|
||||
{
|
||||
font-family: Trebuchet MS, Arial, Helvetica, sans-serif;
|
||||
font-size: 14px;
|
||||
color: #515D6B;
|
||||
padding: 0px 8px 6px 40px;
|
||||
padding: 0px 8px 6px 8px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.docIcon
|
||||
@@ -225,11 +240,16 @@ a.docfilterLinkSelected:link, a.docfilterLinkSelected:visited
|
||||
|
||||
.docItemSelected
|
||||
{
|
||||
background-color: #CCE7F3 !important;
|
||||
background: #CCE7F3 url("${url.context}/images/parts/doclist_arrow_down.png") no-repeat right top;
|
||||
border-bottom: 1px solid #0092DD !important;
|
||||
border-top: 1px solid #0092DD !important;
|
||||
}
|
||||
|
||||
.docItemSelectedOpen
|
||||
{
|
||||
background-image: url("${url.context}/images/parts/doclist_arrow_up.png") !important;
|
||||
}
|
||||
|
||||
.docResource
|
||||
{
|
||||
font-family: Trebuchet MS, Arial, Helvetica, sans-serif;
|
||||
@@ -257,12 +277,14 @@ a.docfilterLinkSelected:link, a.docfilterLinkSelected:visited
|
||||
|
||||
.docPreview
|
||||
{
|
||||
background-color: #ddebf2;
|
||||
color: #515D6B;
|
||||
font-family: Trebuchet MS, Arial, Helvetica, sans-serif;
|
||||
overflow: hidden;
|
||||
height: 144px;
|
||||
width: 410px;
|
||||
border: 1px solid #0092dd;
|
||||
height: 140px;
|
||||
width: 406px;
|
||||
border: 1px solid #75badd;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
.docAction
|
||||
@@ -344,6 +366,13 @@ a.docfilterLinkSelected:link, a.docfilterLinkSelected:visited
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
a.refreshViewLink
|
||||
{
|
||||
padding: 8px 4px 0px 0px;
|
||||
display: block;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
a.refreshViewLink:link, a.refreshViewLink:visited, a.refreshViewLink:hover
|
||||
{
|
||||
font-family: Trebuchet MS, Arial, Helvetica, sans-serif;
|
||||
@@ -373,4 +402,40 @@ a.refreshViewLink:link, a.refreshViewLink:visited, a.refreshViewLink:hover
|
||||
background-color: #F8FCFD;
|
||||
border: 1px solid #CCD4DB;
|
||||
}
|
||||
|
||||
#docMessagePanel
|
||||
{
|
||||
position: absolute;
|
||||
border: 1px solid #65696C;
|
||||
background-color: #eeeeee;
|
||||
width: 250px;
|
||||
height: 72px;
|
||||
padding: 8px;
|
||||
margin-left: 440px;
|
||||
display: none;
|
||||
z-index: 1;
|
||||
-moz-border-radius: 7px;
|
||||
}
|
||||
|
||||
.docMessagePanelClose
|
||||
{
|
||||
margin: -4px -4px 2px 2px;
|
||||
float:right;
|
||||
}
|
||||
|
||||
#docMessagePanelCloseImage
|
||||
{
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
height: 23px;
|
||||
width: 23px;
|
||||
}
|
||||
|
||||
.docMessagePanelLabel
|
||||
{
|
||||
color: #45494C;
|
||||
font-family: Trebuchet MS, Arial, Helvetica, sans-serif;
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
}
|
||||
</style>
|
@@ -21,8 +21,8 @@
|
||||
<a href="${url.context}${d.url}" target="new"><img class="docIconImage" alt="" width="16" height="16" src="${url.context}${d.icon16?replace(".gif",".png")}" border=0></a>
|
||||
</div>
|
||||
<div style="display:none"><img class="docIconImage64" alt="" width="64" height="64" src="${url.context}${d.icon64}"></div>
|
||||
<div class="docItem">
|
||||
${d.name?html}
|
||||
<div>
|
||||
<a class="docItem" href="${url.context}${d.url}" target="new">${d.name?html}</a>
|
||||
<span class="docInfo" onclick="event.cancelBubble=true; AlfNodeInfoMgr.toggle('${d.nodeRef}',this);">
|
||||
<img src="${url.context}/images/icons/popup.gif" class="popupImage" width="16" height="16" />
|
||||
</span>
|
||||
|
@@ -26,13 +26,19 @@
|
||||
<td align=center height=40 style="border-left: 1px solid #EBE398;">
|
||||
<table border="0" cellspacing="8" cellpadding="0" width="100%">
|
||||
<tr>
|
||||
<th><a class="taskfilterLink <#if filter=0>taskfilterLinkSelected</#if>" href="#" onclick="MyTasks.filter(0); return false;">Tasks to do</a></th>
|
||||
<th><a class="taskfilterLink <#if filter=1>taskfilterLinkSelected</#if>" href="#" onclick="MyTasks.filter(1); return false;" style="color: #399DF7;">Due Today</a></th>
|
||||
<th><a class="taskfilterLink <#if filter=2>taskfilterLinkSelected</#if>" href="#" onclick="MyTasks.filter(2); return false;">Next 7 days</a></th>
|
||||
<th><a class="taskfilterLink <#if filter=3>taskfilterLinkSelected</#if>" href="#" onclick="MyTasks.filter(3); return false;">No due date</a></th>
|
||||
<th><a class="taskfilterLink <#if filter=4>taskfilterLinkSelected</#if>" href="#" onclick="MyTasks.filter(4); return false;" style="color: #DF3704;">Overdue</a></th>
|
||||
<td width="150" align="right">
|
||||
<a href="#" onclick="MyTasks.refreshList(); return false;" class="refreshViewLink"><img src="${url.context}/images/icons/reset.gif" border="0" width="16" height="16" style="vertical-align:-25%;padding-right:4px">Refresh</a>
|
||||
<td>
|
||||
<div id="taskFilterBar">
|
||||
<ul>
|
||||
<li <#if filter=0>class="taskCurrent"</#if>><a href="#" onclick="MyTasks.filter(0); return false;"><span>Tasks to do</span></a></li>
|
||||
<li <#if filter=1>class="taskCurrent"</#if>><a href="#" onclick="MyTasks.filter(1); return false;"><span style="color: #399DF7;">Due Today</span></a></li>
|
||||
<li <#if filter=2>class="taskCurrent"</#if>><a href="#" onclick="MyTasks.filter(2); return false;"><span>Next 7 days</span></a></li>
|
||||
<li <#if filter=3>class="taskCurrent"</#if>><a href="#" onclick="MyTasks.filter(3); return false;"><span>No due date</span></a></li>
|
||||
<li <#if filter=4>class="taskCurrent"</#if>><a href="#" onclick="MyTasks.filter(4); return false;"><span style="color: #DF3704;">Overdue</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
<td width="150" align="right" style="padding: 5px 5px 0px 0px;">
|
||||
<a class="refreshViewLink" href="#" onclick="MyTasks.refreshList(); return false;"><img src="${url.context}/images/icons/reset.gif" border="0" width="16" height="16" style="vertical-align:-25%;padding-right:4px"><span>Refresh</span></a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
@@ -52,7 +58,7 @@
|
||||
<td>
|
||||
<div id="taskFooter">
|
||||
<#-- the count value is retrieved and set dynamically from the AJAX webscript output above -->
|
||||
<span class="taskFooterText">Showing <span id="taskCount">0</span> <#if filter=4>overdue</#if> task(s)<#if filter=1> due today</#if><#if filter=2> due next week</#if><#if filter=3> with no due date set</#if></span>
|
||||
<span onclick="MyTasks.displayMessage('sljfsdfjlsdjifds lsdfj lsidjfoi jsdofij sodfj ');" class="taskFooterText">Showing <span id="taskCount">0</span> <#if filter=4>overdue</#if> task(s)<#if filter=1> due today</#if><#if filter=2> due next week</#if><#if filter=3> with no due date set</#if></span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -61,6 +67,10 @@
|
||||
<td class="paperEdgeRight"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
<div id="taskMessagePanel">
|
||||
<div class="taskMessagePanelClose"><img id="taskMessagePanelCloseImage" src="${url.context}/images/icons/close_portlet_static.gif" onclick="MyTasks.closeMessage();" /></div>
|
||||
<div class="taskMessagePanelLabel"></div>
|
||||
</div>
|
||||
<div style="font-size: 3px;">
|
||||
<span class="paperLeftCorner"></span>
|
||||
<span class="paperBottomEdge"></span>
|
||||
@@ -110,34 +120,74 @@
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
a.taskfilterLink:link, a.taskfilterLink:visited
|
||||
#taskFilterBar {
|
||||
float: left;
|
||||
width: 100%;
|
||||
}
|
||||
#taskFilterBar ul {
|
||||
margin: 0px;
|
||||
padding: 4px 10px 0px 4px;
|
||||
list-style: none;
|
||||
}
|
||||
#taskFilterBar li {
|
||||
display: inline;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
height: 27px;
|
||||
}
|
||||
#taskFilterBar a {
|
||||
background: none;
|
||||
float:left;
|
||||
margin: 0px;
|
||||
padding: 0px 0px 0px 4px;
|
||||
text-decoration: none;
|
||||
outline: none;
|
||||
}
|
||||
#taskFilterBar a span {
|
||||
background: none;
|
||||
font-family: Trebuchet MS, Arial, Helvetica, sans-serif;
|
||||
font-size: 13px;
|
||||
font-weight: bold;
|
||||
color: #5A5741;
|
||||
display: block;
|
||||
float: none;
|
||||
padding: 5px 15px 4px 6px;
|
||||
}
|
||||
|
||||
#taskFilterBar a:hover {
|
||||
background: url("${url.context}/images/parts/marker_effect_left.png") no-repeat left top;
|
||||
}
|
||||
|
||||
#taskFilterBar a:hover span {
|
||||
background: url("${url.context}/images/parts/marker_effect_right.png") no-repeat right top;
|
||||
color: #ffffff !important;
|
||||
}
|
||||
|
||||
#taskFilterBar .taskCurrent a {
|
||||
background: url("${url.context}/images/parts/marker_effect_left.png") no-repeat left top;
|
||||
}
|
||||
#taskFilterBar .taskCurrent a span {
|
||||
background: url("${url.context}/images/parts/marker_effect_right.png") no-repeat right top;
|
||||
color: #ffffff !important;
|
||||
}
|
||||
|
||||
.refreshViewLink, .refreshViewLink
|
||||
{
|
||||
text-decoration: none !important;
|
||||
}
|
||||
.refreshViewLink span
|
||||
{
|
||||
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.taskfilterLink:hover
|
||||
{
|
||||
color: #FFFFFF !important;
|
||||
background-color: #FDB64F;
|
||||
}
|
||||
|
||||
a.taskfilterLinkSelected:link, a.taskfilterLinkSelected:visited
|
||||
{
|
||||
color: #FFFFFF !important;
|
||||
background-color: #FDB64F;
|
||||
}
|
||||
|
||||
.taskRow
|
||||
{
|
||||
padding-top: 4px;
|
||||
border-top: 1px solid transparent;
|
||||
border-bottom: 1px solid #EBE398;
|
||||
border-top: 1px solid #FEF8BC;
|
||||
}
|
||||
|
||||
#taskFooter
|
||||
@@ -170,8 +220,8 @@ a.taskfilterLinkSelected:link, a.taskfilterLinkSelected:visited
|
||||
font-family: Trebuchet MS, Arial, Helvetica, sans-serif;
|
||||
font-size: 14px;
|
||||
color: #5A5741;
|
||||
margin: 0 0 0 24;
|
||||
padding: 0px 8px 6px 8px;
|
||||
margin: 0px 0px 0px 24px;
|
||||
padding: 0px 8px 8px;
|
||||
}
|
||||
|
||||
.taskItemOverdue
|
||||
@@ -199,23 +249,38 @@ a.taskfilterLinkSelected:link, a.taskfilterLinkSelected:visited
|
||||
font-family: Trebuchet MS, Arial, Helvetica, sans-serif;
|
||||
font-size: 12px;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
display: none;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.taskDetailTopSpacer {
|
||||
padding: 4px 0px 0px;
|
||||
}
|
||||
|
||||
.taskDetailSeparator
|
||||
{
|
||||
border-right: 1px solid #c1af05;
|
||||
}
|
||||
|
||||
.taskItemSelected
|
||||
{
|
||||
background-color: #FFE500 !important;
|
||||
background: #FFE500 url("${url.context}/images/parts/mytasks_arrow_down.png") no-repeat right top;
|
||||
border-bottom: 1px solid #82770B !important;
|
||||
border-top: 1px solid #82770B !important;
|
||||
}
|
||||
|
||||
.taskItemSelectedOpen
|
||||
{
|
||||
background-image: url("${url.context}/images/parts/mytasks_arrow_up.png") !important;
|
||||
}
|
||||
|
||||
.taskResources
|
||||
{
|
||||
border: 1px solid #FFE500;
|
||||
background-color: #FEF8BC;
|
||||
background-color: #fff;
|
||||
margin: 4px 0px 0px 0px;
|
||||
width: 360px;
|
||||
width: 300px;
|
||||
height: 80px;
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
@@ -227,7 +292,7 @@ a.taskfilterLinkSelected:link, a.taskfilterLinkSelected:visited
|
||||
|
||||
.taskResourceOdd
|
||||
{
|
||||
background-color: #F8FCFD;
|
||||
background-color: #FEF8BC;
|
||||
}
|
||||
|
||||
.taskResourceHeader
|
||||
@@ -251,33 +316,90 @@ a.resourceLink:link, a.resourceLink:visited
|
||||
font-family: Trebuchet MS, Arial, Helvetica, sans-serif;
|
||||
}
|
||||
|
||||
.taskActions td
|
||||
.taskAction
|
||||
{
|
||||
padding: 4px;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
a.taskAction:link, a.taskAction:visited
|
||||
{
|
||||
color: #5A5741;
|
||||
font-size: 13px;
|
||||
font-weight: bold;
|
||||
font-family: Trebuchet MS, Arial, Helvetica, sans-serif;
|
||||
border: 1px solid #F6F1BA;
|
||||
padding-left: 4px;
|
||||
padding-right: 4px;
|
||||
.taskAction ul {
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
list-style: none;
|
||||
text-align: center;
|
||||
}
|
||||
.taskAction ul li {
|
||||
display: inline;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
a.taskAction:hover
|
||||
{
|
||||
font-size: 13px;
|
||||
font-weight: bold;
|
||||
font-family: Trebuchet MS, Arial, Helvetica, sans-serif;
|
||||
border: 1px solid #F6F1BA;
|
||||
padding-left: 4px;
|
||||
padding-right: 4px;
|
||||
color: #FFFFFF;
|
||||
background-color: #FDB64F;
|
||||
.taskAction a {
|
||||
background: url("${url.context}/images/parts/task_btn_normal_right.png") no-repeat 100% 0;
|
||||
float: left;
|
||||
margin: 4px;
|
||||
padding: 0px;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
.taskAction a span {
|
||||
background: url("${url.context}/images/parts/task_btn_normal_left.png") no-repeat;
|
||||
font-family: Trebuchet MS, Arial, Helvetica, sans-serif;
|
||||
font-size: 11px;
|
||||
font-weight: bold;
|
||||
color: #5A5741;
|
||||
padding: 4px 1.5em;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.taskAction a:hover {
|
||||
background: url("${url.context}/images/parts/task_btn_rollover_right.png") no-repeat 100% 0;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.taskAction a:hover span {
|
||||
background: url("${url.context}/images/parts/task_btn_rollover_left.png") no-repeat;
|
||||
}
|
||||
|
||||
.taskManage ul {
|
||||
margin: 0px;
|
||||
padding: 4px 0px 0px;
|
||||
list-style: none;
|
||||
}
|
||||
.taskManage li {
|
||||
display: inline;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
height: 27px;
|
||||
}
|
||||
|
||||
.taskManage a {
|
||||
background: url("${url.context}/images/parts/task_btn_normal_left.png") no-repeat left top;
|
||||
float:left;
|
||||
margin: 0px;
|
||||
padding: 0px 0px 0px 8px;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
.taskManage a span {
|
||||
background: url("${url.context}/images/parts/task_btn_normal_right.png") no-repeat right top;
|
||||
font-family: Trebuchet MS, Arial, Helvetica, sans-serif;
|
||||
font-size: 11px;
|
||||
font-weight: bold;
|
||||
color: #5A5741;
|
||||
display: block;
|
||||
float: none;
|
||||
padding: 4px 15px 4px 6px;
|
||||
}
|
||||
|
||||
.taskManage a:hover {
|
||||
background: url("${url.context}/images/parts/task_btn_rollover_left.png") no-repeat left top;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.taskManage a:hover span {
|
||||
background: url("${url.context}/images/parts/task_btn_rollover_right.png") no-repeat right top;
|
||||
}
|
||||
|
||||
.taskMetadata
|
||||
@@ -321,4 +443,41 @@ a.taskAction:hover
|
||||
height: 6px;
|
||||
width: 4px;
|
||||
}
|
||||
|
||||
#taskMessagePanel
|
||||
{
|
||||
position: absolute;
|
||||
border: 1px solid #65696C;
|
||||
background-color: #eeeeee;
|
||||
width: 250px;
|
||||
height: 72px;
|
||||
padding: 8px;
|
||||
margin-left: 440px;
|
||||
display: none;
|
||||
z-index: 1;
|
||||
-moz-border-radius: 7px;
|
||||
}
|
||||
|
||||
.taskMessagePanelClose
|
||||
{
|
||||
margin: -4px -4px 2px 2px;
|
||||
float:right;
|
||||
}
|
||||
|
||||
#taskMessagePanelCloseImage
|
||||
{
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
height: 23px;
|
||||
width: 23px;
|
||||
}
|
||||
|
||||
.taskMessagePanelLabel
|
||||
{
|
||||
color: #45494C;
|
||||
font-family: Trebuchet MS, Arial, Helvetica, sans-serif;
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
</style>
|
@@ -43,39 +43,57 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="taskDetail">
|
||||
<div class="taskDetailTopSpacer"></div>
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="100%">
|
||||
<tr>
|
||||
<td width="182">
|
||||
<td width="190" class="taskDetailSeparator">
|
||||
<table cellpadding="2" cellspacing="2" style="margin-left:24px; margin-top:4px">
|
||||
<tr><td class="taskMetaprop">Status:</td><td class="taskMetadata">${t.properties["bpm:status"]}</td>
|
||||
<tr><td class="taskMetaprop">Priority:</td><td class="taskMetadata">${t.properties["bpm:priority"]}</td>
|
||||
<tr><td class="taskMetaprop">Start Date:</td><td class="taskMetadata">${t.startDate?date}</td></tr>
|
||||
<tr><td class="taskMetaprop">Type:</td><td class="taskMetadata">${t.type?html}</td></tr>
|
||||
<tr><td class="taskMetaprop">Complete:</td><td class="taskMetadata">${t.properties["bpm:percentComplete"]}%</td>
|
||||
</table>
|
||||
</td>
|
||||
<td width="8"> </td>
|
||||
<td width="360">
|
||||
<td width="300">
|
||||
<div class="taskResourceHeader">${t.name?html}:</div>
|
||||
<div class="taskResources"></div>
|
||||
<table border="0" class="taskActions">
|
||||
</td>
|
||||
<td width="8" class="taskDetailSeparator"> </td>
|
||||
<td align="center">
|
||||
<table cellpadding="0" cellspacing="0" border="0">
|
||||
<tr>
|
||||
<#list t.transitions as wt>
|
||||
<td style="text-align: left"><a class="taskAction" href="#" onclick="event.cancelBubble=true; MyTasks.transitionTask('/command/task/end/${t.id}<#if wt.id?exists>/${wt.id}</#if>', 'Workflow action \'${wt.label?html}\' completed.');">${wt.label?html}</a></td>
|
||||
</#list>
|
||||
<td width="70"> </td>
|
||||
<td>
|
||||
<div class="taskManage">
|
||||
<ul>
|
||||
<li><a href="#" onclick="event.cancelBubble=true; openWindowCallback('${url.context}/command/ui/managetask?id=${t.id}&type=${t.qnameType}&container=plain', MyTasks.manageTaskCallback);"><span><img src="${url.context}/images/icons/manage_workflow_task.gif" align="top" alt="" border="0"> Manage Task</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td width="16"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2"> </td>
|
||||
<td width="300" align="center">
|
||||
<table cellpadding="0" cellspacing="0" border="0">
|
||||
<tr>
|
||||
<td>
|
||||
<div class="taskMetaprop" style="padding-bottom: 4px;">Manage Task</div>
|
||||
<a class="taskAction" style="display: block; width: 18px; padding: 4px; margin-left: 20px;" onclick="event.cancelBubble=true;" href="${url.context}/command/ui/managetask?id=${t.id}&type=${t.qnameType}&container=plain" target="new"><img src="${url.context}/images/icons/manage_workflow_task.gif" width="16" height="16" border="0" alt="Manage Task Details" title="Manage Task Details"></a>
|
||||
<br>
|
||||
<br>
|
||||
<div class="taskAction">
|
||||
<ul>
|
||||
<#list t.transitions as wt>
|
||||
<li><a href="#" onclick="event.cancelBubble=true; MyTasks.transitionTask('/command/task/end/${t.id}<#if wt.id?exists>/${wt.id}</#if>', 'Workflow action \'${wt.label?html}\' completed.');"><span>${wt.label?html}</span></a></li>
|
||||
</#list>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td colspan="2"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</#if>
|
||||
|
@@ -48,7 +48,7 @@
|
||||
<div class="formsRow">
|
||||
<img src="${url.context}/images/icons/webform_large.gif" width=32 height=32 border=0>
|
||||
<a class="webformLink" href="${url.context}/c/ui/createwebcontent?sandbox=${sandbox}&webproject=${wp.id}&form=${form.properties["wca:formname"]}&container=plain" target="new">${form.properties.title}</a>
|
||||
<#if form.properties.description?length!=0>
|
||||
<#if (form.properties.description?exists) && (form.properties.description?length!=0)>
|
||||
<span style="vertical-align:50%">(${form.properties.description})</span>
|
||||
</#if>
|
||||
</div>
|
||||
|
@@ -321,8 +321,6 @@
|
||||
<aspect name="summarizable"/>
|
||||
<aspect name="versionable"/>
|
||||
<aspect name="templatable"/>
|
||||
<aspect name="translatable"/>
|
||||
<aspect name="localizable"/>
|
||||
<aspect name="emailed"/>
|
||||
</aspects>
|
||||
<!-- List of aspects to only show in the add features action -->
|
||||
|
@@ -60,6 +60,7 @@ import org.alfresco.service.cmr.search.ResultSet;
|
||||
import org.alfresco.service.cmr.search.ResultSetRow;
|
||||
import org.alfresco.service.cmr.search.SearchParameters;
|
||||
import org.alfresco.service.cmr.search.SearchService;
|
||||
import org.alfresco.service.cmr.security.PermissionService;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
import org.alfresco.web.app.Application;
|
||||
import org.alfresco.web.app.context.IContextListener;
|
||||
@@ -787,6 +788,10 @@ public class BrowseBean implements IContextListener
|
||||
{
|
||||
// create our File Link Node representation
|
||||
node = new MapNode(nodeRef, this.nodeService, fileInfo.getProperties());
|
||||
// only display the user has the permissions to navigate to the target of the link
|
||||
NodeRef destRef = (NodeRef)node.getProperties().get(ContentModel.PROP_LINK_DESTINATION);
|
||||
if (new Node(destRef).hasPermission(PermissionService.READ) == true)
|
||||
{
|
||||
node.addPropertyResolver("url", this.resolverLinkUrl);
|
||||
node.addPropertyResolver("webdavUrl", this.resolverLinkWebdavUrl);
|
||||
node.addPropertyResolver("cifsPath", this.resolverLinkCifsPath);
|
||||
@@ -797,15 +802,21 @@ public class BrowseBean implements IContextListener
|
||||
|
||||
this.contentNodes.add(node);
|
||||
}
|
||||
}
|
||||
else if (ApplicationModel.TYPE_FOLDERLINK.equals(type))
|
||||
{
|
||||
// create our Folder Link Node representation
|
||||
node = new MapNode(nodeRef, this.nodeService, fileInfo.getProperties());
|
||||
// only display the user has the permissions to navigate to the target of the link
|
||||
NodeRef destRef = (NodeRef)node.getProperties().get(ContentModel.PROP_LINK_DESTINATION);
|
||||
if (new Node(destRef).hasPermission(PermissionService.READ) == true)
|
||||
{
|
||||
node.addPropertyResolver("icon", this.resolverSpaceIcon);
|
||||
node.addPropertyResolver("smallIcon", this.resolverSmallIcon);
|
||||
|
||||
this.containerNodes.add(node);
|
||||
}
|
||||
}
|
||||
|
||||
// inform any listeners that a Node wrapper has been created
|
||||
if (node != null)
|
||||
@@ -954,6 +965,10 @@ public class BrowseBean implements IContextListener
|
||||
{
|
||||
// create our File Link Node representation
|
||||
node = new MapNode(nodeRef, this.nodeService, false);
|
||||
// only display the user has the permissions to navigate to the target of the link
|
||||
NodeRef destRef = (NodeRef)node.getProperties().get(ContentModel.PROP_LINK_DESTINATION);
|
||||
if (new Node(destRef).hasPermission(PermissionService.READ) == true)
|
||||
{
|
||||
node.addPropertyResolver("url", this.resolverLinkUrl);
|
||||
node.addPropertyResolver("webdavUrl", this.resolverLinkWebdavUrl);
|
||||
node.addPropertyResolver("cifsPath", this.resolverLinkCifsPath);
|
||||
@@ -966,10 +981,15 @@ public class BrowseBean implements IContextListener
|
||||
|
||||
this.contentNodes.add(node);
|
||||
}
|
||||
}
|
||||
else if (ApplicationModel.TYPE_FOLDERLINK.equals(type))
|
||||
{
|
||||
// create our Folder Link Node representation
|
||||
node = new MapNode(nodeRef, this.nodeService, false);
|
||||
// only display the user has the permissions to navigate to the target of the link
|
||||
NodeRef destRef = (NodeRef)node.getProperties().get(ContentModel.PROP_LINK_DESTINATION);
|
||||
if (new Node(destRef).hasPermission(PermissionService.READ) == true)
|
||||
{
|
||||
node.addPropertyResolver("icon", this.resolverSpaceIcon);
|
||||
node.addPropertyResolver("smallIcon", this.resolverSmallIcon);
|
||||
node.addPropertyResolver("path", this.resolverPath);
|
||||
@@ -977,6 +997,7 @@ public class BrowseBean implements IContextListener
|
||||
|
||||
this.containerNodes.add(node);
|
||||
}
|
||||
}
|
||||
|
||||
// inform any listeners that a Node wrapper has been created
|
||||
if (node != null)
|
||||
|
@@ -416,7 +416,7 @@ public class SubmitDialog extends BaseDialogBean
|
||||
diffs.add(diff);
|
||||
|
||||
// recursively remove locks from this item
|
||||
recursivelyRemoveLocks(storeId, -1, srcPath);
|
||||
recursivelyRemoveLocks(storeId, -1, this.avmService.lookup(-1, srcPath, true), srcPath);
|
||||
|
||||
// If nothing has required notifying the virtualization server
|
||||
// so far, check to see if destPath forces a notification
|
||||
@@ -635,9 +635,8 @@ public class SubmitDialog extends BaseDialogBean
|
||||
* Recursively remove locks from a path. Walking child folders looking for files
|
||||
* to remove locks from.
|
||||
*/
|
||||
private void recursivelyRemoveLocks(String webProject, int version, String path)
|
||||
private void recursivelyRemoveLocks(String webProject, int version, AVMNodeDescriptor desc, String path)
|
||||
{
|
||||
AVMNodeDescriptor desc = this.avmService.lookup(version, path, true);
|
||||
if (desc.isFile() || desc.isDeletedFile())
|
||||
{
|
||||
this.avmLockingService.removeLock(webProject, path.substring(path.indexOf(":") + 1));
|
||||
@@ -655,10 +654,12 @@ public class SubmitDialog extends BaseDialogBean
|
||||
desc = history.get(1);
|
||||
}
|
||||
|
||||
Map<String, AVMNodeDescriptor> list = avmService.getDirectoryListing(desc, true);
|
||||
for (AVMNodeDescriptor child : list.values())
|
||||
Map<String, AVMNodeDescriptor> list = avmService.getDirectoryListingDirect(desc, true);
|
||||
for (Map.Entry<String, AVMNodeDescriptor> child : list.entrySet())
|
||||
{
|
||||
recursivelyRemoveLocks(webProject, version, child.getPath());
|
||||
String name = child.getKey();
|
||||
AVMNodeDescriptor childDesc = child.getValue();
|
||||
recursivelyRemoveLocks(webProject, version, childDesc, path + "/" + name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -42,6 +42,8 @@ import javax.transaction.UserTransaction;
|
||||
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.search.ResultSet;
|
||||
import org.alfresco.service.cmr.search.SearchService;
|
||||
import org.alfresco.service.cmr.security.AuthorityService;
|
||||
import org.alfresco.service.cmr.security.AuthorityType;
|
||||
import org.alfresco.service.cmr.security.PermissionService;
|
||||
@@ -301,16 +303,12 @@ public abstract class InviteUsersWizard extends BaseWizardBean
|
||||
{
|
||||
// build xpath to match available User/Person objects
|
||||
NodeRef peopleRef = personService.getPeopleContainer();
|
||||
// NOTE: see SearcherComponentTest
|
||||
String xpath = "*[like(@" + NamespaceService.CONTENT_MODEL_PREFIX + ":" + "firstName, '%" + contains + "%', false)" +
|
||||
" or " + "like(@" + NamespaceService.CONTENT_MODEL_PREFIX + ":" + "lastName, '%" + contains + "%', false)]";
|
||||
|
||||
List<NodeRef> nodes = searchService.selectNodes(
|
||||
peopleRef,
|
||||
xpath,
|
||||
null,
|
||||
this.namespaceService,
|
||||
false);
|
||||
// Use lucene search to retrieve user details
|
||||
String lucene = "@" + NamespaceService.CONTENT_MODEL_PREFIX + "\\:firstName:*" + contains + "* " +
|
||||
"@" + NamespaceService.CONTENT_MODEL_PREFIX + "\\:lastName:*" + contains + "* ";
|
||||
ResultSet resultSet = searchService.query(peopleRef.getStoreRef(), SearchService.LANGUAGE_LUCENE, lucene);
|
||||
List<NodeRef> nodes = resultSet.getNodeRefs();
|
||||
|
||||
items = new SelectItem[nodes.size()];
|
||||
for (int index=0; index<nodes.size(); index++)
|
||||
|
@@ -45,6 +45,7 @@ import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.repo.workflow.WorkflowModel;
|
||||
import org.alfresco.service.cmr.dictionary.PropertyDefinition;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.repository.NodeService;
|
||||
import org.alfresco.service.cmr.workflow.WorkflowDefinition;
|
||||
import org.alfresco.service.cmr.workflow.WorkflowPath;
|
||||
import org.alfresco.service.cmr.workflow.WorkflowService;
|
||||
@@ -86,8 +87,15 @@ public class StartWorkflowWizard extends BaseWizardBean
|
||||
protected boolean isItemBeingAdded = false;
|
||||
protected boolean nextButtonDisabled = false;
|
||||
|
||||
protected NodeService unprotectedNodeService;
|
||||
|
||||
private static final Log logger = LogFactory.getLog(StartWorkflowWizard.class);
|
||||
|
||||
public void setUnprotectedNodeService(NodeService unprotectedNodeService)
|
||||
{
|
||||
this.unprotectedNodeService = unprotectedNodeService;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// Wizard implementation
|
||||
|
||||
@@ -159,7 +167,7 @@ public class StartWorkflowWizard extends BaseWizardBean
|
||||
for (String addedItem : this.packageItemsToAdd)
|
||||
{
|
||||
NodeRef addedNodeRef = new NodeRef(addedItem);
|
||||
this.nodeService.addChild(workflowPackage, addedNodeRef,
|
||||
this.unprotectedNodeService.addChild(workflowPackage, addedNodeRef,
|
||||
ContentModel.ASSOC_CONTAINS, QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI,
|
||||
QName.createValidLocalName((String)this.nodeService.getProperty(
|
||||
addedNodeRef, ContentModel.PROP_NAME))));
|
||||
|
@@ -41,6 +41,7 @@ import org.chiba.xml.ns.NamespaceConstants;
|
||||
import org.chiba.xml.events.XFormsEventNames;
|
||||
import org.chiba.xml.events.XMLEvent;
|
||||
import org.chiba.xml.xforms.ChibaBean;
|
||||
import org.chiba.xml.xforms.exception.XFormsException;
|
||||
import org.chiba.xml.xforms.XFormsElement;
|
||||
import org.chiba.xml.events.DOMEventNames;
|
||||
import org.w3c.dom.*;
|
||||
@@ -96,6 +97,25 @@ public class Schema2XFormsTest
|
||||
assertEquals("test", ((Element)pointer.getNode()).getTextContent());
|
||||
}
|
||||
|
||||
public void testNumbers()
|
||||
throws Exception
|
||||
{
|
||||
final Document schemaDocument = this.loadTestResourceDocument("xforms/unit-tests/automated/number-test.xsd");
|
||||
final Document xformsDocument = Schema2XFormsTest.buildXForm(null, schemaDocument, "number-test");
|
||||
System.err.println("generated xform " + XMLUtil.toString(xformsDocument));
|
||||
final Element[] repeatedNumbers = Schema2XFormsTest.resolveXFormsControl(xformsDocument, "/number-test/repeated_numbers");
|
||||
final ChibaBean chibaBean = this.runXForm(xformsDocument);
|
||||
try
|
||||
{
|
||||
chibaBean.dispatch(repeatedNumbers[0].getAttribute("id") + "-insert_before", DOMEventNames.ACTIVATE);
|
||||
fail("expected to reproduce WCM-778");
|
||||
}
|
||||
catch (XFormsException bindingIssue)
|
||||
{
|
||||
// tracked as WCM-778
|
||||
}
|
||||
}
|
||||
|
||||
public void testRepeatConstraintsTest()
|
||||
throws Exception
|
||||
{
|
||||
|
@@ -35,6 +35,15 @@
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element name="implicitly_bounded_int" type="xs:int"/>
|
||||
<xs:element name="repeated_numbers" minOccurs="1" maxOccurs="unbounded">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="repeated_integer" type="xs:integer"/>
|
||||
<xs:element name="repeated_int" type="xs:int"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
@@ -4,7 +4,7 @@
|
||||
<xs:complexType name="multi-input">
|
||||
<xs:sequence>
|
||||
<xs:element name="string" type="xs:normalizedString"/>
|
||||
<xs:element name="int" type="xs:int"/>
|
||||
<xs:element name="integer" type="xs:integer"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
<xs:element name="repeat-multi-simple">
|
||||
|
@@ -2174,6 +2174,10 @@
|
||||
<managed-property>
|
||||
<property-name>workflowService</property-name>
|
||||
<value>#{WorkflowService}</value>
|
||||
</managed-property>
|
||||
<managed-property>
|
||||
<property-name>unprotectedNodeService</property-name>
|
||||
<value>#{nodeService}</value>
|
||||
</managed-property>
|
||||
</managed-bean>
|
||||
|
||||
|
BIN
source/web/images/icons/close_portlet_animation.gif
Normal file
After Width: | Height: | Size: 1001 B |
BIN
source/web/images/icons/close_portlet_static.gif
Normal file
After Width: | Height: | Size: 653 B |
BIN
source/web/images/parts/doclist_arrow_down.png
Normal file
After Width: | Height: | Size: 3.3 KiB |
BIN
source/web/images/parts/doclist_arrow_up.png
Normal file
After Width: | Height: | Size: 3.3 KiB |
BIN
source/web/images/parts/doclist_item_marker.png
Normal file
After Width: | Height: | Size: 3.0 KiB |
BIN
source/web/images/parts/marker_effect_left.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
source/web/images/parts/marker_effect_right.png
Normal file
After Width: | Height: | Size: 2.0 KiB |
BIN
source/web/images/parts/mytasks_arrow_down.png
Normal file
After Width: | Height: | Size: 3.0 KiB |
BIN
source/web/images/parts/mytasks_arrow_up.png
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
source/web/images/parts/task_btn_normal_left.png
Normal file
After Width: | Height: | Size: 3.0 KiB |
BIN
source/web/images/parts/task_btn_normal_right.png
Normal file
After Width: | Height: | Size: 427 B |
BIN
source/web/images/parts/task_btn_rollover_left.png
Normal file
After Width: | Height: | Size: 3.0 KiB |
BIN
source/web/images/parts/task_btn_rollover_right.png
Normal file
After Width: | Height: | Size: 446 B |
@@ -35,9 +35,9 @@
|
||||
tinyMCE.init({
|
||||
theme : "advanced",
|
||||
mode : "exact",
|
||||
relative_urls: false,
|
||||
elements : "editor",
|
||||
save_callback : "saveContent",
|
||||
urlconverter_callback: "convertUrl",
|
||||
plugins : "table",
|
||||
theme_advanced_toolbar_location : "top",
|
||||
theme_advanced_toolbar_align : "left",
|
||||
@@ -53,13 +53,6 @@
|
||||
document.getElementById("wizard:wizard-body:editor-output").value = content;
|
||||
}
|
||||
|
||||
function convertUrl(href, element, onsave)
|
||||
{
|
||||
// just return the passed href, this is enough to stop TinyMCE
|
||||
// from converting the URL to it's relative form
|
||||
return href;
|
||||
}
|
||||
|
||||
var isIE = (document.all);
|
||||
|
||||
</script>
|
||||
|
@@ -41,9 +41,9 @@
|
||||
tinyMCE.init({
|
||||
theme : "advanced",
|
||||
mode : "exact",
|
||||
relative_urls: false,
|
||||
elements : "editor",
|
||||
save_callback : "saveContent",
|
||||
urlconverter_callback: "convertUrl",
|
||||
plugins : "table",
|
||||
theme_advanced_toolbar_location : "top",
|
||||
theme_advanced_toolbar_align : "left",
|
||||
@@ -58,14 +58,6 @@
|
||||
{
|
||||
document.forms['edit-file']['edit-file:editorOutput'].value = content;
|
||||
}
|
||||
|
||||
function convertUrl(href, element, onsave)
|
||||
{
|
||||
// just return the passed href, this is enough to stop TinyMCE
|
||||
// from converting the URL to it's relative form
|
||||
return href;
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
|
@@ -517,7 +517,7 @@ function openWindowCallback(url, callback)
|
||||
// Register our "well known" callback function
|
||||
window.alfrescoCallback = openWindowOnCallback;
|
||||
// Use a named window so that only one dialog is active at a time
|
||||
window.open(url, 'alfrescoDialog', 'width=1024,height=768');
|
||||
window.open(url, 'alfrescoDialog', 'width=1024,height=768,scrollbars=yes');
|
||||
}
|
||||
|
||||
function openWindowOnCallback(fromTimeout)
|
||||
|
@@ -2,7 +2,7 @@ var MyDocs = {
|
||||
IMG_SMALL: 16,
|
||||
IMG_LARGE: 64,
|
||||
ANIM_LENGTH: 300,
|
||||
DETAIL_MARGIN: 56,
|
||||
DETAIL_MARGIN: 8,
|
||||
TITLE_FONT_SIZE: 18,
|
||||
RESOURCE_PANEL_HEIGHT: 150,
|
||||
OVERLAY_OPACITY: 0.8,
|
||||
@@ -20,6 +20,11 @@ var MyDocs = {
|
||||
// show AJAX loading overlay
|
||||
$('docPanelOverlayAjax').setStyle('visibility', 'visible');
|
||||
$('docPanel').setStyle('visibility', 'hidden');
|
||||
|
||||
var messagePanel = $('docMessagePanel');
|
||||
messagePanel.setStyle('opacity', 0);
|
||||
messagePanel.setStyle('display', 'block');
|
||||
|
||||
// fire off the ajax request to populate the doc list - the 'doclistpanel' webscript
|
||||
// is responsible for rendering just the contents of the main panel div
|
||||
YAHOO.util.Connect.asyncRequest(
|
||||
@@ -252,6 +257,8 @@ var MyDocs = {
|
||||
|
||||
if (!doc.isOpen)
|
||||
{
|
||||
doc.addClass("docItemSelectedOpen");
|
||||
|
||||
if (!resource.isLoaded)
|
||||
{
|
||||
// fire off the ajax request to get the resources for this task
|
||||
@@ -333,6 +340,8 @@ var MyDocs = {
|
||||
|
||||
// reset selected class?
|
||||
otherDoc.removeClass('docItemSelected');
|
||||
otherDoc.removeClass("docItemSelectedOpen");
|
||||
|
||||
// move the title back to the left?
|
||||
var ml = otherItem.getStyle('margin-left').toInt();
|
||||
if (ml != otherItem.defMarginLeft)
|
||||
@@ -389,6 +398,8 @@ var MyDocs = {
|
||||
// flag this document as closed
|
||||
doc.isOpen = false;
|
||||
|
||||
doc.removeClass("docItemSelectedOpen");
|
||||
|
||||
// reset resource panel back to it's default height
|
||||
animResource[i] = {
|
||||
'height': [resourceHeight, resource.defHeight],
|
||||
@@ -523,6 +534,7 @@ var MyDocs = {
|
||||
if (response.responseText.indexOf("OK:") == 0)
|
||||
{
|
||||
MyDocs.refreshList();
|
||||
MyDocs.displayMessage("A working copy for the checked out item 'Working Copy of " + name + "' has been created.");
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -557,6 +569,7 @@ var MyDocs = {
|
||||
if (response.responseText.indexOf("OK:") == 0)
|
||||
{
|
||||
MyDocs.refreshList();
|
||||
MyDocs.displayMessage("Item 'Working Copy of " + name + "' has been checked in.");
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -764,6 +777,71 @@ var MyDocs = {
|
||||
{
|
||||
// Refresh the inner panel
|
||||
MyDocs.refreshList(true);
|
||||
},
|
||||
|
||||
/**
|
||||
* Display a message bubble of helpful info to the user. Calling this function in quick
|
||||
* succession will cause previous message to be lost as the new ones are displayed.
|
||||
*
|
||||
* @param message Message text to display
|
||||
*/
|
||||
displayMessage: function(message)
|
||||
{
|
||||
var panel = $("docMessagePanel");
|
||||
if ($defined(panel.timeout))
|
||||
{
|
||||
clearTimeout(panel.timeout);
|
||||
panel.timeout = null;
|
||||
}
|
||||
|
||||
panel.setStyle("opacity", 0);
|
||||
panel.setStyle("margin-top", -60);
|
||||
|
||||
panel.getChildren()[1].setHTML(message);
|
||||
|
||||
// reset the close box animation by refreshing the image source
|
||||
$("docMessagePanelCloseImage").src = getContextPath() + "/images/icons/close_portlet_animation.gif";
|
||||
|
||||
panel.fxMessage = new Fx.Styles(panel,
|
||||
{
|
||||
duration: 1000,
|
||||
transition: Fx.Transitions.sineInOut
|
||||
});
|
||||
panel.fxMessage.start({'margin-top': -40, 'opacity': [0, 0.75]});
|
||||
|
||||
|
||||
panel.timeout = window.setTimeout(this.fadeOutMessage, 9000);
|
||||
},
|
||||
|
||||
/**
|
||||
* Timer callback function to fade out the message panel
|
||||
*/
|
||||
fadeOutMessage: function()
|
||||
{
|
||||
var panel = $("docMessagePanel");
|
||||
panel.timeout = null;
|
||||
|
||||
var fxMessage = new Fx.Styles(panel,
|
||||
{
|
||||
duration: 1000,
|
||||
transition: Fx.Transitions.sineInOut
|
||||
});
|
||||
fxMessage.start({'margin-top': -60, 'opacity': [0]});
|
||||
},
|
||||
|
||||
/**
|
||||
* Close the message panel immediately when the user clicks the close icon
|
||||
*/
|
||||
closeMessage: function()
|
||||
{
|
||||
var panel = $("docMessagePanel");
|
||||
if ($defined(panel.timeout))
|
||||
{
|
||||
clearTimeout(panel.timeout);
|
||||
panel.timeout = null;
|
||||
}
|
||||
panel.fxMessage.stop();
|
||||
panel.setStyle("opacity", 0);
|
||||
}
|
||||
};
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
var MyTasks = {
|
||||
ANIM_LENGTH: 300,
|
||||
DETAIL_PANEL_HEIGHT: 132,
|
||||
DETAIL_PANEL_HEIGHT: 137,
|
||||
Filter: null,
|
||||
ServiceContext: null,
|
||||
|
||||
@@ -8,6 +8,10 @@ var MyTasks = {
|
||||
{
|
||||
if ($('taskPanel'))
|
||||
{
|
||||
var messagePanel = $("taskMessagePanel");
|
||||
messagePanel.setStyle('opacity', 0);
|
||||
messagePanel.setStyle('display', 'block');
|
||||
|
||||
// fire off the ajax request to populate the task panel - the 'mytaskspanel' webscript
|
||||
// is responsible for rendering just the contents of the main panel div
|
||||
YAHOO.util.Connect.asyncRequest(
|
||||
@@ -45,6 +49,12 @@ var MyTasks = {
|
||||
// hide the ajax wait panel and show the main task panel
|
||||
$('taskPanelOverlay').setStyle('visibility', 'hidden');
|
||||
$('taskPanel').setStyle('visibility', 'visible');
|
||||
|
||||
if (MyTasks.postInit)
|
||||
{
|
||||
MyTasks.postInit();
|
||||
MyTasks.postInit = null;
|
||||
}
|
||||
},
|
||||
|
||||
parseTaskPanels: function()
|
||||
@@ -170,6 +180,8 @@ var MyTasks = {
|
||||
// open up this task
|
||||
// flag this task as open
|
||||
task.isOpen = true;
|
||||
task.addClass("taskItemSelected");
|
||||
task.addClass("taskItemSelectedOpen");
|
||||
|
||||
if (task.loadingResources == false)
|
||||
{
|
||||
@@ -212,6 +224,7 @@ var MyTasks = {
|
||||
|
||||
// unhighlight the item title
|
||||
otherTask.removeClass('taskItemSelected');
|
||||
otherTask.removeClass("taskItemSelectedOpen");
|
||||
|
||||
// does this task detail panel need resetting back to it's default height?
|
||||
var otherHeight = otherDetail.getStyle('height').toInt();
|
||||
@@ -237,6 +250,7 @@ var MyTasks = {
|
||||
// close this task
|
||||
// flag this task as closed
|
||||
task.isOpen = false;
|
||||
task.removeClass("taskItemSelectedOpen");
|
||||
|
||||
// fade in info button
|
||||
animInfo[i] = {'opacity': [infoOpacity, 1]};
|
||||
@@ -292,21 +306,39 @@ var MyTasks = {
|
||||
);
|
||||
},
|
||||
|
||||
displayMessage: function(message)
|
||||
{
|
||||
var footer = $('taskFooter');
|
||||
if (footer.oldMessage == undefined)
|
||||
{
|
||||
footer.oldMessage = footer.innerHTML;
|
||||
}
|
||||
footer.innerHTML = message + ' ' + footer.oldMessage;
|
||||
},
|
||||
|
||||
/**
|
||||
* Refresh the main data list contents within the taskPanel container
|
||||
*/
|
||||
refreshList: function()
|
||||
refreshList: function(reopenActive)
|
||||
{
|
||||
// do we want to remember which panel was open?
|
||||
if (reopenActive)
|
||||
{
|
||||
// do we have an open panel?
|
||||
var openPanel = $E('#taskPanel .taskItemSelected');
|
||||
var openPanelId = null;
|
||||
if (openPanel != null)
|
||||
{
|
||||
openPanelId = openPanel.id;
|
||||
// Re-open the panel if the id still exists
|
||||
MyTasks.postInit = function()
|
||||
{
|
||||
if ($(openPanelId))
|
||||
{
|
||||
$(openPanelId).fireEvent("click");
|
||||
|
||||
// scroll the open panel into view
|
||||
var fxScroll = new Fx.Scroll($('taskPanel'),
|
||||
{
|
||||
duration: MyTasks.ANIM_LENGTH,
|
||||
transition: Fx.Transitions.linear
|
||||
});
|
||||
fxScroll.toElement($(openPanelId));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// empty the main panel div and restart by reloading the panel contents
|
||||
var taskPanel = $('taskPanel');
|
||||
taskPanel.setStyle('visibility', 'hidden');
|
||||
@@ -322,15 +354,15 @@ var MyTasks = {
|
||||
*/
|
||||
filter: function(filter)
|
||||
{
|
||||
$$('.taskfilterLink').each(function(filterLink, i)
|
||||
$$('#taskFilterBar li').each(function(filterLink, i)
|
||||
{
|
||||
if (i == filter)
|
||||
{
|
||||
filterLink.addClass("taskfilterLinkSelected");
|
||||
filterLink.addClass("taskCurrent");
|
||||
}
|
||||
else
|
||||
{
|
||||
filterLink.removeClass("taskfilterLinkSelected");
|
||||
filterLink.removeClass("taskCurrent");
|
||||
}
|
||||
});
|
||||
MyTasks.Filter = filter;
|
||||
@@ -361,8 +393,81 @@ var MyTasks = {
|
||||
var x = a.dueDate;
|
||||
var y = b.dueDate;
|
||||
return ((x < y) ? -1 : ((x > y) ? 1 : 0));
|
||||
},
|
||||
|
||||
/**
|
||||
* Called when the Manage Task dialog returns
|
||||
*/
|
||||
manageTaskCallback: function()
|
||||
{
|
||||
// The manage task dialog window has closed
|
||||
MyTasks.refreshList(true);
|
||||
},
|
||||
|
||||
/**
|
||||
* Display a message bubble of helpful info to the user. Calling this function in quick
|
||||
* succession will cause previous message to be lost as the new ones are displayed.
|
||||
*
|
||||
* @param message Message text to display
|
||||
*/
|
||||
displayMessage: function(message)
|
||||
{
|
||||
var panel = $("taskMessagePanel");
|
||||
if ($defined(panel.timeout))
|
||||
{
|
||||
clearTimeout(panel.timeout);
|
||||
panel.timeout = null;
|
||||
}
|
||||
|
||||
panel.setStyle("opacity", 0);
|
||||
panel.setStyle("margin-top", -90);
|
||||
|
||||
panel.getChildren()[1].setHTML(message);
|
||||
|
||||
// reset the close box animation by refreshing the image source
|
||||
$("taskMessagePanelCloseImage").src = getContextPath() + "/images/icons/close_portlet_animation.gif";
|
||||
|
||||
panel.fxMessage = new Fx.Styles(panel,
|
||||
{
|
||||
duration: 1000,
|
||||
transition: Fx.Transitions.sineInOut
|
||||
});
|
||||
panel.fxMessage.start({'margin-top': -70, 'opacity': [0, 0.75]});
|
||||
|
||||
|
||||
panel.timeout = window.setTimeout(this.fadeOutMessage, 9000);
|
||||
},
|
||||
|
||||
/**
|
||||
* Timer callback function to fade out the message panel
|
||||
*/
|
||||
fadeOutMessage: function()
|
||||
{
|
||||
var panel = $("taskMessagePanel");
|
||||
panel.timeout = null;
|
||||
|
||||
var fxMessage = new Fx.Styles(panel,
|
||||
{
|
||||
duration: 1000,
|
||||
transition: Fx.Transitions.sineInOut
|
||||
});
|
||||
fxMessage.start({'margin-top': -90, 'opacity': [0]});
|
||||
},
|
||||
|
||||
/**
|
||||
* Close the message panel immediately when the user clicks the close icon
|
||||
*/
|
||||
closeMessage: function()
|
||||
{
|
||||
var panel = $("taskMessagePanel");
|
||||
if ($defined(panel.timeout))
|
||||
{
|
||||
clearTimeout(panel.timeout);
|
||||
panel.timeout = null;
|
||||
}
|
||||
panel.fxMessage.stop();
|
||||
panel.setStyle("opacity", 0);
|
||||
}
|
||||
};
|
||||
|
||||
window.addEvent('load', MyTasks.start);
|
@@ -34,7 +34,7 @@ var MyWebFiles = {
|
||||
var file = files[i];
|
||||
|
||||
// animated elements defaults
|
||||
file.maxHeight = file.getStyle('height').toInt();
|
||||
file.maxHeight = Math.max(file.getStyle('height').toInt(), 1);
|
||||
file.defHeight = 1;
|
||||
file.setStyle('height', file.defHeight);
|
||||
file.setStyle('display', 'block');
|
||||
|
@@ -21,7 +21,7 @@ var MyWebForms = {
|
||||
var frm = frms[i];
|
||||
|
||||
// animated elements defaults
|
||||
frm.maxHeight = frm.getStyle('height').toInt();
|
||||
frm.maxHeight = Math.max(frm.getStyle('height').toInt(), 1);
|
||||
frm.defHeight = 1;
|
||||
frm.setStyle('height', frm.defHeight);
|
||||
frm.setStyle('opacity', 0);
|
||||
|