From 8eefbb2158c43b51a8c33e6c480cbe61539b9535 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak <alec@alec.pl> Date: Mon, 27 Aug 2012 04:16:04 -0400 Subject: [PATCH] Add option to enable HTML editor on forwarding (#1488517) --- program/js/app.js | 152 ++++++++++++++++++++++---------------------------- 1 files changed, 66 insertions(+), 86 deletions(-) diff --git a/program/js/app.js b/program/js/app.js index e0f3b23..838f240 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -922,14 +922,8 @@ break; case 'savedraft': - var form = this.gui_objects.messageform, msgid; - // Reset the auto-save timer clearTimeout(this.save_timer); - - // saving Drafts is disabled - if (!form) - break; // compose form did not change if (this.cmp_hash == this.compose_field_hash()) { @@ -940,35 +934,17 @@ // re-set keep-alive timeout this.start_keepalive(); - msgid = this.set_busy(true, 'savingmessage'); - - form.target = "savetarget"; - form._draft.value = '1'; - form.action = this.add_url(form.action, '_unlock', msgid); - form.submit(); + this.submit_messageform(true); break; case 'send': - if (!this.gui_objects.messageform) - break; - if (!props.nocheck && !this.check_compose_input(command)) break; // Reset the auto-save timer clearTimeout(this.save_timer); - // all checks passed, send message - var lang = this.spellcheck_lang(), - form = this.gui_objects.messageform, - msgid = this.set_busy(true, 'sendingmessage'); - - form.target = 'savetarget'; - form._draft.value = ''; - form.action = this.add_url(form.action, '_unlock', msgid); - form.action = this.add_url(form.action, '_lang', lang); - form.submit(); - + this.submit_messageform(); break; case 'send-attachment': @@ -1000,7 +976,7 @@ // do reply-list, when list is detected and popup menu wasn't used url._all = (!props && this.commands['reply-list'] ? 'list' : 'all'); else if (command == 'reply-list') - url._all = list; + url._all = 'list'; this.goto_url('compose', url, true); } @@ -1471,29 +1447,21 @@ this.doc_mouse_up = function(e) { - var model, list, li, id; + var model, list, id; // ignore event if jquery UI dialog is open if ($(rcube_event.get_target(e)).closest('.ui-dialog, .ui-widget-overlay').length) return; - if (list = this.message_list) { - if (!rcube_mouse_is_over(e, list.list.parentNode)) - list.blur(); - else - list.focus(); + if (list = this.message_list) model = this.env.mailboxes; - } - else if (list = this.contact_list) { - if (!rcube_mouse_is_over(e, list.list.parentNode)) - list.blur(); - else - list.focus(); + else if (list = this.contact_list) model = this.env.contactfolders; - } - else if (this.ksearch_value) { + else if (this.ksearch_value) this.ksearch_blur(); - } + + if (list && !rcube_mouse_is_over(e, list.list.parentNode)) + list.blur(); // handle mouse release when dragging if (this.drag_active && model && this.env.last_folder_target) { @@ -1636,7 +1604,7 @@ for (i=0; i<cols.length; i++) if (cols[i].id && cols[i].id.match(/^rcm/)) { name = cols[i].id.replace(/^rcm/, ''); - this.env.coltypes.push(name == 'to' ? 'from' : name); + this.env.coltypes.push(name); } if ((found = $.inArray('flag', this.env.coltypes)) >= 0) @@ -1915,7 +1883,7 @@ // make sure new columns are added at the end of the list var i, idx, name, newcols = [], oldcols = this.env.coltypes; for (i=0; i<oldcols.length; i++) { - name = oldcols[i] == 'to' ? 'from' : oldcols[i]; + name = oldcols[i]; idx = $.inArray(name, cols); if (idx != -1) { newcols.push(name); @@ -2676,34 +2644,37 @@ // set a specific flag to one or more messages this.mark_message = function(flag, uid) { - var a_uids = [], r_uids = [], len, n, id, - selection = this.message_list ? this.message_list.get_selection() : []; + var a_uids = [], r_uids = [], len, n, id, selection, + list = this.message_list; if (uid) a_uids[0] = uid; else if (this.env.uid) a_uids[0] = this.env.uid; - else if (this.message_list) { + else if (list) { + selection = list.get_selection(); for (n=0, len=selection.length; n<len; n++) { a_uids.push(selection[n]); } } - if (!this.message_list) + if (!list) r_uids = a_uids; - else + else { + list.focus(); for (n=0, len=a_uids.length; n<len; n++) { 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=='flagged' && !this.message_list.rows[id].flagged) - || (flag=='unflagged' && this.message_list.rows[id].flagged)) + if ((flag=='read' && list.rows[id].unread) + || (flag=='unread' && !list.rows[id].unread) + || (flag=='delete' && !list.rows[id].deleted) + || (flag=='undelete' && list.rows[id].deleted) + || (flag=='flagged' && !list.rows[id].flagged) + || (flag=='unflagged' && list.rows[id].flagged)) { r_uids.push(id); } } + } // nothing to do if (!r_uids.length && !this.select_all_mode) @@ -3033,6 +3004,29 @@ .attr('autocomplete', 'off'); }; + this.submit_messageform = function(draft) + { + var form = this.gui_objects.messageform; + + if (!form) + return; + + // all checks passed, send message + var msgid = this.set_busy(true, draft ? 'savingmessage' : 'sendingmessage'), + lang = this.spellcheck_lang(), + files = []; + + // send files list + $('li', this.gui_objects.attachmentlist).each(function() { files.push(this.id.replace(/^rcmfile/, '')); }); + $('input[name="_attachments"]', form).val(files.join()); + + form.target = 'savetarget'; + form._draft.value = draft ? '1' : ''; + form.action = this.add_url(form.action, '_unlock', msgid); + form.action = this.add_url(form.action, '_lang', lang); + form.submit(); + }; + this.compose_recipient_select = function(list) { this.enable_command('add-recipient', list.selection.length > 0); @@ -3299,8 +3293,7 @@ input_message = $("[name='_message']"), message = input_message.val(), is_html = ($("input[name='_is_html']").val() == '1'), - sig = this.env.identity, - sig_separator = this.env.sig_above && (this.env.compose_mode == 'reply' || this.env.compose_mode == 'forward') ? '---' : '-- '; + sig = this.env.identity; // enable manual signature insert if (this.env.signatures && this.env.signatures[id]) { @@ -3313,12 +3306,8 @@ if (!is_html) { // remove the 'old' signature if (show_sig && sig && this.env.signatures && this.env.signatures[sig]) { - - sig = this.env.signatures[sig].is_html ? this.env.signatures[sig].plain_text : this.env.signatures[sig].text; + sig = this.env.signatures[sig].text; sig = sig.replace(/\r\n/g, '\n'); - - if (!sig.match(/^--[ -]\n/m)) - sig = sig_separator + '\n' + sig; p = this.env.sig_above ? message.indexOf(sig) : message.lastIndexOf(sig); if (p >= 0) @@ -3326,11 +3315,8 @@ } // add the new signature string if (show_sig && this.env.signatures && this.env.signatures[id]) { - sig = this.env.signatures[id]['is_html'] ? this.env.signatures[id]['plain_text'] : this.env.signatures[id]['text']; + sig = this.env.signatures[id].text; sig = sig.replace(/\r\n/g, '\n'); - - if (!sig.match(/^--[ -]\n/m)) - sig = sig_separator + '\n' + sig; if (this.env.sig_above) { if (p >= 0) { // in place of removed signature @@ -3395,21 +3381,8 @@ } } - if (this.env.signatures[id]) { - if (this.env.signatures[id].is_html) { - sig = this.env.signatures[id].text; - if (!this.env.signatures[id].plain_text.match(/^--[ -]\r?\n/m)) - sig = sig_separator + '<br />' + sig; - } - else { - sig = this.env.signatures[id].text; - if (!sig.match(/^--[ -]\r?\n/m)) - sig = sig_separator + '\n' + sig; - sig = '<pre>' + sig + '</pre>'; - } - - sigElem.innerHTML = sig; - } + if (this.env.signatures[id]) + sigElem.innerHTML = this.env.signatures[id].html; } this.env.identity = id; @@ -4032,8 +4005,7 @@ // if a group is currently selected, and there is at least one contact selected // thend we can enable the group-remove-selected command - this.enable_command('group-remove-selected', typeof this.env.group != 'undefined' && list.selection.length > 0); - + this.enable_command('group-remove-selected', this.env.group && list.selection.length > 0); this.enable_command('compose', this.env.group || list.selection.length > 0); this.enable_command('edit', id && writable); this.enable_command('delete', list.selection.length && writable); @@ -5686,7 +5658,7 @@ // for reordering column array (Konqueror workaround) // and for setting some message list global variables - this.set_message_coltypes = function(coltypes, repl) + this.set_message_coltypes = function(coltypes, repl, smart_col) { var list = this.message_list, thead = list ? list.list.tHead : null, @@ -5714,7 +5686,7 @@ for (n=0, len=this.env.coltypes.length; n<len; n++) { col = this.env.coltypes[n]; - if ((cell = thead.rows[0].cells[n]) && (col=='from' || col=='to')) { + if ((cell = thead.rows[0].cells[n]) && (col == 'from' || col == 'to' || col == 'fromto')) { cell.id = 'rcm'+col; // if we have links for sorting, it's a bit more complicated... if (cell.firstChild && cell.firstChild.tagName.toLowerCase()=='a') { @@ -5722,7 +5694,7 @@ cell.onclick = function(){ return rcmail.command('sort', this.__col, this); }; cell.__col = col; } - cell.innerHTML = this.get_label(col); + cell.innerHTML = this.get_label(col == 'fromto' ? smart_col : col); } } } @@ -6608,6 +6580,12 @@ return 0; }; + // Cookie setter + this.set_cookie = function(name, value, expires) + { + setCookie(name, value, expires, this.env.cookie_path, this.env.cookie_domain, this.env.cookie_secure); + } + } // end object rcube_webmail @@ -6638,6 +6616,8 @@ } }; +rcube_webmail.prototype.get_cookie = getCookie; + // copy event engine prototype rcube_webmail.prototype.addEventListener = rcube_event_engine.prototype.addEventListener; rcube_webmail.prototype.removeEventListener = rcube_event_engine.prototype.removeEventListener; -- Gitblit v1.9.1