mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-08-30 20:49:20 +03:00
Subject smart highlighter
This commit is contained in:
parent
cf80b8f21b
commit
fd9c0e25d8
9 changed files with 116 additions and 17 deletions
|
|
@ -10,6 +10,8 @@ function MessageModel()
|
|||
this.hash = '';
|
||||
this.requestHash = '';
|
||||
this.subject = ko.observable('');
|
||||
this.subjectPrefix = ko.observable('');
|
||||
this.subjectSuffix = ko.observable('');
|
||||
this.size = ko.observable(0);
|
||||
this.dateTimeStampInUTC = ko.observable(0);
|
||||
this.priority = ko.observable(Enums.MessagePriority.Normal);
|
||||
|
|
@ -230,6 +232,8 @@ MessageModel.prototype.clear = function ()
|
|||
this.hash = '';
|
||||
this.requestHash = '';
|
||||
this.subject('');
|
||||
this.subjectPrefix('');
|
||||
this.subjectSuffix('');
|
||||
this.size(0);
|
||||
this.dateTimeStampInUTC(0);
|
||||
this.priority(Enums.MessagePriority.Normal);
|
||||
|
|
@ -328,6 +332,17 @@ MessageModel.prototype.initByJson = function (oJsonMessage)
|
|||
this.deliveredTo = MessageModel.initEmailsFromJson(oJsonMessage.DeliveredTo);
|
||||
|
||||
this.subject(oJsonMessage.Subject);
|
||||
if (Utils.isArray(oJsonMessage.SubjectParts))
|
||||
{
|
||||
this.subjectPrefix(oJsonMessage.SubjectParts[0]);
|
||||
this.subjectSuffix(oJsonMessage.SubjectParts[1]);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.subjectPrefix('');
|
||||
this.subjectSuffix(this.subject());
|
||||
}
|
||||
|
||||
this.dateTimeStampInUTC(Utils.pInt(oJsonMessage.DateTimeStampInUTC));
|
||||
this.hasAttachments(!!oJsonMessage.HasAttachments);
|
||||
this.attachmentsMainType(oJsonMessage.AttachmentsMainType);
|
||||
|
|
@ -811,6 +826,9 @@ MessageModel.prototype.populateByMessageListItem = function (oMessage)
|
|||
this.hash = oMessage.hash;
|
||||
this.requestHash = oMessage.requestHash;
|
||||
this.subject(oMessage.subject());
|
||||
this.subjectPrefix(this.subjectPrefix());
|
||||
this.subjectSuffix(this.subjectSuffix());
|
||||
|
||||
this.size(oMessage.size());
|
||||
this.dateTimeStampInUTC(oMessage.dateTimeStampInUTC());
|
||||
this.priority(oMessage.priority());
|
||||
|
|
|
|||
|
|
@ -362,7 +362,7 @@ html.rl-no-preview-pane {
|
|||
}
|
||||
|
||||
&.emptySubject .subjectParent {
|
||||
.subject {
|
||||
.subject, .subject-prefix, .subject-suffix {
|
||||
display: none;
|
||||
}
|
||||
.emptySubjectText {
|
||||
|
|
@ -370,10 +370,15 @@ html.rl-no-preview-pane {
|
|||
}
|
||||
}
|
||||
|
||||
.sender, .subject {
|
||||
.sender, .subject, .subject-suffix {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.subject-prefix {
|
||||
color: #888;
|
||||
/*font-style: italic;*/
|
||||
}
|
||||
|
||||
.attachment {
|
||||
display: none;
|
||||
|
|
@ -416,7 +421,7 @@ html.rl-no-preview-pane {
|
|||
|
||||
&.unseen {
|
||||
background-color: #FFFFD9;
|
||||
.sender, .subject {
|
||||
.sender, .subject, .subject-suffix {
|
||||
font-weight: bold;
|
||||
}
|
||||
.sidebarParent {
|
||||
|
|
|
|||
|
|
@ -6937,6 +6937,54 @@ class Actions
|
|||
return isset($aLang[$sKey]) ? $aLang[$sKey] : $sKey;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $sSubject
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function explodeSubject($sSubject)
|
||||
{
|
||||
$aResult = array('', '');
|
||||
if (0 < \strlen($sSubject))
|
||||
{
|
||||
$sDrop = false;
|
||||
$aPrefix = array();
|
||||
$aSuffix = array();
|
||||
|
||||
$aParts = \explode(':', $sSubject);
|
||||
foreach ($aParts as $sPart)
|
||||
{
|
||||
if (!$sDrop &&
|
||||
(\preg_match('/^(RE|FWD)$/i', \trim($sPart)) || \preg_match('/^(RE|FWD)[\[\(][\d]+[\]\)]$/i', \trim($sPart))))
|
||||
{
|
||||
$aPrefix[] = $sPart;
|
||||
}
|
||||
else
|
||||
{
|
||||
$aSuffix[] = $sPart;
|
||||
$sDrop = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (0 < \count($aPrefix))
|
||||
{
|
||||
$aResult[0] = \rtrim(\trim(\implode(':', $aPrefix)), ':').': ';
|
||||
}
|
||||
|
||||
if (0 < \count($aSuffix))
|
||||
{
|
||||
$aResult[1] = \trim(\implode(':', $aSuffix));
|
||||
}
|
||||
|
||||
if (0 === \strlen($aResult[1]))
|
||||
{
|
||||
$aResult = array('', $sSubject);
|
||||
}
|
||||
}
|
||||
|
||||
return $aResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed $mResponse
|
||||
* @param string $sParent
|
||||
|
|
@ -6985,6 +7033,8 @@ class Actions
|
|||
'ReadReceipt' => ''
|
||||
));
|
||||
|
||||
$mResult['SubjectParts'] = $this->explodeSubject($mResult['Subject']);
|
||||
|
||||
$oAttachments = $mResponse->Attachments();
|
||||
$iAttachmentsCount = $oAttachments ? $oAttachments->Count() : 0;
|
||||
|
||||
|
|
@ -7020,8 +7070,6 @@ class Actions
|
|||
'FileName' => (0 === \strlen($sSubject) ? 'message-'.$mResult['Uid'] : \MailSo\Base\Utils::ClearXss($sSubject)).'.eml'
|
||||
));
|
||||
|
||||
|
||||
|
||||
// Flags
|
||||
$aFlags = $mResponse->FlagsLowerCase();
|
||||
$mResult['IsSeen'] = \in_array('\\seen', $aFlags);
|
||||
|
|
|
|||
|
|
@ -37,8 +37,9 @@
|
|||
</span>
|
||||
</div>
|
||||
<div class="subjectParent actionHandle dragHandle">
|
||||
<span class="subject" data-bind="text: subject"></span>
|
||||
<span class="subject emptySubjectText" data-bind="text: $root.emptySubjectValue"></span>
|
||||
<!--<span class="subject" data-bind="text: subject"></span>-->
|
||||
<span class="subject-prefix" data-bind="text: subjectPrefix"></span><span class="subject-suffix" data-bind="text: subjectSuffix"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -37,8 +37,9 @@
|
|||
</span>
|
||||
</div>
|
||||
<div class="subjectParent actionHandle dragHandle">
|
||||
<span class="subject" data-bind="text: subject"></span>
|
||||
<span class="subject emptySubjectText" data-bind="text: $root.emptySubjectValue"></span>
|
||||
<!--<span class="subject" data-bind="text: subject"></span>-->
|
||||
<span class="subject-prefix" data-bind="text: subjectPrefix"></span><span class="subject-suffix" data-bind="text: subjectSuffix"></span>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -7893,17 +7893,24 @@ html.rl-no-preview-pane .messageList.message-selected {
|
|||
font-style: italic;
|
||||
color: #999;
|
||||
}
|
||||
.messageList .b-content .messageListItem.emptySubject .subjectParent .subject {
|
||||
.messageList .b-content .messageListItem.emptySubject .subjectParent .subject,
|
||||
.messageList .b-content .messageListItem.emptySubject .subjectParent .subject-prefix,
|
||||
.messageList .b-content .messageListItem.emptySubject .subjectParent .subject-suffix {
|
||||
display: none;
|
||||
}
|
||||
.messageList .b-content .messageListItem.emptySubject .subjectParent .emptySubjectText {
|
||||
display: inline;
|
||||
}
|
||||
.messageList .b-content .messageListItem .sender,
|
||||
.messageList .b-content .messageListItem .subject {
|
||||
.messageList .b-content .messageListItem .subject,
|
||||
.messageList .b-content .messageListItem .subject-suffix {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
.messageList .b-content .messageListItem .subject-prefix {
|
||||
color: #888;
|
||||
/*font-style: italic;*/
|
||||
}
|
||||
.messageList .b-content .messageListItem .attachment {
|
||||
display: none;
|
||||
}
|
||||
|
|
@ -7945,7 +7952,8 @@ html.rl-no-preview-pane .messageList.message-selected {
|
|||
background-color: #FFFFD9;
|
||||
}
|
||||
.messageList .b-content .messageListItem.unseen .sender,
|
||||
.messageList .b-content .messageListItem.unseen .subject {
|
||||
.messageList .b-content .messageListItem.unseen .subject,
|
||||
.messageList .b-content .messageListItem.unseen .subject-suffix {
|
||||
font-weight: bold;
|
||||
}
|
||||
.messageList .b-content .messageListItem.unseen .sidebarParent {
|
||||
|
|
|
|||
2
rainloop/v/0.0.0/static/css/app.min.css
vendored
2
rainloop/v/0.0.0/static/css/app.min.css
vendored
File diff suppressed because one or more lines are too long
|
|
@ -6623,6 +6623,8 @@ function MessageModel()
|
|||
this.hash = '';
|
||||
this.requestHash = '';
|
||||
this.subject = ko.observable('');
|
||||
this.subjectPrefix = ko.observable('');
|
||||
this.subjectSuffix = ko.observable('');
|
||||
this.size = ko.observable(0);
|
||||
this.dateTimeStampInUTC = ko.observable(0);
|
||||
this.priority = ko.observable(Enums.MessagePriority.Normal);
|
||||
|
|
@ -6843,6 +6845,8 @@ MessageModel.prototype.clear = function ()
|
|||
this.hash = '';
|
||||
this.requestHash = '';
|
||||
this.subject('');
|
||||
this.subjectPrefix('');
|
||||
this.subjectSuffix('');
|
||||
this.size(0);
|
||||
this.dateTimeStampInUTC(0);
|
||||
this.priority(Enums.MessagePriority.Normal);
|
||||
|
|
@ -6941,6 +6945,17 @@ MessageModel.prototype.initByJson = function (oJsonMessage)
|
|||
this.deliveredTo = MessageModel.initEmailsFromJson(oJsonMessage.DeliveredTo);
|
||||
|
||||
this.subject(oJsonMessage.Subject);
|
||||
if (Utils.isArray(oJsonMessage.SubjectParts))
|
||||
{
|
||||
this.subjectPrefix(oJsonMessage.SubjectParts[0]);
|
||||
this.subjectSuffix(oJsonMessage.SubjectParts[1]);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.subjectPrefix('');
|
||||
this.subjectSuffix(this.subject());
|
||||
}
|
||||
|
||||
this.dateTimeStampInUTC(Utils.pInt(oJsonMessage.DateTimeStampInUTC));
|
||||
this.hasAttachments(!!oJsonMessage.HasAttachments);
|
||||
this.attachmentsMainType(oJsonMessage.AttachmentsMainType);
|
||||
|
|
@ -7424,6 +7439,9 @@ MessageModel.prototype.populateByMessageListItem = function (oMessage)
|
|||
this.hash = oMessage.hash;
|
||||
this.requestHash = oMessage.requestHash;
|
||||
this.subject(oMessage.subject());
|
||||
this.subjectPrefix(this.subjectPrefix());
|
||||
this.subjectSuffix(this.subjectSuffix());
|
||||
|
||||
this.size(oMessage.size());
|
||||
this.dateTimeStampInUTC(oMessage.dateTimeStampInUTC());
|
||||
this.priority(oMessage.priority());
|
||||
|
|
|
|||
12
rainloop/v/0.0.0/static/js/app.min.js
vendored
12
rainloop/v/0.0.0/static/js/app.min.js
vendored
File diff suppressed because one or more lines are too long
Loading…
Add table
Add a link
Reference in a new issue