mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-07-13 03:27:39 +03:00
Release fixes
This commit is contained in:
parent
b00959b2d0
commit
c73eb76816
9 changed files with 67 additions and 54 deletions
|
|
@ -261,7 +261,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
oConfig.enterMode = window.CKEDITOR.ENTER_BR;
|
oConfig.enterMode = window.CKEDITOR.ENTER_BR;
|
||||||
oConfig.shiftEnterMode = window.CKEDITOR.ENTER_BR;
|
oConfig.shiftEnterMode = window.CKEDITOR.ENTER_P;
|
||||||
|
|
||||||
oConfig.language = Globals.oHtmlEditorLangsMap[sLanguage] || 'en';
|
oConfig.language = Globals.oHtmlEditorLangsMap[sLanguage] || 'en';
|
||||||
if (window.CKEDITOR.env)
|
if (window.CKEDITOR.env)
|
||||||
|
|
@ -269,17 +269,6 @@
|
||||||
window.CKEDITOR.env.isCompatible = true;
|
window.CKEDITOR.env.isCompatible = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// oConfig.allowedContent = {
|
|
||||||
// $1: {
|
|
||||||
// elements: window.CKEDITOR.dtd,
|
|
||||||
// attributes: true,
|
|
||||||
// styles: true,
|
|
||||||
// classes: true
|
|
||||||
// }
|
|
||||||
// };
|
|
||||||
//
|
|
||||||
// oConfig.disallowedContent = 'script; style; iframe; frame; *[on*]';
|
|
||||||
|
|
||||||
window.CKEDITOR.dtd.$removeEmpty['p'] = 1;
|
window.CKEDITOR.dtd.$removeEmpty['p'] = 1;
|
||||||
|
|
||||||
self.editor = window.CKEDITOR.appendTo(self.$element[0], oConfig);
|
self.editor = window.CKEDITOR.appendTo(self.$element[0], oConfig);
|
||||||
|
|
|
||||||
|
|
@ -333,19 +333,23 @@
|
||||||
* @param {number=} iLimit = 20
|
* @param {number=} iLimit = 20
|
||||||
* @param {string=} sSearch = ''
|
* @param {string=} sSearch = ''
|
||||||
* @param {boolean=} bSilent = false
|
* @param {boolean=} bSilent = false
|
||||||
|
* @param {string=} sThreadUid = ''
|
||||||
*/
|
*/
|
||||||
RemoteUserAjax.prototype.messageList = function (fCallback, sFolderFullNameRaw, iOffset, iLimit, sSearch, bSilent)
|
RemoteUserAjax.prototype.messageList = function (fCallback, sFolderFullNameRaw, iOffset, iLimit, sSearch, bSilent, sThreadUid)
|
||||||
{
|
{
|
||||||
sFolderFullNameRaw = Utils.pString(sFolderFullNameRaw);
|
sFolderFullNameRaw = Utils.pString(sFolderFullNameRaw);
|
||||||
|
|
||||||
var
|
var
|
||||||
sFolderHash = Cache.getFolderHash(sFolderFullNameRaw)
|
sFolderHash = Cache.getFolderHash(sFolderFullNameRaw),
|
||||||
|
bUseThreads = AppStore.threadsAllowed() && SettingsStore.useThreads(),
|
||||||
|
sInboxUidNext = Cache.getFolderInboxName() === sFolderFullNameRaw ? Cache.getFolderUidNext(sFolderFullNameRaw) : ''
|
||||||
;
|
;
|
||||||
|
|
||||||
bSilent = Utils.isUnd(bSilent) ? false : !!bSilent;
|
bSilent = Utils.isUnd(bSilent) ? false : !!bSilent;
|
||||||
iOffset = Utils.isUnd(iOffset) ? 0 : Utils.pInt(iOffset);
|
iOffset = Utils.isUnd(iOffset) ? 0 : Utils.pInt(iOffset);
|
||||||
iLimit = Utils.isUnd(iOffset) ? 20 : Utils.pInt(iLimit);
|
iLimit = Utils.isUnd(iOffset) ? 20 : Utils.pInt(iLimit);
|
||||||
sSearch = Utils.pString(sSearch);
|
sSearch = Utils.pString(sSearch);
|
||||||
|
sThreadUid = Utils.pString(sThreadUid);
|
||||||
|
|
||||||
if ('' !== sFolderHash && ('' === sSearch || -1 === sSearch.indexOf('is:')))
|
if ('' !== sFolderHash && ('' === sSearch || -1 === sSearch.indexOf('is:')))
|
||||||
{
|
{
|
||||||
|
|
@ -358,9 +362,9 @@
|
||||||
sSearch,
|
sSearch,
|
||||||
AppStore.projectHash(),
|
AppStore.projectHash(),
|
||||||
sFolderHash,
|
sFolderHash,
|
||||||
Cache.getFolderInboxName() === sFolderFullNameRaw ? Cache.getFolderUidNext(sFolderFullNameRaw) : '',
|
sInboxUidNext,
|
||||||
AppStore.threadsAllowed() && SettingsStore.useThreads() ? '1' : '0',
|
bUseThreads ? '1' : '0',
|
||||||
''
|
bUseThreads ? sThreadUid : ''
|
||||||
].join(String.fromCharCode(0))), bSilent ? [] : ['MessageList']);
|
].join(String.fromCharCode(0))), bSilent ? [] : ['MessageList']);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -370,9 +374,11 @@
|
||||||
'Offset': iOffset,
|
'Offset': iOffset,
|
||||||
'Limit': iLimit,
|
'Limit': iLimit,
|
||||||
'Search': sSearch,
|
'Search': sSearch,
|
||||||
'UidNext': Cache.getFolderInboxName() === sFolderFullNameRaw ? Cache.getFolderUidNext(sFolderFullNameRaw) : '',
|
'UidNext': sInboxUidNext,
|
||||||
'UseThreads': AppStore.threadsAllowed() && SettingsStore.useThreads() ? '1' : '0'
|
'UseThreads': bUseThreads ? '1' : '0',
|
||||||
}, '' === sSearch ? Consts.Defaults.DefaultAjaxTimeout : Consts.Defaults.SearchAjaxTimeout, '', bSilent ? [] : ['MessageList']);
|
'ThreadUid': bUseThreads ? sThreadUid : ''
|
||||||
|
}, '' === sSearch ? Consts.Defaults.DefaultAjaxTimeout : Consts.Defaults.SearchAjaxTimeout,
|
||||||
|
'', bSilent ? [] : ['MessageList']);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -144,29 +144,27 @@
|
||||||
|
|
||||||
}, 50);
|
}, 50);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
_.delay(function () {
|
|
||||||
|
|
||||||
var
|
_.delay(function () {
|
||||||
f1 = Utils.settingsSaveHelperSimpleFunction(self.title.trigger, self),
|
|
||||||
f2 = Utils.settingsSaveHelperSimpleFunction(self.loadingDesc.trigger, self)
|
|
||||||
;
|
|
||||||
|
|
||||||
self.title.subscribe(function (sValue) {
|
var
|
||||||
Remote.saveAdminConfig(f1, {
|
f1 = Utils.settingsSaveHelperSimpleFunction(self.title.trigger, self),
|
||||||
'Title': Utils.trim(sValue)
|
f2 = Utils.settingsSaveHelperSimpleFunction(self.loadingDesc.trigger, self)
|
||||||
});
|
;
|
||||||
|
|
||||||
|
self.title.subscribe(function (sValue) {
|
||||||
|
Remote.saveAdminConfig(f1, {
|
||||||
|
'Title': Utils.trim(sValue)
|
||||||
});
|
});
|
||||||
|
});
|
||||||
|
|
||||||
self.loadingDesc.subscribe(function (sValue) {
|
self.loadingDesc.subscribe(function (sValue) {
|
||||||
Remote.saveAdminConfig(f2, {
|
Remote.saveAdminConfig(f2, {
|
||||||
'LoadingDescription': Utils.trim(sValue)
|
'LoadingDescription': Utils.trim(sValue)
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
});
|
||||||
|
|
||||||
}, 50);
|
}, 50);
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = BrandingAdminSettings;
|
module.exports = BrandingAdminSettings;
|
||||||
|
|
|
||||||
|
|
@ -22,14 +22,11 @@
|
||||||
this.language = ko.observable('')
|
this.language = ko.observable('')
|
||||||
.extend({'limitedList': this.languages});
|
.extend({'limitedList': this.languages});
|
||||||
|
|
||||||
this.userLanguage = ko.observable('')
|
|
||||||
.extend({'limitedList': this.languages});
|
|
||||||
|
|
||||||
this.languageAdmin = ko.observable('')
|
this.languageAdmin = ko.observable('')
|
||||||
.extend({'limitedList': this.languagesAdmin});
|
.extend({'limitedList': this.languagesAdmin});
|
||||||
|
|
||||||
this.userLanguageAdmin = ko.observable('')
|
this.userLanguage = ko.observable('');
|
||||||
.extend({'limitedList': this.languagesAdmin});
|
this.userLanguageAdmin = ko.observable('');
|
||||||
}
|
}
|
||||||
|
|
||||||
LanguageStore.prototype.populate = function ()
|
LanguageStore.prototype.populate = function ()
|
||||||
|
|
|
||||||
|
|
@ -1099,6 +1099,26 @@
|
||||||
oText.find('.rlBlockquoteSwitcher').off('.rlBlockquoteSwitcher').remove();
|
oText.find('.rlBlockquoteSwitcher').off('.rlBlockquoteSwitcher').remove();
|
||||||
oText.find('[data-html-editor-font-wrapper]').removeAttr('data-html-editor-font-wrapper');
|
oText.find('[data-html-editor-font-wrapper]').removeAttr('data-html-editor-font-wrapper');
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
|
||||||
|
var oTmp = null, iLimit = 0;
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
iLimit++;
|
||||||
|
|
||||||
|
oTmp = oText.children();
|
||||||
|
if (10 > iLimit && oTmp.is('div') && 1 === oTmp.length)
|
||||||
|
{
|
||||||
|
oTmp.children().unwrap();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}());
|
||||||
|
|
||||||
sText = oText.html();
|
sText = oText.html();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -24,15 +24,16 @@
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
this.fLang = null;
|
this.fLang = null;
|
||||||
this.sUserLanguage = '';
|
this.userLanguage = ko.observable('');
|
||||||
|
|
||||||
this.langs = ko.observableArray([]);
|
this.langs = ko.observableArray([]);
|
||||||
|
|
||||||
this.languages = ko.computed(function () {
|
this.languages = ko.computed(function () {
|
||||||
|
var sUserLanguage = self.userLanguage();
|
||||||
return _.map(self.langs(), function (sLanguage) {
|
return _.map(self.langs(), function (sLanguage) {
|
||||||
return {
|
return {
|
||||||
'key': sLanguage,
|
'key': sLanguage,
|
||||||
'user': sLanguage === self.sUserLanguage,
|
'user': sLanguage === sUserLanguage,
|
||||||
'selected': ko.observable(false),
|
'selected': ko.observable(false),
|
||||||
'fullName': Utils.convertLangName(sLanguage)
|
'fullName': Utils.convertLangName(sLanguage)
|
||||||
};
|
};
|
||||||
|
|
@ -66,7 +67,7 @@
|
||||||
LanguagesPopupView.prototype.onShow = function (fLanguage, aLangs, sUserLanguage)
|
LanguagesPopupView.prototype.onShow = function (fLanguage, aLangs, sUserLanguage)
|
||||||
{
|
{
|
||||||
this.fLang = fLanguage;
|
this.fLang = fLanguage;
|
||||||
this.sUserLanguage = sUserLanguage || '';
|
this.userLanguage(sUserLanguage || '');
|
||||||
|
|
||||||
this.langs(aLangs);
|
this.langs(aLangs);
|
||||||
};
|
};
|
||||||
|
|
@ -74,7 +75,7 @@
|
||||||
LanguagesPopupView.prototype.onHide = function ()
|
LanguagesPopupView.prototype.onHide = function ()
|
||||||
{
|
{
|
||||||
this.fLang = null;
|
this.fLang = null;
|
||||||
this.sUserLanguage = '';
|
this.userLanguage('');
|
||||||
this.langs([]);
|
this.langs([]);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
"name": "RainLoop",
|
"name": "RainLoop",
|
||||||
"title": "RainLoop Webmail",
|
"title": "RainLoop Webmail",
|
||||||
"version": "1.8.3",
|
"version": "1.8.3",
|
||||||
"release": "302",
|
"release": "304",
|
||||||
"description": "Simple, modern & fast web-based email client",
|
"description": "Simple, modern & fast web-based email client",
|
||||||
"homepage": "http://rainloop.net",
|
"homepage": "http://rainloop.net",
|
||||||
"main": "gulpfile.js",
|
"main": "gulpfile.js",
|
||||||
|
|
|
||||||
|
|
@ -1709,8 +1709,9 @@ class Actions
|
||||||
$aResult['LanguageAdmin'] = $this->ValidateLanguage($sLanguageAdmin, '', true);
|
$aResult['LanguageAdmin'] = $this->ValidateLanguage($sLanguageAdmin, '', true);
|
||||||
|
|
||||||
$aResult['UserLanguageRaw'] = $this->detectUserLanguage();
|
$aResult['UserLanguageRaw'] = $this->detectUserLanguage();
|
||||||
$aResult['UserLanguage'] = $this->ValidateLanguage($aResult['UserLanguageRaw'], $aResult['Language'], false);
|
|
||||||
$aResult['UserLanguageAdmin'] = $this->ValidateLanguage($aResult['UserLanguageRaw'], $aResult['LanguageAdmin'], true);
|
$aResult['UserLanguage'] = $this->ValidateLanguage($aResult['UserLanguageRaw'], '', false, true, true);
|
||||||
|
$aResult['UserLanguageAdmin'] = $this->ValidateLanguage($aResult['UserLanguageRaw'], '', true, true, true);
|
||||||
|
|
||||||
$aResult['LangLink'] = './?/Lang/0/'.($bAdmin ? 'Admin' : 'App').'/'.
|
$aResult['LangLink'] = './?/Lang/0/'.($bAdmin ? 'Admin' : 'App').'/'.
|
||||||
($bAdmin ? $aResult['LanguageAdmin'] : $aResult['Language']).'/'.$sStaticCache.'/';
|
($bAdmin ? $aResult['LanguageAdmin'] : $aResult['Language']).'/'.$sStaticCache.'/';
|
||||||
|
|
@ -5525,7 +5526,7 @@ class Actions
|
||||||
|
|
||||||
if ($bUseThreads)
|
if ($bUseThreads)
|
||||||
{
|
{
|
||||||
$sThreadUid = ''; // TODO
|
$sThreadUid = isset($aValues[8]) ? (string) $aValues[8] : '';
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->verifyCacheByKey($sRawKey);
|
$this->verifyCacheByKey($sRawKey);
|
||||||
|
|
@ -8380,10 +8381,11 @@ class Actions
|
||||||
* @param string $sDefault = ''
|
* @param string $sDefault = ''
|
||||||
* @param bool $bAdmin = false
|
* @param bool $bAdmin = false
|
||||||
* @param bool $bSearchShortName = false
|
* @param bool $bSearchShortName = false
|
||||||
|
* @param bool $bAllowEmptyResult = false
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function ValidateLanguage($sLanguage, $sDefault = '', $bAdmin = false, $bSearchShortName = false)
|
public function ValidateLanguage($sLanguage, $sDefault = '', $bAdmin = false, $bSearchShortName = false, $bAllowEmptyResult = false)
|
||||||
{
|
{
|
||||||
$sResult = '';
|
$sResult = '';
|
||||||
$aLang = $this->GetLanguages($bAdmin);
|
$aLang = $this->GetLanguages($bAdmin);
|
||||||
|
|
@ -8409,7 +8411,7 @@ class Actions
|
||||||
$sResult = $sDefault;
|
$sResult = $sDefault;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (empty($sResult))
|
if (empty($sResult) && !$bAllowEmptyResult)
|
||||||
{
|
{
|
||||||
$sResult = $this->Config()->Get('webmail', $bAdmin ? 'language_admin' : 'language', 'en');
|
$sResult = $this->Config()->Get('webmail', $bAdmin ? 'language_admin' : 'language', 'en');
|
||||||
$sResult = \in_array($sResult, $aLang) ? $sResult : 'en';
|
$sResult = \in_array($sResult, $aLang) ? $sResult : 'en';
|
||||||
|
|
|
||||||
|
|
@ -144,7 +144,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="tab-pane active" id="branding-welcome-page-section-id">
|
<div class="tab-pane" id="branding-welcome-page-section-id">
|
||||||
|
|
||||||
<div class="form-horizontal" data-bind="css: {'disabled-form': !capa()}">
|
<div class="form-horizontal" data-bind="css: {'disabled-form': !capa()}">
|
||||||
<div class="control-group">
|
<div class="control-group">
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue