From 6547093937cd4ee33adb7f9e55ce6851e25a6a8f Mon Sep 17 00:00:00 2001 From: Thomas Bruederli <thomas@roundcube.net> Date: Tue, 02 Oct 2012 14:28:02 -0400 Subject: [PATCH] Backported commit 10467e8a5957 and other improvements --- skins/larry/ui.js | 84 +++++++++++++++++++++++++++--------------- 1 files changed, 54 insertions(+), 30 deletions(-) diff --git a/skins/larry/ui.js b/skins/larry/ui.js index be0ca6a..0d6ee9e 100644 --- a/skins/larry/ui.js +++ b/skins/larry/ui.js @@ -75,7 +75,6 @@ } if (rcmail.env.action == 'show' || rcmail.env.action == 'preview') { - layout_messageview(); rcmail.addEventListener('aftershow-headers', function() { layout_messageview(); }); rcmail.addEventListener('afterhide-headers', function() { layout_messageview(); }); $('#previewheaderstoggle').click(function(e){ toggle_preview_headers(this); return false }); @@ -110,7 +109,7 @@ $('#mailthreadmode').addClass(rcmail.env.threading ? 'selected' : '').click(function(e){ switch_view_mode('thread'); return false }); mailviewsplit = new rcube_splitter({ id:'mailviewsplitter', p1:'#mailview-top', p2:'#mailview-bottom', - orientation:'h', relative:true, start:310, min:150, size:0, offset:-22 }); + orientation:'h', relative:true, start:310, min:150, size:12, offset:4 }); if (previewframe) mailviewsplit.init(); @@ -147,6 +146,10 @@ new rcube_splitter({ id:'identviewsplitter', p1:'#identitieslist', p2:'#identity-details', orientation:'v', relative:true, start:266, min:180, size:12 }).init(); } + else if (rcmail.env.action == 'preferences' || !rcmail.env.action) { + new rcube_splitter({ id:'prefviewsplitter', p1:'#sectionslist', p2:'#preferences-box', + orientation:'v', relative:true, start:266, min:180, size:12 }).init(); + } } /*** addressbook task ***/ else if (rcmail.env.task == 'addressbook') { @@ -172,23 +175,32 @@ return; } - var title = $('option', this).first().text(); + var select = $(this), + height = Math.max(select.height(), 26) - 2, + width = select.width() - 22, + title = $('option', this).first().text(); + if ($('option:selected', this).val() != '') title = $('option:selected', this).text(); - var select = $(this) - .change(function(){ + var overlay = $('<a class="menuselector"><span class="handle">' + title + '</span></a>') + .css('position', 'absolute') + .offset(select.position()) + .insertAfter(select); + + overlay.children().width(width).height(height).css('line-height', (height - 1) + 'px'); + + select.change(function() { var val = $('option:selected', this).text(); $(this).next().children().html(val); }); - $('<a class="menuselector dropdownselector"><span class="handle">' + title + '</span></a>') - .css('position', 'absolute') - .offset(select.position()) - .insertAfter(select) - .children().width(select.outerWidth() - 40); + var parent = select.parent(); + if (parent.css('position') != 'absolute') + parent.css('position', 'relative'); - select.parent().css('position', 'relative'); + // re-set original select width to fix click action and options width in some browsers + select.width(overlay.width()); }); $(document.body) @@ -211,6 +223,7 @@ // don't use $(window).resize() due to some unwanted side-effects window.onresize = resize; + resize(); } /** @@ -248,6 +261,20 @@ if (rcmail.env.task == 'mail' && rcmail.env.action == 'compose') { layout_composeview(); } + + // make iframe footer buttons float if scrolling is active + $('body.iframe .footerleft').each(function(){ + var footer = $(this), + body = $(document.body), + floating = footer.hasClass('floating'), + overflow = body.outerHeight(true) > $(window).height(); + if (overflow != floating) { + var action = overflow ? 'addClass' : 'removeClass'; + footer[action]('floating'); + body[action]('floatingbuttons'); + } + }) + } /** @@ -256,7 +283,7 @@ function message_displayed(p) { // show a popup dialog on errors - if (p.type == 'error') { + if (p.type == 'error' && rcmail.env.task != 'login') { if (!me.messagedialog) { me.messagedialog = $('<div>').addClass('popupdialog'); } @@ -289,7 +316,7 @@ */ function layout_messageview() { - $('#messagecontent').css('top', ($('#messageheader').outerHeight() + 10) + 'px'); + $('#messagecontent').css('top', ($('#messageheader').outerHeight() + 1) + 'px'); $('#message-objects div a').addClass('button'); if (!$('#attachment-list li').length) { @@ -307,8 +334,7 @@ function resize_leftcol(splitter) { - if (splitter) - $('#quicksearchbar input').css('width', (splitter.pos - 70) + 'px'); + // STUB } @@ -336,7 +362,13 @@ function update_quota(p) { - var y = p.total ? Math.ceil(p.percent / 100 * 20) * 24 : 0; + var step = 24, step_count = 20, + y = p.total ? Math.ceil(p.percent / 100 * step_count) * step : 0; + + // never show full-circle if quota is close to 100% but below. + if (p.total && y == step * step_count && p.percent < 100) + y -= step; + $('#quotadisplay').css('background-position', '0 -'+y+'px'); } @@ -437,7 +469,7 @@ button.removeClass().addClass(visible ? 'enabled' : 'closed'); if (visible) { - $('#mailview-top').css({ bottom:'auto' }); + $('#mailview-top').removeClass('fullheight').css({ bottom:'auto' }); $('#mailview-bottom').css({ height:'auto' }); rcmail.env.contentframe = 'messagecontframe'; @@ -456,7 +488,7 @@ rcmail.env.contentframe = null; rcmail.show_contentframe(false); - $('#mailview-top').css({ height:'auto', bottom:'28px' }); + $('#mailview-top').addClass('fullheight').css({ height:'auto', bottom:'28px' }); $('#mailview-bottom').css({ top:'auto', height:'26px' }); if (mailviewsplit.handle) @@ -589,18 +621,10 @@ $('input[name="view"][value="thread"]').prop('checked', rcmail.env.threading ? true : false); $('input[name="view"][value="list"]').prop('checked', rcmail.env.threading ? false : true); - // list columns - var found, cols = $('input[name="list_col[]"]'); - for (var i=0; i < cols.length; i++) { - if (cols[i].value != 'from') { - found = $.inArray(cols[i].value, rcmail.env.coltypes) != -1; - } - else { - found = ($.inArray('from', rcmail.env.coltypes) != -1 - || $.inArray('to', rcmail.env.coltypes) != -1); - } - $(cols[i]).prop('checked', found); - } + // set checkboxes + $('input[name="list_col[]"]').each(function() { + $(this).prop('checked', $.inArray(this.value, rcmail.env.coltypes) != -1); + }); $dialog.dialog({ modal: true, -- Gitblit v1.9.1