Monotone-Parent: 0c24951c6f23e1c5c5c97871b0a535b026ad55e4
Monotone-Revision: a59de74b19da8d53c1a14d3367e1483cf06fb02e

Monotone-Author: flachapelle@inverse.ca
Monotone-Date: 2009-10-02T13:41:49
Monotone-Branch: ca.inverse.sogo
This commit is contained in:
Francis Lachapelle 2009-10-02 13:41:49 +00:00
parent 79e582d9e9
commit d67529eed0

View file

@ -15,93 +15,93 @@ var SOGoAutoCompletionInterface = {
endEditable: null, endEditable: null,
bind: function () { bind: function () {
this.menu = $('contactsMenu'); this.menu = $('contactsMenu');
this.writeAttribute("autocomplete", "off"); this.writeAttribute("autocomplete", "off");
this.observe("keydown", this.onKeydown.bindAsEventListener(this)); this.observe("keydown", this.onKeydown.bindAsEventListener(this));
this.observe("blur", this.onBlur.bindAsEventListener(this)); this.observe("blur", this.onBlur.bindAsEventListener(this));
}, },
onKeydown: function (event) { onKeydown: function (event) {
if (event.ctrlKey || event.metaKey) { if (event.ctrlKey || event.metaKey) {
this.focussed = true; this.focussed = true;
return; return;
} }
if (event.keyCode == Event.KEY_TAB) { if (event.keyCode == Event.KEY_TAB) {
if (this.confirmedValue) if (this.confirmedValue)
this.value = this.confirmedValue; this.value = this.confirmedValue;
else else
this.uid = null; this.uid = null;
if (document.currentPopupMenu) if (document.currentPopupMenu)
hideMenu(document.currentPopupMenu); hideMenu(document.currentPopupMenu);
if (this.endEditable) if (this.endEditable)
this.endEditable (); this.endEditable ();
if (this.onListAdded) if (this.onListAdded)
this.onListAdded (); this.onListAdded ();
} }
else if (event.keyCode == 0 else if (event.keyCode == 0
|| event.keyCode == Event.KEY_BACKSPACE || event.keyCode == Event.KEY_BACKSPACE
|| event.keyCode == 32 // Space || event.keyCode == 32 // Space
|| event.keyCode > 47) { || event.keyCode > 47) {
this.confirmedValue = null; this.confirmedValue = null;
this.selectedIndex = -1; this.selectedIndex = -1;
if (this.delayedSearch) if (this.delayedSearch)
window.clearTimeout(this.delayedSearch); window.clearTimeout(this.delayedSearch);
this.delayedSearch = this.performSearch.delay(this.delay, this); this.delayedSearch = this.performSearch.delay(this.delay, this);
} }
else if (event.keyCode == Event.KEY_RETURN) { else if (event.keyCode == Event.KEY_RETURN) {
preventDefault(event); preventDefault(event);
if (this.confirmedValue) if (this.confirmedValue)
this.value = this.confirmedValue; this.value = this.confirmedValue;
$(this).select(); $(this).select();
if (document.currentPopupMenu) if (document.currentPopupMenu)
hideMenu(document.currentPopupMenu); hideMenu(document.currentPopupMenu);
this.selectedIndex = -1; this.selectedIndex = -1;
if (this.endEditable) if (this.endEditable)
this.endEditable (); this.endEditable ();
if (this.onListAdded) if (this.onListAdded)
this.onListAdded (); this.onListAdded ();
} }
else if (this.menu.getStyle('visibility') == 'visible') { else if (this.menu.getStyle('visibility') == 'visible') {
if (event.keyCode == Event.KEY_UP) { // Up arrow if (event.keyCode == Event.KEY_UP) { // Up arrow
if (this.selectedIndex > 0) { if (this.selectedIndex > 0) {
var contacts = this.menu.select("li"); var contacts = this.menu.select("li");
contacts[this.selectedIndex--].removeClassName("selected"); contacts[this.selectedIndex--].removeClassName("selected");
this.value = contacts[this.selectedIndex].readAttribute("address"); this.value = contacts[this.selectedIndex].readAttribute("address");
this.uid = contacts[this.selectedIndex].uid; this.uid = contacts[this.selectedIndex].uid;
contacts[this.selectedIndex].addClassName("selected"); contacts[this.selectedIndex].addClassName("selected");
var e = contacts[this.selectedIndex]; var e = contacts[this.selectedIndex];
this.writeAttribute("card", e.readAttribute("card")); this.writeAttribute("card", e.readAttribute("card"));
this.writeAttribute("mail", e.readAttribute("mail")); this.writeAttribute("mail", e.readAttribute("mail"));
this.writeAttribute("uname", e.readAttribute("uname")); this.writeAttribute("uname", e.readAttribute("uname"));
this.writeAttribute("container", e.readAttribute("container")); this.writeAttribute("container", e.readAttribute("container"));
} }
} }
else if (event.keyCode == Event.KEY_DOWN) { // Down arrow else if (event.keyCode == Event.KEY_DOWN) { // Down arrow
var contacts = this.menu.select("li"); var contacts = this.menu.select("li");
if (contacts.size() - 1 > this.selectedIndex) { if (contacts.size() - 1 > this.selectedIndex) {
if (this.selectedIndex >= 0) if (this.selectedIndex >= 0)
contacts[this.selectedIndex].removeClassName("selected"); contacts[this.selectedIndex].removeClassName("selected");
this.selectedIndex++; this.selectedIndex++;
this.value = contacts[this.selectedIndex].readAttribute("address"); this.value = contacts[this.selectedIndex].readAttribute("address");
this.uid = contacts[this.selectedIndex].uid; this.uid = contacts[this.selectedIndex].uid;
contacts[this.selectedIndex].addClassName("selected"); contacts[this.selectedIndex].addClassName("selected");
var e = contacts[this.selectedIndex]; var e = contacts[this.selectedIndex];
this.writeAttribute("card", e.readAttribute("card")); this.writeAttribute("card", e.readAttribute("card"));
this.writeAttribute("mail", e.readAttribute("mail")); this.writeAttribute("mail", e.readAttribute("mail"));
this.writeAttribute("uname", e.readAttribute("uname")); this.writeAttribute("uname", e.readAttribute("uname"));
this.writeAttribute("container", e.readAttribute("container")); this.writeAttribute("container", e.readAttribute("container"));
} }
} }
} }
}, },
onBlur: function (event) { onBlur: function (event) {
if (this.delayedSearch) if (this.delayedSearch)
window.clearTimeout(this.delayedSearch); window.clearTimeout(this.delayedSearch);
if (this.confirmedValue) if (this.confirmedValue)
this.value = this.confirmedValue; this.value = this.confirmedValue;
else else
this.uid = null; this.uid = null;
}, },
performSearch: function (input) { performSearch: function (input) {
@ -115,19 +115,19 @@ var SOGoAutoCompletionInterface = {
var urlstr = (UserFolderURL + "Contacts/allContactSearch?search=" var urlstr = (UserFolderURL + "Contacts/allContactSearch?search="
+ encodeURIComponent(input.value)); + encodeURIComponent(input.value));
if (input.baseUrl) if (input.baseUrl)
urlstr = input.baseUrl + encodeURIComponent(input.value); urlstr = input.baseUrl + encodeURIComponent(input.value);
if (input.excludeGroups) if (input.excludeGroups)
urlstr += "&excludeGroups=1"; urlstr += "&excludeGroups=1";
if (input.excludeLists) if (input.excludeLists)
urlstr += "&excludeLists=1"; urlstr += "&excludeLists=1";
if (input.animationParent) if (input.animationParent)
startAnimation(input.animationParent); startAnimation(input.animationParent);
document.contactLookupAjaxRequest = document.contactLookupAjaxRequest =
triggerAjaxRequest(urlstr, input.performSearchCallback.bind(input), input); triggerAjaxRequest(urlstr, input.performSearchCallback.bind(input), input);
} }
else { else {
if (document.currentPopupMenu) if (document.currentPopupMenu)
hideMenu(document.currentPopupMenu); hideMenu(document.currentPopupMenu);
} }
}, },
@ -143,16 +143,16 @@ var SOGoAutoCompletionInterface = {
if (data.contacts.length > 1) { if (data.contacts.length > 1) {
list.select("li").each(function(item) { list.select("li").each(function(item) {
item.stopObserving("mousedown"); item.stopObserving("mousedown");
item.remove(); item.remove();
}); });
// Populate popup menu // Populate popup menu
for (var i = 0; i < data.contacts.length; i++) { for (var i = 0; i < data.contacts.length; i++) {
var contact = data.contacts[i]; var contact = data.contacts[i];
var completeEmail = contact["c_cn"]; var completeEmail = contact["c_cn"];
if (contact["c_mail"]) if (contact["c_mail"])
completeEmail += " <" + contact["c_mail"] + ">"; completeEmail += " <" + contact["c_mail"] + ">";
var node = new Element('li', { 'address': completeEmail }); var node = new Element('li', { 'address': completeEmail });
var matchPosition = completeEmail.toLowerCase().indexOf(data.searchText.toLowerCase()); var matchPosition = completeEmail.toLowerCase().indexOf(data.searchText.toLowerCase());
var matchBefore = completeEmail.substring(0, matchPosition); var matchBefore = completeEmail.substring(0, matchPosition);
@ -173,7 +173,7 @@ var SOGoAutoCompletionInterface = {
node.appendChild(new Element('strong').update(matchText)); node.appendChild(new Element('strong').update(matchText));
node.appendChild(document.createTextNode(matchAfter)); node.appendChild(document.createTextNode(matchAfter));
if (contact["contactInfo"]) if (contact["contactInfo"])
node.appendChild(document.createTextNode(" (" + contact["contactInfo"] + ")")); node.appendChild(document.createTextNode(" (" + contact["contactInfo"] + ")"));
$(node).observe("mousedown", this.onAddressResultClick.bindAsEventListener(this)); $(node).observe("mousedown", this.onAddressResultClick.bindAsEventListener(this));
} }
@ -186,13 +186,13 @@ var SOGoAutoCompletionInterface = {
var nodeHeight = node.getHeight(); var nodeHeight = node.getHeight();
if ((data.contacts.length * nodeHeight) > heightDiff) if ((data.contacts.length * nodeHeight) > heightDiff)
// Limit the size of the popup to the window height, minus 12 pixels // Limit the size of the popup to the window height, minus 12 pixels
height = parseInt(heightDiff/nodeHeight) * nodeHeight - 12 + 'px'; height = parseInt(heightDiff/nodeHeight) * nodeHeight - 12 + 'px';
this.menu.setStyle({ top: top + "px", this.menu.setStyle({ top: top + "px",
left: offset[0] + "px", left: offset[0] + "px",
height: height, height: height,
visibility: "visible" }); visibility: "visible" });
this.menu.scrollTop = 0; this.menu.scrollTop = 0;
document.currentPopupMenu = this.menu; document.currentPopupMenu = this.menu;
@ -201,7 +201,7 @@ var SOGoAutoCompletionInterface = {
} }
else { // Only one result else { // Only one result
if (document.currentPopupMenu) if (document.currentPopupMenu)
hideMenu(document.currentPopupMenu); hideMenu(document.currentPopupMenu);
if (data.contacts.length == 1) { if (data.contacts.length == 1) {
// Single result // Single result
@ -219,10 +219,10 @@ var SOGoAutoCompletionInterface = {
var completeEmail = contact["c_cn"] + " <" + contact["c_mail"] + ">"; var completeEmail = contact["c_cn"] + " <" + contact["c_mail"] + ">";
if (contact["c_cn"].substring(0, input.value.length).toUpperCase() if (contact["c_cn"].substring(0, input.value.length).toUpperCase()
== input.value.toUpperCase()) == input.value.toUpperCase())
input.value = completeEmail; input.value = completeEmail;
else else
// The result matches email address, not user name // The result matches email address, not user name
input.value += ' >> ' + completeEmail; input.value += ' >> ' + completeEmail;
input.confirmedValue = completeEmail; input.confirmedValue = completeEmail;
var end = input.value.length; var end = input.value.length;
@ -234,8 +234,8 @@ var SOGoAutoCompletionInterface = {
} }
} }
else else
if (document.currentPopupMenu) if (document.currentPopupMenu)
hideMenu(document.currentPopupMenu); hideMenu(document.currentPopupMenu);
document.contactLookupAjaxRequest = null; document.contactLookupAjaxRequest = null;
} }
}, },
@ -243,7 +243,7 @@ var SOGoAutoCompletionInterface = {
onAddressResultClick: function(event) { onAddressResultClick: function(event) {
var e = Event.element(event); var e = Event.element(event);
if (e.tagName != 'LI') if (e.tagName != 'LI')
e = e.up('LI'); e = e.up('LI');
if (e) { if (e) {
var card = e.readAttribute("card"); var card = e.readAttribute("card");
this.writeAttribute("card", card); this.writeAttribute("card", card);
@ -259,7 +259,7 @@ var SOGoAutoCompletionInterface = {
this.value = e.readAttribute("address"); this.value = e.readAttribute("address");
this.confirmedValue = this.value; this.confirmedValue = this.value;
if (this.endEditable) if (this.endEditable)
this.endEditable (); this.endEditable ();
} }
} }
}; };