Experemental Plain2Html/Html2Plain convertor (+ jQuery linkify)

This commit is contained in:
RainLoop Team 2014-07-22 03:58:13 +04:00
parent 8cfd52ef12
commit e4333a6f90
18 changed files with 1211 additions and 604 deletions

View file

@ -113,7 +113,6 @@ Globals.oHtmlEditorDefaultConfig = {
'allowedContent': true, 'allowedContent': true,
'autoParagraph': false, 'autoParagraph': false,
'fillEmptyBlocks': false,
'enterMode': window.CKEDITOR.ENTER_BR, 'enterMode': window.CKEDITOR.ENTER_BR,
'shiftEnterMode': window.CKEDITOR.ENTER_BR, 'shiftEnterMode': window.CKEDITOR.ENTER_BR,

View file

@ -1460,6 +1460,7 @@ Utils.settingsSaveHelperSimpleFunction = function (koTrigger, oContext)
return Utils.settingsSaveHelperFunction(null, koTrigger, oContext, 1000); return Utils.settingsSaveHelperFunction(null, koTrigger, oContext, 1000);
}; };
Utils.$div = $('<div></div>');
/** /**
* @param {string} sHtml * @param {string} sHtml
@ -1468,24 +1469,54 @@ Utils.settingsSaveHelperSimpleFunction = function (koTrigger, oContext)
Utils.htmlToPlain = function (sHtml) Utils.htmlToPlain = function (sHtml)
{ {
var var
iPos = 0,
iP1 = 0,
iP2 = 0,
iP3 = 0,
iLimit = 0,
sText = '', sText = '',
sQuoteChar = '> ',
convertBlockquote = function () { splitPlainText = function (sText)
if (arguments && 1 < arguments.length) {
var
iLen = 100,
sPrefix = '',
sSubText = '',
sResult = sText,
iSpacePos = 0,
iNewLinePos = 0
;
while (sResult.length > iLen)
{ {
var sText = $.trim(arguments[1]) sSubText = sResult.substring(0, iLen);
.replace(/__bq__start__(.|[\s\S\n\r]*)__bq__end__/gm, convertBlockquote) 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 () { if (-1 === iSpacePos)
return (arguments && 1 < arguments.length) ? '\n' + $.trim(arguments[1].replace(/[\s]/, '')) + ' ' : ''; {
}); 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 () { convertDivs = function () {
@ -1494,40 +1525,23 @@ Utils.htmlToPlain = function (sHtml)
var sText = $.trim(arguments[1]); var sText = $.trim(arguments[1]);
if (0 < sText.length) 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'; sText = '\n' + $.trim(sText) + '\n';
} }
return sText; return sText;
} }
return ''; return '';
}, },
fixAttibuteValue = function () { fixAttibuteValue = function () {
if (arguments && 1 < arguments.length) return (arguments && 1 < arguments.length) ?
{ '' + arguments[1] + arguments[2].replace(/</g, '&lt;').replace(/>/g, '&gt;') : '';
return '' + arguments[1] + arguments[2].replace(/</g, '&lt;').replace(/>/g, '&gt;');
}
return '';
}, },
convertLinks = function () { convertLinks = function () {
if (arguments && 1 < arguments.length) return (arguments && 1 < arguments.length) ? $.trim(arguments[1]) : '';
{
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 '';
} }
; ;
@ -1542,25 +1556,67 @@ Utils.htmlToPlain = function (sHtml)
.replace(/<\/tr>/gi, '\n') .replace(/<\/tr>/gi, '\n')
.replace(/<hr[^>]*>/gmi, '\n_______________________________\n\n') .replace(/<hr[^>]*>/gmi, '\n_______________________________\n\n')
.replace(/<img [^>]*>/gmi, '') .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__start__\n')
.replace(/<\/blockquote>/gmi, '\n__bq__end__\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(/&nbsp;/gi, ' ') .replace(/&nbsp;/gi, ' ')
.replace(/<[^>]*>/gm, '') .replace(/&quot;/gi, '"')
.replace(/&gt;/gi, '>')
.replace(/&lt;/gi, '<')
.replace(/&amp;/gi, '&') .replace(/&amp;/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[ \t]+/gm, '\n')
.replace(/[\n]{3,}/gm, '\n\n') .replace(/[\n]{3,}/gm, '\n\n')
.replace(/__bq__start__(.|[\s\S\r\n]*)__bq__end__/gm, convertBlockquote) .replace(/&gt;/gi, '>')
.replace(/&lt;/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__start__/gm, '')
.replace(/__bq__end__/gm, '') .replace(/__bq__end__/gm, '')
; ;
return sText;
}; };
/** /**
@ -1569,9 +1625,77 @@ Utils.htmlToPlain = function (sHtml)
*/ */
Utils.plainToHtml = function (sPlain) Utils.plainToHtml = function (sPlain)
{ {
return sPlain.toString() sPlain = sPlain.toString().replace(/\r/g, '');
.replace(/&/g, '&amp;').replace(/>/g, '&gt;').replace(/</g, '&lt;')
.replace(/\r/g, '').replace(/\n/g, '<br />'); 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, '&amp;')
.replace(/>/g, '&gt;').replace(/</g, '&lt;')
.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) Utils.resizeAndCrop = function (sUrl, iValue, fCallback)

View file

