summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorthomascube <thomas@roundcube.net>2006-07-25 22:11:50 +0000
committerthomascube <thomas@roundcube.net>2006-07-25 22:11:50 +0000
commit24053e0d308d6c80149b812cda8774ed3d6ed71d (patch)
tree9dbd832a2e57bbd4083e6d7ebb62b7bb74bed07d
parentf0f98fb108885aca3c29f759128040ef9e015e68 (diff)
Several bugfixes and improvements. See CHANGELOG for details
-rw-r--r--CHANGELOG13
-rw-r--r--program/js/app.js322
-rw-r--r--program/lib/imap.inc19
-rw-r--r--program/localization/de_CH/labels.inc2
-rw-r--r--program/localization/de_CH/messages.inc2
-rw-r--r--program/localization/de_DE/labels.inc2
-rw-r--r--program/localization/de_DE/messages.inc2
-rw-r--r--program/localization/en_US/labels.inc2
-rw-r--r--program/localization/es/labels.inc66
-rw-r--r--program/localization/es/messages.inc24
-rw-r--r--program/steps/mail/func.inc3
-rw-r--r--program/steps/settings/manage_folders.inc54
-rw-r--r--skins/default/addresses.css2
-rw-r--r--skins/default/images/icons/edit.pngbin0 -> 717 bytes
-rw-r--r--skins/default/settings.css32
-rw-r--r--skins/default/templates/managefolders.html16
16 files changed, 403 insertions, 158 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 28a098686..4d3bfa533 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,19 @@
CHANGELOG RoundCube Webmail
---------------------------
+2006/07/25 (thomasb)
+----------
+- Made folder renaming a bit more ajax-style
+- Changed rename-labels and German translation
+- Fixed addressbox countbar width (Bug #1483845)
+- Fixed refresh interval problems in Safari (Bug #1483902)
+- Fixed clear_message_list_header() errors (Bug #1483898)
+- Sanity check of $message_set in imap.inc (Bug #1443200)
+- Added correct changing of message list headers for Sent folder
+- Updated Spanish localization (Ticket #1483887)
+- Applied patch #1483846
+
+
2006/07/24 (richs)
----------
- Draft window no longer reloads. It saves to an iframe in the background instead (fixes bug #1483869)
diff --git a/program/js/app.js b/program/js/app.js
index a5ae90d05..47545e240 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -13,6 +13,7 @@
$Id$
*/
+
// Constants
var CONTROL_KEY = 1;
var SHIFT_KEY = 2;
@@ -247,6 +248,9 @@ function rcube_webmail()
document.onmousedown = function(){ return rcube_webmail_client.reset_click(); };
document.onkeydown = function(e){ return rcube_webmail_client.key_pressed(e, msg_list_frame); };
+ // set default keep alive interval
+ if (!this.keep_alive_interval)
+ this.keep_alive_interval = this._interval;
// flag object as complete
this.loaded = true;
@@ -256,23 +260,27 @@ function rcube_webmail()
this.display_message(this.pending_message[0], this.pending_message[1]);
// start interval for keep-alive/recent_check signal
- if (this._interval && this.task=='mail' && this.gui_objects.messagelist)
+ if (this.keep_alive_interval && this.task=='mail' && this.gui_objects.messagelist)
this._int = setInterval(this.ref+'.check_for_recent()', this.keep_alive_interval);
else if (this.task!='login')
this._int = setInterval(this.ref+'.send_keep_alive()', this.keep_alive_interval);
};
// reset last clicked if user clicks on anything other than the message table
- this.reset_click = function() {
+ this.reset_click = function()
+ {
+ var id;
this.in_message_list = false;
- for (var n=0; n<this.selection.length; n++) {
+ for (var n=0; n<this.selection.length; n++)
+ {
id = this.selection[n];
- if (this.list_rows[id].obj) {
+ if (this.list_rows[id] && this.list_rows[id].obj)
+ {
this.set_classname(this.list_rows[id].obj, 'selected', false);
this.set_classname(this.list_rows[id].obj, 'unfocused', true);
- }
- }
- };
+ }
+ }
+ };
this.click_on_list = function(e)
{
@@ -619,9 +627,10 @@ function rcube_webmail()
if (this.env.search_request<0 || (this.env.search_request && props != this.env.mailbox))
this.reset_qsearch();
- // Reset message list header, unless returning from compose/read/etc
- if (this.env.mailbox != props && this.message_rows)
- this.clear_message_list_header();
+ // Reset message list header, unless returning from compose/read/etc
+ // don't know what this is good for (thomasb, 2006/07/25)
+ //if (this.env.mailbox != props && this.message_rows)
+ // this.clear_message_list_header();
this.list_mailbox(props);
}
@@ -645,7 +654,7 @@ function rcube_webmail()
else
sort_order = this.env.sort_order;
}
-
+
if (this.env.sort_col==sort_col && this.env.sort_order==sort_order)
break;
@@ -1406,7 +1415,9 @@ function rcube_webmail()
}
}
}
- if (this.last_selected != 0) { this.set_classname(this.list_rows[this.last_selected].obj, 'focused', false);}
+ if (this.last_selected != 0 && this.list_rows[this.last_selected])
+ this.set_classname(this.list_rows[this.last_selected].obj, 'focused', false);
+
this.last_selected = id;
this.set_classname(this.list_rows[id].obj, 'focused', true);
};
@@ -1596,19 +1607,25 @@ function rcube_webmail()
};
+
this.clear_message_list_header = function()
{
- var table = this.gui_objects.messagelist;
-
- var colgroup = document.createElement('COLGROUP');
- table.removeChild(table.colgroup);
- table.insertBefore(colgroup, table.thead);
+ var table;
+ if (table = this.gui_objects.messagelist)
+ {
+ if (table.colgroup)
+ table.removeChild(table.colgroup);
+ if (table.tHead)
+ table.removeChild(table.tHead);
- var thead = document.createElement('THEAD');
- table.removeChild(table.thead);
- table.insertBefore(thead, table.tBodies[0]);
+ var colgroup = document.createElement('COLGROUP');
+ var thead = document.createElement('THEAD');
+ table.insertBefore(colgroup, table.tBodies[0]);
+ table.insertBefore(thead, table.tBodies[0]);
+ }
};
+
this.expunge_mailbox = function(mbox)
{
var lock = false;
@@ -2640,8 +2657,12 @@ function rcube_webmail()
};
+ // tell server to create and subscribe a new mailbox
this.create_folder = function(name)
{
+ if (this.edit_folder)
+ this.reset_folder_rename();
+
var form;
if ((form = this.gui_objects.editform) && form.elements['_folder_name'])
name = form.elements['_folder_name'].value;
@@ -2652,37 +2673,192 @@ function rcube_webmail()
form.elements['_folder_name'].focus();
};
+
+ // entry point for folder renaming
this.rename_folder = function(props)
{
- var form;
- if ((form = this.gui_objects.editform) && form.elements['_folder_oldname'] && form.elements['_folder_newname'])
- {
+ var form, oldname, newname;
+
+ // rename a specific mailbox
+ if (props)
+ this.edit_foldername(props);
+
+ // use a dropdown and input field (old behavior)
+ else if ((form = this.gui_objects.editform) && form.elements['_folder_oldname'] && form.elements['_folder_newname'])
+ {
oldname = form.elements['_folder_oldname'].value;
newname = form.elements['_folder_newname'].value;
}
if (oldname && newname)
this.http_request('rename-folder', '_folder_oldname='+escape(oldname)+'&_folder_newname='+escape(newname));
+ };
+
+
+ // start editing the mailbox name.
+ // this will replace the name string with an input field
+ this.edit_foldername = function(folder)
+ {
+ var temp, row, form;
+ var id = this.get_folder_row_id(folder);
+ // reset current renaming
+ if (temp = this.edit_folder)
+ {
+ this.reset_folder_rename();
+ if (temp == id)
+ return;
+ }
+
+ if (id && (row = document.getElementById(id)))
+ {
+ this.name_input = document.createElement('INPUT');
+ this.name_input.value = this.env.subscriptionrows[id];
+ this.name_input.style.width = '100%';
+ this.name_input.onkeypress = function(e){ rcmail.name_input_keypress(e); };
+
+ row.cells[0].replaceChild(this.name_input, row.cells[0].firstChild);
+ this.edit_folder = id;
+ this.name_input.select();
+
+ if (form = this.gui_objects.editform)
+ form.onsubmit = function(){ return false; };
+ }
+ };
+
+
+ // remove the input field and write the current mailbox name to the table cell
+ this.reset_folder_rename = function()
+ {
+ var cell = this.name_input ? this.name_input.parentNode : null;
+ if (cell && this.edit_folder)
+ cell.innerHTML = this.env.subscriptionrows[this.edit_folder];
+
+ this.edit_folder = null;
};
+ // handler for keyboard events on the input field
+ this.name_input_keypress = function(e)
+ {
+ var key = document.all ? event.keyCode : document.getElementById ? e.keyCode : 0;
+
+ // enter
+ if (key==13)
+ {
+ var newname = this.name_input ? this.name_input.value : null;
+ if (this.edit_folder && newname)
+ this.http_request('rename-folder', '_folder_oldname='+escape(this.env.subscriptionrows[this.edit_folder])+'&_folder_newname='+escape(newname));
+ }
+ // escape
+ else if (key==27)
+ this.reset_folder_rename();
+ };
+
+
+ // delete a specific mailbox with all its messages
this.delete_folder = function(folder)
{
+ if (this.edit_folder)
+ this.reset_folder_rename();
+
if (folder)
- {
this.http_request('delete-folder', '_mboxes='+escape(folder));
- }
};
- this.remove_folder_row = function(folder)
+ // add a new folder to the subscription list by cloning a folder row
+ this.add_folder_row = function(name, replace)
{
- for (var id in this.env.subscriptionrows)
- if (this.env.subscriptionrows[id]==folder)
+ name = name.replace('\\',"");
+ if (!this.gui_objects.subscriptionlist)
+ return false;
+
+ for (var refid in this.env.subscriptionrows)
+ if (this.env.subscriptionrows[refid]!=null)
break;
+ var refrow, form;
+ var tbody = this.gui_objects.subscriptionlist.tBodies[0];
+ var id = replace && replace.id ? replace.id : tbody.childNodes.length+1;
+
+ if (!id || !(refrow = document.getElementById(refid)))
+ {
+ // Refresh page if we don't have a table row to clone
+ location.href = this.env.comm_path+'&_action=folders';
+ }
+ else
+ {
+ // clone a table row if there are existing rows
+ var row = this.clone_table_row(refrow);
+ row.id = 'rcmrow'+id;
+ if (replace)
+ tbody.replaceChild(row, replace);
+ else
+ tbody.appendChild(row);
+ }
+
+ // add to folder/row-ID map
+ this.env.subscriptionrows[row.id] = name;
+
+ // set folder name
+ row.cells[0].innerHTML = name;
+ if (row.cells[1] && row.cells[1].firstChild.tagName=='INPUT')
+ {
+ row.cells[1].firstChild.value = name;
+ row.cells[1].firstChild.checked = true;
+ }
+
+ if (row.cells[2] && row.cells[2].firstChild.tagName=='A')
+ row.cells[2].firstChild.onclick = new Function(this.ref+".command('rename-folder','"+name.replace('\'','\\\'')+"')");
+ if (row.cells[3] && row.cells[3].firstChild.tagName=='A')
+ row.cells[3].firstChild.onclick = new Function(this.ref+".command('delete-folder','"+name.replace('\'','\\\'')+"')");
+
+ // add new folder to rename-folder list and clear input field
+ if (!replace && (form = this.gui_objects.editform) && form.elements['_folder_name'])
+ {
+ form.elements['_folder_oldname'].options[form.elements['_folder_oldname'].options.length] = new Option(name,name);
+ form.elements['_folder_name'].value = '';
+ }
+
+ };
+
+
+ // replace an existing table row with a new folder line
+ this.replace_folder_row = function(newfolder, oldfolder)
+ {
+ var id = this.get_folder_row_id(oldfolder);
+ var row = document.getElementById(id);
+
+ // replace an existing table row (if found)
+ this.add_folder_row(newfolder, row);
+ this.env.subscriptionrows[id] = null;
+
+ // rename folder in rename-folder dropdown
+ var form, elm;
+ if ((form = this.gui_objects.editform) && (elm = form.elements['_folder_oldname']))
+ {
+ for (var i=0;i<elm.options.length;i++)
+ {
+ if (elm.options[i].value == oldfolder)
+ {
+ elm.options[i].text = newfolder;
+ elm.options[i].value = newfolder;
+ break;
+ }
+ }
+
+ form.elements['_folder_newname'].value = '';
+ }
+ };
+
+
+ // remove the table row of a specific mailbox from the table
+ // (the row will not be removed, just hidden)
+ this.remove_folder_row = function(folder)
+ {
var row;
+ var id = this.get_folder_row_id(folder);
if (id && (row = document.getElementById(id)))
row.style.display = 'none';
@@ -2693,13 +2869,14 @@ function rcube_webmail()
for (var i=0;i<form.elements['_folder_oldname'].options.length;i++)
{
if (form.elements['_folder_oldname'].options[i].value == folder)
- {
+ {
form.elements['_folder_oldname'].options[i] = null;
- break;
+ break;
}
}
}
- form.elements['_folder_newname'].value='';
+
+ form.elements['_folder_newname'].value = '';
};
@@ -2759,52 +2936,15 @@ function rcube_webmail()
};
-
- // add a new folder to the subscription list by cloning a folder row
- this.add_folder_row = function(name)
- {
- name = name.replace('\\',"");
- if (!this.gui_objects.subscriptionlist)
- return false;
-
- var tbody = this.gui_objects.subscriptionlist.tBodies[0];
- var id = tbody.childNodes.length+1;
-
- if (!tbody.rows[0])
- {
- // Refresh to create the first table row
- location.href = this.env.comm_path+'&_action=folders';
- }
- else
- {
- // clone a table row if there are existing rows
- var row = this.clone_table_row(tbody.rows[0]);
- row.id = 'rcmrow'+id;
- tbody.appendChild(row);
- }
-
- // add to folder/row-ID map
- this.env.subscriptionrows[row.id] = name;
-
- // set folder name
- row.cells[0].innerHTML = name;
- if (row.cells[1].firstChild.tagName=='INPUT')
- {
- row.cells[1].firstChild.value = name;
- row.cells[1].firstChild.checked = true;
- }
- if (row.cells[2].firstChild.tagName=='A')
- row.cells[2].firstChild.onclick = new Function(this.ref+".command('delete-folder','"+name.replace('\'','\\\'')+"')");
-
- var form;
- if ((form = this.gui_objects.editform) && form.elements['_folder_name'])
- form.elements['_folder_name'].value = '';
-
- // add new folder to rename-folder list
- form.elements['_folder_oldname'].options[form.elements['_folder_oldname'].options.length] = new Option(name,name);
-
- };
-
+ // helper method to find a specific mailbox row ID
+ this.get_folder_row_id = function(folder)
+ {
+ for (var id in this.env.subscriptionrows)
+ if (this.env.subscriptionrows[id]==folder)
+ break;
+
+ return id;
+ };
// duplicate a specific table row
this.clone_table_row = function(row)
@@ -3033,11 +3173,35 @@ function rcube_webmail()
this.env.mailbox = mbox;
};
+
// for reordering column array, Konqueror workaround
this.set_message_coltypes = function(coltypes)
{
- this.coltypes = coltypes;
- }
+ this.coltypes = coltypes;
+
+ // set correct list titles
+ var cell, col;
+ var thead = this.gui_objects.messagelist ? this.gui_objects.messagelist.tHead : null;
+ for (var n=0; thead && n<this.coltypes.length; n++)
+ {
+ col = this.coltypes[n];
+ if ((cell = thead.rows[0].cells[n+1]) && (col=='from' || col=='to'))
+ {
+ // if we have links for sorting, it's a bit more complicated...
+ if (cell.firstChild && cell.firstChild.tagName=='A')
+ {
+ cell.firstChild.innerHTML = this.get_label(this.coltypes[n]);
+ cell.firstChild.onclick = function(){ return rcmail.command('sort', this.__col, this); };
+ cell.firstChild.__col = col;
+ }
+ else
+ cell.innerHTML = this.get_label(this.coltypes[n]);
+
+ cell.id = 'rcmHead'+col;
+ }
+ }
+
+ };
// create a table row in the message list
this.add_message_row = function(uid, cols, flags, attachment, attop)
diff --git a/program/lib/imap.inc b/program/lib/imap.inc
index 5251f8414..2c07f3409 100644
--- a/program/lib/imap.inc
+++ b/program/lib/imap.inc
@@ -45,6 +45,7 @@
- Added function iil_C_ID2UID()
- Casting date parts in iil_StrToTime() to avoid mktime() warnings
- Also acceppt LIST responses in iil_C_ListSubscribed()
+ - Sanity check of $message_set in iil_C_FetchHeaders(), iil_C_FetchHeaderIndex(), iil_C_FetchThreadHeaders()
- Removed some debuggers (echo ...)
********************************************************/
@@ -676,7 +677,9 @@ function iil_C_FetchHeaderIndex(&$conn, $mailbox, $message_set, $index_field, $n
if (empty($index_field)) $index_field="DATE";
$index_field = strtoupper($index_field);
- if ((empty($message_set)) || ($message_set == "1:0")) return array();
+ list($from_idx, $to_idx) = explode(':', $message_set);
+ if (empty($message_set) || (isset($to_idx) && (int)$from_idx > (int)$to_idx))
+ return false;
//$fields_a["DATE"] = ($IMAP_USE_INTERNAL_DATE?6:1);
$fields_a['DATE'] = 1;
@@ -932,7 +935,9 @@ function iil_C_FetchThreadHeaders(&$conn, $mailbox, $message_set){
global $clock;
global $index_a;
- if (empty($message_set)) return false;
+ list($from_idx, $to_idx) = explode(':', $message_set);
+ if (empty($message_set) || (isset($to_idx) && (int)$from_idx > (int)$to_idx))
+ return false;
$result = array();
$uids = iil_C_FetchUIDs($conn, $mailbox);
@@ -1013,7 +1018,9 @@ function iil_C_FetchThreadHeaders(&$conn, $mailbox, $message_set){
function iil_C_BuildThreads2(&$conn, $mailbox, $message_set, &$clock){
global $index_a;
- if (empty($message_set)) return false;
+ list($from_idx, $to_idx) = explode(':', $message_set);
+ if (empty($message_set) || (isset($to_idx) && (int)$from_idx > (int)$to_idx))
+ return false;
$result=array();
$roots=array();
@@ -1195,8 +1202,10 @@ function iil_C_FetchHeaders(&$conn, $mailbox, $message_set){
$result=array();
$fp = $conn->fp;
- if (empty($message_set)) return array();
-
+ list($from_idx, $to_idx) = explode(':', $message_set);
+ if (empty($message_set) || (isset($to_idx) && (int)$from_idx > (int)$to_idx))
+ return false;
+
/* Do "SELECT" command */
if (!iil_C_Select($conn, $mailbox)){
$conn->error = "Couldn't select $mailbox";
diff --git a/program/localization/de_CH/labels.inc b/program/localization/de_CH/labels.inc
index 2b73ed0b5..d4a467d99 100644
--- a/program/localization/de_CH/labels.inc
+++ b/program/localization/de_CH/labels.inc
@@ -206,6 +206,8 @@ $labels['foldername'] = 'Ordnername';
$labels['subscribed'] = 'Abonniert';
$labels['create'] = 'Erstellen';
$labels['createfolder'] = 'Neuen Ordner erstellen';
+$labels['rename'] = 'Umbenennen';
+$labels['renamefolder'] = 'Ordner umbenennen';
$labels['deletefolder'] = 'Ordner löschen';
$labels['managefolders'] = 'Ordner verwalten';
diff --git a/program/localization/de_CH/messages.inc b/program/localization/de_CH/messages.inc
index 0484b5ded..d3314a9d6 100644
--- a/program/localization/de_CH/messages.inc
+++ b/program/localization/de_CH/messages.inc
@@ -34,7 +34,7 @@ $messages['mailboxempty'] = 'Ordner ist leer';
$messages['loading'] = $messages['loadingdata'] = 'Daten werden geladen...';
-$messages['checkingmail'] = 'Überprüfung auf neue Anzeigen...';
+$messages['checkingmail'] = 'Überprüfung auf neue Nachrichten...';
$messages['sendingmessage'] = 'Nachricht wird gesendet...';
diff --git a/program/localization/de_DE/labels.inc b/program/localization/de_DE/labels.inc
index 1aab071e4..f1cef48d5 100644
--- a/program/localization/de_DE/labels.inc
+++ b/program/localization/de_DE/labels.inc
@@ -207,6 +207,8 @@ $labels['foldername'] = 'Ordnername';
$labels['subscribed'] = 'Abonniert';
$labels['create'] = 'Erstellen';
$labels['createfolder'] = 'Neuen Ordner erstellen';
+$labels['rename'] = 'Umbenennen';
+$labels['renamefolder'] = 'Ordner umbenennen';
$labels['deletefolder'] = 'Ordner löschen';
$labels['managefolders'] = 'Ordner verwalten';
diff --git a/program/localization/de_DE/messages.inc b/program/localization/de_DE/messages.inc
index f084b167b..c6ca701a0 100644
--- a/program/localization/de_DE/messages.inc
+++ b/program/localization/de_DE/messages.inc
@@ -36,7 +36,7 @@ $messages['mailboxempty'] = 'Ordner ist leer';
$messages['loading'] = $messages['loadingdata'] = 'Daten werden geladen...';
-$messages['checkingmail'] = 'Überprüfung auf neue Anzeigen...';
+$messages['checkingmail'] = 'Überprüfung auf neue Nachrichten...';
$messages['sendingmessage'] = 'Nachricht wird gesendet...';
diff --git a/program/localization/en_US/labels.inc b/program/localization/en_US/labels.inc
index 436dacfd0..2170131c2 100644
--- a/program/localization/en_US/labels.inc
+++ b/program/localization/en_US/labels.inc
@@ -210,7 +210,7 @@ $labels['subscribed'] = 'Subscribed';
$labels['create'] = 'Create';
$labels['createfolder'] = 'Create new folder';
$labels['rename'] = 'Rename';
-$labels['renamefolder'] = 'Rename existing folder';
+$labels['renamefolder'] = 'Rename folder';
$labels['deletefolder'] = 'Delete folder';
$labels['managefolders'] = 'Manage folders';
diff --git a/program/localization/es/labels.inc b/program/localization/es/labels.inc
index 3b28244b0..b54302278 100644
--- a/program/localization/es/labels.inc
+++ b/program/localization/es/labels.inc
@@ -16,7 +16,7 @@
| - 6/2/2006 Translations of new features and improvements) |
| - 17/9/2005 First release |
+-----------------------------------------------------------------------+
-
+
$Id$
*/
@@ -24,6 +24,7 @@
$labels = array();
// login page
+$labels['welcome'] = 'Bienvenido a $product';
$labels['username'] = 'Nombre de usuario';
$labels['password'] = 'Contraseña';
$labels['server'] = 'Servidor';
@@ -37,18 +38,17 @@ $labels['addressbook'] = 'Contactos';
// mailbox names
$labels['inbox'] = 'Entrada';
-$labels['drafts'] = 'Bosquejos';
+$labels['drafts'] = 'Borradores';
$labels['sent'] = 'Enviados';
$labels['trash'] = 'Papelera';
-$labels['drafts'] = 'Borradores';
$labels['junk'] = 'Basura';
// message listing
$labels['subject'] = 'Asunto';
$labels['from'] = 'Remitente';
$labels['to'] = 'Destinatario';
-$labels['cc'] = 'CC';
-$labels['bcc'] = 'BCC';
+$labels['cc'] = 'Copia';
+$labels['bcc'] = 'Bcc';
$labels['replyto'] = 'Responder';
$labels['date'] = 'Fecha';
$labels['size'] = 'Tamaño';
@@ -70,17 +70,18 @@ $labels['filesize'] = 'Tamaño del fichero';
$labels['preferhtml'] = 'Prefiero HTML';
$labels['htmlmessage'] = 'Mensaje HTML';
+$labels['prettydate'] = 'Fecha detallada';
$labels['addtoaddressbook'] = 'Añadir a contactos';
// weekdays short
-$labels['sun'] = 'D';
-$labels['mon'] = 'L';
-$labels['tue'] = 'M';
-$labels['wed'] = 'X';
-$labels['thu'] = 'J';
-$labels['fri'] = 'V';
-$labels['sat'] = 'S';
+$labels['sun'] = 'Dom';
+$labels['mon'] = 'Lun';
+$labels['tue'] = 'Mar';
+$labels['wed'] = 'Mie';
+$labels['thu'] = 'Jue';
+$labels['fri'] = 'Vie';
+$labels['sat'] = 'Sáb';
// weekdays long
$labels['sunday'] = 'Domingo';
@@ -94,11 +95,12 @@ $labels['saturday'] = 'Sábado';
$labels['today'] = 'Hoy';
// toolbar buttons
-$labels['checkmail'] = 'Comprobación para saber si hay nuevos mensajes';
+$labels['checkmail'] = 'Revisar si hay nuevos mensajes';
$labels['writenewmessage'] = 'Crear nuevo mensaje';
$labels['replytomessage'] = 'Responder al mensaje';
+$labels['replytoallmessage'] = 'Responder al emisor y a todos los destinatarios';
$labels['forwardmessage'] = 'Reenviar mensaje';
-$labels['deletemessage'] = 'Move message to trash';
+$labels['deletemessage'] = 'Mover mensaje a la papelera';
$labels['printmessage'] = 'Imprimir este mensaje';
$labels['previousmessages'] = 'Mostrar mensajes anteriores';
$labels['nextmessages'] = 'Mostrar mensajes siguientes';
@@ -116,27 +118,35 @@ $labels['empty'] = 'Vaciar';
$labels['purge'] = 'Eliminar';
$labels['quota'] = 'Uso de disco';
+$labels['unknown'] = 'desconocido';
+$labels['unlimited'] = 'sin límite';
+
+$labels['quicksearch'] = 'Búsqueda rápida';
+$labels['resetsearch'] = 'Reajustar la búsqueda';
// message compose
$labels['compose'] = 'Escribir un mensaje';
-$labels['savemessage'] = 'Excepto este bosquejo';
+$labels['savemessage'] = 'Almacenar como borrador';
$labels['sendmessage'] = 'Enviar ahora el mensaje';
$labels['addattachment'] = 'Añadir un fichero';
$labels['charset'] = 'Codigo';
+$labels['returnreceipt'] = 'Recibo de entrega';
+
+$labels['checkspelling'] = 'Revisar la ortografía';
+$labels['resumeediting'] = 'Continuar el editaje';
+$labels['revertto'] = 'Revertir a';
$labels['attachments'] = 'Adjuntos';
$labels['upload'] = 'Subir';
$labels['close'] = 'Cerrar';
-
$labels['low'] = 'Bajo';
$labels['lowest'] = 'Bajísimo';
$labels['normal'] = 'Normal';
$labels['high'] = 'Alto';
$labels['highest'] = 'Altísimo';
-$labels['showimages'] = 'Mostrar imágenes';
$labels['nosubject'] = '(sin asunto)';
$labels['showimages'] = 'Mostrar imágenes';
@@ -148,25 +158,27 @@ $labels['firstname'] = 'Nombre';
$labels['surname'] = 'Apellido';
$labels['email'] = 'E-Mail';
-$labels['addcontact'] = 'Añadir nuevo contacto';
-$labels['editcontact'] = 'Editar contacto';
-
$labels['edit'] = 'Editar';
$labels['cancel'] = 'Cancelar';
-$labels['save'] = 'Salvar';
+$labels['save'] = 'Almacenar';
$labels['delete'] = 'Eliminar';
$labels['newcontact'] = 'Crear nuevo contacto';
+$labels['addcontact'] = 'Añadir nuevo contacto';
+$labels['editcontact'] = 'Editar contacto';
$labels['deletecontact'] = 'Eliminar contactos seleccionados';
$labels['composeto'] = 'Redactar correo a';
$labels['contactsfromto'] = 'Contactos $from a $to de $count';
$labels['print'] = 'Imprimir';
$labels['export'] = 'Exportar';
+$labels['previouspage'] = 'Mostrar grupo anterior';
+$labels['nextpage'] = 'Mostrar grupo siguiente';
+
// LDAP search
$labels['ldapsearch'] = 'Búsqueda en el directorio LDAP';
-$labels['ldappublicsearchname'] = 'Nombre';
+$labels['ldappublicsearchname'] = 'Nombre';
$labels['ldappublicsearchtype'] = '¿Búsqueda exacta?';
$labels['ldappublicserverselect'] = 'Elegir servidores';
$labels['ldappublicsearchfield'] = 'Buscando';
@@ -192,16 +204,17 @@ $labels['setdefault'] = 'Seleccionar opción por defecto';
$labels['language'] = 'Idioma';
$labels['timezone'] = 'Zona horaria';
$labels['pagesize'] = 'Filas por página';
-
$labels['signature'] = 'Firma';
+$labels['dstactive'] = 'Cambio de horario';
$labels['folder'] = 'Carpeta';
-
$labels['folders'] = 'Carpetas';
$labels['foldername'] = 'Nombre de carpeta';
$labels['subscribed'] = 'Suscribirse';
$labels['create'] = 'Crear';
$labels['createfolder'] = 'Crear nueva carpeta';
+$labels['rename'] = 'Renombrar';
+$labels['renamefolder'] = 'Renombrar carpeta';
$labels['deletefolder'] = 'Eliminar carpeta';
$labels['managefolders'] = 'Gestionar carpetas';
@@ -209,7 +222,4 @@ $labels['sortby'] = 'Ordenar por';
$labels['sortasc'] = 'Orden ascendente';
$labels['sortdesc'] = 'Orden descendente';
-$labels['prettydate'] = 'Formato de fecha';
-$labels['replytoallmessage'] = 'Responder al emisor y a todos los destinatarios';
-
-?>
+?> \ No newline at end of file
diff --git a/program/localization/es/messages.inc b/program/localization/es/messages.inc
index 675bc8498..865807d56 100644
--- a/program/localization/es/messages.inc
+++ b/program/localization/es/messages.inc
@@ -17,7 +17,7 @@
| - 17/9/2005 First release |
+-----------------------------------------------------------------------+
-
+
$Id$
*/
@@ -43,17 +43,17 @@ $messages['loading'] = 'Cargando...';
$messages['loadingdata'] = 'Cargando datos...';
-$messages['checkingmail'] = 'Comprobación para saber si hay nuevos mensajes...';
+$messages['checkingmail'] = 'Verificar si hay nuevos mensajes...';
$messages['sendingmessage'] = 'Enviando mensaje...';
$messages['messagesent'] = 'Mensaje enviado correctamente';
-$messages['savingmessage'] = 'Mensaje del ahorro...';
+$messages['savingmessage'] = 'Guardar mensaje...';
-$messages['messagesaved'] = 'Mensaje ahorrado a los bosquejos';
+$messages['messagesaved'] = 'Mensaje guardado en los bosquejos';
-$messages['successfullysaved'] = 'guardado correctamente';
+$messages['successfullysaved'] = 'Guardado correctamente';
$messages['addedsuccessfully'] = 'Contacto añadido correctamente a la libreta de direcciones';
@@ -89,7 +89,7 @@ $messages['nopagesizewarning'] = 'Por favor, introduzca un tamaño de página';
$messages['norecipientwarning'] = 'Por favor, introduzca al menos un destinatario';
-$messages['nosubjectwarning'] = 'El campo "asunto" esta vacio. ¿Desea introducir el campo "asunto" al mensaje?';
+$messages['nosubjectwarning'] = 'El campo "Asunto" esta vacio. ¿Desea redactarlo en este momento?';
$messages['nobodywarning'] = '¿Quiere enviar este mensaje sin texto?';
@@ -101,4 +101,14 @@ $messages['nocontactsreturned'] = 'No se han encontrado contactos';
$messages['nosearchname'] = 'Por favor, introduzca un nombre o la dirección email';
-?>
+$messages['searchsuccessful'] = 'Se encontró $nr mensajes';
+
+$messages['searchnomatch'] = 'La busqueda no obtuvo resultados';
+
+$messages['searching'] = 'Buscando...';
+
+$messages['checking'] = 'Revisando...';
+
+$messages['nospellerrors'] = 'No se encontró errores ortográficos';
+
+?> \ No newline at end of file
diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc
index 376c0bf93..b1d3d8b6b 100644
--- a/program/steps/mail/func.inc
+++ b/program/steps/mail/func.inc
@@ -289,6 +289,9 @@ function rcmail_message_list($attrib)
// check to see if we have some settings for sorting
$sort_col = $_SESSION['sort_col'];
$sort_order = $_SESSION['sort_order'];
+
+ // add some labels to client
+ rcube_add_label('from', 'to');
// get message headers
$a_headers = $IMAP->list_headers('', '', $sort_col, $sort_order);
diff --git a/program/steps/settings/manage_folders.inc b/program/steps/settings/manage_folders.inc
index 7274bdc50..770bac2fd 100644
--- a/program/steps/settings/manage_folders.inc
+++ b/program/steps/settings/manage_folders.inc
@@ -71,13 +71,15 @@ else if ($_action=='rename-folder')
if ($rename && $REMOTE_REQUEST)
{
- $commands = sprintf("this.add_folder_row('%s');\n", addslashes(rep_specialchars_output($rename, 'js')));
- $commands .= sprintf("this.remove_folder_row('%s');", rep_specialchars_output($_GET['_folder_oldname'], 'js'));
+ $commands = sprintf("this.replace_folder_row('%s','%s');",
+ addslashes(rep_specialchars_output($rename, 'js')),
+ rep_specialchars_output($_GET['_folder_oldname'], 'js'));
rcube_remote_response($commands);
}
else if (!$rename && $REMOTE_REQUEST)
{
- $commands = show_message('errorsaving', 'error');
+ $commands = "this.reset_folder_rename();\n";
+ $commands .= show_message('errorsaving', 'error');
rcube_remote_response($commands);
}
else if (!$rename)
@@ -121,7 +123,10 @@ function rcube_subscription_form($attrib)
// add table header
$out .= "<thead><tr>\n";
- $out .= sprintf('<td>%s</td><td>%s</td><td></td>', rcube_label('foldername'), rcube_label('subscribed'));
+ $out .= sprintf('<td class="name">%s</td><td class="subscribed">%s</td>'.
+ '<td class="rename">&nbsp;</td><td class="delete">&nbsp;</td>',
+ rcube_label('foldername'), rcube_label('subscribed'));
+
$out .= "\n</tr></thead>\n<tbody>\n";
@@ -132,31 +137,46 @@ function rcube_subscription_form($attrib)
$checkbox_subscribe = new checkbox(array('name' => '_subscribed[]', 'onclick' => "$JS_OBJECT_NAME.command(this.checked?'subscribe':'unsubscribe',this.value)"));
- if ($attrib['deleteicon'])
- $button = sprintf('<img src="%s%s" alt="%s" border="0" />', $CONFIG['skin_path'], $attrib['deleteicon'], rcube_label('delete'));
+ if (!empty($attrib['deleteicon']))
+ $del_button = sprintf('<img src="%s%s" alt="%s" border="0" />', $CONFIG['skin_path'], $attrib['deleteicon'], rcube_label('delete'));
else
- $button = rcube_label('delete');
+ $del_button = rcube_label('delete');
+ if (!empty($attrib['renameicon']))
+ $edit_button = sprintf('<img src="%s%s" alt="%s" border="0" />', $CONFIG['skin_path'], $attrib['renameicon'], rcube_label('rename'));
+ else
+ $del_button = rcube_label('rename');
// create list of available folders
foreach ($a_unsubscribed as $i => $folder)
{
- if ($CONFIG['protect_default_folders'] == TRUE && in_array($folder,$CONFIG['default_imap_folders']))
- continue;
-
+ $protected = ($CONFIG['protect_default_folders'] == TRUE && in_array($folder,$CONFIG['default_imap_folders']));
$zebra_class = $i%2 ? 'even' : 'odd';
$folder_js = rep_specialchars_output($folder, 'js');
- $a_js_folders['rcmrow'.($i+1)] = $folder_js;
+
+ if (!$protected)
+ $a_js_folders['rcmrow'.($i+1)] = $folder_js;
- $out .= sprintf('<tr id="rcmrow%d" class="%s"><td>%s</td><td>%s</td><td><a href="#delete" onclick="%s.command(\'delete-folder\',\'%s\')" title="%s">%s</a></td>',
+ $out .= sprintf('<tr id="rcmrow%d" class="%s"><td>%s</td><td>%s</td>',
$i+1,
$zebra_class,
rep_specialchars_output(rcube_charset_convert($folder, 'UTF-7', 'UTF-8'), 'html', 'all'),
- $checkbox_subscribe->show(in_array($folder, $a_subscribed)?$folder:'', array('value' => $folder)),
- $JS_OBJECT_NAME,
- $folder_js,
- rcube_label('deletefolder'),
- $button);
+ $checkbox_subscribe->show(in_array($folder, $a_subscribed)?$folder:'', array('value' => $folder, 'disabled' => $protected)));
+
+ // add rename and delete buttons
+ if (!$protected)
+ $out .= sprintf('<td><a href="#rename" onclick="%s.command(\'rename-folder\',\'%s\')" title="%s">%s</a>'.
+ '<td><a href="#delete" onclick="%s.command(\'delete-folder\',\'%s\')" title="%s">%s</a></td>',
+ $JS_OBJECT_NAME,
+ $folder_js,
+ rcube_label('renamefolder'),
+ $edit_button,
+ $JS_OBJECT_NAME,
+ $folder_js,
+ rcube_label('deletefolder'),
+ $del_button);
+ else
+ $out .= '<td></td><td></td>';
$out .= "</tr>\n";
}
diff --git a/skins/default/addresses.css b/skins/default/addresses.css
index a0fb15c8a..5bb6c61d7 100644
--- a/skins/default/addresses.css
+++ b/skins/default/addresses.css
@@ -19,7 +19,7 @@
position: absolute;
top: 60px;
left: 490px;
- width: 200px;
+ width: 240px;
height: 20px;
text-align: left;
}
diff --git a/skins/default/images/icons/edit.png b/skins/default/images/icons/edit.png
new file mode 100644
index 000000000..9b40b5c7b
--- /dev/null
+++ b/skins/default/images/icons/edit.png
Binary files differ
diff --git a/skins/default/settings.css b/skins/default/settings.css
index fe6a5898b..c172576fd 100644
--- a/skins/default/settings.css
+++ b/skins/default/settings.css
@@ -67,6 +67,15 @@ span.tablink-selected a
left: 20px;
}
+#folder-manager
+{
+ width: 500px;
+ bottom: 120px;
+ overflow: auto;
+ border: 1px solid #999999;
+ height: expression((parseInt(document.documentElement.clientHeight)-215)+'px');
+}
+
#identities-table
{
width: 500px;
@@ -101,6 +110,15 @@ span.tablink-selected a
padding-right: 10px;
}
+#bottomboxes
+{
+ position: absolute;
+ width: 500px;
+ height: 100px;
+ left: 20px;
+ bottom: 20px;
+}
+
#userprefs-title,
#identity-title,
div.boxtitle,
@@ -132,8 +150,8 @@ div.settingspart
#subscription-table
{
- width: 500px;
- border: 1px solid #999999;
+ width: 100%;
+ table-layout: fixed;
}
#subscription-table tbody td
@@ -145,10 +163,12 @@ div.settingspart
background-color: #F9F9F9;
}
-/*
-#subscription-table tbody td select
+#subscription-table td.name
{
- width: 150px;
+ width: 280px;
}
-*/
+#subscription-table td.subscribed
+{
+ width: 80px;
+}
diff --git a/skins/default/templates/managefolders.html b/skins/default/templates/managefolders.html
index a94d73848..d37861916 100644
--- a/skins/default/templates/managefolders.html
+++ b/skins/default/templates/managefolders.html
@@ -16,9 +16,11 @@
<div id="folder-manager">
<roundcube:object name="foldersubscription" form="subscriptionform" id="subscription-table"
cellpadding="1" cellspacing="0" summary="Folder subscription table"
- deleteIcon="/images/icons/folder-trash.png" />
-
+ deleteIcon="/images/icons/folder-trash.png"
+ renameIcon="/images/icons/edit.png" />
+</div>
+<div id="bottomboxes">
<div class="settingsbox">
<div class="boxtitle"><roundcube:label name="createfolder" /></div>
@@ -29,16 +31,6 @@
</div>
</div>
-<div class="settingsbox">
-<div class="boxtitle"><roundcube:label name="renamefolder" /></div>
-
-<div class="settingspart">
-<roundcube:label name="foldername" />:&nbsp;
-<roundcube:object name="renamefolder" form="subscriptionform" />
-<roundcube:button command="rename-folder" type="input" class="button" label="rename" />
-</div>
-</div>
-
</div>
</form>