summaryrefslogtreecommitdiff
path: root/skins/classic/functions.js
diff options
context:
space:
mode:
Diffstat (limited to 'skins/classic/functions.js')
-rw-r--r--skins/classic/functions.js234
1 files changed, 137 insertions, 97 deletions
diff --git a/skins/classic/functions.js b/skins/classic/functions.js
index ae9898c68..2bf1538c4 100644
--- a/skins/classic/functions.js
+++ b/skins/classic/functions.js
@@ -106,12 +106,12 @@ function rcube_mail_ui()
searchmenu: {id:'searchmenu', editable:1},
messagemenu: {id:'messagemenu'},
attachmentmenu: {id:'attachmentmenu'},
- listmenu: {id:'listmenu', editable:1},
dragmenu: {id:'dragmenu', sticky:1},
groupmenu: {id:'groupoptionsmenu', above:1},
mailboxmenu: {id:'mailboxoptionsmenu', above:1},
composemenu: {id:'composeoptionsmenu', editable:1, overlap:1},
spellmenu: {id:'spellmenu'},
+ responsesmenu: {id:'responsesmenu'},
// toggle: #1486823, #1486930
uploadmenu: {id:'attachment-form', editable:1, above:1, toggle:!bw.ie&&!bw.linux },
uploadform: {id:'upload-form', editable:1, toggle:!bw.ie&&!bw.linux }
@@ -292,61 +292,62 @@ set_searchmod: function(elem)
rcmail.set_searchmods(m);
},
-listmenu: function(show)
+show_listmenu: function(p)
{
- var obj = this.popups.listmenu.obj,
- ref = rcube_find_object('listmenulink');
+ var self = this, buttons = {}, $dialog = $('#listmenu');
- if (typeof show == 'undefined')
- show = obj.is(':visible') ? false : true;
-
- if (show && ref) {
- var pos = $(ref).offset(),
- menuwidth = obj.width(),
- pagewidth = $(document).width();
-
- if (pagewidth - pos.left < menuwidth && pos.left > menuwidth)
- pos.left = pos.left - menuwidth;
-
- obj.css({ left:pos.left, top:(pos.top + ref.offsetHeight + 2)});
-
- // set form values
- $('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() {
- $(this).prop('checked', jQuery.inArray(this.value, rcmail.env.coltypes) != -1);
- });
+ // close the dialog
+ if ($dialog.is(':visible')) {
+ $dialog.dialog('close', p.originalEvent);
+ return;
}
- obj[show?'show':'hide']();
+ // set form values
+ $('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);
- if (show) {
- var maxheight=0;
- $('#listmenu fieldset').each(function() {
- var height = $(this).height();
- if (height > maxheight) {
- maxheight = height;
- }
- });
- $('#listmenu fieldset').css("min-height", maxheight+"px")
- .height(maxheight);
+ // set checkboxes
+ $('input[name="list_col[]"]').each(function() {
+ $(this).prop('checked', $.inArray(this.value, rcmail.env.listcols) != -1);
+ });
+
+ buttons[rcmail.gettext('save')] = function(e) {
+ $dialog.dialog('close', e);
+ self.save_listmenu();
};
-},
-open_listmenu: function()
-{
- this.listmenu();
+ $dialog.dialog({
+ modal: true,
+ resizable: false,
+ closeOnEscape: true,
+ title: null,
+ open: function(e) {
+ var maxheight = 0;
+ $('#listmenu fieldset').each(function() {
+ var height = $(this).height();
+ if (height > maxheight) {
+ maxheight = height;
+ }
+ }).css("min-height", maxheight+"px").height(maxheight);
+
+ setTimeout(function() { $dialog.find('a, input:not(:disabled)').not('[aria-disabled=true]').first().focus(); }, 100);
+ },
+ close: function(e) {
+ $dialog.dialog('destroy').hide();
+ if (e.originalEvent && rcube_event.is_keyboard(e.originalEvent))
+ $('#listmenulink').focus();
+ },
+ buttons: buttons,
+ minWidth: 500,
+ width: $dialog.width()+20
+ }).show();
},
save_listmenu: function()
{
- this.listmenu();
-
var sort = $('input[name="sort_col"]:checked').val(),
ord = $('input[name="sort_ord"]:checked').val(),
thread = $('input[name="view"]:checked').val(),
@@ -393,7 +394,7 @@ spellmenu: function(show)
this.show_popupmenu('spellmenu', show);
},
-show_attachmentmenu: function(elem)
+show_attachmentmenu: function(elem, event)
{
var id = elem.parentNode.id.replace(/^attach/, '');
@@ -406,37 +407,30 @@ show_attachmentmenu: function(elem)
});
this.popups.attachmentmenu.link = elem;
- rcmail.command('menu-open', {menu: 'attachmentmenu', id: id});
+ rcmail.command('menu-open', {menu: 'attachmentmenu', id: id}, elem, event);
},
menu_open: function(p)
{
- if (p && p.props && p.props.menu == 'attachmentmenu')
- this.show_popup('attachmentmenu');
- else
- this.open_listmenu();
-},
-
-menu_save: function(prop)
-{
- this.save_listmenu();
+ if (p && p.name == 'messagelistmenu')
+ this.show_listmenu();
},
-body_mouseup: function(evt, p)
+body_mouseup: function(e)
{
- var i, target = rcube_event.get_target(evt);
-
- for (i in this.popups) {
- if (this.popups[i].obj.is(':visible') && target != rcube_find_object(i+'link')
- && !this.popups[i].toggle
- && target != this.popups[i].obj.get(0) // check if scroll bar was clicked (#1489832)
- && (!this.popups[i].editable || !this.target_overlaps(target, this.popups[i].id))
- && (!this.popups[i].sticky || !rcube_mouse_is_over(evt, rcube_find_object(this.popups[i].id)))
+ var target = e.target; ref = this;
+
+ $.each(this.popups, function(i, popup) {
+ if (popup.obj.is(':visible') && target != rcube_find_object(i + 'link')
+ && !popup.toggle
+ && target != popup.obj.get(0) // check if scroll bar was clicked (#1489832)
+ && (!popup.editable || !ref.target_overlaps(target, popup.id))
+ && (!popup.sticky || !rcube_mouse_is_over(e, rcube_find_object(popup.id)))
&& !$(target).is('.folder-selector-link') && !$(target).children('.folder-selector-link').length
) {
window.setTimeout('rcmail_ui.show_popup("'+i+'",false);', 50);
}
- }
+ });
},
target_overlaps: function (target, elementid)
@@ -450,9 +444,9 @@ target_overlaps: function (target, elementid)
return false;
},
-body_keydown: function(evt, p)
+body_keydown: function(e)
{
- if (rcube_event.get_keycode(evt) == 27) {
+ if (e.keyCode == 27) {
for (var k in this.popups) {
if (this.popups[k].obj.is(':visible'))
this.show_popup(k, false);
@@ -556,10 +550,9 @@ resize_compose_body: function()
w = div.width() - 2, h = div.height(),
x = bw.ie || bw.opera ? 4 : 0;
- $('#compose-body_tbl').width((w+3)+'px').height('');
- $('#compose-body_ifr').width((w+3)+'px').height((h-54)+'px');
- $('#compose-body').width((w-x)+'px').height(h+'px');
- $('#googie_edit_layer').height(h+'px');
+ $('#compose-body_ifr').width(w+3).height(h-2 - $('div.mce-toolbar').height());
+ $('#compose-body').width(w-x).height(h);
+ $('#googie_edit_layer').height(h);
},
resize_compose_body_ev: function()
@@ -643,6 +636,37 @@ enable_command: function(p)
var label = rcmail.gettext(p.status ? 'replylist' : 'replyall');
$('a.button.replyAll').attr('title', label);
}
+},
+
+folder_search_init: function(container)
+{
+ // animation to unfold list search box
+ $('.boxtitle a.search', container).click(function(e) {
+ var title = $('.boxtitle', container),
+ box = $('.listsearchbox', container),
+ dir = box.is(':visible') ? -1 : 1,
+ height = 24 + ($('select', box).length ? 24 : 0);
+
+ box.slideToggle({
+ duration: 160,
+ progress: function(animation, progress) {
+ if (dir < 0) progress = 1 - progress;
+ $('.boxlistcontent', container).css('top', (title.outerHeight() + height * progress) + 'px');
+ },
+ complete: function() {
+ box.toggleClass('expanded');
+ if (box.is(':visible')) {
+ box.find('input[type=text]').focus();
+ }
+ else {
+ $('a.reset', box).click();
+ }
+ // TODO: save state in cookie
+ }
+ });
+
+ return false;
+ });
}
};
@@ -758,6 +782,8 @@ function rcube_layer(id, attributes)
/**
* Scroller
+ *
+ * @deprecated Use treelist widget
*/
function rcmail_scroller(list, top, bottom)
{
@@ -800,7 +826,7 @@ function iframe_events()
// this==iframe
try {
var doc = this.contentDocument ? this.contentDocument : this.contentWindow ? this.contentWindow.document : null;
- rcube_event.add_listener({ element: doc, object:rcmail_ui, method:'body_mouseup', event:'mouseup' });
+ $(doc).mouseup(function(e) { rcmail_ui.body_mouseup(e); });
}
catch (e) {
// catch possible "Permission denied" error in IE
@@ -886,6 +912,18 @@ function fit_string_to_size(str, elem, len)
function update_quota(data)
{
percent_indicator(rcmail.gui_objects.quotadisplay, data);
+
+ if (data.table) {
+ var menu = $('#quotamenu');
+
+ if (!menu.length)
+ menu = $('<div id="quotamenu" class="popupmenu">').appendTo($('body'));
+
+ menu.html(data.table);
+ $('#quotaimg').css('cursor', 'pointer').off('click').on('click', function(e) {
+ return rcmail.command('menu-open', 'quotamenu', e.target, e);
+ });
+ }
};
// percent (quota) indicator
@@ -953,18 +991,16 @@ function percent_indicator(obj, data)
};
// Optional parameters used by TinyMCE
-var rcmail_editor_settings = {
- skin: "default", // "default", "o2k7"
- skin_variant: "" // "", "silver", "black"
-};
+var rcmail_editor_settings = {};
var rcmail_ui;
function rcube_init_mail_ui()
{
rcmail_ui = new rcube_mail_ui();
- rcube_event.add_listener({ object:rcmail_ui, method:'body_mouseup', event:'mouseup' });
- rcube_event.add_listener({ object:rcmail_ui, method:'body_keydown', event:'keydown' });
+
+ $(document.body).mouseup(function(e) { rcmail_ui.body_mouseup(e); })
+ .mousedown(function(e) { rcmail_ui.body_keydown(e); });
rcmail.addEventListener('init', function() {
if (rcmail.env.quota_content)
@@ -972,23 +1008,22 @@ function rcube_init_mail_ui()
rcmail.addEventListener('setquota', update_quota);
$('iframe').load(iframe_events)
- .contents().mouseup(function(e){rcmail_ui.body_mouseup(e)});
+ .contents().mouseup(function(e) { rcmail_ui.body_mouseup(e); });
if (rcmail.env.task == 'mail') {
- rcmail.addEventListener('enable-command', 'enable_command', rcmail_ui);
- rcmail.addEventListener('menu-open', 'menu_open', rcmail_ui);
- rcmail.addEventListener('menu-save', 'menu_save', rcmail_ui);
- rcmail.addEventListener('aftersend-attachment', 'uploadmenu', rcmail_ui);
- rcmail.addEventListener('aftertoggle-editor', 'resize_compose_body_ev', rcmail_ui);
- rcmail.gui_object('dragmenu', 'dragmenu');
+ rcmail.addEventListener('enable-command', 'enable_command', rcmail_ui)
+ .addEventListener('menu-open', 'menu_open', rcmail_ui)
+ .addEventListener('aftersend-attachment', 'uploadmenu', rcmail_ui)
+ .addEventListener('aftertoggle-editor', 'resize_compose_body_ev', rcmail_ui)
+ .gui_object('dragmenu', 'dragmenu');
if (rcmail.gui_objects.mailboxlist) {
rcmail.treelist.addEventListener('expand', rcube_render_mailboxlist);
- rcmail.addEventListener('responseaftermark', rcube_render_mailboxlist);
- rcmail.addEventListener('responseaftergetunread', rcube_render_mailboxlist);
- rcmail.addEventListener('responseaftercheck-recent', rcube_render_mailboxlist);
- rcmail.addEventListener('responseafterrefresh', rcube_render_mailboxlist);
- rcmail.addEventListener('afterimport-messages', function(){ rcmail_ui.show_popup('uploadform', false); });
+ rcmail.addEventListener('responseaftermark', rcube_render_mailboxlist)
+ .addEventListener('responseaftergetunread', rcube_render_mailboxlist)
+ .addEventListener('responseaftercheck-recent', rcube_render_mailboxlist)
+ .addEventListener('responseafterrefresh', rcube_render_mailboxlist)
+ .addEventListener('afterimport-messages', function(){ rcmail_ui.show_popup('uploadform', false); });
}
if (rcmail.env.action == 'compose')
@@ -996,17 +1031,22 @@ function rcube_init_mail_ui()
else if (rcmail.env.action == 'show' || rcmail.env.action == 'preview')
// add menu link for each attachment
$('#attachment-list > li[id^="attach"]').each(function() {
- $(this).append($('<a class="drop"></a>').click(function() { rcmail_ui.show_attachmentmenu(this); }));
+ $(this).append($('<a class="drop"></a>').bind('click keypress', function(e) {
+ if (e.type != 'keypress' || e.which == 13) {
+ rcmail_ui.show_attachmentmenu(this, e);
+ return false;
+ }
+ }));
});
}
else if (rcmail.env.task == 'addressbook') {
- rcmail.addEventListener('afterupload-photo', function(){ rcmail_ui.show_popup('uploadform', false); });
-
- rcmail.gui_object('dragmenu', 'dragmenu');
+ rcmail.addEventListener('afterupload-photo', function(){ rcmail_ui.show_popup('uploadform', false); })
+ .gui_object('dragmenu', 'dragmenu');
}
else if (rcmail.env.task == 'settings') {
- if (rcmail.gui_objects.subscriptionlist)
- new rcmail_scroller('#folderlist-content', '#folderlist-title', '#folderlist-footer');
+ if (rcmail.env.action == 'folders') {
+ rcmail_ui.folder_search_init($('#folder-manager'));
+ }
}
});
}