@ -90,7 +90,6 @@ function MessageModel()
this.body = null; this.body = null;
this.plainRaw = ''; this.plainRaw = '';
this.isRtl = ko.observable(false);
this.isHtml = ko.observable(false); this.isHtml = ko.observable(false);
this.hasImages = ko.observable(false); this.hasImages = ko.observable(false);
this.attachments = ko.observableArray([]); this.attachments = ko.observableArray([]);
@ -268,7 +267,6 @@ MessageModel.prototype.clear = function ()
this.attachmentsMainType(''); this.attachmentsMainType('');
this.body = null; this.body = null;
this.isRtl(false);
this.isHtml(false); this.isHtml(false);
this.hasImages(false); this.hasImages(false);
this.attachments([]); this.attachments([]);
@ -342,7 +340,7 @@ MessageModel.prototype.initByJson = function (oJsonMessage)
this.subjectPrefix(''); this.subjectPrefix('');
this.subjectSuffix(this.subject()); this.subjectSuffix(this.subject());
} }
this.dateTimeStampInUTC(Utils.pInt(oJsonMessage.DateTimeStampInUTC)); this.dateTimeStampInUTC(Utils.pInt(oJsonMessage.DateTimeStampInUTC));
this.hasAttachments(!!oJsonMessage.HasAttachments); this.hasAttachments(!!oJsonMessage.HasAttachments);
this.attachmentsMainType(oJsonMessage.AttachmentsMainType); this.attachmentsMainType(oJsonMessage.AttachmentsMainType);
@ -861,7 +859,6 @@ MessageModel.prototype.populateByMessageListItem = function (oMessage)
this.moment(oMessage.moment()); this.moment(oMessage.moment());
this.body = null; this.body = null;
// this.isRtl(oMessage.isRtl());
// this.isHtml(false); // this.isHtml(false);
// this.hasImages(false); // this.hasImages(false);
// this.attachments([]); // this.attachments([]);
@ -1026,7 +1023,6 @@ MessageModel.prototype.storeDataToDom = function ()
{ {
if (this.body) if (this.body)
{ {
this.body.data('rl-is-rtl', !!this.isRtl());
this.body.data('rl-is-html', !!this.isHtml()); this.body.data('rl-is-html', !!this.isHtml());
this.body.data('rl-has-images', !!this.hasImages()); this.body.data('rl-has-images', !!this.hasImages());
@ -1055,7 +1051,6 @@ MessageModel.prototype.fetchDataToDom = function ()
{ {
if (this.body) if (this.body)
{ {
this.isRtl(!!this.body.data('rl-is-rtl'));
this.isHtml(!!this.body.data('rl-is-html')); this.isHtml(!!this.body.data('rl-is-html'));
this.hasImages(!!this.body.data('rl-has-images')); this.hasImages(!!this.body.data('rl-has-images'));

View file

@ -886,7 +886,7 @@ WebMailDataStorage.prototype.setMessage = function (oData, bCached)
oBody = null, oBody = null,
oTextBody = null, oTextBody = null,
sId = '', sId = '',
sPlain = '', sPlainAsHtml = '',
bPgpSigned = false, bPgpSigned = false,
bPgpEncrypted = false, bPgpEncrypted = false,
oMessagesBodiesDom = this.messagesBodiesDom(), oMessagesBodiesDom = this.messagesBodiesDom(),
@ -922,17 +922,20 @@ WebMailDataStorage.prototype.setMessage = function (oData, bCached)
if (Utils.isNormal(oData.Result.Html) && '' !== oData.Result.Html) if (Utils.isNormal(oData.Result.Html) && '' !== oData.Result.Html)
{ {
bIsHtml = true; 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) else if (Utils.isNormal(oData.Result.Plain) && '' !== oData.Result.Plain)
{ {
bIsHtml = false; bIsHtml = false;
sPlain = oData.Result.Plain.toString(); sPlainAsHtml = Utils.plainToHtml(oData.Result.Plain.toString());
if ((oMessage.isPgpSigned() || oMessage.isPgpEncrypted()) && if ((oMessage.isPgpSigned() || oMessage.isPgpEncrypted()) && RL.data().capaOpenPGP())
RL.data().capaOpenPGP() && Utils.isNormal(oData.Result.PlainRaw))
{ {
oMessage.plainRaw = Utils.pString(oData.Result.PlainRaw); oMessage.plainRaw = Utils.pString(oData.Result.Plain);
bPgpEncrypted = /---BEGIN PGP MESSAGE---/.test(oMessage.plainRaw); bPgpEncrypted = /---BEGIN PGP MESSAGE---/.test(oMessage.plainRaw);
if (!bPgpEncrypted) if (!bPgpEncrypted)
@ -944,7 +947,7 @@ WebMailDataStorage.prototype.setMessage = function (oData, bCached)
$proxyDiv.empty(); $proxyDiv.empty();
if (bPgpSigned && oMessage.isPgpSigned()) if (bPgpSigned && oMessage.isPgpSigned())
{ {
sPlain = sPlainAsHtml =
$proxyDiv.append( $proxyDiv.append(
$('<pre class="b-plain-openpgp signed"></pre>').text(oMessage.plainRaw) $('<pre class="b-plain-openpgp signed"></pre>').text(oMessage.plainRaw)
).html() ).html()
@ -952,7 +955,7 @@ WebMailDataStorage.prototype.setMessage = function (oData, bCached)
} }
else if (bPgpEncrypted && oMessage.isPgpEncrypted()) else if (bPgpEncrypted && oMessage.isPgpEncrypted())
{ {
sPlain = sPlainAsHtml =
$proxyDiv.append( $proxyDiv.append(
$('<pre class="b-plain-openpgp encrypted"></pre>').text(oMessage.plainRaw) $('<pre class="b-plain-openpgp encrypted"></pre>').text(oMessage.plainRaw)
).html() ).html()
@ -965,7 +968,11 @@ WebMailDataStorage.prototype.setMessage = function (oData, bCached)
oMessage.isPgpEncrypted(bPgpEncrypted); 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 else
{ {
@ -977,12 +984,6 @@ WebMailDataStorage.prototype.setMessage = function (oData, bCached)
oMessage.pgpSignedVerifyStatus(Enums.SignedVerifyStatus.None); oMessage.pgpSignedVerifyStatus(Enums.SignedVerifyStatus.None);
oMessage.pgpSignedVerifyUser(''); oMessage.pgpSignedVerifyUser('');
if (oData.Result.Rtl)
{
oMessage.isRtl(true);
oBody.addClass('rtl-text-part');
}
oMessage.body = oBody; oMessage.body = oBody;
if (oMessage.body) if (oMessage.body)
{ {

View file

@ -52,7 +52,7 @@ html.rl-no-preview-pane {
padding-left: 10px; padding-left: 10px;
} }
} }
.b-message-view-desc { .b-message-view-desc {
text-align: center; text-align: center;
font-size: 24px; font-size: 24px;
@ -316,10 +316,6 @@ html.rl-no-preview-pane {
display: none; display: none;
} }
&.rtl-text-part {
direction: rtl;
}
&.html { &.html {
div[data-x-div-type=body] { div[data-x-div-type=body] {
margin: 15px; margin: 15px;
@ -345,7 +341,7 @@ html.rl-no-preview-pane {
border: none; border: none;
font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;
} }
blockquote { blockquote {
border-left: 2px solid blue; border-left: 2px solid blue;
color: blue; color: blue;

View file

@ -132,6 +132,7 @@ cfg.paths.js = {
'vendors/jquery-lazyload/jquery.lazyload.min.js', 'vendors/jquery-lazyload/jquery.lazyload.min.js',
'vendors/jquery-nanoscroller/jquery.nanoscroller-0.7.min.js', 'vendors/jquery-nanoscroller/jquery.nanoscroller-0.7.min.js',
'vendors/jquery-wakeup/jquery.wakeup.min.js', 'vendors/jquery-wakeup/jquery.wakeup.min.js',
'vendors/jquery-linkify/jquery.linkify.min.js',
'vendors/inputosaurus/inputosaurus.min.js', 'vendors/inputosaurus/inputosaurus.min.js',
'vendors/moment/min/moment.min.js ', 'vendors/moment/min/moment.min.js ',
'vendors/routes/signals.min.js', 'vendors/routes/signals.min.js',

View file

@ -6956,7 +6956,7 @@ class Actions
$aParts = \explode(':', $sSubject); $aParts = \explode(':', $sSubject);
foreach ($aParts as $sPart) foreach ($aParts as $sPart)
{ {
if (!$sDrop && if (!$sDrop &&
(\preg_match('/^(RE|FWD)$/i', \trim($sPart)) || \preg_match('/^(RE|FWD)[\[\(][\d]+[\]\)]$/i', \trim($sPart)))) (\preg_match('/^(RE|FWD)$/i', \trim($sPart)) || \preg_match('/^(RE|FWD)[\[\(][\d]+[\]\)]$/i', \trim($sPart))))
{ {
$aPrefix[] = $sPart; $aPrefix[] = $sPart;
@ -7083,7 +7083,7 @@ class Actions
$mResult['IsForwarded'] = 0 < \strlen($sForwardedFlag) && \in_array(\strtolower($sForwardedFlag), $aFlags); $mResult['IsForwarded'] = 0 < \strlen($sForwardedFlag) && \in_array(\strtolower($sForwardedFlag), $aFlags);
$mResult['IsReadReceipt'] = 0 < \strlen($sReadReceiptFlag) && \in_array(\strtolower($sReadReceiptFlag), $aFlags); $mResult['IsReadReceipt'] = 0 < \strlen($sReadReceiptFlag) && \in_array(\strtolower($sReadReceiptFlag), $aFlags);
$mResult['TextPartIsTrimmed'] = false; $mResult['TextPartIsTrimmed'] = false;
if ('Message' === $sParent) if ('Message' === $sParent)
@ -7128,6 +7128,7 @@ class Actions
{ {
$fAdditionalExternalFilter = function ($sUrl) { $fAdditionalExternalFilter = function ($sUrl) {
return './?/ProxyExternal/'.\RainLoop\Utils::EncodeKeyValues(array( return './?/ProxyExternal/'.\RainLoop\Utils::EncodeKeyValues(array(
'Rnd' => \md5(\microtime(true)),
'Token' => \RainLoop\Utils::GetConnectionToken(), 'Token' => \RainLoop\Utils::GetConnectionToken(),
'Url' => $sUrl 'Url' => $sUrl
)).'/'; )).'/';
@ -7135,16 +7136,15 @@ 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, $sHtml, $bHasExternals, $mFoundedCIDs, $aContentLocationUrls, $mFoundedContentLocationUrls, false, false,
!!$this->Config()->Get('labs', 'allow_smart_html_links', true), $fAdditionalExternalFilter); $fAdditionalExternalFilter);
$mResult['ExternalProxy'] = null !== $fAdditionalExternalFilter; $mResult['ExternalProxy'] = null !== $fAdditionalExternalFilter;
$mResult['PlainRaw'] = $sPlain; $mResult['Plain'] = $sPlain;
$mResult['Plain'] = 0 === \strlen($sPlain) ? '' : \MailSo\Base\HtmlUtils::ConvertPlainToHtml($sPlain); // $mResult['Plain'] = 0 === \strlen($sPlain) ? '' : \MailSo\Base\HtmlUtils::ConvertPlainToHtml($sPlain);
$mResult['Rtl'] = \MailSo\Base\Utils::IsRTL($sPlain);
$mResult['TextHash'] = \md5($mResult['Html'].$mResult['Plain'].$mResult['PlainRaw']); $mResult['TextHash'] = \md5($mResult['Html'].$mResult['Plain']);
$mResult['TextPartIsTrimmed'] = $mResponse->TextPartIsTrimmed(); $mResult['TextPartIsTrimmed'] = $mResponse->TextPartIsTrimmed();

View file

@ -1,10 +1,10 @@
[LOGIN] [LOGIN]
LABEL_EMAIL = "Login/Email" LABEL_EMAIL = "E-mail"
LABEL_LOGIN = "Login" LABEL_LOGIN = "Login"
LABEL_PASSWORD = "Hasło" LABEL_PASSWORD = "Hasło"
LABEL_SIGN_ME = "Zapamiętaj mnie" LABEL_SIGN_ME = "Zapamiętaj mnie"
LABEL_VERIFICATION_CODE = "Verification Code" LABEL_VERIFICATION_CODE = "Kod weryfikujący"
LABEL_DONT_ASK_VERIFICATION_CODE = "Don't ask for the code for 2 weeks" LABEL_DONT_ASK_VERIFICATION_CODE = "Nie pytaj o kod przez 2 tygodnie"
BUTTON_SIGN_IN = "Zaloguj" BUTTON_SIGN_IN = "Zaloguj"
TITLE_SIGN_IN_GOOGLE = "Zaloguj się przez Google" TITLE_SIGN_IN_GOOGLE = "Zaloguj się przez Google"
TITLE_SIGN_IN_FACEBOOK = "Zaloguj się przez Facebook" TITLE_SIGN_IN_FACEBOOK = "Zaloguj się przez Facebook"
@ -13,7 +13,7 @@ TITLE_SIGN_IN_TWITTER = "Zaloguj się przez Twitter"
[TOP_TOOLBAR] [TOP_TOOLBAR]
BUTTON_ADD_ACCOUNT = "Dodaj konto" BUTTON_ADD_ACCOUNT = "Dodaj konto"
BUTTON_SETTINGS = "Ustawienia" BUTTON_SETTINGS = "Ustawienia"
BUTTON_HELP = "Help" BUTTON_HELP = "Pomoc"
BUTTON_LOGOUT = "Wyloguj się" BUTTON_LOGOUT = "Wyloguj się"
[SEARCH] [SEARCH]
@ -23,10 +23,10 @@ LABEL_ADV_FROM = "Od"
LABEL_ADV_TO = "Do" LABEL_ADV_TO = "Do"
LABEL_ADV_SUBJECT = "Temat" LABEL_ADV_SUBJECT = "Temat"
LABEL_ADV_TEXT = "Tekst" LABEL_ADV_TEXT = "Tekst"
LABEL_ADV_HAS_ATTACHMENT = "Has attachment" LABEL_ADV_HAS_ATTACHMENT = "Ma załącznik"
LABEL_ADV_HAS_ATTACHMENTS = "Ma załączniki" LABEL_ADV_HAS_ATTACHMENTS = "Z załącznikiem"
LABEL_ADV_FLAGGED = "Oznaczona" LABEL_ADV_FLAGGED = "Oznaczona"
LABEL_ADV_UNSEEN = "Nieodczytana" LABEL_ADV_UNSEEN = "Nieprzeczytana"
LABEL_ADV_DATE = "Data" LABEL_ADV_DATE = "Data"
LABEL_ADV_DATE_ALL = "Wszystkie" LABEL_ADV_DATE_ALL = "Wszystkie"
LABEL_ADV_DATE_3_DAYS = "Do 3 dni" LABEL_ADV_DATE_3_DAYS = "Do 3 dni"
@ -40,11 +40,11 @@ BUTTON_ADV_SEARCH = "Szukaj"
[MAGNIFIC_POPUP] [MAGNIFIC_POPUP]
CLOSE = "Zamknij (Esc)" CLOSE = "Zamknij (Esc)"
LOADING = "Ładowanie..." LOADING = "Ładowanie..."
GALLERY_PREV = "Poprzedni" GALLERY_PREV = "Poprzedni (strzałka w lewo)"
GALLERY_NEXT = "Następny" GALLERY_NEXT = "Następny (strzałka w prawo)"
GALLERY_COUNTER = "%curr% z %total%" GALLERY_COUNTER = "%curr% z %total%"
IMAGE_ERROR = "<a href=\"%url%\" target=\"_blank\">Obraz</a> nie mógł zostać załadowany." IMAGE_ERROR = "Nie można było załadować <a href=\"%url%\" target=\"_blank\">obrazu</a>."
AJAX_ERROR = "<a href=\"%url%\" target=\"_blank\">Zawartość</a> nie mogła zostać załadowana." AJAX_ERROR = "Nie można było załadować <a href=\"%url%\" target=\"_blank\">zawartości</a>."
[FOLDER_LIST] [FOLDER_LIST]
BUTTON_COMPOSE = "Utwórz" BUTTON_COMPOSE = "Utwórz"
@ -54,7 +54,7 @@ SENT_NAME = "Wysłane"
DRAFTS_NAME = "Wersje robocze" DRAFTS_NAME = "Wersje robocze"
SPAM_NAME = "Spam" SPAM_NAME = "Spam"
TRASH_NAME = "Kosz" TRASH_NAME = "Kosz"
ARCHIVE_NAME = "Archive" ARCHIVE_NAME = "Archiwum"
[QUOTA] [QUOTA]
TITLE = "Wykorzystane miejsce" TITLE = "Wykorzystane miejsce"
@ -63,9 +63,9 @@ TITLE = "Wykorzystane miejsce"
BUTTON_RELOAD = "Odśwież" BUTTON_RELOAD = "Odśwież"
BUTTON_MOVE_TO = "Przenieś do" BUTTON_MOVE_TO = "Przenieś do"
BUTTON_DELETE = "Usuń" BUTTON_DELETE = "Usuń"
BUTTON_ARCHIVE = "Archive" BUTTON_ARCHIVE = "Archiwum"
BUTTON_SPAM = "Oznacz jako spam" BUTTON_SPAM = "Oznacz jako spam"
BUTTON_NOT_SPAM = "Not Spam" BUTTON_NOT_SPAM = "Oznacz jako wiarygodna"
BUTTON_EMPTY_FOLDER = "Wyczyść folder" BUTTON_EMPTY_FOLDER = "Wyczyść folder"
BUTTON_MULTY_FORWARD = "Przekaż dalej" BUTTON_MULTY_FORWARD = "Przekaż dalej"
BUTTON_DELETE_WITHOUT_MOVE = "Usuń na stałe" BUTTON_DELETE_WITHOUT_MOVE = "Usuń na stałe"
@ -73,51 +73,51 @@ BUTTON_MORE = "Więcej"
MENU_SET_SEEN = "Oznacz jako przeczytane" MENU_SET_SEEN = "Oznacz jako przeczytane"
MENU_SET_ALL_SEEN = "Oznacz wszystkie jako przeczytane" MENU_SET_ALL_SEEN = "Oznacz wszystkie jako przeczytane"
MENU_UNSET_SEEN = "Oznacz jako nieprzeczytane" MENU_UNSET_SEEN = "Oznacz jako nieprzeczytane"
MENU_SET_FLAG = "Etykieta" MENU_SET_FLAG = "Oznacz jako ważne"
MENU_UNSET_FLAG = "Usuń Etykietę" MENU_UNSET_FLAG = "Oznacz jako nieważne"
MENU_SELECT_ALL = "Wszystkie" MENU_SELECT_ALL = "Wszystkie"
MENU_SELECT_NONE = "Żaden" MENU_SELECT_NONE = "Żaden"
MENU_SELECT_INVERT = "Odwróć" MENU_SELECT_INVERT = "Odwróć"
MENU_SELECT_UNSEEN = "Nieprzeczytane" MENU_SELECT_UNSEEN = "Nieprzeczytane"
MENU_SELECT_SEEN = "Przeczytane" MENU_SELECT_SEEN = "Przeczytane"
MENU_SELECT_FLAGGED = "Z Etykietą" MENU_SELECT_FLAGGED = "Oznaczone jako ważne"
MENU_SELECT_UNFLAGGED = "Bez Etykiety" MENU_SELECT_UNFLAGGED = "Oznaczone jako nieważne"
EMPTY_LIST = "Lista pusta" EMPTY_LIST = "Pusta lista"
EMPTY_SEARCH_LIST = "Brak wiadomości spełniających kryteria wyszukiwania" 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" LIST_LOADING = "Ładowanie"
EMPTY_SUBJECT_TEXT = "(Brak tematu)" EMPTY_SUBJECT_TEXT = "(Brak tematu)"
PUT_MESSAGE_HERE = "Przeciągnij tutaj wiadomość żeby zobaczyć ją w liście" PUT_MESSAGE_HERE = "Przeciągnij tutaj wiadomość, żeby zobaczyć ją na liście"
TODAY_AT = "dzisiaj o %TIME%" TODAY_AT = "dzisiaj o: %TIME%"
YESTERDAY_AT = "wczoraj o %TIME%" YESTERDAY_AT = "wczoraj o: %TIME%"
SEARCH_PLACEHOLDER = "Szukaj" SEARCH_PLACEHOLDER = "Szukaj"
NEW_MESSAGE_NOTIFICATION = "Masz %COUNT% nowych wiadomości!" NEW_MESSAGE_NOTIFICATION = "Masz: %COUNT% now(-ą,-e,-ych) wiadomości!"
QUOTA_SIZE = "Wykorzystano <strong>%SIZE% (%PROC%%)</strong> z przyznanych <strong>%LIMIT%</strong>" QUOTA_SIZE = "Wykorzystano: <strong>%SIZE% (%PROC%%)</strong> z przyznanych: <strong>%LIMIT%</strong>"
[MESSAGE] [MESSAGE]
BUTTON_EDIT = "Edytuj" BUTTON_EDIT = "Edytuj"
BUTTON_BACK = "Wstecz" BUTTON_BACK = "Wstecz"
BUTTON_CLOSE = "Zamknij" BUTTON_CLOSE = "Zamknij"
BUTTON_DELETE = "Usuń" BUTTON_DELETE = "Usuń"
BUTTON_ARCHIVE = "Archive" BUTTON_ARCHIVE = "Archiwizuj"
BUTTON_SPAM = "Oznacz jako spam" BUTTON_SPAM = "Oznacz jako spam"
BUTTON_NOT_SPAM = "Not Spam" BUTTON_NOT_SPAM = "Oznacz jako wiarygodną"
BUTTON_MOVE_TO = "Przenieś Do" BUTTON_MOVE_TO = "Przenieś do"
BUTTON_MORE = "Więcej" BUTTON_MORE = "Więcej"
BUTTON_REPLY = "Odpowiedz" BUTTON_REPLY = "Odpowiedz"
BUTTON_REPLY_ALL = "Odpowiedz wszystkim" BUTTON_REPLY_ALL = "Odpowiedz wszystkim"
BUTTON_FORWARD = "Przekaż dalej" BUTTON_FORWARD = "Przekaż dalej"
BUTTON_FORWARD_AS_ATTACHMENT = "Przekaż jako załącznik" BUTTON_FORWARD_AS_ATTACHMENT = "Przekaż jako załącznik"
BUTTON_EDIT_AS_NEW = "Edytuj jako nową wiadomość" 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_NOTIFY_READ_RECEIPT = "Nadawca prosi o potwierdzenie odczytania tej wiadomości"
BUTTON_IN_NEW_WINDOW = "Wyświetl w osobnym oknie" 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_VIEW_ORIGINAL = "Pokaż oryginał"
MENU_DOWNLOAD_ORIGINAL = "Pobież jako plik .eml" MENU_DOWNLOAD_ORIGINAL = "Pobież jako plik .eml"
MENU_FILTER_SIMILAR = "Filtruj podobne wiadomości" MENU_FILTER_SIMILAR = "Filtruj podobne wiadomości"
MENU_PRINT = "Drukuj" MENU_PRINT = "Drukuj"
EMPTY_SUBJECT_TEXT = "(Brak Tematu)" EMPTY_SUBJECT_TEXT = "(Brak tematu)"
LABEL_SUBJECT = "Temat" LABEL_SUBJECT = "Temat"
LABEL_DATE = "Data" LABEL_DATE = "Data"
LABEL_FROM = "Od" LABEL_FROM = "Od"
@ -134,14 +134,14 @@ PRINT_LABEL_DATE = "Data"
PRINT_LABEL_SUBJECT = "Temat" PRINT_LABEL_SUBJECT = "Temat"
PRINT_LABEL_ATTACHMENTS = "Załączniki" PRINT_LABEL_ATTACHMENTS = "Załączniki"
MESSAGE_LOADING = "Ładowanie..." MESSAGE_LOADING = "Ładowanie..."
MESSAGE_VIEW_DESC = "Wybierz wiadomość z listy w celu jej wyświetlenia." MESSAGE_VIEW_DESC = "Wybierz wiadomość z listy w celu jej wyświetlenia"
PGP_PASSWORD_INPUT_PLACEHOLDER = "Password" PGP_PASSWORD_INPUT_PLACEHOLDER = "Hasło"
PGP_SIGNED_MESSAGE_DESC = "OpenPGP signed message (click to verify)" PGP_SIGNED_MESSAGE_DESC = "Wiadomość podpisana za pomocą OpenPGP (kliknij, aby zweryfikować)"
PGP_ENCRYPTED_MESSAGE_DESC = "OpenPGP encrypted message (click to decrypt)" PGP_ENCRYPTED_MESSAGE_DESC = "Wiadomość zaszyfrowana za pomocą OpenPGP (kliknij, aby odszyfrować)"
[READ_RECEIPT] [READ_RECEIPT]
SUBJECT = "Potwierdzenie odbioru (wyświetlenia) - %SUBJECT%" 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ą." 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" SEARCH_INPUT_PLACEHOLDER = "Szukaj"
BUTTON_ADD_CONTACT = "Dodaj Kontakt" BUTTON_ADD_CONTACT = "Dodaj Kontakt"
BUTTON_CREATE_CONTACT = "Utwórz" BUTTON_CREATE_CONTACT = "Utwórz"
BUTTON_UPDATE_CONTACT = "Aktualizuj" BUTTON_UPDATE_CONTACT = "Zaktualizuj"
BUTTON_IMPORT = "Import (csv, vcf, vCard)" BUTTON_IMPORT = "Importuj (csv, vcf, vCard)"
BUTTON_EXPORT_VCARD = "Export (vcf, vCard)" BUTTON_EXPORT_VCARD = "Eksportuj (vcf, vCard)"
BUTTON_EXPORT_CSV = "Export (csv)" BUTTON_EXPORT_CSV = "Eksportuj (csv)"
ERROR_IMPORT_FILE = "Błąd importu (nieprawidłowy format pliku)" ERROR_IMPORT_FILE = "Błąd importu (nieprawidłowy format pliku)"
LIST_LOADING = "Ładowanie" LIST_LOADING = "Ładowanie"
EMPTY_LIST = "Brak kontaktów" EMPTY_LIST = "Brak kontaktów"
@ -164,37 +164,38 @@ EMPTY_SEARCH = "Nie znaleziono żadnych kontaktów"
CLEAR_SEARCH = "Wyczyść wyszukiwanie" CLEAR_SEARCH = "Wyczyść wyszukiwanie"
CONTACT_VIEW_DESC = "Wybierz kontakt z listy w celu jego wyświetlenia" CONTACT_VIEW_DESC = "Wybierz kontakt z listy w celu jego wyświetlenia"
LABEL_DISPLAY_NAME = "Wyświetlana nazwa" LABEL_DISPLAY_NAME = "Wyświetlana nazwa"
LABEL_EMAIL = "Email" LABEL_EMAIL = "E-mail"
LABEL_PHONE = "Telefon" LABEL_PHONE = "Telefon"
LABEL_WEB = "Web" LABEL_WEB = "Strona WWW"
LABEL_BIRTHDAY = "Birthday" LABEL_BIRTHDAY = "Urodziny"
LINK_ADD_EMAIL = "Dodaj adres email" LABEL_TAGS = "Tagi"
LINK_ADD_PHONE = "Dodaj nr Tel" LINK_ADD_EMAIL = "Dodaj adres e-mail"
LINK_BIRTHDAY = "Birthday" LINK_ADD_PHONE = "Dodaj nr telefonu"
LINK_BIRTHDAY = "Urodziny"
PLACEHOLDER_ENTER_DISPLAY_NAME = "Nazwa wyświetlana" PLACEHOLDER_ENTER_DISPLAY_NAME = "Nazwa wyświetlana"
PLACEHOLDER_ENTER_LAST_NAME = "Nazwisko" PLACEHOLDER_ENTER_LAST_NAME = "Nazwisko"
PLACEHOLDER_ENTER_FIRST_NAME = "Imię" PLACEHOLDER_ENTER_FIRST_NAME = "Imię"
PLACEHOLDER_ENTER_NICK_NAME = "Enter nickname" PLACEHOLDER_ENTER_NICK_NAME = "Pseudonim"
LABEL_READ_ONLY = "Tylko do odczytu" LABEL_READ_ONLY = "Tylko do odczytu"
LABEL_SHARE = "Udostępnij kontakt" LABEL_SHARE = "Udostępnij kontakt"
ADD_MENU_LABEL = "Add" ADD_MENU_LABEL = "Dodaj"
ADD_MENU_NICKNAME = "Nickname" ADD_MENU_NICKNAME = "Pseudonim"
ADD_MENU_NOTES = "Notes" ADD_MENU_NOTES = "Notatki"
ADD_MENU_EMAIL = "Email" ADD_MENU_EMAIL = "E-mail"
ADD_MENU_PHONE = "Phone" ADD_MENU_PHONE = "Telefon"
ADD_MENU_URL = "URL" ADD_MENU_URL = "Adres URL"
ADD_MENU_ADDRESS = "Address" ADD_MENU_ADDRESS = "Adres"
ADD_MENU_BIRTHDAY = "Birthday" ADD_MENU_BIRTHDAY = "Urodziny"
ADD_MENU_TAGS = "Tags" ADD_MENU_TAGS = "Tagi"
BUTTON_SHARE_NONE = "Nikomu" BUTTON_SHARE_NONE = "Nikomu"
BUTTON_SHARE_ALL = "Wszystkim" BUTTON_SHARE_ALL = "Wszystkim"
BUTTON_SYNC = "Synchronization (CardDAV)" BUTTON_SYNC = "Synchronizacja (CardDAV)"
[COMPOSE] [COMPOSE]
TITLE_FROM = "Od" TITLE_FROM = "Od"
TITLE_TO = "Do" TITLE_TO = "Do"
TITLE_CC = "Kopia do" TITLE_CC = "DW"
TITLE_BCC = "Ukryci odbiorcy" TITLE_BCC = "UDW"
TITLE_REPLY_TO = "Odpowiedź do" TITLE_REPLY_TO = "Odpowiedź do"
TITLE_SUBJECT = "Temat" TITLE_SUBJECT = "Temat"
LINK_SHOW_INPUTS = "Pokaż wszystkie pola" LINK_SHOW_INPUTS = "Pokaż wszystkie pola"
@ -202,14 +203,14 @@ BUTTON_SEND = "Wyślij"
BUTTON_SAVE = "Zapisz" BUTTON_SAVE = "Zapisz"
BUTTON_DELETE = "Usuń" BUTTON_DELETE = "Usuń"
BUTTON_CANCEL = "Anuluj" 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" SAVED_ERROR_ON_SEND = "Wiadomość została wysłana, ale nie została zapisana w folderze: Wysłane"
ATTACH_FILES = "Dołącz pliki" ATTACH_FILES = "Dołącz pliki"
ATTACH_DROP_FILES_DESC = "Przeciągnij pliki tutaj" ATTACH_DROP_FILES_DESC = "Przeciągnij pliki tutaj"
ATTACH_ITEM_CANCEL = "Anuluj" ATTACH_ITEM_CANCEL = "Anuluj"
DROPBOX = "Dropbox" DROPBOX = "Dropbox"
GOOGLE_DRIVE = "Google Drive" GOOGLE_DRIVE = "Google Drive"
REPLY_MESSAGE_TITLE = "%DATETIME% %EMAIL% napisał" REPLY_MESSAGE_TITLE = "%DATETIME% - %EMAIL%:"
FORWARD_MESSAGE_TOP_TITLE = "-------- Przekierowana wiadomość -------" FORWARD_MESSAGE_TOP_TITLE = "-------- Przekierowana wiadomość -------"
FORWARD_MESSAGE_TOP_FROM = "Od" FORWARD_MESSAGE_TOP_FROM = "Od"
FORWARD_MESSAGE_TOP_TO = "Do" FORWARD_MESSAGE_TOP_TO = "Do"
@ -217,82 +218,82 @@ FORWARD_MESSAGE_TOP_CC = "CC"
FORWARD_MESSAGE_TOP_SENT = "Wysłany" FORWARD_MESSAGE_TOP_SENT = "Wysłany"
FORWARD_MESSAGE_TOP_SUBJECT = "Temat" FORWARD_MESSAGE_TOP_SUBJECT = "Temat"
EMPTY_TO_ERROR_DESC = "Wprowadź co najmniej jednego odbiorcę" 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" BUTTON_REQUEST_READ_RECEIPT = "Żądaj potwierdzenia odbioru"
[POPUPS_ASK] [POPUPS_ASK]
BUTTON_YES = "Tak" BUTTON_YES = "Tak"
BUTTON_NO = "Nie" BUTTON_NO = "Nie"
DESC_WANT_CLOSE_THIS_WINDOW = "Na pewno zamknąć to okno ?" 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] [POPUPS_LANGUAGES]
TITLE_LANGUAGES = "Choose language/Wybierz język" TITLE_LANGUAGES = "Wybierz język"
[POPUPS_ADD_ACCOUNT] [POPUPS_ADD_ACCOUNT]
TITLE_ADD_ACCOUNT = "Dodać Konto?" TITLE_ADD_ACCOUNT = "Dodawanie konta"
BUTTON_ADD_ACCOUNT = "Dodaj" BUTTON_ADD_ACCOUNT = "Dodaj"
[POPUPS_IDENTITIES] [POPUPS_IDENTITIES]
TITLE_ADD_IDENTITY = "Dodać tożsamość?" TITLE_ADD_IDENTITY = "Dodawanie tożsamości"
TITLE_UPDATE_IDENTITY = "Uaktualnić tożsamość?" TITLE_UPDATE_IDENTITY = "Aktualizacja tożsamości"
BUTTON_ADD_IDENTITY = "Dodaj" BUTTON_ADD_IDENTITY = "Dodaj"
BUTTON_UPDATE_IDENTITY = "Aktualizuj" BUTTON_UPDATE_IDENTITY = "Aktualizuj"
LABEL_EMAIL = "Email" LABEL_EMAIL = "E-mail"
LABEL_NAME = "Nazwa" LABEL_NAME = "Nazwa"
LABEL_REPLY_TO = "Odpowiedz do" LABEL_REPLY_TO = "Odpowiedz do"
LABEL_BCC = "Ukryci odbiorcy" LABEL_BCC = "Ukryci odbiorcy"
[POPUPS_CREATE_FOLDER] [POPUPS_CREATE_FOLDER]
TITLE_CREATE_FOLDER = "Utworzyć Folder?" TITLE_CREATE_FOLDER = "Tworzenie folderu"
SELECT_NO_PARENT = "" SELECT_NO_PARENT = ""
LABEL_NAME = "Nazwa Folderu" LABEL_NAME = "Nazwa folderu"
LABEL_PARENT = "Folder Nadrzędny" LABEL_PARENT = "Folder nadrzędny"
BUTTON_CREATE = "Utwórz" BUTTON_CREATE = "Utwórz"
BUTTON_CANCEL = "Anuluj" BUTTON_CANCEL = "Anuluj"
BUTTON_CLOSE = "Zamknij" BUTTON_CLOSE = "Zamknij"
TITLE_CREATING_PROCESS = "Trwa dodawanie Folderu" TITLE_CREATING_PROCESS = "Trwa dodawanie folderu"
[POPUPS_CLEAR_FOLDER] [POPUPS_CLEAR_FOLDER]
TITLE_CLEAR_FOLDER = "Czy chcesz usunąć wszystkie wiadomości z folderu?" TITLE_CLEAR_FOLDER = "Czy chcesz usunąć wszystkie wiadomości z folderu?"
BUTTON_CLEAR = "Usuń" BUTTON_CLEAR = "Usuń"
BUTTON_CANCEL = "Anuluj" BUTTON_CANCEL = "Anuluj"
BUTTON_CLOSE = "Zamknij" BUTTON_CLOSE = "Zamknij"
DANGER_DESC_WARNING = "Uwaga!" DANGER_DESC_WARNING = "Ostrzeżenie !"
DANGER_DESC_HTML_1 = "Wybrana akcja doprowadzi do usunięcia na stałe wszystkich wiadomości z folderu <strong>%FOLDER%</strong> !" 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 ani anulowany." DANGER_DESC_HTML_2 = "Po rozpoczęciu, proces nie może zostać przerwany lub anulowany."
TITLE_CLEARING_PROCESS = "Trwa usuwanie wszystkich wiadomości w folderze..." TITLE_CLEARING_PROCESS = "Trwa usuwanie wszystkich wiadomości z folderu..."
[POPUPS_IMPORT_OPEN_PGP_KEY] [POPUPS_IMPORT_OPEN_PGP_KEY]
TITLE_IMPORT_OPEN_PGP_KEY = "Import OpenPGP key" TITLE_IMPORT_OPEN_PGP_KEY = "Importowanie klucza OpenPGP"
BUTTON_IMPORT_OPEN_PGP_KEY = "Import" BUTTON_IMPORT_OPEN_PGP_KEY = "Importuj"
[POPUPS_VIEW_OPEN_PGP_KEY] [POPUPS_VIEW_OPEN_PGP_KEY]
TITLE_VIEW_OPEN_PGP_KEY = "View OpenPGP key" TITLE_VIEW_OPEN_PGP_KEY = "Klucz OpenPGP"
BUTTON_SELECT = "Select" BUTTON_SELECT = "Zaznacz"
BUTTON_CLOSE = "Close" BUTTON_CLOSE = "Zamknij"
[POPUPS_GENERATE_OPEN_PGP_KEYS] [POPUPS_GENERATE_OPEN_PGP_KEYS]
TITLE_GENERATE_OPEN_PGP_KEYS = "Generate OpenPGP keys" TITLE_GENERATE_OPEN_PGP_KEYS = "Generowanie klucza OpenPGP"
LABEL_EMAIL = "Email" LABEL_EMAIL = "E-mail"
LABEL_NAME = "Name" LABEL_NAME = "Imię i nazwisko"
LABEL_PASSWORD = "Password" LABEL_PASSWORD = "Hasło"
LABEL_KEY_BIT_LENGTH = "Key length" LABEL_KEY_BIT_LENGTH = "Długość klucza"
BUTTON_GENERATE_OPEN_PGP_KEYS = "Generate" BUTTON_GENERATE_OPEN_PGP_KEYS = "Generuj"
[POPUPS_COMPOSE_OPEN_PGP] [POPUPS_COMPOSE_OPEN_PGP]
TITLE_COMPOSE_OPEN_PGP = "OpenPGP Sign/Encrypt" TITLE_COMPOSE_OPEN_PGP = "Podpisz/Zaszyfruj"
LABEL_SIGN = "Sign" LABEL_SIGN = "Podpisz"
LABEL_ENCRYPT = "Encrypt" LABEL_ENCRYPT = "Zaszyfruj"
LABEL_PASSWORD = "Password" LABEL_PASSWORD = "Hasło"
BUTTON_SIGN = "Sign" BUTTON_SIGN = "Podpisz"
BUTTON_ENCRYPT = "Encrypt" BUTTON_ENCRYPT = "Zaszyfruj"
BUTTON_SIGN_AND_ENCRYPT = "Sign and encrypt" BUTTON_SIGN_AND_ENCRYPT = "Podpisz i zaszyfruj"
[POPUPS_TWO_FACTOR_TEST] [POPUPS_TWO_FACTOR_TEST]
TITLE_TEST_CODE = "2-Step verification test" TITLE_TEST_CODE = "Test weryfikacji 2-stopniowej"
LABEL_CODE = "Code" LABEL_CODE = "Kod"
BUTTON_TEST = "Test" BUTTON_TEST = "Testuj"
[POPUPS_SYSTEM_FOLDERS] [POPUPS_SYSTEM_FOLDERS]
TITLE_SYSTEM_FOLDERS = "Wybierz foldery systemowe" TITLE_SYSTEM_FOLDERS = "Wybierz foldery systemowe"
@ -300,24 +301,24 @@ SELECT_CHOOSE_ONE = "Wybierz"
SELECT_UNUSE_NAME = "Nie używaj" SELECT_UNUSE_NAME = "Nie używaj"
LABEL_SENT = "Wysłane" LABEL_SENT = "Wysłane"
LABEL_DRAFTS = "Wersje robocze" LABEL_DRAFTS = "Wersje robocze"
LABEL_SPAM = "SPAM" LABEL_SPAM = "Spam"
LABEL_TRASH = "Kosz" LABEL_TRASH = "Kosz"
LABEL_ARCHIVE = "Archive" LABEL_ARCHIVE = "Archiwum"
BUTTON_CANCEL = "Anuluj" BUTTON_CANCEL = "Anuluj"
BUTTON_CLOSE = "Zamknij" BUTTON_CLOSE = "Zamknij"
NOTIFICATION_SENT = "Nie został wybrany folder \"Wysłane\" do którego przenoszone są wiadomości po wysłaniu. 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\"." 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. 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\"." 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. 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\"." 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] [TITLES]
LOADING = "Ładowanie" LOADING = "Ładowanie"
@ -330,7 +331,7 @@ COMPOSE = "Utwórz"
ERROR_FILE_IS_TOO_BIG = "Plik jest za duży" 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_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_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_ON_SAVING_FILE = "Wystąpił nieoczekiwany błąd w trakcie przesyłania pliku"
ERROR_FILE_TYPE = "Nieprawidłowy typ pliku" ERROR_FILE_TYPE = "Nieprawidłowy typ pliku"
ERROR_UNKNOWN = "Wystąpił nieznany błąd w trakcie przesyłania 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_ACCOUNTS_NAME = "Konta"
LABEL_IDENTITY_NAME = "Tożsamość" LABEL_IDENTITY_NAME = "Tożsamość"
LABEL_IDENTITIES_NAME = "Tożsamości" LABEL_IDENTITIES_NAME = "Tożsamości"
LABEL_SECURITY_NAME = "Security" LABEL_FILTERS_NAME = "Filtry"
LABEL_SOCIAL_NAME = "Social" LABEL_SECURITY_NAME = "Bezpieczeństwo"
LABEL_THEMES_NAME = "Wygląd" LABEL_SOCIAL_NAME = "Sieci społecznościowe"
LABEL_THEMES_NAME = "Skórki"
LABEL_CHANGE_PASSWORD_NAME = "Hasło" LABEL_CHANGE_PASSWORD_NAME = "Hasło"
LABEL_OPEN_PGP_NAME = "OpenPGP" LABEL_OPEN_PGP_NAME = "OpenPGP"
BUTTON_BACK = "Wstecz" 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] [SETTINGS_IDENTITY]
LEGEND_IDENTITY = "Tożsamość" LEGEND_IDENTITY = "Tożsamość"
LABEL_DISPLAY_NAME = "Imię" LABEL_DISPLAY_NAME = "Imię i nazwisko"
LABEL_REPLY_TO = "Zwrotny adres e-mail" LABEL_REPLY_TO = "Zwrotny adres e-mail"
LABEL_SIGNATURE = "Podpis" LABEL_SIGNATURE = "Podpis"
LABEL_ADD_SIGNATURE_TO_ALL = "Dadawaj podpis do wszystkich wysyłanych wiadomości" LABEL_ADD_SIGNATURE_TO_ALL = "Dadawaj podpis do wszystkich wysyłanych wiadomości"
[SETTINGS_SECURITY] [SETTINGS_SECURITY]
LEGEND_TWO_FACTOR_AUTH = "2-Step Verification (Google Authenticator)" LEGEND_TWO_FACTOR_AUTH = "Weryfikacja 2-stopniowa (Google Authenticator)"
LABEL_ENABLE_TWO_FACTOR = "Enable 2-Step verification" LABEL_ENABLE_TWO_FACTOR = "Włącz 2-stopniową weryfikację"
LABEL_TWO_FACTOR_USER = "User" LABEL_TWO_FACTOR_USER = "Użytkownik"
LABEL_TWO_FACTOR_STATUS = "Status" LABEL_TWO_FACTOR_STATUS = "Status"
LABEL_TWO_FACTOR_SECRET = "Secret" LABEL_TWO_FACTOR_SECRET = "Tajna fraza"
LABEL_TWO_FACTOR_BACKUP_CODES = "Backup codes" LABEL_TWO_FACTOR_BACKUP_CODES = "Kody zapasowe"
BUTTON_CREATE = "Create New Secret" BUTTON_CREATE = "Utwórz nową frazę"
BUTTON_CLEAR = "Clear" BUTTON_CLEAR = "Wyczyść"
BUTTON_TEST = "Test" BUTTON_TEST = "Testuj"
BUTTON_SHOW_SECRET = "Show Secret" BUTTON_SHOW_SECRET = "Pokaż frazę"
BUTTON_HIDE_SECRET = "Hide Secret" BUTTON_HIDE_SECRET = "Ukryj frazę"
TWO_FACTOR_SECRET_CONFIGURED_DESC = "Configured" TWO_FACTOR_SECRET_CONFIGURED_DESC = "Skonfigurowane"
TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Not configured" TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Nie skonfigurowane"
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_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 = "If you can't receive codes via Google Authenticator, you can use backup codes to sign in. After youve used a backup code to sign in, it will become inactive." 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] [SETTINGS_GENERAL]
LEGEND_GENERAL = "Ogólne" LEGEND_GENERAL = "Ogólne"
LABEL_LANGUAGE = "Język" LABEL_LANGUAGE = "Język"
LABEL_EDITOR = "Domyślny edytor tekstu" LABEL_EDITOR = "Format wiadomości"
LABEL_EDITOR_HTML_AS_DEFAULT = "HTML" LABEL_EDITOR_HTML_AS_DEFAULT = "HTML"
LABEL_EDITOR_PLAIN_AS_DEFAULT = "Zwykły tekst" LABEL_EDITOR_PLAIN_AS_DEFAULT = "Zwykły tekst"
LABEL_ANIMATION = "Animacja interfejsu" LABEL_ANIMATION = "Animacja interfejsu"
@ -391,10 +400,10 @@ LABEL_ANIMATION_NORMAL = "Zwykła"
LABEL_ANIMATION_NONE = "Brak" LABEL_ANIMATION_NONE = "Brak"
LABEL_VIEW_OPTIONS = "Opcje wyświetlania" LABEL_VIEW_OPTIONS = "Opcje wyświetlania"
LABEL_USE_PREVIEW_PANE = "Wyświetl okno podglądu" 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_USE_THREADS = "Używaj wątków"
LABEL_REPLY_SAME_FOLDER = "Umieść odpowiedź w folderze wiadomości na którą udzielana jest odpowiedź" 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_SHOW_IMAGES = "Zawsze wyświetlaj obrazy w wiadomościach"
LABEL_SHOW_ANIMATION = "Odtwarzaj animacje" LABEL_SHOW_ANIMATION = "Odtwarzaj animacje"
LABEL_MESSAGE_PER_PAGE = "wiadomości na stronie" LABEL_MESSAGE_PER_PAGE = "wiadomości na stronie"
LABEL_CHROME_NOTIFICATION = "Powiadomienia" LABEL_CHROME_NOTIFICATION = "Powiadomienia"
@ -404,38 +413,38 @@ LABEL_CHROME_NOTIFICATION_DESC_DENIED = "(Zablokowane przez przeglądarkę)"
[SETTINGS_CONTACTS] [SETTINGS_CONTACTS]
LEGEND_CONTACTS = "Kontakty" LEGEND_CONTACTS = "Kontakty"
LABEL_CONTACTS_AUTOSAVE = "Automatycznie dodaj nieznanych nadawców i odbiorców do książki adresowej" LABEL_CONTACTS_AUTOSAVE = "Automatycznie dodaj nieznanych nadawców i odbiorców do książki adresowej"
LEGEND_CONTACTS_SYNC = "Remote Synchronization (CardDAV)" LEGEND_CONTACTS_SYNC = "Zdalna synchronizacja (CardDAV)"
LABEL_CONTACTS_SYNC_ENABLE = "Enable remote synchronization" LABEL_CONTACTS_SYNC_ENABLE = "Włącz zdalną synchronizację"
LABEL_CONTACTS_SYNC_SERVER = "Server" LABEL_CONTACTS_SYNC_SERVER = "Serwer"
LABEL_CONTACTS_SYNC_AB_URL = "Addressbook URL" LABEL_CONTACTS_SYNC_AB_URL = "Adres URL"
LABEL_CONTACTS_SYNC_USER = "User" LABEL_CONTACTS_SYNC_USER = "Użytkownik"
LABEL_CONTACTS_SYNC_PASSWORD = "Password" LABEL_CONTACTS_SYNC_PASSWORD = "Hasło"
[SETTINGS_THEMES] [SETTINGS_THEMES]
LEGEND_THEMES = "Wygląd" LEGEND_THEMES = "Skórki"
LEGEND_THEMES_CUSTOM = "Konfiguracja indywidualnego wyglądu" LEGEND_THEMES_CUSTOM = "Konfiguracja indywidualnego wyglądu"
LABEL_CUSTOM_TYPE = "Typ" LABEL_CUSTOM_TYPE = "Typ"
LABEL_CUSTOM_TYPE_LIGHT = "Jasny" LABEL_CUSTOM_TYPE_LIGHT = "Jasny"
LABEL_CUSTOM_TYPE_DARK = "Ciemny" LABEL_CUSTOM_TYPE_DARK = "Ciemny"
LABEL_CUSTOM_BACKGROUND_IMAGE = "Tło" LABEL_CUSTOM_BACKGROUND_IMAGE = "Tło"
BUTTON_UPLOAD_BACKGROUND_IMAGE = "Prześlij własne tło (.JPG, .PNG)" 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_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" ERROR_UNKNOWN = "Wystąpił nieznany błąd w trakcie przesyłania"
[SETTINGS_SOCIAL] [SETTINGS_SOCIAL]
LEGEND_GOOGLE = "Google Account" LEGEND_GOOGLE = "Google Account"
BUTTON_GOOGLE_CONNECT = "Połącz z Google" BUTTON_GOOGLE_CONNECT = "Połącz z Google"
BUTTON_GOOGLE_DISCONNECT = "Odłącz z Google" BUTTON_GOOGLE_DISCONNECT = "Odłącz"
MAIN_GOOGLE_DESC = "Po zezwoleniu na logowanie przez Google, możesz zalogować się na to konto używając guzika Google w panelu logowania." 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" LEGEND_FACEBOOK = "Facebook"
BUTTON_FACEBOOK_CONNECT = "Połącz z Facebook" BUTTON_FACEBOOK_CONNECT = "Połącz z Facebook"
BUTTON_FACEBOOK_DISCONNECT = "Odłącz z Facebook" BUTTON_FACEBOOK_DISCONNECT = "Odłącz"
MAIN_FACEBOOK_DESC = "Po zezwoleniu na logowanie przez Facebook, możesz zalogować się na to konto używając guzika Facebook w panelu logowania." 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" LEGEND_TWITTER = "Twitter"
BUTTON_TWITTER_CONNECT = "Połącz z Twitter" BUTTON_TWITTER_CONNECT = "Połącz z Twitter"
BUTTON_TWITTER_DISCONNECT = "Odłącz z Twitter" BUTTON_TWITTER_DISCONNECT = "Odłącz"
MAIN_TWITTER_DESC = "Po zezwoleniu na logowanie przez Twitter, możesz zalogować się na to konto używając guzika Twitter w panelu logowania." 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] [SETTINGS_FOLDERS]
LEGEND_FOLDERS = "Lista Folderów" LEGEND_FOLDERS = "Lista Folderów"
@ -459,16 +468,16 @@ DELETING_ASK = "Czy na pewno usunąć?"
[SETTINGS_IDENTITIES] [SETTINGS_IDENTITIES]
LEGEND_IDENTITY = "Tożsamość" LEGEND_IDENTITY = "Tożsamość"
LEGEND_IDENTITIES = "Dodatkowe Tożsamości" LEGEND_IDENTITIES = "Dodatkowe tożsamości"
LABEL_DEFAULT = "Default" LABEL_DEFAULT = "Domyślna"
LABEL_DISPLAY_NAME = "Nazwa" LABEL_DISPLAY_NAME = "Nazwa"
LABEL_REPLY_TO = "Odp. do" LABEL_REPLY_TO = "Odpowiedź do"
LABEL_SIGNATURE = "Podpis" LABEL_SIGNATURE = "Podpis"
LABEL_ADD_SIGNATURE_TO_ALL = "Dodaj podpis do wszystkich wysyłanych wiadomości" 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ń" BUTTON_DELETE = "Usuń"
LOADING_PROCESS = "Trwa aktualizowanie listy tożsamości" LOADING_PROCESS = "Trwa aktualizowanie listy tożsamości"
DELETING_ASK = "Jesteś pewny(a)?" DELETING_ASK = "Czy na pewno chcesz usunąć ?"
[SETTINGS_CHANGE_PASSWORD] [SETTINGS_CHANGE_PASSWORD]
LEGEND_CHANGE_PASSWORD = "Zmiana hasła" LEGEND_CHANGE_PASSWORD = "Zmiana hasła"
@ -476,67 +485,67 @@ LABEL_CURRENT_PASSWORD = "Aktualne hasło"
LABEL_NEW_PASSWORD = "Nowe hasło" LABEL_NEW_PASSWORD = "Nowe hasło"
LABEL_REPEAT_PASSWORD = "Powtórz nowe hasło" LABEL_REPEAT_PASSWORD = "Powtórz nowe hasło"
BUTTON_UPDATE_PASSWORD = "Zmień hasło na nowe" 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] [SETTINGS_OPEN_PGP]
LEGEND_OPEN_PGP = "OpenPGP" LEGEND_OPEN_PGP = "OpenPGP"
BUTTON_ADD_OPEN_PGP_KEY = "Import OpenPGP Key" BUTTON_ADD_OPEN_PGP_KEY = "Importuj klucz OpenPGP"
BUTTON_GENERATE_OPEN_PGP_KEYS = "Generate OpenPGP Keys" BUTTON_GENERATE_OPEN_PGP_KEYS = "Generuj klucz OpenPGP"
TITLE_PRIVATE = "Private" TITLE_PRIVATE = "Prywatny"
TITLE_PUBLIC = "Public" TITLE_PUBLIC = "Publiczny"
DELETING_ASK = "Are you sure?" DELETING_ASK = "Czy na pewno chcesz usunąć ?"
[SHORTCUTS_HELP] [SHORTCUTS_HELP]
LEGEND_SHORTCUTS_HELP = "Keyboard shortcuts help" LEGEND_SHORTCUTS_HELP = "Skróty klawiaturowe"
TAB_MAILBOX = "Mailbox" TAB_MAILBOX = "Skrzynka pocztowa"
TAB_MESSAGE_LIST = "Message list" TAB_MESSAGE_LIST = "Lista wiadomości"
TAB_MESSAGE_VIEW = "Message view" TAB_MESSAGE_VIEW = "Widok wiadomości"
TAB_COMPOSE = "Compose" TAB_COMPOSE = "Tworzenie wiadomości"
LABEL_OPEN_USER_DROPDOWN = "Open user dropdown" LABEL_OPEN_USER_DROPDOWN = "Otwórz podręczne menu użytkownika"
LABEL_REPLY = "Reply" LABEL_REPLY = "Odpowiedz"
LABEL_REPLY_ALL = "Reply All" LABEL_REPLY_ALL = "Odpowiedz wszystkim"
LABEL_FORWARD = "Forward" LABEL_FORWARD = "Przekaż"
LABEL_FORWARD_MULTIPLY = "Forward (multiply)" LABEL_FORWARD_MULTIPLY = "Przekaż (wielokrotnie)"
LABEL_HELP = "Help" LABEL_HELP = "Pomoc"
LABEL_CHECK_ALL = "Check All messages" LABEL_CHECK_ALL = "Sprawdź wszystkie wiadomości"
LABEL_ARCHIVE = "Archive" LABEL_ARCHIVE = "Archiwum"
LABEL_DELETE = "Delete" LABEL_DELETE = "Usuń"
LABEL_MOVE = "Move" LABEL_MOVE = "Przenieś"
LABEL_READ = "Read selected messages" LABEL_READ = "Oznacz zaznaczone wiadomości, jako przeczytane"
LABEL_UNREAD = "Unread selected messages" LABEL_UNREAD = "Oznacz zaznaczone wiadomości, jako nieprzeczytane"
LABEL_IMPORTANT = "Important, star/flag selected messages" LABEL_IMPORTANT = "Oznacz zaznaczone wiadomości, jako ważne"
LABEL_SEARCH = "Search" LABEL_SEARCH = "Szukaj"
LABEL_CANCEL_SEARCH = "Cancel search" LABEL_CANCEL_SEARCH = "Anuluj szukanie"
LABEL_FULLSCREEN_ENTER = "Fullscreen (Preview pane layout)" LABEL_FULLSCREEN_ENTER = "Pełny ekran (aktywny podgląd wiadomości)"
LABEL_VIEW_MESSAGE_ENTER = "View message (No preview pane layout)" LABEL_VIEW_MESSAGE_ENTER = "Pokaż wiadomość (nieaktywny podgląd wiadomości)"
LABEL_SWITCH_TO_MESSAGE = "Switch focus to selected message" LABEL_SWITCH_TO_MESSAGE = "Wybrana wiadomość na pierwszym planie"
LABEL_SWITCH_TO_FOLDER_LIST = "Switch focus to folder list" LABEL_SWITCH_TO_FOLDER_LIST = "Lista folderów na pierwszym planie"
LABEL_FULLSCREEN_TOGGLE = "Toggle fullscreen mode" LABEL_FULLSCREEN_TOGGLE = "Tryb pełnoekranowy"
LABEL_BLOCKQUOTES_TOGGLE = "Toggle message blockquotes" LABEL_BLOCKQUOTES_TOGGLE = "Cytowanie wiadomości"
LABEL_PRINT = "Print" LABEL_PRINT = "Drukuj"
LABEL_EXIT_FULLSCREEN = "Exit fullscreen mode" LABEL_EXIT_FULLSCREEN = "Opuść tryb pełnoekranowy"
LABEL_CLOSE_MESSAGE = "Close message (No preview pane layout)" LABEL_CLOSE_MESSAGE = "Zamknij wiadomość (nieaktywny podgląd wiadomości)"
LABEL_SWITCH_TO_LIST = "Switch focus back to message list" LABEL_SWITCH_TO_LIST = "Powróc do widoku listy wiadomości"
LABEL_OPEN_COMPOSE_POPUP = "Open compose popup" LABEL_OPEN_COMPOSE_POPUP = "Otwórz okno tworzenia wiadomości"
LABEL_OPEN_IDENTITIES_DROPDOWN = "Open identities dropdown" LABEL_OPEN_IDENTITIES_DROPDOWN = "Otwórz menu wyboru tożsamości"
LABEL_SAVE_MESSAGE = "Save message" LABEL_SAVE_MESSAGE = "Zapisz wiadomość"
LABEL_SEND_MESSAGE = "Send message" LABEL_SEND_MESSAGE = "Wyślij wiadomość"
LABEL_CLOSE_COMPOSE = "Close compose" LABEL_CLOSE_COMPOSE = "Zamknij okno tworzenia wiadomości"
[PGP_NOTIFICATIONS] [PGP_NOTIFICATIONS]
NO_PUBLIC_KEYS_FOUND = "No public keys found" NO_PUBLIC_KEYS_FOUND = "Nie znaleziono kluczy publicznych"
NO_PUBLIC_KEYS_FOUND_FOR = "No public keys found for "%EMAIL%" email" NO_PUBLIC_KEYS_FOUND_FOR = "Nie znaleziono kluczy publicznych dla adresu: "%EMAIL%""
NO_PRIVATE_KEY_FOUND = "No private key found" NO_PRIVATE_KEY_FOUND = "Nie znaleziono kluczy prywatnych"
NO_PRIVATE_KEY_FOUND_FOR = "No private key found for "%EMAIL%" email" NO_PRIVATE_KEY_FOUND_FOR = "Nie znaleziono kluczy prywatnych dla adresu: "%EMAIL%""
UNVERIFIRED_SIGNATURE = "Unverified signature" UNVERIFIRED_SIGNATURE = "Niezweryfikowana sygnatura"
DECRYPTION_ERROR = "OpenPGP decryption error" DECRYPTION_ERROR = "Błąd deszyfrowania OpenPGP"
GOOD_SIGNATURE = "Good signature from %USER%" GOOD_SIGNATURE = "Wiadomość podpisana przez: %USER%"
PGP_ERROR = "OpenPGP error: %ERROR%" PGP_ERROR = "Błąd OpenPGP: %ERROR%"
SPECIFY_FROM_EMAIL = "Please specify FROM email address" SPECIFY_FROM_EMAIL = "Proszę podać adres e-mail w polu: OD"
SPECIFY_AT_LEAST_ONE_RECIPIENT = "Please specify at least one recipient" SPECIFY_AT_LEAST_ONE_RECIPIENT = "Proszę podać przynajmniej jednego odbiorcę"
[NOTIFICATIONS] [NOTIFICATIONS]
INVALID_TOKEN = "Nieprawidłowy token" INVALID_TOKEN = "Nieprawidłowy token"
@ -544,19 +553,19 @@ AUTH_ERROR = "Błąd autoryzacji"
ACCESS_ERROR = "Błąd dostępu" ACCESS_ERROR = "Błąd dostępu"
CONNECTION_ERROR = "Błąd połączenia z serwerem" CONNECTION_ERROR = "Błąd połączenia z serwerem"
CAPTCHA_ERROR = "Nieprawidłowy kod CAPTCHA" 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_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 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_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 (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" 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 nie dozwolona" DOMAIN_NOT_ALLOWED = "Domena niedozwolona"
ACCOUNT_NOT_ALLOWED = "Konto nie jest dozwolone" ACCOUNT_NOT_ALLOWED = "Konto nie jest dozwolone"
ACCOUNT_TWO_FACTOR_AUTH_REQUIRED = "Two factor verification required" ACCOUNT_TWO_FACTOR_AUTH_REQUIRED = "Wymagana 2-stopniowa weryfikacja"
ACCOUNT_TWO_FACTOR_AUTH_ERROR = "Two factor verification error" ACCOUNT_TWO_FACTOR_AUTH_ERROR = "Błąd 2-stopniowej weryfikacji"
COULD_NOT_SAVE_NEW_PASSWORD = "Could not save new password" COULD_NOT_SAVE_NEW_PASSWORD = "Nie można było zapisać nowego hasła"
CURRENT_PASSWORD_INCORRECT = "Current password incorrect" CURRENT_PASSWORD_INCORRECT = "Obecne hasło jest niepoprawne"
NEW_PASSWORD_SHORT = "Password is too short" NEW_PASSWORD_SHORT = "Hasło jest za krótkie"
NEW_PASSWORD_WEAK = "Password is too easy" NEW_PASSWORD_WEAK = "Hasło jest zbyt łatwe"
NEW_PASSWORD_FORBIDDENT = "Password contains forbidden characters" NEW_PASSWORD_FORBIDDENT = "Hasło zawiera zakazane znaki"
CONTACTS_SYNC_ERROR = "Contacts synchronization error" CONTACTS_SYNC_ERROR = "Błąd synchronizacji kontaktów"
CANT_GET_MESSAGE_LIST = "Nie jest możliwe pobranie listy wiadomości" CANT_GET_MESSAGE_LIST = "Nie jest możliwe pobranie listy wiadomości"
CANT_GET_MESSAGE = "Nie można pobrać wiadomości" CANT_GET_MESSAGE = "Nie można pobrać wiadomości"
CANT_DELETE_MESSAGE = "Nie można usunąć 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." 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" ACCOUNT_ALREADY_EXISTS = "Konto o takiej nazwie już istnieje"
MAIL_SERVER_ERROR = "Wystąpił błąd w trakcie połączenia z serwerem poczty" 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" UNKNOWN_ERROR = "Nieznany błąd"
[STATIC] [STATIC]
BACK_LINK = "Przeładuj" BACK_LINK = "Odśwież"
DOMAIN_LIST_DESC = "Lista domen do których webmail ma dostęp." DOMAIN_LIST_DESC = "Lista domen do których webmail ma dostęp"
PHP_EXSTENSIONS_ERROR_DESC = "Wymagane rozszerzenia PHP są niedostępne!" 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!" 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_TITLE = "Ta aplikacja wymaga JavaScript"
NO_SCRIPT_DESC = "Twoja przeglądarka nie obsługuje 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." 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_TITLE = "Ta aplikacja wymaga plików Cookies"
NO_COOKIE_DESC = "Obsługa Cookies jest wyłączona w twojej przeglądarce. 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." 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_TITLE = "Twoja przeglądarka jest przestarzała!"
BAD_BROWSER_DESC = "W celu wykorzystania wszystkich funkcji tej aplikacji, BAD_BROWSER_DESC = "W celu wykorzystania wszystkich funkcji tej aplikacji,

View file

@ -5,8 +5,6 @@
$div = $('<div></div>'), $div = $('<div></div>'),
trim = $.trim,
/** /**
* @param {string} sHtml * @param {string} sHtml
* @return {string} * @return {string}
@ -14,40 +12,69 @@
htmlToPlain = function (sHtml) htmlToPlain = function (sHtml)
{ {
var var
iPos = 0,
iP1 = 0,
iP2 = 0,
iP3 = 0,
iLimit = 0,
sText = '', sText = '',
sQuoteChar = '> ',
convertBlockquote = function () { splitPlainText = function (sText)
if (arguments && 1 < arguments.length) {
var
iLen = 100,
sPrefix = '',
sSubText = '',
sResult = sText,
iSpacePos = 0,
iNewLinePos = 0
;
while (sResult.length > iLen)
{ {
var sSubText = sResult.substring(0, iLen);
sText = trim(arguments[1]) iSpacePos = sSubText.lastIndexOf(' ');
.replace(/__bq__start__([\s\S\n\r]*)__bq__end__/gm, convertBlockquote) 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 () { if (-1 === iSpacePos)
return (arguments && 1 < arguments.length) ? '\n' + trim(arguments[1].replace(/[\s]/, '')) + ' ' : ''; {
}); 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 () { convertDivs = function () {
if (arguments && 1 < arguments.length) if (arguments && 1 < arguments.length)
{ {
var sText = trim(arguments[1]); var sText = $.trim(arguments[1]);
if (0 < sText.length) 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'; sText = '\n' + $.trim(sText) + '\n';
} }
return sText; return sText;
} }
return ''; return '';
}, },
@ -57,7 +84,7 @@
}, },
convertLinks = function () { 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__start__\n')
.replace(/<\/blockquote>/gmi, '\n__bq__end__\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(/&nbsp;/gi, ' ') .replace(/&nbsp;/gi, ' ')
.replace(/&gt;/gi, '>') .replace(/&quot;/gi, '"')
.replace(/&lt;/gi, '<')
.replace(/&amp;/gi, '&') .replace(/&amp;/gi, '&')
.replace(/<[^>]*>/gm, '') .replace(/<[^>]*>/gm, '')
; ;
sText = $div.html(sText).text();
sText = sText sText = sText
.replace(/\n[ \t]+/gm, '\n') .replace(/\n[ \t]+/gm, '\n')
.replace(/[\n]{3,}/gm, '\n\n') .replace(/[\n]{3,}/gm, '\n\n')
.replace(/__bq__start__([\s\S\r\n]*)__bq__end__/gm, convertBlockquote) .replace(/&gt;/gi, '>')
.replace(/&lt;/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__start__/gm, '')
.replace(/__bq__end__/gm, '') .replace(/__bq__end__/gm, '')
; ;
return $div.html(sText).text(); return sText;
}, },
/** /**
@ -100,9 +168,77 @@
*/ */
plainToHtml = function (sPlain) plainToHtml = function (sPlain)
{ {
return sPlain.toString() sPlain = sPlain.toString().replace(/\r/g, '');
.replace(/&/g, '&amp;').replace(/>/g, '&gt;').replace(/</g, '&lt;')
.replace(/\r/g, '').replace(/\n/g, '<br />'); 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, '&amp;')
.replace(/>/g, '&gt;').replace(/</g, '&lt;')
.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;
} }
; ;
@ -226,7 +362,7 @@ CKEDITOR.plugins.plain = {
if (editor.mode === 'wysiwyg') { if (editor.mode === 'wysiwyg') {
editor.fire('saveSnapshot'); editor.fire('saveSnapshot');
} }
editor.getCommand('plain').setState(CKEDITOR.TRISTATE_DISABLED); editor.getCommand('plain').setState(CKEDITOR.TRISTATE_DISABLED);
editor.setMode(editor.mode === 'plain' ? 'wysiwyg' : 'plain'); editor.setMode(editor.mode === 'plain' ? 'wysiwyg' : 'plain');
}, },

View file

@ -637,7 +637,7 @@
border-radius: 8px; border-radius: 8px;
} }
/*! normalize.css 2012-03-11T12:53 UTC - http://github.com/necolas/normalize.css */ /*! normalize.css 2012-03-11T12:53 UTC - http://github.com/necolas/normalize.css */
/* ============================================================================= /* =============================================================================
@ -1142,7 +1142,7 @@ table {
border-collapse: collapse; border-collapse: collapse;
border-spacing: 0; border-spacing: 0;
} }
@charset "UTF-8"; @charset "UTF-8";
@font-face { @font-face {
@ -1513,7 +1513,7 @@ table {
.icon-resize-out:before { .icon-resize-out:before {
content: "\e06d"; content: "\e06d";
} }
/** initial setup **/ /** initial setup **/
.nano { .nano {
/* /*
@ -1630,7 +1630,7 @@ table {
.nano > .pane2:hover > .slider2, .nano > .pane2.active > .slider2 { .nano > .pane2:hover > .slider2, .nano > .pane2.active > .slider2 {
background-color: rgba(0, 0, 0, 0.4); background-color: rgba(0, 0, 0, 0.4);
} }
/* Magnific Popup CSS */ /* Magnific Popup CSS */
.mfp-bg { .mfp-bg {
top: 0; top: 0;
@ -1995,7 +1995,7 @@ img.mfp-img {
right: 0; right: 0;
padding-top: 0; } padding-top: 0; }
/* overlay at start */ /* overlay at start */
.mfp-fade.mfp-bg { .mfp-fade.mfp-bg {
@ -2041,7 +2041,7 @@ img.mfp-img {
-moz-transform: translateX(50px); -moz-transform: translateX(50px);
transform: translateX(50px); transform: translateX(50px);
} }
.simple-pace { .simple-pace {
-webkit-pointer-events: none; -webkit-pointer-events: none;
pointer-events: none; pointer-events: none;
@ -2112,7 +2112,7 @@ img.mfp-img {
@keyframes simple-pace-stripe-animation { @keyframes simple-pace-stripe-animation {
0% { transform: none; transform: none; } 0% { transform: none; transform: none; }
100% { transform: translate(-32px, 0); transform: translate(-32px, 0); } 100% { transform: translate(-32px, 0); transform: translate(-32px, 0); }
} }
.inputosaurus-container { .inputosaurus-container {
background-color:#fff; background-color:#fff;
border:1px solid #bcbec0; border:1px solid #bcbec0;
@ -2180,7 +2180,7 @@ img.mfp-img {
box-shadow:none; box-shadow:none;
} }
.inputosaurus-input-hidden { display:none; } .inputosaurus-input-hidden { display:none; }
.flag-wrapper { .flag-wrapper {
width: 24px; width: 24px;
height: 16px; height: 16px;
@ -2226,7 +2226,7 @@ img.mfp-img {
.flag.flag-pt-br {background-position: -192px -11px} .flag.flag-pt-br {background-position: -192px -11px}
.flag.flag-cn, .flag.flag-zh-tw, .flag.flag-zh-cn, .flag.flag-zh-hk {background-position: -208px -22px} .flag.flag-cn, .flag.flag-zh-tw, .flag.flag-zh-cn, .flag.flag-zh-hk {background-position: -208px -22px}
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
.clearfix { .clearfix {
*zoom: 1; *zoom: 1;
@ -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 { .messageView .b-content .messageItem .bodyText .b-text-part .rl-bq-switcher.hidden-bq {
display: none; 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] { .messageView .b-content .messageItem .bodyText .b-text-part.html div[data-x-div-type=body] {
margin: 15px; margin: 15px;
} }

File diff suppressed because one or more lines are too long

View file

@ -78,7 +78,7 @@ var
NotificationClass = window.Notification && window.Notification.requestPermission ? window.Notification : null NotificationClass = window.Notification && window.Notification.requestPermission ? window.Notification : null
; ;
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/*jshint onevar: false*/ /*jshint onevar: false*/
@ -87,7 +87,7 @@ var
*/ */
var RL = null; var RL = null;
/*jshint onevar: true*/ /*jshint onevar: true*/
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -203,7 +203,6 @@ Globals.oHtmlEditorDefaultConfig = {
'allowedContent': true, 'allowedContent': true,
'autoParagraph': false, 'autoParagraph': false,
'fillEmptyBlocks': false,
'enterMode': window.CKEDITOR.ENTER_BR, 'enterMode': window.CKEDITOR.ENTER_BR,
'shiftEnterMode': window.CKEDITOR.ENTER_BR, 'shiftEnterMode': window.CKEDITOR.ENTER_BR,
@ -244,7 +243,7 @@ if (Globals.bAllowPdfPreview && navigator && navigator.mimeTypes)
return oType && 'application/pdf' === oType.type; return oType && 'application/pdf' === oType.type;
}); });
} }
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
Consts.Defaults = {}; Consts.Defaults = {};
@ -364,7 +363,7 @@ Consts.DataImages.UserDotPic = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA
* @type {string} * @type {string}
*/ */
Consts.DataImages.TranspPic = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQIW2NkAAIAAAoAAggA9GkAAAAASUVORK5CYII='; Consts.DataImages.TranspPic = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQIW2NkAAIAAAoAAggA9GkAAAAASUVORK5CYII=';
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -795,7 +794,7 @@ Enums.Notification = {
'UnknownNotification': 999, 'UnknownNotification': 999,
'UnknownError': 999 'UnknownError': 999
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
Utils.trim = $.trim; Utils.trim = $.trim;
@ -2258,6 +2257,7 @@ Utils.settingsSaveHelperSimpleFunction = function (koTrigger, oContext)
return Utils.settingsSaveHelperFunction(null, koTrigger, oContext, 1000); return Utils.settingsSaveHelperFunction(null, koTrigger, oContext, 1000);
}; };
Utils.$div = $('<div></div>');
/** /**
* @param {string} sHtml * @param {string} sHtml
@ -2266,24 +2266,54 @@ Utils.settingsSaveHelperSimpleFunction = function (koTrigger, oContext)
Utils.htmlToPlain = function (sHtml) Utils.htmlToPlain = function (sHtml)
{ {
var var
iPos = 0,
iP1 = 0,
iP2 = 0,
iP3 = 0,
iLimit = 0,
sText = '', sText = '',
sQuoteChar = '> ',
convertBlockquote = function () { splitPlainText = function (sText)
if (arguments && 1 < arguments.length) {
var
iLen = 100,
sPrefix = '',
sSubText = '',
sResult = sText,
iSpacePos = 0,
iNewLinePos = 0
;
while (sResult.length > iLen)
{ {
var sText = $.trim(arguments[1]) sSubText = sResult.substring(0, iLen);
.replace(/__bq__start__(.|[\s\S\n\r]*)__bq__end__/gm, convertBlockquote) 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 () { if (-1 === iSpacePos)
return (arguments && 1 < arguments.length) ? '\n' + $.trim(arguments[1].replace(/[\s]/, '')) + ' ' : ''; {
}); 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 () { convertDivs = function () {
@ -2292,40 +2322,23 @@ Utils.htmlToPlain = function (sHtml)
var sText = $.trim(arguments[1]); var sText = $.trim(arguments[1]);
if (0 < sText.length) 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'; sText = '\n' + $.trim(sText) + '\n';
} }
return sText; return sText;
} }
return ''; return '';
}, },
fixAttibuteValue = function () { fixAttibuteValue = function () {
if (arguments && 1 < arguments.length) return (arguments && 1 < arguments.length) ?
{ '' + arguments[1] + arguments[2].replace(/</g, '&lt;').replace(/>/g, '&gt;') : '';
return '' + arguments[1] + arguments[2].replace(/</g, '&lt;').replace(/>/g, '&gt;');
}
return '';
}, },
convertLinks = function () { convertLinks = function () {
if (arguments && 1 < arguments.length) return (arguments && 1 < arguments.length) ? $.trim(arguments[1]) : '';
{
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 '';
} }
; ;
@ -2340,25 +2353,67 @@ Utils.htmlToPlain = function (sHtml)
.replace(/<\/tr>/gi, '\n') .replace(/<\/tr>/gi, '\n')
.replace(/<hr[^>]*>/gmi, '\n_______________________________\n\n') .replace(/<hr[^>]*>/gmi, '\n_______________________________\n\n')
.replace(/<img [^>]*>/gmi, '') .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__start__\n')
.replace(/<\/blockquote>/gmi, '\n__bq__end__\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(/&nbsp;/gi, ' ') .replace(/&nbsp;/gi, ' ')
.replace(/<[^>]*>/gm, '') .replace(/&quot;/gi, '"')
.replace(/&gt;/gi, '>')
.replace(/&lt;/gi, '<')
.replace(/&amp;/gi, '&') .replace(/&amp;/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[ \t]+/gm, '\n')
.replace(/[\n]{3,}/gm, '\n\n') .replace(/[\n]{3,}/gm, '\n\n')
.replace(/__bq__start__(.|[\s\S\r\n]*)__bq__end__/gm, convertBlockquote) .replace(/&gt;/gi, '>')
.replace(/&lt;/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__start__/gm, '')
.replace(/__bq__end__/gm, '') .replace(/__bq__end__/gm, '')
; ;
return sText;
}; };
/** /**
@ -2367,9 +2422,77 @@ Utils.htmlToPlain = function (sHtml)
*/ */
Utils.plainToHtml = function (sPlain) Utils.plainToHtml = function (sPlain)
{ {
return sPlain.toString() sPlain = sPlain.toString().replace(/\r/g, '');
.replace(/&/g, '&amp;').replace(/>/g, '&gt;').replace(/</g, '&lt;')
.replace(/\r/g, '').replace(/\n/g, '<br />'); 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, '&amp;')
.replace(/>/g, '&gt;').replace(/</g, '&lt;')
.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) Utils.resizeAndCrop = function (sUrl, iValue, fCallback)
@ -2578,7 +2701,7 @@ Utils.detectDropdownVisibility = _.debounce(function () {
return oItem.hasClass('open'); return oItem.hasClass('open');
})); }));
}, 50); }, 50);
/*jslint bitwise: true*/ /*jslint bitwise: true*/
// Base64 encode / decode // Base64 encode / decode
// http://www.webtoolkit.info/ // http://www.webtoolkit.info/
@ -2742,7 +2865,7 @@ Base64 = {
} }
}; };
/*jslint bitwise: false*/ /*jslint bitwise: false*/
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
ko.bindingHandlers.tooltip = { ko.bindingHandlers.tooltip = {
@ -3585,7 +3708,7 @@ ko.observable.fn.validateFunc = function (fFunc)
return this; return this;
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -3891,7 +4014,7 @@ LinkBuilder.prototype.socialFacebook = function ()
{ {
return this.sServer + 'SocialFacebook' + ('' !== this.sSpecSuffix ? '/' + this.sSpecSuffix + '/' : ''); return this.sServer + 'SocialFacebook' + ('' !== this.sSpecSuffix ? '/' + this.sSpecSuffix + '/' : '');
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -3987,7 +4110,7 @@ Plugins.settingsGet = function (sPluginSection, sName)
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -4063,7 +4186,7 @@ CookieDriver.prototype.get = function (sKey)
return mResult; return mResult;
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -4136,7 +4259,7 @@ LocalStorageDriver.prototype.get = function (sKey)
return mResult; return mResult;
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -4181,7 +4304,7 @@ LocalStorage.prototype.get = function (iKey)
{ {
return this.oDriver ? this.oDriver.get('p' + iKey) : null; return this.oDriver ? this.oDriver.get('p' + iKey) : null;
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -4196,7 +4319,7 @@ KnoinAbstractBoot.prototype.bootstart = function ()
{ {
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -4291,7 +4414,7 @@ KnoinAbstractViewModel.prototype.registerPopupKeyDown = function ()
return true; return true;
}); });
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -4369,7 +4492,7 @@ KnoinAbstractScreen.prototype.__start = function ()
this.oCross = oRoute; this.oCross = oRoute;
} }
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -4785,7 +4908,7 @@ Knoin.prototype.bootstart = function ()
}; };
kn = new Knoin(); kn = new Knoin();
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -5151,7 +5274,7 @@ EmailModel.prototype.inputoTagLine = function ()
{ {
return 0 < this.name.length ? this.name + ' (' + this.email + ')' : this.email; return 0 < this.name.length ? this.name + ' (' + this.email + ')' : this.email;
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -5197,7 +5320,7 @@ ContactTagModel.prototype.toLine = function (bEncodeHtml)
return (Utils.isUnd(bEncodeHtml) ? false : !!bEncodeHtml) ? return (Utils.isUnd(bEncodeHtml) ? false : !!bEncodeHtml) ?
Utils.encodeHtml(this.name()) : this.name(); Utils.encodeHtml(this.name()) : this.name();
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -5494,7 +5617,7 @@ PopupsDomainViewModel.prototype.clearForm = function ()
this.smtpAuth(true); this.smtpAuth(true);
this.whiteList(''); this.whiteList('');
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -5638,7 +5761,7 @@ PopupsPluginViewModel.prototype.onBuild = function ()
return false; return false;
}, this)); }, this));
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -5756,7 +5879,7 @@ PopupsActivateViewModel.prototype.validateSubscriptionKey = function ()
{ {
var sValue = this.key(); var sValue = this.key();
return '' === sValue || !!/^RL[\d]+-[A-Z0-9\-]+Z$/.test(Utils.trim(sValue)); return '' === sValue || !!/^RL[\d]+-[A-Z0-9\-]+Z$/.test(Utils.trim(sValue));
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -5818,7 +5941,7 @@ PopupsLanguagesViewModel.prototype.changeLanguage = function (sLang)
RL.data().mainLanguage(sLang); RL.data().mainLanguage(sLang);
this.cancelCommand(); this.cancelCommand();
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -5931,7 +6054,7 @@ PopupsAskViewModel.prototype.onBuild = function ()
}, this)); }, this));
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -6020,7 +6143,7 @@ AdminLoginViewModel.prototype.onHide = function ()
{ {
this.loginFocus(false); this.loginFocus(false);
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -6046,7 +6169,7 @@ AdminMenuViewModel.prototype.link = function (sRoute)
{ {
return '#/' + sRoute; return '#/' + sRoute;
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -6072,7 +6195,7 @@ AdminPaneViewModel.prototype.logoutClick = function ()
RL.remote().adminLogout(function () { RL.remote().adminLogout(function () {
RL.loginAndLogoutReload(); RL.loginAndLogoutReload();
}); });
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -6200,7 +6323,7 @@ AdminGeneral.prototype.phpInfoLink = function ()
return RL.link().phpInfo(); return RL.link().phpInfo();
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -6247,7 +6370,7 @@ AdminLogin.prototype.onBuild = function ()
}, 50); }, 50);
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -6318,7 +6441,7 @@ AdminBranding.prototype.onBuild = function ()
}, 50); }, 50);
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -6540,7 +6663,7 @@ AdminContacts.prototype.onBuild = function ()
}, 50); }, 50);
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -6631,7 +6754,7 @@ AdminDomains.prototype.onDomainListChangeRequest = function ()
{ {
RL.reloadDomainList(); RL.reloadDomainList();
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -6746,7 +6869,7 @@ AdminSecurity.prototype.phpInfoLink = function ()
{ {
return RL.link().phpInfo(); return RL.link().phpInfo();
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -6874,7 +6997,7 @@ AdminSocial.prototype.onBuild = function ()
}, 50); }, 50);
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -6973,7 +7096,7 @@ AdminPlugins.prototype.onPluginDisableRequest = function (sResult, oData)
RL.reloadPluginList(); RL.reloadPluginList();
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -7073,7 +7196,7 @@ AdminPackages.prototype.installPackage = function (oPackage)
RL.remote().packageInstall(this.requestHelper(oPackage, true), oPackage); RL.remote().packageInstall(this.requestHelper(oPackage, true), oPackage);
} }
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -7130,7 +7253,7 @@ AdminLicensing.prototype.licenseExpiredMomentValue = function ()
; ;
return iTime && 1898625600 === iTime ? 'Never' : (oDate.format('LL') + ' (' + oDate.from(moment()) + ')'); return iTime && 1898625600 === iTime ? 'Never' : (oDate.format('LL') + ' (' + oDate.from(moment()) + ')');
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -7207,7 +7330,7 @@ AdminAbout.prototype.updateCoreData = function ()
RL.updateCoreData(); RL.updateCoreData();
} }
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -7340,7 +7463,7 @@ AbstractData.prototype.populateDataOnStart = function()
this.contactsIsAllowed(!!RL.settingsGet('ContactsIsAllowed')); this.contactsIsAllowed(!!RL.settingsGet('ContactsIsAllowed'));
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -7393,7 +7516,7 @@ _.extend(AdminDataStorage.prototype, AbstractData.prototype);
AdminDataStorage.prototype.populateDataOnStart = function() AdminDataStorage.prototype.populateDataOnStart = function()
{ {
AbstractData.prototype.populateDataOnStart.call(this); AbstractData.prototype.populateDataOnStart.call(this);
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -7669,7 +7792,7 @@ AbstractAjaxRemoteStorage.prototype.jsVersion = function (fCallback, sVersion)
'Version': sVersion 'Version': sVersion
}); });
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -7932,7 +8055,7 @@ AdminAjaxRemoteStorage.prototype.adminPing = function (fCallback)
{ {
this.defaultRequest(fCallback, 'AdminPing'); this.defaultRequest(fCallback, 'AdminPing');
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -7993,7 +8116,7 @@ AbstractCacheStorage.prototype.setServicesData = function (oData)
{ {
this.oServices = oData; this.oServices = oData;
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -8006,7 +8129,7 @@ function AdminCacheStorage()
} }
_.extend(AdminCacheStorage.prototype, AbstractCacheStorage.prototype); _.extend(AdminCacheStorage.prototype, AbstractCacheStorage.prototype);
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -8188,7 +8311,7 @@ AbstractSettings.prototype.routes = function ()
['', oRules] ['', oRules]
]; ];
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -8205,7 +8328,7 @@ _.extend(AdminLoginScreen.prototype, KnoinAbstractScreen.prototype);
AdminLoginScreen.prototype.onShow = function () AdminLoginScreen.prototype.onShow = function ()
{ {
RL.setTitle(''); RL.setTitle('');
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -8225,7 +8348,7 @@ _.extend(AdminSettingsScreen.prototype, AbstractSettings.prototype);
AdminSettingsScreen.prototype.onShow = function () AdminSettingsScreen.prototype.onShow = function ()
{ {
RL.setTitle(''); RL.setTitle('');
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -8585,7 +8708,7 @@ AbstractApp.prototype.bootstart = function ()
ssm.ready(); ssm.ready();
}; };
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
/** /**
@ -8888,7 +9011,7 @@ AdminApp.prototype.bootstart = function ()
* @type {AdminApp} * @type {AdminApp}
*/ */
RL = new AdminApp(); RL = new AdminApp();
/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */
$html.addClass(Globals.bMobileDevice ? 'mobile' : 'no-mobile'); $html.addClass(Globals.bMobileDevice ? 'mobile' : 'no-mobile');
@ -8941,7 +9064,7 @@ window['__RLBOOT'] = function (fCall) {
window['__RLBOOT'] = null; window['__RLBOOT'] = null;
}); });
}; };
if (window.SimplePace) { if (window.SimplePace) {
window.SimplePace.add(10); window.SimplePace.add(10);
} }

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View 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, "&lt;").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, "&quot;").replace(/\$/g, "&#36;"), '"' ].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);

View 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,"&lt;").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,"&quot;").replace(/\$/g,"&#36;"),'"'].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);