(feature) Custom base font size for HTML messages

If SOGoMailComposeFontSize is set to zero, we keep the previous
behaviour (no font-size added to the message HTML body).
pull/189/merge
Francis Lachapelle 2016-02-11 16:45:58 -05:00
parent e897bb0399
commit 256a64172e
11 changed files with 113 additions and 29 deletions

1
NEWS
View File

@ -4,6 +4,7 @@
New features New features
- [web] show all/only this calendar - [web] show all/only this calendar
- [web] convert a message to an appointment or a task (#1722) - [web] convert a message to an appointment or a task (#1722)
- [web] customizable base font size for HTML messages
Enhancements Enhancements
- [web] added Junk handling feature from v2 - [web] added Junk handling feature from v2

View File

@ -72,6 +72,7 @@
SOGoTrashFolderName = "Trash"; SOGoTrashFolderName = "Trash";
SOGoJunkFolderName = "Junk"; SOGoJunkFolderName = "Junk";
SOGoMailComposeMessageType = "html"; SOGoMailComposeMessageType = "html";
SOGoMailComposeFontSize = 0;
SOGoMailDisplayRemoteInlineImages = "never"; SOGoMailDisplayRemoteInlineImages = "never";
SOGoMailAutoSave = "5"; SOGoMailAutoSave = "5";

View File

@ -132,6 +132,9 @@ extern NSString *SOGoWeekStartFirstFullWeek;
- (void) setMailComposeMessageType: (NSString *) newValue; - (void) setMailComposeMessageType: (NSString *) newValue;
- (NSString *) mailComposeMessageType; - (NSString *) mailComposeMessageType;
- (void) setMailComposeFontSize: (NSString *) newValue;
- (NSString *) mailComposeFontSize;
- (void) setMailDisplayRemoteInlineImages: (NSString *) newValue; - (void) setMailDisplayRemoteInlineImages: (NSString *) newValue;
- (NSString *) mailDisplayRemoteInlineImages; - (NSString *) mailDisplayRemoteInlineImages;

View File

@ -539,6 +539,16 @@ NSString *SOGoWeekStartFirstFullWeek = @"FirstFullWeek";
return [self stringForKey: @"SOGoMailComposeMessageType"]; return [self stringForKey: @"SOGoMailComposeMessageType"];
} }
- (void) setMailComposeFontSize: (NSString *) newValue
{
[self setObject: newValue forKey: @"SOGoMailComposeFontSize"];
}
- (NSString *) mailComposeFontSize
{
return [self stringForKey: @"SOGoMailComposeFontSize"];
}
- (void) setMailDisplayRemoteInlineImages: (NSString *) newValue - (void) setMailDisplayRemoteInlineImages: (NSString *) newValue
{ {
[self setObject: newValue forKey: @"SOGoMailDisplayRemoteInlineImages"]; [self setObject: newValue forKey: @"SOGoMailDisplayRemoteInlineImages"];

View File

@ -629,9 +629,11 @@ static NSArray *infoKeys = nil;
{ {
NSDictionary *info; NSDictionary *info;
NSException *error; NSException *error;
NSString *fontSize, *content;
NGMimeType *mimeType; NGMimeType *mimeType;
WORequest *request; WORequest *request;
SOGoDraftObject *co; SOGoDraftObject *co;
SOGoUserDefaults *ud;
error = nil; error = nil;
request = [context request]; request = [context request];
@ -649,7 +651,22 @@ static NSArray *infoKeys = nil;
info = [self infoFromRequest]; info = [self infoFromRequest];
[co setHeaders: info]; [co setHeaders: info];
[co setIsHTML: isHTML]; [co setIsHTML: isHTML];
[co setText: (isHTML ? [NSString stringWithFormat: @"<html>%@</html>", text] : text)];; if (isHTML)
{
// Set a base font size if mail is HTML and user has set a default font-size
ud = [[context activeUser] userDefaults];
fontSize = [ud mailComposeFontSize];
if ([fontSize intValue] > 0)
content = [NSString stringWithFormat: @"<html><span style=\"font-size: %@px;\">%@</span></html>",
fontSize, text];
else
content = [NSString stringWithFormat: @"<html>%@</html>", text];
}
else
{
content = text;
}
[co setText: content];
error = [co storeInfo]; error = [co storeInfo];
} }

View File

@ -142,6 +142,10 @@
"Compose messages in" = "Compose messages in"; "Compose messages in" = "Compose messages in";
"composemessagestype_html" = "HTML"; "composemessagestype_html" = "HTML";
"composemessagestype_text" = "Plain text"; "composemessagestype_text" = "Plain text";
/* Base font size for messages composed in HTML */
"Default font size" = "Default font size";
"Display remote inline images" = "Display remote inline images"; "Display remote inline images" = "Display remote inline images";
"displayremoteinlineimages_never" = "Never"; "displayremoteinlineimages_never" = "Never";
"displayremoteinlineimages_always" = "Always"; "displayremoteinlineimages_always" = "Always";

View File

@ -174,6 +174,9 @@ static SoProduct *preferencesProduct = nil;
if (![[defaults source] objectForKey: @"SOGoMailComposeMessageType"]) if (![[defaults source] objectForKey: @"SOGoMailComposeMessageType"])
[[defaults source] setObject: [defaults mailComposeMessageType] forKey: @"SOGoMailComposeMessageType"]; [[defaults source] setObject: [defaults mailComposeMessageType] forKey: @"SOGoMailComposeMessageType"];
if (![[defaults source] objectForKey: @"SOGoMailComposeFontSize"])
[[defaults source] setObject: [defaults mailComposeFontSize] forKey: @"SOGoMailComposeFontSize"];
if (![[defaults source] objectForKey: @"SOGoMailDisplayRemoteInlineImages"]) if (![[defaults source] objectForKey: @"SOGoMailDisplayRemoteInlineImages"])
[[defaults source] setObject: [defaults mailDisplayRemoteInlineImages] forKey: @"SOGoMailDisplayRemoteInlineImages"]; [[defaults source] setObject: [defaults mailDisplayRemoteInlineImages] forKey: @"SOGoMailDisplayRemoteInlineImages"];

View File

@ -1172,6 +1172,27 @@ static NSArray *reminderValues = nil;
: [self _defaultEmailAddresses]); : [self _defaultEmailAddresses]);
} }
//
// Used by templates
//
- (NSArray *) fontSizesList
{
static NSArray *fontSizes = nil;
if (!fontSizes)
{
fontSizes = [NSArray arrayWithObjects: @"8", @"9", @"10", @"11", @"12", @"13", @"14", @"16", @"18",
@"20", @"22", @"24", @"26", @"28",
@"36",
@"48",
@"72",
nil];
[fontSizes retain];
}
return fontSizes;
}
// //
// Used by templates // Used by templates
// //

