Monotone-Parent: f67ec91eb2bf9c5dde6d13d95f3e8172dd91fa0e

Monotone-Revision: 680ce3d58b64771fea711e45a1b2bc3ec5490acb

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2006-07-11T22:29:19
Monotone-Branch: ca.inverse.sogo
maint-2.0.2
Wolfgang Sourdeau 2006-07-11 22:29:19 +00:00
parent 5cc323dfec
commit 8d92ea1b50
13 changed files with 300 additions and 242 deletions

View File

@ -72,10 +72,10 @@ static BOOL doCrashOnSessionCreate = NO;
[[self soClassSecurityInfo] setDefaultAccess:@"allow"];
/* require Authenticated role for View and WebDAV */
[[self soClassSecurityInfo] declareRole:SoRole_Authenticated
asDefaultForPermission:SoPerm_View];
[[self soClassSecurityInfo] declareRole:SoRole_Authenticated
asDefaultForPermission:SoPerm_WebDAVAccess];
[[self soClassSecurityInfo] declareRole: SoRole_Authenticated
asDefaultForPermission: SoPerm_View];
[[self soClassSecurityInfo] declareRole: SoRole_Authenticated
asDefaultForPermission: SoPerm_WebDAVAccess];
}
- (id)init {
@ -124,6 +124,8 @@ static BOOL doCrashOnSessionCreate = NO;
}
- (id)lookupUser:(NSString *)_key inContext:(id)_ctx {
NSLog (@"lookupUser: %@", _key);
return [[[NSClassFromString(@"SOGoUserFolder") alloc]
initWithName:_key inContainer:self] autorelease];
}

View File

