summaryrefslogtreecommitdiff
path: root/skins/larry/ui.js
diff options
context:
space:
mode:
Diffstat (limited to 'skins/larry/ui.js')
-rw-r--r--skins/larry/ui.js143
1 files changed, 111 insertions, 32 deletions
diff --git a/skins/larry/ui.js b/skins/larry/ui.js
index 58e03fbdc..e5733bd23 100644
--- a/skins/larry/ui.js
+++ b/skins/larry/ui.js
@@ -19,7 +19,7 @@ function rcube_mail_ui()
searchmenu: { editable:1, callback:searchmenu },
attachmentmenu: { },
listoptions: { editable:1 },
- dragmessagemenu: { sticky:1 },
+ dragmenu: { sticky:1 },
groupmenu: { above:1 },
mailboxmenu: { above:1 },
spellmenu: { callback: spellmenu },
@@ -38,10 +38,12 @@ function rcube_mail_ui()
this.init_tabs = init_tabs;
this.show_about = show_about;
this.show_popup = show_popup;
+ this.add_popup = add_popup;
this.set_searchmod = set_searchmod;
this.show_uploadform = show_uploadform;
this.show_header_row = show_header_row;
this.hide_header_row = hide_header_row;
+ this.update_quota = update_quota;
// set minimal mode on small screens (don't wait for document.ready)
@@ -88,14 +90,15 @@ function rcube_mail_ui()
var dragmenu = $('#dragmessagemenu');
if (dragmenu.length) {
- rcmail.gui_object('message_dragmenu', 'dragmessagemenu');
- popups.dragmessagemenu = dragmenu;
+ rcmail.gui_object('dragmenu', 'dragmessagemenu');
+ popups.dragmenu = dragmenu;
}
if (rcmail.env.action == 'show' || rcmail.env.action == 'preview') {
+ rcmail.addEventListener('enable-command', enable_command);
rcmail.addEventListener('aftershow-headers', function() { layout_messageview(); });
rcmail.addEventListener('afterhide-headers', function() { layout_messageview(); });
- $('#previewheaderstoggle').click(function(e){ toggle_preview_headers(this); return false });
+ $('#previewheaderstoggle').click(function(e){ toggle_preview_headers(); return false });
// add menu link for each attachment
$('#attachment-list > li').each(function() {
@@ -109,10 +112,14 @@ function rcube_mail_ui()
layout_composeview();
// Show input elements with non-empty value
- var field, fields = ['cc', 'bcc', 'replyto', 'followupto'];
- for (var f=0; f < fields.length; f++) {
- if ((field = $('#_'+fields[f])) && field.length && field.val() != '')
- show_header_row(fields[f], true);
+ var f, v, field, fields = ['cc', 'bcc', 'replyto', 'followupto'];
+ for (f=0; f < fields.length; f++) {
+ v = fields[f]; field = $('#_'+v);
+ if (field.length) {
+ field.on('change', {v: v}, function(e) { if (this.value) show_header_row(e.data.v, true); });
+ if (field.val() != '')
+ show_header_row(v, true);
+ }
}
$('#composeoptionstoggle').click(function(){
@@ -144,6 +151,12 @@ function rcube_mail_ui()
new rcube_scroller('#folderlist-content', '#folderlist-header', '#folderlist-footer');
rcmail.addEventListener('setquota', update_quota);
+ rcmail.addEventListener('enable-command', enable_command);
+ rcmail.addEventListener('afterimport-messages', show_uploadform);
+ }
+ else if (rcmail.env.action == 'get') {
+ new rcube_splitter({ id:'mailpartsplitterv', p1:'#messagepartheader', p2:'#messagepartcontainer',
+ orientation:'v', relative:true, start:226, min:150, size:12}).init();
}
if ($('#mailview-left').length) {
@@ -182,6 +195,8 @@ function rcube_mail_ui()
/*** addressbook task ***/
else if (rcmail.env.task == 'addressbook') {
rcmail.addEventListener('afterupload-photo', show_uploadform);
+ rcmail.addEventListener('beforepushgroup', push_contactgroup);
+ rcmail.addEventListener('beforepopgroup', pop_contactgroup);
if (rcmail.env.action == '') {
new rcube_splitter({ id:'addressviewsplitterd', p1:'#addressview-left', p2:'#addressview-right',
@@ -191,12 +206,12 @@ function rcube_mail_ui()
new rcube_scroller('#directorylist-content', '#directorylist-header', '#directorylist-footer');
}
- }
- // set min-width to show all toolbar buttons
- var screen = $('.minwidth');
- if (screen.length) {
- screen.css('min-width', $('.toolbar').width() + $('#quicksearchbar').parent().width() + 20);
+ var dragmenu = $('#dragcontactmenu');
+ if (dragmenu.length) {
+ rcmail.gui_object('dragmenu', 'dragcontactmenu');
+ popups.dragmenu = dragmenu;
+ }
}
// turn a group of fieldsets into tabs
@@ -210,6 +225,7 @@ function rcube_mail_ui()
}
var select = $(this),
+ parent = select.parent(),
height = Math.max(select.height(), 26) - 2,
width = select.width() - 22,
title = $('option', this).first().text();
@@ -224,19 +240,23 @@ function rcube_mail_ui()
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);
- });
-
- var parent = select.parent();
if (parent.css('position') != 'absolute')
parent.css('position', 'relative');
// re-set original select width to fix click action and options width in some browsers
- select.width(overlay.width());
+ select.width(overlay.width())
+ .change(function() {
+ var val = $('option:selected', this).text();
+ $(this).next().children().text(val);
+ });
});
+ // set min-width to show all toolbar buttons
+ var screen = $('body > div.minwidth');
+ if (screen.length) {
+ screen.css('min-width', $('.toolbar').width() + $('#quicksearchbar').width() + $('#searchfilter').width() + 30);
+ }
+
$(document.body)
.bind('mouseup', body_mouseup)
.bind('keyup', function(e){
@@ -250,8 +270,13 @@ function rcube_mail_ui()
$('iframe').load(function(e){
// this = iframe
- var doc = this.contentDocument ? this.contentDocument : this.contentWindow ? this.contentWindow.document : null;
- $(doc).mouseup(body_mouseup);
+ try {
+ var doc = this.contentDocument ? this.contentDocument : this.contentWindow ? this.contentWindow.document : null;
+ $(doc).mouseup(body_mouseup);
+ }
+ catch (e) {
+ // catch possible "Permission denied" error in IE
+ };
})
.contents().mouseup(body_mouseup);
@@ -429,6 +454,30 @@ function rcube_mail_ui()
}
+ function enable_command(p)
+ {
+ if (p.command == 'reply-list') {
+ var label = rcmail.gettext(p.status ? 'replylist' : 'replyall');
+ if (rcmail.env.action == 'preview')
+ $('a.button.replyall').attr('title', label);
+ else
+ $('a.button.reply-all').text(label).attr('title', label);
+ }
+ }
+
+
+ /**
+ * Register a popup menu
+ */
+ function add_popup(popup, config)
+ {
+ var obj = popups[popup] = $('#'+popup);
+ obj.appendTo(document.body); // move it to top for proper absolute positioning
+
+ if (obj.length)
+ popupconfig[popup] = $.extend(popupconfig[popup] || {}, config || {});
+ }
+
/**
* Trigger for popup menus
*/
@@ -436,7 +485,7 @@ function rcube_mail_ui()
{
// auto-register menu object
if (config || !popupconfig[popup])
- popupconfig[popup] = $.extend(popupconfig[popup] || {}, config);
+ add_popup(popup, config);
var visible = show_popupmenu(popup, show),
config = popupconfig[popup];
@@ -551,8 +600,11 @@ function rcube_mail_ui()
mailviewsplit.handle.hide();
}
- if (visible && uid && rcmail.message_list)
- rcmail.message_list.scrollto(uid);
+ if (rcmail.message_list) {
+ if (visible && uid)
+ rcmail.message_list.scrollto(uid);
+ rcmail.message_list.resize();
+ }
rcmail.command('save-pref', { name:'preview_pane', value:(visible?1:0) });
}
@@ -561,7 +613,7 @@ function rcube_mail_ui()
/**
* Switch between short and full headers display in message preview
*/
- function toggle_preview_headers(button)
+ function toggle_preview_headers()
{
$('#preview-shortheaders').toggle();
var full = $('#preview-allheaders').toggle(),
@@ -702,8 +754,6 @@ function rcube_mail_ui()
$('input[name="sort_col"][value="'+rcmail.env.sort_col+'"]').prop('checked', true);
$('input[name="sort_ord"][value="DESC"]').prop('checked', rcmail.env.sort_order == 'DESC');
$('input[name="sort_ord"][value="ASC"]').prop('checked', rcmail.env.sort_order != 'DESC');
- $('input[name="view"][value="thread"]').prop('checked', rcmail.env.threading ? true : false);
- $('input[name="view"][value="list"]').prop('checked', rcmail.env.threading ? false : true);
// set checkboxes
$('input[name="list_col[]"]').each(function() {
@@ -718,7 +768,8 @@ function rcube_mail_ui()
close: function() {
$dialog.dialog('destroy').hide();
},
- width: 650
+ minWidth: 500,
+ width: $dialog.width()+25
}).show();
}
@@ -732,11 +783,10 @@ function rcube_mail_ui()
var sort = $('input[name="sort_col"]:checked').val(),
ord = $('input[name="sort_ord"]:checked').val(),
- thread = $('input[name="view"]:checked').val(),
cols = $('input[name="list_col[]"]:checked')
.map(function(){ return this.value; }).get();
- rcmail.set_list_options(cols, sort, ord, thread == 'thread' ? 1 : 0);
+ rcmail.set_list_options(cols, sort, ord, rcmail.env.threading);
}
@@ -788,6 +838,35 @@ function rcube_mail_ui()
});
}
+ function push_contactgroup(p)
+ {
+ // lets the contacts list swipe to the left, nice!
+ var table = $('#contacts-table'),
+ scroller = table.parent().css('overflow', 'hidden');
+
+ table.clone()
+ .css({ position:'absolute', top:'0', left:'0', width:table.width()+'px', 'z-index':10 })
+ .appendTo(scroller)
+ .animate({ left: -(table.width()+5) + 'px' }, 300, 'swing', function(){
+ $(this).remove();
+ scroller.css('overflow', 'auto')
+ });
+ }
+
+ function pop_contactgroup(p)
+ {
+ // lets the contacts list swipe to the left, nice!
+ var table = $('#contacts-table'),
+ scroller = table.parent().css('overflow', 'hidden'),
+ clone = table.clone().appendTo(scroller);
+
+ table.css({ position:'absolute', top:'0', left:-(table.width()+5) + 'px', width:table.width()+'px', height:table.height()+'px', 'z-index':10 })
+ .animate({ left:'0' }, 300, 'linear', function(){
+ clone.remove();
+ $(this).css({ position:'relative', left:'0', width:'100%', height:'auto', 'z-index':1 });
+ scroller.css('overflow', 'auto')
+ });
+ }
function show_uploadform()
{
@@ -798,7 +877,7 @@ function rcube_mail_ui()
$dialog.dialog('close');
return;
}
-
+
// add icons to clone file input field
if (rcmail.env.action == 'compose' && !$dialog.data('extended')) {
$('<a>')