| | |
| | | /** |
| | | * Roundcube functions for default skin interface |
| | | * |
| | | * Copyright (c) 2011, The Roundcube Dev Team |
| | | * Copyright (c) 2013, The Roundcube Dev Team |
| | | * |
| | | * The contents are subject to the Creative Commons Attribution-ShareAlike |
| | | * License. It is allowed to copy, distribute, transmit and to adapt the work |
| | |
| | | var popupconfig = { |
| | | forwardmenu: { editable:1 }, |
| | | searchmenu: { editable:1, callback:searchmenu }, |
| | | attachmentmenu: { }, |
| | | listoptions: { editable:1 }, |
| | | dragmessagemenu: { sticky:1 }, |
| | | groupmenu: { above:1 }, |
| | |
| | | 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; |
| | | |
| | | |
| | | // set minimal mode on small screens (don't wait for document.ready) |
| | | if (window.$ && document.body) { |
| | | var minmode = rcmail.get_cookie('minimalmode'); |
| | | if (parseInt(minmode) || (minmode === null && $(window).height() < 850)) { |
| | | $(document.body).addClass('minimal'); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | |
| | | { |
| | | rcmail.addEventListener('message', message_displayed); |
| | | |
| | | /*** prepare minmode functions ***/ |
| | | $('#taskbar a').each(function(i,elem){ |
| | | $(elem).append('<span class="tooltip">' + $('.button-inner', this).html() + '</span>') |
| | | }); |
| | | |
| | | $('#taskbar .minmodetoggle').click(function(e){ |
| | | var ismin = $(document.body).toggleClass('minimal').hasClass('minimal'); |
| | | rcmail.set_cookie('minimalmode', ismin?1:0); |
| | | $(window).resize(); |
| | | }); |
| | | |
| | | /*** mail task ***/ |
| | | if (rcmail.env.task == 'mail') { |
| | | rcmail.addEventListener('menu-open', show_listoptions); |
| | | rcmail.addEventListener('menu-save', save_listoptions); |
| | | 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') }); |
| | | |
| | | var dragmenu = $('#dragmessagemenu'); |
| | |
| | | rcmail.addEventListener('aftershow-headers', function() { layout_messageview(); }); |
| | | rcmail.addEventListener('afterhide-headers', function() { layout_messageview(); }); |
| | | $('#previewheaderstoggle').click(function(e){ toggle_preview_headers(this); return false }); |
| | | |
| | | // add menu link for each attachment |
| | | $('#attachment-list > li').each(function() { |
| | | $(this).append($('<a class="drop">').click(function() { attachmentmenu(this); })); |
| | | }); |
| | | } |
| | | else if (rcmail.env.action == 'compose') { |
| | | rcmail.addEventListener('aftertoggle-editor', function(){ window.setTimeout(function(){ layout_composeview() }, 200); }); |
| | |
| | | }).css('cursor', 'pointer'); |
| | | |
| | | // toggle compose options if opened in new window and they were visible before |
| | | if (window.opener && opener.rcmail && opener.rcmail.env.action == 'compose' && $('#composeoptionstoggle', opener.document).hasClass('remove')) |
| | | var opener_rc = rcmail.opener(); |
| | | if (opener_rc && opener_rc.env.action == 'compose' && $('#composeoptionstoggle', opener.document).hasClass('remove')) |
| | | $('#composeoptionstoggle').click(); |
| | | |
| | | new rcube_splitter({ id:'composesplitterv', p1:'#composeview-left', p2:'#composeview-right', |
| | |
| | | /** |
| | | * Update UI on window resize |
| | | */ |
| | | function resize() |
| | | function resize(e) |
| | | { |
| | | if (rcmail.env.task == 'mail') { |
| | | if (rcmail.env.action == 'show' || rcmail.env.action == 'preview') |
| | | layout_messageview(); |
| | | else if (rcmail.env.action == 'compose') |
| | | layout_composeview(); |
| | | } |
| | | // resize in intervals to prevent lags and double onresize calls in Chrome (#1489005) |
| | | var interval = e ? 10 : 0; |
| | | |
| | | // 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 (rcmail.resize_timeout) |
| | | window.clearTimeout(rcmail.resize_timeout); |
| | | |
| | | if (overflow != floating) { |
| | | var action = overflow ? 'addClass' : 'removeClass'; |
| | | footer[action]('floating'); |
| | | body[action]('floatingbuttons'); |
| | | rcmail.resize_timeout = window.setTimeout(function() { |
| | | if (rcmail.env.task == 'mail') { |
| | | if (rcmail.env.action == 'show' || rcmail.env.action == 'preview') |
| | | layout_messageview(); |
| | | else if (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'); |
| | | } |
| | | }); |
| | | }, interval); |
| | | } |
| | | |
| | | /** |
| | |
| | | |
| | | |
| | | /** |
| | | * 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 |
| | | */ |
| | | function show_popup(popup, show, config) |
| | | { |
| | | // 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]; |
| | |
| | | { |
| | | var obj = popups[popup], |
| | | config = popupconfig[popup], |
| | | ref = $('#'+popup+'link'), |
| | | ref = $(config.link ? config.link : '#'+popup+'link'), |
| | | above = config.above; |
| | | |
| | | if (!obj) { |
| | |
| | | else if (config.toggle && show && obj.is(':visible')) |
| | | show = false; |
| | | |
| | | if (show && ref) { |
| | | if (show && ref.length) { |
| | | var parent = ref.parent(), |
| | | win = $(window), |
| | | pos; |
| | |
| | | |
| | | /**** popup callbacks ****/ |
| | | |
| | | function menu_open(p) |
| | | { |
| | | if (p && p.props && p.props.menu == 'attachmentmenu') |
| | | show_popupmenu('attachmentmenu'); |
| | | else |
| | | show_listoptions(); |
| | | } |
| | | |
| | | function menu_save(prop) |
| | | { |
| | | save_listoptions(); |
| | | } |
| | | |
| | | function searchmenu(show) |
| | | { |
| | | if (show && rcmail.env.search_mods) { |
| | |
| | | } |
| | | } |
| | | |
| | | function attachmentmenu(elem) |
| | | { |
| | | var id = elem.parentNode.id.replace(/^attach/, ''); |
| | | |
| | | $('#attachmenuopen').unbind('click').attr('onclick', '').click(function(e) { |
| | | return rcmail.command('open-attachment', id, this); |
| | | }); |
| | | |
| | | $('#attachmenudownload').unbind('click').attr('onclick', '').click(function() { |
| | | rcmail.command('download-attachment', id, this); |
| | | }); |
| | | |
| | | popupconfig.attachmentmenu.link = elem; |
| | | rcmail.command('menu-open', {menu: 'attachmentmenu', id: id}); |
| | | } |
| | | |
| | | function spellmenu(show) |
| | | { |
| | |
| | | this.delay = 500; |
| | | |
| | | this.top |
| | | .mouseenter(function() { ref.ts = window.setTimeout(function() { ref.scroll('down'); }, ref.delay); }) |
| | | .mouseenter(function() { if (rcmail.drag_active) ref.ts = window.setTimeout(function() { ref.scroll('down'); }, ref.delay); }) |
| | | .mouseout(function() { if (ref.ts) window.clearTimeout(ref.ts); }); |
| | | |
| | | this.bottom |
| | | .mouseenter(function() { ref.ts = window.setTimeout(function() { ref.scroll('up'); }, ref.delay); }) |
| | | .mouseenter(function() { if (rcmail.drag_active) ref.ts = window.setTimeout(function() { ref.scroll('up'); }, ref.delay); }) |
| | | .mouseout(function() { if (ref.ts) window.clearTimeout(ref.ts); }); |
| | | |
| | | this.scroll = function(dir) |