f387c947f5
- new config option `singleton`. - new plugin `converse-uniview` - removed `converse-embedded`. - various CSS changes, to properly render an embedded full app - don't re-open cached and non-autojoined chats in singleton mode The goal here is to extend the `embedded` `view_mode` so that the full app can also be embedded, not just a single MUC or private chat. To do this, we'll need to differentiate between multi and singleton chat apps. * A singleton chat app contains only a single chat. * A multi-chat app can contain zero or more chats So we introduce a new config option, `singleton`, which when used with `view_mode` set to `embedded` will determine whether a single chat or the full app is embedded. Similarly, in `overlayed`, `fullscreen` and `mobile` view modes, `singleton` set to true will allow only one chat within the parameters of that view mode. We're appropriating the word `singleton` and introducing the concepts of `uniview` and `multiview` (see a785ca8) to cover what was previously meant with `singleton`. updates #1297
643 lines
15 KiB
SCSS
643 lines
15 KiB
SCSS
@mixin fade-in {
|
|
opacity: 0; /* make things invisible upon start */
|
|
@include animation-name(fadein);
|
|
@include animation-fill-mode(forwards);
|
|
@include animation-duration(0.75s);
|
|
@include animation-timing-function(ease);
|
|
}
|
|
|
|
body.converse-fullscreen {
|
|
margin: 0;
|
|
background-color: var(--global-background-color);
|
|
}
|
|
|
|
#conversejs-bg {
|
|
.converse-brand {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
margin-top: 15vh;
|
|
@include animation-name(fadein);
|
|
@include animation-fill-mode(forwards);
|
|
@include animation-duration(5s);
|
|
@include animation-timing-function(ease);
|
|
}
|
|
|
|
.converse-brand__padding {
|
|
@include make-col-ready();
|
|
@include media-breakpoint-up(md) {
|
|
@include make-col(4);
|
|
}
|
|
@include media-breakpoint-up(lg) {
|
|
@include make-col(3);
|
|
}
|
|
@include media-breakpoint-up(xl) {
|
|
@include make-col(2);
|
|
}
|
|
padding: 0;
|
|
}
|
|
|
|
.converse-brand__heading {
|
|
@include make-col-ready();
|
|
@include media-breakpoint-up(md) {
|
|
font-size: 4em;
|
|
@include make-col(8);
|
|
}
|
|
@include media-breakpoint-up(lg) {
|
|
font-size: 5em;
|
|
@include make-col(9);
|
|
}
|
|
@include media-breakpoint-up(xl) {
|
|
font-size: 6em;
|
|
@include make-col(10);
|
|
}
|
|
padding: 0;
|
|
display: flex;
|
|
justify-content: center;
|
|
margin: auto;
|
|
svg {
|
|
margin-top: 0.3em;
|
|
}
|
|
}
|
|
|
|
.converse-brand__text {
|
|
color: #ffffff;
|
|
font-family: var(--branding-font);
|
|
font-weight: normal;
|
|
text-align: center;
|
|
font-size: 140%;
|
|
margin-left: 0.2em;
|
|
.byline {
|
|
margin: 0;
|
|
font-family: var(--heading-font);
|
|
font-size: 0.3em;
|
|
opacity: 0.55;
|
|
margin-bottom: 2em;
|
|
margin-left: -2.7em;
|
|
word-spacing: 5px;
|
|
}
|
|
}
|
|
}
|
|
|
|
#conversejs-bg, #conversejs {
|
|
.subdued {
|
|
opacity: 0.35;
|
|
}
|
|
}
|
|
|
|
#conversejs {
|
|
bottom: 0;
|
|
height: 100%;
|
|
position: fixed;
|
|
padding-left: env(safe-area-inset-left);
|
|
padding-right: env(safe-area-inset-right);
|
|
color: var(--text-color);
|
|
font-family: var(--normal-font);
|
|
font-size: var(--font-size);
|
|
direction: ltr;
|
|
z-index: 1031; // One more than bootstrap navbar
|
|
|
|
textarea:disabled {
|
|
background-color: #EEE !important;
|
|
}
|
|
|
|
.nopadding {
|
|
padding: 0 !important;
|
|
}
|
|
|
|
&.converse-overlayed {
|
|
> .row {
|
|
flex-direction: row-reverse;
|
|
}
|
|
}
|
|
|
|
&.converse-fullscreen,
|
|
&.converse-mobile {
|
|
.converse-chatboxes {
|
|
width: 100vw;
|
|
left: -15px; // Hack due to padding added by bootstrap
|
|
}
|
|
}
|
|
&.converse-overlayed {
|
|
height: 3em;
|
|
}
|
|
&.converse-embedded {
|
|
@include box-sizing(border-box);
|
|
*, *:before, *:after {
|
|
@include box-sizing(border-box);
|
|
}
|
|
bottom: auto;
|
|
height: 100%; // When embedded, it fills the containing element
|
|
position: relative;
|
|
right: auto;
|
|
width: 100%;
|
|
}
|
|
|
|
.brand-heading-container {
|
|
text-align: center;
|
|
}
|
|
|
|
.brand-heading {
|
|
display: inline-flex;
|
|
flex-direction: row;
|
|
align-items: flex-start;
|
|
font-family: var(--branding-font);
|
|
color: var(--link-color);
|
|
margin-bottom: 1em;
|
|
|
|
.brand-name {
|
|
color: var(--link-color);
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
margin-top: -0.5em;
|
|
}
|
|
|
|
.brand-name__text {
|
|
font-size: 120%;
|
|
vertical-align: text-bottom;
|
|
}
|
|
|
|
.converse-svg-logo {
|
|
color: var(--link-color);
|
|
height: 1.5em;
|
|
margin-right: 0.25em;
|
|
margin-bottom: -0.25em;
|
|
.cls-1 {
|
|
isolation: isolate;
|
|
}
|
|
.cls-2 {
|
|
opacity: 0.5;
|
|
mix-blend-mode: multiply;
|
|
}
|
|
.cls-3 {
|
|
fill: var(--link-color);
|
|
}
|
|
.cls-4 {
|
|
fill: var(--link-color);
|
|
}
|
|
}
|
|
}
|
|
|
|
.brand-heading--inverse {
|
|
.converse-svg-logo {
|
|
margin-bottom: 0em;
|
|
margin-top: -0.2em;
|
|
}
|
|
.byline {
|
|
margin: 0;
|
|
font-family: var(--heading-font);
|
|
font-size: 0.25em;
|
|
opacity: 0.55;
|
|
margin-left: -7em;
|
|
word-spacing: 5px;
|
|
}
|
|
}
|
|
|
|
.popover {
|
|
position: fixed;
|
|
}
|
|
|
|
.converse-chatboxes {
|
|
z-index: 1031; // One more than bootstrap navbar
|
|
position: fixed;
|
|
bottom: 0;
|
|
right: 0;
|
|
}
|
|
|
|
::-webkit-input-placeholder { /* Chrome/Opera/Safari */
|
|
color: var(--subdued-color);
|
|
}
|
|
::-moz-placeholder { /* Firefox 19+ */
|
|
color: var(--subdued-color);
|
|
}
|
|
:-ms-input-placeholder { /* IE 10+ */
|
|
color: var(--subdued-color);
|
|
}
|
|
:-moz-placeholder { /* Firefox 18- */
|
|
color: var(--subdued-color);
|
|
}
|
|
::placeholder {
|
|
color: var(--subdued-color);
|
|
}
|
|
|
|
::selection {
|
|
background-color: var(--highlight-color);
|
|
}
|
|
::-moz-selection {
|
|
background-color: var(--highlight-color);
|
|
}
|
|
|
|
@media screen and (max-width: $mobile-portrait-length) {
|
|
margin: 0;
|
|
right: 10px;
|
|
left: 10px;
|
|
bottom: 5px;
|
|
}
|
|
@media screen and (max-height: $mobile-landscape-height) {
|
|
margin: 0;
|
|
right: 10px;
|
|
left: 10px;
|
|
bottom: 5px;
|
|
}
|
|
|
|
ul li { height: auto; }
|
|
div, span, h1, h2, h3, h4, h5, h6, p, blockquote,
|
|
pre, a, em, img, strong, dl, dt, dd, ol, ul, li,
|
|
fieldset, form, legend, table, caption, tbody,
|
|
tfoot, thead, tr, th, td, article, aside, details,
|
|
embed, figure, figcaption, footer, header, hgroup, menu,
|
|
nav, output, ruby, section, summary, time, mark, audio, video {
|
|
margin: 0;
|
|
padding: 0;
|
|
border: 0;
|
|
font: inherit;
|
|
vertical-align: baseline;
|
|
}
|
|
|
|
textarea,
|
|
input[type=submit], input[type=button],
|
|
input[type=text], input[type=password],
|
|
button {
|
|
font-size: var(--font-size);
|
|
padding: 0.25em;
|
|
min-height: 0;
|
|
}
|
|
|
|
strong {
|
|
font-weight: 700;
|
|
}
|
|
|
|
em {
|
|
font-style: italic;
|
|
}
|
|
|
|
ol, ul {
|
|
list-style: none;
|
|
}
|
|
|
|
li {
|
|
height: 10px;
|
|
}
|
|
|
|
ul, ol, dl {
|
|
font: inherit;
|
|
margin: 0;
|
|
}
|
|
|
|
a, a:visited, a:not([href]):not([tabindex]) {
|
|
text-decoration: none;
|
|
color: var(--link-color);
|
|
text-shadow: none;
|
|
&:hover {
|
|
color: var(--link-color-darken-20-percent);
|
|
text-decoration: none;
|
|
text-shadow: none;
|
|
}
|
|
|
|
&.fa, &.far, &.fas {
|
|
color: var(--subdued-color);
|
|
&:hover {
|
|
color: var(--gray-color);
|
|
}
|
|
}
|
|
}
|
|
|
|
svg {
|
|
border-radius: var(--chatbox-border-radius);
|
|
}
|
|
|
|
.fa, .far, .fas {
|
|
color: var(--subdued-color);
|
|
}
|
|
|
|
.fa:hover, .far:hover, .fas:hover {
|
|
color: var(--gray-color);
|
|
}
|
|
|
|
.modal {
|
|
background-color: rgba(0, 0, 0, 0.4);
|
|
|
|
.modal-body {
|
|
p {
|
|
padding: 0.25rem 0;
|
|
}
|
|
}
|
|
|
|
.modal-footer {
|
|
justify-content: flex-start;
|
|
}
|
|
}
|
|
|
|
.selected {
|
|
color: var(--link-color) !important;
|
|
}
|
|
|
|
.circle {
|
|
border-radius: 50%;
|
|
}
|
|
|
|
.badge {
|
|
line-height: 1;
|
|
font-weight: normal;
|
|
font-size: 90%;
|
|
}
|
|
|
|
.btn {
|
|
font-weight: normal;
|
|
color: #fff;
|
|
.fa, .far, .fas {
|
|
color: #fff;
|
|
margin-right: 0.5em;
|
|
}
|
|
}
|
|
|
|
.no-text-select {
|
|
-webkit-touch-callout: none;
|
|
@include user-select(none);
|
|
}
|
|
|
|
@keyframes colorchange-chatmessage {
|
|
0% {background-color: rgba(141, 216, 174, 1);}
|
|
25% {background-color: rgba(141, 216, 174, 0.75);}
|
|
50% {background-color: rgba(141, 216, 174, 0.5);}
|
|
75% {background-color: rgba(141, 216, 174, 0.25);}
|
|
100% {background-color: transparent;}
|
|
}
|
|
@-webkit-keyframes colorchange-chatmessage {
|
|
0% {background-color: rgba(141, 216, 174, 1);}
|
|
25% {background-color: rgba(141, 216, 174, 0.75);}
|
|
50% {background-color: rgba(141, 216, 174, 0.5);}
|
|
75% {background-color: rgba(141, 216, 174, 0.25);}
|
|
100% {background-color: transparent;}
|
|
}
|
|
|
|
@keyframes colorchange-chatmessage-muc {
|
|
0% {background-color: rgba(255, 181, 162, 1);}
|
|
25% {background-color: rgba(255, 181, 162, 0.75);}
|
|
50% {background-color: rgba(255, 181, 162, 0.5);}
|
|
75% {background-color: rgba(255, 181, 162, 0.25);}
|
|
100% {background-color: transparent;}
|
|
}
|
|
@-webkit-keyframes colorchange-chatmessage-muc {
|
|
0% {background-color: rgba(255, 181, 162, 1);}
|
|
25% {background-color: rgba(255, 181, 162, 0.75);}
|
|
50% {background-color: rgba(255, 181, 162, 0.5);}
|
|
75% {background-color: rgba(255, 181, 162, 0.25);}
|
|
100% {background-color: transparent;}
|
|
}
|
|
|
|
|
|
@keyframes fadein {
|
|
0% { opacity: 0 }
|
|
100% { opacity: 1 }
|
|
}
|
|
@-webkit-keyframes fadein {
|
|
0% { opacity: 0 }
|
|
100% { opacity: 1 }
|
|
}
|
|
|
|
@-webkit-keyframes fadeOut {
|
|
0% { opacity: 1; visibility: visible; }
|
|
100% { opacity: 0; visibility: hidden; }
|
|
}
|
|
@keyframes fadeOut {
|
|
0% { opacity: 1; visibility: visible; }
|
|
100% { opacity: 0; visibility: hidden; }
|
|
}
|
|
|
|
.fade-in {
|
|
@include fade-in;
|
|
}
|
|
|
|
.visible {
|
|
opacity:0; /* make things invisible upon start */
|
|
@include animation-name(fadein);
|
|
@include animation-fill-mode(forwards);
|
|
@include animation-duration(500ms);
|
|
@include animation-timing-function(ease);
|
|
}
|
|
|
|
.hidden {
|
|
opacity: 0 !important;
|
|
display: none !important;
|
|
}
|
|
|
|
.fade-out {
|
|
animation-duration: 1s;
|
|
animation-fill-mode: forwards;
|
|
animation-name: fadeOut;
|
|
animation-timing-function: ease-in-out;
|
|
}
|
|
|
|
.collapsed {
|
|
height: 0 !important;
|
|
overflow: hidden !important;
|
|
padding: 0 !important;
|
|
}
|
|
|
|
.locked {
|
|
padding-right: 22px;
|
|
}
|
|
|
|
|
|
@include keyframes(spin) {
|
|
from {
|
|
@include transform(rotate(0deg));
|
|
}
|
|
to {
|
|
@include transform(rotate(359deg));
|
|
}
|
|
}
|
|
|
|
.spinner {
|
|
@include animation(spin 2s infinite, linear);
|
|
width: 1em;
|
|
display: block;
|
|
text-align: center;
|
|
margin: 2em;
|
|
font-size: 24px;
|
|
}
|
|
.left {
|
|
float: left;
|
|
}
|
|
.right {
|
|
float: right;
|
|
}
|
|
.centered {
|
|
text-align: center;
|
|
display: block;
|
|
margin: auto;
|
|
}
|
|
.hor_centered {
|
|
text-align: center;
|
|
display: block;
|
|
margin: 0 auto;
|
|
clear: both;
|
|
}
|
|
|
|
.error {
|
|
color: var(--error-color);
|
|
}
|
|
.info {
|
|
color: var(--info-color);
|
|
}
|
|
.reg-feedback {
|
|
font-size: 85%;
|
|
margin-bottom: 1em;
|
|
}
|
|
|
|
.reg-feedback,
|
|
#converse-login .conn-feedback {
|
|
display: block;
|
|
text-align: center;
|
|
width: 100%;
|
|
}
|
|
|
|
.avatar {
|
|
border-radius: var(--avatar-border-radius);
|
|
border: var(--avatar-border);
|
|
background-color: var(--avatar-background-color);
|
|
}
|
|
|
|
.activated {
|
|
display: block !important;
|
|
}
|
|
|
|
.nav-pills .nav-link.active,
|
|
.nav-pills .show > .nav-link {
|
|
background-color: var(--primary-color);
|
|
}
|
|
|
|
.list-group-item.active {
|
|
background-color: var(--primary-color);
|
|
border-color: var(--primary-color-dark);
|
|
}
|
|
|
|
.badge {
|
|
text-shadow: none;
|
|
color: white;
|
|
}
|
|
|
|
.badge-light {
|
|
color: var(--text-color);
|
|
}
|
|
|
|
.btn-primary, .button-primary, .badge-primary {
|
|
background-color: var(--primary-color);
|
|
border-color: transparent;
|
|
&:hover {
|
|
background-color: var(--primary-color-dark);
|
|
border-color: transparent;
|
|
}
|
|
&.active {
|
|
background-color: var(--primary-color-dark) !important;
|
|
border-color: transparent !important;
|
|
}
|
|
}
|
|
|
|
.badge-groupchat {
|
|
background-color: var(--chatroom-badge-color);
|
|
border-color: transparent;
|
|
&:hover {
|
|
background-color: var(--chatroom-badge-hover-color);
|
|
border-color: transparent;
|
|
}
|
|
&.active {
|
|
background-color: var(--chatroom-badge-hover-color) !important;
|
|
border-color: transparent !important;
|
|
}
|
|
}
|
|
|
|
.btn-info, .badge-info {
|
|
background-color: var(--primary-color);
|
|
border-color: var(--primary-color);
|
|
&:hover {
|
|
background-color: var(--primary-color-dark);
|
|
border-color: var(--primary-color-dark);
|
|
}
|
|
}
|
|
|
|
.button-cancel,
|
|
.btn-secondary, .badge-secondary {
|
|
color: white;
|
|
background-color: var(--secondary-color);
|
|
border-color: var(--secondary-color);
|
|
&:hover {
|
|
background-color: var(--secondary-color-dark);
|
|
border-color: var(--secondary-color-dark);
|
|
}
|
|
}
|
|
|
|
.btn-warning {
|
|
color: white;
|
|
background-color: var(--warning-color);
|
|
border-color: var(--warning-color);
|
|
&:hover {
|
|
color: white;
|
|
background-color: var(--warning-color-dark);
|
|
border-color: var(--warning-color-dark)
|
|
}
|
|
}
|
|
|
|
.btn-danger {
|
|
color: white;
|
|
background-color: var(--danger-color);
|
|
border-color: var(--danger-color) !important;
|
|
&:hover {
|
|
background-color: var(--danger-color-dark);
|
|
border-color: var(--danger-color-dark);
|
|
}
|
|
}
|
|
}
|
|
|
|
@media screen and (max-width: 575px) {
|
|
body {
|
|
.converse-brand {
|
|
font-size: 3.75em;
|
|
}
|
|
}
|
|
#conversejs:not(.converse-embedded) {
|
|
.chatbox {
|
|
.chat-body {
|
|
border-radius: var(--chatbox-border-radius);
|
|
}
|
|
}
|
|
.flyout {
|
|
border-radius: var(--chatbox-border-radius);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@media screen and (min-width: 576px) {
|
|
#conversejs .offset-sm-2 {
|
|
margin-left: 16.666667%;
|
|
}
|
|
}
|
|
@media screen and (min-width: 768px) {
|
|
#conversejs .offset-md-2 {
|
|
margin-left: 16.666667%;
|
|
}
|
|
#conversejs .offset-md-3 {
|
|
margin-left: 25%;
|
|
}
|
|
}
|
|
@media screen and (min-width: 992px) {
|
|
#conversejs .offset-lg-2 {
|
|
margin-left: 16.666667%;
|
|
}
|
|
#conversejs .offset-lg-3 {
|
|
margin-left: 25%;
|
|
}
|
|
}
|
|
@media screen and (min-width: 1200px) {
|
|
#conversejs .offset-xl-2 {
|
|
margin-left: 16.666667%;
|
|
}
|
|
}
|
|
@media screen and (max-height: 450px) {
|
|
#conversejs {
|
|
left: 0;
|
|
}
|
|
}
|