diff --git a/dev/App/User.js b/dev/App/User.js index 9361f2af0..bce396df3 100644 --- a/dev/App/User.js +++ b/dev/App/User.js @@ -1151,7 +1151,6 @@ AppUser.prototype.setFolders = function (oData) { var - aList = [], bUpdate = false, fNormalizeFolder = function (sFolderFullNameRaw) { return ('' === sFolderFullNameRaw || Consts.Values.UnuseOptionValue === sFolderFullNameRaw || @@ -1170,8 +1169,7 @@ AppStore.threadsAllowed(!!Settings.settingsGet('UseImapThread') && oData.Result.IsThreadsSupported && true); - aList = this.folderResponseParseRec(Data.namespace, oData.Result['@Collection']); - Data.folderList(aList); + Data.folderList(this.folderResponseParseRec(Data.namespace, oData.Result['@Collection'])); if (oData.Result['SystemFolders'] && '' === '' + Settings.settingsGet('SentFolder') + diff --git a/dev/Common/HtmlEditor.js b/dev/Common/HtmlEditor.js index cc9f3b632..866b4557b 100644 --- a/dev/Common/HtmlEditor.js +++ b/dev/Common/HtmlEditor.js @@ -101,7 +101,7 @@ */ HtmlEditor.prototype.clearSignatureSigns = function (sText) { - return sText.replace(/(\u0002|\u0003|\u0004|\u0005)/g, ''); + return sText.replace(/(\u0002|\u0003|\u200C|\u200D)/g, ''); }; /** diff --git a/dev/Common/Selector.js b/dev/Common/Selector.js index 9a9b53139..16f817244 100644 --- a/dev/Common/Selector.js +++ b/dev/Common/Selector.js @@ -351,7 +351,6 @@ key('up, shift+up, down, shift+down, home, end, pageup, pagedown, insert, space', sKeyScope, function (event, handler) { if (event && handler && handler.shortcut) { - // TODO var iKey = 0; switch (handler.shortcut) { diff --git a/dev/Common/Utils.js b/dev/Common/Utils.js index 2869afecb..c762e15ab 100644 --- a/dev/Common/Utils.js +++ b/dev/Common/Utils.js @@ -1009,6 +1009,10 @@ ; sText = sHtml + // specials for signature + .replace(/\u0002\u0002/g, '\u200C\u200C') + .replace(/\u0003\u0003/g, '\u200D\u200D') + .replace(/]*>([\s\S\r\n]*)<\/pre>/gmi, convertPre) .replace(/[\s]+/gm, ' ') .replace(/((?:href|data)\s?=\s?)("[^"]+?"|'[^']+?')/gmi, fixAttibuteValue) @@ -1154,6 +1158,11 @@ sPlain = aText.join("\n"); sPlain = sPlain + + // specials for signature + .replace(/\u200C\u200C/g, '\u0002\u0002') + .replace(/\u200D\u200D/g, '\u0003\u0003') + // .replace(/~~~\/blockquote~~~\n~~~blockquote~~~/g, '\n') .replace(/&/g, '&') .replace(/>/g, '>').replace(/ .b-sub-folders .e-item .e-link { + padding-left: @folderItemPadding; + } } html.rl-left-panel-disabled { diff --git a/dev/Styles/_BootstrapFix.less b/dev/Styles/_BootstrapFix.less index d902975cf..b6dcd6c9a 100644 --- a/dev/Styles/_BootstrapFix.less +++ b/dev/Styles/_BootstrapFix.less @@ -73,6 +73,10 @@ select { line-height: 11px; } +.btn.btn-thin { + padding: 3px 9px; +} + .btn.btn-ellipsis { text-overflow: ellipsis; overflow: hidden; diff --git a/dev/View/Popup/Template.js b/dev/View/Popup/Template.js index e59f8e0bd..315b5bde9 100644 --- a/dev/View/Popup/Template.js +++ b/dev/View/Popup/Template.js @@ -116,7 +116,6 @@ if (this.editor) { this.editor.setPlain('', false); - this.editor.setReadOnly(true); } }; diff --git a/dev/View/User/MailBox/FolderList.js b/dev/View/User/MailBox/FolderList.js index 2c86ff306..bf4060b92 100644 --- a/dev/View/User/MailBox/FolderList.js +++ b/dev/View/User/MailBox/FolderList.js @@ -43,6 +43,8 @@ this.folderListSystem = Data.folderListSystem; this.foldersChanging = Data.foldersChanging; + this.foldersListWithSingleInboxRootFolder = Data.foldersListWithSingleInboxRootFolder; + this.leftPanelDisabled = Globals.leftPanelDisabled; this.iDropOverTimer = 0; diff --git a/package.json b/package.json index 6ec71e77d..223af2ac6 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "RainLoop", "title": "RainLoop Webmail", "version": "1.8.1", - "release": "260", + "release": "261", "description": "Simple, modern & fast web-based email client", "homepage": "http://rainloop.net", "main": "gulpfile.js", diff --git a/rainloop/v/0.0.0/app/libraries/RainLoop/Model/Template.php b/rainloop/v/0.0.0/app/libraries/RainLoop/Model/Template.php index 0d4b1e7b0..b99c581da 100644 --- a/rainloop/v/0.0.0/app/libraries/RainLoop/Model/Template.php +++ b/rainloop/v/0.0.0/app/libraries/RainLoop/Model/Template.php @@ -81,7 +81,6 @@ class Template public function SetPopulateAlways($bPopulateAlways) { $this->bPopulateAlways = !!$bPopulateAlways; - } /** @@ -123,12 +122,18 @@ class Template } } - return array( + $aResult = array( 'ID' => $this->Id(), 'Name' => $this->Name(), - 'Populated' => $bPopulated, 'Body' => $sBody ); + + if ($bAjax) + { + $aResult['Populated'] = $bPopulated; + } + + return $aResult; } /** diff --git a/rainloop/v/0.0.0/app/templates/Views/User/MailFolderList.html b/rainloop/v/0.0.0/app/templates/Views/User/MailFolderList.html index 1359619c3..193c8ed0f 100644 --- a/rainloop/v/0.0.0/app/templates/Views/User/MailFolderList.html +++ b/rainloop/v/0.0.0/app/templates/Views/User/MailFolderList.html @@ -1,4 +1,5 @@ -
+
diff --git a/rainloop/v/0.0.0/app/templates/Views/User/MailFolderListItem.html b/rainloop/v/0.0.0/app/templates/Views/User/MailFolderListItem.html index 52d0d38bf..bf1172ca4 100644 --- a/rainloop/v/0.0.0/app/templates/Views/User/MailFolderListItem.html +++ b/rainloop/v/0.0.0/app/templates/Views/User/MailFolderListItem.html @@ -1,8 +1,8 @@ -
+ +
+
-
- -    - -
diff --git a/rainloop/v/0.0.0/app/templates/Views/User/SettingsFolders.html b/rainloop/v/0.0.0/app/templates/Views/User/SettingsFolders.html
index 8f7d4f516..d520374b8 100644
--- a/rainloop/v/0.0.0/app/templates/Views/User/SettingsFolders.html
+++ b/rainloop/v/0.0.0/app/templates/Views/User/SettingsFolders.html
@@ -2,6 +2,8 @@
 	
+     +
@@ -24,11 +26,9 @@
-
- -    - -
+
+
+
diff --git a/rainloop/v/0.0.0/app/templates/Views/User/SettingsTemplates.html b/rainloop/v/0.0.0/app/templates/Views/User/SettingsTemplates.html index 3ad5c8fc2..de8827af1 100644 --- a/rainloop/v/0.0.0/app/templates/Views/User/SettingsTemplates.html +++ b/rainloop/v/0.0.0/app/templates/Views/User/SettingsTemplates.html @@ -2,6 +2,8 @@
+     +
@@ -9,11 +11,9 @@    -
- -    - -
+
+
+
diff --git a/rainloop/v/0.0.0/static/ckeditor/plugins/signature/plugin.js b/rainloop/v/0.0.0/static/ckeditor/plugins/signature/plugin.js index 00c0e0a30..68777a7ae 100644 --- a/rainloop/v/0.0.0/static/ckeditor/plugins/signature/plugin.js +++ b/rainloop/v/0.0.0/static/ckeditor/plugins/signature/plugin.js @@ -1,10 +1,18 @@ rl_signature_replacer = function (editor, sText, sSignature, bHtml, bInsertBefore) { + if (!bHtml) + { + sText = sText + .replace(/\u200C\u200C/g, '\u0002\u0002') + .replace(/\u200D\u200D/g, '\u0003\u0003') + ; + } + var sTextWithoutSignature = sText - .replace(/\u0002\u0002[\s\S]*\u0003\u0003/gm, '') - .replace(/\u0004\u0004[\s\S]*\u0005\u0005/gm, ''), + .replace(/\u0002\u0002[\s\S]*\u0002\u0002/gm, '') + .replace(/\u0003\u0003[\s\S]*\u0003\u0003/gm, ''), bEmptyText = '' === $.trim(sTextWithoutSignature), sNewLine = (bHtml ? '
' : "\n") ; @@ -16,23 +24,31 @@ rl_signature_replacer = function (editor, sText, sSignature, bHtml, bInsertBefor if (!/\u0002\u0002/gm.test(sText)) { - sText = "\u0002\u0002\u0003\u0003" + sText; + sText = "\u0002\u0002\u0002\u0002" + sText; } - if (!/\u0004\u0004/gm.test(sText)) + if (!/\u0003\u0003/gm.test(sText)) { - sText = sText + "\u0004\u0004\u0005\u0005"; + sText = sText + "\u0003\u0003\u0003\u0003"; } if (bInsertBefore) { - sText = sText.replace(/\u0002\u0002[\s\S]*\u0003\u0003/gm, "\u0002\u0002" + sSignature + sNewLine + "\u0003\u0003"); - sText = sText.replace(/\u0004\u0004[\s\S]*\u0005\u0005/gm, "\u0004\u0004\u0005\u0005"); + sText = sText.replace(/\u0002\u0002[\s\S]*\u0002\u0002/gm, "\u0002\u0002" + sSignature + (bEmptyText ? '' : sNewLine) + "\u0002\u0002"); + sText = sText.replace(/\u0003\u0003[\s\S]*\u0003\u0003/gm, "\u0003\u0003\u0003\u0003"); } else { - sText = sText.replace(/\u0002\u0002[\s\S]*\u0003\u0003/gm, "\u0002\u0002\u0003\u0003"); - sText = sText.replace(/\u0004\u0004[\s\S]*\u0005\u0005/gm, "\u0004\u0004" + (bEmptyText ? '' : sNewLine) + sSignature + "\u0005\u0005"); + sText = sText.replace(/\u0002\u0002[\s\S]*\u0002\u0002/gm, "\u0002\u0002\u0002\u0002"); + sText = sText.replace(/\u0003\u0003[\s\S]*\u0003\u0003/gm, "\u0003\u0003" + (bEmptyText ? '' : sNewLine) + sSignature + "\u0003\u0003"); + } + + if (!bHtml) + { + sText = sText + .replace(/\u0002\u0002/g, '\u200C\u200C') + .replace(/\u0003\u0003/g, '\u200D\u200D') + ; } return sText; @@ -42,40 +58,58 @@ CKEDITOR.plugins.add('signature', { init: function(editor) { editor.addCommand('insertSignature', { modes: { wysiwyg: 1, plain: 1 }, - exec: function (editor, cfg) { + exec: function (editor, cfg) + { var bIsHtml = false, bInsertBefore = false, - sSignature = '' + sSignature = '', + sResultSignature = '' ; - if (cfg) { + if (cfg) + { bIsHtml = undefined === cfg.isHtml ? false : !!cfg.isHtml; bInsertBefore = undefined === cfg.insertBefore ? false : !!cfg.insertBefore; sSignature = undefined === cfg.signature ? '' : cfg.signature; } - try { - if ('plain' === editor.mode && editor.__plain && editor.__plainUtils) { - if (bIsHtml && editor.__plainUtils.htmlToPlain) { - sSignature = editor.__plainUtils.htmlToPlain(sSignature); + sResultSignature = sSignature; + + try + { + if ('plain' === editor.mode && editor.__plain && editor.__plainUtils) + { + if (editor.__plainUtils && editor.__plainUtils.htmlToPlain) + { + if (bIsHtml) + { + sResultSignature = editor.__plainUtils.htmlToPlain(sResultSignature); + } } editor.__plain.setRawData( rl_signature_replacer(editor, - editor.__plain.getRawData(), sSignature, false, bInsertBefore)); + editor.__plain.getRawData(), sResultSignature, false, bInsertBefore)); - } else { - if (!bIsHtml && editor.__plainUtils && editor.__plainUtils.plainToHtml) { - sSignature = editor.__plainUtils.plainToHtml(sSignature); + } + else + { + if (editor.__plainUtils && editor.__plainUtils.plainToHtml) + { + if (!bIsHtml) + { + sResultSignature = editor.__plainUtils.plainToHtml(sResultSignature); + } } editor.setData( rl_signature_replacer(editor, - editor.getData(), sSignature, true, bInsertBefore)); + editor.getData(), sResultSignature, true, bInsertBefore)); } - } catch (e) {} + } + catch (e) {} } }); } diff --git a/vendors/ckeditor-plugins/signature/plugin.js b/vendors/ckeditor-plugins/signature/plugin.js index 00c0e0a30..68777a7ae 100644 --- a/vendors/ckeditor-plugins/signature/plugin.js +++ b/vendors/ckeditor-plugins/signature/plugin.js @@ -1,10 +1,18 @@ rl_signature_replacer = function (editor, sText, sSignature, bHtml, bInsertBefore) { + if (!bHtml) + { + sText = sText + .replace(/\u200C\u200C/g, '\u0002\u0002') + .replace(/\u200D\u200D/g, '\u0003\u0003') + ; + } + var sTextWithoutSignature = sText - .replace(/\u0002\u0002[\s\S]*\u0003\u0003/gm, '') - .replace(/\u0004\u0004[\s\S]*\u0005\u0005/gm, ''), + .replace(/\u0002\u0002[\s\S]*\u0002\u0002/gm, '') + .replace(/\u0003\u0003[\s\S]*\u0003\u0003/gm, ''), bEmptyText = '' === $.trim(sTextWithoutSignature), sNewLine = (bHtml ? '
' : "\n") ; @@ -16,23 +24,31 @@ rl_signature_replacer = function (editor, sText, sSignature, bHtml, bInsertBefor if (!/\u0002\u0002/gm.test(sText)) { - sText = "\u0002\u0002\u0003\u0003" + sText; + sText = "\u0002\u0002\u0002\u0002" + sText; } - if (!/\u0004\u0004/gm.test(sText)) + if (!/\u0003\u0003/gm.test(sText)) { - sText = sText + "\u0004\u0004\u0005\u0005"; + sText = sText + "\u0003\u0003\u0003\u0003"; } if (bInsertBefore) { - sText = sText.replace(/\u0002\u0002[\s\S]*\u0003\u0003/gm, "\u0002\u0002" + sSignature + sNewLine + "\u0003\u0003"); - sText = sText.replace(/\u0004\u0004[\s\S]*\u0005\u0005/gm, "\u0004\u0004\u0005\u0005"); + sText = sText.replace(/\u0002\u0002[\s\S]*\u0002\u0002/gm, "\u0002\u0002" + sSignature + (bEmptyText ? '' : sNewLine) + "\u0002\u0002"); + sText = sText.replace(/\u0003\u0003[\s\S]*\u0003\u0003/gm, "\u0003\u0003\u0003\u0003"); } else { - sText = sText.replace(/\u0002\u0002[\s\S]*\u0003\u0003/gm, "\u0002\u0002\u0003\u0003"); - sText = sText.replace(/\u0004\u0004[\s\S]*\u0005\u0005/gm, "\u0004\u0004" + (bEmptyText ? '' : sNewLine) + sSignature + "\u0005\u0005"); + sText = sText.replace(/\u0002\u0002[\s\S]*\u0002\u0002/gm, "\u0002\u0002\u0002\u0002"); + sText = sText.replace(/\u0003\u0003[\s\S]*\u0003\u0003/gm, "\u0003\u0003" + (bEmptyText ? '' : sNewLine) + sSignature + "\u0003\u0003"); + } + + if (!bHtml) + { + sText = sText + .replace(/\u0002\u0002/g, '\u200C\u200C') + .replace(/\u0003\u0003/g, '\u200D\u200D') + ; } return sText; @@ -42,40 +58,58 @@ CKEDITOR.plugins.add('signature', { init: function(editor) { editor.addCommand('insertSignature', { modes: { wysiwyg: 1, plain: 1 }, - exec: function (editor, cfg) { + exec: function (editor, cfg) + { var bIsHtml = false, bInsertBefore = false, - sSignature = '' + sSignature = '', + sResultSignature = '' ; - if (cfg) { + if (cfg) + { bIsHtml = undefined === cfg.isHtml ? false : !!cfg.isHtml; bInsertBefore = undefined === cfg.insertBefore ? false : !!cfg.insertBefore; sSignature = undefined === cfg.signature ? '' : cfg.signature; } - try { - if ('plain' === editor.mode && editor.__plain && editor.__plainUtils) { - if (bIsHtml && editor.__plainUtils.htmlToPlain) { - sSignature = editor.__plainUtils.htmlToPlain(sSignature); + sResultSignature = sSignature; + + try + { + if ('plain' === editor.mode && editor.__plain && editor.__plainUtils) + { + if (editor.__plainUtils && editor.__plainUtils.htmlToPlain) + { + if (bIsHtml) + { + sResultSignature = editor.__plainUtils.htmlToPlain(sResultSignature); + } } editor.__plain.setRawData( rl_signature_replacer(editor, - editor.__plain.getRawData(), sSignature, false, bInsertBefore)); + editor.__plain.getRawData(), sResultSignature, false, bInsertBefore)); - } else { - if (!bIsHtml && editor.__plainUtils && editor.__plainUtils.plainToHtml) { - sSignature = editor.__plainUtils.plainToHtml(sSignature); + } + else + { + if (editor.__plainUtils && editor.__plainUtils.plainToHtml) + { + if (!bIsHtml) + { + sResultSignature = editor.__plainUtils.plainToHtml(sResultSignature); + } } editor.setData( rl_signature_replacer(editor, - editor.getData(), sSignature, true, bInsertBefore)); + editor.getData(), sResultSignature, true, bInsertBefore)); } - } catch (e) {} + } + catch (e) {} } }); }