| | |
| | | /* |
| | | /* |
| | | +-----------------------------------------------------------------------+ |
| | | | RoundCube Webmail Client Script | |
| | | | | |
| | |
| | | | Copyright (C) 2005, RoundCube Dev, - Switzerland | |
| | | | Licensed under the GNU GPL | |
| | | | | |
| | | | Modified: 2005/10/21 (roundcube) | |
| | | | Modified: 2005/11/08 (roundcube) | |
| | | | | |
| | | +-----------------------------------------------------------------------+ |
| | | | Author: Thomas Bruederli <roundcube@gmail.com> | |
| | |
| | | function rcube_webmail() |
| | | { |
| | | this.env = new Object(); |
| | | this.labels = new Object(); |
| | | this.buttons = new Object(); |
| | | this.gui_objects = new Object(); |
| | | this.commands = new Object(); |
| | |
| | | // webmail client settings |
| | | this.dblclick_time = 600; |
| | | this.message_time = 5000; |
| | | this.request_timeout = 120000; |
| | | this.request_timeout = 180000; |
| | | this.mbox_expression = new RegExp('[^0-9a-z\-_]', 'gi'); |
| | | this.env.blank_img = 'skins/default/images/blank.gif'; |
| | | |
| | |
| | | //if (!this.busy) |
| | | this.env[name] = value; |
| | | }; |
| | | |
| | | |
| | | // add a localized label to the client environment |
| | | this.add_label = function(key, value) |
| | | { |
| | | this.labels[key] = value; |
| | | }; |
| | | |
| | | |
| | | // add a button to the button list |
| | | this.register_button = function(command, id, type, act, sel, over) |
| | |
| | | |
| | | if (this.env.action=='show') |
| | | { |
| | | this.enable_command('show', 'reply', 'forward', 'moveto', 'delete', 'viewsource', 'print', 'load-attachment', true); |
| | | this.enable_command('show', 'reply', 'reply-all', 'forward', 'moveto', 'delete', 'viewsource', 'print', 'load-attachment', true); |
| | | if (this.env.next_uid) |
| | | this.enable_command('nextmessage', true); |
| | | if (this.env.prev_uid) |
| | |
| | | |
| | | case 'sort': |
| | | // get the type of sorting |
| | | var a_sort = props.split('_'); |
| | | var sort_col = a_sort[0]; |
| | | var sort_order = a_sort[1].toUpperCase(); |
| | | var header; |
| | | |
| | | if (this.env.sort_col==sort_col && this.env.sort_order==sort_order) |
| | | break; |
| | | |
| | | // set table header class |
| | | if (header = document.getElementById('rcmHead'+this.env.sort_col)) |
| | | this.set_classname(header, 'sorted'+(this.env.sort_order.toUpperCase()), false); |
| | | if (header = document.getElementById('rcmHead'+sort_col)) |
| | | this.set_classname(header, 'sorted'+sort_order, true); |
| | | |
| | | // save new sort properties |
| | | this.env.sort_col = sort_col; |
| | | this.env.sort_order = sort_order; |
| | | |
| | | // reload message list |
| | | this.list_mailbox('', '', props); |
| | | break; |
| | | |
| | |
| | | case 'save-identity': |
| | | case 'save': |
| | | if (this.gui_objects.editform) |
| | | { |
| | | var input_pagesize = rcube_find_object('_pagesize'); |
| | | var input_name = rcube_find_object('_name'); |
| | | var input_email = rcube_find_object('_email'); |
| | | |
| | | // user prefs |
| | | if (input_pagesize && isNaN(input_pagesize.value)) |
| | | { |
| | | alert(this.get_label('nopagesizewarning')); |
| | | input_pagesize.focus(); |
| | | break; |
| | | } |
| | | // contacts/identities |
| | | else |
| | | { |
| | | if (input_name && input_name.value == '') |
| | | { |
| | | alert(this.get_label('nonamewarning')); |
| | | input_name.focus(); |
| | | break; |
| | | } |
| | | else if (input_email && !rcube_check_email(input_email.value)) |
| | | { |
| | | alert(this.get_label('noemailwarning')); |
| | | input_email.focus(); |
| | | break; |
| | | } |
| | | } |
| | | |
| | | this.gui_objects.editform.submit(); |
| | | } |
| | | break; |
| | | |
| | | case 'delete': |
| | |
| | | var input_to = rcube_find_object('_to'); |
| | | var input_subject = rcube_find_object('_subject'); |
| | | var input_message = rcube_find_object('_message'); |
| | | |
| | | if (input_to.value!='' && input_message.value!='') |
| | | |
| | | // check for empty recipient |
| | | if (input_to && !rcube_check_email(input_to.value, true)) |
| | | { |
| | | this.set_busy(true, 'sendingmessage'); |
| | | var form = this.gui_objects.messageform; |
| | | form.submit(); |
| | | alert(this.get_label('norecipientwarning')); |
| | | input_to.focus(); |
| | | break; |
| | | } |
| | | |
| | | |
| | | // display localized warning for missing subject |
| | | if (input_subject && input_subject.value == '') |
| | | { |
| | | var subject = prompt(this.get_label('nosubjectwarning'), this.get_label('nosubject')); |
| | | |
| | | // user hit cancel, so don't send |
| | | if (!subject && subject !== '') |
| | | { |
| | | input_subject.focus(); |
| | | break; |
| | | } |
| | | else |
| | | { |
| | | input_subject.value = subject ? subject : this.get_label('nosubject'); |
| | | } |
| | | } |
| | | |
| | | // check for empty body |
| | | if (input_message.value=='') |
| | | { |
| | | if (!confirm(this.get_label('nobodywarning'))) |
| | | { |
| | | input_message.focus(); |
| | | break; |
| | | } |
| | | } |
| | | |
| | | // all checks passed, send message |
| | | this.set_busy(true, 'sendingmessage'); |
| | | var form = this.gui_objects.messageform; |
| | | form.submit(); |
| | | break; |
| | | |
| | | case 'add-attachment': |
| | |
| | | this.upload_file(props) |
| | | break; |
| | | |
| | | case 'reply-all': |
| | | case 'reply': |
| | | var uid; |
| | | if (uid = this.get_single_uid()) |
| | | { |
| | | this.set_busy(true); |
| | | location.href = this.env.comm_path+'&_action=compose&_reply_uid='+uid+'&_mbox='+escape(this.env.mailbox); |
| | | location.href = this.env.comm_path+'&_action=compose&_reply_uid='+uid+'&_mbox='+escape(this.env.mailbox)+(command=='reply-all' ? '&_all=1' : ''); |
| | | } |
| | | break; |
| | | |
| | |
| | | this.set_busy = function(a, message) |
| | | { |
| | | if (a && message) |
| | | this.display_message('Loading...', 'loading', true); |
| | | { |
| | | var msg = this.get_label(message); |
| | | if (msg==message) |
| | | msg = 'Loading...'; |
| | | |
| | | this.display_message(msg, 'loading', true); |
| | | } |
| | | else if (!a && this.busy) |
| | | this.hide_message(); |
| | | |
| | |
| | | }; |
| | | |
| | | |
| | | // return a localized string |
| | | this.get_label = function(name) |
| | | { |
| | | if (this.labels[name]) |
| | | return this.labels[name]; |
| | | else |
| | | return name; |
| | | }; |
| | | |
| | | |
| | | // switch to another application task |
| | | this.switch_task = function(task) |
| | | { |
| | | if (this.task===task) |
| | | if (this.task===task && task!='mail') |
| | | return; |
| | | |
| | | var url = this.get_task_url(task); |
| | | if (task=='mail') |
| | | url += '&_mbox=INBOX'; |
| | | |
| | | this.set_busy(true); |
| | | location.href = this.get_task_url(task); |
| | | location.href = url; |
| | | }; |
| | | |
| | | |
| | |
| | | // enable/disable commands for message |
| | | if (this.task=='mail') |
| | | { |
| | | this.enable_command('show', 'reply', 'forward', 'print', selected); |
| | | this.enable_command('show', 'reply', 'reply-all', 'forward', 'print', selected); |
| | | this.enable_command('delete', 'moveto', this.selection.length>0 ? true : false); |
| | | } |
| | | else if (this.task=='addressbook') |
| | |
| | | if (this.message_rows[uid].classname.indexOf('unread')<0 && this.message_rows[uid].unread) |
| | | { |
| | | this.message_rows[uid].classname += ' unread'; |
| | | if (!this.in_selection(uid)) |
| | | this.message_rows[uid].obj.className += ' unread'; |
| | | this.set_classname(this.message_rows[uid].obj, 'unread', true); |
| | | |
| | | if (this.env.unreadicon) |
| | | icn_src = this.env.unreadicon; |
| | | } |
| | | else if (!this.message_rows[uid].unread) |
| | | { |
| | | this.message_rows[uid].classname = this.message_rows[uid].classname.replace(/\s*unread/, ''); |
| | | if (!this.in_selection(uid)) |
| | | this.message_rows[uid].obj.className = this.message_rows[uid].obj.className.replace(/\s*unread/, ''); |
| | | this.set_classname(this.message_rows[uid].obj, 'unread', false); |
| | | |
| | | if (this.message_rows[uid].replied && this.env.repliedicon) |
| | | icn_src = this.env.repliedicon; |
| | |
| | | if (this.gui_objects.mailboxlist) |
| | | { |
| | | var item, reg, text_obj; |
| | | var s_current = this.env.mailbox.toLowerCase().replace(this.mbox_expression, ''); |
| | | var s_mbox = String(mbox).toLowerCase().replace(this.mbox_expression, ''); |
| | | var s_current = this.env.mailbox.toLowerCase().replace(this.mbox_expression, ''); |
| | | var nodes = this.gui_objects.mailboxlist.getElementsByTagName('LI'); |
| | | |
| | | for (var n=0; n<nodes.length; n++) |
| | | { |
| | | item = nodes[n]; |
| | | if (item.className && item.className.indexOf('mailbox '+s_mbox+' ')>=0) |
| | | this.set_classname(item, 'selected', true); |
| | | else if (item.className && item.className.indexOf('mailbox '+s_current)>=0) |
| | | this.set_classname(item, 'selected', false); |
| | | } |
| | | var current_li = document.getElementById('rcmbx'+s_current); |
| | | var mbox_li = document.getElementById('rcmbx'+s_mbox); |
| | | |
| | | if (current_li) |
| | | this.set_classname(current_li, 'selected', false); |
| | | if (mbox_li) |
| | | this.set_classname(mbox_li, 'selected', true); |
| | | } |
| | | |
| | | this.env.mailbox = mbox; |