Subject smart highlighter

This commit is contained in:
RainLoop Team 2014-07-17 18:35:48 +04:00
parent cf80b8f21b
commit fd9c0e25d8
9 changed files with 116 additions and 17 deletions

View file

@ -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());

View file

@ -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 {

View file

@ -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);

View file

@ -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>

View file

@ -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>

View file

@ -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 {

File diff suppressed because one or more lines are too long

View file

@ -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());

File diff suppressed because one or more lines are too long