| | |
| | | |
| | | // webmail client settings |
| | | this.dblclick_time = 500; |
| | | this.message_time = 1500; |
| | | this.message_time = 2000; |
| | | |
| | | this.identifier_expr = new RegExp('[^0-9a-z\-_]', 'gi'); |
| | | |
| | |
| | | this.enable_command('add', this.env.identities_level < 2); |
| | | this.enable_command('save', 'delete', 'edit', 'toggle-editor', true); |
| | | } |
| | | else if (this.env.action=='folders') |
| | | this.enable_command('subscribe', 'unsubscribe', 'create-folder', 'rename-folder', 'delete-folder', 'enable-threading', 'disable-threading', true); |
| | | 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) { |
| | | this.enable_command('save', 'folder-size', true); |
| | | parent.rcmail.env.messagecount = this.env.messagecount; |
| | | parent.rcmail.enable_command('purge', this.env.messagecount); |
| | | $("input[type='text']").first().select(); |
| | | } |
| | | |
| | | if (this.gui_objects.identitieslist) { |
| | | this.identity_list = new rcube_list_widget(this.gui_objects.identitieslist, {multiselect:false, draggable:false, keyboard:false}); |
| | |
| | | |
| | | // user settings commands |
| | | case 'preferences': |
| | | this.goto_url(''); |
| | | break; |
| | | |
| | | case 'identities': |
| | | this.goto_url('settings/identities'); |
| | | break; |
| | | |
| | | case 'folders': |
| | | this.goto_url('settings/folders'); |
| | | this.goto_url('settings/' + command); |
| | | break; |
| | | |
| | | // unified command call (command name == function name) |
| | |
| | | else if (delay) |
| | | window.setTimeout(function(){ rcmail.reload(); }, delay); |
| | | else if (window.location) |
| | | location.href = this.env.comm_path; |
| | | location.href = this.env.comm_path + (this.env.action ? '&_action='+this.env.action : ''); |
| | | }; |
| | | |
| | | // Add variable to GET string, replace old value if exists |
| | |
| | | if (this.task == 'mail') |
| | | allow = (this.env.mailboxes[id] && this.env.mailboxes[id].id != this.env.mailbox && !this.env.mailboxes[id].virtual); |
| | | else if (this.task == 'settings') |
| | | allow = (id != this.env.folder); |
| | | allow = (id != this.env.mailbox); |
| | | else if (this.task == 'addressbook') { |
| | | if (id != this.env.source && this.env.contactfolders[id]) { |
| | | if (this.env.contactfolders[id].type == 'group') { |
| | |
| | | var action = flags.mbox == this.env.drafts_mailbox ? 'compose' : 'show'; |
| | | var uid_param = flags.mbox == this.env.drafts_mailbox ? '_draft_uid' : '_uid'; |
| | | cols.subject = '<a href="./?_task=mail&_action='+action+'&_mbox='+urlencode(flags.mbox)+'&'+uid_param+'='+uid+'"'+ |
| | | ' onclick="return rcube_event.cancel(event)">'+cols.subject+'</a>'; |
| | | ' onclick="return rcube_event.cancel(event)" onmouseover="rcube_webmail.long_subject_title(this,'+(message.depth+1)+')">'+cols.subject+'</a>'; |
| | | } |
| | | |
| | | // add each submitted col |
| | |
| | | var url = '', target = window; |
| | | |
| | | if (!mbox) |
| | | mbox = this.env.mailbox; |
| | | mbox = this.env.mailbox ? this.env.mailbox : 'INBOX'; |
| | | |
| | | if (add_url) |
| | | url += add_url; |
| | |
| | | } |
| | | } |
| | | |
| | | add_url += '&_uid='+this.uids_to_list(a_uids); |
| | | |
| | | // send request to server |
| | | this.http_post('copy', '_uid='+a_uids.join(',')+'&_mbox='+urlencode(this.env.mailbox)+add_url, lock); |
| | | this.http_post('copy', '_mbox='+urlencode(this.env.mailbox)+add_url, lock); |
| | | }; |
| | | |
| | | // move selected messages to the specified mailbox |
| | |
| | | if (!mbox || mbox == this.env.mailbox || (!this.env.uid && (!this.message_list || !this.message_list.get_selection().length))) |
| | | return; |
| | | |
| | | var lock = false; |
| | | var add_url = '&_target_mbox='+urlencode(mbox)+'&_from='+(this.env.action ? this.env.action : ''); |
| | | var lock = false, |
| | | add_url = '&_target_mbox='+urlencode(mbox)+'&_from='+(this.env.action ? this.env.action : ''); |
| | | |
| | | // show wait message |
| | | if (this.env.action == 'show') { |
| | |
| | | |
| | | this.expunge_mailbox = function(mbox) |
| | | { |
| | | var lock = false; |
| | | var add_url = ''; |
| | | var lock = false, |
| | | url = '_mbox='+urlencode(mbox); |
| | | |
| | | // lock interface if it's the active mailbox |
| | | if (mbox == this.env.mailbox) { |
| | | lock = this.set_busy(true, 'loading'); |
| | | add_url = '&_reload=1'; |
| | | url += '&_reload=1'; |
| | | } |
| | | |
| | | // send request to server |
| | | var url = '_mbox='+urlencode(mbox); |
| | | this.http_post('expunge', url+add_url, lock); |
| | | this.http_post('expunge', url, lock); |
| | | }; |
| | | |
| | | this.purge_mailbox = function(mbox) |
| | | { |
| | | var lock = false; |
| | | var add_url = ''; |
| | | var lock = false, |
| | | url = '_mbox='+urlencode(mbox); |
| | | |
| | | if (!confirm(this.get_label('purgefolderconfirm'))) |
| | | return false; |
| | |
| | | // lock interface if it's the active mailbox |
| | | if (mbox == this.env.mailbox) { |
| | | lock = this.set_busy(true, 'loading'); |
| | | add_url = '&_reload=1'; |
| | | url += '&_reload=1'; |
| | | } |
| | | |
| | | // send request to server |
| | | var url = '_mbox='+urlencode(mbox); |
| | | this.http_post('purge', url+add_url, lock); |
| | | return true; |
| | | this.http_post('purge', url, lock); |
| | | }; |
| | | |
| | | // test if purge command is allowed |
| | |
| | | input_subject = $("input[name='_subject']"), |
| | | input_message = $("[name='_message']").get(0), |
| | | html_mode = $("input[name='_is_html']").val() == '1', |
| | | ac_fields = ['cc', 'bcc', 'replyto', 'mailreplyto', 'mailfollowupto']; |
| | | ac_fields = ['cc', 'bcc', 'replyto', 'followupto']; |
| | | |
| | | // init live search events |
| | | this.init_address_input_events(input_to); |
| | |
| | | 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(); |
| | | |
| | |
| | | this.show_contentframe(false); |
| | | } |
| | | |
| | | if (this.env.group) |
| | | qs += '&_gid='+urlencode(this.env.group); |
| | | |
| | | // also send search request to get the right records from the next page |
| | | if (this.env.search_request) |
| | | qs += '&_search='+this.env.search_request; |
| | |
| | | this.init_subscription_list = function() |
| | | { |
| | | var p = this; |
| | | this.subscription_list = new rcube_list_widget(this.gui_objects.subscriptionlist, {multiselect:false, draggable:true, keyboard:false, toggleselect:true}); |
| | | this.subscription_list = new rcube_list_widget(this.gui_objects.subscriptionlist, |
| | | {multiselect:false, draggable:true, keyboard:false, toggleselect:true}); |
| | | this.subscription_list.addEventListener('select', function(o){ p.subscription_select(o); }); |
| | | this.subscription_list.addEventListener('dragstart', function(o){ p.drag_active = true; }); |
| | | this.subscription_list.addEventListener('dragend', function(o){ p.subscription_move_folder(o); }); |
| | | this.subscription_list.row_init = function (row) { |
| | | var anchors = row.obj.getElementsByTagName('a'); |
| | | if (anchors[0]) |
| | | anchors[0].onclick = function() { p.command('rename-folder', row.id); return false; }; |
| | | if (anchors[1]) |
| | | anchors[1].onclick = function() { p.command('delete-folder', row.id); return false; }; |
| | | row.obj.onmouseover = function() { p.focus_subscription(row.id); }; |
| | | row.obj.onmouseout = function() { p.unfocus_subscription(row.id); }; |
| | | }; |
| | |
| | | delim = RegExp.escape(this.env.delimiter), |
| | | reg = RegExp('['+delim+']?[^'+delim+']+$'); |
| | | |
| | | if (this.drag_active && this.env.folder && (row = document.getElementById(id))) |
| | | if (this.drag_active && this.env.mailbox && (row = document.getElementById(id))) |
| | | if (this.env.subscriptionrows[id] && |
| | | (folder = this.env.subscriptionrows[id][0])) { |
| | | if (this.check_droptarget(folder) && |
| | | !this.env.subscriptionrows[this.get_folder_row_id(this.env.folder)][2] && |
| | | (folder != this.env.folder.replace(reg, '')) && |
| | | (!folder.match(new RegExp('^'+RegExp.escape(this.env.folder+this.env.delimiter))))) { |
| | | !this.env.subscriptionrows[this.get_folder_row_id(this.env.mailbox)][2] && |
| | | (folder != this.env.mailbox.replace(reg, '')) && |
| | | (!folder.match(new RegExp('^'+RegExp.escape(this.env.mailbox+this.env.delimiter))))) { |
| | | this.set_env('dstfolder', folder); |
| | | $(row).addClass('droptarget'); |
| | | } |
| | | } |
| | | else if (this.env.folder.match(new RegExp(delim))) { |
| | | else if (this.env.mailbox.match(new RegExp(delim))) { |
| | | this.set_env('dstfolder', this.env.delimiter); |
| | | $(this.subscription_list.frame).addClass('droptarget'); |
| | | } |
| | |
| | | this.subscription_select = function(list) |
| | | { |
| | | var id, folder; |
| | | if ((id = list.get_single_selection()) && |
| | | this.env.subscriptionrows['rcmrow'+id] && |
| | | (folder = this.env.subscriptionrows['rcmrow'+id][0])) |
| | | this.set_env('folder', folder); |
| | | else |
| | | this.set_env('folder', null); |
| | | |
| | | if (this.gui_objects.createfolderhint) |
| | | $(this.gui_objects.createfolderhint).html(this.env.folder ? this.get_label('addsubfolderhint') : ''); |
| | | if (list && (id = list.get_single_selection()) && |
| | | (folder = this.env.subscriptionrows['rcmrow'+id]) |
| | | ) { |
| | | this.set_env('mailbox', folder[0]); |
| | | this.show_folder(folder[0]); |
| | | this.enable_command('delete-folder', !folder[2]); |
| | | } |
| | | else { |
| | | this.env.mailbox = null; |
| | | this.show_contentframe(false); |
| | | this.enable_command('delete-folder', 'purge', false); |
| | | } |
| | | }; |
| | | |
| | | this.subscription_move_folder = function(list) |
| | |
| | | var delim = RegExp.escape(this.env.delimiter), |
| | | reg = RegExp('['+delim+']?[^'+delim+']+$'); |
| | | |
| | | if (this.env.folder && this.env.dstfolder && (this.env.dstfolder != this.env.folder) && |
| | | (this.env.dstfolder != this.env.folder.replace(reg, ''))) { |
| | | var reg = new RegExp('[^'+delim+']*['+delim+']', 'g'); |
| | | var basename = this.env.folder.replace(reg, ''); |
| | | var newname = this.env.dstfolder==this.env.delimiter ? basename : this.env.dstfolder+this.env.delimiter+basename; |
| | | if (this.env.mailbox && this.env.dstfolder && (this.env.dstfolder != this.env.mailbox) && |
| | | (this.env.dstfolder != this.env.mailbox.replace(reg, '')) |
| | | ) { |
| | | reg = new RegExp('[^'+delim+']*['+delim+']', 'g'); |
| | | var lock = this.set_busy(true, 'foldermoving'), |
| | | basename = this.env.mailbox.replace(reg, ''), |
| | | newname = this.env.dstfolder==this.env.delimiter ? basename : this.env.dstfolder+this.env.delimiter+basename; |
| | | |
| | | var lock = this.set_busy(true, 'foldermoving'); |
| | | this.http_post('rename-folder', '_folder_oldname='+urlencode(this.env.folder)+'&_folder_newname='+urlencode(newname), lock); |
| | | this.http_post('rename-folder', '_folder_oldname='+urlencode(this.env.mailbox)+'&_folder_newname='+urlencode(newname), lock); |
| | | } |
| | | this.drag_active = false; |
| | | this.unfocus_subscription(this.get_folder_row_id(this.env.dstfolder)); |
| | | }; |
| | | |
| | | // tell server to create and subscribe a new mailbox |
| | | this.create_folder = function(name) |
| | | this.create_folder = function() |
| | | { |
| | | if (this.edit_folder) |
| | | this.reset_folder_rename(); |
| | | |
| | | var form; |
| | | if ((form = this.gui_objects.editform) && form.elements['_folder_name']) { |
| | | name = form.elements['_folder_name'].value; |
| | | |
| | | if (name.indexOf(this.env.delimiter)>=0) { |
| | | alert(this.get_label('forbiddencharacter')+' ('+this.env.delimiter+')'); |
| | | return false; |
| | | } |
| | | |
| | | if (this.env.folder && name != '') |
| | | name = this.env.folder+this.env.delimiter+name; |
| | | |
| | | var lock = this.set_busy(true, 'foldercreating'); |
| | | this.http_post('create-folder', '_name='+urlencode(name), lock); |
| | | } |
| | | else if (form.elements['_folder_name']) |
| | | form.elements['_folder_name'].focus(); |
| | | }; |
| | | |
| | | // start renaming the mailbox name. |
| | | // this will replace the name string with an input field |
| | | this.rename_folder = function(id) |
| | | { |
| | | var temp, row, form; |
| | | |
| | | // reset current renaming |
| | | if (temp = this.edit_folder) { |
| | | this.reset_folder_rename(); |
| | | if (temp == id) |
| | | return; |
| | | } |
| | | |
| | | if (id && this.env.subscriptionrows[id] && (row = document.getElementById(id))) { |
| | | var delim = RegExp.escape(this.env.delimiter), |
| | | reg = new RegExp('.*['+delim+']'); |
| | | |
| | | this.name_input = document.createElement('input'); |
| | | this.name_input.type = 'text'; |
| | | this.name_input.value = this.env.subscriptionrows[id][0].replace(reg, ''); |
| | | |
| | | reg = new RegExp('['+delim+']?[^'+delim+']+$'); |
| | | this.name_input.__parent = this.env.subscriptionrows[id][0].replace(reg, ''); |
| | | this.name_input.onkeydown = function(e){ rcmail.name_input_keydown(e); }; |
| | | |
| | | row.cells[0].replaceChild(this.name_input, row.cells[0].firstChild); |
| | | this.edit_folder = id; |
| | | this.name_input.select(); |
| | | |
| | | if (form = this.gui_objects.editform) |
| | | form.onsubmit = function(){ return false; }; |
| | | } |
| | | }; |
| | | |
| | | // remove the input field and write the current mailbox name to the table cell |
| | | this.reset_folder_rename = function() |
| | | { |
| | | var cell = this.name_input ? this.name_input.parentNode : null; |
| | | |
| | | if (cell && this.edit_folder && this.env.subscriptionrows[this.edit_folder]) |
| | | $(cell).html(this.env.subscriptionrows[this.edit_folder][1]); |
| | | |
| | | this.edit_folder = null; |
| | | }; |
| | | |
| | | // handler for keyboard events on the input field |
| | | this.name_input_keydown = function(e) |
| | | { |
| | | var key = rcube_event.get_keycode(e); |
| | | |
| | | // enter |
| | | if (key==13) { |
| | | var newname = this.name_input ? this.name_input.value : null; |
| | | if (this.edit_folder && newname) { |
| | | if (newname.indexOf(this.env.delimiter)>=0) { |
| | | alert(this.get_label('forbiddencharacter')+' ('+this.env.delimiter+')'); |
| | | return false; |
| | | } |
| | | |
| | | if (this.name_input.__parent) |
| | | newname = this.name_input.__parent + this.env.delimiter + newname; |
| | | |
| | | var lock = this.set_busy(true, 'folderrenaming'); |
| | | this.http_post('rename-folder', '_folder_oldname='+urlencode(this.env.subscriptionrows[this.edit_folder][0])+'&_folder_newname='+urlencode(newname), lock); |
| | | } |
| | | } |
| | | // escape |
| | | else if (key==27) |
| | | this.reset_folder_rename(); |
| | | this.show_folder('', this.env.mailbox); |
| | | }; |
| | | |
| | | // delete a specific mailbox with all its messages |
| | | this.delete_folder = function(id) |
| | | this.delete_folder = function(name) |
| | | { |
| | | var folder = this.env.subscriptionrows[id][0]; |
| | | |
| | | if (this.edit_folder) |
| | | this.reset_folder_rename(); |
| | | var id = this.get_folder_row_id(name ? name : this.env.mailbox), |
| | | folder = this.env.subscriptionrows[id][0]; |
| | | |
| | | if (folder && confirm(this.get_label('deletefolderconfirm'))) { |
| | | var lock = this.set_busy(true, 'folderdeleting'); |
| | | this.http_post('delete-folder', '_mboxes='+urlencode(folder), lock); |
| | | this.set_env('folder', null); |
| | | |
| | | $(this.gui_objects.createfolderhint).html(''); |
| | | this.http_post('delete-folder', '_mbox='+urlencode(folder), lock); |
| | | } |
| | | }; |
| | | |
| | |
| | | // set messages count to zero |
| | | row.cells[1].innerHTML = '*'; |
| | | |
| | | // update subscription/threading checkboxes |
| | | // update subscription checkbox |
| | | $('input[name="_subscribed[]"]', row).val(name).attr('checked', true); |
| | | $('input[name="_threaded[]"]', row).val(name).attr('checked', false); |
| | | |
| | | var elem; |
| | | // add new folder to rename-folder list and clear input field |
| | | if (form = this.gui_objects.editform) { |
| | | if (elem = form.elements['_folder_oldname']) |
| | | elem.options[elem.options.length] = new Option(name, name); |
| | | if (elem = form.elements['_folder_name']) |
| | | elem.value = ''; |
| | | } |
| | | } |
| | | |
| | | this.init_subscription_list(); |
| | |
| | | // replace an existing table row with a new folder line |
| | | this.replace_folder_row = function(oldfolder, newfolder, display_name, before) |
| | | { |
| | | var form, elm, |
| | | id = this.get_folder_row_id(oldfolder), |
| | | var id = this.get_folder_row_id(oldfolder), |
| | | row = document.getElementById(id); |
| | | |
| | | // replace an existing table row (if found) |
| | | this.add_folder_row(newfolder, display_name, row, before); |
| | | |
| | | // rename folder in rename-folder dropdown |
| | | if ((form = this.gui_objects.editform) && (elm = form.elements['_folder_oldname'])) { |
| | | for (var i=0; i<elm.options.length; i++) { |
| | | if (elm.options[i].value == oldfolder) { |
| | | elm.options[i].text = display_name; |
| | | elm.options[i].value = newfolder; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | form.elements['_folder_newname'].value = ''; |
| | | } |
| | | }; |
| | | |
| | | // remove the table row of a specific mailbox from the table |
| | | // (the row will not be removed, just hidden) |
| | | this.remove_folder_row = function(folder) |
| | | { |
| | | var form, elm, row, id = this.get_folder_row_id(folder); |
| | | var row, id = this.get_folder_row_id(folder); |
| | | |
| | | if (id && (row = document.getElementById(id))) |
| | | row.style.display = 'none'; |
| | | |
| | | // remove folder from rename-folder list |
| | | if ((form = this.gui_objects.editform) && (elm = form.elements['_folder_oldname'])) { |
| | | for (var i=0; i<elm.options.length; i++) { |
| | | if (elm.options[i].value == folder) { |
| | | elm.options[i] = null; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (form && (elm = form.elements['_folder_newname'])) |
| | | elm.value = ''; |
| | | }; |
| | | |
| | | this.subscribe = function(folder) |
| | | { |
| | | if (folder) |
| | | this.http_post('subscribe', '_mbox='+urlencode(folder)); |
| | | if (folder) { |
| | | var lock = this.display_message(this.get_label('foldersubscribing'), 'loading'); |
| | | this.http_post('subscribe', '_mbox='+urlencode(folder), lock); |
| | | } |
| | | }; |
| | | |
| | | this.unsubscribe = function(folder) |
| | | { |
| | | if (folder) |
| | | this.http_post('unsubscribe', '_mbox='+urlencode(folder)); |
| | | }; |
| | | |
| | | this.enable_threading = function(folder) |
| | | { |
| | | if (folder) |
| | | this.http_post('enable-threading', '_mbox='+urlencode(folder)); |
| | | }; |
| | | |
| | | this.disable_threading = function(folder) |
| | | { |
| | | if (folder) |
| | | this.http_post('disable-threading', '_mbox='+urlencode(folder)); |
| | | if (folder) { |
| | | var lock = this.display_message(this.get_label('folderunsubscribing'), 'loading'); |
| | | this.http_post('unsubscribe', '_mbox='+urlencode(folder), lock); |
| | | } |
| | | }; |
| | | |
| | | // helper method to find a specific mailbox row ID |
| | |
| | | var cell, td, |
| | | new_row = document.createElement('tr'); |
| | | |
| | | for(var n=0; n<row.cells.length; n++) { |
| | | for (var n=0; n<row.cells.length; n++) { |
| | | cell = row.cells[n]; |
| | | td = document.createElement('td'); |
| | | |
| | |
| | | } |
| | | |
| | | return new_row; |
| | | }; |
| | | |
| | | // when user select a folder in manager |
| | | this.show_folder = function(folder, path, force) |
| | | { |
| | | var target = window, |
| | | url = '&_action=edit-folder&_mbox='+urlencode(folder); |
| | | |
| | | if (path) |
| | | url += '&_path='+urlencode(path); |
| | | |
| | | if (this.env.contentframe && window.frames && window.frames[this.env.contentframe]) { |
| | | target = window.frames[this.env.contentframe]; |
| | | url += '&_framed=1'; |
| | | } |
| | | |
| | | if (String(target.location.href).indexOf(url) >= 0 && !force) { |
| | | this.show_contentframe(true); |
| | | } |
| | | else { |
| | | 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; |
| | | } |
| | | }; |
| | | |
| | | // disables subscription checkbox (for protected folder) |
| | | this.disable_subscription = function(folder) |
| | | { |
| | | var id = this.get_folder_row_id(folder); |
| | | if (id) |
| | | $('input[name="_subscribed[]"]', $('#'+id)).attr('disabled', true); |
| | | }; |
| | | |
| | | this.folder_size = function(folder) |
| | | { |
| | | var lock = this.set_busy(true, 'loading'); |
| | | this.http_post('folder-size', '_mbox='+urlencode(folder), lock); |
| | | }; |
| | | |
| | | this.folder_size_update = function(size) |
| | | { |
| | | $('#folder-size').replaceWith(size); |
| | | }; |
| | | |
| | | |
| | |
| | | |
| | | type = type ? type : 'notice'; |
| | | |
| | | var date = new Date(), |
| | | id = type + date.getTime(); |
| | | |
| | | var ref = this, |
| | | key = msg, |
| | | date = new Date(), |
| | | id = type + date.getTime(), |
| | | timeout = this.message_time * (type == 'error' || type == 'warning' ? 2 : 1); |
| | | |
| | | if (type == 'loading') { |
| | | key = 'loading'; |
| | | timeout = this.env.request_timeout * 1000; |
| | | if (!msg) |
| | | msg = this.get_label('loading'); |
| | | |
| | | // The same message of type 'loading' is already displayed |
| | | if (this.messages[msg]) { |
| | | this.messages[msg].elements.push(id); |
| | | return id; |
| | | } |
| | | } |
| | | |
| | | var ref = this, |
| | | obj = $('<div>').addClass(type).html(msg), |
| | | cont = $(this.gui_objects.message).show(); |
| | | |
| | | if (type == 'loading') { |
| | | obj.appendTo(cont); |
| | | this.messages[msg] = {'obj': obj, 'elements': [id]}; |
| | | window.setTimeout(function() { rcmail.hide_message(id); }, this.env.request_timeout * 1000); |
| | | // The same message is already displayed |
| | | if (this.messages[key]) { |
| | | // replace label |
| | | if (this.messages[key].obj) |
| | | this.messages[key].obj.html(msg); |
| | | // store label in stack |
| | | if (type == 'loading') { |
| | | this.messages[key].labels.push({'id': id, 'msg': msg}); |
| | | } |
| | | // add element and set timeout |
| | | this.messages[key].elements.push(id); |
| | | window.setTimeout(function() { ref.hide_message(id, type == 'loading'); }, timeout); |
| | | return id; |
| | | } |
| | | else { |
| | | obj.appendTo(cont).bind('mousedown', function() { return ref.hide_message(obj); }); |
| | | window.setTimeout(function() { ref.hide_message(obj, true); }, |
| | | this.message_time * (type == 'error' ? 2 : 1)); |
| | | return obj; |
| | | |
| | | // create DOM object and display it |
| | | var obj = $('<div>').addClass(type).html(msg).data('key', key), |
| | | cont = $(this.gui_objects.message).append(obj).show(); |
| | | |
| | | this.messages[key] = {'obj': obj, 'elements': [id]}; |
| | | |
| | | if (type == 'loading') { |
| | | this.messages[key].labels = [{'id': id, 'msg': msg}]; |
| | | } |
| | | else { |
| | | obj.click(function() { return ref.hide_message(obj); }); |
| | | } |
| | | |
| | | window.setTimeout(function() { ref.hide_message(id, type == 'loading'); }, timeout); |
| | | return id; |
| | | }; |
| | | |
| | | // make a message to disapear |
| | |
| | | if (this.is_framed()) |
| | | return parent.rcmail.hide_message(obj, fade); |
| | | |
| | | var k, n, i, msg, m = this.messages; |
| | | |
| | | // Hide message by object, don't use for 'loading'! |
| | | if (typeof(obj) == 'object') { |
| | | // custom message |
| | | $(obj)[fade?'fadeOut':'hide'](); |
| | | msg = $(obj).data('key'); |
| | | if (this.messages[msg]) |
| | | delete this.messages[msg]; |
| | | } |
| | | // Hide message by id |
| | | else { |
| | | // 'loading' message |
| | | var k, n, m = this.messages; |
| | | for (k in m) { |
| | | for (n in m[k].elements) { |
| | | if (m[k] && m[k].elements[n] == obj) { |
| | | m[k].elements.splice(n, 1); |
| | | // hide DOM element if last instance is removed |
| | | if (!m[k].elements.length) { |
| | | m[k].obj[fade?'fadeOut':'hide'](); |
| | | delete m[k]; |
| | | } |
| | | // set pending action label for 'loading' message |
| | | else if (k == 'loading') { |
| | | for (i in m[k].labels) { |
| | | if (m[k].labels[i].id == obj) { |
| | | delete m[k].labels[i]; |
| | | } |
| | | else { |
| | | msg = m[k].labels[i].msg; |
| | | } |
| | | m[k].obj.html(msg); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | 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; |
| | |
| | | } |
| | | th.appendChild(tr); |
| | | thead.parentNode.replaceChild(th, thead); |
| | | thead = th; |
| | | } |
| | | |
| | | for (n=0, len=this.env.coltypes.length; n<len; n++) { |
| | |
| | | |
| | | 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 |
| | |
| | | |
| | | } // end object rcube_webmail |
| | | |
| | | |
| | | // some static methods |
| | | rcube_webmail.long_subject_title = function(elem, indent) |
| | | { |
| | | if (!elem.title) { |
| | | var $elem = $(elem); |
| | | if ($elem.width() + indent * 15 > $elem.parent().width()) |
| | | elem.title = $elem.html(); |
| | | } |
| | | }; |
| | | |
| | | // copy event engine prototype |
| | | rcube_webmail.prototype.addEventListener = rcube_event_engine.prototype.addEventListener; |
| | | rcube_webmail.prototype.removeEventListener = rcube_event_engine.prototype.removeEventListener; |