| | |
| | | // @license http://creativecommons.org/publicdomain/zero/1.0/legalcode CC0 |
| | | |
| | | /** |
| | | * Roundcube functions for default skin interface |
| | | * |
| | |
| | | * by keeping credits to the original autors in the README file. |
| | | * See http://creativecommons.org/licenses/by-sa/3.0/ for details. |
| | | */ |
| | | |
| | | |
| | | function rcube_mail_ui() |
| | | { |
| | |
| | | this.show_popup = show_popup; |
| | | this.add_popup = add_popup; |
| | | this.set_searchmod = set_searchmod; |
| | | this.set_searchscope = set_searchscope; |
| | | this.show_uploadform = show_uploadform; |
| | | this.show_header_row = show_header_row; |
| | | this.hide_header_row = hide_header_row; |
| | |
| | | |
| | | /*** mail task ***/ |
| | | if (rcmail.env.task == 'mail') { |
| | | rcmail.addEventListener('menu-open', menu_open); |
| | | rcmail.addEventListener('menu-save', menu_save); |
| | | rcmail.addEventListener('responseafterlist', function(e){ switch_view_mode(rcmail.env.threading ? 'thread' : 'list') }); |
| | | rcmail.addEventListener('menu-open', menu_open) |
| | | .addEventListener('menu-save', menu_save) |
| | | .addEventListener('responseafterlist', function(e){ switch_view_mode(rcmail.env.threading ? 'thread' : 'list', true) }) |
| | | .addEventListener('responseaftersearch', function(e){ switch_view_mode(rcmail.env.threading ? 'thread' : 'list', true) }); |
| | | |
| | | var dragmenu = $('#dragmessagemenu'); |
| | | if (dragmenu.length) { |
| | |
| | | } |
| | | |
| | | 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(); }); |
| | | rcmail.addEventListener('enable-command', enable_command) |
| | | .addEventListener('aftershow-headers', function() { layout_messageview(); }) |
| | | .addEventListener('afterhide-headers', function() { layout_messageview(); }); |
| | | $('#previewheaderstoggle').click(function(e){ toggle_preview_headers(); return false }); |
| | | |
| | | // add menu link for each attachment |
| | |
| | | } |
| | | } |
| | | else if (rcmail.env.action == 'compose') { |
| | | rcmail.addEventListener('aftertoggle-editor', function(e){ |
| | | window.setTimeout(function(){ layout_composeview() }, 200); |
| | | if (e && e.mode) |
| | | $("select[name='editorSelector']").val(e.mode); |
| | | }); |
| | | rcmail.addEventListener('aftersend-attachment', show_uploadform); |
| | | rcmail.addEventListener('add-recipient', function(p){ show_header_row(p.field, true); }); |
| | | rcmail.addEventListener('aftersend-attachment', show_uploadform) |
| | | .addEventListener('add-recipient', function(p){ show_header_row(p.field, true); }) |
| | | .addEventListener('aftertoggle-editor', function(e){ |
| | | window.setTimeout(function(){ layout_composeview() }, 200); |
| | | if (e && e.mode) |
| | | $("select[name='editorSelector']").val(e.mode); |
| | | }); |
| | | |
| | | // Show input elements with non-empty value |
| | | var f, v, field, fields = ['cc', 'bcc', 'replyto', 'followupto']; |
| | |
| | | if (previewframe) |
| | | mailviewsplit.init(); |
| | | |
| | | 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); |
| | | rcmail.addEventListener('setquota', update_quota) |
| | | .addEventListener('enable-command', enable_command) |
| | | .addEventListener('afterimport-messages', show_uploadform); |
| | | } |
| | | else if (rcmail.env.action == 'get') { |
| | | new rcube_splitter({ id:'mailpartsplitterv', p1:'#messagepartheader', p2:'#messagepartcontainer', |
| | |
| | | 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 == 'responses') { |
| | | new rcube_splitter({ id:'responseviewsplitter', 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') { |
| | | rcmail.addEventListener('afterupload-photo', show_uploadform); |
| | | rcmail.addEventListener('beforepushgroup', push_contactgroup); |
| | | rcmail.addEventListener('beforepopgroup', pop_contactgroup); |
| | | rcmail.addEventListener('afterupload-photo', show_uploadform) |
| | | .addEventListener('beforepushgroup', push_contactgroup) |
| | | .addEventListener('beforepopgroup', pop_contactgroup); |
| | | |
| | | if (rcmail.env.action == '') { |
| | | new rcube_splitter({ id:'addressviewsplitterd', p1:'#addressview-left', p2:'#addressview-right', |
| | | orientation:'v', relative:true, start:226, min:150, size:12, render:resize_leftcol }).init(); |
| | | new rcube_splitter({ id:'addressviewsplitter', p1:'#addresslist', p2:'#contacts-box', |
| | | orientation:'v', relative:true, start:286, min:270, size:12 }).init(); |
| | | |
| | | new rcube_scroller('#directorylist-content', '#directorylist-header', '#directorylist-footer'); |
| | | } |
| | | |
| | | var dragmenu = $('#dragcontactmenu'); |
| | |
| | | }); |
| | | |
| | | // set min-width to show all toolbar buttons |
| | | var screen = $('body > div.minwidth'); |
| | | var screen = $('body.minwidth'); |
| | | if (screen.length) { |
| | | screen.css('min-width', $('.toolbar').width() + $('#quicksearchbar').width() + $('#searchfilter').width() + 30); |
| | | } |
| | |
| | | config = popupconfig[id]; |
| | | if (obj.is(':visible') |
| | | && target.id != id+'link' |
| | | && target != obj.get(0) // check if scroll bar was clicked (#1489832) |
| | | && !config.toggle |
| | | && (!config.editable || !target_overlaps(target, obj.get(0))) |
| | | && (!config.sticky || !rcube_mouse_is_over(e, obj.get(0))) |
| | |
| | | |
| | | obj[show?'show':'hide'](); |
| | | |
| | | // hide drop-down elements on buggy browsers |
| | | if (bw.ie6 && config.overlap) { |
| | | $('select').css('visibility', show?'hidden':'inherit'); |
| | | $('select', obj).css('visibility', 'inherit'); |
| | | } |
| | | |
| | | return show; |
| | | } |
| | | |
| | |
| | | /** |
| | | * |
| | | */ |
| | | function switch_view_mode(mode) |
| | | function switch_view_mode(mode, force) |
| | | { |
| | | if (rcmail.env.threading != (mode == 'thread')) |
| | | rcmail.set_list_options(null, undefined, undefined, mode == 'thread' ? 1 : 0); |
| | | |
| | | $('#maillistmode, #mailthreadmode').removeClass('selected'); |
| | | $('#mail'+mode+'mode').addClass('selected'); |
| | | if (force || !$('#mail'+mode+'mode').hasClass('disabled')) { |
| | | $('#maillistmode, #mailthreadmode').removeClass('selected'); |
| | | $('#mail'+mode+'mode').addClass('selected'); |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | obj = popups['searchmenu'], |
| | | list = $('input:checkbox[name="s_mods[]"]', obj), |
| | | mbox = rcmail.env.mailbox, |
| | | mods = rcmail.env.search_mods; |
| | | mods = rcmail.env.search_mods, |
| | | scope = rcmail.env.search_scope || 'base'; |
| | | |
| | | if (rcmail.env.task == 'mail') { |
| | | if (scope == 'all') |
| | | mbox = '*'; |
| | | mods = mods[mbox] ? mods[mbox] : mods['*']; |
| | | all = 'text'; |
| | | $('input:radio[name="s_scope"]').prop('checked', false).filter('#s_scope_'+scope).prop('checked', true); |
| | | } |
| | | else { |
| | | all = '*'; |
| | |
| | | |
| | | // set checkboxes |
| | | $('input[name="list_col[]"]').each(function() { |
| | | $(this).prop('checked', $.inArray(this.value, rcmail.env.coltypes) != -1); |
| | | $(this).prop('checked', $.inArray(this.value, rcmail.env.listcols) != -1); |
| | | }); |
| | | |
| | | $dialog.dialog({ |
| | |
| | | { |
| | | var all, m, task = rcmail.env.task, |
| | | mods = rcmail.env.search_mods, |
| | | mbox = rcmail.env.mailbox; |
| | | mbox = rcmail.env.mailbox, |
| | | scope = $('input[name="s_scope"]:checked').val(); |
| | | |
| | | if (scope == 'all') |
| | | mbox = '*'; |
| | | |
| | | if (!mods) |
| | | mods = {}; |
| | |
| | | m[elem.value] = 1; |
| | | |
| | | // mark all fields |
| | | if (elem.value != all) |
| | | return; |
| | | if (elem.value == all) { |
| | | $('input:checkbox[name="s_mods[]"]').map(function() { |
| | | if (this == elem) |
| | | return; |
| | | |
| | | $('input:checkbox[name="s_mods[]"]').map(function() { |
| | | if (this == elem) |
| | | return; |
| | | this.checked = true; |
| | | if (elem.checked) { |
| | | this.disabled = true; |
| | | delete m[this.value]; |
| | | } |
| | | else { |
| | | this.disabled = false; |
| | | m[this.value] = 1; |
| | | } |
| | | }); |
| | | } |
| | | |
| | | this.checked = true; |
| | | if (elem.checked) { |
| | | this.disabled = true; |
| | | delete m[this.value]; |
| | | } |
| | | else { |
| | | this.disabled = false; |
| | | m[this.value] = 1; |
| | | } |
| | | }); |
| | | rcmail.set_searchmods(m); |
| | | } |
| | | |
| | | function set_searchscope(elem) |
| | | { |
| | | rcmail.set_searchscope(elem.value); |
| | | } |
| | | |
| | | function push_contactgroup(p) |
| | |
| | | { |
| | | this.p1 = $(this.p.p1); |
| | | this.p2 = $(this.p.p2); |
| | | this.parent = this.p1.parent(); |
| | | |
| | | // check if referenced elements exist, otherwise abort |
| | | if (!this.p1.length || !this.p2.length) |
| | |
| | | .attr('id', this.id) |
| | | .attr('unselectable', 'on') |
| | | .addClass('splitter ' + (this.horizontal ? 'splitter-h' : 'splitter-v')) |
| | | .appendTo(this.p1.parent()) |
| | | .appendTo(this.parent) |
| | | .bind('mousedown', onDragStart); |
| | | |
| | | if (this.horizontal) { |
| | |
| | | this.p2.css('top', Math.ceil(this.pos + this.halfsize + 2) + 'px'); |
| | | this.handle.css('top', Math.round(this.pos - this.halfsize + this.offset)+'px'); |
| | | if (bw.ie) { |
| | | var new_height = parseInt(this.p2.parent().outerHeight(), 10) - parseInt(this.p2.css('top'), 10) - (bw.ie8 ? 2 : 0); |
| | | var new_height = parseInt(this.parent.outerHeight(), 10) - parseInt(this.p2.css('top'), 10) - (bw.ie8 ? 2 : 0); |
| | | this.p2.css('height', (new_height > 0 ? new_height : 0) + 'px'); |
| | | } |
| | | } |
| | |
| | | this.p2.css('left', Math.ceil(this.pos + this.halfsize) + 'px'); |
| | | this.handle.css('left', Math.round(this.pos - this.halfsize + this.offset + 3)+'px'); |
| | | if (bw.ie) { |
| | | var new_width = parseInt(this.p2.parent().outerWidth(), 10) - parseInt(this.p2.css('left'), 10) ; |
| | | var new_width = parseInt(this.parent.outerWidth(), 10) - parseInt(this.p2.css('left'), 10) ; |
| | | this.p2.css('width', (new_width > 0 ? new_width : 0) + 'px'); |
| | | } |
| | | } |
| | |
| | | var pos = rcube_event.get_mouse_pos(e); |
| | | |
| | | if (me.relative) { |
| | | var parent = me.p1.parent().offset(); |
| | | var parent = me.parent.offset(); |
| | | pos.x -= parent.left; |
| | | pos.y -= parent.top; |
| | | } |
| | |
| | | if (me.horizontal) { |
| | | if (((pos.y - me.halfsize) > me.p1pos.top) && ((pos.y + me.halfsize) < (me.p2pos.top + me.p2.outerHeight()))) { |
| | | me.pos = Math.max(me.min, pos.y - me.offset); |
| | | if (me.pos > me.min) |
| | | me.pos = Math.min(me.pos, me.parent.height() - me.min); |
| | | |
| | | me.resize(); |
| | | } |
| | | } |
| | | else { |
| | | if (((pos.x - me.halfsize) > me.p1pos.left) && ((pos.x + me.halfsize) < (me.p2pos.left + me.p2.outerWidth()))) { |
| | | me.pos = Math.max(me.min, pos.x - me.offset); |
| | | if (me.pos > me.min) |
| | | me.pos = Math.min(me.pos, me.parent.width() - me.min); |
| | | |
| | | me.resize(); |
| | | } |
| | | } |
| | |
| | | function onResize(e) |
| | | { |
| | | if (me.horizontal) { |
| | | var new_height = parseInt(me.p2.parent().outerHeight(), 10) - parseInt(me.p2[0].style.top, 10) - (bw.ie8 ? 2 : 0); |
| | | var new_height = parseInt(me.parent.outerHeight(), 10) - parseInt(me.p2[0].style.top, 10) - (bw.ie8 ? 2 : 0); |
| | | me.p2.css('height', (new_height > 0 ? new_height : 0) +'px'); |
| | | } |
| | | else { |
| | | var new_width = parseInt(me.p2.parent().outerWidth(), 10) - parseInt(me.p2[0].style.left, 10); |
| | | var new_width = parseInt(me.parent.outerWidth(), 10) - parseInt(me.p2[0].style.left, 10); |
| | | me.p2.css('width', (new_width > 0 ? new_width : 0) + 'px'); |
| | | } |
| | | }; |
| | |
| | | { |
| | | return rcube_splitter._instances[id]; |
| | | }; |
| | | |
| | | // @license-end |