@ -143,7 +143,7 @@
registry = [SoProductRegistry sharedProductRegistry];
fm = [NSFileManager defaultManager];
pathes = [[self productSearchPathes] objectEnumerator];
while ((lpath = [pathes nextObject]) != nil) {
NSEnumerator *productNames;

View File

@ -23,7 +23,8 @@ CommonUI_OBJC_FILES += \
UIxTabView.m \
UIxTabItem.m \
\
UIxToolbar.m
UIxToolbar.m \
UIxUserLogoff.m
CommonUI_RESOURCE_FILES += \
Version \

View File

@ -43,7 +43,7 @@
if ([self isUIxDebugEnabled])
return self->title;
return [self labelForKey:@"OpenGroupware.org"];
return [self labelForKey: @"OpenGroupware.org"];
}
- (void)setItem:(id)_item {
@ -60,10 +60,10 @@
/* Help URL/target */
- (NSString *)helpURL {
return [NSString stringWithFormat:@"help/%@.html", self->title];
return [NSString stringWithFormat: @"help/%@.html", self->title];
}
- (NSString *)helpWindowTarget {
return [NSString stringWithFormat:@"Help_%@", self->title];
return [NSString stringWithFormat: @"Help_%@", self->title];
}
@ -78,19 +78,23 @@
// TODO: I think all this should be done by the clientObject?!
- (NSString *)relativeHomePath {
return [self relativePathToUserFolderSubPath:@""];
return [self relativePathToUserFolderSubPath: @""];
}
- (NSString *)relativeCalendarPath {
return [self relativePathToUserFolderSubPath:@"Calendar/"];
return [self relativePathToUserFolderSubPath: @"Calendar/"];
}
- (NSString *)relativeContactsPath {
return [self relativePathToUserFolderSubPath:@"Contacts/"];
return [self relativePathToUserFolderSubPath: @"Contacts/"];
}
- (NSString *)relativeMailPath {
return [self relativePathToUserFolderSubPath:@"Mail/"];
return [self relativePathToUserFolderSubPath: @"Mail/"];
}
- (NSString *)logoffPath {
return [self relativePathToUserFolderSubPath: @"logoff"];
}
/* page based JavaScript */
@ -132,7 +136,7 @@
pageToURL = [[NSMutableDictionary alloc] initWithCapacity:32];
rm = [self pageResourceManager];
jsname = [pageName stringByAppendingString:@".js"];
jsname = [pageName stringByAppendingString: @".js"];
url = [rm urlForResourceNamed: jsname
inFramework: [[NSBundle bundleForClass: [page class]] bundlePath]
@ -164,7 +168,7 @@
pageToURL = [[NSMutableDictionary alloc] initWithCapacity:32];
rm = [self pageResourceManager];
jsname = [[page frameworkName] stringByAppendingString:@".js"];
jsname = [[page frameworkName] stringByAppendingString: @".js"];
url = [rm urlForResourceNamed: jsname
inFramework: [[NSBundle bundleForClass: [page class]] bundlePath]

View File

@ -14,7 +14,7 @@
box_left.gif,
box_right.gif,
box_botleft.gif,
box_bottom.gif,
box_bottom.gi88f,
box_botright.gif,
tab_selected.gif,
tab_.gif,
@ -30,6 +30,15 @@
};
categories = {
SOGoUserLogin = {
methods = {
logoff = {
protectedBy = "View";
pageName = "UIxUserLogoff";
actionName = "logoffUser";
}
};
};
SOGoObject = {
methods = {
};

View File

@ -136,11 +136,14 @@ static int attachmentFlagSize = 8096;
return [[[self message] valueForKey:@"uid"] stringValue];
}
- (NSString *)messageSubjectStyleClass {
return [self isMessageRead]
? @"mailer_readmailsubject"
: @"mailer_unreadmailsubject";
- (NSString *)messageSubjectCellStyleClass {
return [NSString stringWithFormat: @"%@ %@",
[self messageCellStyleClass],
([self isMessageRead]
? @"mailer_readmailsubject"
: @"mailer_unreadmailsubject")];
}
- (NSString *)messageCellStyleClass {
return [self isMessageDeleted]
? @"mailer_listcell_deleted"
@ -322,25 +325,25 @@ static int attachmentFlagSize = 8096;
/* JavaScript */
- (NSString *)msgRowID {
- (NSString *)msgRowID
{
return [@"row_" stringByAppendingString:[self messageUidString]];
}
- (NSString *)msgDivID {
- (NSString *)msgDivID
{
return [@"div_" stringByAppendingString:[self messageUidString]];
}
- (NSString *)msgIconReadDivID {
- (NSString *)msgIconReadImgID
{
return [@"readdiv_" stringByAppendingString:[self messageUidString]];
}
- (NSString *)msgIconUnreadDivID {
- (NSString *)msgIconUnreadImgID
{
return [@"unreaddiv_" stringByAppendingString:[self messageUidString]];
}
- (NSString *)msgIconReadVisibility {
return [self isMessageRead] ? nil : @"display: none;";
}
- (NSString *)msgIconUnreadVisibility {
return [self isMessageRead] ? @"display: none;" : nil;
}
- (NSString *)clickedMsgJS {
/* return 'false' aborts processing */

View File

@ -153,7 +153,9 @@ static NSArray *internetAccessStates = nil;
}
- (NSString *)relativeMailPath {
return [self relativePathToUserFolderSubPath:@"Mail/"];
return [NSString stringWithFormat: @"%@%@/view",
[self relativePathToUserFolderSubPath:@"Mail/"],
[self emailForUser]];
}
/* objects */

View File

@ -1,9 +1,9 @@
<?xml version="1.0" standalone="yes"?>
<pre
<div
xmlns="http://www.w3.org/1999/xhtml"
xmlns:var="http://www.skyrix.com/od/binding"
xmlns:const="http://www.skyrix.com/od/constant"
xmlns:rsrc="OGo:url"
xmlns:label="OGo:label"
class="mailer_plaincontent"
><var:string value="flatContentAsString" /></pre>
><var:string value="flatContentAsString" /></div>

View File

@ -1,202 +1,199 @@
<?xml version='1.0' standalone='yes'?>
<var:component
xmlns="http://www.w3.org/1999/xhtml"
xmlns:var="http://www.skyrix.com/od/binding"
xmlns:const="http://www.skyrix.com/od/constant"
xmlns:uix="OGo:uix"
xmlns:rsrc="OGo:url"
xmlns:label="OGo:label"
className="UIxMailMainFrame"
title="panelTitle"
hideFrame="hideFrame"
>
<script language="JavaScript" rsrc:src="UIxMailListView.js">
<!-- space required -->
</script>
<var:component
xmlns="http://www.w3.org/1999/xhtml"
xmlns:var="http://www.skyrix.com/od/binding"
xmlns:const="http://www.skyrix.com/od/constant"
xmlns:uix="OGo:uix"
xmlns:rsrc="OGo:url"
xmlns:label="OGo:label"
className="UIxMailMainFrame"
title="panelTitle"
hideFrame="hideFrame"
>
<var:component className="UIxMailFilterPanel" qualifier="qualifier"
hideFrame="hideFrame" />
<var:component className="UIxMailFilterPanel" qualifier="qualifier"
hideFrame="hideFrame" />
<div id="cl_tableview_reloadroot">
<div class="embedwhite_out">
<div class="embedwhite_in">
<table border="0" width="100%" cellspacing="0" cellpadding="1">
<tr class="tableview">
<td class="tbtv_headercell" width="17">
<var:entity const:name="nbsp" />
</td>
<td class="tbtv_headercell" width="50%">
<var:component className="UIxMailSortableTableHeader"
label:label="Subject"
const:sortKey="subject"
const:href="view"
var:queryDictionary="context.request.formValues"
/>
</td>
<td class="tbtv_headercell">
<var:if condition="showToAddress" const:negate="YES">
<var:component className="UIxMailSortableTableHeader"
label:label="From"
const:sortKey="from"
const:href="view"
var:queryDictionary="context.request.formValues"
/>
</var:if>
<var:if condition="showToAddress">
<var:component className="UIxMailSortableTableHeader"
label:label="To"
const:sortKey="to"
const:href="view"
var:queryDictionary="context.request.formValues"
/>
</var:if>
</td>
<td class="tbtv_headercell" width="17">
<img rsrc:src="title_read_14x14.png" width="14" height="14" />
</td>
<td class="tbtv_headercell" width="17">
<img rsrc:src="title_attachment_14x14.png" width="14" height="14" />
</td>
<td class="tbtv_headercell">
<var:component className="UIxMailSortableTableHeader"
label:label="Date"
const:sortKey="date"
const:href="view"
var:queryDictionary="context.request.formValues"
const:isDefault="YES"
/>
</td>
</tr>
<tr class="tableview">
<td colspan="6" class="tbtv_navcell" align="right">
<var:if condition="showsAllMessages">
<var:string value="sortedUIDs.count" />
<var:string label:value="messages" />
</var:if>
<var:if condition="showsAllMessages" const:negate="YES">
<var:if condition="hasPrevious">
<a href="view"
_idx="1"
var:queryDictionary="queryParameters"
><var:string label:value="first"/></a> |
<a href="view"
var:_idx="prevFirstMessageNumber"
var:queryDictionary="queryParameters"
><var:string label:value="previous"/></a> |
</var:if>
<var:string value="firstMessageNumber"/>
<var:string label:value="msgnumber_to" />
<var:string value="lastMessageNumber"/>
<var:string label:value="msgnumber_of" />
<var:string value="sortedUIDs.count" />
<var:if condition="hasNext">
| <a href="view"
var:_idx="nextFirstMessageNumber"
var:queryDictionary="queryParameters"
><var:string label:value="next" /></a>
</var:if>
</var:if>
</td>
</tr>
<var:foreach list="messages" item="message">
<tr class="tableview" var:id="msgRowID"
onmouseover="ml_highlight(this)"
onmouseout="ml_lowlight(this)"
style="cursor: pointer;"
>
<td>
<!-- this seems to break on Safari, it treats name==id? -->
<input type="checkbox" var:name="msgRowID" value="0"
onchange="toggleMailSelect(this)" />
</td>
<!-- the td:onlick doesn't work on Safari -->
<td var:class="messageCellStyleClass" var:onclick="clickedMsgJS">
<div var:class="messageSubjectStyleClass" var:id="msgDivID">
<!-- removed anker (resulted in two clicks on Moz -->
<!-- a href="#" var:onclick="clickedMsgJS" -->
<!-- Note: var:href="messageViewURL" (done by JS),
var:target="messageViewTarget" -->
<var:string value="message.envelope.subject"
formatter="context.mailSubjectFormatter"/>
<!-- /a -->
</div>
</td>
<td var:class="messageCellStyleClass" var:onclick="clickedMsgJS">
<!-- TODO: show compose links -->
<!-- TODO: different color for internal vs external addrs -->
<var:if condition="showToAddress" const:negate="YES">
<var:string value="message.envelope.from"
formatter="context.mailEnvelopeAddressFormatter" />
</var:if>
<var:if condition="showToAddress">
<var:string value="message.envelope.to"
formatter="context.mailEnvelopeAddressFormatter" />
</var:if>
</td>
<td>
<div class="mailer_readicon"
var:style="msgIconReadVisibility"
var:id="msgIconReadDivID">
<a href="#" var:onclick="markUnreadJS"
label:title="Mark Unread"> </a>
</div>
<div class="mailer_unreadicon"
var:style="msgIconUnreadVisibility"
var:id="msgIconUnreadDivID">
<a href="#" var:onclick="markReadJS"
label:title="Mark Read"> </a>
</div>
</td>
<td>
<var:if condition="hasMessageAttachment">
<img rsrc:src="title_attachment_14x14.png"
width="14" height="14" />
</var:if>
<entity name="nbsp" />
</td>
<div id="cl_tableview_reloadroot">
<div class="embedwhite_out">
<div class="embedwhite_in">
<table multiselect="yes" id="messageList">
<tr class="tableview">
<td class="tbtv_headercell" width="17">
<var:entity const:name="nbsp" />
</td>
<td class="tbtv_headercell" width="50%">
<var:component className="UIxMailSortableTableHeader"
label:label="Subject"
const:sortKey="subject"
const:href="view"
var:queryDictionary="context.request.formValues"
/>
</td>
<td class="tbtv_headercell">
<var:if condition="showToAddress" const:negate="YES">
<var:component className="UIxMailSortableTableHeader"
label:label="From"
const:sortKey="from"
const:href="view"
var:queryDictionary="context.request.formValues"
/>
</var:if>
<var:if condition="showToAddress">
<var:component className="UIxMailSortableTableHeader"
label:label="To"
const:sortKey="to"
const:href="view"
var:queryDictionary="context.request.formValues"
/>
</var:if>
</td>
<td class="tbtv_headercell" width="17">
<img rsrc:src="title_read_14x14.png" width="14" height="14" />
</td>
<td class="tbtv_headercell" width="17">
<img rsrc:src="title_attachment_14x14.png" width="14" height="14" />
</td>
<td class="tbtv_headercell">
<var:component className="UIxMailSortableTableHeader"
label:label="Date"
const:sortKey="date"
const:href="view"
var:queryDictionary="context.request.formValues"
const:isDefault="YES"
/>
</td>
</tr>
<tr class="tableview">
<td colspan="6" class="tbtv_navcell" align="right">
<var:if condition="showsAllMessages">
<var:string value="sortedUIDs.count" />
<var:string label:value="messages" />
</var:if>
<var:if condition="showsAllMessages" const:negate="YES">
<var:if condition="hasPrevious">
<a href="view"
_idx="1"
var:queryDictionary="queryParameters"
><var:string label:value="first"/></a> |
<a href="view"
var:_idx="prevFirstMessageNumber"
var:queryDictionary="queryParameters"
><var:string label:value="previous"/></a> |
</var:if>
<var:string value="firstMessageNumber"/>
<var:string label:value="msgnumber_to" />
<var:string value="lastMessageNumber"/>
<var:string label:value="msgnumber_of" />
<var:string value="sortedUIDs.count" />
<var:if condition="hasNext">
| <a href="view"
var:_idx="nextFirstMessageNumber"
var:queryDictionary="queryParameters"
><var:string label:value="next" /></a>
</var:if>
</var:if>
</td>
</tr>
<td var:class="messageCellStyleClass" var:onclick="clickedMsgJS">
<span class="mailer_datefield">
<var:string value="message.envelope.date"
formatter="context.mailDateFormatter"/>
</span>
<entity name="nbsp" />
</td>
</tr>
</var:foreach>
<var:foreach list="messages" item="message">
<tr class="tableview" var:id="msgRowID"
onmousedown="return false;"
onclick="onRowClick(this, event);">
<td>
<!-- this seems to break on Safari, it treats name==id? -->
<input type="checkbox" var:name="msgRowID" value="0"
onchange="toggleMailSelect(this)" />
</td>
<!-- the td:onlick doesn't work on Safari -->
<td
var:class="messageSubjectCellStyleClass"
var:ondblclick="clickedMsgJS"
var:id="msgDivID">
<!-- div var:class="messageSubjectStyleClass" var:id="msgDivID" -->
<!-- removed anker (resulted in two clicks on Moz -->
<!-- a href="#" var:ondblclick="clickedMsgJS" -->
<!-- Note: var:href="messageViewURL" (done by JS),
var:target="messageViewTarget" -->
<var:string value="message.envelope.subject"
formatter="context.mailSubjectFormatter"/>
<!-- /a -->
</td>
<td var:class="messageCellStyleClass" var:ondblclick="clickedMsgJS">
<!-- TODO: show compose links -->
<!-- TODO: different color for internal vs external addrs -->
<var:if condition="showToAddress" const:negate="YES">
<var:string value="message.envelope.from"
formatter="context.mailEnvelopeAddressFormatter" />
</var:if>
<var:if condition="showToAddress">
<var:string value="message.envelope.to"
formatter="context.mailEnvelopeAddressFormatter" />
</var:if>
</td>
<td var:class="messageCellStyleClass">
<var:if condition="isMessageRead">
<img rsrc:src="icon_read.gif"
class="mailerReadIcon"
var:onclick="markUnreadJS"
label:title="Mark Unread"
var:id="msgIconReadImgID" />
</var:if>
<var:if condition="isMessageRead" const:negate="YES">
<img rsrc:src="icon_unread.gif"
class="mailerUnreadIcon"
var:onclick="markReadJS"
label:title="Mark Read"
var:id="msgIconUnreadImgID" />
</var:if>
</td>
<tr class="tableview">
<td colspan="6" class="tbtv_actcell">
<!-- TODO: fix used tree, treeNavigationNodes is the _wrong_ choice
<var:component className="UIxMailMoveToPopUp"
const:identifier="moveto"
const:callback="moveTo"
rootNodes="clientObject.treeNavigationNodes"
/>
-->
<!-- enable once we have buttons and functionality to actually move sth #1211
<var:popup const:name="moveto" const:id="moveto"
list="clientObject.mailAccountFolder.allFolderPathes"
item="item" value="item" displayString="item" />
-->
</td>
</tr>
</table>
<span id="selected_uids" style="visibility: hidden;">
</span>
<td>
<var:if condition="hasMessageAttachment">
<img rsrc:src="title_attachment_14x14.png" />
</var:if>
</td>
<td var:class="messageCellStyleClass" var:ondblclick="clickedMsgJS">
<span class="mailer_datefield">
<var:string value="message.envelope.date"
formatter="context.mailDateFormatter"/>
</span>
<entity name="nbsp" />
</td>
</tr>
</var:foreach>
<tr class="tableview">
<td colspan="6" class="tbtv_actcell">
<!-- TODO: fix used tree, treeNavigationNodes is the _wrong_ choice
<var:component className="UIxMailMoveToPopUp"
const:identifier="moveto"
const:callback="moveTo"
rootNodes="clientObject.treeNavigationNodes"
/>
-->
<!-- enable once we have buttons and functionality to actually move sth #1211
<var:popup const:name="moveto" const:id="moveto"
list="clientObject.mailAccountFolder.allFolderPathes"
item="item" value="item" displayString="item" />
-->
</td>
</tr>
</table>
<span id="selected_uids" style="visibility: hidden;">
</span>
</div>
</div>
</div>
</div>
</div>
<var:if condition="hideFrame" const:negate="YES">
<script language="JavaScript">
document.pageform.search.focus();
</script>
</var:if>
</var:component>
<var:if condition="hideFrame" const:negate="YES">
<script language="JavaScript">
document.pageform.search.focus();
</script>
</var:if>
</var:component>

View File

@ -54,6 +54,8 @@
><var:string label:value="Addressbook" /></a> |
<a var:href="relativeMailPath"
><var:string label:value="Mail" /></a> |
<a var:href="logoffPath"
><var:string label:value="Logoff" /></a> |
<a href="http://to.be.done/"
><var:string label:value="Right Administration" /></a>
</div>

View File

@ -12,8 +12,8 @@
<meta name="description" content="SOGo Web Interface"/>
<meta name="author" content="SKYRIX Software AG"/>
<meta name="robots" content="stop"/>
<meta name="test" content="testp"/>
<meta name="test" var:content="patate"/>
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-1"/>
<link type="text/css" rel="stylesheet" rsrc:href="uix.css"/>
<link type="text/css" rel="stylesheet" rsrc:href="calendar.css"/>
<link href="mailto:hh@skyrix.com" rev="made"/>
@ -38,6 +38,8 @@
><var:string label:value="Addressbook" /></a> |
<a var:href="relativeMailPath"
><var:string label:value="Mail" /></a> |
<a var:href="logoffPath"
><var:string label:value="Logoff" /></a> |
<a href="http://to.be.done/"
><var:string label:value="Right Administration" /></a>
</div>
@ -151,3 +153,10 @@
</var:if>
</body>
</html>
<!-- Keep this comment at the end of the file
Local variables:
mode: xml
sgml-omittag:nil
sgml-shorttag:nil
End:
-->

View File

@ -256,12 +256,13 @@ function getSelectedNodes(parentNode) {
}
function onRowClick(node, event) {
var text = document.getElementById('list');
text.innerHTML = '';
// var text = document.getElementById('list');
// text.innerHTML = '';
var startSelection = getSelectedNodes(node.parentNode);
if (event.shiftKey == 1
&& acceptMultiSelect(node.parentNode)) {
&& (acceptMultiSelect(node.parentNode)
|| acceptMultiSelect(node.parentNode.parentNode))) {
if (isNodeSelected(node) == true) {
deselectNode(node);
} else {

View File

@ -151,6 +151,7 @@ td.titlecell
.tableview
{
cursor: default;
font-size: medium;
font-family: Arial, Helvetica, Verdana, Geneva, Tahoma, sans-serif;
vertical-align: top;
@ -273,6 +274,7 @@ div.mailer_readmailsubject
padding-top: 1px;
padding-left: 20px;
}
div.mailer_unreadmailsubject
{
background-image: url(message-mail.png);
@ -282,6 +284,7 @@ div.mailer_unreadmailsubject
padding-top: 1px;
font-weight: bold;
}
div.mailer_readmailsubject a
{
color: black;
@ -297,9 +300,12 @@ td.mailer_listcell_deleted
{
text-decoration: line-through;
}
td.mailer_listcell_regular
{
white-space: nowrap;
}
td.mailer_listcell_regular a
{
color: black;
@ -312,6 +318,12 @@ tr.tableview td.mailer_listcell_regular
border-bottom: 1px solid #fff;
}
IMG.mailerReadIcon
{
/* TODO
*/
}
div.mailer_readicon
{
/* TODO: use Thunderbird icon */
@ -319,6 +331,7 @@ div.mailer_readicon
background-repeat: no-repeat;
background-position: 0px 4px;
}
div.mailer_readicon a
{
width: 17px;
@ -326,13 +339,15 @@ div.mailer_readicon a
margin: 0px auto;
display: block;
}
div.mailer_unreadicon
div.mailerUnreadIcon
{
/* TODO: use Thunderbird icon */
background-image: url(icon_unread.gif);
background-repeat: no-repeat;
background-position: 0px 4px;
}
div.mailer_unreadicon a
{
width: 17px;
@ -386,15 +401,9 @@ img.mailer_imagecontent
border: 0px;
}
body
{
overflow: hidden;
}
div.pageContent
{
overflow: auto;
height: 100%;
overflow: hidden;
}
div.mailer_mailcontent
@ -491,3 +500,22 @@ table.linked_attachment_meta
color: #444444;
font-style: italic;
}
TABLE#messageList
{
border: 1px;
border-collapse: collapse;
overflow: scroll;
height: 5em !important;
}
TABLE#messageList TR TD
{
height: 1em; !important;
}
#messageList TR._selected TD
{
background: #4b6983;
color: #fff;
}