diff options
author | thomascube <thomas@roundcube.net> | 2006-07-25 22:11:50 +0000 |
---|---|---|
committer | thomascube <thomas@roundcube.net> | 2006-07-25 22:11:50 +0000 |
commit | 24053e0d308d6c80149b812cda8774ed3d6ed71d (patch) | |
tree | 9dbd832a2e57bbd4083e6d7ebb62b7bb74bed07d | |
parent | f0f98fb108885aca3c29f759128040ef9e015e68 (diff) |
Several bugfixes and improvements. See CHANGELOG for details
-rw-r--r-- | CHANGELOG | 13 | ||||
-rw-r--r-- | program/js/app.js | 322 | ||||
-rw-r--r-- | program/lib/imap.inc | 19 | ||||
-rw-r--r-- | program/localization/de_CH/labels.inc | 2 | ||||
-rw-r--r-- | program/localization/de_CH/messages.inc | 2 | ||||
-rw-r--r-- | program/localization/de_DE/labels.inc | 2 | ||||
-rw-r--r-- | program/localization/de_DE/messages.inc | 2 | ||||
-rw-r--r-- | program/localization/en_US/labels.inc | 2 | ||||
-rw-r--r-- | program/localization/es/labels.inc | 66 | ||||
-rw-r--r-- | program/localization/es/messages.inc | 24 | ||||
-rw-r--r-- | program/steps/mail/func.inc | 3 | ||||
-rw-r--r-- | program/steps/settings/manage_folders.inc | 54 | ||||
-rw-r--r-- | skins/default/addresses.css | 2 | ||||
-rw-r--r-- | skins/default/images/icons/edit.png | bin | 0 -> 717 bytes | |||
-rw-r--r-- | skins/default/settings.css | 32 | ||||
-rw-r--r-- | skins/default/templates/managefolders.html | 16 |
16 files changed, 403 insertions, 158 deletions
@@ -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"> </td><td class="delete"> </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 Binary files differnew file mode 100644 index 000000000..9b40b5c7b --- /dev/null +++ b/skins/default/images/icons/edit.png 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" />: -<roundcube:object name="renamefolder" form="subscriptionform" /> -<roundcube:button command="rename-folder" type="input" class="button" label="rename" /> -</div> -</div> - </div> </form> |