diff options
author | Thomas Bruederli <thomas@roundcube.net> | 2014-04-07 12:53:06 +0200 |
---|---|---|
committer | Thomas Bruederli <thomas@roundcube.net> | 2014-04-07 12:53:06 +0200 |
commit | c83535876c0a8903f1e77effef90d765eb96ab7f (patch) | |
tree | bd39ef46853511c24e753129cd10b3a9d5c63225 /program/js | |
parent | b95033e45a7dbc4b425bb6745facd6edb4af1edc (diff) |
Small refactoring of message list column configuration; fixes table column resorting issues with hidden 'folder' column
Diffstat (limited to 'program/js')
-rw-r--r-- | program/js/app.js | 86 |
1 files changed, 59 insertions, 27 deletions
diff --git a/program/js/app.js b/program/js/app.js index f548ad850..7c27d21b3 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -213,6 +213,11 @@ function rcube_webmail() .addEventListener('listupdate', function(o) { p.triggerEvent('listupdate', o); }) .init(); + // TODO: this should go into the list-widget code + $(this.message_list.thead).on('click', 'a.sortcol', function(e){ + return rcmail.command('sort', $(this).attr('rel'), this); + }); + document.onmouseup = function(e){ return p.doc_mouse_up(e); }; this.gui_objects.messagelist.parentNode.onmousedown = function(e){ return p.click_on_list(e); }; @@ -1687,21 +1692,21 @@ function rcube_webmail() { var i, found, name, cols = list.thead.rows[0].cells; - this.env.coltypes = []; + this.env.listcols = []; for (i=0; i<cols.length; i++) if (cols[i].id && cols[i].id.startsWith('rcm')) { name = cols[i].id.slice(3); - this.env.coltypes.push(name); + this.env.listcols.push(name); } - if ((found = $.inArray('flag', this.env.coltypes)) >= 0) + if ((found = $.inArray('flag', this.env.listcols)) >= 0) this.env.flagged_col = found; - if ((found = $.inArray('subject', this.env.coltypes)) >= 0) + if ((found = $.inArray('subject', this.env.listcols)) >= 0) this.env.subject_col = found; - this.command('save-pref', { name: 'list_cols', value: this.env.coltypes, session: 'list_attrib/columns' }); + this.command('save-pref', { name: 'list_cols', value: this.env.listcols, session: 'list_attrib/columns' }); }; this.check_droptarget = function(id) @@ -1927,10 +1932,14 @@ function rcube_webmail() } // add each submitted col - for (n in this.env.coltypes) { - c = this.env.coltypes[n]; + for (n in this.env.listcols) { + c = this.env.listcols[n]; col = { className: String(c).toLowerCase() }; + if (this.env.coltypes[c] && this.env.coltypes[c].hidden) { + col.className += ' hidden'; + } + if (c == 'flag') { css_class = (flags.flagged ? 'flagged' : 'unflagged'); html = '<span id="flagicn'+row.id+'" class="'+css_class+'"> </span>'; @@ -2019,7 +2028,7 @@ function rcube_webmail() if (cols && cols.length) { // make sure new columns are added at the end of the list - var i, idx, name, newcols = [], oldcols = this.env.coltypes; + var i, idx, name, newcols = [], oldcols = this.env.listcols; for (i=0; i<oldcols.length; i++) { name = oldcols[i]; idx = $.inArray(name, cols); @@ -4223,6 +4232,33 @@ function rcube_webmail() this.enable_command('set-listmode', this.env.threads); }; + this.set_searchscope = function(scope) + { + var old = this.env.search_scope; + this.env.search_scope = scope; + + // re-send search query with new scope + if (scope != old && this.env.search_request) { + this.qsearch(this.gui_objects.qsearchbox.value); + if (scope == 'base') + this.select_folder(this.env.mailbox, '', true); + } + }; + + this.set_searchmods = function(mods) + { + var mbox = rcmail.env.mailbox, + scope = this.env.search_scope || 'base'; + + if (scope == 'all') + mbox = '*'; + + if (!this.env.search_mods) + this.env.search_mods = {}; + + this.env.search_mods[mbox] = mods; + }; + this.sent_successfully = function(type, msg, folders) { this.display_message(msg, type); @@ -6413,18 +6449,18 @@ function rcube_webmail() // for reordering column array (Konqueror workaround) // and for setting some message list global variables - this.set_message_coltypes = function(coltypes, repl, smart_col) + this.set_message_coltypes = function(listcols, repl, smart_col) { var list = this.message_list, thead = list ? list.thead : null, - cell, col, n, len, th, tr; + repl, cell, col, n, len, tr; - this.env.coltypes = coltypes; + this.env.listcols = listcols; // replace old column headers if (thead) { if (repl) { - th = document.createElement('thead'); + thead.innerHTML = ''; tr = document.createElement('tr'); for (c=0, len=repl.length; c < len; c++) { @@ -6434,20 +6470,13 @@ function rcube_webmail() if (repl[c].className) cell.className = repl[c].className; tr.appendChild(cell); } - th.appendChild(tr); - thead.parentNode.replaceChild(th, thead); - list.thead = thead = th; + thead.appendChild(tr); } - for (n=0, len=this.env.coltypes.length; n<len; n++) { - col = this.env.coltypes[n]; + for (n=0, len=this.env.listcols.length; n<len; n++) { + col = this.env.listcols[n]; if ((cell = thead.rows[0].cells[n]) && (col == 'from' || col == 'to' || col == 'fromto')) { - cell.id = 'rcm'+col; - $('span,a', cell).text(this.get_label(col == 'fromto' ? smart_col : col)); - // if we have links for sorting, it's a bit more complicated... - $('a', cell).click(function(){ - return rcmail.command('sort', this.id.replace(/^rcm/, ''), this); - }); + $(cell).attr('rel', col).find('span,a').text(this.get_label(col == 'fromto' ? smart_col : col)); } } } @@ -6456,18 +6485,21 @@ function rcube_webmail() this.env.flagged_col = null; this.env.status_col = null; - if ((n = $.inArray('subject', this.env.coltypes)) >= 0) { + if (this.env.coltypes.folder) + this.env.coltypes.folder.hidden = !(this.env.search_request || this.env.search_id) || this.env.search_scope == 'base'; + + if ((n = $.inArray('subject', this.env.listcols)) >= 0) { this.env.subject_col = n; if (list) list.subject_col = n; } - if ((n = $.inArray('flag', this.env.coltypes)) >= 0) + if ((n = $.inArray('flag', this.env.listcols)) >= 0) this.env.flagged_col = n; - if ((n = $.inArray('status', this.env.coltypes)) >= 0) + if ((n = $.inArray('status', this.env.listcols)) >= 0) this.env.status_col = n; if (list) { - list.hide_column('folder', !(this.env.search_request || this.env.search_id) || this.env.search_scope == 'base'); + list.hide_column('folder', this.env.coltypes.folder && this.env.coltypes.folder.hidden); list.init_header(); } }; |