View File

@ -511,19 +511,18 @@
</md-checkbox> </md-checkbox>
</div> </div>
<div> <div layout="row" layout-align="start center" flex="50" flex-xs="100">
<md-checkbox <md-checkbox
class="md-align-top-left" ng-model="app.preferences.defaults.SOGoMailAddOutgoingAddresses" class="md-align-top-left" ng-model="app.preferences.defaults.SOGoMailAddOutgoingAddresses"
ng-true-value="1" ng-true-value="1"
ng-false-value="0" ng-false-value="0"
label:arial-label="When sending mail, add unknown recipients to my"> label:arial-label="When sending mail, add unknown recipients to my">
<var:string label:value="When sending mail, add unknown recipients to my"/>
</md-checkbox> </md-checkbox>
<md-input-container> <md-input-container class="md-block md-flex">
<label><var:string label:aria-label="Address Book"/></label> <label><var:string label:value="When sending mail, add unknown recipients to my"/></label>
<md-select <md-select
ng-disabled="app.preferences.defaults.SOGoMailAddOutgoingAddresses == 0" ng-disabled="app.preferences.defaults.SOGoMailAddOutgoingAddresses != 1"
ng-model="app.preferences.defaults.SOGoSelectedAddressBook"> ng-model="app.preferences.defaults.SOGoSelectedAddressBook">
<var:foreach list="addressBookList" item="item"> <var:foreach list="addressBookList" item="item">
<md-option var:value="item.id"> <md-option var:value="item.id">
@ -534,7 +533,7 @@
</md-input-container> </md-input-container>
</div> </div>
<md-input-container class="md-block"> <md-input-container class="md-block" flex="50" flex-xs="100">
<label><var:string label:value="Forward messages"/></label> <label><var:string label:value="Forward messages"/></label>
<md-select ng-model="app.preferences.defaults.SOGoMailMessageForwarding"> <md-select ng-model="app.preferences.defaults.SOGoMailMessageForwarding">
<var:foreach list="messageForwardingList" item="item"> <var:foreach list="messageForwardingList" item="item">
@ -569,18 +568,42 @@
</md-input-container> </md-input-container>
</div> </div>
<md-input-container class="md-block"> <div layout="row" layout-wrap="layout-wrap">
<label><var:string label:value="Compose messages in"/></label> <md-input-container class="md-block" flex="50">
<md-select ng-model="app.preferences.defaults.SOGoMailComposeMessageType"> <label><var:string label:value="Compose messages in"/></label>
<var:foreach list="composeMessagesType" item="item"> <md-select ng-model="app.preferences.defaults.SOGoMailComposeMessageType">
<md-option var:value="item"> <var:foreach list="composeMessagesType" item="item">
<var:string value="itemComposeMessagesText"/> <md-option var:value="item">
</md-option> <var:string value="itemComposeMessagesText"/>
</var:foreach> </md-option>
</md-select> </var:foreach>
</md-input-container> </md-select>
</md-input-container>
<md-input-container class="md-block"> <div layout="row" flex="50"
ng-show="app.preferences.defaults.SOGoMailComposeMessageType == 'html'">
<md-checkbox
ng-model="app.preferences.defaults.SOGoMailComposeFontSizeEnabled"
label:aria-label="Default font size">
</md-checkbox>
<md-input-container class="md-block md-flex">
<label><var:string label:value="Default font size"/></label>
<md-select label:aria-label="Default font size"
ng-disabled="!app.preferences.defaults.SOGoMailComposeFontSizeEnabled"
ng-required="app.preferences.defaults.SOGoMailComposeFontSizeEnabled"
ng-model="app.preferences.defaults.SOGoMailComposeFontSize">
<var:foreach list="fontSizesList" item="item">
<md-option var:value="item">
<var:string value="item"/>
</md-option>
</var:foreach>
</md-select>
<div class="md-char-counter">px</div>
</md-input-container>
</div>
</div>
<md-input-container class="md-block" flex="50" flex-xs="100">
<label><var:string label:value="Display remote inline images"/></label> <label><var:string label:value="Display remote inline images"/></label>
<md-select ng-model="app.preferences.defaults.SOGoMailDisplayRemoteInlineImages"> <md-select ng-model="app.preferences.defaults.SOGoMailDisplayRemoteInlineImages">
<var:foreach list="displayRemoteInlineImages" item="item"> <var:foreach list="displayRemoteInlineImages" item="item">

