From c17dc6aa31aaa6e7f61bd25993be55354e428996 Mon Sep 17 00:00:00 2001 From: alecpl <alec@alec.pl> Date: Sat, 20 Sep 2008 13:21:15 -0400 Subject: [PATCH] #1485385: fix missing close form tag --- program/js/app.js | 344 ++++++++++++++++++++++++++++++-------------------------- 1 files changed, 184 insertions(+), 160 deletions(-) diff --git a/program/js/app.js b/program/js/app.js index a6d88aa..d1341c7 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -214,12 +214,6 @@ this.set_page_buttons(); - // focus main window - if (this.env.framed && window.parent) - window.parent.focus(); - else - window.focus(); - // init message compose form if (this.env.action=='compose') this.init_messageform(); @@ -295,8 +289,10 @@ case 'settings': this.enable_command('preferences', 'identities', 'save', 'folders', true); - if (this.env.action=='identities' || this.env.action=='edit-identity' || this.env.action=='add-identity') - this.enable_command('edit', 'add', 'delete', true); + if (this.env.action=='identities' || this.env.action=='edit-identity' || this.env.action=='add-identity') { + this.enable_command('add', 'delete', this.env.multiple_identities); + this.enable_command('edit', true); + } if (this.env.action=='edit-identity' || this.env.action=='add-identity') this.enable_command('save', true); @@ -388,6 +384,7 @@ 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; + row.forwarded = this.env.messages[uid].forwarded ? true : false; } // set eventhandler to message icon @@ -761,7 +758,6 @@ 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'; @@ -1237,6 +1233,18 @@ if (this.env.mailbox.indexOf(id + this.env.delimiter) == 0) this.command('list', id); } + + // Work around a bug in IE6 and IE7, see #1485309 + if ((bw.ie6 || bw.ie7) && + li.nextSibling && + (li.nextSibling.getElementsByTagName("ul").length>0) && + li.nextSibling.getElementsByTagName("ul")[0].style && + (li.nextSibling.getElementsByTagName("ul")[0].style.display!='none')) + { + li.nextSibling.getElementsByTagName("ul")[0].style.display = 'none'; + li.nextSibling.getElementsByTagName("ul")[0].style.display = ''; + } + this.http_post('save-pref', '_name=collapsed_folders&_value='+escape(this.env.collapsed_folders)); this.set_unread_count_display(id, false); } @@ -1335,7 +1343,6 @@ /*********************************************************/ /********* (message) list functionality *********/ /*********************************************************/ - // when user doble-clicks on a row this.show_message = function(id, safe, preview) @@ -1531,6 +1538,98 @@ || this.env.mailbox.match('^' + RegExp.escape(this.env.junk_mailbox) + RegExp.escape(this.env.delimiter)))); }; + // set message icon + this.set_message_icon = function(uid) + { + var icn_src; + var rows = this.message_list.rows; + + if (!rows[uid]) + return false; + + if (rows[uid].deleted && this.env.deletedicon) + icn_src = this.env.deletedicon; + else if (rows[uid].replied && this.env.repliedicon) + { + if (rows[uid].forwarded && this.env.forwardedrepliedicon) + icn_src = this.env.forwardedrepliedicon; + else + icn_src = this.env.repliedicon; + } + else if (rows[uid].forwarded && this.env.forwardedicon) + icn_src = this.env.forwardedicon; + else if (rows[uid].unread && this.env.unreadicon) + icn_src = this.env.unreadicon; + else if (this.env.messageicon) + icn_src = this.env.messageicon; + + if (icn_src && rows[uid].icon) + rows[uid].icon.src = icn_src; + + icn_src = ''; + + 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; + } + + // set message status + this.set_message_status = function(uid, flag, status) + { + var rows = this.message_list.rows; + + if (!rows[uid]) return false; + + if (flag == 'unread') + rows[uid].unread = status; + else if(flag == 'deleted') + rows[uid].deleted = status; + else if (flag == 'replied') + rows[uid].replied = status; + else if (flag == 'forwarded') + rows[uid].forwarded = status; + else if (flag == 'flagged') + rows[uid].flagged = status; + } + + // set message row status, class and icon + this.set_message = function(uid, flag, status) + { + var rows = this.message_list.rows; + + if (!rows[uid]) return false; + + if (flag) + this.set_message_status(uid, flag, status); + + if (rows[uid].unread && rows[uid].classname.indexOf('unread')<0) + { + rows[uid].classname += ' unread'; + this.set_classname(rows[uid].obj, 'unread', true); + } + else if (!rows[uid].unread && rows[uid].classname.indexOf('unread')>=0) + { + rows[uid].classname = rows[uid].classname.replace(/\s*unread/, ''); + this.set_classname(rows[uid].obj, 'unread', false); + } + + if (rows[uid].deleted && rows[uid].classname.indexOf('deleted')<0) + { + rows[uid].classname += ' deleted'; + this.set_classname(rows[uid].obj, 'deleted', true); + } + else if (!rows[uid].deleted && rows[uid].classname.indexOf('deleted')>=0) + { + rows[uid].classname = rows[uid].classname.replace(/\s*deleted/, ''); + this.set_classname(rows[uid].obj, 'deleted', false); + } + + this.set_message_icon(uid); + } // move selected messages to the specified mailbox this.move_messages = function(mbox) @@ -1630,20 +1729,9 @@ 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 (this.env.read_when_deleted) - { - rows[id].classname = rows[id].classname.replace(/\s*unread/, ''); - this.set_classname(rows[id].obj, 'unread', false); - } - - if (rows[id].icon && this.env.deletedicon) - rows[id].icon.src = this.env.deletedicon; + rows[id].unread = false; + this.set_message(id); } } } @@ -1718,88 +1806,18 @@ this.toggle_read_status = function(flag, a_uids) { // mark all message rows as read/unread - 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].unread = (flag=='unread' ? true : false); - - if (rows[uid].classname.indexOf('unread')<0 && rows[uid].unread) - { - rows[uid].classname += ' unread'; - this.set_classname(rows[uid].obj, 'unread', true); - - if (this.env.unreadicon) - icn_src = this.env.unreadicon; - } - else if (!rows[uid].unread) - { - rows[uid].classname = rows[uid].classname.replace(/\s*unread/, ''); - this.set_classname(rows[uid].obj, 'unread', false); - - if (this.env.messageicon) - icn_src = this.env.messageicon; - } - - if (rows[uid].icon && icn_src - && !(rows[uid].replied && this.env.repliedicon) - && !(rows[uid].deleted && this.env.deletedicon)) - rows[uid].icon.src = icn_src; - } - } + this.set_message(a_uids[i], 'unread', (flag=='unread' ? true : false)); this.http_post('mark', '_uid='+a_uids.join(',')+'&_flag='+flag); }; - // set class to read/unread - this.mark_as_read_from_preview = function(uid) - { - var icn_src; - var rows = parent.rcmail.message_list.rows; - if(rows[uid].unread) - { - rows[uid].unread = false; - rows[uid].classname = rows[uid].classname.replace(/\s*unread/, ''); - parent.rcmail.set_classname(rows[uid].obj, 'unread', false); - - if (rows[uid].replied && parent.rcmail.env.repliedicon) - icn_src = parent.rcmail.env.repliedicon; - else if (rows[uid].deleted && parent.rcmail.env.deletedicon) - icn_src = parent.rcmail.env.deletedicon; - else if (parent.rcmail.env.messageicon) - icn_src = parent.rcmail.env.messageicon; - - if (rows[uid].icon && icn_src) - rows[uid].icon.src = icn_src; - } - } - - // 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.set_message(a_uids[i], 'flagged', (flag=='flagged' ? true : false)); this.http_post('mark', '_uid='+a_uids.join(',')+'&_flag='+flag); }; @@ -1811,7 +1829,7 @@ if (a_uids.length==1) { - if (!rows.length || (rows[a_uids[0]] && rows[a_uids[0]].classname.indexOf('deleted') < 0)) + if (!rows.length || (rows[a_uids[0]] && !rows[a_uids[0]].deleted)) this.flag_as_deleted(a_uids); else this.flag_as_undeleted(a_uids); @@ -1824,7 +1842,7 @@ { uid = a_uids[i]; if (rows[uid]) { - if (rows[uid].classname.indexOf('deleted')<0) + if (!rows[uid].deleted) { all_deleted = false; break; @@ -1843,31 +1861,8 @@ this.flag_as_undeleted = function(a_uids) { - var icn_src; - var rows = this.message_list ? this.message_list.rows : new Array(); - for (var i=0; i<a_uids.length; i++) - { - uid = a_uids[i]; - if (rows[uid]) { - rows[uid].deleted = false; - - if (rows[uid].classname.indexOf('deleted') > 0) - { - rows[uid].classname = rows[uid].classname.replace(/\s*deleted/, ''); - this.set_classname(rows[uid].obj, 'deleted', false); - } - if (rows[uid].unread && this.env.unreadicon) - icn_src = this.env.unreadicon; - else if (rows[uid].replied && this.env.repliedicon) - icn_src = this.env.repliedicon; - else if (this.env.messageicon) - icn_src = this.env.messageicon; - - if (rows[uid].icon && icn_src) - rows[uid].icon.src = icn_src; - } - } + this.set_message(a_uids[i], 'deleted', false); this.http_post('mark', '_uid='+a_uids.join(',')+'&_flag=undelete'); return true; @@ -1885,22 +1880,7 @@ uid = a_uids[i]; if (rows[uid]) { - rows[uid].deleted = true; - - if (rows[uid].classname.indexOf('deleted')<0) - { - rows[uid].classname += ' deleted'; - this.set_classname(rows[uid].obj, 'deleted', true); - } - if (this.env.read_when_deleted) - { - rows[uid].classname = rows[uid].classname.replace(/\s*unread/, ''); - this.set_classname(rows[uid].obj, 'unread', false); - } - - if (rows[uid].icon && this.env.deletedicon) - rows[uid].icon.src = this.env.deletedicon; - + this.set_message(uid, 'deleted', true); if (rows[uid].unread) r_uids[r_uids.length] = uid; } @@ -1932,12 +1912,7 @@ { rows[uid].unread = false; rows[uid].read = true; - - rows[uid].classname = rows[uid].classname.replace(/\s*unread/, ''); - this.set_classname(rows[uid].obj, 'unread', false); - - if (rows[uid].icon) - rows[uid].icon.src = this.env.deletedicon; + this.set_message(uid); } } }; @@ -2335,7 +2310,6 @@ /********* keyboard live-search methods *********/ /*********************************************************/ - // handler for keyboard events on address-fields this.ksearch_keypress = function(e, obj) { @@ -2555,7 +2529,6 @@ /*********************************************************/ /********* address book methods *********/ /*********************************************************/ - this.contactlist_keypress = function(list) { @@ -2894,6 +2867,7 @@ if (this.env.folder && name != '') name = this.env.folder+this.env.delimiter+name; + this.set_busy(true, 'foldercreating'); this.http_post('create-folder', '_name='+urlencode(name), true); } else if (form.elements['_folder_name']) @@ -2968,6 +2942,7 @@ if (this.name_input.__parent) newname = this.name_input.__parent + this.env.delimiter + newname; + this.set_busy(true, 'folderrenaming'); this.http_post('rename-folder', '_folder_oldname='+urlencode(this.env.subscriptionrows[this.edit_folder][0])+'&_folder_newname='+urlencode(newname), true); } } @@ -2987,7 +2962,8 @@ if (folder && confirm(this.get_label('deletefolderconfirm'))) { - this.http_post('delete-folder', '_mboxes='+urlencode(folder)); + this.set_busy(true, 'folderdeleting'); + this.http_post('delete-folder', '_mboxes='+urlencode(folder), true); this.set_env('folder', null); if (this.gui_objects.createfolderhint) @@ -3469,6 +3445,7 @@ this.env.messages[uid] = {deleted:flags.deleted?1:0, replied:flags.replied?1:0, unread:flags.unread?1:0, + forwarded:flags.forwarded?1:0, flagged:flags.flagged?1:0}; var row = document.createElement('TR'); @@ -3478,10 +3455,21 @@ if (this.message_list.in_selection(uid)) row.className += ' selected'; - var icon = flags.deleted && this.env.deletedicon ? this.env.deletedicon: - (flags.unread && this.env.unreadicon ? this.env.unreadicon : - (flags.replied && this.env.repliedicon ? this.env.repliedicon : this.env.messageicon)); - + var icon = this.env.messageicon; + if (flags.deleted && this.env.deletedicon) + icon = this.env.deletedicon; + else if (flags.replied && this.env.repliedicon) + { + if (flags.forwarded && this.env.forwardedrepliedicon) + icon = this.env.forwardedrepliedicon; + else + icon = this.env.repliedicon; + } + else if (flags.forwarded && this.env.forwardedicon) + icon = this.env.forwardedicon; + else if(flags.unread && this.env.unreadicon) + icon = this.env.unreadicon; + var col = document.createElement('TD'); col.className = 'icon'; col.innerHTML = icon ? '<img src="'+icon+'" alt="" />' : ''; @@ -3513,6 +3501,14 @@ row.appendChild(col); this.message_list.insert_row(row, attop); + + // remove 'old' row + if (attop && this.env.pagesize && this.message_list.rowcount > this.env.pagesize) + { + var uid = this.message_list.get_last_row(); + this.message_list.remove_row(uid); + this.message_list.clear_selection(uid); + } }; @@ -3608,12 +3604,6 @@ } }; - // update parent's mailboxlist (from preview) - this.set_unread_count_from_preview = function(mbox, count, set_title) - { - parent.rcmail.set_unread_count(mbox, count, set_title); - } - // add row to contacts list this.add_contact_row = function(cid, cols, select) { @@ -3648,13 +3638,21 @@ this.toggle_editor = function(checkbox, textAreaId) { var ischecked = checkbox.checked; + var composeElement = document.getElementById(textAreaId); + if (ischecked) { - tinyMCE.execCommand('mceAddControl', true, textAreaId); + var existingPlainText = composeElement.value; + var htmlText = "<pre>" + existingPlainText + "</pre>"; + composeElement.value = htmlText; + tinyMCE.execCommand('mceAddControl', true, textAreaId); } else { - tinyMCE.execCommand('mceRemoveControl', true, textAreaId); + var thisMCE = tinyMCE.get(textAreaId); + var existingHtml = thisMCE.getContent(); + this.html2plain(existingHtml, textAreaId); + tinyMCE.execCommand('mceRemoveControl', true, textAreaId); } }; @@ -3683,6 +3681,7 @@ } }; + // display all-headers row and fetch raw message headers this.load_headers = function(elem) { @@ -3697,7 +3696,7 @@ // fetch headers only once if (!this.gui_objects.all_headers_box.innerHTML) { - this.set_busy(true, 'loading'); + this.display_message(this.get_label('loading'), 'loading', true); this.http_post('headers', '_uid='+this.env.uid); } } @@ -3713,6 +3712,32 @@ this.set_classname(elem, 'show-headers', true); this.gui_objects.all_headers_row.style.display = 'none'; elem.onclick = function() { rcmail.load_headers(elem); } + } + + + /********************************************************/ + /********* html to text conversion functions *********/ + /********************************************************/ + + this.html2plain = function(htmlText, id) + { + var http_request = new rcube_http_request(); + var url = this.env.bin_path+'html2text.php'; + var rcmail = this; + + this.set_busy(true, 'converting'); + console.log('HTTP POST: '+url); + + http_request.onerror = function(o) { rcmail.http_error(o); }; + http_request.oncomplete = function(o) { rcmail.set_text_value(o, id); }; + http_request.POST(url, htmlText, 'application/octet-stream'); + } + + this.set_text_value = function(httpRequest, id) + { + this.set_busy(false); + document.getElementById(id).value = httpRequest.get_text(); + console.log(httpRequest.get_text()); } @@ -4150,4 +4175,3 @@ window.setTimeout('if (window[\''+o+'\'] && window[\''+o+'\'].init) { '+o+'.init(); }', bw.win ? 500 : 200); } - -- Gitblit v1.9.1