diff --git a/UI/MailerUI/English.lproj/Localizable.strings b/UI/MailerUI/English.lproj/Localizable.strings
index 3175b293b..0c16e118b 100644
--- a/UI/MailerUI/English.lproj/Localizable.strings
+++ b/UI/MailerUI/English.lproj/Localizable.strings
@@ -250,6 +250,7 @@
"No matches found" = "No matches found";
"results found" = "results found";
"result found" = "result found";
+"Please specify at least one filter" = "Please specify at least one filter";
/* Folder operations */
"Name :" = "Name :";
diff --git a/UI/Templates/MailerUI/UIxMailSearch.wox b/UI/Templates/MailerUI/UIxMailSearch.wox
index 3efd2e543..cb728c681 100644
--- a/UI/Templates/MailerUI/UIxMailSearch.wox
+++ b/UI/Templates/MailerUI/UIxMailSearch.wox
@@ -52,10 +52,10 @@
-
+
diff --git a/UI/WebServerResources/MailerUI.js b/UI/WebServerResources/MailerUI.js
index 77a83a59f..6c94ccbd8 100644
--- a/UI/WebServerResources/MailerUI.js
+++ b/UI/WebServerResources/MailerUI.js
@@ -434,9 +434,10 @@ function onDocumentKeydown(event) {
/* Search mail, call the template and open inside a dialog windoĆ’w */
function onSearchMail(event) {
- if (event.element().disabled == false || event.element().disabled == undefined) {
- event.element().disabled = true;
- event.element().writeAttribute("id", "toolbarSearchButton");
+ var element = Event.findElement(event);
+ if (element.disabled == false || element.disabled == undefined) {
+ element.disabled = true;
+ element.writeAttribute("id", "toolbarSearchButton");
if ($("searchMailView")) {
$("searchMailView").style.display = "block";
$("bgDialogDiv").style.display = "block";
diff --git a/UI/WebServerResources/UIxMailSearch.css b/UI/WebServerResources/UIxMailSearch.css
index 831f9669e..0bf6e49b7 100644
--- a/UI/WebServerResources/UIxMailSearch.css
+++ b/UI/WebServerResources/UIxMailSearch.css
@@ -5,23 +5,25 @@ TABLE#searchMailHeader
{ width: 100%;
margin-bottom: 1em; }
-TABLE#searchFiltersList
+DIV#searchFiltersList
{
border: 1px solid #909090;
padding-top:2px;
border-radius: 3px;
- display:inline-block;
max-height:105px;
height:105px;
- overflow:auto;
+ overflow-y:auto;
+ overflow-x:hidden;
width:100%;
}
DIV#resultsTable
{
border: 1px solid #909090;
+ margin-top:5px;
border-radius: 3px;
overflow-y: auto;
+ width:100%;
}
TD#mailAccountsCell {
@@ -29,14 +31,25 @@ TD#mailAccountsCell {
white-space: nowrap;
}
-.buttonsCell
+TR.filterRow
{
- width:1%;
+ width:100%;
}
-.inputsCell
+TR.filterRow > TD
{
- width:45%;
+ width: 20%;
+ vertical-align:middle;
+}
+
+TR.filterRow > TD.buttonsCell
+{
+ width:7%;
+}
+
+TR.filterRow > TD.inputsCell
+{
+ width:70%;
}
.td_table_1, .td_table_2, .td_table_3, .td_table_4 {
@@ -58,6 +71,7 @@ TD.sortdesc {
}
.td_header {
+ white-space:initial !important;
border-bottom: solid #909090 1px;
border-right: solid #909090 1px;
height:18px;
@@ -88,7 +102,7 @@ TD.sortdesc {
#headerButtons
{
- width:171px;
+ width:175px;
white-space: nowrap;
}
@@ -104,8 +118,14 @@ TD.sortdesc {
DIV#optionsButtons
{
- position:absolute;
- bottom:10px;
+ position:relative;
+ height:22px;
+}
+
+A#deleteButton, A#openButton
+{
+ float:left;
+ margin-top:5px;
}
.button
@@ -131,30 +151,30 @@ DIV#optionsButtons
right:10px;
}
-#imgPosition
+DIV#imgPosition
{ z-index: 1;
position:relative; }
-#listCollapse img
+A#listCollapse > img
{ position: absolute; }
-#listCollapse img.collapse
+A#listCollapse > img.collapse
{ clip: rect(0 18px 18px 0);
top: -9px;
right: -22px; }
-#listCollapse img.collapse:hover
+A#listCollapse > img.collapse:hover
{ clip: rect(0 36px 18px 18px);
top: -9px;
right: -4px; }
-#listCollapse img.rise
+A#listCollapse > img.rise
{ clip: rect(18px 18px 36px 0);
top: -27px;
right:-22px;
}
-#listCollapse img.rise:hover
+A#listCollapse > img.rise:hover
{ clip: rect(18px 36px 36px 18px);
top: -27px;
right:-4px; }
@@ -188,6 +208,11 @@ DIV#optionsButtons
#filterButtons
{
width:40px;
+}
+
+IMG.addFilterButton, IMG.removeFilterButton
+{
+ z-index: 1;
cursor:pointer;
}
diff --git a/UI/WebServerResources/UIxMailSearch.js b/UI/WebServerResources/UIxMailSearch.js
index 490182854..fbd3ffa86 100644
--- a/UI/WebServerResources/UIxMailSearch.js
+++ b/UI/WebServerResources/UIxMailSearch.js
@@ -73,7 +73,8 @@ function onSearchClick() {
$("searchButton").down().innerHTML = _("Stop");
searchMails();
}
- // TODO - give the user a warning or a notice that it needs at least one filter
+ else
+ alert(_("Please specify at least one filter"));
}
else {
stopOngoingSearch = true;
@@ -87,8 +88,8 @@ function searchMails() {
var nbOptions = optionsList.length;
var selectedIndex = optionsList.selectedIndex;
var accountNumber, accountUser, folderPath, folderName;
-
var mailAccountIndex = mailAccounts.indexOf(searchParams.searchLocation);
+
if (mailAccountIndex != -1) {
accountNumber = "/" + mailAccountIndex;
folderName = accountNumber + "/folderINBOX";
@@ -101,7 +102,7 @@ function searchMails() {
accountNumber = "/" + userNames.indexOf(accountUser);
var position = searchLocation.length;
- folderName = accountNumber + "/folder" + searchLocation[1].replace(" ", "_SP_");
+ folderName = accountNumber + "/folder" + searchLocation[1].asCSSIdentifier();
for (i = 2; i < position; i++)
folderName += "/folder" + searchLocation[i];
@@ -126,12 +127,10 @@ function searchMails() {
}
var urlstr = (ApplicationBaseURL + folderName + "/uids");
-
var callbackData = {"folderName" : folderName, "subfolders" : subfolders, "newSearch" : true};
var object = {"filters":searchParams.filters, "sortingAttributes":{"match":searchParams.filterMatching}};
var content = Object.toJSON(object);
document.searchMailsAjaxRequest = triggerAjaxRequest(urlstr, searchMailsCallback, callbackData, content, {"content-type": "application/json"});
-
}
function searchMailsCallback(http) {
@@ -143,44 +142,54 @@ function searchMailsCallback(http) {
if (http.callbackData.newSearch) {
var oldEntries = table.rows;
var count = oldEntries.length - 1;
- for (x = count; x >= 0; x--)
- oldEntries[x].remove();
+ for (var x = count; x >= 0; x--){
+ $(oldEntries[x]).remove();
+ }
+
+
}
-
+
// ["To", "Attachment", "Flagged", "Subject", "From", "Unread", "Priority", "Date", "Size", "rowClasses", "labels", "rowID", "uid"]
if (response.headers.length > 1) {
if ($("noSearchResults"))
$("noSearchResults").remove();
-
- for (i = 1; i < response.headers.length; i++) { // Starts at 1 because the position 0 in the array are the headers of the table
- var row = table.insertRow(i - 1); // This is the reason why row inserting starts at i - 1
+
+ for (var i = 1; i < response.headers.length; i++) { // Starts at 1 because the position 0 in the array are the headers of the table
+ var row = document.createElement("tr");
Element.addClassName(row, "resultsRow");
- row.writeAttribute("uid", response.headers[i][12]);
- row.writeAttribute("folderName", http.callbackData.folderName);
+ row.setAttribute("uid", response.headers[i][12]);
+ row.setAttribute("folderName", http.callbackData.folderName);
- var cell1 = row.insertCell(0);
+ var cell1 = document.createElement("td");
Element.addClassName(cell1, "td_table_1");
cell1.innerHTML = response.headers[i][3];
+ row.appendChild(cell1);
- var cell2 = row.insertCell(1);
+ var cell2 = document.createElement("td");
Element.addClassName(cell2, "td_table_2");
cell2.innerHTML = response.headers[i][4];
+ row.appendChild(cell2);
- var cell3 = row.insertCell(2);
+ var cell3 = document.createElement("td");
Element.addClassName(cell3, "td_table_3");
cell3.innerHTML = response.headers[i][0];
+ row.appendChild(cell3);
- var cell4 = row.insertCell(3);
+ var cell4 = document.createElement("td");
Element.addClassName(cell4, "td_table_4");
cell4.innerHTML = response.headers[i][7];
+ row.appendChild(cell4);
- var cell5 = row.insertCell(4);
+ var cell5 = document.createElement("td");
Element.addClassName(cell5, "td_table_5");
- cell5.writeAttribute("colspan", "2");
+ cell5.setAttribute("colspan", "2");
var folderPath = http.callbackData.folderName.split("/");
var folderLocation = folderPath[folderPath.length - 1]; // get the last element of the array (location)
folderLocation = folderLocation.substr(6); // strip down the prefix folder
cell5.innerHTML = folderLocation;
+ row.appendChild(cell5);
+
+ table.appendChild(row);
}
}
@@ -190,8 +199,8 @@ function searchMailsCallback(http) {
var cell = row.insertCell(0);
var element = document.createElement("span");
- cell.writeAttribute("id", "noSearchResults");
- cell.writeAttribute("colspan", "4");
+ cell.setAttribute("id", "noSearchResults");
+ cell.setAttribute("colspan", "4");
element.innerHTML = _("No matches found");
cell.appendChild(element);
}
@@ -213,7 +222,6 @@ function searchMailsCallback(http) {
else {
onSearchEnd();
}
-
}
}
@@ -249,33 +257,31 @@ function onMatchFilters(event) {
/**** Search mail body ****/
function onAddFilter() {
- var table = $("searchFiltersList").down("tbody");
+ var table = $("searchFiltersList").down("TABLE");
var searchByList = $("searchByList").getElementsByTagName("li");
var stringArgumentsList = $("stringArgumentsList").getElementsByTagName("li");
-
+
var rowCount = table.rows.length;
var row = table.insertRow(rowCount);
Element.addClassName(row, "filterRow");
-
+
var cell1 = row.insertCell(0);
var element1 = document.createElement("select");
Element.addClassName(element1, "searchByList");
- element1.writeAttribute("id", "searchByListRow" + rowCount);
- for (i = 0; i < searchByList.length; i++) {
+ element1.setAttribute("id", "searchByListRow" + rowCount);
+ for (var i = 0; i < searchByList.length; i++) {
var option = document.createElement("option");
- option.writeAttribute("value", i);
option.innerHTML = searchByList[i].innerHTML;
element1.appendChild(option);
}
cell1.appendChild(element1);
-
+
var cell2 = row.insertCell(1);
var element2 = document.createElement("select");
Element.addClassName(element2, "searchArgumentsList");
- element2.writeAttribute("id", "searchArgumentsListRow" + rowCount);
- for (i = 0; i < stringArgumentsList.length; i++) {
+ element2.setAttribute("id", "searchArgumentsListRow" + rowCount);
+ for (var i = 0; i < stringArgumentsList.length; i++) {
var option = document.createElement("option");
- option.writeAttribute("value", i);
option.innerHTML = stringArgumentsList[i].innerHTML;
element2.appendChild(option);
}
@@ -285,10 +291,9 @@ function onAddFilter() {
Element.addClassName(cell3, "inputsCell");
var element3 = document.createElement("input");
Element.addClassName(element3, "searchInput");
- element3.writeAttribute("type", "text");
- element3.writeAttribute("name", "searchInput");
- element3.writeAttribute("value", "");
- element3.writeAttribute("id", "searchInputRow" + rowCount);
+ element3.setAttribute("type", "text");
+ element3.setAttribute("name", "searchInput");
+ element3.setAttribute("id", "searchInputRow" + rowCount);
cell3.appendChild(element3);
var cell4 = row.insertCell(3);
@@ -297,33 +302,32 @@ function onAddFilter() {
var buttonsDiv = document.createElement("div");
var imageAddFilter = document.createElement("img");
var imageRemoveFilter = document.createElement("img");
- imageAddFilter.writeAttribute("src", "/SOGo.woa/WebServerResources/add-icon.png");
- imageRemoveFilter.writeAttribute("src", "/SOGo.woa/WebServerResources/remove-icon.png");
+ imageAddFilter.setAttribute("src", "/SOGo.woa/WebServerResources/add-icon.png");
+ imageRemoveFilter.setAttribute("src", "/SOGo.woa/WebServerResources/remove-icon.png");
Element.addClassName(imageAddFilter, "addFilterButton");
Element.addClassName(imageAddFilter, "glow");
Element.addClassName(imageRemoveFilter, "removeFilterButton");
Element.addClassName(imageRemoveFilter, "glow");
- imageAddFilter.writeAttribute("name", "addFilter");
- imageAddFilter.writeAttribute("id", "addFilterButtonRow" + rowCount);
- imageAddFilter.writeAttribute("onclick", "onAddFilter(this)");
- imageRemoveFilter.writeAttribute("name", "removeFilter");
- imageRemoveFilter.writeAttribute("id", "removeFilterButtonRow" + rowCount);
- imageRemoveFilter.writeAttribute("onclick", "onRemoveFilter(this)");
- buttonsDiv.writeAttribute("id", "filterButtons");
+ imageAddFilter.setAttribute("name", "addFilter");
+ imageAddFilter.setAttribute("id", "addFilterButtonRow" + rowCount);
+ $(imageAddFilter).on("click", onAddFilter);
+ imageRemoveFilter.setAttribute("name", "removeFilter");
+ imageRemoveFilter.setAttribute("id", "removeFilterButtonRow" + rowCount);
+ $(imageRemoveFilter).on("click", onRemoveFilter);
+ buttonsDiv.setAttribute("id", "filterButtons");
buttonsDiv.appendChild(imageAddFilter);
buttonsDiv.appendChild(imageRemoveFilter);
cell4.appendChild(buttonsDiv);
-
}
-function onRemoveFilter(event) {
- var rows = $("searchFiltersList").down("tbody").getElementsByTagName("tr");
- var currentRow = event.up(".filterRow");
+function onRemoveFilter() {
+ var rows = $("searchFiltersList").getElementsByTagName("tr");
+ var currentRow = this.up(".filterRow");
if(rows.length > 1)
- currentRow.remove();
+ $(currentRow).remove();
}
/**** Search mail Footer ****/
@@ -358,23 +362,23 @@ function onOpenClick(event) {
}
function onDeleteClick(event) {
- var messageList = $("resultsTable");
- var row = messageList.getSelectedRows()[0];
+ var messageList = $("resultsTable").down("TABLE");
+ var row = $(messageList).getSelectedRows()[0];
if (row) {
- var rowIds = messageList.getSelectedRows()[0].getAttribute("uid");
+ var rowIds = row.getAttribute("uid");
var uids = new Array(); // message IDs
var paths = new Array(); // row IDs
var unseenCount = 0;
var refreshFolder = false;
-
- if (rowIds && rowIds.length > 0) {
+ if (rowIds) {
messageList.deselectAll();
if (unseenCount < 1) {
- row.remove();
if (row.hasClassName("mailer_unreadmail"))
unseenCount--;
else
unseenCount = 1;
+
+ $(row).remove();
}
var uid = rowIds;
var path = Mailer.currentMailbox + "/" + uid;
@@ -387,7 +391,6 @@ function onDeleteClick(event) {
if (messageContent) messageContent.innerHTML = '';
Mailer.currentMessages[Mailer.currentMailbox] = null;
}
-
Mailer.dataTable.remove(uid);
updateMessageListCounter(0 - rowIds.length, true);
if (unseenCount < 0) {
@@ -462,13 +465,11 @@ function onResizeClick() {
function adjustResultsTable(state) {
var resultsTable = $("resultsTable");
- var width = $("searchMailView").getWidth() - 22;
var height = $("searchMailView").getHeight();
if (state == "collapse")
- height -= 260;
+ height = height - 266;
else
- height -= 146;
- resultsTable.style.width = width + "px";
+ height = height - 152;
resultsTable.style.height = height + "px";
}
diff --git a/UI/WebServerResources/generic.css b/UI/WebServerResources/generic.css
index 87b96ca47..dfd2aecfb 100644
--- a/UI/WebServerResources/generic.css
+++ b/UI/WebServerResources/generic.css
@@ -662,7 +662,7 @@ DIV.dialog.searchMail {
position: relative;
padding: 0px;
opacity: 1;
- width: 60%;
+ width: 75%;
height: 75%;
margin: 2em auto;
}
diff --git a/UI/WebServerResources/iefixes.css b/UI/WebServerResources/iefixes.css
index aaf871494..be993817a 100644
--- a/UI/WebServerResources/iefixes.css
+++ b/UI/WebServerResources/iefixes.css
@@ -54,9 +54,6 @@ DIV.colorBox
IMG.dragMessage
{ filter: alpha(opacity=70); }
-TABLE.messageList TD
-{ white-space: pre; }
-
TABLE.messageList TR._selected TD
{ border-right: 1px solid #9ABCD8 !important; }