From c7d305e36ff2ca75a729110f911e92e6695b6df8 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Thu, 17 Jun 2010 21:38:12 +0000 Subject: [PATCH] See ChangeLog Monotone-Parent: e273bb34274750526c6120e794b93dbb265681f0 Monotone-Revision: 51ae133015c75bd8a41f4433161a2453843b1e5d Monotone-Author: flachapelle@inverse.ca Monotone-Date: 2010-06-17T21:38:12 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 11 ++++++ UI/WebServerResources/SOGoAutoCompletion.js | 1 + UI/WebServerResources/UIxMailToSelection.js | 40 ++++++++++++++++++--- 3 files changed, 47 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 30f3e7b7e..34f49283a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2010-06-17 Francis Lachapelle + + * UI/WebServerResources/UIxMailToSelection.js + (addressFieldLostFocus): improved intelligence when parsing + recipient. + (expandContactListCallback): we remove the container attribute to + avoid triggering the event autocompletion:changedlist once again. + + * UI/WebServerResources/SOGoAutoCompletion.js (bind): remove the + container attribute for the same reason. + 2010-06-17 Wolfgang Sourdeau * SoObjects/Appointments/SOGoAppointmentFolders.m diff --git a/UI/WebServerResources/SOGoAutoCompletion.js b/UI/WebServerResources/SOGoAutoCompletion.js index 3891d8d19..38c267f0d 100644 --- a/UI/WebServerResources/SOGoAutoCompletion.js +++ b/UI/WebServerResources/SOGoAutoCompletion.js @@ -26,6 +26,7 @@ var SOGoAutoCompletionInterface = { bind: function () { this.menu = $('contactsMenu'); this.writeAttribute("autocomplete", "off"); + this.writeAttribute("container", null); this.observe("keydown", this.onKeydown.bindAsEventListener(this)); this.observe("blur", this.onBlur.bindAsEventListener(this)); }, diff --git a/UI/WebServerResources/UIxMailToSelection.js b/UI/WebServerResources/UIxMailToSelection.js index 2933e3058..20a1a94ac 100644 --- a/UI/WebServerResources/UIxMailToSelection.js +++ b/UI/WebServerResources/UIxMailToSelection.js @@ -104,6 +104,7 @@ function expandContactListCallback (http) { if (data[0][1].length) text = data[0][1] + " <" + data[0][2] + ">"; input.value = text; + input.writeAttribute("container", null); } if (data.length > 1) { for (var i = 1; i < data.length; i++) { @@ -133,11 +134,40 @@ function addressFieldLostFocus(sender) { var addresses = sender.value.split(','); if (addresses.length > 0) { - sender.value = addresses[0].strip(); - for (var i = 1; i < addresses.length; i++) { - var addr = addresses[i].strip(); - if (addr.length > 0) - fancyAddRow(addr, $(sender).up("tr").down("select").value); + var emailRE = /^([\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+\.)*[\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+@((((([a-z0-9]{1}[a-z0-9\-]{0,62}[a-z0-9]{1})|[a-z])\.)+[a-z]{2,6})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)$/i; + + var first = true; + for (var i = 0; i < addresses.length; i++) { + var words = addresses[i].split(' '); + var phrase = new Array(); + for (var j = 0; j < words.length; j++) { + var word = words[j].strip().replace(/<(.+)>/, "$1"); + if (word.length > 0) { + if (emailRE.test(word)) { + phrase.push('<' + word + '>'); + if (first) { + sender.value = phrase.join(' '); + first = false; + } + else + fancyAddRow(phrase.join(' '), $(sender).up("tr").down("select").value); + + phrase = new Array(); + } + else + phrase.push(word); + } + } + if (phrase.length > 0) { + if (first) { + sender.value = phrase.join(' '); + first = false; + } + else + fancyAddRow(phrase.join(' '), $(sender).up("tr").down("select").value); + + phrase = new Array(); + } } } onWindowResize(null);