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
5b6c90aea9
commit
f91f74fe7c
21 changed files with 398 additions and 83 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -1,4 +1,5 @@
|
||||||
/.idea
|
/.idea
|
||||||
|
/api.php
|
||||||
/error.log
|
/error.log
|
||||||
/nbproject
|
/nbproject
|
||||||
/npm-debug.log
|
/npm-debug.log
|
||||||
|
|
|
||||||
|
|
@ -103,7 +103,7 @@
|
||||||
*/
|
*/
|
||||||
HtmlEditor.prototype.clearSignatureSigns = function (sText)
|
HtmlEditor.prototype.clearSignatureSigns = function (sText)
|
||||||
{
|
{
|
||||||
return sText.replace(/(\u200C|<x-signature>|<\/x-signature>)/g, '');
|
return sText.replace(/(\u200C|\u0002)/g, '');
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -861,7 +861,7 @@
|
||||||
;
|
;
|
||||||
|
|
||||||
sText = sHtml
|
sText = sHtml
|
||||||
.replace(/<x-signature>([\s\S]*)<\/x-signature>/gm, '\u200C$1\u200C')
|
.replace(/\u0002([\s\S]*)\u0002/gm, '\u200C$1\u200C')
|
||||||
.replace(/<pre[^>]*>([\s\S\r\n]*)<\/pre>/gmi, convertPre)
|
.replace(/<pre[^>]*>([\s\S\r\n]*)<\/pre>/gmi, convertPre)
|
||||||
.replace(/[\s]+/gm, ' ')
|
.replace(/[\s]+/gm, ' ')
|
||||||
.replace(/((?:href|data)\s?=\s?)("[^"]+?"|'[^']+?')/gmi, fixAttibuteValue)
|
.replace(/((?:href|data)\s?=\s?)("[^"]+?"|'[^']+?')/gmi, fixAttibuteValue)
|
||||||
|
|
@ -1014,7 +1014,7 @@
|
||||||
.replace(/>/g, '>').replace(/</g, '<')
|
.replace(/>/g, '>').replace(/</g, '<')
|
||||||
.replace(/~~~blockquote~~~[\s]*/g, '<blockquote>')
|
.replace(/~~~blockquote~~~[\s]*/g, '<blockquote>')
|
||||||
.replace(/[\s]*~~~\/blockquote~~~/g, '</blockquote>')
|
.replace(/[\s]*~~~\/blockquote~~~/g, '</blockquote>')
|
||||||
.replace(/\u200C([\s\S]*)\u200C/g, '<x-signature>$1</x-signature>')
|
.replace(/\u200C([\s\S]*)\u200C/g, '\u0002$1\u0002')
|
||||||
.replace(/\n/g, '<br />')
|
.replace(/\n/g, '<br />')
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
|
||||||
6
dev/External/ko.js
vendored
6
dev/External/ko.js
vendored
|
|
@ -275,8 +275,7 @@
|
||||||
|
|
||||||
ko.bindingHandlers.csstext = {
|
ko.bindingHandlers.csstext = {
|
||||||
'init': function (oElement, fValueAccessor) {
|
'init': function (oElement, fValueAccessor) {
|
||||||
var Utils = require('Common/Utils');
|
if (oElement && oElement.styleSheet && undefined !== oElement.styleSheet.cssText)
|
||||||
if (oElement && oElement.styleSheet && !Utils.isUnd(oElement.styleSheet.cssText))
|
|
||||||
{
|
{
|
||||||
oElement.styleSheet.cssText = ko.unwrap(fValueAccessor());
|
oElement.styleSheet.cssText = ko.unwrap(fValueAccessor());
|
||||||
}
|
}
|
||||||
|
|
@ -286,8 +285,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'update': function (oElement, fValueAccessor) {
|
'update': function (oElement, fValueAccessor) {
|
||||||
var Utils = require('Common/Utils');
|
if (oElement && oElement.styleSheet && undefined !== oElement.styleSheet.cssText)
|
||||||
if (oElement && oElement.styleSheet && !Utils.isUnd(oElement.styleSheet.cssText))
|
|
||||||
{
|
{
|
||||||
oElement.styleSheet.cssText = ko.unwrap(fValueAccessor());
|
oElement.styleSheet.cssText = ko.unwrap(fValueAccessor());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -225,16 +225,16 @@
|
||||||
{
|
{
|
||||||
var
|
var
|
||||||
iCount = 0,
|
iCount = 0,
|
||||||
oMessagesBodiesDom = null,
|
oMessagesDom = null,
|
||||||
iEnd = Globals.iMessageBodyCacheCount - Consts.Values.MessageBodyCacheLimit
|
iEnd = Globals.iMessageBodyCacheCount - Consts.Values.MessageBodyCacheLimit
|
||||||
;
|
;
|
||||||
|
|
||||||
if (0 < iEnd)
|
if (0 < iEnd)
|
||||||
{
|
{
|
||||||
oMessagesBodiesDom = this.messagesBodiesDom();
|
oMessagesDom = this.messagesBodiesDom();
|
||||||
if (oMessagesBodiesDom)
|
if (oMessagesDom)
|
||||||
{
|
{
|
||||||
oMessagesBodiesDom.find('.rl-cache-class').each(function () {
|
oMessagesDom.find('.rl-cache-class').each(function () {
|
||||||
var oItem = $(this);
|
var oItem = $(this);
|
||||||
if (iEnd > oItem.data('rl-cache-count'))
|
if (iEnd > oItem.data('rl-cache-count'))
|
||||||
{
|
{
|
||||||
|
|
@ -246,7 +246,7 @@
|
||||||
if (0 < iCount)
|
if (0 < iCount)
|
||||||
{
|
{
|
||||||
_.delay(function () {
|
_.delay(function () {
|
||||||
oMessagesBodiesDom.find('.rl-cache-purge').remove();
|
oMessagesDom.find('.rl-cache-purge').remove();
|
||||||
}, 300);
|
}, 300);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -301,10 +301,10 @@
|
||||||
|
|
||||||
MessageUserStore.prototype.hideMessageBodies = function ()
|
MessageUserStore.prototype.hideMessageBodies = function ()
|
||||||
{
|
{
|
||||||
var oMessagesBodiesDom = this.messagesBodiesDom();
|
var oMessagesDom = this.messagesBodiesDom();
|
||||||
if (oMessagesBodiesDom)
|
if (oMessagesDom)
|
||||||
{
|
{
|
||||||
oMessagesBodiesDom.find('.b-text-part').hide();
|
oMessagesDom.find('.b-text-part').hide();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -508,7 +508,7 @@
|
||||||
sResultHtml = '',
|
sResultHtml = '',
|
||||||
bPgpSigned = false,
|
bPgpSigned = false,
|
||||||
bPgpEncrypted = false,
|
bPgpEncrypted = false,
|
||||||
oMessagesBodiesDom = this.messagesBodiesDom(),
|
oMessagesDom = this.messagesBodiesDom(),
|
||||||
oSelectedMessage = this.selectorMessageSelected(),
|
oSelectedMessage = this.selectorMessageSelected(),
|
||||||
oMessage = this.message(),
|
oMessage = this.message(),
|
||||||
aThreads = []
|
aThreads = []
|
||||||
|
|
@ -546,11 +546,12 @@
|
||||||
oMessage.initFlagsByJson(oData.Result);
|
oMessage.initFlagsByJson(oData.Result);
|
||||||
}
|
}
|
||||||
|
|
||||||
oMessagesBodiesDom = oMessagesBodiesDom && oMessagesBodiesDom[0] ? oMessagesBodiesDom : null;
|
oMessagesDom = oMessagesDom && oMessagesDom[0] ? oMessagesDom : null;
|
||||||
if (oMessagesBodiesDom)
|
if (oMessagesDom)
|
||||||
{
|
{
|
||||||
sId = 'rl-mgs-' + oMessage.hash.replace(/[^a-zA-Z0-9]/g, '');
|
sId = 'rl-mgs-' + oMessage.hash.replace(/[^a-zA-Z0-9]/g, '');
|
||||||
oTextBody = oMessagesBodiesDom.find('#' + sId);
|
oTextBody = oMessagesDom.find('#' + sId);
|
||||||
|
|
||||||
if (!oTextBody || !oTextBody[0])
|
if (!oTextBody || !oTextBody[0])
|
||||||
{
|
{
|
||||||
bHasExternals = !!oData.Result.HasExternals;
|
bHasExternals = !!oData.Result.HasExternals;
|
||||||
|
|
@ -622,7 +623,7 @@
|
||||||
oMessage.body = oBody;
|
oMessage.body = oBody;
|
||||||
if (oMessage.body)
|
if (oMessage.body)
|
||||||
{
|
{
|
||||||
oMessagesBodiesDom.append(oMessage.body);
|
oMessagesDom.append(oMessage.body);
|
||||||
}
|
}
|
||||||
|
|
||||||
oMessage.storeDataInDom();
|
oMessage.storeDataInDom();
|
||||||
|
|
|
||||||
|
|
@ -1098,25 +1098,25 @@
|
||||||
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 () {
|
// (function () {
|
||||||
|
//
|
||||||
var oTmp = null, iLimit = 0;
|
// var oTmp = null, iLimit = 0;
|
||||||
|
//
|
||||||
while (true)
|
// while (true)
|
||||||
{
|
// {
|
||||||
iLimit++;
|
// iLimit++;
|
||||||
|
//
|
||||||
oTmp = oText.children();
|
// oTmp = oText.children();
|
||||||
if (10 > iLimit && oTmp.is('div') && 1 === oTmp.length)
|
// if (10 > iLimit && oTmp.is('div') && 1 === oTmp.length)
|
||||||
{
|
// {
|
||||||
oTmp.children().unwrap();
|
// oTmp.children().unwrap();
|
||||||
continue;
|
// continue;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
break;
|
// break;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
}());
|
// }());
|
||||||
|
|
||||||
sText = oText.html();
|
sText = oText.html();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,8 @@
|
||||||
|
|
||||||
Cache = require('Common/Cache'),
|
Cache = require('Common/Cache'),
|
||||||
|
|
||||||
|
EmailModel = require('Model/Email'),
|
||||||
|
|
||||||
SocialStore = require('Stores/Social'),
|
SocialStore = require('Stores/Social'),
|
||||||
AppStore = require('Stores/User/App'),
|
AppStore = require('Stores/User/App'),
|
||||||
SettingsStore = require('Stores/User/Settings'),
|
SettingsStore = require('Stores/User/Settings'),
|
||||||
|
|
@ -531,6 +533,32 @@
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @todo
|
||||||
|
* @param {string} sEmail
|
||||||
|
*/
|
||||||
|
MessageViewMailBoxUserView.prototype.displayMailToPopup = function (sMailToUrl)
|
||||||
|
{
|
||||||
|
sMailToUrl = sMailToUrl.replace(/\?.+$/, '');
|
||||||
|
|
||||||
|
var
|
||||||
|
sResult = '',
|
||||||
|
aTo = [],
|
||||||
|
fParseEmailLine = function (sLine) {
|
||||||
|
return sLine ? _.compact(_.map([window.decodeURIComponent(sLine)], function (sItem) {
|
||||||
|
var oEmailModel = new EmailModel();
|
||||||
|
oEmailModel.mailsoParse(sItem);
|
||||||
|
return '' !== oEmailModel.email ? oEmailModel : null;
|
||||||
|
})) : null;
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
|
aTo = fParseEmailLine(sMailToUrl);
|
||||||
|
sResult = aTo && aTo[0] ? aTo[0].email : '';
|
||||||
|
|
||||||
|
window.console.log(sResult);
|
||||||
|
};
|
||||||
|
|
||||||
MessageViewMailBoxUserView.prototype.onBuild = function (oDom)
|
MessageViewMailBoxUserView.prototype.onBuild = function (oDom)
|
||||||
{
|
{
|
||||||
var
|
var
|
||||||
|
|
@ -666,6 +694,21 @@
|
||||||
// setup maito protocol
|
// setup maito protocol
|
||||||
return !(!!oEvent && 3 !== oEvent['which'] && Utils.mailToHelper($(this).attr('href'), require('View/Popup/Compose')));
|
return !(!!oEvent && 3 !== oEvent['which'] && Utils.mailToHelper($(this).attr('href'), require('View/Popup/Compose')));
|
||||||
})
|
})
|
||||||
|
// .on('mouseover', 'a', _.debounce(function (oEvent) {
|
||||||
|
//
|
||||||
|
// if (oEvent)
|
||||||
|
// {
|
||||||
|
// var sMailToUrl = $(this).attr('href');
|
||||||
|
// if (sMailToUrl && 'mailto:' === sMailToUrl.toString().substr(0, 7).toLowerCase())
|
||||||
|
// {
|
||||||
|
// sMailToUrl = sMailToUrl.toString().substr(7);
|
||||||
|
// self.displayMailToPopup(sMailToUrl);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return true;
|
||||||
|
//
|
||||||
|
// }, 1000))
|
||||||
.on('click', '.attachmentsPlace .attachmentIconParent', function (oEvent) {
|
.on('click', '.attachmentsPlace .attachmentIconParent', function (oEvent) {
|
||||||
if (oEvent && oEvent.stopPropagation)
|
if (oEvent && oEvent.stopPropagation)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
"name": "RainLoop",
|
"name": "RainLoop",
|
||||||
"title": "RainLoop Webmail",
|
"title": "RainLoop Webmail",
|
||||||
"version": "1.9.0",
|
"version": "1.9.0",
|
||||||
"release": "325",
|
"release": "327",
|
||||||
"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",
|
||||||
|
|
|
||||||
|
|
@ -86,16 +86,23 @@ class HtmlUtils
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $sHtml
|
* @param string $sHtml
|
||||||
|
* @param bool $bClearStyleAndHead = true
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public static function ClearTags($sHtml)
|
public static function ClearTags($sHtml, $bClearStyleAndHead = true)
|
||||||
{
|
{
|
||||||
$aRemoveTags = array(
|
$aRemoveTags = array(
|
||||||
'head', 'link', 'base', 'meta', 'title', 'style', 'script', 'bgsound', 'keygen', 'source',
|
'link', 'base', 'meta', 'title', 'script', 'bgsound', 'keygen', 'source',
|
||||||
'object', 'embed', 'applet', 'mocha', 'iframe', 'frame', 'frameset', 'video', 'audio'
|
'object', 'embed', 'applet', 'mocha', 'iframe', 'frame', 'frameset', 'video', 'audio'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if ($bClearStyleAndHead)
|
||||||
|
{
|
||||||
|
$aRemoveTags[] = 'head';
|
||||||
|
$aRemoveTags[] = 'style';
|
||||||
|
}
|
||||||
|
|
||||||
$aToRemove = array(
|
$aToRemove = array(
|
||||||
'/<!doctype[^>]*>/msi',
|
'/<!doctype[^>]*>/msi',
|
||||||
'/<\?xml [^>]*\?>/msi'
|
'/<\?xml [^>]*\?>/msi'
|
||||||
|
|
@ -150,6 +157,227 @@ class HtmlUtils
|
||||||
return \preg_replace($aToReplace, 'оn\\1', $sHtml);
|
return \preg_replace($aToReplace, 'оn\\1', $sHtml);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// public static function ClearStyleUrlValueParserHelper($oUrlValue, $oRule, $oRuleSet,
|
||||||
|
// $oElem = null,
|
||||||
|
// &$bHasExternals = false, &$aFoundCIDs = array(),
|
||||||
|
// $aContentLocationUrls = array(), &$aFoundedContentLocationUrls = array(),
|
||||||
|
// $bDoNotReplaceExternalUrl = false, $fAdditionalExternalFilter = null
|
||||||
|
// )
|
||||||
|
// {
|
||||||
|
// if ($oUrlValue instanceof \Sabberworm\CSS\Value\URL)
|
||||||
|
// {
|
||||||
|
// $oNewRule = new \Sabberworm\CSS\Rule\Rule('x-rl-orig-'.$oRule->getRule());
|
||||||
|
// $oNewRule->setValue((string) $oRule->getValue());
|
||||||
|
// $oNewRule->setIsImportant($oRule->getIsImportant());
|
||||||
|
//
|
||||||
|
// $oRuleSet->addRule($oNewRule);
|
||||||
|
//
|
||||||
|
// $oUrl = $oUrlValue->getURL();
|
||||||
|
// $sUrl = $oUrl ? $oUrl->getString() : '';
|
||||||
|
//
|
||||||
|
// if ('cid:' === \strtolower(\substr($sUrl, 0, 4)))
|
||||||
|
// {
|
||||||
|
// $aFoundCIDs[] = \substr($sUrl, 4);
|
||||||
|
//
|
||||||
|
// $oRule->setRule('x-rl-mod-'.$oRule->getRule());
|
||||||
|
//
|
||||||
|
// if ($oElem)
|
||||||
|
// {
|
||||||
|
// $oElem->setAttribute('data-x-style-mod', '1');
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// if (\preg_match('/http[s]?:\/\//i', $sUrl) || '//' === \substr($sUrl, 0, 2))
|
||||||
|
// {
|
||||||
|
// $oRule->setRule('x-rl-mod-'.$oRule->getRule());
|
||||||
|
//
|
||||||
|
// if (\in_array($sUrl, $aContentLocationUrls))
|
||||||
|
// {
|
||||||
|
// $aFoundedContentLocationUrls[] = $sUrl;
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// $bHasExternals = true;
|
||||||
|
// if (!$bDoNotReplaceExternalUrl)
|
||||||
|
// {
|
||||||
|
// if ($fAdditionalExternalFilter)
|
||||||
|
// {
|
||||||
|
// $sAdditionalResult = \call_user_func($fAdditionalExternalFilter, $sUrl);
|
||||||
|
// if (0 < \strlen($sAdditionalResult) && $oUrl)
|
||||||
|
// {
|
||||||
|
// $oUrl->setString($sAdditionalResult);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if ($oElem)
|
||||||
|
// {
|
||||||
|
// $oElem->setAttribute('data-x-style-mod', '1');
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// else if ('data:image/' !== \strtolower(\substr(\trim($sUrl), 0, 11)))
|
||||||
|
// {
|
||||||
|
// $oRuleSet->removeRule($oRule);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// else if ($oRule instanceof \Sabberworm\CSS\Rule\Rule)
|
||||||
|
// {
|
||||||
|
// if ('x-rl-' !== \substr($oRule->getRule(), 0, 5))
|
||||||
|
// {
|
||||||
|
// $oValue = $oRule->getValue();
|
||||||
|
// if ($oValue instanceof \Sabberworm\CSS\Value\URL)
|
||||||
|
// {
|
||||||
|
// \MailSo\Base\HtmlUtils::ClearStyleUrlValueParserHelper($oValue, $oRule, $oRuleSet, $oElem,
|
||||||
|
// $bHasExternals, $aFoundCIDs,
|
||||||
|
// $aContentLocationUrls, $aFoundedContentLocationUrls,
|
||||||
|
// $bDoNotReplaceExternalUrl, $fAdditionalExternalFilter);
|
||||||
|
// }
|
||||||
|
// else if ($oValue instanceof \Sabberworm\CSS\Value\RuleValueList)
|
||||||
|
// {
|
||||||
|
// $aComps = $oValue->getListComponents();
|
||||||
|
// foreach ($aComps as $oValue)
|
||||||
|
// {
|
||||||
|
// if ($oValue instanceof \Sabberworm\CSS\Value\URL)
|
||||||
|
// {
|
||||||
|
// \MailSo\Base\HtmlUtils::ClearStyleUrlValueParserHelper($oValue, $oRule, $oRuleSet, $oElem,
|
||||||
|
// $bHasExternals, $aFoundCIDs,
|
||||||
|
// $aContentLocationUrls, $aFoundedContentLocationUrls,
|
||||||
|
// $bDoNotReplaceExternalUrl, $fAdditionalExternalFilter);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public static function ClearStyleSmart($sStyle, $oElement = null,
|
||||||
|
// &$bHasExternals = false, &$aFoundCIDs = array(),
|
||||||
|
// $aContentLocationUrls = array(), &$aFoundedContentLocationUrls = array(),
|
||||||
|
// $bDoNotReplaceExternalUrl = false, $fAdditionalExternalFilter = null,
|
||||||
|
// $sSelectorPrefix = '')
|
||||||
|
// {
|
||||||
|
// $mResult = false;
|
||||||
|
// $oCss = null;
|
||||||
|
//
|
||||||
|
// if (!\class_exists('\\Sabberworm\\CSS\\Parser'))
|
||||||
|
// {
|
||||||
|
// return $mResult;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// $sStyle = \trim($sStyle);
|
||||||
|
// if (empty($sStyle))
|
||||||
|
// {
|
||||||
|
// return '';
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// $sStyle = \trim(\preg_replace('/[\r\n\t\s]+/', ' ', $sStyle));
|
||||||
|
//
|
||||||
|
// try
|
||||||
|
// {
|
||||||
|
// $oSettings = \Sabberworm\CSS\Settings::create();
|
||||||
|
// $oSettings->beStrict();
|
||||||
|
// $oSettings->withMultibyteSupport(false);
|
||||||
|
//
|
||||||
|
// $oCssParser = new \Sabberworm\CSS\Parser($sStyle, $oSettings);
|
||||||
|
// $oCss = $oCssParser->parse();
|
||||||
|
// }
|
||||||
|
// catch (\Exception $oEception)
|
||||||
|
// {
|
||||||
|
// unset($oEception);
|
||||||
|
// $mResult = false;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if ($oCss)
|
||||||
|
// {
|
||||||
|
// foreach ($oCss->getAllDeclarationBlocks() as $oBlock)
|
||||||
|
// {
|
||||||
|
// foreach($oBlock->getSelectors() as $oSelector)
|
||||||
|
// {
|
||||||
|
// $sS = ' '.\trim($oSelector->getSelector()).' ';
|
||||||
|
// $sS = \preg_replace('/ body([\.# ])/i', ' [data-x-div-type="body"]$1', $sS);
|
||||||
|
// $sS = \preg_replace('/ html([\.# ])/i', ' [data-x-div-type="html"]$1', $sS);
|
||||||
|
//
|
||||||
|
// if (0 < \strlen($sSelectorPrefix))
|
||||||
|
// {
|
||||||
|
// $sS = \trim($sSelectorPrefix.' '.\trim($sS));
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// $oSelector->setSelector(\trim($sS));
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// $aRulesToRemove = array(
|
||||||
|
// 'pointer-events', 'content', 'behavior', 'cursor',
|
||||||
|
// );
|
||||||
|
//
|
||||||
|
// foreach($oCss->getAllRuleSets() as $oRuleSet)
|
||||||
|
// {
|
||||||
|
// foreach ($aRulesToRemove as $sRuleToRemove)
|
||||||
|
// {
|
||||||
|
// $oRuleSet->removeRule($sRuleToRemove);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // position: fixed -> position: fixed -> absolute
|
||||||
|
// $aRules = $oRuleSet->getRules('position');
|
||||||
|
// if (\is_array($aRules))
|
||||||
|
// {
|
||||||
|
// foreach ($aRules as $oRule)
|
||||||
|
// {
|
||||||
|
// $mValue = $oRule->getValue();
|
||||||
|
// if (\is_string($mValue) && 'fixed' === \trim(\strtolower($mValue)))
|
||||||
|
// {
|
||||||
|
// $oRule->setValue('absolute');
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// foreach($oCss->getAllDeclarationBlocks() as $oRuleSet)
|
||||||
|
// {
|
||||||
|
// if ($oRuleSet instanceof \Sabberworm\CSS\RuleSet\RuleSet)
|
||||||
|
// {
|
||||||
|
// if ($oRuleSet instanceof \Sabberworm\CSS\RuleSet\DeclarationBlock)
|
||||||
|
// {
|
||||||
|
// $oRuleSet->expandBackgroundShorthand();
|
||||||
|
// $oRuleSet->expandListStyleShorthand();
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// $aRules = $oRuleSet->getRules();
|
||||||
|
// if (\is_array($aRules) && 0 < \count($aRules))
|
||||||
|
// {
|
||||||
|
// foreach ($aRules as $oRule)
|
||||||
|
// {
|
||||||
|
// if ($oRule instanceof \Sabberworm\CSS\Rule\Rule)
|
||||||
|
// {
|
||||||
|
// \MailSo\Base\HtmlUtils::ClearStyleUrlValueParserHelper(null, $oRule, $oRuleSet,
|
||||||
|
// $oElement,
|
||||||
|
// $bHasExternals, $aFoundCIDs,
|
||||||
|
// $aContentLocationUrls, $aFoundedContentLocationUrls,
|
||||||
|
// $bDoNotReplaceExternalUrl, $fAdditionalExternalFilter
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// try
|
||||||
|
// {
|
||||||
|
// $mResult = $oCss->render(\Sabberworm\CSS\OutputFormat::createCompact());
|
||||||
|
// }
|
||||||
|
// catch (\Exception $oEception)
|
||||||
|
// {
|
||||||
|
// unset($oEception);
|
||||||
|
// $mResult = false;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return $mResult;
|
||||||
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param string $sStyle
|
* @param string $sStyle
|
||||||
|
|
@ -208,7 +436,7 @@ class HtmlUtils
|
||||||
{
|
{
|
||||||
// skip
|
// skip
|
||||||
}
|
}
|
||||||
else if (\in_array($sName, array('background-image', 'background', 'list-style-image', 'content'))
|
else if (\in_array($sName, array('background-image', 'background', 'list-style', 'list-style-image', 'content'))
|
||||||
&& \preg_match('/url[\s]?\(([^)]+)\)/im', $sValue, $aMatch) && !empty($aMatch[1]))
|
&& \preg_match('/url[\s]?\(([^)]+)\)/im', $sValue, $aMatch) && !empty($aMatch[1]))
|
||||||
{
|
{
|
||||||
$sFullUrl = \trim($aMatch[0], '"\' ');
|
$sFullUrl = \trim($aMatch[0], '"\' ');
|
||||||
|
|
@ -417,6 +645,8 @@ class HtmlUtils
|
||||||
$bDoNotReplaceExternalUrl = false, $bFindLinksInHtml = false, $fAdditionalExternalFilter = null)
|
$bDoNotReplaceExternalUrl = false, $bFindLinksInHtml = false, $fAdditionalExternalFilter = null)
|
||||||
{
|
{
|
||||||
$sResult = '';
|
$sResult = '';
|
||||||
|
// $aBodyStyles = array();
|
||||||
|
|
||||||
$sHtml = null === $sHtml ? '' : (string) $sHtml;
|
$sHtml = null === $sHtml ? '' : (string) $sHtml;
|
||||||
$sHtml = \trim($sHtml);
|
$sHtml = \trim($sHtml);
|
||||||
if (0 === \strlen($sHtml))
|
if (0 === \strlen($sHtml))
|
||||||
|
|
@ -431,7 +661,7 @@ class HtmlUtils
|
||||||
|
|
||||||
$bHasExternals = false;
|
$bHasExternals = false;
|
||||||
|
|
||||||
$sHtml = \MailSo\Base\HtmlUtils::ClearTags($sHtml);
|
$sHtml = \MailSo\Base\HtmlUtils::ClearTags($sHtml, false);
|
||||||
$sHtml = \MailSo\Base\HtmlUtils::ClearOn($sHtml);
|
$sHtml = \MailSo\Base\HtmlUtils::ClearOn($sHtml);
|
||||||
|
|
||||||
$sHtmlAttrs = $sBodyAttrs = '';
|
$sHtmlAttrs = $sBodyAttrs = '';
|
||||||
|
|
@ -451,11 +681,28 @@ class HtmlUtils
|
||||||
$aNodes = $oDom->getElementsByTagName('*');
|
$aNodes = $oDom->getElementsByTagName('*');
|
||||||
foreach ($aNodes as /* @var $oElement \DOMElement */ $oElement)
|
foreach ($aNodes as /* @var $oElement \DOMElement */ $oElement)
|
||||||
{
|
{
|
||||||
if (\in_array(\strtolower($oElement->tagName), array('svg', 'head', 'link',
|
if ($oElement)
|
||||||
'base', 'meta', 'title', 'style', 'x-script', 'script', 'bgsound', 'keygen', 'source',
|
|
||||||
'object', 'embed', 'applet', 'mocha', 'iframe', 'frame', 'frameset', 'video', 'audio')) && isset($oElement->parentNode))
|
|
||||||
{
|
{
|
||||||
@$oElement->parentNode->removeChild($oElement);
|
$sTagNameLower = \strtolower($oElement->tagName);
|
||||||
|
|
||||||
|
if (\in_array($sTagNameLower, array('svg', 'head', 'link',
|
||||||
|
'base', 'meta', 'title', 'style', 'x-script', 'script', 'bgsound', 'keygen', 'source',
|
||||||
|
'object', 'embed', 'applet', 'mocha', 'iframe', 'frame', 'frameset', 'video', 'audio')))
|
||||||
|
{
|
||||||
|
// if ('style' === $sTagNameLower)
|
||||||
|
// {
|
||||||
|
// $sV = (string) $oElement->textContent;
|
||||||
|
// if (!empty($sV))
|
||||||
|
// {
|
||||||
|
// $aBodyStyles[] = $sV;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
if (isset($oElement->parentNode))
|
||||||
|
{
|
||||||
|
@$oElement->parentNode->removeChild($oElement);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -546,7 +793,8 @@ class HtmlUtils
|
||||||
// }
|
// }
|
||||||
|
|
||||||
foreach (array(
|
foreach (array(
|
||||||
'id', 'class', 'contenteditable', 'designmode', 'formaction',
|
'id', 'class',
|
||||||
|
'contenteditable', 'designmode', 'formaction',
|
||||||
'data-bind', 'xmlns', 'srcset'
|
'data-bind', 'xmlns', 'srcset'
|
||||||
) as $sAttr)
|
) as $sAttr)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1682,7 +1682,8 @@ class Actions
|
||||||
$aResult['UserBackgroundHash'] = '';
|
$aResult['UserBackgroundHash'] = '';
|
||||||
|
|
||||||
if (!$bAdmin && $oSettings instanceof \RainLoop\Settings &&
|
if (!$bAdmin && $oSettings instanceof \RainLoop\Settings &&
|
||||||
$oSettingsLocal instanceof \RainLoop\Settings)
|
$oSettingsLocal instanceof \RainLoop\Settings &&
|
||||||
|
$oAccount)
|
||||||
{
|
{
|
||||||
if ($oConfig->Get('webmail', 'allow_languages_on_settings', true))
|
if ($oConfig->Get('webmail', 'allow_languages_on_settings', true))
|
||||||
{
|
{
|
||||||
|
|
@ -9277,7 +9278,8 @@ class Actions
|
||||||
|
|
||||||
$mResult['Html'] = 0 === \strlen($sHtml) ? '' : \MailSo\Base\HtmlUtils::ClearHtml(
|
$mResult['Html'] = 0 === \strlen($sHtml) ? '' : \MailSo\Base\HtmlUtils::ClearHtml(
|
||||||
$sHtml, $bHasExternals, $mFoundedCIDs, $aContentLocationUrls, $mFoundedContentLocationUrls, false, false,
|
$sHtml, $bHasExternals, $mFoundedCIDs, $aContentLocationUrls, $mFoundedContentLocationUrls, false, false,
|
||||||
$fAdditionalExternalFilter);
|
$fAdditionalExternalFilter
|
||||||
|
);
|
||||||
|
|
||||||
$mResult['ExternalProxy'] = null !== $fAdditionalExternalFilter;
|
$mResult['ExternalProxy'] = null !== $fAdditionalExternalFilter;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,25 @@ class Utils
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $sFileName
|
||||||
|
* @param string $sSignature
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
static public function PgpVerifyFile($sFileName, $sSignature)
|
||||||
|
{
|
||||||
|
$sKeyFile = APP_VERSION_ROOT_PATH.'app/resources/RainLoop.asc';
|
||||||
|
if (\file_exists($sKeyFile) && \file_exists($sFileName) && !empty($sSignature))
|
||||||
|
{
|
||||||
|
$sKeyFile = @\file_get_contents($sKeyFile);
|
||||||
|
return !empty($sKeyFile); // TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $sString
|
* @param string $sString
|
||||||
* @param string $sKey
|
* @param string $sKey
|
||||||
|
|
|
||||||
18
rainloop/v/0.0.0/app/resources/RainLoop.asc
Normal file
18
rainloop/v/0.0.0/app/resources/RainLoop.asc
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
Version: GnuPG v2
|
||||||
|
|
||||||
|
mQENBFVN/RoBCAD4NYpb/iMtDARKdTnvV/9ycoTOWdAJoGAasuLprVqyI8bB0z6X
|
||||||
|
ztJTqswgQcMzEwba5hQ9vuJ/Ylfww6mPvWJs/nmTUKxs2LlBldoSg25UDm7hyt59
|
||||||
|
hi9zvOTwmeDNjGf5DXMib4Uuk5pH/jsmprRDZx25xA8qD2pDo0LOv5hexTwl5teA
|
||||||
|
Zh8EAAzyiNsXbX+kab9IFwSArsvYK0YJln+tPHvT29X5B5YVt9gkwY+CWA3QV/ZG
|
||||||
|
d71KEp+zReHICSjSy9G646JHDoG8CQ4Nytaih5oboqjU+Hkt8GeGlRlaPm3AIXqc
|
||||||
|
3q76Og/KD1Itx7MKrfXUvCau/4HowSiO9neJABEBAAG0H1JhaW5Mb29wIDxzdXBw
|
||||||
|
b3J0QHJhaW5sb29wLm5ldD6JATkEEwEIACMFAlVN/RoCGw8HCwkIBwMCAQYVCAIJ
|
||||||
|
CgsEFgIDAQIeAQIXgAAKCRDtfEnZh9pFkTxVCAD0S4RMXVKsbjLm22zXE01yHWQM
|
||||||
|
25QBRb5Z8p4ER3GcRNiKRWsNRTMRpiTdPgCyfj+tgIooMbBravDJwTkoztfWOb/P
|
||||||
|
l3oazxhY/ivvLalk5kVY7lflWyYYn9tfGwVJYIZCKuZ67VZwtTcf6dBhbc4DizVw
|
||||||
|
LuJAY6VNwycSHe8nrESabWzYRnw5c5ex/dmk8a1rsFXcDJBUB9MdZR7pxpniS9qB
|
||||||
|
JByxjP6hHo5vo1y6mPDiN1wWBd+objA7ZJaXd0jnsXRHlBAk74/O5cWvmVeExYjx
|
||||||
|
aERJEMQdBoAZNG1uTnQwjNdHfVoWDpqDSUr4QPfRv8M2pwvP4V1i6qji1r5T
|
||||||
|
=dVNE
|
||||||
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
@ -42,14 +42,14 @@
|
||||||
</div>
|
</div>
|
||||||
<div data-bind="visible: !licensingProcess()">
|
<div data-bind="visible: !licensingProcess()">
|
||||||
<div class="alert alert-block span6" style="margin-left: 0; padding-top: 20px" data-bind="visible: !licensing()">
|
<div class="alert alert-block span6" style="margin-left: 0; padding-top: 20px" data-bind="visible: !licensing()">
|
||||||
<h4 data-i18n="TAB_LICENSING/TYPE_BASIC"></h4>
|
<h4>Basic</h4>
|
||||||
<br />
|
<br />
|
||||||
<p data-i18n="TAB_LICENSING/TYPE_BASIC_HINT"></p>
|
<p data-i18n="TAB_LICENSING/TYPE_BASIC_HINT"></p>
|
||||||
</div>
|
</div>
|
||||||
<div data-bind="visible: licensing()">
|
<div data-bind="visible: licensing()">
|
||||||
<div class="alert alert-success span6" style="margin-left: 0; margin-top: 10px; padding-top: 20px" data-bind="visible: licenseValid() && '' === licenseError()">
|
<div class="alert alert-success span6" style="margin-left: 0; margin-top: 10px; padding-top: 20px" data-bind="visible: licenseValid() && '' === licenseError()">
|
||||||
<h4>
|
<h4>
|
||||||
<snan data-i18n="TAB_LICENSING/TYPE_PREMIUM"></snan>
|
<snan>Premium</snan>
|
||||||
<span data-bind="visible: licenseIsUnlim()">
|
<span data-bind="visible: licenseIsUnlim()">
|
||||||
|
|
||||||
(<snan data-i18n="TAB_LICENSING/TYPE_PREMIUM_LIFETIME"></snan>)
|
(<snan data-i18n="TAB_LICENSING/TYPE_PREMIUM_LIFETIME"></snan>)
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,7 @@
|
||||||
<span class="i18n i18n-animation" data-i18n="LOGIN/BUTTON_SIGN_IN" data-bind="visible: !submitRequest()"></span>
|
<span class="i18n i18n-animation" data-i18n="LOGIN/BUTTON_SIGN_IN" data-bind="visible: !submitRequest()"></span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="controls">
|
<div class="controls clearfix" style="margin-bottom: 20px">
|
||||||
<div class="pull-right social-buttons">
|
<div class="pull-right social-buttons">
|
||||||
<a href="#" tabindex="-1" class="social-button" data-bind="visible: facebookLoginEnabled, command: facebookCommand, tooltip: 'LOGIN/TITLE_SIGN_IN_FACEBOOK'">
|
<a href="#" tabindex="-1" class="social-button" data-bind="visible: facebookLoginEnabled, command: facebookCommand, tooltip: 'LOGIN/TITLE_SIGN_IN_FACEBOOK'">
|
||||||
<i class="icon-facebook-alt"></i>
|
<i class="icon-facebook-alt"></i>
|
||||||
|
|
@ -88,7 +88,7 @@
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="signMeLabel" data-bind="component: {
|
<div class="signMeLabel" data-bind="visible: signMeVisibility, component: {
|
||||||
name: 'CheckboxSimple',
|
name: 'CheckboxSimple',
|
||||||
params: {
|
params: {
|
||||||
label: 'LOGIN/LABEL_SIGN_ME',
|
label: 'LOGIN/LABEL_SIGN_ME',
|
||||||
|
|
@ -97,11 +97,6 @@
|
||||||
}
|
}
|
||||||
}"></div>
|
}"></div>
|
||||||
|
|
||||||
<!-- <label class="signMeLabel inline" data-bind="click: function () { signMe(!signMe()); }, visible: signMeVisibility">
|
|
||||||
<i data-bind="css: signMe() ? 'checkboxSignMe icon-checkbox-checked' : 'checkboxSignMe icon-checkbox-unchecked'"></i>
|
|
||||||
|
|
||||||
<span class="i18n i18n-animation" data-i18n="LOGIN/LABEL_SIGN_ME"></span>
|
|
||||||
</label>-->
|
|
||||||
</div>
|
</div>
|
||||||
<div class="controls clearfix" data-bind="visible: '' !== forgotPasswordLinkUrl || '' !== registrationLinkUrl">
|
<div class="controls clearfix" data-bind="visible: '' !== forgotPasswordLinkUrl || '' !== registrationLinkUrl">
|
||||||
<div class="forgot-link thm-forgot pull-left" data-bind="visible: '' !== forgotPasswordLinkUrl" style="text-align: center">
|
<div class="forgot-link thm-forgot pull-left" data-bind="visible: '' !== forgotPasswordLinkUrl" style="text-align: center">
|
||||||
|
|
|
||||||
|
|
@ -410,7 +410,7 @@
|
||||||
<button type="button" class="close" style="margin-right: 5px;"
|
<button type="button" class="close" style="margin-right: 5px;"
|
||||||
data-bind="click: function () { showAttachmnetControls(false); }">×</button>
|
data-bind="click: function () { showAttachmnetControls(false); }">×</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="bodyText g-ui-min-height-300" data-bind="initDom: messagesBodiesDom"></div>
|
<div class="bodyText g-ui-min-height-300 rl-mv-root" data-bind="initDom: messagesBodiesDom"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -151,14 +151,12 @@ ALERT_CANNOT_ACCESS_REPOSITORY = "Auf das Plugin-Repository kann derzeit nicht z
|
||||||
LABEL_YOUR_DOMAIN = "Ihre Domain"
|
LABEL_YOUR_DOMAIN = "Ihre Domain"
|
||||||
LABEL_VERSION = "Version"
|
LABEL_VERSION = "Version"
|
||||||
LABEL_CHECKING = "Überprüfe"
|
LABEL_CHECKING = "Überprüfe"
|
||||||
TYPE_BASIC = "Basis"
|
|
||||||
TYPE_BASIC_HINT = "Diese Domain ist nicht für die kommerzielle Nutzung (mit zusätzlichen Funktionen) lizenziert."
|
TYPE_BASIC_HINT = "Diese Domain ist nicht für die kommerzielle Nutzung (mit zusätzlichen Funktionen) lizenziert."
|
||||||
TYPE_BASIC_HINT_2 = "Diese Domain kann nicht lizenziert werden."
|
TYPE_BASIC_HINT_2 = "Diese Domain kann nicht lizenziert werden."
|
||||||
HTML_ALERT_TOP_1 = "RainLoop Webmail steht unter folgender Lizenz:"
|
HTML_ALERT_TOP_1 = "RainLoop Webmail steht unter folgender Lizenz:"
|
||||||
HTML_ALERT_TOP_2 = "Sie <b>dürfen</b> es für <b>persönliche</b> Projekte nutzen."
|
HTML_ALERT_TOP_2 = "Sie <b>dürfen</b> es für <b>persönliche</b> Projekte nutzen."
|
||||||
HTML_ALERT_TOP_3 = "Kommerzielle Nutzung (mit zusätzlichen Funktionen) von <b>RainLoop Webmail</b> erfordert eine
|
HTML_ALERT_TOP_3 = "Kommerzielle Nutzung (mit zusätzlichen Funktionen) von <b>RainLoop Webmail</b> erfordert eine
|
||||||
<a href=http://www.rainloop.net/purchase/ target=_blank>Subscription</a>."
|
<a href=http://www.rainloop.net/purchase/ target=_blank>Subscription</a>."
|
||||||
TYPE_PREMIUM = "Premium"
|
|
||||||
TYPE_PREMIUM_LIFETIME = "Lebenszeit"
|
TYPE_PREMIUM_LIFETIME = "Lebenszeit"
|
||||||
TYPE_PREMIUM_HINT = "Diese Domain ist nicht für die kommerzielle Nutzung (mit zusätzlichen Funktionen) lizenziert."
|
TYPE_PREMIUM_HINT = "Diese Domain ist nicht für die kommerzielle Nutzung (mit zusätzlichen Funktionen) lizenziert."
|
||||||
LABEL_SUB_EXPIRES = "Ablauf der Subscription:"
|
LABEL_SUB_EXPIRES = "Ablauf der Subscription:"
|
||||||
|
|
|
||||||
|
|
@ -152,14 +152,12 @@ ALERT_CANNOT_ACCESS_REPOSITORY = "Cannot access the repository at the moment."
|
||||||
LABEL_YOUR_DOMAIN = "Your domain"
|
LABEL_YOUR_DOMAIN = "Your domain"
|
||||||
LABEL_VERSION = "Version"
|
LABEL_VERSION = "Version"
|
||||||
LABEL_CHECKING = "Checking"
|
LABEL_CHECKING = "Checking"
|
||||||
TYPE_BASIC = "Basic"
|
|
||||||
TYPE_BASIC_HINT = "This domain isn't licensed for commercial use (with additional features)."
|
TYPE_BASIC_HINT = "This domain isn't licensed for commercial use (with additional features)."
|
||||||
TYPE_BASIC_HINT_2 = "This domain can't be licensed."
|
TYPE_BASIC_HINT_2 = "This domain can't be licensed."
|
||||||
HTML_ALERT_TOP_1 = "RainLoop Webmail is licensed under"
|
HTML_ALERT_TOP_1 = "RainLoop Webmail is licensed under"
|
||||||
HTML_ALERT_TOP_2 = "You are <b>free</b> to use it for your <b>personal</b> projects."
|
HTML_ALERT_TOP_2 = "You are <b>free</b> to use it for your <b>personal</b> projects."
|
||||||
HTML_ALERT_TOP_3 = "Commercial use (with additional features) of <b>RainLoop Webmail</b> requires getting a
|
HTML_ALERT_TOP_3 = "Commercial use (with additional features) of <b>RainLoop Webmail</b> requires getting a
|
||||||
<a href=http://www.rainloop.net/purchase/ target=_blank>subscription</a>."
|
<a href=http://www.rainloop.net/purchase/ target=_blank>subscription</a>."
|
||||||
TYPE_PREMIUM = "Premium"
|
|
||||||
TYPE_PREMIUM_LIFETIME = "Lifetime"
|
TYPE_PREMIUM_LIFETIME = "Lifetime"
|
||||||
TYPE_PREMIUM_HINT = "This domain isn't licensed for commercial use (with additional features)."
|
TYPE_PREMIUM_HINT = "This domain isn't licensed for commercial use (with additional features)."
|
||||||
LABEL_SUB_EXPIRES = "Subscription expires:"
|
LABEL_SUB_EXPIRES = "Subscription expires:"
|
||||||
|
|
|
||||||
|
|
@ -152,14 +152,12 @@ ALERT_CANNOT_ACCESS_REPOSITORY = "Não foi possível acessar o repositório no m
|
||||||
LABEL_YOUR_DOMAIN = "Seu domínio"
|
LABEL_YOUR_DOMAIN = "Seu domínio"
|
||||||
LABEL_VERSION = "Versão"
|
LABEL_VERSION = "Versão"
|
||||||
LABEL_CHECKING = "Checando"
|
LABEL_CHECKING = "Checando"
|
||||||
TYPE_BASIC = "Básico"
|
|
||||||
TYPE_BASIC_HINT = "Esse domínio não está licenciado para uso comercial (com recursos adicionais)."
|
TYPE_BASIC_HINT = "Esse domínio não está licenciado para uso comercial (com recursos adicionais)."
|
||||||
TYPE_BASIC_HINT_2 = "Esse domínio não pode ser licenciado."
|
TYPE_BASIC_HINT_2 = "Esse domínio não pode ser licenciado."
|
||||||
HTML_ALERT_TOP_1 = "RainLoop Webmail é licenciado sob"
|
HTML_ALERT_TOP_1 = "RainLoop Webmail é licenciado sob"
|
||||||
HTML_ALERT_TOP_2 = "Você é <b>livre</b> para usá-lo em seus projetos <b>pessoais</b>."
|
HTML_ALERT_TOP_2 = "Você é <b>livre</b> para usá-lo em seus projetos <b>pessoais</b>."
|
||||||
HTML_ALERT_TOP_3 = "Uso comercial (com recursos adicionais) do <b>RainLoop Webmail</b>
|
HTML_ALERT_TOP_3 = "Uso comercial (com recursos adicionais) do <b>RainLoop Webmail</b>
|
||||||
requer uma <a href=http://www.rainloop.net/purchase/ target=_blank>assinatura</a>."
|
requer uma <a href=http://www.rainloop.net/purchase/ target=_blank>assinatura</a>."
|
||||||
TYPE_PREMIUM = "Premium"
|
|
||||||
TYPE_PREMIUM_LIFETIME = "Lifetime"
|
TYPE_PREMIUM_LIFETIME = "Lifetime"
|
||||||
TYPE_PREMIUM_HINT = "Esse domínio está licenciado para uso comercial (com recursos adicionais)."
|
TYPE_PREMIUM_HINT = "Esse domínio está licenciado para uso comercial (com recursos adicionais)."
|
||||||
LABEL_SUB_EXPIRES = "A assinatura expira em:"
|
LABEL_SUB_EXPIRES = "A assinatura expira em:"
|
||||||
|
|
|
||||||
|
|
@ -151,14 +151,12 @@ ALERT_CANNOT_ACCESS_REPOSITORY = "Не удается получить дост
|
||||||
LABEL_YOUR_DOMAIN = "Ваш домен"
|
LABEL_YOUR_DOMAIN = "Ваш домен"
|
||||||
LABEL_VERSION = "Версия"
|
LABEL_VERSION = "Версия"
|
||||||
LABEL_CHECKING = "Проверка"
|
LABEL_CHECKING = "Проверка"
|
||||||
TYPE_BASIC = "Базовая"
|
|
||||||
TYPE_BASIC_HINT = "Этот домен не имеет лицензию для коммерческого использования (с дополнительными функциями)."
|
TYPE_BASIC_HINT = "Этот домен не имеет лицензию для коммерческого использования (с дополнительными функциями)."
|
||||||
TYPE_BASIC_HINT_2 = "Этот домен не может быть лицензирован."
|
TYPE_BASIC_HINT_2 = "Этот домен не может быть лицензирован."
|
||||||
HTML_ALERT_TOP_1 = "Код RainLoop Webmail лицензирован под"
|
HTML_ALERT_TOP_1 = "Код RainLoop Webmail лицензирован под"
|
||||||
HTML_ALERT_TOP_2 = "Вы можете <b>свободно</b> использовать его в своих <b>личных</b> проектах."
|
HTML_ALERT_TOP_2 = "Вы можете <b>свободно</b> использовать его в своих <b>личных</b> проектах."
|
||||||
HTML_ALERT_TOP_3 = "Коммерческое использование (с дополнительными функциями) <b>RainLoop Webmail</b> требует получение
|
HTML_ALERT_TOP_3 = "Коммерческое использование (с дополнительными функциями) <b>RainLoop Webmail</b> требует получение
|
||||||
<a href=http://www.rainloop.net/purchase/ target=_blank>лицензии</a>."
|
<a href=http://www.rainloop.net/purchase/ target=_blank>лицензии</a>."
|
||||||
TYPE_PREMIUM = "Премиум"
|
|
||||||
TYPE_PREMIUM_LIFETIME = "бесконечная"
|
TYPE_PREMIUM_LIFETIME = "бесконечная"
|
||||||
TYPE_PREMIUM_HINT = "Этот домен не имеет лицензию для коммерческого использования (с дополнительными функциями)."
|
TYPE_PREMIUM_HINT = "Этот домен не имеет лицензию для коммерческого использования (с дополнительными функциями)."
|
||||||
LABEL_SUB_EXPIRES = "Подписка истекает:"
|
LABEL_SUB_EXPIRES = "Подписка истекает:"
|
||||||
|
|
|
||||||
|
|
@ -4,12 +4,12 @@ rl_signature_replacer = function (editor, sText, sSignature, bHtml, bInsertBefor
|
||||||
if (!bHtml)
|
if (!bHtml)
|
||||||
{
|
{
|
||||||
sText = sText
|
sText = sText
|
||||||
.replace(/\u200C([\s\S]*)\u200C/g, '<x-signature>$1</x-signature>')
|
.replace(/\u200C([\s\S]*)\u200C/g, '\u0002$1\u0002')
|
||||||
.replace(/\u200C/g, '')
|
.replace(/\u200C/g, '')
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
sText = sText.replace(/<x-signature>[\s\S]*<\/x-signature>/gm, '');
|
sText = sText.replace(/\u0002([\s\S]*)\u0002/gm, '');
|
||||||
|
|
||||||
var
|
var
|
||||||
bEmptyText = '' === $.trim(sText),
|
bEmptyText = '' === $.trim(sText),
|
||||||
|
|
@ -23,19 +23,18 @@ rl_signature_replacer = function (editor, sText, sSignature, bHtml, bInsertBefor
|
||||||
|
|
||||||
if (bInsertBefore)
|
if (bInsertBefore)
|
||||||
{
|
{
|
||||||
sText = '<x-signature>' + sSignature + (bEmptyText ? '' : sNewLine) + '</x-signature>' + sText;
|
sText = "\u0002" + sSignature + (bEmptyText ? '' : sNewLine) + "\u0002" + sText;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sText = sText + '<x-signature>' + (bEmptyText ? '' : sNewLine) + sSignature + '</x-signature>';
|
sText = sText + "\u0002" + (bEmptyText ? '' : sNewLine) + sSignature + "\u0002";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!bHtml)
|
if (!bHtml)
|
||||||
{
|
{
|
||||||
sText = sText
|
sText = sText
|
||||||
.replace(/<x-signature>([\s\S]*)<\/x-signature>/gm, '\u200C$1\u200C')
|
.replace(/\u0002([\s\S]*)\u0002/g, '\u200C$1\u200C')
|
||||||
.replace(/<x-signature>/gm, '')
|
.replace(/\u0002/g, '')
|
||||||
.replace(/<\/x-signature>/gm, '')
|
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
13
vendors/ckeditor-plugins/signature/plugin.js
vendored
13
vendors/ckeditor-plugins/signature/plugin.js
vendored
|
|
@ -4,12 +4,12 @@ rl_signature_replacer = function (editor, sText, sSignature, bHtml, bInsertBefor
|
||||||
if (!bHtml)
|
if (!bHtml)
|
||||||
{
|
{
|
||||||
sText = sText
|
sText = sText
|
||||||
.replace(/\u200C([\s\S]*)\u200C/g, '<x-signature>$1</x-signature>')
|
.replace(/\u200C([\s\S]*)\u200C/g, '\u0002$1\u0002')
|
||||||
.replace(/\u200C/g, '')
|
.replace(/\u200C/g, '')
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
sText = sText.replace(/<x-signature>[\s\S]*<\/x-signature>/gm, '');
|
sText = sText.replace(/\u0002([\s\S]*)\u0002/gm, '');
|
||||||
|
|
||||||
var
|
var
|
||||||
bEmptyText = '' === $.trim(sText),
|
bEmptyText = '' === $.trim(sText),
|
||||||
|
|
@ -23,19 +23,18 @@ rl_signature_replacer = function (editor, sText, sSignature, bHtml, bInsertBefor
|
||||||
|
|
||||||
if (bInsertBefore)
|
if (bInsertBefore)
|
||||||
{
|
{
|
||||||
sText = '<x-signature>' + sSignature + (bEmptyText ? '' : sNewLine) + '</x-signature>' + sText;
|
sText = "\u0002" + sSignature + (bEmptyText ? '' : sNewLine) + "\u0002" + sText;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sText = sText + '<x-signature>' + (bEmptyText ? '' : sNewLine) + sSignature + '</x-signature>';
|
sText = sText + "\u0002" + (bEmptyText ? '' : sNewLine) + sSignature + "\u0002";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!bHtml)
|
if (!bHtml)
|
||||||
{
|
{
|
||||||
sText = sText
|
sText = sText
|
||||||
.replace(/<x-signature>([\s\S]*)<\/x-signature>/gm, '\u200C$1\u200C')
|
.replace(/\u0002([\s\S]*)\u0002/g, '\u200C$1\u200C')
|
||||||
.replace(/<x-signature>/gm, '')
|
.replace(/\u0002/g, '')
|
||||||
.replace(/<\/x-signature>/gm, '')
|
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue