* Left align Indicator and corrected “Add to Knowledge Base” button misalignment. * Left align Indicator and corrected “Add to Knowledge Base” button misalignment. * Pushing title changes only, reverted timeline changes. * Pushing title changes only, reverted timeline changes. * Timelime tilte design update for small resolution. * Review changes and added minified date * Review changes for Timeline for smaller screen. * Changes for tilte, delete icon change and removed duplicate date. * Review changes * Fixed Alignment for action buttons. * Small resolution alignment changes. * Class name changes. * Timelime tilte design update for small resolution. * Changes for tilte, delete icon change and removed duplicate date.version-14
@@ -287,6 +287,8 @@ h6.uppercase, | |||||
border-radius: 3px; | border-radius: 3px; | ||||
margin-left: -7px; | margin-left: -7px; | ||||
position: relative; | position: relative; | ||||
max-width: calc(100% - 50px); | |||||
padding-right: 0px; | |||||
overflow: visible; | overflow: visible; | ||||
} | } | ||||
.timeline-item.user-content .avatar-medium { | .timeline-item.user-content .avatar-medium { | ||||
@@ -294,6 +296,11 @@ h6.uppercase, | |||||
height: 45px; | height: 45px; | ||||
width: 45px; | width: 45px; | ||||
} | } | ||||
.timeline-item.user-content .action-btns { | |||||
position: absolute; | |||||
right: 0; | |||||
padding: 5px 15px 2px 5px; | |||||
} | |||||
.timeline-item.user-content .comment-header { | .timeline-item.user-content .comment-header { | ||||
background-color: #fafbfc; | background-color: #fafbfc; | ||||
padding: 10px 15px 10px 13px; | padding: 10px 15px 10px 13px; | ||||
@@ -301,12 +308,19 @@ h6.uppercase, | |||||
color: #8D99A6; | color: #8D99A6; | ||||
border-bottom: 1px solid #EBEFF2; | border-bottom: 1px solid #EBEFF2; | ||||
} | } | ||||
.timeline-item.user-content .comment-header.links-active { | |||||
padding-right: 60px; | |||||
} | |||||
.timeline-item.user-content .comment-header .commented-on-small { | |||||
display: none; | |||||
} | |||||
.timeline-item.user-content .comment-header .octicon-heart { | .timeline-item.user-content .comment-header .octicon-heart { | ||||
color: #ff5858; | color: #ff5858; | ||||
cursor: pointer; | cursor: pointer; | ||||
} | } | ||||
.timeline-item.user-content .reply { | .timeline-item.user-content .reply { | ||||
padding: 15px; | padding: 15px; | ||||
overflow: auto; | |||||
} | } | ||||
.timeline-item.user-content .reply > div > p:first-child { | .timeline-item.user-content .reply > div > p:first-child { | ||||
margin-top: 0px; | margin-top: 0px; | ||||
@@ -317,11 +331,13 @@ h6.uppercase, | |||||
.timeline-item.user-content .reply hr { | .timeline-item.user-content .reply hr { | ||||
margin: 10px 0px; | margin: 10px 0px; | ||||
} | } | ||||
.timeline-item.user-content .close-btn-container { | |||||
padding: 4px 10px 2px 5px; | |||||
.timeline-item.user-content .close-btn-container .close { | |||||
color: inherit; | |||||
opacity: 1; | |||||
padding: 0 0 0 10px; | |||||
} | } | ||||
.timeline-item.user-content .edit-btn-container { | .timeline-item.user-content .edit-btn-container { | ||||
padding: 4px 5px; | |||||
padding: 0; | |||||
} | } | ||||
.timeline-item.user-content .edit-btn-container .edit { | .timeline-item.user-content .edit-btn-container .edit { | ||||
color: inherit; | color: inherit; | ||||
@@ -192,6 +192,9 @@ body { | |||||
} | } | ||||
} | } | ||||
@media (max-width: 767px) { | @media (max-width: 767px) { | ||||
.toggle-sidebar { | |||||
margin-right: 0; | |||||
} | |||||
body[data-route^="Form"] .page-title .title-text { | body[data-route^="Form"] .page-title .title-text { | ||||
font-size: 16px; | font-size: 16px; | ||||
width: calc(100% - 30px); | width: calc(100% - 30px); | ||||
@@ -331,4 +334,64 @@ body { | |||||
body[data-route^="Form"] .page-head .sub-heading { | body[data-route^="Form"] .page-head .sub-heading { | ||||
right: 90px; | right: 90px; | ||||
} | } | ||||
.timeline::before { | |||||
content: none; | |||||
} | |||||
.timeline .timeline-new-email { | |||||
margin: 20px 0; | |||||
padding-left: 15px; | |||||
} | |||||
.timeline .timeline-new-email::before { | |||||
content: none; | |||||
} | |||||
.timeline .timeline-item.user-content { | |||||
margin: 20px 15px; | |||||
} | |||||
.timeline .timeline-item.user-content .media-body { | |||||
margin-left: 0; | |||||
max-width: 100%; | |||||
overflow: hidden; | |||||
} | |||||
.timeline .timeline-item.user-content .media-body:before { | |||||
content: none; | |||||
} | |||||
.timeline .timeline-item.user-content .action-btns { | |||||
padding: 5px 10px 2px 5px; | |||||
} | |||||
.timeline .timeline-item.user-content .comment-header { | |||||
padding: 7px 10px; | |||||
} | |||||
.timeline .timeline-item.user-content .comment-header .links-active { | |||||
padding-right: 10px; | |||||
} | |||||
.timeline .timeline-item.user-content .avatar-medium { | |||||
margin-right: 10px; | |||||
} | |||||
.timeline .timeline-item.user-content .reply { | |||||
padding: 10px; | |||||
} | |||||
.timeline .timeline-item.user-content .commented-on-small { | |||||
display: inline-block; | |||||
} | |||||
.timeline .timeline-item.user-content .commented-on-small { | |||||
display: inline-block; | |||||
} | |||||
.timeline .timeline-item.notification-content { | |||||
padding-left: 15px; | |||||
margin: 20px 0; | |||||
} | |||||
.timeline .timeline-item.notification-content::before { | |||||
content: none; | |||||
} | |||||
.timeline .timeline-item.notification-content .small { | |||||
padding-left: 0; | |||||
} | |||||
.timeline .timeline-item .delivery-status-indicator { | |||||
float: left; | |||||
margin: 0 5px 0 0; | |||||
} | |||||
.timeline .asset-details { | |||||
line-height: 24px; | |||||
/*Height of avtar image -36px to align text center vertically*/ | |||||
} | |||||
} | } |
@@ -248,14 +248,14 @@ frappe.ui.form.Timeline = Class.extend({ | |||||
c["edit"] = ""; | c["edit"] = ""; | ||||
if(c.communication_type=="Comment" && (c.comment_type || "Comment") === "Comment") { | if(c.communication_type=="Comment" && (c.comment_type || "Comment") === "Comment") { | ||||
if(frappe.model.can_delete("Communication")) { | if(frappe.model.can_delete("Communication")) { | ||||
c["delete"] = '<a class="close" href="#"><i class="octicon octicon-trashcan"></i></a>'; | |||||
c["delete"] = '<a class="close" title="Delete" href="#"><i class="octicon octicon-x"></i></a>'; | |||||
} | } | ||||
if(frappe.user.name == c.sender || (frappe.user.name == 'Administrator')) { | if(frappe.user.name == c.sender || (frappe.user.name == 'Administrator')) { | ||||
c["edit"] = '<a class="edit" href="#"><i class="octicon octicon-pencil"></i></a>'; | |||||
c["edit"] = '<a class="edit" title="Edit" href="#"><i class="octicon octicon-pencil"></i></a>'; | |||||
} | } | ||||
} | } | ||||
c.comment_on_small = comment_when(c.creation, true); | |||||
c.comment_on = comment_when(c.creation); | c.comment_on = comment_when(c.creation); | ||||
if(!c.fullname) { | if(!c.fullname) { | ||||
c.fullname = c.sender_full_name || frappe.user.full_name(c.sender); | c.fullname = c.sender_full_name || frappe.user.full_name(c.sender); | ||||
@@ -358,7 +358,8 @@ frappe.ui.form.Timeline = Class.extend({ | |||||
"Unshared": "octicon octicon-circle-slash", | "Unshared": "octicon octicon-circle-slash", | ||||
"Like": "octicon octicon-heart", | "Like": "octicon octicon-heart", | ||||
"Edit": "octicon octicon-pencil", | "Edit": "octicon octicon-pencil", | ||||
"Relinked": "octicon octicon-check" | |||||
"Relinked": "octicon octicon-check", | |||||
"Reply": "octicon octicon-mail-reply" | |||||
}[c.comment_type || c.communication_medium] | }[c.comment_type || c.communication_medium] | ||||
c.color = { | c.color = { | ||||
@@ -376,7 +377,8 @@ frappe.ui.form.Timeline = Class.extend({ | |||||
"Label": "#2c3e50", | "Label": "#2c3e50", | ||||
"Attachment": "#7f8c8d", | "Attachment": "#7f8c8d", | ||||
"Attachment Removed": "#eee", | "Attachment Removed": "#eee", | ||||
"Relinked": "#16a085" | |||||
"Relinked": "#16a085", | |||||
"Reply": "#8d99a6" | |||||
}[c.comment_type || c.communication_medium]; | }[c.comment_type || c.communication_medium]; | ||||
c.icon_fg = { | c.icon_fg = { | ||||
@@ -1,6 +1,6 @@ | |||||
<div class="media timeline-item {% if (data.user_content) { %} user-content {% } else { %} notification-content {% } %}" data-doctype="{{ data.doctype }}" data-name="{%= data.name %}"> | <div class="media timeline-item {% if (data.user_content) { %} user-content {% } else { %} notification-content {% } %}" data-doctype="{{ data.doctype }}" data-name="{%= data.name %}"> | ||||
{% if (data.user_content) { %} | {% if (data.user_content) { %} | ||||
<span class="pull-left avatar avatar-medium" style="margin-top: 1px"> | |||||
<span class="pull-left avatar avatar-medium hidden-xs" style="margin-top: 1px"> | |||||
{% if(data.user_info.image) { %} | {% if(data.user_info.image) { %} | ||||
<div class="avatar-frame" style="background-image: url({%= data.user_info.image %})"></div> | <div class="avatar-frame" style="background-image: url({%= data.user_info.image %})"></div> | ||||
{% } else { %} | {% } else { %} | ||||
@@ -10,88 +10,108 @@ | |||||
</span> | </span> | ||||
{% } %} | {% } %} | ||||
<div class="pull-left media-body" style="max-width: calc(100% - 50px); padding-right: 0px;"> | |||||
<div class="pull-left media-body"> | |||||
<div class="media-content-wrapper"> | <div class="media-content-wrapper"> | ||||
<div class="pull-right close-btn-container"> | |||||
<span class="small text-muted"> | |||||
{%= data.delete %} | |||||
</span> | |||||
</div> | |||||
<div class="pull-right edit-btn-container"> | |||||
<span class="small text-muted"> | |||||
{%= data.edit %} | |||||
</span> | |||||
<div class="action-btns"> | |||||
{% if(data.delete) { %} | |||||
<div class="pull-right hidden-xs close-btn-container"> | |||||
<span class="small text-muted"> | |||||
{%= data.delete %} | |||||
</span> | |||||
</div> | |||||
{% } %} | |||||
{% if(data.edit) { %} | |||||
<div class="pull-right edit-btn-container"> | |||||
<span class="small text-muted"> | |||||
{%= data.edit %} | |||||
</span> | |||||
</div> | |||||
{% } %} | |||||
</div> | </div> | ||||
{% if(data.communication_type==="Communication" | {% if(data.communication_type==="Communication" | ||||
|| data.communication_type==="Feedback" | || data.communication_type==="Feedback" | ||||
|| (data.communication_type==="Comment" | || (data.communication_type==="Comment" | ||||
&& data.comment_type==="Comment")) { %} | && data.comment_type==="Comment")) { %} | ||||
<div class="comment-header small"> | |||||
<i class="{%= data.icon %} fa-fw"></i> | |||||
<span title="{%= data.comment_by %}">{%= data.fullname %}</span> | |||||
<span> | |||||
{% if (data.timeline_doctype===data.frm.doc.doctype | |||||
&& data.timeline_name===data.frm.doc.name) { %} | |||||
– | |||||
<a href="#Form/{%= data.reference_doctype %}/{%= data.reference_name %}" class="text-muted"> | |||||
<strong>{{ __(data.reference_doctype) }}</strong> | |||||
{{ data.reference_name }} | |||||
</a> | |||||
<div class="comment-header clearfix small {% if (data.edit || data.delete) { %} links-active {% } %}"> | |||||
<span class="pull-left avatar avatar-small visible-xs"> | |||||
{% if(data.user_info.image) { %} | |||||
<div class="avatar-frame" style="background-image: url({%= data.user_info.image %})"></div> | |||||
{% } else { %} | |||||
<div class="standard-image" style="background-color: {{ data.user_info.color }}"> | |||||
{{ data.user_info.abbr }}</div> | |||||
{% } %} | {% } %} | ||||
</span> | </span> | ||||
<span class="text-muted" style="font-weight: normal;"> | |||||
– {%= data.comment_on %}</span> | |||||
{% if(in_list(["Communication", "Feedback"], data.communication_type)) { %} | |||||
{% if (frappe.model.can_read(\'Communication\')) { %} | |||||
<a href="#Form/{%= data.doctype %}/{%= data.name %}" | |||||
class="text-muted"> | |||||
<div class="asset-details"> | |||||
<span class="author-wrap"> | |||||
<i class="{%= data.icon %} hidden-xs fa-fw"></i> | |||||
<span title="{%= data.comment_by %}">{%= data.fullname %}</span> | |||||
</span> | |||||
<span> | |||||
{% if (data.timeline_doctype===data.frm.doc.doctype | |||||
&& data.timeline_name===data.frm.doc.name) { %} | |||||
– | |||||
<a href="#Form/{%= data.reference_doctype %}/{%= data.reference_name %}" class="text-muted"> | |||||
<strong>{{ __(data.reference_doctype) }}</strong> | |||||
{{ data.reference_name }} | |||||
</a> | |||||
{% } %} | {% } %} | ||||
</span> | |||||
{% if(in_list(["Communication", "Feedback"], data.communication_type)) { %} | |||||
{% if (frappe.model.can_read(\'Communication\')) { %} | |||||
<a href="#Form/{%= data.doctype %}/{%= data.name %}" | |||||
class="text-muted"> | |||||
{% } %} | |||||
{% if (data.delivery_status) { | |||||
if (in_list(["Sent", "Opened", "Clicked"], data.delivery_status)) { | |||||
var indicator_class = "green"; | |||||
} else if (data.delivery_status === "Sending") { | |||||
var indicator_class = "orange"; | |||||
} else { | |||||
var indicator_class = "red"; | |||||
} | |||||
%} | |||||
<span class="text-muted">–</span> | |||||
<span class="indicator-right {%= indicator_class %} | |||||
delivery-status-indicator" | |||||
title="{%= data.delivery_status %}"> | |||||
{%= data.delivery_status %}</span> | |||||
{% if (data.delivery_status) { | |||||
if (in_list(["Sent", "Opened", "Clicked"], data.delivery_status)) { | |||||
var indicator_class = "green"; | |||||
} else if (data.delivery_status === "Sending") { | |||||
var indicator_class = "orange"; | |||||
} else { | |||||
var indicator_class = "red"; | |||||
} | |||||
%} | |||||
<span class="text-muted hidden-xs">–</span> | |||||
<span class="indicator-right {%= indicator_class %} | |||||
delivery-status-indicator" | |||||
title="{%= data.delivery_status %}"><span class="hidden-xs"> | |||||
{%= data.delivery_status %}</span></span> | |||||
{% } else { %} | |||||
{% if (frappe.model.can_read(\'Communication\')) { %} | |||||
<span class="text-muted">–</span> | |||||
{%= __("Details") %} | |||||
{% } else { %} | |||||
{% if (frappe.model.can_read(\'Communication\')) { %} | |||||
<span class="text-muted n-dash">–</span> | |||||
{%= __("Details") %} | |||||
{% } %} | |||||
{% } %} | {% } %} | ||||
{% } %} | |||||
{% if (frappe.model.can_read(\'Communication\')) { %} | |||||
</a> | |||||
{% } %} | |||||
{% if (frappe.model.can_read(\'Communication\')) { %} | |||||
</a> | |||||
{% } %} | |||||
{% if (data.communication_medium === "Email" | |||||
&& data.sender !== frappe.session.user_email) { %} | |||||
<a class="text-muted reply-link pull-right timeline-content-show" | |||||
data-name="{%= data.name %}">{%= __("Reply") %}</a> | |||||
{% if (data.communication_medium === "Email" | |||||
&& data.sender !== frappe.session.user_email) { %} | |||||
<a class="text-muted reply-link pull-right timeline-content-show" | |||||
data-name="{%= data.name %}" title="{%= __("Reply") %}"><i class="octicon octicon-mail-reply"></i></a> | |||||
{% } %} | |||||
{% } %} | {% } %} | ||||
{% } %} | |||||
<span class="comment-likes" | |||||
data-liked-by=\'{{ JSON.stringify(data._liked_by) }}\'> | |||||
<i class="octicon octicon-heart like-action | |||||
{% if (!data.liked_by_user) { %} | |||||
text-extra-muted not-liked | |||||
{% } %} fa-fw" | |||||
data-doctype="{%= data.doctype %}" | |||||
data-name="{%= data.name %}"></i> | |||||
<span class="likes-count text-muted"> | |||||
{{ (data._liked_by || []).length }}</span> | |||||
</span> | |||||
<span class="text-muted commented-on hidden-xs"> | |||||
– {%= data.comment_on %}</span> | |||||
<span class="text-muted commented-on-small"> | |||||
– {%= data.comment_on_small %}</span> | |||||
<span class="comment-likes hidden-xs" | |||||
data-liked-by=\'{{ JSON.stringify(data._liked_by) }}\'> | |||||
<i class="octicon octicon-heart like-action | |||||
{% if (!data.liked_by_user) { %} | |||||
text-extra-muted not-liked | |||||
{% } %} fa-fw" | |||||
data-doctype="{%= data.doctype %}" | |||||
data-name="{%= data.name %}"></i> | |||||
<span class="likes-count text-muted"> | |||||
{{ (data._liked_by || []).length }}</span> | |||||
</span> | |||||
</div> | |||||
</div> | </div> | ||||
<div class="reply timeline-content-show" style="overflow-x: auto"> | |||||
<div class="reply timeline-content-show"> | |||||
<div class="timeline-item-content"> | <div class="timeline-item-content"> | ||||
{% if data.show_subject %} | {% if data.show_subject %} | ||||
<p class="text-muted small"> | <p class="text-muted small"> | ||||
@@ -143,7 +163,7 @@ | |||||
{% if(data.link_doctype && data.link_name) { %} | {% if(data.link_doctype && data.link_name) { %} | ||||
</a> | </a> | ||||
{% } %} | {% } %} | ||||
<span class="text-muted" style="font-weight: normal;"> | |||||
<span class="text-muted commented-on" style="font-weight: normal;"> | |||||
– {%= data.comment_on %}</span> | – {%= data.comment_on %}</span> | ||||
</div> | </div> | ||||
{% } else { %} | {% } else { %} | ||||
@@ -172,7 +192,7 @@ | |||||
</a> | </a> | ||||
{% } %} | {% } %} | ||||
{% } %} | {% } %} | ||||
<span class="text-muted" style="font-weight: normal;"> | |||||
<span class="text-muted commented-on" style="font-weight: normal;"> | |||||
– {%= data.comment_on %}</span> | – {%= data.comment_on %}</span> | ||||
</div> | </div> | ||||
{% } %} | {% } %} | ||||
@@ -376,7 +376,8 @@ h6.uppercase, .h6.uppercase { | |||||
border-radius: 3px; | border-radius: 3px; | ||||
margin-left: -7px; | margin-left: -7px; | ||||
position: relative; | position: relative; | ||||
max-width: calc(~"100% - 50px"); | |||||
padding-right: 0px; | |||||
// to display the triangle beside the box | // to display the triangle beside the box | ||||
overflow: visible; | overflow: visible; | ||||
} | } | ||||
@@ -387,12 +388,24 @@ h6.uppercase, .h6.uppercase { | |||||
width: 45px; | width: 45px; | ||||
} | } | ||||
.action-btns { | |||||
position: absolute; | |||||
right: 0; | |||||
padding: 5px 15px 2px 5px; | |||||
} | |||||
.comment-header { | .comment-header { | ||||
background-color: @light-bg; | background-color: @light-bg; | ||||
padding: 10px 15px 10px 13px; | padding: 10px 15px 10px 13px; | ||||
margin: 0px; | margin: 0px; | ||||
color: @text-muted; | color: @text-muted; | ||||
border-bottom: 1px solid @light-border-color; | border-bottom: 1px solid @light-border-color; | ||||
&.links-active { | |||||
padding-right: 60px; | |||||
} | |||||
.commented-on-small { | |||||
display: none; | |||||
} | |||||
.octicon-heart { | .octicon-heart { | ||||
color: @heart-color; | color: @heart-color; | ||||
@@ -402,6 +415,7 @@ h6.uppercase, .h6.uppercase { | |||||
.reply { | .reply { | ||||
padding: 15px; | padding: 15px; | ||||
overflow: auto; | |||||
& > div > p:first-child { | & > div > p:first-child { | ||||
margin-top: 0px; | margin-top: 0px; | ||||
@@ -417,11 +431,15 @@ h6.uppercase, .h6.uppercase { | |||||
} | } | ||||
.close-btn-container { | .close-btn-container { | ||||
padding: 4px 10px 2px 5px; | |||||
.close { | |||||
color: inherit; | |||||
opacity: 1; | |||||
padding: 0 0 0 10px; | |||||
} | |||||
} | } | ||||
.edit-btn-container { | .edit-btn-container { | ||||
padding: 4px 5px; | |||||
padding: 0; | |||||
.edit { | .edit { | ||||
color: inherit; | color: inherit; | ||||
@@ -223,6 +223,9 @@ body { | |||||
} | } | ||||
@media(max-width: 767px) { | @media(max-width: 767px) { | ||||
.toggle-sidebar { | |||||
margin-right: 0; | |||||
} | |||||
body[data-route^="Form"]{ | body[data-route^="Form"]{ | ||||
.page-title { | .page-title { | ||||
.title-text { | .title-text { | ||||
@@ -406,4 +409,67 @@ body { | |||||
right: 90px; | right: 90px; | ||||
} | } | ||||
} | } | ||||
.timeline { | |||||
&::before { | |||||
content: none; | |||||
} | |||||
.timeline-new-email { | |||||
margin: 20px 0; | |||||
padding-left: 15px; | |||||
&::before { | |||||
content: none; | |||||
} | |||||
} | |||||
.timeline-item { | |||||
&.user-content { | |||||
margin: 20px 15px; | |||||
.media-body { | |||||
margin-left: 0; | |||||
max-width: 100%; | |||||
overflow: hidden; | |||||
&:before { | |||||
content: none; | |||||
} | |||||
} | |||||
.action-btns { | |||||
padding: 5px 10px 2px 5px; | |||||
} | |||||
.comment-header{ | |||||
padding: 7px 10px; | |||||
.links-active { | |||||
padding-right: 10px; | |||||
} | |||||
} | |||||
.avatar-medium { | |||||
margin-right: 10px; | |||||
} | |||||
.reply { | |||||
padding: 10px; | |||||
} | |||||
.commented-on-small{ | |||||
display: inline-block; | |||||
} | |||||
.commented-on-small{ | |||||
display: inline-block; | |||||
} | |||||
} | |||||
&.notification-content { | |||||
padding-left: 15px; | |||||
margin: 20px 0; | |||||
&::before { | |||||
content: none; | |||||
} | |||||
.small { | |||||
padding-left: 0; | |||||
} | |||||
} | |||||
.delivery-status-indicator { | |||||
float: left; | |||||
margin: 0 5px 0 0; | |||||
} | |||||
} | |||||
.asset-details { | |||||
line-height: 24px; /*Height of avtar image -36px to align text center vertically*/ | |||||
} | |||||
} | |||||
} | } |