Files
Desktop/stylesheets/_conversation.scss
lilia 6a4b720b89 Make timestamp text selectable
Previously we only declared the message body as selectable, but Chrome's
implementation of user-select is a little quirky in that it allows
unselectable text to be copied if you select elements around it. Oddly
enough, styling the entire bubble contents as selectable, including the
timestamp, actually prevents chrome from copying the timestamp text when
it's not supposed to, i.e., when triple-clicking the message body.

Fixes #887

// FREEBIE
2016-09-10 15:02:20 -07:00

578 lines
9.1 KiB
SCSS

.conversation-title {
display: block;
line-height: 36px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
padding: 0 46px;
-webkit-user-select: text;
}
.conversation-name + .conversation-number {
&:before {
content:"\00b7"; // &middot
font-weight: bold;
padding: 0 5px 0 4px;
}
}
.conversation {
background-color: #ffffff;
height: 100%;
.panel {
height: calc(100% - #{$header-height});
overflow-y: scroll;
.container {
padding-top: 20px;
max-width: 950px;
margin: 0 auto;
padding: 20px;
}
}
.main.panel {
display: flex;
flex-direction: column;
overflow: initial;
.discussion-container {
flex-grow: 1;
position: relative;
max-width: 100%;
margin: 0;
.bar-container {
height: 5px;
}
.message-list {
position: absolute;
top: 0;
height: 100%;
width: 100%;
margin: 0;
padding: 2em 20px 0;
overflow-y: auto;
}
}
}
}
.key-verification {
label {
display: block;
margin-bottom: 10px;
font-size: $font-size-small;
}
.key, .placeholder {
padding: 0 1em;
-webkit-user-select: text;
}
.key {
display: inline-block;
font-family: monospace;
padding: 10px;
margin-bottom: 20px;
background: $grey_l;
border: solid 1px $grey_l2;
border-radius: $border-radius;
}
.placeholder {
font-weight: bold;
}
}
.message-detail {
.key-conflict-dialogue {
border-radius: $border-radius;
margin: 20px 0;
.header {
border-radius: $border-radius $border-radius 0 0;
background: #F3F3A7;
margin: 0;
padding: 10px 20px
}
.content {
padding: 20px;
border: 2px solid #F3F3A7;
}
button.resolve {
outline: none;
border: none;
border-radius: $border-radius;
color: white;
font-weight: bold;
line-height: 36px;
padding: 0 20px;
float: right;
background: $blue;
margin-left: 20px;
}
.hideKeys, .showKeys {
float: right;
line-height: 36px;
}
}
.message-container {
background: white;
padding: 20px 0;
.sender {
display: none;
}
}
.info {
padding: 1em;
.label {
font-weight: bold;
padding-right: 1em;
vertical-align: top;
}
button {
border: none;
border-radius: $border-radius;
color: white;
padding: 0.5em;
font-weight: bold;
span {
vertical-align: middle;
}
}
}
.contacts .contact-detail {
padding: 0 36px;
margin-bottom: 5px;
.error-icon-container {
float: right;
}
.error-message {
margin: 6px 0 0;
font-size: $font-size-small;
font-weight: bold;
color: red;
}
}
h3 {
font-size: 1em;
padding: 5px;
}
button.conflict {
float: right;
background: #d00;
}
button.cancel {
float: right;
color: $grey_d;
border: solid 1px #ccc;
}
}
.message-list {
.error-icon {
cursor: pointer;
}
}
li.entry .error-icon-container {
position: absolute;
top: 0;
left: calc(100% + 5px);
height: 100%;
.error-icon {
display: block;
height: 100%;
}
.error-message {
display: none;
position: absolute;
background: black;
color: white;
border-radius: $border-radius;
padding: 0.5em;
font-weight: normal;
bottom: calc(50% + 18px);
left: -84px;
width: 180px;
z-index: 10;
&:before {
display: block;
content: '';
position: absolute;
bottom: -16px;
left: 50%;
border: 6px solid transparent;
border-top: 10px solid #000000;
}
}
&:hover .error-message { display: inline-block; }
}
.error-icon {
display: inline-block;
width: $error-icon-size;
height: $error-icon-size;
position: relative;
@include color-svg('/images/warning.svg', red);
}
.group {
li.entry .unregistered-user-error {
display: none;
}
}
.group-update {
font-size: smaller;
}
.private .entry .avatar,
.private .sender,
.outgoing .sender {
display: none;
}
.sender {
font-size: smaller;
opacity: 0.8;
margin-bottom: 5px;
font-weight: bold;
}
.timestamp {
margin-right: 3px;
white-space: nowrap;
}
.message-container,
.message-list {
list-style: none;
li {
max-width: 800px;
margin: 0 auto 10px;
&::after {
visibility: hidden;
display: block;
font-size: 0;
content: " ";
clear: both;
height: 0;
}
}
.bubble {
position: relative;
left: -2px;
display: inline-block;
vertical-align: top;
word-wrap: break-word;
margin-left: 8px;
max-width: 30em;
text-align: -webkit-auto;
-webkit-user-select: text;
@media(max-width: $big-avatar-min-width - 1px) {
max-width: calc(100% - 45px - #{$error-icon-size}); // avatar size + padding + error-icon size
}
.body {
white-space: pre-wrap;
a {
word-break: break-all
}
}
p {
margin: 0;
}
}
.meta {
font-size: smaller;
margin-top: 3px;
float: right;
text-align: right;
line-height: 18px;
.hasRetry + .timestamp {
&:before {
content:"\00b7"; // &middot
font-weight: bold;
padding: 0 5px 0 4px;
text-decoration: none;
opacity: 0.5;
}
}
.retry {
text-decoration: underline;
cursor: pointer;
}
.hasRetry, .timestamp, .status {
float: left;
}
.timestamp, .status {
cursor: pointer;
opacity: 0.5;
&:hover {
opacity: 1.0;
}
}
}
.status {
width: 18px;
height: 18px;
}
.sent .status {
display: inline-block;
@include color-svg('/images/check.svg', black);
}
.delivered .status {
display: inline-block;
@include color-svg('/images/double-check.svg', black);
}
.pending .status {
display: inline-block;
background: none;
&:before { content: '...'; }
}
.incoming {
.avatar, .bubble {
float: left;
}
}
.outgoing {
.error-icon-container {
left: auto;
right: calc(100% + 5px);
}
.avatar, .bubble {
float: right;
}
.bubble {
clear: left;
}
}
.control {
.bubble {
.content {
font-style: italic;
}
&::before, &::after {
display: none;
}
}
}
.attachments {
a {
font-style: italic;
display: block;
padding: 1em;
background-color: #ccc;
}
img, audio, video {
max-width: 100%;
max-height: 300px;
}
video {
background: black;
min-height: 300px;
min-width: 240px;
}
img {
cursor: pointer;
}
}
.outgoing .avatar {
display: none;
}
.bubble .content.error-message {
cursor: pointer;
font-style: italic;
}
.key-conflict {
padding: 15px 10px;
button {
margin-top: 5px;
}
}
}
.message-list,
.message-container,
.key-conflict-dialogue {
.avatar {
height: 36px;
width: 36px;
line-height: 36px;
}
}
.bottom-bar {
box-sizing: content-box;
$button-width: 36px;
padding: 5px 5px 5px 0;
background: $grey_l;
form.active {
outline: solid 1px $blue;
}
form.send {
background: #ffffff;
}
input, textarea {
color: $grey_d;
}
.attachment-previews {
padding: 0 36px;
.attachment-preview {
padding: 13px 10px 0;
}
img {
border: 2px solid #ddd;
border-radius: $border-radius;
max-height: 100px;
}
.close {
position: absolute;
top: 5px;
right: 2px;
background: #999;
&:hover {
background: $grey;
}
}
}
.flex {
display: flex;
flex-direction: row;
.send-message {
flex-grow: 1;
}
}
.choose-file {
float: left;
height: 36px;
}
.send-message {
display: block;
max-height: 100px;
padding: 10px;
border: 0;
outline: 0;
z-index: 5;
resize: none;
font-size: 1em;
font-family: inherit;
&[disabled=disabled] {
background: transparent;
}
}
.capture-audio {
float: right;
height: 36px;
}
}
.toast {
position: absolute;
bottom: 0;
margin: 0 2em 3em;
padding: 0.5em 1.5em;
background: rgba(0, 0, 0, 0.75);
color: white;
box-shadow: 0 0 5px 0 black;
border-radius: $border-radius;
font-size: $font-size-small;
z-index: 100;
}
.confirmation-dialog {
.content {
max-width: 350px;
margin: 100px auto;
padding: 1em;
background: white;
border-radius: $border-radius;
overflow: auto;
box-shadow: 0px 3px 5px 0px rgba(0,0,0,0.2);
.message {
text-align: center;
}
.buttons {
margin-top: 10px;
button {
float: right;
margin-left: 10px;
background-color: $grey_l;
border-radius: $border-radius;
outline: none;
padding: 5px 8px;
border: 1px solid $grey_l2;
&:focus {
border-color: $grey_l4;
}
&:hover {
background-color: $grey_l2;
border-color: $grey_l3;
}
}
}
}
}