mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-07-13 03:27:39 +03:00
Experemental Plain2Html/Html2Plain convertor (+ jQuery linkify)
This commit is contained in:
parent
8cfd52ef12
commit
e4333a6f90
18 changed files with 1211 additions and 604 deletions
|
|
@ -113,7 +113,6 @@ Globals.oHtmlEditorDefaultConfig = {
|
|||
|
||||
'allowedContent': true,
|
||||
'autoParagraph': false,
|
||||
'fillEmptyBlocks': false,
|
||||
|
||||
'enterMode': window.CKEDITOR.ENTER_BR,
|
||||
'shiftEnterMode': window.CKEDITOR.ENTER_BR,
|
||||
|
|
|
|||
|
|
@ -1460,6 +1460,7 @@ Utils.settingsSaveHelperSimpleFunction = function (koTrigger, oContext)
|
|||
return Utils.settingsSaveHelperFunction(null, koTrigger, oContext, 1000);
|
||||
};
|
||||
|
||||
Utils.$div = $('<div></div>');
|
||||
|
||||
/**
|
||||
* @param {string} sHtml
|
||||
|
|
@ -1468,24 +1469,54 @@ Utils.settingsSaveHelperSimpleFunction = function (koTrigger, oContext)
|
|||
Utils.htmlToPlain = function (sHtml)
|
||||
{
|
||||
var
|
||||
iPos = 0,
|
||||
iP1 = 0,
|
||||
iP2 = 0,
|
||||
iP3 = 0,
|
||||
iLimit = 0,
|
||||
|
||||
sText = '',
|
||||
sQuoteChar = '> ',
|
||||
|
||||
convertBlockquote = function () {
|
||||
if (arguments && 1 < arguments.length)
|
||||
splitPlainText = function (sText)
|
||||
{
|
||||
var
|
||||
iLen = 100,
|
||||
sPrefix = '',
|
||||
sSubText = '',
|
||||
sResult = sText,
|
||||
iSpacePos = 0,
|
||||
iNewLinePos = 0
|
||||
;
|
||||
|
||||
while (sResult.length > iLen)
|
||||
{
|
||||
var sText = $.trim(arguments[1])
|
||||
.replace(/__bq__start__(.|[\s\S\n\r]*)__bq__end__/gm, convertBlockquote)
|
||||
;
|
||||
sSubText = sResult.substring(0, iLen);
|
||||
iSpacePos = sSubText.lastIndexOf(' ');
|
||||
iNewLinePos = sSubText.lastIndexOf('\n');
|
||||
|
||||
sText = '\n' + sQuoteChar + $.trim(sText).replace(/\n/gm, '\n' + sQuoteChar) + '\n>\n';
|
||||
if (-1 !== iNewLinePos)
|
||||
{
|
||||
iSpacePos = iNewLinePos;
|
||||
}
|
||||
|
||||
return sText.replace(/\n([> ]+)/gm, function () {
|
||||
return (arguments && 1 < arguments.length) ? '\n' + $.trim(arguments[1].replace(/[\s]/, '')) + ' ' : '';
|
||||
});
|
||||
if (-1 === iSpacePos)
|
||||
{
|
||||
iSpacePos = iLen;
|
||||
}
|
||||
|
||||
sPrefix += sSubText.substring(0, iSpacePos) + '\n';
|
||||
sResult = sResult.substring(iSpacePos + 1);
|
||||
}
|
||||
|
||||
return '';
|
||||
return sPrefix + sResult;
|
||||
},
|
||||
|
||||
convertBlockquote = function (sText) {
|
||||
sText = splitPlainText($.trim(sText));
|
||||
sText = '> ' + sText.replace(/\n/gm, '\n> ');
|
||||
return sText.replace(/(^|\n)([> ]+)/gm, function () {
|
||||
return (arguments && 2 < arguments.length) ? arguments[1] + $.trim(arguments[2].replace(/[\s]/, '')) + ' ' : '';
|
||||
});
|
||||
},
|
||||
|
||||
convertDivs = function () {
|
||||
|
|
@ -1494,40 +1525,23 @@ Utils.htmlToPlain = function (sHtml)
|
|||
var sText = $.trim(arguments[1]);
|
||||
if (0 < sText.length)
|
||||
{
|
||||
sText = sText.replace(/<div[^>]*>(.|[\s\S\r\n]*)<\/div>/gmi, convertDivs);
|
||||
sText = sText.replace(/<div[^>]*>([\s\S\r\n]*)<\/div>/gmi, convertDivs);
|
||||
sText = '\n' + $.trim(sText) + '\n';
|
||||
}
|
||||
|
||||
return sText;
|
||||
}
|
||||
|
||||
return '';
|
||||
},
|
||||
|
||||
fixAttibuteValue = function () {
|
||||
if (arguments && 1 < arguments.length)
|
||||
{
|
||||
return '' + arguments[1] + arguments[2].replace(/</g, '<').replace(/>/g, '>');
|
||||
}
|
||||
|
||||
return '';
|
||||
return (arguments && 1 < arguments.length) ?
|
||||
'' + arguments[1] + arguments[2].replace(/</g, '<').replace(/>/g, '>') : '';
|
||||
},
|
||||
|
||||
convertLinks = function () {
|
||||
if (arguments && 1 < arguments.length)
|
||||
{
|
||||
var
|
||||
sName = $.trim(arguments[1])
|
||||
// sHref = $.trim(arguments[0].replace(/<a [\s\S]*href[ ]?=[ ]?["']?([^"']+).+<\/a>/gmi, '$1'))
|
||||
;
|
||||
|
||||
return sName;
|
||||
// sName = (0 === trim(sName).length) ? '' : sName;
|
||||
// sHref = ('mailto:' === sHref.substr(0, 7)) ? '' : sHref;
|
||||
// sHref = ('http' === sHref.substr(0, 4)) ? sHref : '';
|
||||
// sHref = (sName === sHref) ? '' : sHref;
|
||||
// sHref = (0 < sHref.length) ? ' (' + sHref + ') ' : '';
|
||||
// return (0 < sName.length) ? sName + sHref : sName;
|
||||
}
|
||||
return '';
|
||||
return (arguments && 1 < arguments.length) ? $.trim(arguments[1]) : '';
|
||||
}
|
||||
;
|
||||
|
||||
|
|
@ -1542,25 +1556,67 @@ Utils.htmlToPlain = function (sHtml)
|
|||
.replace(/<\/tr>/gi, '\n')
|
||||
.replace(/<hr[^>]*>/gmi, '\n_______________________________\n\n')
|
||||
.replace(/<img [^>]*>/gmi, '')
|
||||
.replace(/<div[^>]*>(.|[\s\S\r\n]*)<\/div>/gmi, convertDivs)
|
||||
.replace(/<div[^>]*>([\s\S\r\n]*)<\/div>/gmi, convertDivs)
|
||||
.replace(/<blockquote[^>]*>/gmi, '\n__bq__start__\n')
|
||||
.replace(/<\/blockquote>/gmi, '\n__bq__end__\n')
|
||||
.replace(/<a [^>]*>(.|[\s\S\r\n]*)<\/a>/gmi, convertLinks)
|
||||
.replace(/<a [^>]*>([\s\S\r\n]*?)<\/a>/gmi, convertLinks)
|
||||
.replace(/<\/div>/gi, '\n')
|
||||
.replace(/ /gi, ' ')
|
||||
.replace(/<[^>]*>/gm, '')
|
||||
.replace(/>/gi, '>')
|
||||
.replace(/</gi, '<')
|
||||
.replace(/"/gi, '"')
|
||||
.replace(/&/gi, '&')
|
||||
.replace(/&\w{2,6};/gi, '')
|
||||
.replace(/<[^>]*>/gm, '')
|
||||
;
|
||||
|
||||
return sText
|
||||
sText = Utils.$div.html(sText).text();
|
||||
|
||||
sText = sText
|
||||
.replace(/\n[ \t]+/gm, '\n')
|
||||
.replace(/[\n]{3,}/gm, '\n\n')
|
||||
.replace(/__bq__start__(.|[\s\S\r\n]*)__bq__end__/gm, convertBlockquote)
|
||||
.replace(/>/gi, '>')
|
||||
.replace(/</gi, '<')
|
||||
;
|
||||
|
||||
iPos = 0;
|
||||
iLimit = 100;
|
||||
|
||||
while (0 < iLimit)
|
||||
{
|
||||
iLimit--;
|
||||
iP1 = sText.indexOf('__bq__start__', iPos);
|
||||
if (-1 < iP1)
|
||||
{
|
||||
iP2 = sText.indexOf('__bq__start__', iP1 + 5);
|
||||
iP3 = sText.indexOf('__bq__end__', iP1 + 5);
|
||||
|
||||
if ((-1 === iP2 || iP3 < iP2) && iP1 < iP3)
|
||||
{
|
||||
sText = sText.substring(0, iP1) +
|
||||
convertBlockquote(sText.substring(iP1 + 13, iP3)) +
|
||||
sText.substring(iP3 + 11);
|
||||
|
||||
iPos = 0;
|
||||
}
|
||||
else if (-1 < iP2 && iP2 < iP3)
|
||||
{
|
||||
iPos = iP2 - 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
iPos = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
sText = sText
|
||||
.replace(/__bq__start__/gm, '')
|
||||
.replace(/__bq__end__/gm, '')
|
||||
;
|
||||
|
||||
return sText;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -1569,9 +1625,77 @@ Utils.htmlToPlain = function (sHtml)
|
|||
*/
|
||||
Utils.plainToHtml = function (sPlain)
|
||||
{
|
||||
return sPlain.toString()
|
||||
.replace(/&/g, '&').replace(/>/g, '>').replace(/</g, '<')
|
||||
.replace(/\r/g, '').replace(/\n/g, '<br />');
|
||||
sPlain = sPlain.toString().replace(/\r/g, '');
|
||||
|
||||
var
|
||||
bIn = false,
|
||||
bDo = true,
|
||||
bStart = true,
|
||||
aNextText = [],
|
||||
sLine = '',
|
||||
iIndex = 0,
|
||||
aText = sPlain.split("\n")
|
||||
;
|
||||
|
||||
do
|
||||
{
|
||||
bDo = false;
|
||||
aNextText = [];
|
||||
for (iIndex = 0; iIndex < aText.length; iIndex++)
|
||||
{
|
||||
sLine = aText[iIndex];
|
||||
bStart = '>' === sLine.substr(0, 1);
|
||||
if (bStart && !bIn)
|
||||
{
|
||||
bDo = true;
|
||||
bIn = true;
|
||||
aNextText.push('~~~blockquote~~~');
|
||||
aNextText.push(sLine.substr(1));
|
||||
}
|
||||
else if (!bStart && bIn)
|
||||
{
|
||||
bIn = false;
|
||||
aNextText.push('~~~/blockquote~~~');
|
||||
aNextText.push(sLine);
|
||||
}
|
||||
else if (bStart && bIn)
|
||||
{
|
||||
aNextText.push(sLine.substr(1));
|
||||
}
|
||||
else
|
||||
{
|
||||
aNextText.push(sLine);
|
||||
}
|
||||
}
|
||||
|
||||
if (bIn)
|
||||
{
|
||||
bIn = false;
|
||||
aNextText.push('~~~/blockquote~~~');
|
||||
}
|
||||
|
||||
aText = aNextText;
|
||||
}
|
||||
while (bDo);
|
||||
|
||||
sPlain = aText.join("\n");
|
||||
|
||||
sPlain = sPlain
|
||||
.replace(/&/g, '&')
|
||||
.replace(/>/g, '>').replace(/</g, '<')
|
||||
.replace(/~~~blockquote~~~[\s]*/g, '<blockquote>')
|
||||
.replace(/[\s]*~~~\/blockquote~~~/g, '</blockquote>')
|
||||
.replace(/[\-_~]{10,}/g, '<hr />')
|
||||
.replace(/\n/g, '<br />');
|
||||
|
||||
if ($.fn && $.fn.linkify)
|
||||
{
|
||||
sPlain = Utils.$div.html(sPlain)
|
||||
.linkify().find('.linkified').removeClass('linkified').end()
|
||||
.html();
|
||||
}
|
||||
|
||||
return sPlain;
|
||||
};
|
||||
|
||||
Utils.resizeAndCrop = function (sUrl, iValue, fCallback)
|
||||
|
|
|
|||
|
|
@ -90,7 +90,6 @@ function MessageModel()
|
|||
|
||||
this.body = null;
|
||||
this.plainRaw = '';
|
||||
this.isRtl = ko.observable(false);
|
||||
this.isHtml = ko.observable(false);
|
||||
this.hasImages = ko.observable(false);
|
||||
this.attachments = ko.observableArray([]);
|
||||
|
|
@ -268,7 +267,6 @@ MessageModel.prototype.clear = function ()
|
|||
this.attachmentsMainType('');
|
||||
|
||||
this.body = null;
|
||||
this.isRtl(false);
|
||||
this.isHtml(false);
|
||||
this.hasImages(false);
|
||||
this.attachments([]);
|
||||
|
|
@ -861,7 +859,6 @@ MessageModel.prototype.populateByMessageListItem = function (oMessage)
|
|||
this.moment(oMessage.moment());
|
||||
|
||||
this.body = null;
|
||||
// this.isRtl(oMessage.isRtl());
|
||||
// this.isHtml(false);
|
||||
// this.hasImages(false);
|
||||
// this.attachments([]);
|
||||
|
|
@ -1026,7 +1023,6 @@ MessageModel.prototype.storeDataToDom = function ()
|
|||
{
|
||||
if (this.body)
|
||||
{
|
||||
this.body.data('rl-is-rtl', !!this.isRtl());
|
||||
this.body.data('rl-is-html', !!this.isHtml());
|
||||
this.body.data('rl-has-images', !!this.hasImages());
|
||||
|
||||
|
|
@ -1055,7 +1051,6 @@ MessageModel.prototype.fetchDataToDom = function ()
|
|||
{
|
||||
if (this.body)
|
||||
{
|
||||
this.isRtl(!!this.body.data('rl-is-rtl'));
|
||||
this.isHtml(!!this.body.data('rl-is-html'));
|
||||
this.hasImages(!!this.body.data('rl-has-images'));
|
||||
|
||||
|
|
|
|||
|
|
@ -886,7 +886,7 @@ WebMailDataStorage.prototype.setMessage = function (oData, bCached)
|
|||
oBody = null,
|
||||
oTextBody = null,
|
||||
sId = '',
|
||||
sPlain = '',
|
||||
sPlainAsHtml = '',
|
||||
bPgpSigned = false,
|
||||
bPgpEncrypted = false,
|
||||
oMessagesBodiesDom = this.messagesBodiesDom(),
|
||||
|
|
@ -922,17 +922,20 @@ WebMailDataStorage.prototype.setMessage = function (oData, bCached)
|
|||
if (Utils.isNormal(oData.Result.Html) && '' !== oData.Result.Html)
|
||||
{
|
||||
bIsHtml = true;
|
||||
oBody.html(oData.Result.Html.toString()).addClass('b-text-part html');
|
||||
oBody
|
||||
.html(oData.Result.Html.toString())
|
||||
.linkify().find('.linkified').removeClass('linkified').end()
|
||||
.addClass('b-text-part html')
|
||||
;
|
||||
}
|
||||
else if (Utils.isNormal(oData.Result.Plain) && '' !== oData.Result.Plain)
|
||||
{
|
||||
bIsHtml = false;
|
||||
sPlain = oData.Result.Plain.toString();
|
||||
sPlainAsHtml = Utils.plainToHtml(oData.Result.Plain.toString());
|
||||
|
||||
if ((oMessage.isPgpSigned() || oMessage.isPgpEncrypted()) &&
|
||||
RL.data().capaOpenPGP() && Utils.isNormal(oData.Result.PlainRaw))
|
||||
if ((oMessage.isPgpSigned() || oMessage.isPgpEncrypted()) && RL.data().capaOpenPGP())
|
||||
{
|
||||
oMessage.plainRaw = Utils.pString(oData.Result.PlainRaw);
|
||||
oMessage.plainRaw = Utils.pString(oData.Result.Plain);
|
||||
|
||||
bPgpEncrypted = /---BEGIN PGP MESSAGE---/.test(oMessage.plainRaw);
|
||||
if (!bPgpEncrypted)
|
||||
|
|
@ -944,7 +947,7 @@ WebMailDataStorage.prototype.setMessage = function (oData, bCached)
|
|||
$proxyDiv.empty();
|
||||
if (bPgpSigned && oMessage.isPgpSigned())
|
||||
{
|
||||
sPlain =
|
||||
sPlainAsHtml =
|
||||
$proxyDiv.append(
|
||||
$('<pre class="b-plain-openpgp signed"></pre>').text(oMessage.plainRaw)
|
||||
).html()
|
||||
|
|
@ -952,7 +955,7 @@ WebMailDataStorage.prototype.setMessage = function (oData, bCached)
|
|||
}
|
||||
else if (bPgpEncrypted && oMessage.isPgpEncrypted())
|
||||
{
|
||||
sPlain =
|
||||
sPlainAsHtml =
|
||||
$proxyDiv.append(
|
||||
$('<pre class="b-plain-openpgp encrypted"></pre>').text(oMessage.plainRaw)
|
||||
).html()
|
||||
|
|
@ -965,7 +968,11 @@ WebMailDataStorage.prototype.setMessage = function (oData, bCached)
|
|||
oMessage.isPgpEncrypted(bPgpEncrypted);
|
||||
}
|
||||
|
||||
oBody.html(sPlain).addClass('b-text-part plain');
|
||||
oBody
|
||||
.html(sPlainAsHtml)
|
||||
.linkify().find('.linkified').removeClass('linkified').end()
|
||||
.addClass('b-text-part plain')
|
||||
;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -977,12 +984,6 @@ WebMailDataStorage.prototype.setMessage = function (oData, bCached)
|
|||
oMessage.pgpSignedVerifyStatus(Enums.SignedVerifyStatus.None);
|
||||
oMessage.pgpSignedVerifyUser('');
|
||||
|
||||
if (oData.Result.Rtl)
|
||||
{
|
||||
oMessage.isRtl(true);
|
||||
oBody.addClass('rtl-text-part');
|
||||
}
|
||||
|
||||
oMessage.body = oBody;
|
||||
if (oMessage.body)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -316,10 +316,6 @@ html.rl-no-preview-pane {
|
|||
display: none;
|
||||
}
|
||||
|
||||
&.rtl-text-part {
|
||||
direction: rtl;
|
||||
}
|
||||
|
||||
&.html {
|
||||
div[data-x-div-type=body] {
|
||||
margin: 15px;
|
||||
|
|
|
|||
|
|
@ -132,6 +132,7 @@ cfg.paths.js = {
|
|||
'vendors/jquery-lazyload/jquery.lazyload.min.js',
|
||||
'vendors/jquery-nanoscroller/jquery.nanoscroller-0.7.min.js',
|
||||
'vendors/jquery-wakeup/jquery.wakeup.min.js',
|
||||
'vendors/jquery-linkify/jquery.linkify.min.js',
|
||||
'vendors/inputosaurus/inputosaurus.min.js',
|
||||
'vendors/moment/min/moment.min.js ',
|
||||
'vendors/routes/signals.min.js',
|
||||
|
|
|
|||
|
|
@ -7128,6 +7128,7 @@ class Actions
|
|||
{
|
||||
$fAdditionalExternalFilter = function ($sUrl) {
|
||||
return './?/ProxyExternal/'.\RainLoop\Utils::EncodeKeyValues(array(
|
||||
'Rnd' => \md5(\microtime(true)),
|
||||
'Token' => \RainLoop\Utils::GetConnectionToken(),
|
||||
'Url' => $sUrl
|
||||
)).'/';
|
||||
|
|
@ -7135,16 +7136,15 @@ class Actions
|
|||
}
|
||||
|
||||
$mResult['Html'] = 0 === \strlen($sHtml) ? '' : \MailSo\Base\HtmlUtils::ClearHtml(
|
||||
$sHtml, $bHasExternals, $mFoundedCIDs, $aContentLocationUrls, $mFoundedContentLocationUrls, false,
|
||||
!!$this->Config()->Get('labs', 'allow_smart_html_links', true), $fAdditionalExternalFilter);
|
||||
$sHtml, $bHasExternals, $mFoundedCIDs, $aContentLocationUrls, $mFoundedContentLocationUrls, false, false,
|
||||
$fAdditionalExternalFilter);
|
||||
|
||||
$mResult['ExternalProxy'] = null !== $fAdditionalExternalFilter;
|
||||
|
||||
$mResult['PlainRaw'] = $sPlain;
|
||||
$mResult['Plain'] = 0 === \strlen($sPlain) ? '' : \MailSo\Base\HtmlUtils::ConvertPlainToHtml($sPlain);
|
||||
$mResult['Rtl'] = \MailSo\Base\Utils::IsRTL($sPlain);
|
||||
$mResult['Plain'] = $sPlain;
|
||||
// $mResult['Plain'] = 0 === \strlen($sPlain) ? '' : \MailSo\Base\HtmlUtils::ConvertPlainToHtml($sPlain);
|
||||
|
||||
$mResult['TextHash'] = \md5($mResult['Html'].$mResult['Plain'].$mResult['PlainRaw']);
|
||||
$mResult['TextHash'] = \md5($mResult['Html'].$mResult['Plain']);
|
||||
|
||||
$mResult['TextPartIsTrimmed'] = $mResponse->TextPartIsTrimmed();
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
[LOGIN]
|
||||
LABEL_EMAIL = "Login/Email"
|
||||
LABEL_EMAIL = "E-mail"
|
||||
LABEL_LOGIN = "Login"
|
||||
LABEL_PASSWORD = "Hasło"
|
||||
LABEL_SIGN_ME = "Zapamiętaj mnie"
|
||||
LABEL_VERIFICATION_CODE = "Verification Code"
|
||||
LABEL_DONT_ASK_VERIFICATION_CODE = "Don't ask for the code for 2 weeks"
|
||||
LABEL_VERIFICATION_CODE = "Kod weryfikujący"
|
||||
LABEL_DONT_ASK_VERIFICATION_CODE = "Nie pytaj o kod przez 2 tygodnie"
|
||||
BUTTON_SIGN_IN = "Zaloguj"
|
||||
TITLE_SIGN_IN_GOOGLE = "Zaloguj się przez Google"
|
||||
TITLE_SIGN_IN_FACEBOOK = "Zaloguj się przez Facebook"
|
||||
|
|
@ -13,7 +13,7 @@ TITLE_SIGN_IN_TWITTER = "Zaloguj się przez Twitter"
|
|||
[TOP_TOOLBAR]
|
||||
BUTTON_ADD_ACCOUNT = "Dodaj konto"
|
||||
BUTTON_SETTINGS = "Ustawienia"
|
||||
BUTTON_HELP = "Help"
|
||||
BUTTON_HELP = "Pomoc"
|
||||
BUTTON_LOGOUT = "Wyloguj się"
|
||||
|
||||
[SEARCH]
|
||||
|
|
@ -23,10 +23,10 @@ LABEL_ADV_FROM = "Od"
|
|||
LABEL_ADV_TO = "Do"
|
||||
LABEL_ADV_SUBJECT = "Temat"
|
||||
LABEL_ADV_TEXT = "Tekst"
|
||||
LABEL_ADV_HAS_ATTACHMENT = "Has attachment"
|
||||
LABEL_ADV_HAS_ATTACHMENTS = "Ma załączniki"
|
||||
LABEL_ADV_HAS_ATTACHMENT = "Ma załącznik"
|
||||
LABEL_ADV_HAS_ATTACHMENTS = "Z załącznikiem"
|
||||
LABEL_ADV_FLAGGED = "Oznaczona"
|
||||
LABEL_ADV_UNSEEN = "Nieodczytana"
|
||||
LABEL_ADV_UNSEEN = "Nieprzeczytana"
|
||||
LABEL_ADV_DATE = "Data"
|
||||
LABEL_ADV_DATE_ALL = "Wszystkie"
|
||||
LABEL_ADV_DATE_3_DAYS = "Do 3 dni"
|
||||
|
|
@ -40,11 +40,11 @@ BUTTON_ADV_SEARCH = "Szukaj"
|
|||
[MAGNIFIC_POPUP]
|
||||
CLOSE = "Zamknij (Esc)"
|
||||
LOADING = "Ładowanie..."
|
||||
GALLERY_PREV = "Poprzedni"
|
||||
GALLERY_NEXT = "Następny"
|
||||
GALLERY_PREV = "Poprzedni (strzałka w lewo)"
|
||||
GALLERY_NEXT = "Następny (strzałka w prawo)"
|
||||
GALLERY_COUNTER = "%curr% z %total%"
|
||||
IMAGE_ERROR = "<a href=\"%url%\" target=\"_blank\">Obraz</a> nie mógł zostać załadowany."
|
||||
AJAX_ERROR = "<a href=\"%url%\" target=\"_blank\">Zawartość</a> nie mogła zostać załadowana."
|
||||
IMAGE_ERROR = "Nie można było załadować <a href=\"%url%\" target=\"_blank\">obrazu</a>."
|
||||
AJAX_ERROR = "Nie można było załadować <a href=\"%url%\" target=\"_blank\">zawartości</a>."
|
||||
|
||||
[FOLDER_LIST]
|
||||
BUTTON_COMPOSE = "Utwórz"
|
||||
|
|
@ -54,7 +54,7 @@ SENT_NAME = "Wysłane"
|
|||
DRAFTS_NAME = "Wersje robocze"
|
||||
SPAM_NAME = "Spam"
|
||||
TRASH_NAME = "Kosz"
|
||||
ARCHIVE_NAME = "Archive"
|
||||
ARCHIVE_NAME = "Archiwum"
|
||||
|
||||
[QUOTA]
|
||||
TITLE = "Wykorzystane miejsce"
|
||||
|
|
@ -63,9 +63,9 @@ TITLE = "Wykorzystane miejsce"
|
|||
BUTTON_RELOAD = "Odśwież"
|
||||
BUTTON_MOVE_TO = "Przenieś do"
|
||||
BUTTON_DELETE = "Usuń"
|
||||
BUTTON_ARCHIVE = "Archive"
|
||||
BUTTON_ARCHIVE = "Archiwum"
|
||||
BUTTON_SPAM = "Oznacz jako spam"
|
||||
BUTTON_NOT_SPAM = "Not Spam"
|
||||
BUTTON_NOT_SPAM = "Oznacz jako wiarygodna"
|
||||
BUTTON_EMPTY_FOLDER = "Wyczyść folder"
|
||||
BUTTON_MULTY_FORWARD = "Przekaż dalej"
|
||||
BUTTON_DELETE_WITHOUT_MOVE = "Usuń na stałe"
|
||||
|
|
@ -73,51 +73,51 @@ BUTTON_MORE = "Więcej"
|
|||
MENU_SET_SEEN = "Oznacz jako przeczytane"
|
||||
MENU_SET_ALL_SEEN = "Oznacz wszystkie jako przeczytane"
|
||||
MENU_UNSET_SEEN = "Oznacz jako nieprzeczytane"
|
||||
MENU_SET_FLAG = "Etykieta"
|
||||
MENU_UNSET_FLAG = "Usuń Etykietę"
|
||||
MENU_SET_FLAG = "Oznacz jako ważne"
|
||||
MENU_UNSET_FLAG = "Oznacz jako nieważne"
|
||||
MENU_SELECT_ALL = "Wszystkie"
|
||||
MENU_SELECT_NONE = "Żaden"
|
||||
MENU_SELECT_INVERT = "Odwróć"
|
||||
MENU_SELECT_UNSEEN = "Nieprzeczytane"
|
||||
MENU_SELECT_SEEN = "Przeczytane"
|
||||
MENU_SELECT_FLAGGED = "Z Etykietą"
|
||||
MENU_SELECT_UNFLAGGED = "Bez Etykiety"
|
||||
EMPTY_LIST = "Lista pusta"
|
||||
MENU_SELECT_FLAGGED = "Oznaczone jako ważne"
|
||||
MENU_SELECT_UNFLAGGED = "Oznaczone jako nieważne"
|
||||
EMPTY_LIST = "Pusta lista"
|
||||
EMPTY_SEARCH_LIST = "Brak wiadomości spełniających kryteria wyszukiwania"
|
||||
SEARCH_RESULT_FOR = "Wyniki wyszukiwania dla \"%SEARCH%\""
|
||||
SEARCH_RESULT_FOR = "Wyniki wyszukiwania dla: \"%SEARCH%\""
|
||||
LIST_LOADING = "Ładowanie"
|
||||
EMPTY_SUBJECT_TEXT = "(Brak tematu)"
|
||||
PUT_MESSAGE_HERE = "Przeciągnij tutaj wiadomość żeby zobaczyć ją w liście"
|
||||
TODAY_AT = "dzisiaj o %TIME%"
|
||||
YESTERDAY_AT = "wczoraj o %TIME%"
|
||||
PUT_MESSAGE_HERE = "Przeciągnij tutaj wiadomość, żeby zobaczyć ją na liście"
|
||||
TODAY_AT = "dzisiaj o: %TIME%"
|
||||
YESTERDAY_AT = "wczoraj o: %TIME%"
|
||||
SEARCH_PLACEHOLDER = "Szukaj"
|
||||
NEW_MESSAGE_NOTIFICATION = "Masz %COUNT% nowych wiadomości!"
|
||||
QUOTA_SIZE = "Wykorzystano <strong>%SIZE% (%PROC%%)</strong> z przyznanych <strong>%LIMIT%</strong>"
|
||||
NEW_MESSAGE_NOTIFICATION = "Masz: %COUNT% now(-ą,-e,-ych) wiadomości!"
|
||||
QUOTA_SIZE = "Wykorzystano: <strong>%SIZE% (%PROC%%)</strong> z przyznanych: <strong>%LIMIT%</strong>"
|
||||
|
||||
[MESSAGE]
|
||||
BUTTON_EDIT = "Edytuj"
|
||||
BUTTON_BACK = "Wstecz"
|
||||
BUTTON_CLOSE = "Zamknij"
|
||||
BUTTON_DELETE = "Usuń"
|
||||
BUTTON_ARCHIVE = "Archive"
|
||||
BUTTON_ARCHIVE = "Archiwizuj"
|
||||
BUTTON_SPAM = "Oznacz jako spam"
|
||||
BUTTON_NOT_SPAM = "Not Spam"
|
||||
BUTTON_MOVE_TO = "Przenieś Do"
|
||||
BUTTON_NOT_SPAM = "Oznacz jako wiarygodną"
|
||||
BUTTON_MOVE_TO = "Przenieś do"
|
||||
BUTTON_MORE = "Więcej"
|
||||
BUTTON_REPLY = "Odpowiedz"
|
||||
BUTTON_REPLY_ALL = "Odpowiedz wszystkim"
|
||||
BUTTON_FORWARD = "Przekaż dalej"
|
||||
BUTTON_FORWARD_AS_ATTACHMENT = "Przekaż jako załącznik"
|
||||
BUTTON_EDIT_AS_NEW = "Edytuj jako nową wiadomość"
|
||||
BUTTON_SHOW_IMAGES = "Wyświetl obrazy poniżej"
|
||||
BUTTON_SHOW_IMAGES = "Wyświetl obrazy"
|
||||
BUTTON_NOTIFY_READ_RECEIPT = "Nadawca prosi o potwierdzenie odczytania tej wiadomości"
|
||||
BUTTON_IN_NEW_WINDOW = "Wyświetl w osobnym oknie"
|
||||
MENU_HEADERS = "Pokaż nagłówek wiadomości"
|
||||
MENU_HEADERS = "Pokaż nagłówki wiadomości"
|
||||
MENU_VIEW_ORIGINAL = "Pokaż oryginał"
|
||||
MENU_DOWNLOAD_ORIGINAL = "Pobież jako plik .eml"
|
||||
MENU_FILTER_SIMILAR = "Filtruj podobne wiadomości"
|
||||
MENU_PRINT = "Drukuj"
|
||||
EMPTY_SUBJECT_TEXT = "(Brak Tematu)"
|
||||
EMPTY_SUBJECT_TEXT = "(Brak tematu)"
|
||||
LABEL_SUBJECT = "Temat"
|
||||
LABEL_DATE = "Data"
|
||||
LABEL_FROM = "Od"
|
||||
|
|
@ -134,14 +134,14 @@ PRINT_LABEL_DATE = "Data"
|
|||
PRINT_LABEL_SUBJECT = "Temat"
|
||||
PRINT_LABEL_ATTACHMENTS = "Załączniki"
|
||||
MESSAGE_LOADING = "Ładowanie..."
|
||||
MESSAGE_VIEW_DESC = "Wybierz wiadomość z listy w celu jej wyświetlenia."
|
||||
PGP_PASSWORD_INPUT_PLACEHOLDER = "Password"
|
||||
PGP_SIGNED_MESSAGE_DESC = "OpenPGP signed message (click to verify)"
|
||||
PGP_ENCRYPTED_MESSAGE_DESC = "OpenPGP encrypted message (click to decrypt)"
|
||||
MESSAGE_VIEW_DESC = "Wybierz wiadomość z listy w celu jej wyświetlenia"
|
||||
PGP_PASSWORD_INPUT_PLACEHOLDER = "Hasło"
|
||||
PGP_SIGNED_MESSAGE_DESC = "Wiadomość podpisana za pomocą OpenPGP (kliknij, aby zweryfikować)"
|
||||
PGP_ENCRYPTED_MESSAGE_DESC = "Wiadomość zaszyfrowana za pomocą OpenPGP (kliknij, aby odszyfrować)"
|
||||
|
||||
[READ_RECEIPT]
|
||||
SUBJECT = "Potwierdzenie odbioru (wyświetlenia) - %SUBJECT%"
|
||||
BODY = "To jest potwierdzenie odbioru wiadomości wysłanej do %READ-RECEIPT%.
|
||||
BODY = "To jest potwierdzenie odbioru wiadomości wysłanej do: %READ-RECEIPT%.
|
||||
|
||||
Uwaga: Potwierdzenie odbioru wiadomości przez odbiorcę informuję tylko o tym, że wiadomość została wyświetlona na komputerze odbiorcy. Nie ma żadnej gwarancji, że odbiorca odczytał wiadomość i zapoznał się z jej treścią."
|
||||
|
||||
|
|
@ -153,10 +153,10 @@ LEGEND_CONTACTS = "Kontakty"
|
|||
SEARCH_INPUT_PLACEHOLDER = "Szukaj"
|
||||
BUTTON_ADD_CONTACT = "Dodaj Kontakt"
|
||||
BUTTON_CREATE_CONTACT = "Utwórz"
|
||||
BUTTON_UPDATE_CONTACT = "Aktualizuj"
|
||||
BUTTON_IMPORT = "Import (csv, vcf, vCard)"
|
||||
BUTTON_EXPORT_VCARD = "Export (vcf, vCard)"
|
||||
BUTTON_EXPORT_CSV = "Export (csv)"
|
||||
BUTTON_UPDATE_CONTACT = "Zaktualizuj"
|
||||
BUTTON_IMPORT = "Importuj (csv, vcf, vCard)"
|
||||
BUTTON_EXPORT_VCARD = "Eksportuj (vcf, vCard)"
|
||||
BUTTON_EXPORT_CSV = "Eksportuj (csv)"
|
||||
ERROR_IMPORT_FILE = "Błąd importu (nieprawidłowy format pliku)"
|
||||
LIST_LOADING = "Ładowanie"
|
||||
EMPTY_LIST = "Brak kontaktów"
|
||||
|
|
@ -164,37 +164,38 @@ EMPTY_SEARCH = "Nie znaleziono żadnych kontaktów"
|
|||
CLEAR_SEARCH = "Wyczyść wyszukiwanie"
|
||||
CONTACT_VIEW_DESC = "Wybierz kontakt z listy w celu jego wyświetlenia"
|
||||
LABEL_DISPLAY_NAME = "Wyświetlana nazwa"
|
||||
LABEL_EMAIL = "Email"
|
||||
LABEL_EMAIL = "E-mail"
|
||||
LABEL_PHONE = "Telefon"
|
||||
LABEL_WEB = "Web"
|
||||
LABEL_BIRTHDAY = "Birthday"
|
||||
LINK_ADD_EMAIL = "Dodaj adres email"
|
||||
LINK_ADD_PHONE = "Dodaj nr Tel"
|
||||
LINK_BIRTHDAY = "Birthday"
|
||||
LABEL_WEB = "Strona WWW"
|
||||
LABEL_BIRTHDAY = "Urodziny"
|
||||
LABEL_TAGS = "Tagi"
|
||||
LINK_ADD_EMAIL = "Dodaj adres e-mail"
|
||||
LINK_ADD_PHONE = "Dodaj nr telefonu"
|
||||
LINK_BIRTHDAY = "Urodziny"
|
||||
PLACEHOLDER_ENTER_DISPLAY_NAME = "Nazwa wyświetlana"
|
||||
PLACEHOLDER_ENTER_LAST_NAME = "Nazwisko"
|
||||
PLACEHOLDER_ENTER_FIRST_NAME = "Imię"
|
||||
PLACEHOLDER_ENTER_NICK_NAME = "Enter nickname"
|
||||
PLACEHOLDER_ENTER_NICK_NAME = "Pseudonim"
|
||||
LABEL_READ_ONLY = "Tylko do odczytu"
|
||||
LABEL_SHARE = "Udostępnij kontakt"
|
||||
ADD_MENU_LABEL = "Add"
|
||||
ADD_MENU_NICKNAME = "Nickname"
|
||||
ADD_MENU_NOTES = "Notes"
|
||||
ADD_MENU_EMAIL = "Email"
|
||||
ADD_MENU_PHONE = "Phone"
|
||||
ADD_MENU_URL = "URL"
|
||||
ADD_MENU_ADDRESS = "Address"
|
||||
ADD_MENU_BIRTHDAY = "Birthday"
|
||||
ADD_MENU_TAGS = "Tags"
|
||||
ADD_MENU_LABEL = "Dodaj"
|
||||
ADD_MENU_NICKNAME = "Pseudonim"
|
||||
ADD_MENU_NOTES = "Notatki"
|
||||
ADD_MENU_EMAIL = "E-mail"
|
||||
ADD_MENU_PHONE = "Telefon"
|
||||
ADD_MENU_URL = "Adres URL"
|
||||
ADD_MENU_ADDRESS = "Adres"
|
||||
ADD_MENU_BIRTHDAY = "Urodziny"
|
||||
ADD_MENU_TAGS = "Tagi"
|
||||
BUTTON_SHARE_NONE = "Nikomu"
|
||||
BUTTON_SHARE_ALL = "Wszystkim"
|
||||
BUTTON_SYNC = "Synchronization (CardDAV)"
|
||||
BUTTON_SYNC = "Synchronizacja (CardDAV)"
|
||||
|
||||
[COMPOSE]
|
||||
TITLE_FROM = "Od"
|
||||
TITLE_TO = "Do"
|
||||
TITLE_CC = "Kopia do"
|
||||
TITLE_BCC = "Ukryci odbiorcy"
|
||||
TITLE_CC = "DW"
|
||||
TITLE_BCC = "UDW"
|
||||
TITLE_REPLY_TO = "Odpowiedź do"
|
||||
TITLE_SUBJECT = "Temat"
|
||||
LINK_SHOW_INPUTS = "Pokaż wszystkie pola"
|
||||
|
|
@ -202,14 +203,14 @@ BUTTON_SEND = "Wyślij"
|
|||
BUTTON_SAVE = "Zapisz"
|
||||
BUTTON_DELETE = "Usuń"
|
||||
BUTTON_CANCEL = "Anuluj"
|
||||
SAVED_TIME = "Zapisane o %TIME%"
|
||||
SAVED_TIME = "Zapisane o: %TIME%"
|
||||
SAVED_ERROR_ON_SEND = "Wiadomość została wysłana, ale nie została zapisana w folderze: Wysłane"
|
||||
ATTACH_FILES = "Dołącz pliki"
|
||||
ATTACH_DROP_FILES_DESC = "Przeciągnij pliki tutaj"
|
||||
ATTACH_ITEM_CANCEL = "Anuluj"
|
||||
DROPBOX = "Dropbox"
|
||||
GOOGLE_DRIVE = "Google Drive"
|
||||
REPLY_MESSAGE_TITLE = "%DATETIME% %EMAIL% napisał"
|
||||
REPLY_MESSAGE_TITLE = "%DATETIME% - %EMAIL%:"
|
||||
FORWARD_MESSAGE_TOP_TITLE = "-------- Przekierowana wiadomość -------"
|
||||
FORWARD_MESSAGE_TOP_FROM = "Od"
|
||||
FORWARD_MESSAGE_TOP_TO = "Do"
|
||||
|
|
@ -217,82 +218,82 @@ FORWARD_MESSAGE_TOP_CC = "CC"
|
|||
FORWARD_MESSAGE_TOP_SENT = "Wysłany"
|
||||
FORWARD_MESSAGE_TOP_SUBJECT = "Temat"
|
||||
EMPTY_TO_ERROR_DESC = "Wprowadź co najmniej jednego odbiorcę"
|
||||
ATTACHMENTS_UPLOAD_ERROR_DESC = "Not all attachments have been uploaded yet"
|
||||
ATTACHMENTS_UPLOAD_ERROR_DESC = "Nie przesłano jeszcze wszystkich załączników"
|
||||
BUTTON_REQUEST_READ_RECEIPT = "Żądaj potwierdzenia odbioru"
|
||||
|
||||
[POPUPS_ASK]
|
||||
BUTTON_YES = "Tak"
|
||||
BUTTON_NO = "Nie"
|
||||
DESC_WANT_CLOSE_THIS_WINDOW = "Na pewno zamknąć to okno ?"
|
||||
DESC_WANT_DELETE_MESSAGES = "Na pewno usunąć wiadomość(i)?"
|
||||
DESC_WANT_DELETE_MESSAGES = "Na pewno usunąć wiadomość(-i) ?"
|
||||
|
||||
[POPUPS_LANGUAGES]
|
||||
TITLE_LANGUAGES = "Choose language/Wybierz język"
|
||||
TITLE_LANGUAGES = "Wybierz język"
|
||||
|
||||
[POPUPS_ADD_ACCOUNT]
|
||||
TITLE_ADD_ACCOUNT = "Dodać Konto?"
|
||||
TITLE_ADD_ACCOUNT = "Dodawanie konta"
|
||||
BUTTON_ADD_ACCOUNT = "Dodaj"
|
||||
|
||||
[POPUPS_IDENTITIES]
|
||||
TITLE_ADD_IDENTITY = "Dodać tożsamość?"
|
||||
TITLE_UPDATE_IDENTITY = "Uaktualnić tożsamość?"
|
||||
TITLE_ADD_IDENTITY = "Dodawanie tożsamości"
|
||||
TITLE_UPDATE_IDENTITY = "Aktualizacja tożsamości"
|
||||
BUTTON_ADD_IDENTITY = "Dodaj"
|
||||
BUTTON_UPDATE_IDENTITY = "Aktualizuj"
|
||||
LABEL_EMAIL = "Email"
|
||||
LABEL_EMAIL = "E-mail"
|
||||
LABEL_NAME = "Nazwa"
|
||||
LABEL_REPLY_TO = "Odpowiedz do"
|
||||
LABEL_BCC = "Ukryci odbiorcy"
|
||||
|
||||
[POPUPS_CREATE_FOLDER]
|
||||
TITLE_CREATE_FOLDER = "Utworzyć Folder?"
|
||||
TITLE_CREATE_FOLDER = "Tworzenie folderu"
|
||||
SELECT_NO_PARENT = ""
|
||||
LABEL_NAME = "Nazwa Folderu"
|
||||
LABEL_PARENT = "Folder Nadrzędny"
|
||||
LABEL_NAME = "Nazwa folderu"
|
||||
LABEL_PARENT = "Folder nadrzędny"
|
||||
BUTTON_CREATE = "Utwórz"
|
||||
BUTTON_CANCEL = "Anuluj"
|
||||
BUTTON_CLOSE = "Zamknij"
|
||||
TITLE_CREATING_PROCESS = "Trwa dodawanie Folderu"
|
||||
TITLE_CREATING_PROCESS = "Trwa dodawanie folderu"
|
||||
|
||||
[POPUPS_CLEAR_FOLDER]
|
||||
TITLE_CLEAR_FOLDER = "Czy chcesz usunąć wszystkie wiadomości z folderu?"
|
||||
BUTTON_CLEAR = "Usuń"
|
||||
BUTTON_CANCEL = "Anuluj"
|
||||
BUTTON_CLOSE = "Zamknij"
|
||||
DANGER_DESC_WARNING = "Uwaga!"
|
||||
DANGER_DESC_HTML_1 = "Wybrana akcja doprowadzi do usunięcia na stałe wszystkich wiadomości z folderu <strong>%FOLDER%</strong> !"
|
||||
DANGER_DESC_HTML_2 = "Po rozpoczęciu, proces nie może zostać przerwany ani anulowany."
|
||||
TITLE_CLEARING_PROCESS = "Trwa usuwanie wszystkich wiadomości w folderze..."
|
||||
DANGER_DESC_WARNING = "Ostrzeżenie !"
|
||||
DANGER_DESC_HTML_1 = "Wszystkie wiadomości w folderze: <strong>%FOLDER%</strong>, zostaną bezpowrotnie usunięte !"
|
||||
DANGER_DESC_HTML_2 = "Po rozpoczęciu, proces nie może zostać przerwany lub anulowany."
|
||||
TITLE_CLEARING_PROCESS = "Trwa usuwanie wszystkich wiadomości z folderu..."
|
||||
|
||||
[POPUPS_IMPORT_OPEN_PGP_KEY]
|
||||
TITLE_IMPORT_OPEN_PGP_KEY = "Import OpenPGP key"
|
||||
BUTTON_IMPORT_OPEN_PGP_KEY = "Import"
|
||||
TITLE_IMPORT_OPEN_PGP_KEY = "Importowanie klucza OpenPGP"
|
||||
BUTTON_IMPORT_OPEN_PGP_KEY = "Importuj"
|
||||
|
||||
[POPUPS_VIEW_OPEN_PGP_KEY]
|
||||
TITLE_VIEW_OPEN_PGP_KEY = "View OpenPGP key"
|
||||
BUTTON_SELECT = "Select"
|
||||
BUTTON_CLOSE = "Close"
|
||||
TITLE_VIEW_OPEN_PGP_KEY = "Klucz OpenPGP"
|
||||
BUTTON_SELECT = "Zaznacz"
|
||||
BUTTON_CLOSE = "Zamknij"
|
||||
|
||||
[POPUPS_GENERATE_OPEN_PGP_KEYS]
|
||||
TITLE_GENERATE_OPEN_PGP_KEYS = "Generate OpenPGP keys"
|
||||
LABEL_EMAIL = "Email"
|
||||
LABEL_NAME = "Name"
|
||||
LABEL_PASSWORD = "Password"
|
||||
LABEL_KEY_BIT_LENGTH = "Key length"
|
||||
BUTTON_GENERATE_OPEN_PGP_KEYS = "Generate"
|
||||
TITLE_GENERATE_OPEN_PGP_KEYS = "Generowanie klucza OpenPGP"
|
||||
LABEL_EMAIL = "E-mail"
|
||||
LABEL_NAME = "Imię i nazwisko"
|
||||
LABEL_PASSWORD = "Hasło"
|
||||
LABEL_KEY_BIT_LENGTH = "Długość klucza"
|
||||
BUTTON_GENERATE_OPEN_PGP_KEYS = "Generuj"
|
||||
|
||||
[POPUPS_COMPOSE_OPEN_PGP]
|
||||
TITLE_COMPOSE_OPEN_PGP = "OpenPGP Sign/Encrypt"
|
||||
LABEL_SIGN = "Sign"
|
||||
LABEL_ENCRYPT = "Encrypt"
|
||||
LABEL_PASSWORD = "Password"
|
||||
BUTTON_SIGN = "Sign"
|
||||
BUTTON_ENCRYPT = "Encrypt"
|
||||
BUTTON_SIGN_AND_ENCRYPT = "Sign and encrypt"
|
||||
TITLE_COMPOSE_OPEN_PGP = "Podpisz/Zaszyfruj"
|
||||
LABEL_SIGN = "Podpisz"
|
||||
LABEL_ENCRYPT = "Zaszyfruj"
|
||||
LABEL_PASSWORD = "Hasło"
|
||||
BUTTON_SIGN = "Podpisz"
|
||||
BUTTON_ENCRYPT = "Zaszyfruj"
|
||||
BUTTON_SIGN_AND_ENCRYPT = "Podpisz i zaszyfruj"
|
||||
|
||||
[POPUPS_TWO_FACTOR_TEST]
|
||||
TITLE_TEST_CODE = "2-Step verification test"
|
||||
LABEL_CODE = "Code"
|
||||
BUTTON_TEST = "Test"
|
||||
TITLE_TEST_CODE = "Test weryfikacji 2-stopniowej"
|
||||
LABEL_CODE = "Kod"
|
||||
BUTTON_TEST = "Testuj"
|
||||
|
||||
[POPUPS_SYSTEM_FOLDERS]
|
||||
TITLE_SYSTEM_FOLDERS = "Wybierz foldery systemowe"
|
||||
|
|
@ -300,24 +301,24 @@ SELECT_CHOOSE_ONE = "Wybierz"
|
|||
SELECT_UNUSE_NAME = "Nie używaj"
|
||||
LABEL_SENT = "Wysłane"
|
||||
LABEL_DRAFTS = "Wersje robocze"
|
||||
LABEL_SPAM = "SPAM"
|
||||
LABEL_SPAM = "Spam"
|
||||
LABEL_TRASH = "Kosz"
|
||||
LABEL_ARCHIVE = "Archive"
|
||||
LABEL_ARCHIVE = "Archiwum"
|
||||
BUTTON_CANCEL = "Anuluj"
|
||||
BUTTON_CLOSE = "Zamknij"
|
||||
|
||||
NOTIFICATION_SENT = "Nie został wybrany folder \"Wysłane\" do którego przenoszone są wiadomości po wysłaniu.
|
||||
Jeżeli wysłane wiadomości nie mają być przechowywane, proszę o zaznaczenie opcji \"Nie używaj\"."
|
||||
NOTIFICATION_SENT = "Nie został wybrany folder \"Wysłane\", do którego przenoszone są wiadomości po wysłaniu.
|
||||
Jeżeli wysłane wiadomości nie mają być przechowywane, proszę o zaznaczenie opcji: \"Nie używaj\"."
|
||||
|
||||
NOTIFICATION_DRAFTS = "Nie został wybrany folder \"Wersje robocze\" do którego są zapisywane wiadomości w trakcie ich tworzenia."
|
||||
NOTIFICATION_DRAFTS = "Nie został wybrany folder \"Wersje robocze\", do którego są zapisywane wiadomości w trakcie ich tworzenia."
|
||||
|
||||
NOTIFICATION_SPAM = "Nie został wybrany folder \"SPAM\" do którego przenoszone są wiadomości oznaczone jako SPAM.
|
||||
Jeżeli wiadomości oznaczone jako spam mają być usuwane na stałe, proszę o zaznaczenie opcji \"Nie używaj\"."
|
||||
NOTIFICATION_SPAM = "Nie został wybrany folder \"Spam\", do którego przenoszone są wiadomości oznaczone jako SPAM.
|
||||
Jeżeli wiadomości oznaczone jako spam mają być usuwane na stałe, proszę o zaznaczenie opcji: \"Nie używaj\"."
|
||||
|
||||
NOTIFICATION_TRASH = "Nie został wybrany folder \"Kosz\" do którego przenoszone są wszystkie usunięte wiadomości.
|
||||
Jeżeli wiadomości usunięte mają być usuwane na stałe, proszę o zaznaczenie opcji \"Nie używaj\"."
|
||||
NOTIFICATION_TRASH = "Nie został wybrany folder \"Kosz\", do którego przenoszone są wszystkie usunięte wiadomości.
|
||||
Jeżeli wiadomości usunięte mają być usuwane na stałe, proszę o zaznaczenie opcji: \"Nie używaj\"."
|
||||
|
||||
NOTIFICATION_ARCHIVE = "You haven't selected \"Archive\" system folder achived messages are placed to."
|
||||
NOTIFICATION_ARCHIVE = "Nie został wybrany folder \"Archiwum\", zostanie użyty systemowy folder archiwizowanych wiadomości."
|
||||
|
||||
[TITLES]
|
||||
LOADING = "Ładowanie"
|
||||
|
|
@ -330,7 +331,7 @@ COMPOSE = "Utwórz"
|
|||
ERROR_FILE_IS_TOO_BIG = "Plik jest za duży"
|
||||
ERROR_FILE_PARTIALLY_UPLOADED = "Z powodu nieokreślonego błędu, plik nie został przesłany w całości"
|
||||
ERROR_NO_FILE_UPLOADED = "Nie przesłano żadnego pliku"
|
||||
ERROR_MISSING_TEMP_FOLDER = "Brakuje tymczasowego katalogu lub pliku"
|
||||
ERROR_MISSING_TEMP_FOLDER = "Brakuje pliku tymczasowego"
|
||||
ERROR_ON_SAVING_FILE = "Wystąpił nieoczekiwany błąd w trakcie przesyłania pliku"
|
||||
ERROR_FILE_TYPE = "Nieprawidłowy typ pliku"
|
||||
ERROR_UNKNOWN = "Wystąpił nieznany błąd w trakcie przesyłania pliku"
|
||||
|
|
@ -348,41 +349,49 @@ LABEL_FOLDERS_NAME = "Foldery"
|
|||
LABEL_ACCOUNTS_NAME = "Konta"
|
||||
LABEL_IDENTITY_NAME = "Tożsamość"
|
||||
LABEL_IDENTITIES_NAME = "Tożsamości"
|
||||
LABEL_SECURITY_NAME = "Security"
|
||||
LABEL_SOCIAL_NAME = "Social"
|
||||
LABEL_THEMES_NAME = "Wygląd"
|
||||
LABEL_FILTERS_NAME = "Filtry"
|
||||
LABEL_SECURITY_NAME = "Bezpieczeństwo"
|
||||
LABEL_SOCIAL_NAME = "Sieci społecznościowe"
|
||||
LABEL_THEMES_NAME = "Skórki"
|
||||
LABEL_CHANGE_PASSWORD_NAME = "Hasło"
|
||||
LABEL_OPEN_PGP_NAME = "OpenPGP"
|
||||
BUTTON_BACK = "Wstecz"
|
||||
|
||||
[SETTINGS_FILTERS]
|
||||
LEGEND_FILTERS = "Filtry"
|
||||
BUTTON_ADD_FILTER = "Dodaj filter"
|
||||
BUTTON_DELETE_FILTER = "Usuń filter"
|
||||
BUTTON_ADD_CONDITION = "Dodaj warunek"
|
||||
BUTTON_ADD_ACTION = "Dodaj działanie"
|
||||
|
||||
[SETTINGS_IDENTITY]
|
||||
LEGEND_IDENTITY = "Tożsamość"
|
||||
LABEL_DISPLAY_NAME = "Imię"
|
||||
LABEL_DISPLAY_NAME = "Imię i nazwisko"
|
||||
LABEL_REPLY_TO = "Zwrotny adres e-mail"
|
||||
LABEL_SIGNATURE = "Podpis"
|
||||
LABEL_ADD_SIGNATURE_TO_ALL = "Dadawaj podpis do wszystkich wysyłanych wiadomości"
|
||||
|
||||
[SETTINGS_SECURITY]
|
||||
LEGEND_TWO_FACTOR_AUTH = "2-Step Verification (Google Authenticator)"
|
||||
LABEL_ENABLE_TWO_FACTOR = "Enable 2-Step verification"
|
||||
LABEL_TWO_FACTOR_USER = "User"
|
||||
LEGEND_TWO_FACTOR_AUTH = "Weryfikacja 2-stopniowa (Google Authenticator)"
|
||||
LABEL_ENABLE_TWO_FACTOR = "Włącz 2-stopniową weryfikację"
|
||||
LABEL_TWO_FACTOR_USER = "Użytkownik"
|
||||
LABEL_TWO_FACTOR_STATUS = "Status"
|
||||
LABEL_TWO_FACTOR_SECRET = "Secret"
|
||||
LABEL_TWO_FACTOR_BACKUP_CODES = "Backup codes"
|
||||
BUTTON_CREATE = "Create New Secret"
|
||||
BUTTON_CLEAR = "Clear"
|
||||
BUTTON_TEST = "Test"
|
||||
BUTTON_SHOW_SECRET = "Show Secret"
|
||||
BUTTON_HIDE_SECRET = "Hide Secret"
|
||||
TWO_FACTOR_SECRET_CONFIGURED_DESC = "Configured"
|
||||
TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Not configured"
|
||||
TWO_FACTOR_SECRET_DESC = "Import this info into your Google Authenticator client (or other TOTP client) using the provided QR code below or by entering the code manually."
|
||||
TWO_FACTOR_BACKUP_CODES_DESC = "If you can't receive codes via Google Authenticator, you can use backup codes to sign in. After you’ve used a backup code to sign in, it will become inactive."
|
||||
LABEL_TWO_FACTOR_SECRET = "Tajna fraza"
|
||||
LABEL_TWO_FACTOR_BACKUP_CODES = "Kody zapasowe"
|
||||
BUTTON_CREATE = "Utwórz nową frazę"
|
||||
BUTTON_CLEAR = "Wyczyść"
|
||||
BUTTON_TEST = "Testuj"
|
||||
BUTTON_SHOW_SECRET = "Pokaż frazę"
|
||||
BUTTON_HIDE_SECRET = "Ukryj frazę"
|
||||
TWO_FACTOR_SECRET_CONFIGURED_DESC = "Skonfigurowane"
|
||||
TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Nie skonfigurowane"
|
||||
TWO_FACTOR_SECRET_DESC = "Zaimportuj te informacje do swojego klienta usługi Google Authenticator (lub innego klienta TOTP), używając poniższego kodu QR lub wpisując kod ręcznie."
|
||||
TWO_FACTOR_BACKUP_CODES_DESC = "Jeżeli nie możesz otrzymać kodu poprzez apikację Google Authenticator, możesz użyć kodów zapasowych. Po zużyciu kodów, opcja ta będzie nieaktywna."
|
||||
|
||||
[SETTINGS_GENERAL]
|
||||
LEGEND_GENERAL = "Ogólne"
|
||||
LABEL_LANGUAGE = "Język"
|
||||
LABEL_EDITOR = "Domyślny edytor tekstu"
|
||||
LABEL_EDITOR = "Format wiadomości"
|
||||
LABEL_EDITOR_HTML_AS_DEFAULT = "HTML"
|
||||
LABEL_EDITOR_PLAIN_AS_DEFAULT = "Zwykły tekst"
|
||||
LABEL_ANIMATION = "Animacja interfejsu"
|
||||
|
|
@ -391,10 +400,10 @@ LABEL_ANIMATION_NORMAL = "Zwykła"
|
|||
LABEL_ANIMATION_NONE = "Brak"
|
||||
LABEL_VIEW_OPTIONS = "Opcje wyświetlania"
|
||||
LABEL_USE_PREVIEW_PANE = "Wyświetl okno podglądu"
|
||||
LABEL_USE_CHECKBOXES_IN_LIST = "Wyświetl checkboxy w listach"
|
||||
LABEL_USE_CHECKBOXES_IN_LIST = "Wyświetl pola zaznaczenia w listach"
|
||||
LABEL_USE_THREADS = "Używaj wątków"
|
||||
LABEL_REPLY_SAME_FOLDER = "Umieść odpowiedź w folderze wiadomości na którą udzielana jest odpowiedź"
|
||||
LABEL_SHOW_IMAGES = "Zawsze wyświetlaj obrazy w wiadomości"
|
||||
LABEL_REPLY_SAME_FOLDER = "Umieść odpowiedź w folderze wiadomości, na którą udzielana jest odpowiedź"
|
||||
LABEL_SHOW_IMAGES = "Zawsze wyświetlaj obrazy w wiadomościach"
|
||||
LABEL_SHOW_ANIMATION = "Odtwarzaj animacje"
|
||||
LABEL_MESSAGE_PER_PAGE = "wiadomości na stronie"
|
||||
LABEL_CHROME_NOTIFICATION = "Powiadomienia"
|
||||
|
|
@ -404,38 +413,38 @@ LABEL_CHROME_NOTIFICATION_DESC_DENIED = "(Zablokowane przez przeglądarkę)"
|
|||
[SETTINGS_CONTACTS]
|
||||
LEGEND_CONTACTS = "Kontakty"
|
||||
LABEL_CONTACTS_AUTOSAVE = "Automatycznie dodaj nieznanych nadawców i odbiorców do książki adresowej"
|
||||
LEGEND_CONTACTS_SYNC = "Remote Synchronization (CardDAV)"
|
||||
LABEL_CONTACTS_SYNC_ENABLE = "Enable remote synchronization"
|
||||
LABEL_CONTACTS_SYNC_SERVER = "Server"
|
||||
LABEL_CONTACTS_SYNC_AB_URL = "Addressbook URL"
|
||||
LABEL_CONTACTS_SYNC_USER = "User"
|
||||
LABEL_CONTACTS_SYNC_PASSWORD = "Password"
|
||||
LEGEND_CONTACTS_SYNC = "Zdalna synchronizacja (CardDAV)"
|
||||
LABEL_CONTACTS_SYNC_ENABLE = "Włącz zdalną synchronizację"
|
||||
LABEL_CONTACTS_SYNC_SERVER = "Serwer"
|
||||
LABEL_CONTACTS_SYNC_AB_URL = "Adres URL"
|
||||
LABEL_CONTACTS_SYNC_USER = "Użytkownik"
|
||||
LABEL_CONTACTS_SYNC_PASSWORD = "Hasło"
|
||||
|
||||
[SETTINGS_THEMES]
|
||||
LEGEND_THEMES = "Wygląd"
|
||||
LEGEND_THEMES = "Skórki"
|
||||
LEGEND_THEMES_CUSTOM = "Konfiguracja indywidualnego wyglądu"
|
||||
LABEL_CUSTOM_TYPE = "Typ"
|
||||
LABEL_CUSTOM_TYPE_LIGHT = "Jasny"
|
||||
LABEL_CUSTOM_TYPE_DARK = "Ciemny"
|
||||
LABEL_CUSTOM_BACKGROUND_IMAGE = "Tło"
|
||||
BUTTON_UPLOAD_BACKGROUND_IMAGE = "Prześlij własne tło (.JPG, .PNG)"
|
||||
ERROR_FILE_IS_TOO_BIG = "Plik jest za duży"
|
||||
ERROR_FILE_IS_TOO_BIG = "Plik jest za duży (1MB+)"
|
||||
ERROR_FILE_TYPE_ERROR = "Nieprawidłowy format pliku (obsługiwane są wyłącznie pliki .JPG i .PNG)"
|
||||
ERROR_UNKNOWN = "Wystąpił nieznany błąd w trakcie przesyłania"
|
||||
|
||||
[SETTINGS_SOCIAL]
|
||||
LEGEND_GOOGLE = "Google Account"
|
||||
BUTTON_GOOGLE_CONNECT = "Połącz z Google"
|
||||
BUTTON_GOOGLE_DISCONNECT = "Odłącz z Google"
|
||||
MAIN_GOOGLE_DESC = "Po zezwoleniu na logowanie przez Google, możesz zalogować się na to konto używając guzika Google w panelu logowania."
|
||||
BUTTON_GOOGLE_DISCONNECT = "Odłącz"
|
||||
MAIN_GOOGLE_DESC = "Po zezwoleniu na logowanie przez Google, możesz zalogować się na to konto używając przycisku: \"Google\" w panelu logowania."
|
||||
LEGEND_FACEBOOK = "Facebook"
|
||||
BUTTON_FACEBOOK_CONNECT = "Połącz z Facebook"
|
||||
BUTTON_FACEBOOK_DISCONNECT = "Odłącz z Facebook"
|
||||
MAIN_FACEBOOK_DESC = "Po zezwoleniu na logowanie przez Facebook, możesz zalogować się na to konto używając guzika Facebook w panelu logowania."
|
||||
BUTTON_FACEBOOK_DISCONNECT = "Odłącz"
|
||||
MAIN_FACEBOOK_DESC = "Po zezwoleniu na logowanie przez Facebook, możesz zalogować się na to konto używając przycisku: \"Facebook\" w panelu logowania."
|
||||
LEGEND_TWITTER = "Twitter"
|
||||
BUTTON_TWITTER_CONNECT = "Połącz z Twitter"
|
||||
BUTTON_TWITTER_DISCONNECT = "Odłącz z Twitter"
|
||||
MAIN_TWITTER_DESC = "Po zezwoleniu na logowanie przez Twitter, możesz zalogować się na to konto używając guzika Twitter w panelu logowania."
|
||||
BUTTON_TWITTER_DISCONNECT = "Odłącz"
|
||||
MAIN_TWITTER_DESC = "Po zezwoleniu na logowanie przez Twitter, możesz zalogować się na to konto używając przycisku: \"Twitter\" w panelu logowania."
|
||||
|
||||
[SETTINGS_FOLDERS]
|
||||
LEGEND_FOLDERS = "Lista Folderów"
|
||||
|
|
@ -459,16 +468,16 @@ DELETING_ASK = "Czy na pewno usunąć?"
|
|||
|
||||
[SETTINGS_IDENTITIES]
|
||||
LEGEND_IDENTITY = "Tożsamość"
|
||||
LEGEND_IDENTITIES = "Dodatkowe Tożsamości"
|
||||
LABEL_DEFAULT = "Default"
|
||||
LEGEND_IDENTITIES = "Dodatkowe tożsamości"
|
||||
LABEL_DEFAULT = "Domyślna"
|
||||
LABEL_DISPLAY_NAME = "Nazwa"
|
||||
LABEL_REPLY_TO = "Odp. do"
|
||||
LABEL_REPLY_TO = "Odpowiedź do"
|
||||
LABEL_SIGNATURE = "Podpis"
|
||||
LABEL_ADD_SIGNATURE_TO_ALL = "Dodaj podpis do wszystkich wysyłanych wiadomości"
|
||||
BUTTON_ADD_IDENTITY = "Dodaj Tożsamość"
|
||||
BUTTON_ADD_IDENTITY = "Dodaj tożsamość"
|
||||
BUTTON_DELETE = "Usuń"
|
||||
LOADING_PROCESS = "Trwa aktualizowanie listy tożsamości"
|
||||
DELETING_ASK = "Jesteś pewny(a)?"
|
||||
DELETING_ASK = "Czy na pewno chcesz usunąć ?"
|
||||
|
||||
[SETTINGS_CHANGE_PASSWORD]
|
||||
LEGEND_CHANGE_PASSWORD = "Zmiana hasła"
|
||||
|
|
@ -476,67 +485,67 @@ LABEL_CURRENT_PASSWORD = "Aktualne hasło"
|
|||
LABEL_NEW_PASSWORD = "Nowe hasło"
|
||||
LABEL_REPEAT_PASSWORD = "Powtórz nowe hasło"
|
||||
BUTTON_UPDATE_PASSWORD = "Zmień hasło na nowe"
|
||||
ERROR_PASSWORD_MISMATCH = "Passwords do not match, please try again"
|
||||
ERROR_PASSWORD_MISMATCH = "Wpisane hasła nie pasują do siebie, proszę spróbować ponownie"
|
||||
|
||||
[SETTINGS_OPEN_PGP]
|
||||
LEGEND_OPEN_PGP = "OpenPGP"
|
||||
BUTTON_ADD_OPEN_PGP_KEY = "Import OpenPGP Key"
|
||||
BUTTON_GENERATE_OPEN_PGP_KEYS = "Generate OpenPGP Keys"
|
||||
TITLE_PRIVATE = "Private"
|
||||
TITLE_PUBLIC = "Public"
|
||||
DELETING_ASK = "Are you sure?"
|
||||
BUTTON_ADD_OPEN_PGP_KEY = "Importuj klucz OpenPGP"
|
||||
BUTTON_GENERATE_OPEN_PGP_KEYS = "Generuj klucz OpenPGP"
|
||||
TITLE_PRIVATE = "Prywatny"
|
||||
TITLE_PUBLIC = "Publiczny"
|
||||
DELETING_ASK = "Czy na pewno chcesz usunąć ?"
|
||||
|
||||
[SHORTCUTS_HELP]
|
||||
LEGEND_SHORTCUTS_HELP = "Keyboard shortcuts help"
|
||||
TAB_MAILBOX = "Mailbox"
|
||||
TAB_MESSAGE_LIST = "Message list"
|
||||
TAB_MESSAGE_VIEW = "Message view"
|
||||
TAB_COMPOSE = "Compose"
|
||||
LABEL_OPEN_USER_DROPDOWN = "Open user dropdown"
|
||||
LABEL_REPLY = "Reply"
|
||||
LABEL_REPLY_ALL = "Reply All"
|
||||
LABEL_FORWARD = "Forward"
|
||||
LABEL_FORWARD_MULTIPLY = "Forward (multiply)"
|
||||
LABEL_HELP = "Help"
|
||||
LEGEND_SHORTCUTS_HELP = "Skróty klawiaturowe"
|
||||
TAB_MAILBOX = "Skrzynka pocztowa"
|
||||
TAB_MESSAGE_LIST = "Lista wiadomości"
|
||||
TAB_MESSAGE_VIEW = "Widok wiadomości"
|
||||
TAB_COMPOSE = "Tworzenie wiadomości"
|
||||
LABEL_OPEN_USER_DROPDOWN = "Otwórz podręczne menu użytkownika"
|
||||
LABEL_REPLY = "Odpowiedz"
|
||||
LABEL_REPLY_ALL = "Odpowiedz wszystkim"
|
||||
LABEL_FORWARD = "Przekaż"
|
||||
LABEL_FORWARD_MULTIPLY = "Przekaż (wielokrotnie)"
|
||||
LABEL_HELP = "Pomoc"
|
||||
|
||||
LABEL_CHECK_ALL = "Check All messages"
|
||||
LABEL_ARCHIVE = "Archive"
|
||||
LABEL_DELETE = "Delete"
|
||||
LABEL_MOVE = "Move"
|
||||
LABEL_READ = "Read selected messages"
|
||||
LABEL_UNREAD = "Unread selected messages"
|
||||
LABEL_IMPORTANT = "Important, star/flag selected messages"
|
||||
LABEL_SEARCH = "Search"
|
||||
LABEL_CANCEL_SEARCH = "Cancel search"
|
||||
LABEL_FULLSCREEN_ENTER = "Fullscreen (Preview pane layout)"
|
||||
LABEL_VIEW_MESSAGE_ENTER = "View message (No preview pane layout)"
|
||||
LABEL_SWITCH_TO_MESSAGE = "Switch focus to selected message"
|
||||
LABEL_SWITCH_TO_FOLDER_LIST = "Switch focus to folder list"
|
||||
LABEL_CHECK_ALL = "Sprawdź wszystkie wiadomości"
|
||||
LABEL_ARCHIVE = "Archiwum"
|
||||
LABEL_DELETE = "Usuń"
|
||||
LABEL_MOVE = "Przenieś"
|
||||
LABEL_READ = "Oznacz zaznaczone wiadomości, jako przeczytane"
|
||||
LABEL_UNREAD = "Oznacz zaznaczone wiadomości, jako nieprzeczytane"
|
||||
LABEL_IMPORTANT = "Oznacz zaznaczone wiadomości, jako ważne"
|
||||
LABEL_SEARCH = "Szukaj"
|
||||
LABEL_CANCEL_SEARCH = "Anuluj szukanie"
|
||||
LABEL_FULLSCREEN_ENTER = "Pełny ekran (aktywny podgląd wiadomości)"
|
||||
LABEL_VIEW_MESSAGE_ENTER = "Pokaż wiadomość (nieaktywny podgląd wiadomości)"
|
||||
LABEL_SWITCH_TO_MESSAGE = "Wybrana wiadomość na pierwszym planie"
|
||||
LABEL_SWITCH_TO_FOLDER_LIST = "Lista folderów na pierwszym planie"
|
||||
|
||||
LABEL_FULLSCREEN_TOGGLE = "Toggle fullscreen mode"
|
||||
LABEL_BLOCKQUOTES_TOGGLE = "Toggle message blockquotes"
|
||||
LABEL_PRINT = "Print"
|
||||
LABEL_EXIT_FULLSCREEN = "Exit fullscreen mode"
|
||||
LABEL_CLOSE_MESSAGE = "Close message (No preview pane layout)"
|
||||
LABEL_SWITCH_TO_LIST = "Switch focus back to message list"
|
||||
LABEL_FULLSCREEN_TOGGLE = "Tryb pełnoekranowy"
|
||||
LABEL_BLOCKQUOTES_TOGGLE = "Cytowanie wiadomości"
|
||||
LABEL_PRINT = "Drukuj"
|
||||
LABEL_EXIT_FULLSCREEN = "Opuść tryb pełnoekranowy"
|
||||
LABEL_CLOSE_MESSAGE = "Zamknij wiadomość (nieaktywny podgląd wiadomości)"
|
||||
LABEL_SWITCH_TO_LIST = "Powróc do widoku listy wiadomości"
|
||||
|
||||
LABEL_OPEN_COMPOSE_POPUP = "Open compose popup"
|
||||
LABEL_OPEN_IDENTITIES_DROPDOWN = "Open identities dropdown"
|
||||
LABEL_SAVE_MESSAGE = "Save message"
|
||||
LABEL_SEND_MESSAGE = "Send message"
|
||||
LABEL_CLOSE_COMPOSE = "Close compose"
|
||||
LABEL_OPEN_COMPOSE_POPUP = "Otwórz okno tworzenia wiadomości"
|
||||
LABEL_OPEN_IDENTITIES_DROPDOWN = "Otwórz menu wyboru tożsamości"
|
||||
LABEL_SAVE_MESSAGE = "Zapisz wiadomość"
|
||||
LABEL_SEND_MESSAGE = "Wyślij wiadomość"
|
||||
LABEL_CLOSE_COMPOSE = "Zamknij okno tworzenia wiadomości"
|
||||
|
||||
[PGP_NOTIFICATIONS]
|
||||
NO_PUBLIC_KEYS_FOUND = "No public keys found"
|
||||
NO_PUBLIC_KEYS_FOUND_FOR = "No public keys found for "%EMAIL%" email"
|
||||
NO_PRIVATE_KEY_FOUND = "No private key found"
|
||||
NO_PRIVATE_KEY_FOUND_FOR = "No private key found for "%EMAIL%" email"
|
||||
UNVERIFIRED_SIGNATURE = "Unverified signature"
|
||||
DECRYPTION_ERROR = "OpenPGP decryption error"
|
||||
GOOD_SIGNATURE = "Good signature from %USER%"
|
||||
PGP_ERROR = "OpenPGP error: %ERROR%"
|
||||
SPECIFY_FROM_EMAIL = "Please specify FROM email address"
|
||||
SPECIFY_AT_LEAST_ONE_RECIPIENT = "Please specify at least one recipient"
|
||||
NO_PUBLIC_KEYS_FOUND = "Nie znaleziono kluczy publicznych"
|
||||
NO_PUBLIC_KEYS_FOUND_FOR = "Nie znaleziono kluczy publicznych dla adresu: "%EMAIL%""
|
||||
NO_PRIVATE_KEY_FOUND = "Nie znaleziono kluczy prywatnych"
|
||||
NO_PRIVATE_KEY_FOUND_FOR = "Nie znaleziono kluczy prywatnych dla adresu: "%EMAIL%""
|
||||
UNVERIFIRED_SIGNATURE = "Niezweryfikowana sygnatura"
|
||||
DECRYPTION_ERROR = "Błąd deszyfrowania OpenPGP"
|
||||
GOOD_SIGNATURE = "Wiadomość podpisana przez: %USER%"
|
||||
PGP_ERROR = "Błąd OpenPGP: %ERROR%"
|
||||
SPECIFY_FROM_EMAIL = "Proszę podać adres e-mail w polu: OD"
|
||||
SPECIFY_AT_LEAST_ONE_RECIPIENT = "Proszę podać przynajmniej jednego odbiorcę"
|
||||
|
||||
[NOTIFICATIONS]
|
||||
INVALID_TOKEN = "Nieprawidłowy token"
|
||||
|
|
@ -544,19 +553,19 @@ AUTH_ERROR = "Błąd autoryzacji"
|
|||
ACCESS_ERROR = "Błąd dostępu"
|
||||
CONNECTION_ERROR = "Błąd połączenia z serwerem"
|
||||
CAPTCHA_ERROR = "Nieprawidłowy kod CAPTCHA"
|
||||
SOCIAL_FACEBOOK_LOGIN_ACCESS_DISABLE = "To społecznościowe ID na Facebooku nie jest powiązane z żadnym kontem pocztowym. W związku z tym zaloguj się używając danych swojego konta e-mail i skonfiguruj tę opcję w Ustawieniach > Social Media"
|
||||
SOCIAL_TWITTER_LOGIN_ACCESS_DISABLE = "To społecznościowe ID na Twitter nie jest powiązane z żadnym kontem pocztowym. W związku z tym zaloguj się używając danych swojego konta e-mail i skonfiguruj tę opcję w Ustawieniach > Social Media"
|
||||
SOCIAL_GOOGLE_LOGIN_ACCESS_DISABLE = "To społecznościowe ID (Google Acounts) nie jest powiązane z żadnym kontem pocztowym. W związku z tym zaloguj się używając danych swojego konta e-mail i skonfiguruj tę opcję w Ustawieniach > Social Media"
|
||||
DOMAIN_NOT_ALLOWED = "Domena nie dozwolona"
|
||||
SOCIAL_FACEBOOK_LOGIN_ACCESS_DISABLE = "To społecznościowe ID (Facebooku), nie jest powiązane z żadnym kontem pocztowym. Zaloguj się używając danych swojego konta e-mail i skonfiguruj tę opcję w: Ustawienia > Sieci społecznościowe"
|
||||
SOCIAL_TWITTER_LOGIN_ACCESS_DISABLE = "To społecznościowe ID (Twitter), nie jest powiązane z żadnym kontem pocztowym. Zaloguj się używając danych swojego konta e-mail i skonfiguruj tę opcję w: Ustawienia > Sieci społecznościowe"
|
||||
SOCIAL_GOOGLE_LOGIN_ACCESS_DISABLE = "To społecznościowe ID (Konto Google), nie jest powiązane z żadnym kontem pocztowym. Zaloguj się używając danych swojego konta e-mail i skonfiguruj tę opcję w: Ustawienia > Sieci społecznościowe"
|
||||
DOMAIN_NOT_ALLOWED = "Domena niedozwolona"
|
||||
ACCOUNT_NOT_ALLOWED = "Konto nie jest dozwolone"
|
||||
ACCOUNT_TWO_FACTOR_AUTH_REQUIRED = "Two factor verification required"
|
||||
ACCOUNT_TWO_FACTOR_AUTH_ERROR = "Two factor verification error"
|
||||
COULD_NOT_SAVE_NEW_PASSWORD = "Could not save new password"
|
||||
CURRENT_PASSWORD_INCORRECT = "Current password incorrect"
|
||||
NEW_PASSWORD_SHORT = "Password is too short"
|
||||
NEW_PASSWORD_WEAK = "Password is too easy"
|
||||
NEW_PASSWORD_FORBIDDENT = "Password contains forbidden characters"
|
||||
CONTACTS_SYNC_ERROR = "Contacts synchronization error"
|
||||
ACCOUNT_TWO_FACTOR_AUTH_REQUIRED = "Wymagana 2-stopniowa weryfikacja"
|
||||
ACCOUNT_TWO_FACTOR_AUTH_ERROR = "Błąd 2-stopniowej weryfikacji"
|
||||
COULD_NOT_SAVE_NEW_PASSWORD = "Nie można było zapisać nowego hasła"
|
||||
CURRENT_PASSWORD_INCORRECT = "Obecne hasło jest niepoprawne"
|
||||
NEW_PASSWORD_SHORT = "Hasło jest za krótkie"
|
||||
NEW_PASSWORD_WEAK = "Hasło jest zbyt łatwe"
|
||||
NEW_PASSWORD_FORBIDDENT = "Hasło zawiera zakazane znaki"
|
||||
CONTACTS_SYNC_ERROR = "Błąd synchronizacji kontaktów"
|
||||
CANT_GET_MESSAGE_LIST = "Nie jest możliwe pobranie listy wiadomości"
|
||||
CANT_GET_MESSAGE = "Nie można pobrać wiadomości"
|
||||
CANT_DELETE_MESSAGE = "Nie można usunąć wiadomości"
|
||||
|
|
@ -583,22 +592,22 @@ LICENSING_DOMAIN_BANNED = "Subskrypcja dla tej domeny została zablokowana"
|
|||
DEMO_SEND_MESSAGE_ERROR = "Ze względów bezpieczeństwa, to konto testowe nie ma możliwości przesyłania, wiadomości na zewnętrzne adresy e-mail."
|
||||
ACCOUNT_ALREADY_EXISTS = "Konto o takiej nazwie już istnieje"
|
||||
MAIL_SERVER_ERROR = "Wystąpił błąd w trakcie połączenia z serwerem poczty"
|
||||
INVALID_INPUT_ARGUMENT = "Invalid input argument"
|
||||
INVALID_INPUT_ARGUMENT = "Nieprawidłowy argument"
|
||||
UNKNOWN_ERROR = "Nieznany błąd"
|
||||
|
||||
[STATIC]
|
||||
BACK_LINK = "Przeładuj"
|
||||
DOMAIN_LIST_DESC = "Lista domen do których webmail ma dostęp."
|
||||
PHP_EXSTENSIONS_ERROR_DESC = "Wymagane rozszerzenia PHP są niedostępne!"
|
||||
PHP_VERSION_ERROR_DESC = "Aktualnie zainstalowana wersja PHP (%VERSION%) jest niższa niż minimalnie wymagana 5.3.0!"
|
||||
BACK_LINK = "Odśwież"
|
||||
DOMAIN_LIST_DESC = "Lista domen do których webmail ma dostęp"
|
||||
PHP_EXSTENSIONS_ERROR_DESC = "Wymagane rozszerzenia PHP są niedostępne !"
|
||||
PHP_VERSION_ERROR_DESC = "Aktualnie zainstalowana wersja PHP: (%VERSION%), jest niższa niż minimalnie wymagana 5.3.0 !"
|
||||
|
||||
NO_SCRIPT_TITLE = "Ta aplikacja wymaga JavaScript."
|
||||
NO_SCRIPT_DESC = "Twoja przeglądarka nie obsługuje JavaScript.
|
||||
NO_SCRIPT_TITLE = "Ta aplikacja wymaga JavaScript"
|
||||
NO_SCRIPT_DESC = "Twoja przeglądarka nie obsługuje JavaScript
|
||||
Proszę o umożliwienie obsługi JavaScript w przeglądarce, oraz ponowne załadowanie tej strony."
|
||||
|
||||
NO_COOKIE_TITLE = "Ta aplikacja wymaga plików Cookies"
|
||||
NO_COOKIE_DESC = "Obsługa Cookies jest wyłączona w twojej przeglądarce.
|
||||
Proszę o umożliwienie obsługi plików Cookie w przeglądarce, oraz ponowne uruchomienie tej strony."
|
||||
NO_COOKIE_DESC = "Obsługa Cookies jest wyłączona w twojej przeglądarce
|
||||
Proszę o umożliwienie obsługi plików Cookie w przeglądarce oraz ponowne uruchomienie tej strony."
|
||||
|
||||
BAD_BROWSER_TITLE = "Twoja przeglądarka jest przestarzała!"
|
||||
BAD_BROWSER_DESC = "W celu wykorzystania wszystkich funkcji tej aplikacji,
|
||||
|
|
|
|||
|
|
@ -5,8 +5,6 @@
|
|||
|
||||
$div = $('<div></div>'),
|
||||
|
||||
trim = $.trim,
|
||||
|
||||
/**
|
||||
* @param {string} sHtml
|
||||
* @return {string}
|
||||
|
|
@ -14,35 +12,64 @@
|
|||
htmlToPlain = function (sHtml)
|
||||
{
|
||||
var
|
||||
iPos = 0,
|
||||
iP1 = 0,
|
||||
iP2 = 0,
|
||||
iP3 = 0,
|
||||
iLimit = 0,
|
||||
|
||||
sText = '',
|
||||
sQuoteChar = '> ',
|
||||
|
||||
convertBlockquote = function () {
|
||||
if (arguments && 1 < arguments.length)
|
||||
splitPlainText = function (sText)
|
||||
{
|
||||
var
|
||||
iLen = 100,
|
||||
sPrefix = '',
|
||||
sSubText = '',
|
||||
sResult = sText,
|
||||
iSpacePos = 0,
|
||||
iNewLinePos = 0
|
||||
;
|
||||
|
||||
while (sResult.length > iLen)
|
||||
{
|
||||
var
|
||||
sText = trim(arguments[1])
|
||||
.replace(/__bq__start__([\s\S\n\r]*)__bq__end__/gm, convertBlockquote)
|
||||
;
|
||||
sSubText = sResult.substring(0, iLen);
|
||||
iSpacePos = sSubText.lastIndexOf(' ');
|
||||
iNewLinePos = sSubText.lastIndexOf('\n');
|
||||
|
||||
sText = '\n' + sQuoteChar + trim(sText).replace(/\n/gm, '\n' + sQuoteChar) + '\n>\n';
|
||||
if (-1 !== iNewLinePos)
|
||||
{
|
||||
iSpacePos = iNewLinePos;
|
||||
}
|
||||
|
||||
return sText.replace(/\n([> ]+)/gm, function () {
|
||||
return (arguments && 1 < arguments.length) ? '\n' + trim(arguments[1].replace(/[\s]/, '')) + ' ' : '';
|
||||
});
|
||||
if (-1 === iSpacePos)
|
||||
{
|
||||
iSpacePos = iLen;
|
||||
}
|
||||
|
||||
sPrefix += sSubText.substring(0, iSpacePos) + '\n';
|
||||
sResult = sResult.substring(iSpacePos + 1);
|
||||
}
|
||||
|
||||
return '';
|
||||
return sPrefix + sResult;
|
||||
},
|
||||
|
||||
convertBlockquote = function (sText) {
|
||||
sText = splitPlainText($.trim(sText));
|
||||
sText = '> ' + sText.replace(/\n/gm, '\n> ');
|
||||
return sText.replace(/(^|\n)([> ]+)/gm, function () {
|
||||
return (arguments && 2 < arguments.length) ? arguments[1] + $.trim(arguments[2].replace(/[\s]/, '')) + ' ' : '';
|
||||
});
|
||||
},
|
||||
|
||||
convertDivs = function () {
|
||||
if (arguments && 1 < arguments.length)
|
||||
{
|
||||
var sText = trim(arguments[1]);
|
||||
var sText = $.trim(arguments[1]);
|
||||
if (0 < sText.length)
|
||||
{
|
||||
sText = sText.replace(/<div[^>]*>([\s\S\r\n]*)<\/div>/gmi, convertDivs);
|
||||
sText = '\n' + trim(sText) + '\n';
|
||||
sText = '\n' + $.trim(sText) + '\n';
|
||||
}
|
||||
|
||||
return sText;
|
||||
|
|
@ -57,7 +84,7 @@
|
|||
},
|
||||
|
||||
convertLinks = function () {
|
||||
return (arguments && 1 < arguments.length) ? trim(arguments[1]) : '';
|
||||
return (arguments && 1 < arguments.length) ? $.trim(arguments[1]) : '';
|
||||
}
|
||||
;
|
||||
|
||||
|
|
@ -76,22 +103,63 @@
|
|||
.replace(/<blockquote[^>]*>/gmi, '\n__bq__start__\n')
|
||||
.replace(/<\/blockquote>/gmi, '\n__bq__end__\n')
|
||||
.replace(/<a [^>]*>([\s\S\r\n]*?)<\/a>/gmi, convertLinks)
|
||||
.replace(/<\/div>/gi, '\n')
|
||||
.replace(/ /gi, ' ')
|
||||
.replace(/>/gi, '>')
|
||||
.replace(/</gi, '<')
|
||||
.replace(/"/gi, '"')
|
||||
.replace(/&/gi, '&')
|
||||
.replace(/<[^>]*>/gm, '')
|
||||
;
|
||||
|
||||
sText = $div.html(sText).text();
|
||||
|
||||
sText = sText
|
||||
.replace(/\n[ \t]+/gm, '\n')
|
||||
.replace(/[\n]{3,}/gm, '\n\n')
|
||||
.replace(/__bq__start__([\s\S\r\n]*)__bq__end__/gm, convertBlockquote)
|
||||
.replace(/>/gi, '>')
|
||||
.replace(/</gi, '<')
|
||||
;
|
||||
|
||||
iPos = 0;
|
||||
iLimit = 100;
|
||||
|
||||
while (0 < iLimit)
|
||||
{
|
||||
iLimit--;
|
||||
iP1 = sText.indexOf('__bq__start__', iPos);
|
||||
if (-1 < iP1)
|
||||
{
|
||||
iP2 = sText.indexOf('__bq__start__', iP1 + 5);
|
||||
iP3 = sText.indexOf('__bq__end__', iP1 + 5);
|
||||
|
||||
if ((-1 === iP2 || iP3 < iP2) && iP1 < iP3)
|
||||
{
|
||||
sText = sText.substring(0, iP1) +
|
||||
convertBlockquote(sText.substring(iP1 + 13, iP3)) +
|
||||
sText.substring(iP3 + 11);
|
||||
|
||||
iPos = 0;
|
||||
}
|
||||
else if (-1 < iP2 && iP2 < iP3)
|
||||
{
|
||||
iPos = iP2 - 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
iPos = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
sText = sText
|
||||
.replace(/__bq__start__/gm, '')
|
||||
.replace(/__bq__end__/gm, '')
|
||||
;
|
||||
|
||||
return $div.html(sText).text();
|
||||
return sText;
|
||||
},
|
||||
|
||||
/**
|
||||
|
|
@ -100,9 +168,77 @@
|
|||
*/
|
||||
plainToHtml = function (sPlain)
|
||||
{
|
||||
return sPlain.toString()
|
||||
.replace(/&/g, '&').replace(/>/g, '>').replace(/</g, '<')
|
||||
.replace(/\r/g, '').replace(/\n/g, '<br />');
|
||||
sPlain = sPlain.toString().replace(/\r/g, '');
|
||||
|
||||
var
|
||||
bIn = false,
|
||||
bDo = true,
|
||||
bStart = true,
|
||||
aNextText = [],
|
||||
sLine = '',
|
||||
iIndex = 0,
|
||||
aText = sPlain.split("\n")
|
||||
;
|
||||
|
||||
do
|
||||
{
|
||||
bDo = false;
|
||||
aNextText = [];
|
||||
for (iIndex = 0; iIndex < aText.length; iIndex++)
|
||||
{
|
||||
sLine = aText[iIndex];
|
||||
bStart = '>' === sLine.substr(0, 1);
|
||||
if (bStart && !bIn)
|
||||
{
|
||||
bDo = true;
|
||||
bIn = true;
|
||||
aNextText.push('~~~blockquote~~~');
|
||||
aNextText.push(sLine.substr(1));
|
||||
}
|
||||
else if (!bStart && bIn)
|
||||
{
|
||||
bIn = false;
|
||||
aNextText.push('~~~/blockquote~~~');
|
||||
aNextText.push(sLine);
|
||||
}
|
||||
else if (bStart && bIn)
|
||||
{
|
||||
aNextText.push(sLine.substr(1));
|
||||
}
|
||||
else
|
||||
{
|
||||
aNextText.push(sLine);
|
||||
}
|
||||
}
|
||||
|
||||
if (bIn)
|
||||
{
|
||||
bIn = false;
|
||||
aNextText.push('~~~/blockquote~~~');
|
||||
}
|
||||
|
||||
aText = aNextText;
|
||||
}
|
||||
while (bDo);
|
||||
|
||||
sPlain = aText.join("\n");
|
||||
|
||||
sPlain = sPlain
|
||||
.replace(/&/g, '&')
|
||||
.replace(/>/g, '>').replace(/</g, '<')
|
||||
.replace(/~~~blockquote~~~[\s]*/g, '<blockquote>')
|
||||
.replace(/[\s]*~~~\/blockquote~~~/g, '</blockquote>')
|
||||
.replace(/[\-_~]{10,}/g, '<hr />')
|
||||
.replace(/\n/g, '<br />');
|
||||
|
||||
if ($.fn && $.fn.linkify)
|
||||
{
|
||||
sPlain = $div.html(sPlain)
|
||||
.linkify().find('.linkified').removeClass('linkified').end()
|
||||
.html();
|
||||
}
|
||||
|
||||
return sPlain;
|
||||
}
|
||||
;
|
||||
|
||||
|
|
|
|||
|
|
@ -8345,9 +8345,6 @@ html.rl-no-preview-pane .messageView.message-selected {
|
|||
.messageView .b-content .messageItem .bodyText .b-text-part .rl-bq-switcher.hidden-bq {
|
||||
display: none;
|
||||
}
|
||||
.messageView .b-content .messageItem .bodyText .b-text-part.rtl-text-part {
|
||||
direction: rtl;
|
||||
}
|
||||
.messageView .b-content .messageItem .bodyText .b-text-part.html div[data-x-div-type=body] {
|
||||
margin: 15px;
|
||||
}
|
||||
|
|
|
|||
2
rainloop/v/0.0.0/static/css/app.min.css
vendored
2
rainloop/v/0.0.0/static/css/app.min.css
vendored
File diff suppressed because one or more lines are too long
|
|
@ -203,7 +203,6 @@ Globals.oHtmlEditorDefaultConfig = {
|
|||
|
||||
'allowedContent': true,
|
||||
'autoParagraph': false,
|
||||
'fillEmptyBlocks': false,
|
||||
|
||||
'enterMode': window.CKEDITOR.ENTER_BR,
|
||||
'shiftEnterMode': window.CKEDITOR.ENTER_BR,
|
||||
|
|
@ -2258,6 +2257,7 @@ Utils.settingsSaveHelperSimpleFunction = function (koTrigger, oContext)
|
|||
return Utils.settingsSaveHelperFunction(null, koTrigger, oContext, 1000);
|
||||
};
|
||||
|
||||
Utils.$div = $('<div></div>');
|
||||
|
||||
/**
|
||||
* @param {string} sHtml
|
||||
|
|
@ -2266,24 +2266,54 @@ Utils.settingsSaveHelperSimpleFunction = function (koTrigger, oContext)
|
|||
Utils.htmlToPlain = function (sHtml)
|
||||
{
|
||||
var
|
||||
iPos = 0,
|
||||
iP1 = 0,
|
||||
iP2 = 0,
|
||||
iP3 = 0,
|
||||
iLimit = 0,
|
||||
|
||||
sText = '',
|
||||
sQuoteChar = '> ',
|
||||
|
||||
convertBlockquote = function () {
|
||||
if (arguments && 1 < arguments.length)
|
||||
splitPlainText = function (sText)
|
||||
{
|
||||
var
|
||||
iLen = 100,
|
||||
sPrefix = '',
|
||||
sSubText = '',
|
||||
sResult = sText,
|
||||
iSpacePos = 0,
|
||||
iNewLinePos = 0
|
||||
;
|
||||
|
||||
while (sResult.length > iLen)
|
||||
{
|
||||
var sText = $.trim(arguments[1])
|
||||
.replace(/__bq__start__(.|[\s\S\n\r]*)__bq__end__/gm, convertBlockquote)
|
||||
;
|
||||
sSubText = sResult.substring(0, iLen);
|
||||
iSpacePos = sSubText.lastIndexOf(' ');
|
||||
iNewLinePos = sSubText.lastIndexOf('\n');
|
||||
|
||||
sText = '\n' + sQuoteChar + $.trim(sText).replace(/\n/gm, '\n' + sQuoteChar) + '\n>\n';
|
||||
if (-1 !== iNewLinePos)
|
||||
{
|
||||
iSpacePos = iNewLinePos;
|
||||
}
|
||||
|
||||
return sText.replace(/\n([> ]+)/gm, function () {
|
||||
return (arguments && 1 < arguments.length) ? '\n' + $.trim(arguments[1].replace(/[\s]/, '')) + ' ' : '';
|
||||
});
|
||||
if (-1 === iSpacePos)
|
||||
{
|
||||
iSpacePos = iLen;
|
||||
}
|
||||
|
||||
sPrefix += sSubText.substring(0, iSpacePos) + '\n';
|
||||
sResult = sResult.substring(iSpacePos + 1);
|
||||
}
|
||||
|
||||
return '';
|
||||
return sPrefix + sResult;
|
||||
},
|
||||
|
||||
convertBlockquote = function (sText) {
|
||||
sText = splitPlainText($.trim(sText));
|
||||
sText = '> ' + sText.replace(/\n/gm, '\n> ');
|
||||
return sText.replace(/(^|\n)([> ]+)/gm, function () {
|
||||
return (arguments && 2 < arguments.length) ? arguments[1] + $.trim(arguments[2].replace(/[\s]/, '')) + ' ' : '';
|
||||
});
|
||||
},
|
||||
|
||||
convertDivs = function () {
|
||||
|
|
@ -2292,40 +2322,23 @@ Utils.htmlToPlain = function (sHtml)
|
|||
var sText = $.trim(arguments[1]);
|
||||
if (0 < sText.length)
|
||||
{
|
||||
sText = sText.replace(/<div[^>]*>(.|[\s\S\r\n]*)<\/div>/gmi, convertDivs);
|
||||
sText = sText.replace(/<div[^>]*>([\s\S\r\n]*)<\/div>/gmi, convertDivs);
|
||||
sText = '\n' + $.trim(sText) + '\n';
|
||||
}
|
||||
|
||||
return sText;
|
||||
}
|
||||
|
||||
return '';
|
||||
},
|
||||
|
||||
fixAttibuteValue = function () {
|
||||
if (arguments && 1 < arguments.length)
|
||||
{
|
||||
return '' + arguments[1] + arguments[2].replace(/</g, '<').replace(/>/g, '>');
|
||||
}
|
||||
|
||||
return '';
|
||||
return (arguments && 1 < arguments.length) ?
|
||||
'' + arguments[1] + arguments[2].replace(/</g, '<').replace(/>/g, '>') : '';
|
||||
},
|
||||
|
||||
convertLinks = function () {
|
||||
if (arguments && 1 < arguments.length)
|
||||
{
|
||||
var
|
||||
sName = $.trim(arguments[1])
|
||||
// sHref = $.trim(arguments[0].replace(/<a [\s\S]*href[ ]?=[ ]?["']?([^"']+).+<\/a>/gmi, '$1'))
|
||||
;
|
||||
|
||||
return sName;
|
||||
// sName = (0 === trim(sName).length) ? '' : sName;
|
||||
// sHref = ('mailto:' === sHref.substr(0, 7)) ? '' : sHref;
|
||||
// sHref = ('http' === sHref.substr(0, 4)) ? sHref : '';
|
||||
// sHref = (sName === sHref) ? '' : sHref;
|
||||
// sHref = (0 < sHref.length) ? ' (' + sHref + ') ' : '';
|
||||
// return (0 < sName.length) ? sName + sHref : sName;
|
||||
}
|
||||
return '';
|
||||
return (arguments && 1 < arguments.length) ? $.trim(arguments[1]) : '';
|
||||
}
|
||||
;
|
||||
|
||||
|
|
@ -2340,25 +2353,67 @@ Utils.htmlToPlain = function (sHtml)
|
|||
.replace(/<\/tr>/gi, '\n')
|
||||
.replace(/<hr[^>]*>/gmi, '\n_______________________________\n\n')
|
||||
.replace(/<img [^>]*>/gmi, '')
|
||||
.replace(/<div[^>]*>(.|[\s\S\r\n]*)<\/div>/gmi, convertDivs)
|
||||
.replace(/<div[^>]*>([\s\S\r\n]*)<\/div>/gmi, convertDivs)
|
||||
.replace(/<blockquote[^>]*>/gmi, '\n__bq__start__\n')
|
||||
.replace(/<\/blockquote>/gmi, '\n__bq__end__\n')
|
||||
.replace(/<a [^>]*>(.|[\s\S\r\n]*)<\/a>/gmi, convertLinks)
|
||||
.replace(/<a [^>]*>([\s\S\r\n]*?)<\/a>/gmi, convertLinks)
|
||||
.replace(/<\/div>/gi, '\n')
|
||||
.replace(/ /gi, ' ')
|
||||
.replace(/<[^>]*>/gm, '')
|
||||
.replace(/>/gi, '>')
|
||||
.replace(/</gi, '<')
|
||||
.replace(/"/gi, '"')
|
||||
.replace(/&/gi, '&')
|
||||
.replace(/&\w{2,6};/gi, '')
|
||||
.replace(/<[^>]*>/gm, '')
|
||||
;
|
||||
|
||||
return sText
|
||||
sText = Utils.$div.html(sText).text();
|
||||
|
||||
sText = sText
|
||||
.replace(/\n[ \t]+/gm, '\n')
|
||||
.replace(/[\n]{3,}/gm, '\n\n')
|
||||
.replace(/__bq__start__(.|[\s\S\r\n]*)__bq__end__/gm, convertBlockquote)
|
||||
.replace(/>/gi, '>')
|
||||
.replace(/</gi, '<')
|
||||
;
|
||||
|
||||
iPos = 0;
|
||||
iLimit = 100;
|
||||
|
||||
while (0 < iLimit)
|
||||
{
|
||||
iLimit--;
|
||||
iP1 = sText.indexOf('__bq__start__', iPos);
|
||||
if (-1 < iP1)
|
||||
{
|
||||
iP2 = sText.indexOf('__bq__start__', iP1 + 5);
|
||||
iP3 = sText.indexOf('__bq__end__', iP1 + 5);
|
||||
|
||||
if ((-1 === iP2 || iP3 < iP2) && iP1 < iP3)
|
||||
{
|
||||
sText = sText.substring(0, iP1) +
|
||||
convertBlockquote(sText.substring(iP1 + 13, iP3)) +
|
||||
sText.substring(iP3 + 11);
|
||||
|
||||
iPos = 0;
|
||||
}
|
||||
else if (-1 < iP2 && iP2 < iP3)
|
||||
{
|
||||
iPos = iP2 - 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
iPos = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
sText = sText
|
||||
.replace(/__bq__start__/gm, '')
|
||||
.replace(/__bq__end__/gm, '')
|
||||
;
|
||||
|
||||
return sText;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -2367,9 +2422,77 @@ Utils.htmlToPlain = function (sHtml)
|
|||
*/
|
||||
Utils.plainToHtml = function (sPlain)
|
||||
{
|
||||
return sPlain.toString()
|
||||
.replace(/&/g, '&').replace(/>/g, '>').replace(/</g, '<')
|
||||
.replace(/\r/g, '').replace(/\n/g, '<br />');
|
||||
sPlain = sPlain.toString().replace(/\r/g, '');
|
||||
|
||||
var
|
||||
bIn = false,
|
||||
bDo = true,
|
||||
bStart = true,
|
||||
aNextText = [],
|
||||
sLine = '',
|
||||
iIndex = 0,
|
||||
aText = sPlain.split("\n")
|
||||
;
|
||||
|
||||
do
|
||||
{
|
||||
bDo = false;
|
||||
aNextText = [];
|
||||
for (iIndex = 0; iIndex < aText.length; iIndex++)
|
||||
{
|
||||
sLine = aText[iIndex];
|
||||
bStart = '>' === sLine.substr(0, 1);
|
||||
if (bStart && !bIn)
|
||||
{
|
||||
bDo = true;
|
||||
bIn = true;
|
||||
aNextText.push('~~~blockquote~~~');
|
||||
aNextText.push(sLine.substr(1));
|
||||
}
|
||||
else if (!bStart && bIn)
|
||||
{
|
||||
bIn = false;
|
||||
aNextText.push('~~~/blockquote~~~');
|
||||
aNextText.push(sLine);
|
||||
}
|
||||
else if (bStart && bIn)
|
||||
{
|
||||
aNextText.push(sLine.substr(1));
|
||||
}
|
||||
else
|
||||
{
|
||||
aNextText.push(sLine);
|
||||
}
|
||||
}
|
||||
|
||||
if (bIn)
|
||||
{
|
||||
bIn = false;
|
||||
aNextText.push('~~~/blockquote~~~');
|
||||
}
|
||||
|
||||
aText = aNextText;
|
||||
}
|
||||
while (bDo);
|
||||
|
||||
sPlain = aText.join("\n");
|
||||
|
||||
sPlain = sPlain
|
||||
.replace(/&/g, '&')
|
||||
.replace(/>/g, '>').replace(/</g, '<')
|
||||
.replace(/~~~blockquote~~~[\s]*/g, '<blockquote>')
|
||||
.replace(/[\s]*~~~\/blockquote~~~/g, '</blockquote>')
|
||||
.replace(/[\-_~]{10,}/g, '<hr />')
|
||||
.replace(/\n/g, '<br />');
|
||||
|
||||
if ($.fn && $.fn.linkify)
|
||||
{
|
||||
sPlain = Utils.$div.html(sPlain)
|
||||
.linkify().find('.linkified').removeClass('linkified').end()
|
||||
.html();
|
||||
}
|
||||
|
||||
return sPlain;
|
||||
};
|
||||
|
||||
Utils.resizeAndCrop = function (sUrl, iValue, fCallback)
|
||||
|
|
|
|||
8
rainloop/v/0.0.0/static/js/admin.min.js
vendored
8
rainloop/v/0.0.0/static/js/admin.min.js
vendored
File diff suppressed because one or more lines are too long
|
|
@ -206,7 +206,6 @@ Globals.oHtmlEditorDefaultConfig = {
|
|||
|
||||
'allowedContent': true,
|
||||
'autoParagraph': false,
|
||||
'fillEmptyBlocks': false,
|
||||
|
||||
'enterMode': window.CKEDITOR.ENTER_BR,
|
||||
'shiftEnterMode': window.CKEDITOR.ENTER_BR,
|
||||
|
|
@ -2261,6 +2260,7 @@ Utils.settingsSaveHelperSimpleFunction = function (koTrigger, oContext)
|
|||
return Utils.settingsSaveHelperFunction(null, koTrigger, oContext, 1000);
|
||||
};
|
||||
|
||||
Utils.$div = $('<div></div>');
|
||||
|
||||
/**
|
||||
* @param {string} sHtml
|
||||
|
|
@ -2269,24 +2269,54 @@ Utils.settingsSaveHelperSimpleFunction = function (koTrigger, oContext)
|
|||
Utils.htmlToPlain = function (sHtml)
|
||||
{
|
||||
var
|
||||
iPos = 0,
|
||||
iP1 = 0,
|
||||
iP2 = 0,
|
||||
iP3 = 0,
|
||||
iLimit = 0,
|
||||
|
||||
sText = '',
|
||||
sQuoteChar = '> ',
|
||||
|
||||
convertBlockquote = function () {
|
||||
if (arguments && 1 < arguments.length)
|
||||
splitPlainText = function (sText)
|
||||
{
|
||||
var
|
||||
iLen = 100,
|
||||
sPrefix = '',
|
||||
sSubText = '',
|
||||
sResult = sText,
|
||||
iSpacePos = 0,
|
||||
iNewLinePos = 0
|
||||
;
|
||||
|
||||
while (sResult.length > iLen)
|
||||
{
|
||||
var sText = $.trim(arguments[1])
|
||||
.replace(/__bq__start__(.|[\s\S\n\r]*)__bq__end__/gm, convertBlockquote)
|
||||
;
|
||||
sSubText = sResult.substring(0, iLen);
|
||||
iSpacePos = sSubText.lastIndexOf(' ');
|
||||
iNewLinePos = sSubText.lastIndexOf('\n');
|
||||
|
||||
sText = '\n' + sQuoteChar + $.trim(sText).replace(/\n/gm, '\n' + sQuoteChar) + '\n>\n';
|
||||
if (-1 !== iNewLinePos)
|
||||
{
|
||||
iSpacePos = iNewLinePos;
|
||||
}
|
||||
|
||||
return sText.replace(/\n([> ]+)/gm, function () {
|
||||
return (arguments && 1 < arguments.length) ? '\n' + $.trim(arguments[1].replace(/[\s]/, '')) + ' ' : '';
|
||||
});
|
||||
if (-1 === iSpacePos)
|
||||
{
|
||||
iSpacePos = iLen;
|
||||
}
|
||||
|
||||
sPrefix += sSubText.substring(0, iSpacePos) + '\n';
|
||||
sResult = sResult.substring(iSpacePos + 1);
|
||||
}
|
||||
|
||||
return '';
|
||||
return sPrefix + sResult;
|
||||
},
|
||||
|
||||
convertBlockquote = function (sText) {
|
||||
sText = splitPlainText($.trim(sText));
|
||||
sText = '> ' + sText.replace(/\n/gm, '\n> ');
|
||||
return sText.replace(/(^|\n)([> ]+)/gm, function () {
|
||||
return (arguments && 2 < arguments.length) ? arguments[1] + $.trim(arguments[2].replace(/[\s]/, '')) + ' ' : '';
|
||||
});
|
||||
},
|
||||
|
||||
convertDivs = function () {
|
||||
|
|
@ -2295,40 +2325,23 @@ Utils.htmlToPlain = function (sHtml)
|
|||
var sText = $.trim(arguments[1]);
|
||||
if (0 < sText.length)
|
||||
{
|
||||
sText = sText.replace(/<div[^>]*>(.|[\s\S\r\n]*)<\/div>/gmi, convertDivs);
|
||||
sText = sText.replace(/<div[^>]*>([\s\S\r\n]*)<\/div>/gmi, convertDivs);
|
||||
sText = '\n' + $.trim(sText) + '\n';
|
||||
}
|
||||
|
||||
return sText;
|
||||
}
|
||||
|
||||
return '';
|
||||
},
|
||||
|
||||
fixAttibuteValue = function () {
|
||||
if (arguments && 1 < arguments.length)
|
||||
{
|
||||
return '' + arguments[1] + arguments[2].replace(/</g, '<').replace(/>/g, '>');
|
||||
}
|
||||
|
||||
return '';
|
||||
return (arguments && 1 < arguments.length) ?
|
||||
'' + arguments[1] + arguments[2].replace(/</g, '<').replace(/>/g, '>') : '';
|
||||
},
|
||||
|
||||
convertLinks = function () {
|
||||
if (arguments && 1 < arguments.length)
|
||||
{
|
||||
var
|
||||
sName = $.trim(arguments[1])
|
||||
// sHref = $.trim(arguments[0].replace(/<a [\s\S]*href[ ]?=[ ]?["']?([^"']+).+<\/a>/gmi, '$1'))
|
||||
;
|
||||
|
||||
return sName;
|
||||
// sName = (0 === trim(sName).length) ? '' : sName;
|
||||
// sHref = ('mailto:' === sHref.substr(0, 7)) ? '' : sHref;
|
||||
// sHref = ('http' === sHref.substr(0, 4)) ? sHref : '';
|
||||
// sHref = (sName === sHref) ? '' : sHref;
|
||||
// sHref = (0 < sHref.length) ? ' (' + sHref + ') ' : '';
|
||||
// return (0 < sName.length) ? sName + sHref : sName;
|
||||
}
|
||||
return '';
|
||||
return (arguments && 1 < arguments.length) ? $.trim(arguments[1]) : '';
|
||||
}
|
||||
;
|
||||
|
||||
|
|
@ -2343,25 +2356,67 @@ Utils.htmlToPlain = function (sHtml)
|
|||
.replace(/<\/tr>/gi, '\n')
|
||||
.replace(/<hr[^>]*>/gmi, '\n_______________________________\n\n')
|
||||
.replace(/<img [^>]*>/gmi, '')
|
||||
.replace(/<div[^>]*>(.|[\s\S\r\n]*)<\/div>/gmi, convertDivs)
|
||||
.replace(/<div[^>]*>([\s\S\r\n]*)<\/div>/gmi, convertDivs)
|
||||
.replace(/<blockquote[^>]*>/gmi, '\n__bq__start__\n')
|
||||
.replace(/<\/blockquote>/gmi, '\n__bq__end__\n')
|
||||
.replace(/<a [^>]*>(.|[\s\S\r\n]*)<\/a>/gmi, convertLinks)
|
||||
.replace(/<a [^>]*>([\s\S\r\n]*?)<\/a>/gmi, convertLinks)
|
||||
.replace(/<\/div>/gi, '\n')
|
||||
.replace(/ /gi, ' ')
|
||||
.replace(/<[^>]*>/gm, '')
|
||||
.replace(/>/gi, '>')
|
||||
.replace(/</gi, '<')
|
||||
.replace(/"/gi, '"')
|
||||
.replace(/&/gi, '&')
|
||||
.replace(/&\w{2,6};/gi, '')
|
||||
.replace(/<[^>]*>/gm, '')
|
||||
;
|
||||
|
||||
return sText
|
||||
sText = Utils.$div.html(sText).text();
|
||||
|
||||
sText = sText
|
||||
.replace(/\n[ \t]+/gm, '\n')
|
||||
.replace(/[\n]{3,}/gm, '\n\n')
|
||||
.replace(/__bq__start__(.|[\s\S\r\n]*)__bq__end__/gm, convertBlockquote)
|
||||
.replace(/>/gi, '>')
|
||||
.replace(/</gi, '<')
|
||||
;
|
||||
|
||||
iPos = 0;
|
||||
iLimit = 100;
|
||||
|
||||
while (0 < iLimit)
|
||||
{
|
||||
iLimit--;
|
||||
iP1 = sText.indexOf('__bq__start__', iPos);
|
||||
if (-1 < iP1)
|
||||
{
|
||||
iP2 = sText.indexOf('__bq__start__', iP1 + 5);
|
||||
iP3 = sText.indexOf('__bq__end__', iP1 + 5);
|
||||
|
||||
if ((-1 === iP2 || iP3 < iP2) && iP1 < iP3)
|
||||
{
|
||||
sText = sText.substring(0, iP1) +
|
||||
convertBlockquote(sText.substring(iP1 + 13, iP3)) +
|
||||
sText.substring(iP3 + 11);
|
||||
|
||||
iPos = 0;
|
||||
}
|
||||
else if (-1 < iP2 && iP2 < iP3)
|
||||
{
|
||||
iPos = iP2 - 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
iPos = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
sText = sText
|
||||
.replace(/__bq__start__/gm, '')
|
||||
.replace(/__bq__end__/gm, '')
|
||||
;
|
||||
|
||||
return sText;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -2370,9 +2425,77 @@ Utils.htmlToPlain = function (sHtml)
|
|||
*/
|
||||
Utils.plainToHtml = function (sPlain)
|
||||
{
|
||||
return sPlain.toString()
|
||||
.replace(/&/g, '&').replace(/>/g, '>').replace(/</g, '<')
|
||||
.replace(/\r/g, '').replace(/\n/g, '<br />');
|
||||
sPlain = sPlain.toString().replace(/\r/g, '');
|
||||
|
||||
var
|
||||
bIn = false,
|
||||
bDo = true,
|
||||
bStart = true,
|
||||
aNextText = [],
|
||||
sLine = '',
|
||||
iIndex = 0,
|
||||
aText = sPlain.split("\n")
|
||||
;
|
||||
|
||||
do
|
||||
{
|
||||
bDo = false;
|
||||
aNextText = [];
|
||||
for (iIndex = 0; iIndex < aText.length; iIndex++)
|
||||
{
|
||||
sLine = aText[iIndex];
|
||||
bStart = '>' === sLine.substr(0, 1);
|
||||
if (bStart && !bIn)
|
||||
{
|
||||
bDo = true;
|
||||
bIn = true;
|
||||
aNextText.push('~~~blockquote~~~');
|
||||
aNextText.push(sLine.substr(1));
|
||||
}
|
||||
else if (!bStart && bIn)
|
||||
{
|
||||
bIn = false;
|
||||
aNextText.push('~~~/blockquote~~~');
|
||||
aNextText.push(sLine);
|
||||
}
|
||||
else if (bStart && bIn)
|
||||
{
|
||||
aNextText.push(sLine.substr(1));
|
||||
}
|
||||
else
|
||||
{
|
||||
aNextText.push(sLine);
|
||||
}
|
||||
}
|
||||
|
||||
if (bIn)
|
||||
{
|
||||
bIn = false;
|
||||
aNextText.push('~~~/blockquote~~~');
|
||||
}
|
||||
|
||||
aText = aNextText;
|
||||
}
|
||||
while (bDo);
|
||||
|
||||
sPlain = aText.join("\n");
|
||||
|
||||
sPlain = sPlain
|
||||
.replace(/&/g, '&')
|
||||
.replace(/>/g, '>').replace(/</g, '<')
|
||||
.replace(/~~~blockquote~~~[\s]*/g, '<blockquote>')
|
||||
.replace(/[\s]*~~~\/blockquote~~~/g, '</blockquote>')
|
||||
.replace(/[\-_~]{10,}/g, '<hr />')
|
||||
.replace(/\n/g, '<br />');
|
||||
|
||||
if ($.fn && $.fn.linkify)
|
||||
{
|
||||
sPlain = Utils.$div.html(sPlain)
|
||||
.linkify().find('.linkified').removeClass('linkified').end()
|
||||
.html();
|
||||
}
|
||||
|
||||
return sPlain;
|
||||
};
|
||||
|
||||
Utils.resizeAndCrop = function (sUrl, iValue, fCallback)
|
||||
|
|
@ -6703,7 +6826,6 @@ function MessageModel()
|
|||
|
||||
this.body = null;
|
||||
this.plainRaw = '';
|
||||
this.isRtl = ko.observable(false);
|
||||
this.isHtml = ko.observable(false);
|
||||
this.hasImages = ko.observable(false);
|
||||
this.attachments = ko.observableArray([]);
|
||||
|
|
@ -6881,7 +7003,6 @@ MessageModel.prototype.clear = function ()
|
|||
this.attachmentsMainType('');
|
||||
|
||||
this.body = null;
|
||||
this.isRtl(false);
|
||||
this.isHtml(false);
|
||||
this.hasImages(false);
|
||||
this.attachments([]);
|
||||
|
|
@ -7474,7 +7595,6 @@ MessageModel.prototype.populateByMessageListItem = function (oMessage)
|
|||
this.moment(oMessage.moment());
|
||||
|
||||
this.body = null;
|
||||
// this.isRtl(oMessage.isRtl());
|
||||
// this.isHtml(false);
|
||||
// this.hasImages(false);
|
||||
// this.attachments([]);
|
||||
|
|
@ -7639,7 +7759,6 @@ MessageModel.prototype.storeDataToDom = function ()
|
|||
{
|
||||
if (this.body)
|
||||
{
|
||||
this.body.data('rl-is-rtl', !!this.isRtl());
|
||||
this.body.data('rl-is-html', !!this.isHtml());
|
||||
this.body.data('rl-has-images', !!this.hasImages());
|
||||
|
||||
|
|
@ -7668,7 +7787,6 @@ MessageModel.prototype.fetchDataToDom = function ()
|
|||
{
|
||||
if (this.body)
|
||||
{
|
||||
this.isRtl(!!this.body.data('rl-is-rtl'));
|
||||
this.isHtml(!!this.body.data('rl-is-html'));
|
||||
this.hasImages(!!this.body.data('rl-has-images'));
|
||||
|
||||
|
|
@ -16849,7 +16967,7 @@ WebMailDataStorage.prototype.setMessage = function (oData, bCached)
|
|||
oBody = null,
|
||||
oTextBody = null,
|
||||
sId = '',
|
||||
sPlain = '',
|
||||
sPlainAsHtml = '',
|
||||
bPgpSigned = false,
|
||||
bPgpEncrypted = false,
|
||||
oMessagesBodiesDom = this.messagesBodiesDom(),
|
||||
|
|
@ -16885,17 +17003,20 @@ WebMailDataStorage.prototype.setMessage = function (oData, bCached)
|
|||
if (Utils.isNormal(oData.Result.Html) && '' !== oData.Result.Html)
|
||||
{
|
||||
bIsHtml = true;
|
||||
oBody.html(oData.Result.Html.toString()).addClass('b-text-part html');
|
||||
oBody
|
||||
.html(oData.Result.Html.toString())
|
||||
.linkify().find('.linkified').removeClass('linkified').end()
|
||||
.addClass('b-text-part html')
|
||||
;
|
||||
}
|
||||
else if (Utils.isNormal(oData.Result.Plain) && '' !== oData.Result.Plain)
|
||||
{
|
||||
bIsHtml = false;
|
||||
sPlain = oData.Result.Plain.toString();
|
||||
sPlainAsHtml = Utils.plainToHtml(oData.Result.Plain.toString());
|
||||
|
||||
if ((oMessage.isPgpSigned() || oMessage.isPgpEncrypted()) &&
|
||||
RL.data().capaOpenPGP() && Utils.isNormal(oData.Result.PlainRaw))
|
||||
if ((oMessage.isPgpSigned() || oMessage.isPgpEncrypted()) && RL.data().capaOpenPGP())
|
||||
{
|
||||
oMessage.plainRaw = Utils.pString(oData.Result.PlainRaw);
|
||||
oMessage.plainRaw = Utils.pString(oData.Result.Plain);
|
||||
|
||||
bPgpEncrypted = /---BEGIN PGP MESSAGE---/.test(oMessage.plainRaw);
|
||||
if (!bPgpEncrypted)
|
||||
|
|
@ -16907,7 +17028,7 @@ WebMailDataStorage.prototype.setMessage = function (oData, bCached)
|
|||
$proxyDiv.empty();
|
||||
if (bPgpSigned && oMessage.isPgpSigned())
|
||||
{
|
||||
sPlain =
|
||||
sPlainAsHtml =
|
||||
$proxyDiv.append(
|
||||
$('<pre class="b-plain-openpgp signed"></pre>').text(oMessage.plainRaw)
|
||||
).html()
|
||||
|
|
@ -16915,7 +17036,7 @@ WebMailDataStorage.prototype.setMessage = function (oData, bCached)
|
|||
}
|
||||
else if (bPgpEncrypted && oMessage.isPgpEncrypted())
|
||||
{
|
||||
sPlain =
|
||||
sPlainAsHtml =
|
||||
$proxyDiv.append(
|
||||
$('<pre class="b-plain-openpgp encrypted"></pre>').text(oMessage.plainRaw)
|
||||
).html()
|
||||
|
|
@ -16928,7 +17049,11 @@ WebMailDataStorage.prototype.setMessage = function (oData, bCached)
|
|||
oMessage.isPgpEncrypted(bPgpEncrypted);
|
||||
}
|
||||
|
||||
oBody.html(sPlain).addClass('b-text-part plain');
|
||||
oBody
|
||||
.html(sPlainAsHtml)
|
||||
.linkify().find('.linkified').removeClass('linkified').end()
|
||||
.addClass('b-text-part plain')
|
||||
;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -16940,12 +17065,6 @@ WebMailDataStorage.prototype.setMessage = function (oData, bCached)
|
|||
oMessage.pgpSignedVerifyStatus(Enums.SignedVerifyStatus.None);
|
||||
oMessage.pgpSignedVerifyUser('');
|
||||
|
||||
if (oData.Result.Rtl)
|
||||
{
|
||||
oMessage.isRtl(true);
|
||||
oBody.addClass('rtl-text-part');
|
||||
}
|
||||
|
||||
oMessage.body = oBody;
|
||||
if (oMessage.body)
|
||||
{
|
||||
|
|
|
|||
18
rainloop/v/0.0.0/static/js/app.min.js
vendored
18
rainloop/v/0.0.0/static/js/app.min.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
88
vendors/jquery-linkify/jquery.linkify.js
vendored
Normal file
88
vendors/jquery-linkify/jquery.linkify.js
vendored
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
/*
|
||||
* Linkify - v1.1.6
|
||||
* Find URLs in plain text and return HTML for discovered links.
|
||||
* https://github.com/HitSend/jQuery-linkify/
|
||||
*
|
||||
* Made by SoapBox Innovations, Inc.
|
||||
* Under MIT License
|
||||
*/
|
||||
!function($, window, document) {
|
||||
"use strict";
|
||||
function Linkified(element, options) {
|
||||
this._defaults = defaults, this.element = element, this.setOptions(options), this.init();
|
||||
}
|
||||
var defaults = {
|
||||
tagName: "a",
|
||||
newLine: "\n",
|
||||
target: "_blank",
|
||||
linkClass: null,
|
||||
linkClasses: [],
|
||||
linkAttributes: null
|
||||
};
|
||||
Linkified.prototype = {
|
||||
constructor: Linkified,
|
||||
init: function() {
|
||||
1 === this.element.nodeType ? Linkified.linkifyNode.call(this, this.element) : this.element = Linkified.linkify.call(this, this.element.toString());
|
||||
},
|
||||
setOptions: function(options) {
|
||||
this.settings = Linkified.extendSettings(options, this.settings);
|
||||
},
|
||||
toString: function() {
|
||||
return this.element.toString();
|
||||
}
|
||||
}, Linkified.extendSettings = function(options, settings) {
|
||||
var prop;
|
||||
settings = settings || {};
|
||||
for (prop in defaults) settings[prop] || (settings[prop] = defaults[prop]);
|
||||
for (prop in options) settings[prop] = options[prop];
|
||||
return settings;
|
||||
}, Linkified.linkMatch = new RegExp([ "(", '\\s|[^a-zA-Z0-9.\\+_\\/"\\>\\-]|^', ")(?:", "(", "[a-zA-Z0-9\\+_\\-]+", "(?:", "\\.[a-zA-Z0-9\\+_\\-]+", ")*@", ")?(", "http:\\/\\/|https:\\/\\/|ftp:\\/\\/", ")?(", "(?:(?:[a-zA-Z0-9][a-zA-Z0-9_%\\-_+]*\\.)+)", ")(", "(?:com|ca|co|edu|gov|net|org|dev|biz|cat|int|pro|tel|mil|aero|asia|coop|info|jobs|mobi|museum|name|post|travel|local|[a-z]{2})", ")(", "(?::\\d{1,5})", ")?(", "(?:", "[\\/|\\?]", "(?:", "[\\-a-zA-Z0-9_%#*&+=~!?,;:.\\/]*", ")*", ")", "[\\-\\/a-zA-Z0-9_%#*&+=~]", "|", "\\/?", ")?", ")(", '[^a-zA-Z0-9\\+_\\/"\\<\\-]|$', ")" ].join(""), "g"),
|
||||
Linkified.emailLinkMatch = /(<[a-z]+ href=\")(http:\/\/)([a-zA-Z0-9\+_\-]+(?:\.[a-zA-Z0-9\+_\-]+)*@)/g,
|
||||
Linkified.linkify = function(text, options) {
|
||||
var attr, settings, linkClasses, linkReplace = [];
|
||||
this.constructor === Linkified && this.settings ? (settings = this.settings, options && (settings = Linkified.extendSettings(options, settings))) : settings = Linkified.extendSettings(options),
|
||||
linkClasses = settings.linkClass ? settings.linkClass.split(/\s+/) : [], linkClasses.push.apply(linkClasses, settings.linkClasses),
|
||||
text = text.replace(/</g, "<").replace(/(\s)/g, "$1$1"), linkReplace.push("$1<" + settings.tagName, 'href="http://$2$4$5$6$7"'),
|
||||
linkReplace.push('class="linkified' + (linkClasses.length > 0 ? " " + linkClasses.join(" ") : "") + '"'),
|
||||
settings.target && linkReplace.push('target="' + settings.target + '"');
|
||||
for (attr in settings.linkAttributes) linkReplace.push([ attr, '="', settings.linkAttributes[attr].replace(/\"/g, """).replace(/\$/g, "$"), '"' ].join(""));
|
||||
return linkReplace.push(">$2$3$4$5$6$7</" + settings.tagName + ">$8"), text = text.replace(Linkified.linkMatch, linkReplace.join(" ")),
|
||||
text = text.replace(Linkified.emailLinkMatch, "$1mailto:$3"), text = text.replace(/(\s){2}/g, "$1"),
|
||||
text = text.replace(/\n/g, settings.newLine);
|
||||
}, Linkified.linkifyNode = function(node) {
|
||||
var children, childNode, childCount, dummyElement, i;
|
||||
if (node && "object" == typeof node && 1 === node.nodeType && "a" !== node.tagName.toLowerCase() && !/[^\s]linkified[\s$]/.test(node.className)) {
|
||||
for (children = [], dummyElement = Linkified._dummyElement || document.createElement("div"),
|
||||
childNode = node.firstChild, childCount = node.childElementCount; childNode; ) {
|
||||
if (3 === childNode.nodeType) {
|
||||
for (;dummyElement.firstChild; ) dummyElement.removeChild(dummyElement.firstChild);
|
||||
for (dummyElement.innerHTML = Linkified.linkify.call(this, childNode.textContent || childNode.innerText || childNode.nodeValue),
|
||||
children.push.apply(children, dummyElement.childNodes); dummyElement.firstChild; ) dummyElement.removeChild(dummyElement.firstChild);
|
||||
} else 1 === childNode.nodeType ? children.push(Linkified.linkifyNode(childNode)) : children.push(childNode);
|
||||
childNode = childNode.nextSibling;
|
||||
}
|
||||
for (;node.firstChild; ) node.removeChild(node.firstChild);
|
||||
for (i = 0; i < children.length; i++) node.appendChild(children[i]);
|
||||
}
|
||||
return node;
|
||||
}, Linkified._dummyElement = document.createElement("div"), $.fn.linkify = function(options) {
|
||||
return this.each(function() {
|
||||
var linkified;
|
||||
(linkified = $.data(this, "plugin-linkify")) ? (linkified.setOptions(options), linkified.init()) : $.data(this, "plugin-linkify", new Linkified(this, options));
|
||||
});
|
||||
}, $.fn.linkify.Constructor = Linkified, $(window).on("load", function() {
|
||||
$("[data-linkify]").each(function() {
|
||||
var $target, $this = $(this), target = $this.attr("data-linkify"), options = {
|
||||
tagName: $this.attr("data-linkify-tagname"),
|
||||
newLine: $this.attr("data-linkify-newline"),
|
||||
target: $this.attr("data-linkify-target"),
|
||||
linkClass: $this.attr("data-linkify-linkclass")
|
||||
};
|
||||
for (var option in options) "undefined" == typeof options[option] && delete options[option];
|
||||
$target = "this" === target ? $this : $this.find(target), $target.linkify(options);
|
||||
});
|
||||
}), $("body").on("click", ".linkified", function() {
|
||||
var $link = $(this), url = $link.attr("href"), isEmail = /^mailto:/i.test(url), target = $link.attr("target");
|
||||
return isEmail ? window.location.href = url : window.open(url, target), !1;
|
||||
});
|
||||
}(jQuery, window, document);
|
||||
9
vendors/jquery-linkify/jquery.linkify.min.js
vendored
Normal file
9
vendors/jquery-linkify/jquery.linkify.min.js
vendored
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
/*
|
||||
* Linkify - v1.1.6
|
||||
* Find URLs in plain text and return HTML for discovered links.
|
||||
* https://github.com/HitSend/jQuery-linkify/
|
||||
*
|
||||
* Made by SoapBox Innovations, Inc.
|
||||
* Under MIT License
|
||||
*/
|
||||
!function(a,b,c){"use strict";function d(a,b){this._defaults=e,this.element=a,this.setOptions(b),this.init()}var e={tagName:"a",newLine:"\n",target:"_blank",linkClass:null,linkClasses:[],linkAttributes:null};d.prototype={constructor:d,init:function(){1===this.element.nodeType?d.linkifyNode.call(this,this.element):this.element=d.linkify.call(this,this.element.toString())},setOptions:function(a){this.settings=d.extendSettings(a,this.settings)},toString:function(){return this.element.toString()}},d.extendSettings=function(a,b){var c;b=b||{};for(c in e)b[c]||(b[c]=e[c]);for(c in a)b[c]=a[c];return b},d.linkMatch=new RegExp(["(",'\\s|[^a-zA-Z0-9.\\+_\\/"\\>\\-]|^',")(?:","(","[a-zA-Z0-9\\+_\\-]+","(?:","\\.[a-zA-Z0-9\\+_\\-]+",")*@",")?(","http:\\/\\/|https:\\/\\/|ftp:\\/\\/",")?(","(?:(?:[a-zA-Z0-9][a-zA-Z0-9_%\\-_+]*\\.)+)",")(","(?:com|ca|co|edu|gov|net|org|dev|biz|cat|int|pro|tel|mil|aero|asia|coop|info|jobs|mobi|museum|name|post|travel|local|[a-z]{2})",")(","(?::\\d{1,5})",")?(","(?:","[\\/|\\?]","(?:","[\\-a-zA-Z0-9_%#*&+=~!?,;:.\\/]*",")*",")","[\\-\\/a-zA-Z0-9_%#*&+=~]","|","\\/?",")?",")(",'[^a-zA-Z0-9\\+_\\/"\\<\\-]|$',")"].join(""),"g"),d.emailLinkMatch=/(<[a-z]+ href=\")(http:\/\/)([a-zA-Z0-9\+_\-]+(?:\.[a-zA-Z0-9\+_\-]+)*@)/g,d.linkify=function(a,b){var c,e,f,g=[];this.constructor===d&&this.settings?(e=this.settings,b&&(e=d.extendSettings(b,e))):e=d.extendSettings(b),f=e.linkClass?e.linkClass.split(/\s+/):[],f.push.apply(f,e.linkClasses),a=a.replace(/</g,"<").replace(/(\s)/g,"$1$1"),g.push("$1<"+e.tagName,'href="http://$2$4$5$6$7"'),g.push('class="linkified'+(f.length>0?" "+f.join(" "):"")+'"'),e.target&&g.push('target="'+e.target+'"');for(c in e.linkAttributes)g.push([c,'="',e.linkAttributes[c].replace(/\"/g,""").replace(/\$/g,"$"),'"'].join(""));return g.push(">$2$3$4$5$6$7</"+e.tagName+">$8"),a=a.replace(d.linkMatch,g.join(" ")),a=a.replace(d.emailLinkMatch,"$1mailto:$3"),a=a.replace(/(\s){2}/g,"$1"),a=a.replace(/\n/g,e.newLine)},d.linkifyNode=function(a){var b,e,f,g,h;if(a&&"object"==typeof a&&1===a.nodeType&&"a"!==a.tagName.toLowerCase()&&!/[^\s]linkified[\s$]/.test(a.className)){for(b=[],g=d._dummyElement||c.createElement("div"),e=a.firstChild,f=a.childElementCount;e;){if(3===e.nodeType){for(;g.firstChild;)g.removeChild(g.firstChild);for(g.innerHTML=d.linkify.call(this,e.textContent||e.innerText||e.nodeValue),b.push.apply(b,g.childNodes);g.firstChild;)g.removeChild(g.firstChild)}else 1===e.nodeType?b.push(d.linkifyNode(e)):b.push(e);e=e.nextSibling}for(;a.firstChild;)a.removeChild(a.firstChild);for(h=0;h<b.length;h++)a.appendChild(b[h])}return a},d._dummyElement=c.createElement("div"),a.fn.linkify=function(b){return this.each(function(){var c;(c=a.data(this,"plugin-linkify"))?(c.setOptions(b),c.init()):a.data(this,"plugin-linkify",new d(this,b))})},a.fn.linkify.Constructor=d,a(b).on("load",function(){a("[data-linkify]").each(function(){var b,c=a(this),d=c.attr("data-linkify"),e={tagName:c.attr("data-linkify-tagname"),newLine:c.attr("data-linkify-newline"),target:c.attr("data-linkify-target"),linkClass:c.attr("data-linkify-linkclass")};for(var f in e)"undefined"==typeof e[f]&&delete e[f];b="this"===d?c:c.find(d),b.linkify(e)})}),a("body").on("click",".linkified",function(){var c=a(this),d=c.attr("href"),e=/^mailto:/i.test(d),f=c.attr("target");return e?b.location.href=d:b.open(d,f),!1})}(jQuery,window,document);
|
||||
Loading…
Add table
Add a link
Reference in a new issue