From 7e263ea2048721482c00db65d4511f00c4c7b1d4 Mon Sep 17 00:00:00 2001 From: alecpl <alec@alec.pl> Date: Wed, 07 Dec 2011 04:35:29 -0500 Subject: [PATCH] - Add option to set default font for HTML message (#1484137) --- CHANGELOG | 1 program/include/main.inc | 24 ++++++++++++ program/steps/mail/compose.inc | 6 +++ program/js/editor.js | 3 + program/steps/settings/func.inc | 20 +++++++++ program/localization/en_US/labels.inc | 1 program/localization/pl_PL/labels.inc | 1 config/main.inc.php.dist | 5 ++ program/steps/mail/sendmail.inc | 19 ++++++--- program/js/app.js | 5 ++ program/steps/settings/save_prefs.inc | 1 11 files changed, 79 insertions(+), 7 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index ac8bd9e..59b0dc9 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ CHANGELOG Roundcube Webmail =========================== +- Add option to set default font for HTML message (#1484137) - Fix issues with big memory allocation of IMAP results - Replace prompt() with jQuery UI dialog (#1485135) - Fix navigation in messages search results diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist index 16b86c2..32d8a0d 100644 --- a/config/main.inc.php.dist +++ b/config/main.inc.php.dist @@ -794,4 +794,9 @@ // Skip alternative email addresses in autocompletion (show one address per contact) $rcmail_config['autocomplete_single'] = false; +// Default font for composed HTML message. +// Supported values: Andale Mono, Arial, Arial Black, Book Antiqua, Courier New, +// Georgia, Helvetica, Impact, Tahoma, Terminal, Times New Roman, Trebuchet MS, Verdana +$rcmail_config['default_font'] = ''; + // end of config file diff --git a/program/include/main.inc b/program/include/main.inc index f6c29d0..8aa38c8 100644 --- a/program/include/main.inc +++ b/program/include/main.inc @@ -2408,3 +2408,27 @@ $RCMAIL->output->set_env('autocomplete_min_length', $RCMAIL->config->get('autocomplete_min_length')); $RCMAIL->output->add_label('autocompletechars', 'autocompletemore'); } + +function rcube_fontdefs($font = null) +{ + $fonts = array( + 'Andale Mono' => '"Andale Mono",Times,monospace', + 'Arial' => 'Arial,Helvetica,sans-serif', + 'Arial Black' => '"Arial Black","Avant Garde",sans-serif', + 'Book Antiqua' => '"Book Antiqua",Palatino,serif', + 'Courier New' => '"Courier New",Courier,monospace', + 'Georgia' => 'Georgia,Palatino,serif', + 'Helvetica' => 'Helvetica,Arial,sans-serif', + 'Impact' => 'Impact,Chicago,sans-serif', + 'Tahoma' => 'Tahoma,Arial,Helvetica,sans-serif', + 'Terminal' => 'Terminal,Monaco,monospace', + 'Times New Roman' => '"Times New Roman",Times,serif', + 'Trebuchet MS' => '"Trebuchet MS",Geneva,sans-serif', + 'Verdana' => 'Verdana,Geneva,sans-serif', + ); + + if ($font) + return $fonts[$font]; + + return $fonts; +} diff --git a/program/js/app.js b/program/js/app.js index d2b4434..b6c7d1d 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -3048,6 +3048,11 @@ this.display_spellcheck_controls(false); this.plain2html($('#'+props.id).val(), props.id); tinyMCE.execCommand('mceAddControl', false, props.id); + + if (this.env.default_font) + window.setTimeout(function() { + $(tinyMCE.get(props.id).getBody()).css('font-family', rcmail.env.default_font); + }, 500); } else { var thisMCE = tinyMCE.get(props.id), existingHtml; diff --git a/program/js/editor.js b/program/js/editor.js index 9ad50ce..5e08671 100644 --- a/program/js/editor.js +++ b/program/js/editor.js @@ -66,6 +66,9 @@ var elem = rcube_find_object('_from'), fe = rcmail.env.compose_focus_elem; + if (rcmail.env.default_font) + $(tinyMCE.get(rcmail.env.composebody).getBody()).css('font-family', rcmail.env.default_font); + if (elem && elem.type == 'select-one') { rcmail.change_identity(elem); // Focus previously focused element diff --git a/program/localization/en_US/labels.inc b/program/localization/en_US/labels.inc index 51f5530..f192209 100644 --- a/program/localization/en_US/labels.inc +++ b/program/localization/en_US/labels.inc @@ -407,6 +407,7 @@ $labels['focusonnewmessage'] = 'Focus browser window on new message'; $labels['checkallfolders'] = 'Check all folders for new messages'; $labels['displaynext'] = 'After message delete/move display the next message'; +$labels['defaultfont'] = 'Default font of HTML message'; $labels['mainoptions'] = 'Main Options'; $labels['section'] = 'Section'; $labels['maintenance'] = 'Maintenance'; diff --git a/program/localization/pl_PL/labels.inc b/program/localization/pl_PL/labels.inc index 420c84d..85a6718 100644 --- a/program/localization/pl_PL/labels.inc +++ b/program/localization/pl_PL/labels.inc @@ -440,5 +440,6 @@ $labels['license'] = 'Licencja'; $labels['about'] = 'O programie'; $labels['support'] = 'Wsparcie techniczne'; +$labels['defaultfont'] = 'Czcionka wiadomoĊci HTML'; ?> diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc index 7172960..03619f1 100644 --- a/program/steps/mail/compose.inc +++ b/program/steps/mail/compose.inc @@ -142,6 +142,12 @@ // use jquery UI for showing prompt() dialogs $RCMAIL->plugins->load_plugin('jqueryui'); +// default font for HTML editor +$font = rcube_fontdefs($RCMAIL->config->get('default_font', 'Verdana')); +if ($font && !is_array($font)) { + $OUTPUT->set_env('default_font', $font); +} + // get reference message and set compose mode if ($msg_uid = $COMPOSE['param']['draft_uid']) { $RCMAIL->imap->set_mailbox($CONFIG['drafts_mbox']); diff --git a/program/steps/mail/sendmail.inc b/program/steps/mail/sendmail.inc index 0da1ee3..6e124f9 100644 --- a/program/steps/mail/sendmail.inc +++ b/program/steps/mail/sendmail.inc @@ -397,6 +397,15 @@ // fetch message body $message_body = get_input_value('_message', RCUBE_INPUT_POST, TRUE, $message_charset); +if ($isHtml) { + $font = rcube_fontdefs($RCMAIL->config->get('default_font', 'Verdana')); + $bstyle = $font && is_string($font) ? " style='font-family: $font'" : ''; + + // append doctype and html/body wrappers + $message_body = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">' . + "\r\n<html><body$bstyle>\r\n" . $message_body; +} + if (!$savedraft) { if ($isHtml) { // remove signature's div ID @@ -406,10 +415,6 @@ $bstyle = 'padding-left:5px; border-left:#1010ff 2px solid; margin-left:5px; width:100%'; $message_body = preg_replace('/<blockquote>/', '<blockquote type="cite" style="'.$bstyle.'">', $message_body); - - // append doctype and html/body wrappers - $message_body = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">' . - "\r\n<html><body>\r\n" . $message_body; } // Check spelling before send @@ -443,8 +448,10 @@ if ($footer) $message_body .= "\r\n" . $footer; - if ($isHtml) - $message_body .= "\r\n</body></html>\r\n"; +} + +if ($isHtml) { + $message_body .= "\r\n</body></html>\r\n"; } // set line length for body wrapping diff --git a/program/steps/settings/func.inc b/program/steps/settings/func.inc index 28da876..b778afa 100644 --- a/program/steps/settings/func.inc +++ b/program/steps/settings/func.inc @@ -481,7 +481,6 @@ 'sig' => array('name' => Q(rcube_label('signatureoptions'))), ); - // Show checkbox for HTML Editor if (!isset($no_override['htmleditor'])) { $field_id = 'rcmfd_htmleditor'; $select_htmleditor = new html_select(array('name' => '_htmleditor', 'id' => $field_id)); @@ -634,6 +633,25 @@ ); } + if (!isset($no_override['default_font'])) { + $field_id = 'rcmfd_default_font'; + $fonts = rcube_fontdefs(); + $default_font = $config['default_font'] ? $config['default_font'] : 'Verdana'; + + $select = '<select name="_default_font" id="'.$field_id.'">'; + foreach ($fonts as $fname => $font) + $select .= '<option value="'.$fname.'"' + . ($fname == $default_font ? ' selected="selected"' : '') + . ' style=\'font-family: ' . $font . '\'>' + . Q($fname) . '</option>'; + $select .= '</select>'; + + $blocks['main']['options']['default_font'] = array( + 'title' => html::label($field_id, Q(rcube_label('defaultfont'))), + 'content' => $select + ); + } + break; diff --git a/program/steps/settings/save_prefs.inc b/program/steps/settings/save_prefs.inc index f5f3e36..a6388c5 100644 --- a/program/steps/settings/save_prefs.inc +++ b/program/steps/settings/save_prefs.inc @@ -86,6 +86,7 @@ 'top_posting' => !empty($_POST['_top_posting']), 'strip_existing_sig' => isset($_POST['_strip_existing_sig']), 'sig_above' => !empty($_POST['_sig_above']) && !empty($_POST['_top_posting']), + 'default_font' => get_input_value('_default_font', RCUBE_INPUT_POST), ); break; -- Gitblit v1.9.1