View File

@ -26,6 +26,15 @@
// Mail editor autosave is a number of minutes or 0 if disabled // Mail editor autosave is a number of minutes or 0 if disabled
data.SOGoMailAutoSave = parseInt(data.SOGoMailAutoSave) || 0; data.SOGoMailAutoSave = parseInt(data.SOGoMailAutoSave) || 0;
// Specify a base font size for HTML messages when SOGoMailComposeFontSize is not zero
data.SOGoMailComposeFontSizeEnabled = parseInt(data.SOGoMailComposeFontSize) > 0;
if (window.CKEDITOR && data.SOGoMailComposeFontSize) {
// HTML editor is enabled; set user's preferred font size
window.CKEDITOR.config.fontSize_defaultLabel = data.SOGoMailComposeFontSize;
window.CKEDITOR.addCss('.cke_editable { font-size: ' + data.SOGoMailComposeFontSize + 'px; }');
}
// We convert our list of autoReplyEmailAddresses/forwardAddress into a string. // We convert our list of autoReplyEmailAddresses/forwardAddress into a string.
// We also convert our date objects into real date, otherwise we'll have strings // We also convert our date objects into real date, otherwise we'll have strings
// or undefined values and the md-datepicker does NOT like this. // or undefined values and the md-datepicker does NOT like this.
@ -201,6 +210,9 @@
preferences.defaults.SOGoMailLabelsColors = labels; preferences.defaults.SOGoMailLabelsColors = labels;
if (!preferences.defaults.SOGoMailComposeFontSizeEnabled)
preferences.defaults.SOGoMailComposeFontSize = 0;
if (preferences.defaults.Vacation) { if (preferences.defaults.Vacation) {
if (preferences.defaults.Vacation.endDateEnabled) if (preferences.defaults.Vacation.endDateEnabled)
preferences.defaults.Vacation.endDate = preferences.defaults.Vacation.endDate.getTime()/1000; preferences.defaults.Vacation.endDate = preferences.defaults.Vacation.endDate.getTime()/1000;

View File

@ -23,17 +23,6 @@ CKEDITOR.editorConfig = function( config ) {
config.tabSpaces = 4; config.tabSpaces = 4;
config.allowedContent = true; // don't filter tags config.allowedContent = true; // don't filter tags
// The list of fonts size to be displayed in the Font Size combo in the toolbar.
config.fontSize_sizes = '8/8px;9/9px;10/10px;11/11px;12/12px;13/13px;14/14px;16/16px;18/18px;20/20px;22/22px;24/24px;26/26px;28/28px;36/36px;48/48px;72/72px';
// Explicitly show the default site font size to the end user (as defined in contents.css)
config.fontSize_defaultLabel = '13px';
// The CSS file(s) to be used to apply style to editor content.
// For example, the following ck.css could overwrite the font-size of .cke_editable
//config.contentsCss = ['/SOGo.woa/WebServerResources/js/vendor/ckeditor/contents.css', // default CSS
// '/css/ck.css']; // custom CSS
// Disables the built-in words spell checker if browser provides one. Defaults to true. // Disables the built-in words spell checker if browser provides one. Defaults to true.
// http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-disableNativeSpellChecker // http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-disableNativeSpellChecker
//config.disableNativeSpellChecker = false; //config.disableNativeSpellChecker = false;