| | |
| | | return; |
| | | } |
| | | |
| | | // Enable debug console |
| | | if (!window.console || !window.console.log) { |
| | | window.console = new rcube_console(); |
| | | } |
| | | else { |
| | | $('#console').hide(); |
| | | } |
| | | |
| | | // find all registered gui containers |
| | | for (var n in this.gui_containers) |
| | | this.gui_containers[n] = $('#'+this.gui_containers[n]); |
| | |
| | | } |
| | | } |
| | | else if (this.env.action == 'compose') { |
| | | this.env.compose_commands = ['send-attachment', 'remove-attachment', 'send', 'toggle-editor']; |
| | | this.env.compose_commands = ['send-attachment', 'remove-attachment', 'send', 'cancel', 'toggle-editor']; |
| | | |
| | | if (this.env.drafts_mailbox) |
| | | this.env.compose_commands.push('savedraft') |
| | |
| | | } |
| | | } |
| | | |
| | | if ((this.env.action=='add' || this.env.action=='edit') && this.gui_objects.editform) { |
| | | if ((this.env.action == 'add' || this.env.action == 'edit') && this.gui_objects.editform) { |
| | | this.enable_command('save', true); |
| | | this.enable_command('upload-photo', this.env.coltypes.photo ? true : false); |
| | | this.enable_command('delete-photo', this.env.coltypes.photo && this.env.action == 'edit'); |
| | | |
| | | for (var col in this.env.coltypes) |
| | | this.init_edit_field(col, null); |
| | | |
| | | $('.contactfieldgroup .row a.deletebutton').click(function(){ ref.delete_edit_field(this); return false }); |
| | | |
| | | $('select.addfieldmenu').change(function(e){ |
| | | ref.insert_edit_field($(this).val(), $(this).attr('rel'), this); |
| | | this.selectedIndex = 0; |
| | | }); |
| | | |
| | | $("input[type='text']:visible").first().focus(); |
| | | this.init_contact_form(); |
| | | } |
| | | else if (this.gui_objects.qsearchbox) { |
| | | this.enable_command('search', 'reset-search', 'moveto', true); |
| | |
| | | case 'settings': |
| | | this.enable_command('preferences', 'identities', 'save', 'folders', true); |
| | | |
| | | if (this.env.action=='identities') { |
| | | if (this.env.action == 'identities') { |
| | | this.enable_command('add', this.env.identities_level < 2); |
| | | } |
| | | else if (this.env.action=='edit-identity' || this.env.action=='add-identity') { |
| | | else if (this.env.action == 'edit-identity' || this.env.action == 'add-identity') { |
| | | this.enable_command('add', this.env.identities_level < 2); |
| | | this.enable_command('save', 'delete', 'edit', 'toggle-editor', true); |
| | | } |
| | | else if (this.env.action=='folders') { |
| | | else if (this.env.action == 'folders') { |
| | | this.enable_command('subscribe', 'unsubscribe', 'create-folder', 'rename-folder', true); |
| | | } |
| | | else if (this.env.action == 'edit-folder' && this.gui_objects.editform) { |
| | |
| | | |
| | | // 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 |
| | |
| | | input_name.focus(); |
| | | break; |
| | | } |
| | | else if (this.task == 'settings' && input_email.length && !rcube_check_email(input_email.val())) { |
| | | else if (this.task == 'settings' && input_email.length && (this.env.identities_level % 2) == 0 && !rcube_check_email(input_email.val())) { |
| | | alert(this.get_label('noemailwarning')); |
| | | input_email.focus(); |
| | | break; |
| | |
| | | |
| | | 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() |
| | |
| | | if (!this.env.frame_lock) { |
| | | (this.is_framed() ? parent.rcmail : this).env.frame_lock = this.set_busy(true, 'loading'); |
| | | } |
| | | target.location.href = this.env.comm_path+url; |
| | | this.location_href(this.env.comm_path+url, target); |
| | | |
| | | // 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.env.preview_pane_mark_read >= 0) { |
| | |
| | | // load message list to target frame/window |
| | | if (mbox) { |
| | | this.set_busy(true, 'loading'); |
| | | target.location.href = this.env.comm_path+'&_mbox='+urlencode(mbox)+(page ? '&_page='+page : '')+url; |
| | | this.location_href(this.env.comm_path+'&_mbox='+urlencode(mbox)+(page ? '&_page='+page : '')+url, target); |
| | | } |
| | | }; |
| | | |
| | |
| | | // 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; |
| | |
| | | this.compose_field_hash = function(save) |
| | | { |
| | | // check input fields |
| | | var value_to = $("[name='_to']").val(); |
| | | var value_cc = $("[name='_cc']").val(); |
| | | var value_bcc = $("[name='_bcc']").val(); |
| | | var value_subject = $("[name='_subject']").val(); |
| | | var str = ''; |
| | | var ed, str = '', |
| | | value_to = $("[name='_to']").val(), |
| | | value_cc = $("[name='_cc']").val(), |
| | | value_bcc = $("[name='_bcc']").val(), |
| | | value_subject = $("[name='_subject']").val(); |
| | | |
| | | if (value_to) |
| | | str += value_to+':'; |
| | |
| | | if (value_subject) |
| | | str += value_subject+':'; |
| | | |
| | | var editor = tinyMCE.get(this.env.composebody); |
| | | if (editor) |
| | | str += editor.getContent(); |
| | | if (window.tinyMCE && (ed = tinyMCE.get(this.env.composebody))) |
| | | str += ed.getContent(); |
| | | else |
| | | str += $("[name='_message']").val(); |
| | | |
| | |
| | | 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) { |
| | | this.async_upload_form(form, 'upload', function(e) { |
| | | if (files) { |
| | | var frame_name = this.async_upload_form(form, 'upload', function(e) { |
| | | var d, content = ''; |
| | | try { |
| | | if (this.contentDocument) { |
| | |
| | | d = this.contentWindow.document; |
| | | } |
| | | content = d.childNodes[0].innerHTML; |
| | | } catch (e) {} |
| | | } catch (err) {} |
| | | |
| | | if (!content.match(/add2attachment/) && (!bw.opera || (rcmail.env.uploadframe && rcmail.env.uploadframe == e.data.ts))) { |
| | | if (!content.match(/display_message/)) |
| | |
| | | }); |
| | | |
| | | // 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) |
| | | content = '<img src="'+this.env.loadingicon+'" alt="" />'+content; |
| | | if (this.env.cancelicon) |
| | |
| | | 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]); |
| | | }; |
| | |
| | | this.remove_attachment = function(name) |
| | | { |
| | | if (name && this.env.attachments[name]) |
| | | this.http_post('remove-attachment', '_file='+urlencode(name)); |
| | | this.http_post('remove-attachment', { _id:this.env.compose_id, _file:name }); |
| | | |
| | | return true; |
| | | }; |
| | |
| | | if (q == this.ksearch_value) |
| | | return; |
| | | |
| | | if (q.length < min) { |
| | | if (q.length && q.length < min) { |
| | | if (!this.env.acinfo) { |
| | | var label = this.get_label('autocompletechars'); |
| | | label = label.replace('$min', min); |
| | | this.env.acinfo = this.display_message(label); |
| | | this.env.acinfo = this.display_message( |
| | | this.get_label('autocompletechars').replace('$min', min)); |
| | | } |
| | | return; |
| | | } |
| | | else if (this.env.acinfo && q.length == min) { |
| | | else if (this.env.acinfo) { |
| | | this.hide_message(this.env.acinfo); |
| | | } |
| | | |
| | |
| | | |
| | | if (this.ksearch_pane) |
| | | this.ksearch_pane.hide(); |
| | | }; |
| | | }; |
| | | |
| | | |
| | | /*********************************************************/ |
| | |
| | | add_url += '&_search='+this.env.search_request; |
| | | |
| | | this.set_busy(true, 'loading'); |
| | | target.location.href = this.env.comm_path + (src ? '&_source='+urlencode(src) : '') + add_url; |
| | | this.location_href(this.env.comm_path + (src ? '&_source='+urlencode(src) : '') + add_url, target); |
| | | }; |
| | | |
| | | // send remote request to load contacts list |
| | |
| | | add_url += '&_gid='+urlencode(this.env.group); |
| | | |
| | | this.set_busy(true); |
| | | target.location.href = this.env.comm_path+'&_action='+action+'&_source='+urlencode(this.env.source)+'&_cid='+urlencode(cid) + add_url; |
| | | this.location_href(this.env.comm_path+'&_action='+action+'&_source='+urlencode(this.env.source)+'&_cid='+urlencode(cid) + add_url, target); |
| | | } |
| | | return true; |
| | | }; |
| | |
| | | // update a contact record in the list |
| | | this.update_contact_row = function(cid, cols_arr, newcid) |
| | | { |
| | | var row; |
| | | if (this.contact_list.rows[cid] && (row = this.contact_list.rows[cid].obj)) { |
| | | for (var c=0; c<cols_arr.length; c++) |
| | | var c, row, list = this.contact_list; |
| | | |
| | | cid = String(cid).replace(this.identifier_expr, '_'); |
| | | |
| | | if (list.rows[cid] && (row = list.rows[cid].obj)) { |
| | | for (c=0; c<cols_arr.length; c++) |
| | | if (row.cells[c]) |
| | | $(row.cells[c]).html(cols_arr[c]); |
| | | |
| | | // cid change |
| | | if (newcid) { |
| | | newcid = String(newcid).replace(this.identifier_expr, '_'); |
| | | row.id = 'rcmrow' + newcid; |
| | | this.contact_list.remove_row(cid); |
| | | this.contact_list.init_row(row); |
| | | this.contact_list.selection[0] = newcid; |
| | | list.remove_row(cid); |
| | | list.init_row(row); |
| | | list.selection[0] = newcid; |
| | | row.style.display = ''; |
| | | } |
| | | |
| | | return true; |
| | | } |
| | | |
| | | return false; |
| | | }; |
| | | |
| | | // add row to contacts list |
| | |
| | | even = rowcount%2, |
| | | row = document.createElement('tr'); |
| | | |
| | | row.id = 'rcmrow'+cid; |
| | | row.id = 'rcmrow'+String(cid).replace(this.identifier_expr, '_'); |
| | | row.className = 'contact '+(even ? 'even' : 'odd'); |
| | | |
| | | if (this.contact_list.in_selection(cid)) |
| | |
| | | this.contact_list.insert_row(row); |
| | | |
| | | this.enable_command('export', (this.contact_list.rowcount > 0)); |
| | | }; |
| | | |
| | | this.init_contact_form = function() |
| | | { |
| | | var ref = this, col; |
| | | |
| | | this.set_photo_actions($('#ff_photo').val()); |
| | | |
| | | for (col in this.env.coltypes) |
| | | this.init_edit_field(col, null); |
| | | |
| | | $('.contactfieldgroup .row a.deletebutton').click(function() { |
| | | ref.delete_edit_field(this); |
| | | return false; |
| | | }); |
| | | |
| | | $('select.addfieldmenu').change(function(e) { |
| | | ref.insert_edit_field($(this).val(), $(this).attr('rel'), this); |
| | | this.selectedIndex = 0; |
| | | }); |
| | | |
| | | $("input[type='text']:visible").first().focus(); |
| | | }; |
| | | |
| | | this.group_create = function() |
| | |
| | | this.env.contactfolders[key] = this.env.contactgroups[key] = prop; |
| | | |
| | | var link = $('<a>').attr('href', '#') |
| | | .attr('rel', prop.source+':'+prop.id) |
| | | .bind('click', function() { return rcmail.command('listgroup', prop, this);}) |
| | | .html(prop.name); |
| | | var li = $('<li>').attr('id', 'rcmli'+key.replace(this.identifier_expr, '_')) |
| | |
| | | { |
| | | this.reset_add_input(); |
| | | |
| | | var key = 'G'+prop.source+prop.id, link, li = this.get_folder_li(key); |
| | | var key = 'G'+prop.source+prop.id, |
| | | li = this.get_folder_li(key), |
| | | link; |
| | | |
| | | if (li && (link = li.firstChild) && link.tagName.toLowerCase() == 'a') |
| | | // group ID has changed, replace link node and identifiers |
| | | if (li && prop.newid) { |
| | | var newkey = 'G'+prop.source+prop.newid; |
| | | li.id = String('rcmli'+newkey).replace(this.identifier_expr, '_'); |
| | | this.env.contactfolders[newkey] = this.env.contactfolders[key]; |
| | | this.env.contactfolders[newkey].id = prop.newid; |
| | | this.env.group = prop.newid; |
| | | |
| | | var newprop = $.extend({}, prop); |
| | | newprop.id = prop.newid; |
| | | newprop.type = 'group'; |
| | | |
| | | link = $('<a>').attr('href', '#') |
| | | .attr('rel', prop.source+':'+prop.newid) |
| | | .bind('click', function() { return rcmail.command('listgroup', newprop, this);}) |
| | | .html(prop.name); |
| | | $(li).children().replaceWith(link); |
| | | } |
| | | // update displayed group name |
| | | else if (li && (link = li.firstChild) && link.tagName.toLowerCase() == 'a') |
| | | link.innerHTML = prop.name; |
| | | |
| | | this.env.contactfolders[key].name = this.env.contactgroups[key].name = prop.name; |
| | | this.triggerEvent('group_update', { id:prop.id, source:prop.source, name:prop.name, li:li[0] }); |
| | | this.triggerEvent('group_update', { id:prop.id, source:prop.source, name:prop.name, li:li[0], newid:prop.newid }); |
| | | }; |
| | | |
| | | |
| | |
| | | { |
| | | if (!elem) |
| | | elem = $('.ff_' + col); |
| | | |
| | | |
| | | elem.focus(function(){ ref.focus_textfield(this); }) |
| | | .blur(function(){ ref.blur_textfield(this); }) |
| | | .each(function(){ this._placeholder = this.title = ref.env.coltypes[col].label; ref.blur_textfield(this); }); |
| | |
| | | this.photo_upload_id = this.set_busy(true, 'uploading'); |
| | | } |
| | | }; |
| | | |
| | | |
| | | this.replace_contact_photo = function(id) |
| | | { |
| | | $('#ff_photo').val(id); |
| | | |
| | | var buttons = this.buttons['upload-photo']; |
| | | for (var n=0; n < buttons.length; n++) |
| | | $('#'+buttons[n].id).html(this.get_label(id == '-del-' ? 'addphoto' : 'replacephoto')); |
| | | |
| | | var img_src = id == '-del-' ? this.env.photo_placeholder : |
| | | this.env.comm_path + '&_action=photo&_source=' + this.env.source + '&_cid=' + this.env.cid + '&_photo=' + id; |
| | | |
| | | this.set_photo_actions(id); |
| | | $(this.gui_objects.contactphoto).children('img').attr('src', img_src); |
| | | |
| | | this.enable_command('delete-photo', id != '-del-'); |
| | | }; |
| | | |
| | | |
| | | this.photo_upload_end = function() |
| | | { |
| | | this.set_busy(false, null, this.photo_upload_id); |
| | | delete this.photo_upload_id; |
| | | }; |
| | | |
| | | this.set_photo_actions = function(id) |
| | | { |
| | | var n, buttons = this.buttons['upload-photo']; |
| | | for (n=0; n < buttons.length; n++) |
| | | $('#'+buttons[n].id).html(this.get_label(id == '-del-' ? 'addphoto' : 'replacephoto')); |
| | | |
| | | $('#ff_photo').val(id); |
| | | this.enable_command('upload-photo', this.env.coltypes.photo ? true : false); |
| | | this.enable_command('delete-photo', this.env.coltypes.photo && id != '-del-'); |
| | | }; |
| | | |
| | | |
| | |
| | | add_url = '&_framed=1'; |
| | | target = window.frames[this.env.contentframe]; |
| | | } |
| | | target.location.href = this.env.comm_path+'&_action=edit-prefs&_section='+id+add_url; |
| | | this.location_href(this.env.comm_path+'&_action=edit-prefs&_section='+id+add_url, target); |
| | | } |
| | | |
| | | return true; |
| | |
| | | |
| | | if (action && (id || action=='add-identity')) { |
| | | this.set_busy(true); |
| | | target.location.href = this.env.comm_path+'&_action='+action+'&_iid='+id+add_url; |
| | | this.location_href(this.env.comm_path+'&_action='+action+'&_iid='+id+add_url, target); |
| | | } |
| | | |
| | | return true; |
| | |
| | | if (!this.env.frame_lock) { |
| | | (parent.rcmail ? parent.rcmail : this).env.frame_lock = this.set_busy(true, 'loading'); |
| | | } |
| | | target.location.href = this.env.comm_path+url; |
| | | this.location_href(this.env.comm_path+url, target); |
| | | } |
| | | }; |
| | | |
| | |
| | | var current_li, target_li; |
| | | |
| | | if ((current_li = this.get_folder_li(old, prefix))) { |
| | | $(current_li).removeClass('selected').removeClass('unfocused'); |
| | | $(current_li).removeClass('selected').addClass('unfocused'); |
| | | } |
| | | if ((target_li = this.get_folder_li(name, prefix))) { |
| | | $(target_li).removeClass('unfocused').addClass('selected'); |
| | |
| | | // and for setting some message list global variables |
| | | this.set_message_coltypes = function(coltypes, repl) |
| | | { |
| | | this.env.coltypes = coltypes; |
| | | var list = this.message_list, |
| | | thead = list ? list.list.tHead : null, |
| | | cell, col, n, len, th, tr; |
| | | |
| | | // set correct list titles |
| | | var thead = this.gui_objects.messagelist ? this.gui_objects.messagelist.tHead : null, |
| | | cell, col, n, len; |
| | | this.env.coltypes = coltypes; |
| | | |
| | | // replace old column headers |
| | | if (thead) { |
| | | if (repl) { |
| | | var th = document.createElement('thead'), |
| | | tr = document.createElement('tr'); |
| | | th = document.createElement('thead'); |
| | | tr = document.createElement('tr'); |
| | | |
| | | for (c=0, len=repl.length; c < len; c++) { |
| | | cell = document.createElement('td'); |
| | | cell.innerHTML = repl[c].html; |
| | |
| | | |
| | | if ((n = $.inArray('subject', this.env.coltypes)) >= 0) { |
| | | this.set_env('subject_col', n); |
| | | if (this.message_list) |
| | | this.message_list.subject_col = n; |
| | | if (list) |
| | | list.subject_col = n; |
| | | } |
| | | if ((n = $.inArray('flag', this.env.coltypes)) >= 0) |
| | | this.set_env('flagged_col', n); |
| | | if ((n = $.inArray('status', this.env.coltypes)) >= 0) |
| | | this.set_env('status_col', n); |
| | | |
| | | this.message_list.init_header(); |
| | | if (list) |
| | | list.init_header(); |
| | | }; |
| | | |
| | | // replace content of row count display |
| | |
| | | quota_width = parseInt(quota / 100 * width), |
| | | pos = $(obj).position(); |
| | | |
| | | // Opera bug? |
| | | // workarounds for Opera and Webkit bugs |
| | | pos.top = Math.max(0, pos.top); |
| | | pos.left = Math.max(0, pos.left); |
| | | |
| | | this.env.indicator_width = width; |
| | | this.env.indicator_height = height; |
| | |
| | | bar1.addClass('quota_mid'); |
| | | } |
| | | else { |
| | | main.addClass(' quota_text_normal'); |
| | | main.addClass(' quota_text_low'); |
| | | bar1.addClass('quota_low'); |
| | | } |
| | | |
| | |
| | | if (lock || lock === null) |
| | | this.set_busy(true); |
| | | |
| | | if (this.env.framed && window.parent) |
| | | parent.location.href = url; |
| | | if (this.is_framed()) |
| | | parent.rcmail.redirect(url, lock); |
| | | else |
| | | location.href = url; |
| | | this.location_href(url, window); |
| | | }; |
| | | |
| | | this.goto_url = function(action, query, lock) |
| | | { |
| | | this.redirect(this.url(action, query)); |
| | | }; |
| | | |
| | | this.location_href = function(url, target) |
| | | { |
| | | // simulate real link click to force IE to send referer header |
| | | if (bw.ie && target == window) |
| | | $('<a>').attr('href', url).appendTo(document.body).get(0).click(); |
| | | else |
| | | target.location.href = url; |
| | | }; |
| | | |
| | | // send a http request to the server |
| | |
| | | this.set_busy(false, null, lock); |
| | | request.abort(); |
| | | |
| | | if (errmsg) |
| | | if (request.status && errmsg) |
| | | this.display_message(this.get_label('servererror') + ' (' + errmsg + ')', 'error'); |
| | | }; |
| | | |
| | | // post the given form to a hidden iframe |
| | | this.async_upload_form = function(form, action, onload) |
| | | { |
| | | var ts = new Date().getTime(); |
| | | var frame_name = 'rcmupload'+ts; |
| | | var ts = new Date().getTime(), |
| | | frame_name = 'rcmupload'+ts; |
| | | |
| | | // have to do it this way for IE |
| | | // otherwise the form will be posted to a new window |
| | |
| | | $(frame_name).bind('load', {ts:ts}, onload); |
| | | |
| | | form.target = frame_name; |
| | | form.action = this.url(action, { _uploadid:ts }); |
| | | form.action = this.url(action, { _id:this.env.compose_id||'', _uploadid:ts }); |
| | | form.setAttribute('enctype', 'multipart/form-data'); |
| | | form.submit(); |
| | | |
| | | return frame_name; |
| | | }; |
| | | |
| | | // starts interval for keep-alive/check-recent signal |
| | |
| | | if (this.env.keep_alive && !this.env.framed && this.task == 'mail' && this.gui_objects.mailboxlist) |
| | | this._int = setInterval(function(){ ref.check_for_recent(false); }, this.env.keep_alive * 1000); |
| | | else if (this.env.keep_alive && !this.env.framed && this.task != 'login' && this.env.action != 'print') |
| | | this._int = setInterval(function(){ ref.send_keep_alive(); }, this.env.keep_alive * 1000); |
| | | }; |
| | | |
| | | // sends keep-alive signal to the server |
| | | this.send_keep_alive = function() |
| | | { |
| | | var d = new Date(); |
| | | this.http_request('keep-alive', '_t='+d.getTime()); |
| | | this._int = setInterval(function(){ ref.http_request('keep-alive'); }, this.env.keep_alive * 1000); |
| | | }; |
| | | |
| | | // sends request to check for recent messages |
| | |
| | | if (this.busy) |
| | | return; |
| | | |
| | | var lock, addurl = '_t=' + (new Date().getTime()) + '&_mbox=' + urlencode(this.env.mailbox); |
| | | var lock, addurl = '_mbox=' + urlencode(this.env.mailbox); |
| | | |
| | | if (refresh) { |
| | | lock = this.set_busy(true, 'checkingmail'); |