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
This commit is contained in:
Derek Hulley
2007-09-11 03:39:41 +00:00
parent fd2ee9fde1
commit f279d99d80
36 changed files with 677 additions and 194 deletions

View File

@@ -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&amp;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>

View File

@@ -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&amp;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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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">&nbsp;</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>

View File

@@ -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">&nbsp;</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">&nbsp;</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">&nbsp;</td>
<td>
<div class="taskManage">
<ul>
<li><a href="#" onclick="event.cancelBubble=true; openWindowCallback('${url.context}/command/ui/managetask?id=${t.id}&amp;type=${t.qnameType}&amp;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">&nbsp;</td>
</tr>
<tr>
<td colspan="2">&nbsp;</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">&nbsp;</td>
</tr>
</table>
</div>
</div>
</#if>

View File

@@ -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>

View File

@@ -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 -->

View File

@@ -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)

View File

@@ -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);
}
}
}

View File

@@ -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++)

View File

@@ -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))));

View File

@@ -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
{

View File

@@ -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>

View File

@@ -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">

View File

@@ -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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1001 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 446 B

View File

@@ -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>

View File

@@ -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>

View File

@@ -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)

View File

@@ -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);
}
};

View File

@@ -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);

View File

@@ -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');

View File

@@ -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);