From da8f11ce163ffe3f88a359ae613aa144b16c73fc Mon Sep 17 00:00:00 2001 From: alecpl Date: Thu, 15 Apr 2010 11:28:15 +0000 Subject: - Fix messages list scrolling in FF3.6 (#1486472) - Fix quicksearch input focus (#1486637) - Small code cleanup + improvements --- CHANGELOG | 2 + program/js/app.js | 326 ++++++++++++++++++++------------------------ program/js/list.js | 4 +- program/steps/mail/func.inc | 1 - 4 files changed, 154 insertions(+), 179 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 6612dab5a..0f3c1d033 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,8 @@ CHANGELOG RoundCube Webmail =========================== +- Fix messages list scrolling in FF3.6 (#1486472) +- Fix quicksearch input focus (#1486637) - Always set changed date when flagging a DB record as deleted + provide a cleanup script - Fix address book/group selection (#1486619) - Assign newly created contacts to the active group (#1486626) diff --git a/program/js/app.js b/program/js/app.js index 57a1a8ee9..9c5df7661 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -55,7 +55,8 @@ function rcube_webmail() this.env.blankpage = 'program/blank.gif'; // set jQuery ajax options - jQuery.ajaxSetup({ cache:false, + jQuery.ajaxSetup({ + cache:false, error:function(request, status, err){ ref.http_error(request, status, err); }, beforeSend:function(xmlhttp){ xmlhttp.setRequestHeader('X-RoundCube-Request', ref.env.request_token); } }); @@ -131,8 +132,7 @@ function rcube_webmail() this.task = this.env.task; // check browser - if (!bw.dom || !bw.xmlhttp_test()) - { + if (!bw.dom || !bw.xmlhttp_test()) { this.goto_url('error', '_code=0x199'); return; } @@ -176,69 +176,64 @@ function rcube_webmail() this.message_list.addEventListener('dragmove', function(e){ p.drag_move(e); }); this.message_list.addEventListener('dragend', function(e){ p.drag_end(e); }); this.message_list.addEventListener('expandcollapse', function(e){ p.msglist_expand(e); }); + document.onmouseup = function(e){ return p.doc_mouse_up(e); }; + this.gui_objects.messagelist.parentNode.onmousedown = function(e){ return p.click_on_list(e); }; this.set_message_coltypes(this.env.coltypes); this.message_list.init(); this.enable_command('toggle_status', 'toggle_flag', 'menu-open', 'menu-save', true); - if (this.gui_objects.mailcontframe) - this.gui_objects.mailcontframe.onmousedown = function(e){ return p.click_on_list(e); }; - else - this.message_list.focus(); - // load messages if (this.env.messagecount) this.command('list'); } - if (this.env.search_text != null && document.getElementById('quicksearchbox') != null) - document.getElementById('quicksearchbox').value = this.env.search_text; - - if (this.env.action=='show' || this.env.action=='preview') - { + if (this.gui_objects.qsearchbox) { + if (this.env.search_text != null) { + this.gui_objects.qsearchbox.value = this.env.search_text; + } + $(this.gui_objects.qsearchbox).focusin(function() { rcmail.message_list.blur(); }); + } + + if (this.env.trash_mailbox && this.env.mailbox != this.env.trash_mailbox) + this.set_alttext('delete', 'movemessagetotrash'); + + if (this.env.action=='show' || this.env.action=='preview') { this.enable_command('show', 'reply', 'reply-all', 'forward', 'moveto', 'copy', 'delete', 'open', 'mark', 'edit', 'viewsource', 'download', 'print', 'load-attachment', 'load-headers', true); - if (this.env.next_uid) - { + if (this.env.next_uid) { this.enable_command('nextmessage', true); this.enable_command('lastmessage', true); } - if (this.env.prev_uid) - { + if (this.env.prev_uid) { this.enable_command('previousmessage', true); this.enable_command('firstmessage', true); } - if (this.env.blockedobjects) - { + if (this.env.blockedobjects) { if (this.gui_objects.remoteobjectsmsg) this.gui_objects.remoteobjectsmsg.style.display = 'block'; this.enable_command('load-images', 'always-load', true); } - } - if (this.env.trash_mailbox && this.env.mailbox != this.env.trash_mailbox) - this.set_alttext('delete', 'movemessagetotrash'); - - // make preview/message frame visible - if (this.env.action == 'preview' && this.env.framed && parent.rcmail) - { - this.enable_command('compose', 'add-contact', false); - parent.rcmail.show_contentframe(true); + // make preview/message frame visible + if (this.env.action == 'preview' && this.env.framed && parent.rcmail) { + this.enable_command('compose', 'add-contact', false); + parent.rcmail.show_contentframe(true); + } } - - if (this.env.action=='compose') - { + else if (this.env.action == 'compose') { this.enable_command('add-attachment', 'send-attachment', 'remove-attachment', 'send', true); - if (this.env.spellcheck) - { + + if (this.env.spellcheck) { this.env.spellcheck.spelling_state_observer = function(s){ ref.set_spellcheck_state(s); }; this.set_spellcheck_state('ready'); if ($("input[name='_is_html']").val() == '1') this.display_spellcheck_controls(false); } + if (this.env.drafts_mailbox) this.enable_command('savedraft', true); @@ -247,38 +242,35 @@ function rcube_webmail() // init message compose form this.init_messageform(); } + // show printing dialog + else if (this.env.action == 'print') + window.print(); if (this.env.messagecount) { this.enable_command('select-all', 'select-none', 'expunge', true); this.enable_command('expand-all', 'expand-unread', 'collapse-all', this.env.threading); - } + } if (this.purge_mailbox_test()) this.enable_command('purge', true); this.set_page_buttons(); - // show printing dialog - if (this.env.action=='print') - window.print(); - // get unread count for each mailbox - if (this.gui_objects.mailboxlist) - { + if (this.gui_objects.mailboxlist) { this.env.unread_counts = {}; this.gui_objects.folderlist = this.gui_objects.mailboxlist; this.http_request('getunread', ''); - } + } // ask user to send MDN - if (this.env.mdn_request && this.env.uid) - { + if (this.env.mdn_request && this.env.uid) { var mdnurl = '_uid='+this.env.uid+'&_mbox='+urlencode(this.env.mailbox); if (confirm(this.get_label('mdnrequest'))) this.http_post('sendmdn', mdnurl); else this.http_post('mark', mdnurl+'&_flag=mdnsent'); - } + } break; @@ -302,15 +294,11 @@ function rcube_webmail() if (this.env.cid) this.contact_list.highlight_row(this.env.cid); - if (this.gui_objects.contactslist.parentNode) - { - this.gui_objects.contactslist.parentNode.onmousedown = function(e){ return p.click_on_list(e); }; - document.onmouseup = function(e){ return p.doc_mouse_up(e); }; + this.gui_objects.contactslist.parentNode.onmousedown = function(e){ return p.click_on_list(e); }; + document.onmouseup = function(e){ return p.doc_mouse_up(e); }; + if (this.gui_objects.qsearchbox) { + $(this.gui_objects.qsearchbox).focusin(function() { rcmail.contact_list.blur(); }); } - else - this.contact_list.focus(); - - //this.gui_objects.folderlist = this.gui_objects.contactslist; } this.set_page_buttons(); @@ -405,8 +393,7 @@ function rcube_webmail() // execute all foreign onload scripts // @deprecated - for (var i=0; i=0) - { + if (this.env.uid && props.mimetype && jQuery.inArray(props.mimetype, this.mimetypes)>=0) { if (props.mimetype == 'text/html') qstring += '&_safe=1'; this.attachment_win = window.open(this.env.comm_path+'&_action=get&'+qstring+'&_frame=1', 'rcubemailattachment'); - if (this.attachment_win) - { + if (this.attachment_win) { window.setTimeout(function(){ ref.attachment_win.focus(); }, 10); break; - } } + } this.goto_url('get', qstring+'&_download=1', false); break; @@ -817,12 +794,10 @@ function rcube_webmail() case 'compose': var url = this.env.comm_path+'&_action=compose'; - if (this.task=='mail') - { + if (this.task=='mail') { url += '&_mbox='+urlencode(this.env.mailbox); - if (this.env.mailbox==this.env.drafts_mailbox) - { + if (this.env.mailbox==this.env.drafts_mailbox) { var uid; if (uid = this.get_single_uid()) url += '&_draft_uid='+uid; @@ -831,36 +806,33 @@ function rcube_webmail() url += '&_to='+urlencode(props); } // modify url if we're in addressbook - else if (this.task=='addressbook') - { + else if (this.task=='addressbook') { // switch to mail compose step directly - if (props && props.indexOf('@') > 0) - { + if (props && props.indexOf('@') > 0) { url = this.get_task_url('mail', url); this.redirect(url + '&_to='+urlencode(props)); break; - } + } // use contact_id passed as command parameter var a_cids = new Array(); if (props) a_cids[a_cids.length] = props; // get selected contacts - else if (this.contact_list) - { + else if (this.contact_list) { var selection = this.contact_list.get_selection(); for (var n=0; n0) && - li.nextSibling.getElementsByTagName("ul")[0].style && - (li.nextSibling.getElementsByTagName("ul")[0].style.display!='none')) - { - li.nextSibling.getElementsByTagName("ul")[0].style.display = 'none'; - li.nextSibling.getElementsByTagName("ul")[0].style.display = ''; - } + if (!this.drag_menu(e, target)) + this.command('moveto', target); + } - this.http_post('save-pref', '_name=collapsed_folders&_value='+urlencode(this.env.collapsed_folders)); - this.set_unread_count_display(id, false); - } + // reset 'pressed' buttons + if (this.buttons_sel) { + for (var id in this.buttons_sel) + if (typeof id != 'function') + this.button_out(this.buttons_sel[id], id); + this.buttons_sel = {}; } + }; this.click_on_list = function(e) { @@ -1433,7 +1405,7 @@ function rcube_webmail() else if (this.contact_list) this.contact_list.focus(); - return rcube_event.get_button(e) == 2 ? true : rcube_event.cancel(e); + return true; }; this.msglist_select = function(list) diff --git a/program/js/list.js b/program/js/list.js index ad640fb65..3e7bc6226 100644 --- a/program/js/list.js +++ b/program/js/list.js @@ -1159,6 +1159,8 @@ drag_mouse_up: function(e) this.draglayer.hide(); } + if (this.drag_active) + this.focus(); this.drag_active = false; rcube_event.remove_listener({event:'mousemove', object:this, method:'drag_mouse_move'}); @@ -1168,7 +1170,7 @@ drag_mouse_up: function(e) $('div.iframe-dragdrop-fix').each(function() { this.parentNode.removeChild(this); }); this.triggerEvent('dragend'); - + return rcube_event.cancel(e); }, diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc index 1cac61566..ad4ca2257 100644 --- a/program/steps/mail/func.inc +++ b/program/steps/mail/func.inc @@ -175,7 +175,6 @@ function rcmail_message_list($attrib) $message_count = $IMAP->messagecount(NULL, $IMAP->threading ? 'THREADS' : 'ALL'); // set client env - $OUTPUT->add_gui_object('mailcontframe', 'mailcontframe'); $OUTPUT->add_gui_object('messagelist', $attrib['id']); $OUTPUT->set_env('autoexpand_threads', intval($CONFIG['autoexpand_threads'])); $OUTPUT->set_env('messagecount', $message_count); -- cgit v1.2.3