Monotone-Parent: 3d8ebb80a2f9e64a537f7a46aaadd8fcc1d801e8
Monotone-Revision: 4bc7d1bcd8cf57366a454fb7814accb19d6121c8 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2007-06-28T20:37:27 Monotone-Branch: ca.inverse.sogo
This commit is contained in:
parent
d083b67952
commit
f1fdc98f0a
|
@ -31,7 +31,6 @@
|
||||||
|
|
||||||
@interface UIxContactsListView : UIxComponent
|
@interface UIxContactsListView : UIxComponent
|
||||||
{
|
{
|
||||||
NSString *searchText;
|
|
||||||
NSDictionary *currentContact;
|
NSDictionary *currentContact;
|
||||||
NSString *selectorComponentClass;
|
NSString *selectorComponentClass;
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,13 +42,6 @@
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) dealloc
|
|
||||||
{
|
|
||||||
if (searchText)
|
|
||||||
[searchText release];
|
|
||||||
[super dealloc];
|
|
||||||
}
|
|
||||||
|
|
||||||
/* accessors */
|
/* accessors */
|
||||||
|
|
||||||
- (void) setCurrentContact: (NSDictionary *) _contact
|
- (void) setCurrentContact: (NSDictionary *) _contact
|
||||||
|
@ -61,19 +54,6 @@
|
||||||
return currentContact;
|
return currentContact;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setSearchText: (NSString *) _txt
|
|
||||||
{
|
|
||||||
ASSIGNCOPY (searchText, _txt);
|
|
||||||
}
|
|
||||||
|
|
||||||
- (id) searchText
|
|
||||||
{
|
|
||||||
if (!searchText)
|
|
||||||
[self setSearchText: [self queryParameterForKey:@"search"]];
|
|
||||||
|
|
||||||
return searchText;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (id <WOActionResults>) mailerContactsAction
|
- (id <WOActionResults>) mailerContactsAction
|
||||||
{
|
{
|
||||||
selectorComponentClass = @"UIxContactsMailerSelection";
|
selectorComponentClass = @"UIxContactsMailerSelection";
|
||||||
|
@ -126,45 +106,33 @@
|
||||||
NSString *s;
|
NSString *s;
|
||||||
|
|
||||||
s = [self queryParameterForKey: @"sort"];
|
s = [self queryParameterForKey: @"sort"];
|
||||||
if ([s length] == 0)
|
if (![s length])
|
||||||
s = [self defaultSortKey];
|
s = [self defaultSortKey];
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSComparisonResult) sortOrdering
|
|
||||||
{
|
|
||||||
return ([[self queryParameterForKey:@"desc"] boolValue]
|
|
||||||
? NSOrderedDescending
|
|
||||||
: NSOrderedAscending);
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSArray *) contactInfos
|
- (NSArray *) contactInfos
|
||||||
{
|
{
|
||||||
id <SOGoContactFolder> folder;
|
id <SOGoContactFolder> folder;
|
||||||
|
NSString *ascending, *searchText, *valueText;
|
||||||
|
NSComparisonResult ordering;
|
||||||
|
|
||||||
folder = [self clientObject];
|
folder = [self clientObject];
|
||||||
|
|
||||||
return [folder lookupContactsWithFilter: [self searchText]
|
ascending = [self queryParameterForKey: @"asc"];
|
||||||
|
ordering = ((![ascending length] || [ascending boolValue])
|
||||||
|
? NSOrderedAscending : NSOrderedDescending);
|
||||||
|
|
||||||
|
searchText = [self queryParameterForKey: @"search"];
|
||||||
|
if ([searchText length] > 0)
|
||||||
|
valueText = [self queryParameterForKey: @"value"];
|
||||||
|
else
|
||||||
|
valueText = nil;
|
||||||
|
|
||||||
|
return [folder lookupContactsWithFilter: valueText
|
||||||
sortBy: [self sortKey]
|
sortBy: [self sortKey]
|
||||||
ordering: [self sortOrdering]];
|
ordering: ordering];
|
||||||
}
|
|
||||||
|
|
||||||
/* notifications */
|
|
||||||
|
|
||||||
- (void) sleep
|
|
||||||
{
|
|
||||||
if (searchText)
|
|
||||||
{
|
|
||||||
[searchText release];
|
|
||||||
searchText = nil;
|
|
||||||
}
|
|
||||||
currentContact = nil;
|
|
||||||
// [allRecords release];
|
|
||||||
// allRecords = nil;
|
|
||||||
// [filteredRecords release];
|
|
||||||
// filteredRecords = nil;
|
|
||||||
[super sleep];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* actions */
|
/* actions */
|
||||||
|
|
|
@ -13,32 +13,18 @@
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr class="tableview">
|
<tr class="tableview">
|
||||||
<!-- localize -->
|
<!-- localize -->
|
||||||
<td class="tbtv_headercell headerName">
|
<td class="tbtv_headercell" id="nameHeader"
|
||||||
<var:component className="UIxSortableTableHeader"
|
><var:string label:value="Name"
|
||||||
label:label="Name"
|
/></td
|
||||||
const:sortKey="cn"
|
><td class="tbtv_headercell" id="mailHeader"
|
||||||
const:href="view"
|
><var:string label:value="Email"/></td
|
||||||
var:queryDictionary="context.request.formValues"
|
><td class="tbtv_headercell" id="screenNameHeader"
|
||||||
/>
|
><var:string label:value="Screen Name" /></td
|
||||||
</td>
|
><td class="tbtv_headercell" id="orgHeader"
|
||||||
<td class="tbtv_headercell headerEmail">
|
><var:string label:value="Organization" /></td
|
||||||
<var:component className="UIxSortableTableHeader"
|
><td class="tbtv_headercell" id="phoneHeader"
|
||||||
label:label="Email"
|
><var:string label:value="Work Phone" /></td
|
||||||
const:sortKey="mail"
|
></tr>
|
||||||
const:href="view"
|
|
||||||
var:queryDictionary="context.request.formValues"
|
|
||||||
/>
|
|
||||||
</td>
|
|
||||||
<td class="tbtv_headercell">
|
|
||||||
<var:string label:value="Screen Name" />
|
|
||||||
</td>
|
|
||||||
<td class="tbtv_headercell">
|
|
||||||
<var:string label:value="Organization" />
|
|
||||||
</td>
|
|
||||||
<td class="tbtv_headercell">
|
|
||||||
<var:string label:value="Work Phone" />
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<var:foreach list="contactInfos" item="currentContact">
|
<var:foreach list="contactInfos" item="currentContact">
|
||||||
<tr class="tableview"
|
<tr class="tableview"
|
||||||
|
@ -48,12 +34,12 @@
|
||||||
onclick="return onContactRowClick(event, this);"
|
onclick="return onContactRowClick(event, this);"
|
||||||
ondblclick="return onContactRowDblClick(event, this);"
|
ondblclick="return onContactRowDblClick(event, this);"
|
||||||
oncontextmenu="return onContactContextMenu(event, this);">
|
oncontextmenu="return onContactContextMenu(event, this);">
|
||||||
<td onmousedown="return false;"><img rsrc:src="abcard.gif"
|
<td><img rsrc:src="abcard.gif"
|
||||||
/><var:string value="displayName" const:escapeHTML="YES" /></td>
|
/><var:string value="displayName" const:escapeHTML="YES" /></td>
|
||||||
<td onmousedown="return false;"><var:string value="currentContact.mail"/></td>
|
<td><var:string value="currentContact.mail"/></td>
|
||||||
<td onmousedown="return false;"><var:string value="currentContact.screenname"/></td>
|
<td><var:string value="currentContact.screenname"/></td>
|
||||||
<td onmousedown="return false;"><var:string value="currentContact.o"/></td>
|
<td><var:string value="currentContact.o"/></td>
|
||||||
<td onmousedown="return false;"><var:string value="currentContact.telephonenumber"/></td>
|
<td><var:string value="currentContact.telephonenumber"/></td>
|
||||||
</tr>
|
</tr>
|
||||||
</var:foreach>
|
</var:foreach>
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|
|
@ -179,8 +179,8 @@ TABLE#contactsList TD
|
||||||
{ white-space: nowrap;
|
{ white-space: nowrap;
|
||||||
width: 20%; }
|
width: 20%; }
|
||||||
|
|
||||||
TABLE#contactsList TD.headerName,
|
TD#nameHeader,
|
||||||
TABLE#contactsList TD.headerEmail
|
TD#mailHeader
|
||||||
{ width: 30%; }
|
{ width: 30%; }
|
||||||
|
|
||||||
TABLE#contactsList TD IMG
|
TABLE#contactsList TD IMG
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* JavaScript for SOGoContacts */
|
/* JavaScript for SOGoContacts */
|
||||||
|
|
||||||
var cachedContacts = new Array();
|
var cachedContacts = new Array();
|
||||||
var currentContactFolder = '/personal';
|
var currentContactFolder = null;
|
||||||
|
|
||||||
var usersRightsWindowHeight = 200;
|
var usersRightsWindowHeight = 200;
|
||||||
var usersRightsWindowWidth = 450;
|
var usersRightsWindowWidth = 450;
|
||||||
|
@ -30,8 +30,22 @@ function validateEditorInput(sender) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function openContactsFolder(contactsFolder, params) {
|
function openContactsFolder(contactsFolder, reload, idx) {
|
||||||
if (contactsFolder != currentContactFolder || params) {
|
if (contactsFolder != currentContactFolder || reload) {
|
||||||
|
currentContactFolder = contactsFolder;
|
||||||
|
var url = URLForFolderID(currentContactFolder) +
|
||||||
|
"/view?noframe=1";
|
||||||
|
|
||||||
|
var searchValue = search["value"];
|
||||||
|
if (searchValue && searchValue.length > 0)
|
||||||
|
url += ("&search=" + search["criteria"]
|
||||||
|
+ "&value=" + searchValue);
|
||||||
|
var sortAttribute = sorting["attribute"];
|
||||||
|
if (sortAttribute && sortAttribute.length > 0)
|
||||||
|
url += ("&sort=" + sorting["attribute"]
|
||||||
|
+ "&asc=" + sorting["ascending"]);
|
||||||
|
|
||||||
|
var selection;
|
||||||
if (contactsFolder == currentContactFolder) {
|
if (contactsFolder == currentContactFolder) {
|
||||||
var contactsList = $("contactsList");
|
var contactsList = $("contactsList");
|
||||||
if (contactsList)
|
if (contactsList)
|
||||||
|
@ -42,13 +56,6 @@ function openContactsFolder(contactsFolder, params) {
|
||||||
else
|
else
|
||||||
selection = null;
|
selection = null;
|
||||||
|
|
||||||
currentContactFolder = contactsFolder;
|
|
||||||
var url = URLForFolderID(currentContactFolder) +
|
|
||||||
"/view?noframe=1&sort=cn&desc=0";
|
|
||||||
if (params)
|
|
||||||
url += '&' + params;
|
|
||||||
|
|
||||||
var selection;
|
|
||||||
if (document.contactsListAjaxRequest) {
|
if (document.contactsListAjaxRequest) {
|
||||||
document.contactsListAjaxRequest.aborted = true;
|
document.contactsListAjaxRequest.aborted = true;
|
||||||
document.contactsListAjaxRequest.abort();
|
document.contactsListAjaxRequest.abort();
|
||||||
|
@ -70,6 +77,15 @@ function openContactsFolderAtIndex(element) {
|
||||||
= triggerAjaxRequest(url, contactsListCallback);
|
= triggerAjaxRequest(url, contactsListCallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function configureContactsListHeaders(cells) {
|
||||||
|
for (var i = 0; i < cells.length; i++) {
|
||||||
|
var currentCell = $(cells[i]);
|
||||||
|
Event.observe(currentCell, "click",
|
||||||
|
onHeaderClick.bindAsEventListener(currentCell));
|
||||||
|
Event.observe(currentCell, "mousedown", listRowMouseDownHandler);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function contactsListCallback(http) {
|
function contactsListCallback(http) {
|
||||||
var div = $("contactsListContent");
|
var div = $("contactsListContent");
|
||||||
|
|
||||||
|
@ -77,12 +93,44 @@ function contactsListCallback(http) {
|
||||||
&& http.status == 200) {
|
&& http.status == 200) {
|
||||||
document.contactsListAjaxRequest = null;
|
document.contactsListAjaxRequest = null;
|
||||||
div.innerHTML = http.responseText;
|
div.innerHTML = http.responseText;
|
||||||
|
|
||||||
|
var table = $("contactsList");
|
||||||
|
if (table)
|
||||||
|
configureContactsListHeaders(table.tBodies[0].rows[0].cells);
|
||||||
|
|
||||||
|
if (sorting["attribute"] && sorting["attribute"].length > 0) {
|
||||||
|
var sortHeader;
|
||||||
|
if (sorting["attribute"] == "cn")
|
||||||
|
sortHeader = $("nameHeader");
|
||||||
|
else if (sorting["attribute"] == "mail")
|
||||||
|
sortHeader = $("mailHeader");
|
||||||
|
else if (sorting["attribute"] == "screenname")
|
||||||
|
sortHeader = $("screenNameHeader");
|
||||||
|
else if (sorting["attribute"] == "o")
|
||||||
|
sortHeader = $("orgHeader");
|
||||||
|
else if (sorting["attribute"] == "telephonenumber")
|
||||||
|
sortHeader = $("phoneHeader");
|
||||||
|
else
|
||||||
|
sortHeader = null;
|
||||||
|
|
||||||
|
if (sortHeader) {
|
||||||
|
var sortImage = createElement("img", "messageSortImage", "sortImage");
|
||||||
|
sortHeader.insertBefore(sortImage, sortHeader.firstChild);
|
||||||
|
if (sorting["ascending"])
|
||||||
|
sortImage.src = ResourcesURL + "/title_sortdown_12x12.png";
|
||||||
|
else
|
||||||
|
sortImage.src = ResourcesURL + "/title_sortup_12x12.png";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var selected = http.callbackData;
|
var selected = http.callbackData;
|
||||||
if (selected) {
|
if (selected) {
|
||||||
for (var i = 0; i < selected.length; i++)
|
for (var i = 0; i < selected.length; i++) {
|
||||||
$(selected[i]).select();
|
var row = $(selected[i]);
|
||||||
|
if (row)
|
||||||
|
row.select();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
configureSortableTableHeaders();
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
log ("ajax problem 1");
|
log ("ajax problem 1");
|
||||||
|
@ -332,19 +380,31 @@ function newEmailTo(sender) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function onHeaderClick(event) {
|
function onHeaderClick(event) {
|
||||||
if (document.contactsListAjaxRequest) {
|
var headerId = this.getAttribute("id");
|
||||||
document.contactsListAjaxRequest.aborted = true;
|
var newSortAttribute;
|
||||||
document.contactsListAjaxRequest.abort();
|
if (headerId == "nameHeader")
|
||||||
}
|
newSortAttribute = "cn";
|
||||||
url = URLForFolderID(currentContactFolder);
|
else if (headerId == "mailHeader")
|
||||||
// // log("url: " + url);
|
newSortAttribute = "mail";
|
||||||
// var url = "" + this.href;
|
else if (headerId == "screenNameHeader")
|
||||||
if (url.indexOf("noframe=", 0) == -1)
|
newSortAttribute = "screenname";
|
||||||
url += "&noframe=1";
|
else if (headerId == "orgHeader")
|
||||||
document.contactsListAjaxRequest
|
newSortAttribute = "o";
|
||||||
= triggerAjaxRequest(url, contactsListCallback);
|
else if (headerId == "phoneHeader")
|
||||||
|
newSortAttribute = "telephonenumber";
|
||||||
|
|
||||||
event.preventDefault();
|
log("header: " + headerId);
|
||||||
|
|
||||||
|
if (sorting["attribute"] == newSortAttribute)
|
||||||
|
sorting["ascending"] = !sorting["ascending"];
|
||||||
|
else {
|
||||||
|
sorting["attribute"] = newSortAttribute;
|
||||||
|
sorting["ascending"] = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
refreshCurrentFolder();
|
||||||
|
|
||||||
|
preventDefault(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
function registerDraggableMessageNodes() {
|
function registerDraggableMessageNodes() {
|
||||||
|
@ -367,17 +427,17 @@ function onFolderSelectionChange() {
|
||||||
var div = $("contactsListContent");
|
var div = $("contactsListContent");
|
||||||
div.innerHTML = "";
|
div.innerHTML = "";
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
openContactsFolder(nodes[0].getAttribute("id"), null);
|
search = {};
|
||||||
|
sorting = {};
|
||||||
|
$("searchValue").value = "";
|
||||||
|
initCriteria();
|
||||||
|
openContactsFolder(nodes[0].getAttribute("id"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function onSearchFormSubmit() {
|
function refreshCurrentFolder() {
|
||||||
var searchValue = $("searchValue");
|
openContactsFolder(currentContactFolder, true);
|
||||||
|
|
||||||
openContactsFolder(currentContactFolder,
|
|
||||||
"search=" + searchValue.value);
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function onConfirmContactSelection(event) {
|
function onConfirmContactSelection(event) {
|
||||||
|
@ -409,7 +469,7 @@ function onConfirmContactSelection(event) {
|
||||||
&& selectorList.value != initialValues)
|
&& selectorList.value != initialValues)
|
||||||
selector.changeNotification("addition");
|
selector.changeNotification("addition");
|
||||||
|
|
||||||
event.preventDefault();
|
preventDefault(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
function onContactMailTo(node) {
|
function onContactMailTo(node) {
|
||||||
|
@ -417,7 +477,7 @@ function onContactMailTo(node) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function refreshContacts(contactId) {
|
function refreshContacts(contactId) {
|
||||||
openContactsFolder(currentContactFolder, "reload=true");
|
refreshCurrentFolder();
|
||||||
cachedContacts[currentContactFolder + "/" + contactId] = null;
|
cachedContacts[currentContactFolder + "/" + contactId] = null;
|
||||||
loadContact(contactId);
|
loadContact(contactId);
|
||||||
|
|
||||||
|
@ -465,7 +525,7 @@ function newUserFolderCallback(folderData) {
|
||||||
function onAddressBookAdd(event) {
|
function onAddressBookAdd(event) {
|
||||||
openUserFolderSelector(newUserFolderCallback, "contact");
|
openUserFolderSelector(newUserFolderCallback, "contact");
|
||||||
|
|
||||||
event.preventDefault();
|
preventDefault(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
function onFolderUnsubscribeCB(folderId) {
|
function onFolderUnsubscribeCB(folderId) {
|
||||||
|
@ -494,7 +554,7 @@ function onAddressBookRemove(event) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
event.preventDefault();
|
preventDefault(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
function deletePersonalAddressBook(folderId) {
|
function deletePersonalAddressBook(folderId) {
|
||||||
|
@ -594,13 +654,15 @@ function configureContactFolders() {
|
||||||
|
|
||||||
var personalFolder = $("/personal");
|
var personalFolder = $("/personal");
|
||||||
personalFolder.select();
|
personalFolder.select();
|
||||||
|
openContactsFolder("/personal");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function setEventsOnContactFolder(node) {
|
function setEventsOnContactFolder(node) {
|
||||||
Event.observe(node, "mousedown", listRowMouseDownHandler, false);
|
Event.observe(node, "mousedown", listRowMouseDownHandler, false);
|
||||||
Event.observe(node, "click", onRowClick, false);
|
Event.observe(node, "click", onRowClick, false);
|
||||||
Event.observe(node, "contextmenu", onContactFoldersContextMenu.bindAsEventListener(node), false);
|
Event.observe(node, "contextmenu",
|
||||||
|
onContactFoldersContextMenu.bindAsEventListener(node), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
function onMenuSharing(event) {
|
function onMenuSharing(event) {
|
||||||
|
@ -630,7 +692,8 @@ function configureSelectionButtons() {
|
||||||
if (container) {
|
if (container) {
|
||||||
var buttons = container.childNodesWithTag("input");
|
var buttons = container.childNodesWithTag("input");
|
||||||
for (var i = 0; i < buttons.length; i++)
|
for (var i = 0; i < buttons.length; i++)
|
||||||
Event.observe(buttons[i], "click", onConfirmContactSelection.bindAsEventListener(buttons[i]), false);
|
Event.observe(buttons[i], "click",
|
||||||
|
onConfirmContactSelection.bindAsEventListener(buttons[i]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue