| | |
| | | this.env.blankpage = 'program/blank.gif'; |
| | | |
| | | // set jQuery ajax options |
| | | jQuery.ajaxSetup({ cache:false, |
| | | jQuery.ajaxSetup({ |
| | | cache:false, |
| | | error:function(request, status, err){ ref.http_error(request, status, err); }, |
| | | beforeSend:function(xmlhttp){ xmlhttp.setRequestHeader('X-RoundCube-Request', ref.env.request_token); } |
| | | }); |
| | |
| | | this.task = this.env.task; |
| | | |
| | | // check browser |
| | | if (!bw.dom || !bw.xmlhttp_test()) |
| | | { |
| | | if (!bw.dom || !bw.xmlhttp_test()) { |
| | | this.goto_url('error', '_code=0x199'); |
| | | return; |
| | | } |
| | |
| | | this.message_list.addEventListener('dragmove', function(e){ p.drag_move(e); }); |
| | | this.message_list.addEventListener('dragend', function(e){ p.drag_end(e); }); |
| | | this.message_list.addEventListener('expandcollapse', function(e){ p.msglist_expand(e); }); |
| | | |
| | | document.onmouseup = function(e){ return p.doc_mouse_up(e); }; |
| | | this.gui_objects.messagelist.parentNode.onmousedown = function(e){ return p.click_on_list(e); }; |
| | | |
| | | this.set_message_coltypes(this.env.coltypes); |
| | | this.message_list.init(); |
| | | this.enable_command('toggle_status', 'toggle_flag', 'menu-open', 'menu-save', true); |
| | | |
| | | if (this.gui_objects.mailcontframe) |
| | | this.gui_objects.mailcontframe.onmousedown = function(e){ return p.click_on_list(e); }; |
| | | else |
| | | this.message_list.focus(); |
| | | |
| | | // load messages |
| | | if (this.env.messagecount) |
| | | this.command('list'); |
| | | } |
| | | |
| | | if (this.env.search_text != null && document.getElementById('quicksearchbox') != null) |
| | | document.getElementById('quicksearchbox').value = this.env.search_text; |
| | | |
| | | if (this.env.action=='show' || this.env.action=='preview') |
| | | { |
| | | this.enable_command('show', 'reply', 'reply-all', 'forward', 'moveto', 'copy', 'delete', |
| | | 'open', 'mark', 'edit', 'viewsource', 'download', 'print', 'load-attachment', 'load-headers', true); |
| | | |
| | | if (this.env.next_uid) |
| | | { |
| | | this.enable_command('nextmessage', true); |
| | | this.enable_command('lastmessage', true); |
| | | if (this.gui_objects.qsearchbox) { |
| | | if (this.env.search_text != null) { |
| | | this.gui_objects.qsearchbox.value = this.env.search_text; |
| | | } |
| | | if (this.env.prev_uid) |
| | | { |
| | | this.enable_command('previousmessage', true); |
| | | this.enable_command('firstmessage', true); |
| | | } |
| | | |
| | | if (this.env.blockedobjects) |
| | | { |
| | | if (this.gui_objects.remoteobjectsmsg) |
| | | this.gui_objects.remoteobjectsmsg.style.display = 'block'; |
| | | this.enable_command('load-images', 'always-load', true); |
| | | } |
| | | $(this.gui_objects.qsearchbox).focusin(function() { rcmail.message_list.blur(); }); |
| | | } |
| | | |
| | | if (this.env.trash_mailbox && this.env.mailbox != this.env.trash_mailbox) |
| | | this.set_alttext('delete', 'movemessagetotrash'); |
| | | |
| | | // make preview/message frame visible |
| | | if (this.env.action == 'preview' && this.env.framed && parent.rcmail) |
| | | { |
| | | this.enable_command('compose', 'add-contact', false); |
| | | parent.rcmail.show_contentframe(true); |
| | | } |
| | | |
| | | if (this.env.action=='compose') |
| | | { |
| | | if (this.env.action=='show' || this.env.action=='preview') { |
| | | this.enable_command('show', 'reply', 'reply-all', 'forward', 'moveto', 'copy', 'delete', |
| | | 'open', 'mark', 'edit', 'viewsource', 'download', 'print', 'load-attachment', 'load-headers', true); |
| | | |
| | | if (this.env.next_uid) { |
| | | this.enable_command('nextmessage', true); |
| | | this.enable_command('lastmessage', true); |
| | | } |
| | | if (this.env.prev_uid) { |
| | | this.enable_command('previousmessage', true); |
| | | this.enable_command('firstmessage', true); |
| | | } |
| | | |
| | | if (this.env.blockedobjects) { |
| | | if (this.gui_objects.remoteobjectsmsg) |
| | | this.gui_objects.remoteobjectsmsg.style.display = 'block'; |
| | | this.enable_command('load-images', 'always-load', true); |
| | | } |
| | | |
| | | // make preview/message frame visible |
| | | if (this.env.action == 'preview' && this.env.framed && parent.rcmail) { |
| | | this.enable_command('compose', 'add-contact', false); |
| | | parent.rcmail.show_contentframe(true); |
| | | } |
| | | } |
| | | else if (this.env.action == 'compose') { |
| | | this.enable_command('add-attachment', 'send-attachment', 'remove-attachment', 'send', true); |
| | | if (this.env.spellcheck) |
| | | { |
| | | |
| | | if (this.env.spellcheck) { |
| | | this.env.spellcheck.spelling_state_observer = function(s){ ref.set_spellcheck_state(s); }; |
| | | this.set_spellcheck_state('ready'); |
| | | if ($("input[name='_is_html']").val() == '1') |
| | | this.display_spellcheck_controls(false); |
| | | } |
| | | |
| | | if (this.env.drafts_mailbox) |
| | | this.enable_command('savedraft', true); |
| | | |
| | |
| | | // init message compose form |
| | | this.init_messageform(); |
| | | } |
| | | // show printing dialog |
| | | else if (this.env.action == 'print') |
| | | window.print(); |
| | | |
| | | if (this.env.messagecount) { |
| | | this.enable_command('select-all', 'select-none', 'expunge', true); |
| | | this.enable_command('expand-all', 'expand-unread', 'collapse-all', this.env.threading); |
| | | } |
| | | } |
| | | |
| | | if (this.purge_mailbox_test()) |
| | | this.enable_command('purge', true); |
| | | |
| | | this.set_page_buttons(); |
| | | |
| | | // show printing dialog |
| | | if (this.env.action=='print') |
| | | window.print(); |
| | | |
| | | // get unread count for each mailbox |
| | | if (this.gui_objects.mailboxlist) |
| | | { |
| | | if (this.gui_objects.mailboxlist) { |
| | | this.env.unread_counts = {}; |
| | | this.gui_objects.folderlist = this.gui_objects.mailboxlist; |
| | | this.http_request('getunread', ''); |
| | | } |
| | | } |
| | | |
| | | // ask user to send MDN |
| | | if (this.env.mdn_request && this.env.uid) |
| | | { |
| | | if (this.env.mdn_request && this.env.uid) { |
| | | var mdnurl = '_uid='+this.env.uid+'&_mbox='+urlencode(this.env.mailbox); |
| | | if (confirm(this.get_label('mdnrequest'))) |
| | | this.http_post('sendmdn', mdnurl); |
| | | else |
| | | this.http_post('mark', mdnurl+'&_flag=mdnsent'); |
| | | } |
| | | } |
| | | |
| | | break; |
| | | |
| | |
| | | if (this.env.cid) |
| | | this.contact_list.highlight_row(this.env.cid); |
| | | |
| | | if (this.gui_objects.contactslist.parentNode) |
| | | { |
| | | this.gui_objects.contactslist.parentNode.onmousedown = function(e){ return p.click_on_list(e); }; |
| | | document.onmouseup = function(e){ return p.doc_mouse_up(e); }; |
| | | this.gui_objects.contactslist.parentNode.onmousedown = function(e){ return p.click_on_list(e); }; |
| | | document.onmouseup = function(e){ return p.doc_mouse_up(e); }; |
| | | if (this.gui_objects.qsearchbox) { |
| | | $(this.gui_objects.qsearchbox).focusin(function() { rcmail.contact_list.blur(); }); |
| | | } |
| | | else |
| | | this.contact_list.focus(); |
| | | |
| | | //this.gui_objects.folderlist = this.gui_objects.contactslist; |
| | | } |
| | | |
| | | this.set_page_buttons(); |
| | |
| | | |
| | | // execute all foreign onload scripts |
| | | // @deprecated |
| | | for (var i=0; i<this.onloads.length; i++) |
| | | { |
| | | for (var i=0; i<this.onloads.length; i++) { |
| | | if (typeof(this.onloads[i]) == 'string') |
| | | eval(this.onloads[i]); |
| | | else if (typeof(this.onloads[i]) == 'function') |
| | |
| | | |
| | | case 'open': |
| | | var uid; |
| | | if (uid = this.get_single_uid()) |
| | | { |
| | | if (uid = this.get_single_uid()) { |
| | | obj.href = '?_task='+this.env.task+'&_action=show&_mbox='+urlencode(this.env.mailbox)+'&_uid='+uid; |
| | | return true; |
| | | } |
| | |
| | | |
| | | // misc list commands |
| | | case 'list': |
| | | if (this.task=='mail') |
| | | { |
| | | if (this.task=='mail') { |
| | | if (this.env.search_request<0 || (props != '' && (this.env.search_request && props != this.env.mailbox))) |
| | | this.reset_qsearch(); |
| | | |
| | |
| | | |
| | | if (this.env.trash_mailbox) |
| | | this.set_alttext('delete', this.env.mailbox != this.env.trash_mailbox ? 'movemessagetotrash' : 'deletemessage'); |
| | | } |
| | | else if (this.task=='addressbook') |
| | | { |
| | | } |
| | | else if (this.task=='addressbook') { |
| | | if (this.env.search_request<0 || (this.env.search_request && props != this.env.source)) |
| | | this.reset_qsearch(); |
| | | |
| | | this.list_contacts(props); |
| | | this.enable_command('add', 'import', (this.env.address_sources && !this.env.address_sources[props].readonly)); |
| | | } |
| | | this.enable_command('add', 'import', (this.env.address_sources && !this.env.address_sources[this.env.source].readonly)); |
| | | } |
| | | break; |
| | | |
| | | |
| | |
| | | |
| | | // common commands used in multiple tasks |
| | | case 'show': |
| | | if (this.task=='mail') |
| | | { |
| | | if (this.task=='mail') { |
| | | var uid = this.get_single_uid(); |
| | | if (uid && (!this.env.uid || uid != this.env.uid)) |
| | | { |
| | | if (uid && (!this.env.uid || uid != this.env.uid)) { |
| | | if (this.env.mailbox == this.env.drafts_mailbox) |
| | | this.goto_url('compose', '_draft_uid='+uid+'&_mbox='+urlencode(this.env.mailbox), true); |
| | | else |
| | | this.show_message(uid); |
| | | } |
| | | } |
| | | else if (this.task=='addressbook') |
| | | { |
| | | } |
| | | else if (this.task=='addressbook') { |
| | | var cid = props ? props : this.get_single_cid(); |
| | | if (cid && !(this.env.action=='show' && cid==this.env.cid)) |
| | | this.load_contact(cid, 'show'); |
| | | } |
| | | } |
| | | break; |
| | | |
| | | case 'add': |
| | | if (this.task=='addressbook') |
| | | this.load_contact(0, 'add'); |
| | | else if (this.task=='settings') |
| | | { |
| | | else if (this.task=='settings') { |
| | | this.identity_list.clear_selection(); |
| | | this.load_identity(0, 'add-identity'); |
| | | } |
| | | } |
| | | break; |
| | | |
| | | case 'edit': |
| | |
| | | var uid; |
| | | var flag = 'read'; |
| | | |
| | | if (props._row.uid) |
| | | { |
| | | if (props._row.uid) { |
| | | uid = props._row.uid; |
| | | |
| | | // toggle read/unread |
| | | if (this.message_list.rows[uid].deleted) { |
| | | flag = 'undelete'; |
| | | } else if (!this.message_list.rows[uid].unread) |
| | | flag = 'unread'; |
| | | } |
| | | else if (!this.message_list.rows[uid].unread) |
| | | flag = 'unread'; |
| | | } |
| | | |
| | | this.mark_message(flag, uid); |
| | | break; |
| | |
| | | var uid; |
| | | var flag = 'flagged'; |
| | | |
| | | if (props._row.uid) |
| | | { |
| | | if (props._row.uid) { |
| | | uid = props._row.uid; |
| | | // toggle flagged/unflagged |
| | | if (this.message_list.rows[uid].flagged) |
| | |
| | | var qstring = '_mbox='+urlencode(this.env.mailbox)+'&_uid='+this.env.uid+'&_part='+props.part; |
| | | |
| | | // open attachment in frame if it's of a supported mimetype |
| | | if (this.env.uid && props.mimetype && jQuery.inArray(props.mimetype, this.mimetypes)>=0) |
| | | { |
| | | if (this.env.uid && props.mimetype && jQuery.inArray(props.mimetype, this.mimetypes)>=0) { |
| | | if (props.mimetype == 'text/html') |
| | | qstring += '&_safe=1'; |
| | | this.attachment_win = window.open(this.env.comm_path+'&_action=get&'+qstring+'&_frame=1', 'rcubemailattachment'); |
| | | if (this.attachment_win) |
| | | { |
| | | if (this.attachment_win) { |
| | | window.setTimeout(function(){ ref.attachment_win.focus(); }, 10); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | this.goto_url('get', qstring+'&_download=1', false); |
| | | break; |
| | |
| | | case 'compose': |
| | | var url = this.env.comm_path+'&_action=compose'; |
| | | |
| | | if (this.task=='mail') |
| | | { |
| | | if (this.task=='mail') { |
| | | url += '&_mbox='+urlencode(this.env.mailbox); |
| | | |
| | | if (this.env.mailbox==this.env.drafts_mailbox) |
| | | { |
| | | if (this.env.mailbox==this.env.drafts_mailbox) { |
| | | var uid; |
| | | if (uid = this.get_single_uid()) |
| | | url += '&_draft_uid='+uid; |
| | |
| | | url += '&_to='+urlencode(props); |
| | | } |
| | | // modify url if we're in addressbook |
| | | else if (this.task=='addressbook') |
| | | { |
| | | else if (this.task=='addressbook') { |
| | | // switch to mail compose step directly |
| | | if (props && props.indexOf('@') > 0) |
| | | { |
| | | if (props && props.indexOf('@') > 0) { |
| | | url = this.get_task_url('mail', url); |
| | | this.redirect(url + '&_to='+urlencode(props)); |
| | | break; |
| | | } |
| | | } |
| | | |
| | | // use contact_id passed as command parameter |
| | | var a_cids = new Array(); |
| | | if (props) |
| | | a_cids[a_cids.length] = props; |
| | | // get selected contacts |
| | | else if (this.contact_list) |
| | | { |
| | | else if (this.contact_list) { |
| | | var selection = this.contact_list.get_selection(); |
| | | for (var n=0; n<selection.length; n++) |
| | | a_cids[a_cids.length] = selection[n]; |
| | | } |
| | | } |
| | | |
| | | if (a_cids.length) |
| | | this.http_request('mailto', '_cid='+urlencode(a_cids.join(','))+'&_source='+urlencode(this.env.source), true); |
| | | |
| | | break; |
| | | } |
| | | } |
| | | |
| | | // don't know if this is necessary... |
| | | url = url.replace(/&_framed=1/, ""); |
| | | url = url.replace(/&_framed=1/, ''); |
| | | |
| | | this.redirect(url); |
| | | break; |
| | |
| | | /********* event handling methods *********/ |
| | | /*********************************************************/ |
| | | |
| | | this.doc_mouse_up = function(e) |
| | | { |
| | | var model, list, li; |
| | | |
| | | if (this.message_list) { |
| | | if (!rcube_mouse_is_over(e, this.message_list.list)) |
| | | this.message_list.blur(); |
| | | list = this.message_list; |
| | | model = this.env.mailboxes; |
| | | } |
| | | else if (this.contact_list) { |
| | | if (!rcube_mouse_is_over(e, this.contact_list.list)) |
| | | this.contact_list.blur(); |
| | | list = this.contact_list; |
| | | model = this.env.contactfolders; |
| | | } |
| | | else if (this.ksearch_value) { |
| | | this.ksearch_blur(); |
| | | } |
| | | |
| | | // handle mouse release when dragging |
| | | if (this.drag_active && model && this.env.last_folder_target) { |
| | | var target = model[this.env.last_folder_target]; |
| | | |
| | | $(this.get_folder_li(this.env.last_folder_target)).removeClass('droptarget'); |
| | | this.env.last_folder_target = null; |
| | | list.draglayer.hide(); |
| | | |
| | | if (!this.drag_menu(e, target)) |
| | | this.command('moveto', target); |
| | | } |
| | | |
| | | // reset 'pressed' buttons |
| | | if (this.buttons_sel) { |
| | | for (var id in this.buttons_sel) |
| | | if (typeof id != 'function') |
| | | this.button_out(this.buttons_sel[id], id); |
| | | this.buttons_sel = {}; |
| | | } |
| | | }; |
| | | |
| | | this.drag_menu = function(e, target) |
| | | { |
| | | var modkey = rcube_event.get_modifier(e); |
| | |
| | | if (this.preview_timer) |
| | | clearTimeout(this.preview_timer); |
| | | |
| | | if (this.preview_read_timer) |
| | | clearTimeout(this.preview_read_timer); |
| | | |
| | | // save folderlist and folders location/sizes for droptarget calculation in drag_move() |
| | | if (this.gui_objects.folderlist && model) |
| | | { |
| | |
| | | && this.check_droptarget(k)) { |
| | | |
| | | li = this.get_folder_li(k); |
| | | div = $(li.getElementsByTagName("div")[0]); |
| | | div = $(li.getElementsByTagName('div')[0]); |
| | | |
| | | // if the folder is collapsed, expand it after 1sec and restart the drag & drop process. |
| | | if (div.hasClass('collapsed')) { |
| | |
| | | |
| | | this.folder_auto_expand = k; |
| | | this.folder_auto_timer = window.setTimeout(function() { |
| | | rcmail.command("collapse-folder", rcmail.folder_auto_expand); |
| | | rcmail.command('collapse-folder', rcmail.folder_auto_expand); |
| | | rcmail.drag_start(null); |
| | | }, 1000); |
| | | } else if (this.folder_auto_timer) { |
| | |
| | | }; |
| | | |
| | | this.collapse_folder = function(id) |
| | | { |
| | | var div; |
| | | if ((li = this.get_folder_li(id)) && |
| | | (div = $(li.getElementsByTagName("div")[0])) && |
| | | (div.hasClass('collapsed') || div.hasClass('expanded'))) |
| | | { |
| | | var ul = $(li.getElementsByTagName("ul")[0]); |
| | | if (div.hasClass('collapsed')) |
| | | { |
| | | ul.show(); |
| | | div.removeClass('collapsed').addClass('expanded'); |
| | | var reg = new RegExp('&'+urlencode(id)+'&'); |
| | | this.set_env('collapsed_folders', this.env.collapsed_folders.replace(reg, '')); |
| | | } |
| | | else |
| | | { |
| | | ul.hide(); |
| | | div.removeClass('expanded').addClass('collapsed'); |
| | | this.set_env('collapsed_folders', this.env.collapsed_folders+'&'+urlencode(id)+'&'); |
| | | { |
| | | var li = this.get_folder_li(id); |
| | | var div = $(li.getElementsByTagName('div')[0]); |
| | | |
| | | if (!div || (!div.hasClass('collapsed') && !div.hasClass('expanded'))) |
| | | return; |
| | | |
| | | var ul = $(li.getElementsByTagName('ul')[0]); |
| | | if (div.hasClass('collapsed')) { |
| | | ul.show(); |
| | | div.removeClass('collapsed').addClass('expanded'); |
| | | var reg = new RegExp('&'+urlencode(id)+'&'); |
| | | this.set_env('collapsed_folders', this.env.collapsed_folders.replace(reg, '')); |
| | | } |
| | | else { |
| | | ul.hide(); |
| | | div.removeClass('expanded').addClass('collapsed'); |
| | | this.set_env('collapsed_folders', this.env.collapsed_folders+'&'+urlencode(id)+'&'); |
| | | |
| | | // select parent folder if one of its childs is currently selected |
| | | if (this.env.mailbox.indexOf(id + this.env.delimiter) == 0) |
| | | this.command('list', id); |
| | | } |
| | | // select parent folder if one of its childs is currently selected |
| | | if (this.env.mailbox.indexOf(id + this.env.delimiter) == 0) |
| | | this.command('list', id); |
| | | } |
| | | |
| | | // Work around a bug in IE6 and IE7, see #1485309 |
| | | if ((bw.ie6 || bw.ie7) && |
| | | li.nextSibling && |
| | | (li.nextSibling.getElementsByTagName("ul").length>0) && |
| | | li.nextSibling.getElementsByTagName("ul")[0].style && |
| | | (li.nextSibling.getElementsByTagName("ul")[0].style.display!='none')) |
| | | { |
| | | li.nextSibling.getElementsByTagName("ul")[0].style.display = 'none'; |
| | | li.nextSibling.getElementsByTagName("ul")[0].style.display = ''; |
| | | } |
| | | |
| | | this.http_post('save-pref', '_name=collapsed_folders&_value='+urlencode(this.env.collapsed_folders)); |
| | | this.set_unread_count_display(id, false); |
| | | // Work around a bug in IE6 and IE7, see #1485309 |
| | | if (bw.ie6 || bw.ie7) { |
| | | var siblings = li.nextSibling ? li.nextSibling.getElementsByTagName('ul') : null; |
| | | if (siblings && siblings.length && (li = siblings[0]) && li.style && li.style.display != 'none') { |
| | | li.style.display = 'none'; |
| | | li.style.display = ''; |
| | | } |
| | | } |
| | | |
| | | this.http_post('save-pref', '_name=collapsed_folders&_value='+urlencode(this.env.collapsed_folders)); |
| | | this.set_unread_count_display(id, false); |
| | | }; |
| | | |
| | | this.doc_mouse_up = function(e) |
| | | { |
| | | var model, list, li; |
| | | |
| | | if (this.message_list) { |
| | | if (!rcube_mouse_is_over(e, this.message_list.list.parentNode)) |
| | | this.message_list.blur(); |
| | | else |
| | | this.message_list.focus(); |
| | | list = this.message_list; |
| | | model = this.env.mailboxes; |
| | | } |
| | | else if (this.contact_list) { |
| | | if (!rcube_mouse_is_over(e, this.contact_list.list.parentNode)) |
| | | this.contact_list.blur(); |
| | | else |
| | | this.contact_list.focus(); |
| | | list = this.contact_list; |
| | | model = this.env.contactfolders; |
| | | } |
| | | else if (this.ksearch_value) { |
| | | this.ksearch_blur(); |
| | | } |
| | | |
| | | // handle mouse release when dragging |
| | | if (this.drag_active && model && this.env.last_folder_target) { |
| | | var target = model[this.env.last_folder_target]; |
| | | |
| | | $(this.get_folder_li(this.env.last_folder_target)).removeClass('droptarget'); |
| | | this.env.last_folder_target = null; |
| | | list.draglayer.hide(); |
| | | |
| | | if (!this.drag_menu(e, target)) |
| | | this.command('moveto', target); |
| | | } |
| | | |
| | | // reset 'pressed' buttons |
| | | if (this.buttons_sel) { |
| | | for (var id in this.buttons_sel) |
| | | if (typeof id != 'function') |
| | | this.button_out(this.buttons_sel[id], id); |
| | | this.buttons_sel = {}; |
| | | } |
| | | }; |
| | | |
| | | this.click_on_list = function(e) |
| | | { |
| | |
| | | else if (this.contact_list) |
| | | this.contact_list.focus(); |
| | | |
| | | return rcube_event.get_button(e) == 2 ? true : rcube_event.cancel(e); |
| | | return true; |
| | | }; |
| | | |
| | | this.msglist_select = function(list) |
| | | { |
| | | if (this.preview_timer) |
| | | clearTimeout(this.preview_timer); |
| | | |
| | | if (this.preview_read_timer) |
| | | clearTimeout(this.preview_read_timer); |
| | | |
| | | var selected = list.get_single_selection() != null; |
| | | |
| | |
| | | { |
| | | if (this.preview_timer) |
| | | clearTimeout(this.preview_timer); |
| | | |
| | | if (this.preview_read_timer) |
| | | clearTimeout(this.preview_read_timer); |
| | | |
| | | var uid = list.get_single_selection(); |
| | | if (uid && this.env.mailbox == this.env.drafts_mailbox) |
| | |
| | | var url = '&_action='+action+'&_uid='+id+'&_mbox='+urlencode(this.env.mailbox)+add_url; |
| | | if (action == 'preview' && String(target.location.href).indexOf(url) >= 0) |
| | | this.show_contentframe(true); |
| | | else |
| | | { |
| | | else { |
| | | this.set_busy(true, 'loading'); |
| | | target.location.href = this.env.comm_path+url; |
| | | |
| | | // mark as read and change mbox unread counter |
| | | if (action == 'preview' && this.message_list && this.message_list.rows[id] && this.message_list.rows[id].unread) |
| | | { |
| | | this.set_message(id, 'unread', false); |
| | | this.update_thread_root(id, 'read'); |
| | | if (this.env.unread_counts[this.env.mailbox]) |
| | | { |
| | | this.env.unread_counts[this.env.mailbox] -= 1; |
| | | this.set_unread_count(this.env.mailbox, this.env.unread_counts[this.env.mailbox], this.env.mailbox == 'INBOX'); |
| | | if (action == 'preview' && this.message_list && this.message_list.rows[id] && this.message_list.rows[id].unread && this.env.preview_pane_mark_read >= 0) { |
| | | this.preview_read_timer = window.setTimeout(function() { |
| | | ref.set_message(id, 'unread', false); |
| | | ref.update_thread_root(id, 'read'); |
| | | if (ref.env.unread_counts[ref.env.mailbox]) { |
| | | ref.env.unread_counts[ref.env.mailbox] -= 1; |
| | | ref.set_unread_count(ref.env.mailbox, ref.env.unread_counts[ref.env.mailbox], ref.env.mailbox == 'INBOX'); |
| | | } |
| | | } |
| | | if (ref.env.preview_pane_mark_read > 0) |
| | | ref.http_post('mark', '_uid='+id+'&_flag=read'); |
| | | }, this.env.preview_pane_mark_read * 1000); |
| | | } |
| | | }; |
| | | } |
| | | }; |
| | | |
| | | this.show_contentframe = function(show) |
| | | { |
| | |
| | | this.init_address_input_events($("[name='_cc']")); |
| | | this.init_address_input_events($("[name='_bcc']")); |
| | | |
| | | if (!html_mode) |
| | | if (!html_mode) { |
| | | // add signature according to selected identity |
| | | // if we have HTML editor, signature is added in callback |
| | | if (input_from.attr('type') == 'select-one' && $("input[name='_draft_saveid']").val() == '') { |
| | | this.change_identity(input_from[0]); |
| | | } |
| | | this.set_caret_pos(input_message, this.env.top_posting ? 0 : $(input_message).val().length); |
| | | |
| | | // add signature according to selected identity |
| | | if (input_from.attr('type') == 'select-one' && $("input[name='_draft_saveid']").val() == '' |
| | | && !html_mode) { // if we have HTML editor, signature is added in callback |
| | | this.change_identity(input_from[0]); |
| | | } |
| | | else if (!html_mode) |
| | | this.set_caret_pos(input_message, this.env.top_posting ? 0 : $(input_message).val().length); |
| | | |
| | | if (input_to.val() == '') |
| | | input_to.focus(); |
| | |
| | | var input_message = $("[name='_message']"); |
| | | |
| | | // check sender (if have no identities) |
| | | if (input_from.attr('type') == 'text' && !rcube_check_email(input_from.val(), true)) |
| | | { |
| | | if (input_from.attr('type') == 'text' && !rcube_check_email(input_from.val(), true)) { |
| | | alert(this.get_label('nosenderwarning')); |
| | | input_from.focus(); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | // check for empty recipient |
| | | var recipients = input_to.val() ? input_to.val() : (input_cc.val() ? input_cc.val() : input_bcc.val()); |
| | | if (!rcube_check_email(recipients.replace(/^\s+/, '').replace(/[\s,;]+$/, ''), true)) |
| | | { |
| | | if (!rcube_check_email(recipients.replace(/^\s+/, '').replace(/[\s,;]+$/, ''), true)) { |
| | | alert(this.get_label('norecipientwarning')); |
| | | input_to.focus(); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | // check if all files has been uploaded |
| | | for (var key in this.env.attachments) { |
| | |
| | | this.stop_spellchecking(); |
| | | |
| | | $(this.env.spellcheck.spell_container).css('visibility', vis ? 'visible' : 'hidden'); |
| | | } |
| | | } |
| | | }; |
| | | |
| | | this.set_spellcheck_state = function(s) |
| | | { |
| | | { |
| | | this.spellcheck_ready = (s == 'ready' || s == 'no_error_found'); |
| | | this.enable_command('spellcheck', this.spellcheck_ready); |
| | | }; |
| | | }; |
| | | |
| | | this.set_draft_id = function(id) |
| | | { |
| | | { |
| | | $("input[name='_draft_saveid']").val(id); |
| | | }; |
| | | }; |
| | | |
| | | this.auto_save_start = function() |
| | | { |
| | | { |
| | | if (this.env.draft_autosave) |
| | | this.save_timer = self.setTimeout(function(){ ref.command("savedraft"); }, this.env.draft_autosave * 1000); |
| | | |
| | | // Unlock interface now that saving is complete |
| | | this.busy = false; |
| | | }; |
| | | }; |
| | | |
| | | this.compose_field_hash = function(save) |
| | | { |
| | | { |
| | | // check input fields |
| | | var value_to = $("[name='_to']").val(); |
| | | var value_cc = $("[name='_cc']").val(); |
| | |
| | | this.cmp_hash = str; |
| | | |
| | | return str; |
| | | }; |
| | | }; |
| | | |
| | | this.change_identity = function(obj, show_sig) |
| | | { |
| | |
| | | }; |
| | | |
| | | this.show_attachment_form = function(a) |
| | | { |
| | | { |
| | | if (!this.gui_objects.uploadbox) |
| | | return false; |
| | | |
| | | var elm, list; |
| | | if (elm = this.gui_objects.uploadbox) |
| | | { |
| | | if (a && (list = this.gui_objects.attachmentlist)) |
| | | { |
| | | if (elm = this.gui_objects.uploadbox) { |
| | | if (a && (list = this.gui_objects.attachmentlist)) { |
| | | var pos = $(list).offset(); |
| | | elm.style.top = (pos.top + list.offsetHeight + 10) + 'px'; |
| | | elm.style.left = pos.left + 'px'; |
| | | } |
| | | } |
| | | |
| | | $(elm).toggle(); |
| | | } |
| | | } |
| | | |
| | | // clear upload form |
| | | try { |
| | |
| | | catch(e){} // ignore errors |
| | | |
| | | return true; |
| | | }; |
| | | }; |
| | | |
| | | // upload attachment file |
| | | this.upload_file = function(form) |
| | | { |
| | | { |
| | | if (!form) |
| | | return false; |
| | | |
| | | // get file input fields |
| | | var send = false; |
| | | for (var n=0; n<form.elements.length; n++) |
| | | if (form.elements[n].type=='file' && form.elements[n].value) |
| | | { |
| | | if (form.elements[n].type=='file' && form.elements[n].value) { |
| | | send = true; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | // create hidden iframe and post upload form |
| | | if (send) |
| | | { |
| | | if (send) { |
| | | var ts = new Date().getTime(); |
| | | var frame_name = 'rcmupload'+ts; |
| | | |
| | | // have to do it this way for IE |
| | | // otherwise the form will be posted to a new window |
| | | if(document.all) |
| | | { |
| | | if (document.all) { |
| | | var html = '<iframe name="'+frame_name+'" src="program/blank.gif" style="width:0;height:0;visibility:hidden;"></iframe>'; |
| | | document.body.insertAdjacentHTML('BeforeEnd',html); |
| | | } |
| | | else // for standards-compilant browsers |
| | | { |
| | | } |
| | | else { // for standards-compilant browsers |
| | | var frame = document.createElement('iframe'); |
| | | frame.name = frame_name; |
| | | frame.style.border = 'none'; |
| | |
| | | frame.style.height = 0; |
| | | frame.style.visibility = 'hidden'; |
| | | document.body.appendChild(frame); |
| | | } |
| | | } |
| | | |
| | | // handle upload errors, parsing iframe content in onload |
| | | var fr = document.getElementsByName(frame_name)[0]; |
| | |
| | | if (this.env.cancelicon) |
| | | content = '<a title="'+this.get_label('cancel')+'" onclick="return rcmail.cancel_attachment_upload(\''+ts+'\', \''+frame_name+'\');" href="#cancelupload"><img src="'+this.env.cancelicon+'" alt="" /></a>'+content; |
| | | this.add2attachment_list(ts, { name:'', html:content, complete:false }); |
| | | } |
| | | } |
| | | |
| | | // set reference to the form object |
| | | this.gui_objects.attachmentform = form; |
| | | return true; |
| | | }; |
| | | }; |
| | | |
| | | // add file name to attachment list |
| | | // called from upload page |
| | |
| | | }; |
| | | |
| | | this.remove_attachment = function(name) |
| | | { |
| | | { |
| | | if (name && this.env.attachments[name]) |
| | | this.http_post('remove-attachment', '_file='+urlencode(name)); |
| | | |
| | | return true; |
| | | }; |
| | | }; |
| | | |
| | | this.cancel_attachment_upload = function(name, frame_name) |
| | | { |
| | | { |
| | | if (!name || !frame_name) |
| | | return false; |
| | | |
| | | this.remove_from_attachment_list(name); |
| | | $("iframe[name='"+frame_name+"']").remove(); |
| | | return false; |
| | | }; |
| | | }; |
| | | |
| | | // send remote request to add a new contact |
| | | this.add_contact = function(value) |
| | | { |
| | | { |
| | | if (value) |
| | | this.http_post('addcontact', '_address='+value); |
| | | |
| | | return true; |
| | | }; |
| | | }; |
| | | |
| | | // send remote request to search mail or contacts |
| | | this.qsearch = function(value) |
| | | { |
| | | if (value != '') |
| | | { |
| | | { |
| | | if (value != '') { |
| | | var addurl = ''; |
| | | if (this.message_list) { |
| | | this.message_list.clear(); |
| | |
| | | for (var n in mods) |
| | | head_arr.push(n); |
| | | addurl += '&_headers='+head_arr.join(','); |
| | | } |
| | | } |
| | | } else if (this.contact_list) { |
| | | } |
| | | } else if (this.contact_list) { |
| | | this.contact_list.clear(true); |
| | | this.show_contentframe(false); |
| | | } |
| | | } |
| | | |
| | | if (this.gui_objects.search_filter) |
| | | addurl += '&_filter=' + this.gui_objects.search_filter.value; |
| | |
| | | + (this.env.source ? '&_source='+urlencode(this.env.source) : '') |
| | | + (this.env.group ? '&_gid='+urlencode(this.env.group) : '') |
| | | + (addurl ? addurl : ''), true); |
| | | } |
| | | } |
| | | return true; |
| | | }; |
| | | }; |
| | | |
| | | // reset quick-search form |
| | | this.reset_qsearch = function() |
| | | { |
| | | { |
| | | if (this.gui_objects.qsearchbox) |
| | | this.gui_objects.qsearchbox.value = ''; |
| | | |
| | | this.env.search_request = null; |
| | | return true; |
| | | }; |
| | | }; |
| | | |
| | | this.sent_successfully = function(type, msg) |
| | | { |
| | | { |
| | | this.list_mailbox(); |
| | | this.display_message(msg, type, true); |
| | | } |
| | | }; |
| | | |
| | | |
| | | /*********************************************************/ |
| | |
| | | var insert = ''; |
| | | |
| | | // insert all members of a group |
| | | if (typeof this.env.contacts[id] == 'object' && this.env.contacts[id].members) { |
| | | for (var i=0; i < this.env.contacts[id].members.length; i++) |
| | | insert += this.env.contacts[id].members[i] + ', '; |
| | | if (typeof this.env.contacts[id] == 'object' && this.env.contacts[id].id) { |
| | | insert += this.env.contacts[id].name + ', '; |
| | | this.group2expand = $.extend({}, this.env.contacts[id]); |
| | | this.group2expand.input = this.ksearch_input; |
| | | this.http_request('group-expand', '_source='+urlencode(this.env.contacts[id].source)+'&_gid='+urlencode(this.env.contacts[id].id), false); |
| | | } |
| | | else if (typeof this.env.contacts[id] == 'string') |
| | | insert = this.env.contacts[id] + ', '; |
| | |
| | | cpos = p+insert.length; |
| | | if (this.ksearch_input.setSelectionRange) |
| | | this.ksearch_input.setSelectionRange(cpos, cpos); |
| | | }; |
| | | |
| | | this.replace_group_recipients = function(id, recipients) |
| | | { |
| | | if (this.group2expand && this.group2expand.id == id) { |
| | | this.group2expand.input.value = this.group2expand.input.value.replace(this.group2expand.name, recipients); |
| | | this.group2expand = null; |
| | | } |
| | | }; |
| | | |
| | | // address search processor |
| | |
| | | if (old_value && old_value.length && this.env.contacts && !this.env.contacts.length && q.indexOf(old_value) == 0) |
| | | return; |
| | | |
| | | this.display_message(this.get_label('searching'), 'loading', true); |
| | | this.display_message(this.get_label('searching'), 'loading', false); |
| | | this.http_post('autocomplete', '_search='+urlencode(q)); |
| | | }; |
| | | |
| | |
| | | else if (group != this.env.group) |
| | | page = this.env.current_page = 1; |
| | | |
| | | this.select_folder(src, this.env.source); |
| | | this.select_folder(group, this.env.group, 'rcmliG'); |
| | | this.select_folder((group ? 'G'+group : src), (this.env.group ? 'G'+this.env.group : this.env.source)); |
| | | |
| | | this.env.source = src; |
| | | this.env.group = group; |
| | |
| | | if (action && (cid || action=='add') && !this.drag_active) |
| | | { |
| | | this.set_busy(true); |
| | | target.location.href = this.env.comm_path+'&_action='+action+'&_source='+urlencode(this.env.source)+'&_cid='+urlencode(cid) + add_url; |
| | | target.location.href = this.env.comm_path+'&_action='+action+'&_source='+urlencode(this.env.source)+'&_gid='+urlencode(this.env.group)+'&_cid='+urlencode(cid) + add_url; |
| | | } |
| | | return true; |
| | | }; |
| | |
| | | var key = 'G'+prop.id; |
| | | this.env.contactfolders[key] = this.env.contactgroups[key] = prop; |
| | | |
| | | var link = $('<a>').attr('href', '#').attr('onclick', "return rcmail.command('listgroup','"+prop.id+"',this)").html(prop.name); |
| | | var link = $('<a>').attr('href', '#') |
| | | .bind('click', function() { return rcmail.command('listgroup', prop.id, this);}) |
| | | .html(prop.name); |
| | | var li = $('<li>').attr('id', 'rcmli'+key).addClass('contactgroup').append(link); |
| | | $(this.gui_objects.folderlist).append(li); |
| | | |
| | |
| | | addrbook_show_images.disabled = !checkbox.checked; |
| | | } |
| | | |
| | | this.toggle_preview_pane = function(checkbox) |
| | | { |
| | | var preview_pane_mark_read; |
| | | if (preview_pane_mark_read = document.getElementById('rcmfd_preview_pane_mark_read')) |
| | | preview_pane_mark_read.disabled = !checkbox.checked; |
| | | } |
| | | |
| | | // display fetched raw headers |
| | | this.set_headers = function(content) |
| | | { |