| | |
| | | |
| | | // trigger plugin hooks |
| | | this.triggerEvent('actionbefore', {props:props, action:command}); |
| | | var event_ret = this.triggerEvent('before'+command, props); |
| | | if (event_ret !== undefined) { |
| | | var ret = this.triggerEvent('before'+command, props); |
| | | if (ret !== undefined) { |
| | | // abort if one the handlers returned false |
| | | if (event_ret === false) |
| | | if (ret === false) |
| | | return false; |
| | | else |
| | | props = event_ret; |
| | | props = ret; |
| | | } |
| | | |
| | | // process internal command |
| | |
| | | |
| | | case 'delete': |
| | | // mail task |
| | | if (this.task=='mail') |
| | | if (this.task == 'mail') |
| | | this.delete_messages(); |
| | | // addressbook task |
| | | else if (this.task=='addressbook') |
| | | else if (this.task == 'addressbook') |
| | | this.delete_contacts(); |
| | | // user settings task |
| | | else if (this.task=='settings') |
| | | else if (this.task == 'settings') |
| | | this.delete_identity(); |
| | | 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) { |
| | | url = this.get_task_url('mail', url); |
| | |
| | | } |
| | | |
| | | // use contact_id passed as command parameter |
| | | var a_cids = []; |
| | | var n, len, a_cids = []; |
| | | if (props) |
| | | a_cids.push(props); |
| | | // get selected contacts |
| | | else if (this.contact_list) { |
| | | var selection = this.contact_list.get_selection(); |
| | | for (var n=0; n<selection.length; n++) |
| | | for (n=0, len=selection.length; n<len; n++) |
| | | a_cids.push(selection[n]); |
| | | } |
| | | |
| | | if (a_cids.length) |
| | | this.http_request('mailto', '_cid='+urlencode(a_cids.join(','))+'&_source='+urlencode(this.env.source), true); |
| | | this.http_post('mailto', {_cid: a_cids.join(','), _source: this.env.source}, true); |
| | | |
| | | break; |
| | | } |
| | | |
| | | // don't know if this is necessary... |
| | | url = url.replace(/&_framed=1/, ''); |
| | | |
| | | this.redirect(url); |
| | | break; |
| | |
| | | |
| | | this.doc_mouse_up = function(e) |
| | | { |
| | | var model, list, li; |
| | | var model, list, li, id; |
| | | |
| | | if (this.message_list) { |
| | | if (!rcube_mouse_is_over(e, this.message_list.list.parentNode)) |
| | | this.message_list.blur(); |
| | | if (list = this.message_list) { |
| | | if (!rcube_mouse_is_over(e, list.list.parentNode)) |
| | | list.blur(); |
| | | else |
| | | this.message_list.focus(); |
| | | list = this.message_list; |
| | | list.focus(); |
| | | 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 if (list = this.contact_list) { |
| | | if (!rcube_mouse_is_over(e, list.list.parentNode)) |
| | | list.blur(); |
| | | else |
| | | this.contact_list.focus(); |
| | | list = this.contact_list; |
| | | list.focus(); |
| | | model = this.env.contactfolders; |
| | | } |
| | | else if (this.ksearch_value) { |
| | |
| | | |
| | | // reset 'pressed' buttons |
| | | if (this.buttons_sel) { |
| | | for (var id in this.buttons_sel) |
| | | for (id in this.buttons_sel) |
| | | if (typeof id !== 'function') |
| | | this.button_out(this.buttons_sel[id], id); |
| | | this.buttons_sel = {}; |
| | |
| | | this.command('previouspage'); |
| | | else if (list.key_pressed == 34) |
| | | this.command('nextpage'); |
| | | else |
| | | list.shiftkey = false; |
| | | }; |
| | | |
| | | this.msglist_get_preview = function() |
| | |
| | | // delete selected messages from the current mailbox |
| | | this.delete_messages = function() |
| | | { |
| | | var selection = this.message_list ? $.merge([], this.message_list.get_selection()) : []; |
| | | var uid, i, len, trash = this.env.trash_mailbox, |
| | | list = this.message_list, |
| | | selection = list ? $.merge([], list.get_selection()) : []; |
| | | |
| | | // exit if no mailbox specified or if selection is empty |
| | | if (!this.env.uid && !selection.length) |
| | | return; |
| | | |
| | | // also select childs of collapsed rows |
| | | for (var uid, i=0, len=selection.length; i<len; i++) { |
| | | for (i=0, len=selection.length; i<len; i++) { |
| | | uid = selection[i]; |
| | | if (this.message_list.rows[uid].has_children && !this.message_list.rows[uid].expanded) |
| | | this.message_list.select_childs(uid); |
| | | if (list.rows[uid].has_children && !list.rows[uid].expanded) |
| | | list.select_childs(uid); |
| | | } |
| | | |
| | | // if config is set to flag for deletion |
| | |
| | | return false; |
| | | } |
| | | // if there isn't a defined trash mailbox or we are in it |
| | | else if (!this.env.trash_mailbox || this.env.mailbox == this.env.trash_mailbox) |
| | | // @TODO: we should check if defined trash mailbox exists |
| | | else if (!trash || this.env.mailbox == trash) |
| | | this.permanently_remove_messages(); |
| | | // if there is a trash mailbox defined and we're not currently in it |
| | | else { |
| | | // if shift was pressed delete it immediately |
| | | if (this.message_list && this.message_list.shiftkey) { |
| | | if (list && list.shiftkey) { |
| | | if (confirm(this.get_label('deletemessagesconfirm'))) |
| | | this.permanently_remove_messages(); |
| | | } |
| | | else |
| | | this.move_messages(this.env.trash_mailbox); |
| | | this.move_messages(trash); |
| | | } |
| | | |
| | | return true; |
| | |
| | | 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) { |
| | | send = true; |
| | | break; |
| | | } |
| | | // get file input field, count files on capable browser |
| | | var field = $('input[type=file]', form).get(0), |
| | | files = field.files ? field.files.length : field.value ? 1 : 0; |
| | | |
| | | // create hidden iframe and post upload form |
| | | if (send) { |
| | | if (files) { |
| | | var frame_name = this.async_upload_form(form, 'upload', function(e) { |
| | | var d, content = ''; |
| | | try { |
| | |
| | | }); |
| | | |
| | | // display upload indicator and cancel button |
| | | var content = this.get_label('uploading'), |
| | | var content = this.get_label('uploading' + (files > 1 ? 'many' : '')), |
| | | ts = frame_name.replace(/^rcmupload/, ''); |
| | | |
| | | if (this.env.loadingicon) |
| | |
| | | if (!this.gui_objects.attachmentlist) |
| | | return false; |
| | | |
| | | var li = $('<li>').attr('id', name).html(att.html); |
| | | var indicator; |
| | | var indicator, li = $('<li>').attr('id', name).html(att.html); |
| | | |
| | | // replace indicator's li |
| | | if (upload_id && (indicator = document.getElementById(upload_id))) { |
| | |
| | | return false; |
| | | |
| | | var list = this.gui_objects.attachmentlist.getElementsByTagName("li"); |
| | | for (i=0;i<list.length;i++) |
| | | for (i=0; i<list.length; i++) |
| | | if (list[i].id == name) |
| | | this.gui_objects.attachmentlist.removeChild(list[i]); |
| | | }; |