From 186537b2c60517ba8cc9283a80b7092b6d9e2b3e Mon Sep 17 00:00:00 2001 From: alecpl Date: Fri, 16 Apr 2010 11:50:59 +0000 Subject: - more code formatting - allow re-selecting highlighted row (#1486442) --- program/js/app.js | 329 +++++++++++++++++++++++++-------------------------- program/js/common.js | 2 +- 2 files changed, 163 insertions(+), 168 deletions(-) diff --git a/program/js/app.js b/program/js/app.js index 01601a6c0..bc0962b29 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -170,6 +170,7 @@ function rcube_webmail() {multiselect:true, multiexpand:true, draggable:true, keyboard:true, dblclick_time:this.dblclick_time}); this.message_list.row_init = function(o){ p.init_message_row(o); }; this.message_list.addEventListener('dblclick', function(o){ p.msglist_dbl_click(o); }); + this.message_list.addEventListener('click', function(o){ p.msglist_click(o); }); this.message_list.addEventListener('keypress', function(o){ p.msglist_keypress(o); }); this.message_list.addEventListener('select', function(o){ p.msglist_select(o); }); this.message_list.addEventListener('dragstart', function(o){ p.drag_start(o); }); @@ -1396,7 +1397,7 @@ function rcube_webmail() }; this.click_on_list = function(e) - { + { if (this.gui_objects.qsearchbox) this.gui_objects.qsearchbox.blur(); @@ -1406,10 +1407,10 @@ function rcube_webmail() this.contact_list.focus(); return true; - }; + }; this.msglist_select = function(list) - { + { if (this.preview_timer) clearTimeout(this.preview_timer); @@ -1419,42 +1420,53 @@ function rcube_webmail() var selected = list.get_single_selection() != null; // Hide certain command buttons when Drafts folder is selected - if (this.env.mailbox == this.env.drafts_mailbox) - { + if (this.env.mailbox == this.env.drafts_mailbox) { this.enable_command('reply', 'reply-all', 'forward', false); this.enable_command('show', 'print', 'open', 'edit', 'download', 'viewsource', selected); this.enable_command('delete', 'moveto', 'copy', 'mark', (list.selection.length > 0 ? true : false)); - } - else - { + } + else { this.enable_command('show', 'reply', 'reply-all', 'forward', 'print', 'edit', 'open', 'download', 'viewsource', selected); this.enable_command('delete', 'moveto', 'copy', 'mark', (list.selection.length > 0 ? true : false)); - } + } // start timer for message preview (wait for double click) if (selected && this.env.contentframe && !list.multi_selecting) this.preview_timer = window.setTimeout(function(){ ref.msglist_get_preview(); }, 200); else if (this.env.contentframe) this.show_contentframe(false); - }; + }; + + // This allow as to re-select selected message and display it in preview frame + this.msglist_click = function(list) + { + if (list.multi_selecting || !this.env.contentframe) + return; + + if (list.get_single_selection() && window.frames && window.frames[this.env.contentframe]) { + if (window.frames[this.env.contentframe].location.href.indexOf(this.env.blankpage)>=0) { + this.preview_timer = window.setTimeout(function(){ ref.msglist_get_preview(); }, 200); + } + } + }; this.msglist_dbl_click = function(list) - { - if (this.preview_timer) - clearTimeout(this.preview_timer); + { + if (this.preview_timer) + clearTimeout(this.preview_timer); - if (this.preview_read_timer) - clearTimeout(this.preview_read_timer); + if (this.preview_read_timer) + clearTimeout(this.preview_read_timer); var uid = list.get_single_selection(); if (uid && this.env.mailbox == this.env.drafts_mailbox) this.goto_url('compose', '_draft_uid='+uid+'&_mbox='+urlencode(this.env.mailbox), true); else if (uid) this.show_message(uid, false, false); - }; + }; this.msglist_keypress = function(list) - { + { if (list.key_pressed == list.ENTER_KEY) this.command('show'); else if (list.key_pressed == list.DELETE_KEY) @@ -1467,7 +1479,7 @@ function rcube_webmail() this.command('nextpage'); else list.shiftkey = false; - }; + }; this.msglist_get_preview = function() { @@ -1671,13 +1683,13 @@ function rcube_webmail() // messages list handling in background (for performance) this.offline_message_list = function(flag) - { - if (this.message_list) - this.message_list.set_background_mode(flag); - }; + { + if (this.message_list) + this.message_list.set_background_mode(flag); + }; this.set_list_sorting = function(sort_col, sort_order) - { + { // set table header class $('#rcm'+this.env.sort_col).removeClass('sorted'+(this.env.sort_order.toUpperCase())); if (sort_col) @@ -1685,45 +1697,44 @@ function rcube_webmail() this.env.sort_col = sort_col; this.env.sort_order = sort_order; - } + }; this.set_list_options = function(cols, sort_col, sort_order, threads) - { + { var update, add_url = ''; if (this.env.sort_col != sort_col || this.env.sort_order != sort_order) { update = 1; this.set_list_sorting(sort_col, sort_order); - } + } if (this.env.threading != threads) { update = 1; add_url += '&_threads=' + threads; - } + } if (cols.join() != this.env.coltypes.join()) { update = 1; add_url += '&_cols=' + cols.join(','); - } + } if (update) this.list_mailbox('', '', sort_col+'_'+sort_order, add_url); - } + }; // when user doble-clicks on a row this.show_message = function(id, safe, preview) - { + { if (!id) return; - + var add_url = ''; var action = preview ? 'preview': 'show'; var target = window; - - if (preview && this.env.contentframe && window.frames && window.frames[this.env.contentframe]) - { + + if (preview && this.env.contentframe && window.frames && window.frames[this.env.contentframe]) { target = window.frames[this.env.contentframe]; add_url = '&_framed=1'; - } + } if (safe) add_url = '&_safe=1'; @@ -1756,26 +1767,24 @@ function rcube_webmail() }; this.show_contentframe = function(show) - { + { var frm; - if (this.env.contentframe && (frm = $('#'+this.env.contentframe)) && frm.length) - { - if (!show && window.frames[this.env.contentframe]) - { + if (this.env.contentframe && (frm = $('#'+this.env.contentframe)) && frm.length) { + if (!show && window.frames[this.env.contentframe]) { if (window.frames[this.env.contentframe].location.href.indexOf(this.env.blankpage)<0) window.frames[this.env.contentframe].location.href = this.env.blankpage; - } + } else if (!bw.safari && !bw.konq) frm[show ? 'show' : 'hide'](); } if (!show && this.busy) this.set_busy(false); - }; + }; // list a specific page this.list_page = function(page) - { + { if (page=='next') page = this.env.current_page+1; if (page=='last') @@ -1784,38 +1793,37 @@ function rcube_webmail() page = this.env.current_page-1; if (page=='first' && this.env.current_page>1) page = 1; - - if (page > 0 && page <= this.env.pagecount) - { + + if (page > 0 && page <= this.env.pagecount) { this.env.current_page = page; if (this.task=='mail') this.list_mailbox(this.env.mailbox, page); else if (this.task=='addressbook') this.list_contacts(this.env.source, null, page); - } - }; + } + }; // list messages of a specific mailbox using filter this.filter_mailbox = function(filter) - { - var search; - if (this.gui_objects.qsearchbox) - search = this.gui_objects.qsearchbox.value; - - this.message_list.clear(); + { + var search; + if (this.gui_objects.qsearchbox) + search = this.gui_objects.qsearchbox.value; - // reset vars - this.env.current_page = 1; - this.set_busy(true, 'searching'); - this.http_request('search', '_filter='+filter - + (search ? '&_q='+urlencode(search) : '') - + (this.env.mailbox ? '&_mbox='+urlencode(this.env.mailbox) : ''), true); - } + this.message_list.clear(); + + // reset vars + this.env.current_page = 1; + this.set_busy(true, 'searching'); + this.http_request('search', '_filter='+filter + + (search ? '&_q='+urlencode(search) : '') + + (this.env.mailbox ? '&_mbox='+urlencode(this.env.mailbox) : ''), true); + }; // list messages of a specific mailbox this.list_mailbox = function(mbox, page, sort, add_url) - { + { var url = ''; var target = window; @@ -1834,12 +1842,11 @@ function rcube_webmail() url += '&_search='+this.env.search_request; // set page=1 if changeing to another mailbox - if (!page && this.env.mailbox != mbox) - { + if (!page && this.env.mailbox != mbox) { page = 1; this.env.current_page = page; this.show_contentframe(false); - } + } if (mbox != this.env.mailbox || (mbox == this.env.mailbox && !page && !sort)) url += '&_refresh=1'; @@ -1854,29 +1861,26 @@ function rcube_webmail() this.env.mailbox = mbox; // load message list remotely - if (this.gui_objects.messagelist) - { + if (this.gui_objects.messagelist) { this.list_mailbox_remote(mbox, page, url); return; - } + } - if (this.env.contentframe && window.frames && window.frames[this.env.contentframe]) - { + if (this.env.contentframe && window.frames && window.frames[this.env.contentframe]) { target = window.frames[this.env.contentframe]; url += '&_framed=1'; - } + } // load message list to target frame/window - if (mbox) - { + if (mbox) { this.set_busy(true, 'loading'); target.location.href = this.env.comm_path+'&_mbox='+urlencode(mbox)+(page ? '&_page='+page : '')+url; - } - }; + } + }; // send remote request to load message list this.list_mailbox_remote = function(mbox, page, add_url) - { + { // clear message list first this.message_list.clear(); @@ -1884,11 +1888,11 @@ function rcube_webmail() var url = '_mbox='+urlencode(mbox)+(page ? '&_page='+page : ''); this.set_busy(true, 'loading'); this.http_request('list', url+add_url, true); - }; + }; // expand all threads with unread children this.expand_unread = function() - { + { var tbody = this.gui_objects.messagelist.tBodies[0]; var new_row = tbody.firstChild; var r; @@ -1896,20 +1900,20 @@ function rcube_webmail() while (new_row) { if (new_row.nodeType == 1 && (r = this.message_list.rows[new_row.uid]) && r.unread_children) { - this.message_list.expand_all(r); - var expando = document.getElementById('rcmexpando' + r.uid); - if (expando) - expando.className = 'expanded'; - this.set_unread_children(r.uid); - } - new_row = new_row.nextSibling; + this.message_list.expand_all(r); + var expando = document.getElementById('rcmexpando' + r.uid); + if (expando) + expando.className = 'expanded'; + this.set_unread_children(r.uid); } + new_row = new_row.nextSibling; + } return false; - }; + }; // thread expanding/collapsing handler this.expand_message_row = function(e, uid) - { + { var row = this.message_list.rows[uid]; // handle unread_children mark @@ -1918,20 +1922,20 @@ function rcube_webmail() row.expanded = !row.expanded; this.message_list.expand_row(e, uid); - }; + }; // message list expanding this.expand_threads = function() - { + { if (!this.env.threading || !this.env.autoexpand_threads || !this.message_list) return; - + switch (this.env.autoexpand_threads) { case 2: this.expand_unread(); break; case 1: this.message_list.expand_all(); break; - } - // this.message_list.expand(null); } + // this.message_list.expand(null); + } // update parent in a thread this.update_thread_root = function(uid, flag) @@ -1979,7 +1983,7 @@ function rcube_webmail() var parent = this.message_list.find_root(uid); rows[parent].unread_children--; this.set_unread_children(parent); - } + } parent = row.parent_uid; @@ -1987,39 +1991,38 @@ function rcube_webmail() row = row.obj.nextSibling; while (row) { if (row.nodeType == 1 && (r = rows[row.uid])) { - if (!r.depth || r.depth <= depth) - break; + if (!r.depth || r.depth <= depth) + break; - r.depth--; // move left - $('#rcmtab'+r.uid).width(r.depth * 15); + r.depth--; // move left + $('#rcmtab'+r.uid).width(r.depth * 15); if (!r.depth) { // a new root - count++; // increase roots count - r.parent_uid = 0; - if (r.has_children) { - // replace 'leaf' with 'collapsed' - $('#rcmrow'+r.uid+' '+'.leaf:first') + count++; // increase roots count + r.parent_uid = 0; + if (r.has_children) { + // replace 'leaf' with 'collapsed' + $('#rcmrow'+r.uid+' '+'.leaf:first') .attr('id', 'rcmexpando' + r.uid) - .attr('class', (r.obj.style.display != 'none' ? 'expanded' : 'collapsed')) + .attr('class', (r.obj.style.display != 'none' ? 'expanded' : 'collapsed')) .bind('mousedown', {uid:r.uid, p:this}, - function(e) { return e.data.p.expand_message_row(e, e.data.uid); }); - - r.unread_children = 0; - roots[roots.length] = r; + function(e) { return e.data.p.expand_message_row(e, e.data.uid); }); + + r.unread_children = 0; + roots[roots.length] = r; + } + // show if it was hidden + if (r.obj.style.display == 'none') + $(r.obj).show(); } - // show if it was hidden - if (r.obj.style.display == 'none') - $(r.obj).show(); - } - else { - if (r.depth == depth) - r.parent_uid = parent; - if (r.unread && roots.length) { - roots[roots.length-1].unread_children++; + else { + if (r.depth == depth) + r.parent_uid = parent; + if (r.unread && roots.length) + roots[roots.length-1].unread_children++; } } - } - row = row.nextSibling; - } + row = row.nextSibling; + } // update unread_children for roots for (var i=0; i