From 5f0724f8adca9b545b89e71287f8276e86881868 Mon Sep 17 00:00:00 2001 From: alecpl <alec@alec.pl> Date: Fri, 25 Jul 2008 14:42:56 -0400 Subject: [PATCH] #1485143: fixed empty body validation errors on IE --- program/js/app.js | 205 ++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 176 insertions(+), 29 deletions(-) diff --git a/program/js/app.js b/program/js/app.js index bebf561..20c561a 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -136,7 +136,7 @@ this.message_list.addEventListener('dragend', function(o){ p.drag_active = false; }); this.message_list.init(); - this.enable_command('toggle_status', true); + this.enable_command('toggle_status', 'toggle_flag', true); if (this.gui_objects.mailcontframe) { @@ -185,7 +185,7 @@ { if (this.gui_objects.remoteobjectsmsg) this.gui_objects.remoteobjectsmsg.style.display = 'block'; - this.enable_command('load-images', true); + this.enable_command('load-images', 'always-load', true); } if (this.env.action=='compose') @@ -203,7 +203,10 @@ if (this.env.messagecount) this.enable_command('select-all', 'select-none', 'expunge', true); - if (this.env.messagecount && (this.env.mailbox==this.env.trash_mailbox || this.env.mailbox==this.env.junk_mailbox)) + if (this.env.messagecount + && (this.env.mailbox == this.env.trash_mailbox || this.env.mailbox == this.env.junk_mailbox + || this.env.mailbox.match('^' + RegExp.escape(this.env.trash_mailbox) + RegExp.escape(this.env.delimiter)) + || this.env.mailbox.match('^' + RegExp.escape(this.env.junk_mailbox) + RegExp.escape(this.env.delimiter)))) this.enable_command('purge', true); this.set_page_buttons(); @@ -370,6 +373,7 @@ row.deleted = this.env.messages[uid].deleted ? true : false; row.unread = this.env.messages[uid].unread ? true : false; row.replied = this.env.messages[uid].replied ? true : false; + row.flagged = this.env.messages[uid].flagged ? true : false; } // set eventhandler to message icon @@ -379,6 +383,24 @@ row.icon.id = 'msgicn_'+row.uid; row.icon._row = row.obj; row.icon.onmousedown = function(e) { p.command('toggle_status', this); }; + } + + // global variable 'flagged_col' may be not defined yet + if (!this.env.flagged_col && this.env.coltypes) + { + var found; + if((found = find_in_array('flag', this.env.coltypes)) >= 0) + this.set_env('flagged_col', found+1); + } + + // set eventhandler to flag icon, if icon found + if (this.env.flagged_col && (row.flagged_icon = row.obj.cells[this.env.flagged_col].childNodes[0]) + && row.flagged_icon.nodeName=='IMG') + { + var p = this; + row.flagged_icon.id = 'flaggedicn_'+row.uid; + row.flagged_icon._row = row.obj; + row.flagged_icon.onmousedown = function(e) { p.command('toggle_flag', this); }; } }; @@ -704,6 +726,31 @@ this.mark_message(flag, uid); break; + + case 'toggle_flag': + if (props && !props._row) + break; + + var uid; + var flag = 'flagged'; + + if (props._row.uid) + { + uid = props._row.uid; + this.message_list.dont_select = true; + // toggle flagged/unflagged + if (this.message_list.rows[uid].flagged) + flag = 'unflagged'; + } + this.mark_message(flag, uid); + break; + + case 'always-load': + if (this.env.uid && this.env.sender) { + this.add_contact(urlencode(this.env.sender)); + window.setTimeout(function(){ ref.command('load-images'); }, 300); + break; + } case 'load-images': if (this.env.uid) @@ -1397,13 +1444,13 @@ lock = true; this.set_busy(true, 'movingmessage'); } - else + else if (!this.env.flag_for_deletion) this.show_contentframe(false); // Hide message command buttons until a message is selected this.enable_command('reply', 'reply-all', 'forward', 'delete', 'mark', 'print', false); - this._with_selected_messages('moveto', lock, add_url); + this._with_selected_messages('moveto', lock, add_url, (this.env.flag_for_deletion ? false : true)); }; // delete selected messages from the current mailbox @@ -1453,12 +1500,12 @@ return; this.show_contentframe(false); - this._with_selected_messages('delete', false, '&_from='+(this.env.action ? this.env.action : '')); + this._with_selected_messages('delete', false, '&_from='+(this.env.action ? this.env.action : ''), true); }; // Send a specifc request with UIDs of all selected messages // @private - this._with_selected_messages = function(action, lock, add_url) + this._with_selected_messages = function(action, lock, add_url, remove) { var a_uids = new Array(); @@ -1467,13 +1514,28 @@ else { var selection = this.message_list.get_selection(); + var rows = this.message_list.rows; var id; for (var n=0; n<selection.length; n++) { id = selection[n]; a_uids[a_uids.length] = id; - this.message_list.remove_row(id, (n == selection.length-1)); + if (remove) + this.message_list.remove_row(id, (n == selection.length-1)); + else + { + rows[id].deleted = true; + + if (rows[id].classname.indexOf('deleted')<0) + { + rows[id].classname += ' deleted'; + this.set_classname(rows[id].obj, 'deleted', true); + } + + if (rows[id].icon && this.env.deletedicon) + rows[id].icon.src = this.env.deletedicon; + } } } @@ -1501,7 +1563,7 @@ { for (var n=0; n<selection.length; n++) { - a_uids[a_uids.length] = selection[n]; + a_uids[a_uids.length] = selection[n]; } } @@ -1513,8 +1575,10 @@ id = a_uids[n]; if ((flag=='read' && this.message_list.rows[id].unread) || (flag=='unread' && !this.message_list.rows[id].unread) - || (flag=='delete' && !this.message_list.rows[id].deleted) - || (flag=='undelete' && this.message_list.rows[id].deleted)) + || (flag=='delete' && !this.message_list.rows[id].deleted) + || (flag=='undelete' && this.message_list.rows[id].deleted) + || (flag=='flagged' && !this.message_list.rows[id].flagged) + || (flag=='unflagged' && this.message_list.rows[id].flagged)) { r_uids[r_uids.length] = id; } @@ -1533,6 +1597,10 @@ case 'delete': case 'undelete': this.toggle_delete_status(r_uids); + break; + case 'flagged': + case 'unflagged': + this.toggle_flagged_status(flag, a_uids); break; } }; @@ -1600,6 +1668,32 @@ } } + + // set image to flagged or unflagged + this.toggle_flagged_status = function(flag, a_uids) + { + // mark all message rows as flagged/unflagged + var icn_src; + var rows = this.message_list.rows; + for (var i=0; i<a_uids.length; i++) + { + uid = a_uids[i]; + if (rows[uid]) + { + rows[uid].flagged = (flag=='flagged' ? true : false); + + if (rows[uid].flagged && this.env.flaggedicon) + icn_src = this.env.flaggedicon; + else if (this.env.unflaggedicon) + icn_src = this.env.unflaggedicon; + + if (rows[uid].flagged_icon && icn_src) + rows[uid].flagged_icon.src = icn_src; + } + } + + this.http_post('mark', '_uid='+a_uids.join(',')+'&_flag='+flag); + }; // mark all message rows as deleted/undeleted this.toggle_delete_status = function(a_uids) @@ -1795,11 +1889,18 @@ } // check for empty body - if ((input_message.value == '' && - (!window.tinyMCE || tinyMCE.get('compose-body').getContent() == '')) && - !confirm(this.get_label('nobodywarning'))) + if ((!window.tinyMCE || !tinyMCE.get('compose-body')) + && input_message.value == '' + && !confirm(this.get_label('nobodywarning'))) { input_message.focus(); + return false; + } + else if (window.tinyMCE && tinyMCE.get('compose-body') + && !tinyMCE.get('compose-body').getContent() + && !confirm(this.get_label('nobodywarning'))) + { + tinyMCE.get('compose-body').focus(); return false; } @@ -1838,9 +1939,9 @@ var input_cc = rcube_find_object('_cc'); var input_bcc = rcube_find_object('_bcc'); var input_subject = rcube_find_object('_subject'); - var input_message = rcube_find_object('_message'); - + var editor, input_message; var str = ''; + if (input_to && input_to.value) str += input_to.value+':'; if (input_cc && input_cc.value) @@ -1849,8 +1950,14 @@ str += input_bcc.value+':'; if (input_subject && input_subject.value) str += input_subject.value+':'; - if (input_message && input_message.value) + + if (editor = tinyMCE.get('compose-body')) + str += editor.getContent(); + else + { + input_message = rcube_find_object('_message'); str += input_message.value; + } if (save) this.cmp_hash = str; @@ -2647,12 +2754,20 @@ var form; if ((form = this.gui_objects.editform) && form.elements['_folder_name']) + { name = form.elements['_folder_name'].value; - if (this.env.folder && name != '') - name = this.env.folder+this.env.delimiter+name; - if (name) + 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; + this.http_post('create-folder', '_name='+urlencode(name), true); + } else if (form.elements['_folder_name']) form.elements['_folder_name'].focus(); }; @@ -2716,9 +2831,16 @@ 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; - this.http_post('rename-folder', '_folder_oldname='+urlencode(this.env.subscriptionrows[this.edit_folder][0])+'&_folder_newname='+urlencode(newname)); + + this.http_post('rename-folder', '_folder_oldname='+urlencode(this.env.subscriptionrows[this.edit_folder][0])+'&_folder_newname='+urlencode(newname), true); } } // escape @@ -2749,7 +2871,6 @@ // add a new folder to the subscription list by cloning a folder row this.add_folder_row = function(name, display_name, replace, before) { - name = name.replace('\\',""); if (!this.gui_objects.subscriptionlist) return false; @@ -3198,9 +3319,12 @@ cell.id = 'rcmHead'+col; } - - if (col == 'subject' && this.message_list) + else if (col == 'subject' && this.message_list) this.message_list.subject_col = n+1; + else if (col == 'flag' && this.env.unflaggedicon) + { + cell.innerHTML = '<img src="'+this.env.unflaggedicon+'" alt="" />'; + } } }; @@ -3216,7 +3340,8 @@ this.env.messages[uid] = {deleted:flags.deleted?1:0, replied:flags.replied?1:0, - unread:flags.unread?1:0}; + unread:flags.unread?1:0, + flagged:flags.flagged?1:0}; var row = document.createElement('TR'); row.id = 'rcmrow'+uid; @@ -3231,7 +3356,7 @@ var col = document.createElement('TD'); col.className = 'icon'; - col.innerHTML = icon ? '<img src="'+icon+'" alt="" border="0" />' : ''; + col.innerHTML = icon ? '<img src="'+icon+'" alt="" />' : ''; row.appendChild(col); // add each submitted col @@ -3240,13 +3365,23 @@ var c = this.coltypes[n]; col = document.createElement('TD'); col.className = String(c).toLowerCase(); - col.innerHTML = cols[c]; + + if (c=='flag') + { + if (flags.flagged && this.env.flaggedicon) + col.innerHTML = '<img src="'+this.env.flaggedicon+'" alt="" />'; + else if(this.env.unflaggedicon) + col.innerHTML = '<img src="'+this.env.unflaggedicon+'" alt="" />'; + } + else + col.innerHTML = cols[c]; + row.appendChild(col); } col = document.createElement('TD'); col.className = 'icon'; - col.innerHTML = attachment && this.env.attachmenticon ? '<img src="'+this.env.attachmenticon+'" alt="" border="0" />' : ''; + col.innerHTML = attachment && this.env.attachmenticon ? '<img src="'+this.env.attachmenticon+'" alt="" />' : ''; row.appendChild(col); this.message_list.insert_row(row, attop); @@ -3362,6 +3497,14 @@ tinyMCE.execCommand('mceRemoveControl', true, textAreaId); } }; + + + this.toggle_prefer_html = function(checkbox) + { + var addrbook_show_images; + if (addrbook_show_images = document.getElementById('rcmfd_addrbook_show_images')) + addrbook_show_images.disabled = !checkbox.checked; + } @@ -3509,7 +3652,11 @@ case 'check-recent': case 'getunread': this.enable_command('show', 'expunge', 'select-all', 'select-none', 'sort', (this.env.messagecount > 0)); - this.enable_command('purge', (this.env.messagecount && (this.env.mailbox==this.env.trash_mailbox || this.env.mailbox==this.env.junk_mailbox))); + var mailboxtest = (this.env.mailbox == this.env.trash_mailbox || this.env.mailbox == this.env.junk_mailbox + || this.env.mailbox.match('^' + RegExp.escape(this.env.trash_mailbox) + RegExp.escape(this.env.delimiter)) + || this.env.mailbox.match('^' + RegExp.escape(this.env.junk_mailbox) + RegExp.escape(this.env.delimiter))) ? true : false; + + this.enable_command('purge', (this.env.messagecount && mailboxtest)); break; -- Gitblit v1.9.1