Commit 808155bc authored by JC Brand's avatar JC Brand

Place chat boxes inside bootstrap rows

instead of the other way around.
parent 7f8b42fa
......@@ -3,7 +3,7 @@ SHELL := /bin/bash --login
UGLIFYJS ?= node_modules/.bin/uglifyjs
BABEL ?= node_modules/.bin/babel
BOURBON = ./node_modules/bourbon/app/assets/stylesheets/
BOOTSTRAP = ./node_modules/bootstrap/scss/
BOOTSTRAP = ./node_modules/
BUILDDIR = ./docs
BUNDLE ?= ./.bundle/bin/bundle
CHROMIUM ?= ./node_modules/.bin/run-headless-chromium
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -5,6 +5,17 @@ body {
color: #ffffff;
background-color: #211018;
}
body .brand-heading {
margin: auto;
font-size: 6em;
font-weight: bold;
}
body .brand-heading .icon-conversejs {
font-size: 0.88em;
}
html {
width: 100%;
height: 100%;
......@@ -43,6 +54,14 @@ a:focus {
text-decoration: none;
color: #00aaff;
}
.converse-bg {
position: relative;
height: 100vh;
text-align: center;
color: #fff;
}
.light {
font-weight: 400;
}
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -3,84 +3,53 @@
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Converse.js Mockups</title>
<title>Login Fullscreen</title>
<link type="text/css" rel="stylesheet" media="screen" href="../../node_modules/bootstrap/dist/css/bootstrap.css" />
<link type="text/css" rel="stylesheet" media="screen" href="../../node_modules/font-awesome/css/font-awesome.css" />
<link type="text/css" rel="stylesheet" media="screen" href="../../css/inverse.css" />
</head>
<body>
<div class="container converse-bg">
<h1 class="brand-heading"><i class="icon-conversejs"></i>&nbsp;inVerse</h1>
</div>
<div class="container converse-bg">
<h1 class="brand-heading"><i class="icon-conversejs"></i>&nbsp;inVerse</h1>
</div>
<div class="container-fluid">
<div id="conversejs" class="fullscreen">
<div id="controlbox" class="chatbox">
<div class="flyout box-flyout">
<div class="controlbox-panes">
<div id="login-dialog" class="controlbox-pane">
<div class="row">
<div class="brand-heading-container col-12">
<h1 class="brand-heading">
<i class="icon-conversejs"></i> inVerse</h1>
<p>
<a href="https://conversejs.org">Open Source</a> XMPP chat client</p>
</div>
</div>
<div id="conversejs" class="fullscreen">
<div class="row no-gutters">
<div id="controlbox" class="chatbox">
<div class="flyout box-flyout">
<div class="controlbox-panes">
<div id="login-dialog" class="controlbox-pane">
<div class="row">
<div class="brand-heading-container col-12">
<h1 class="brand-heading"><i class="icon-conversejs"></i> inVerse</h1>
<p><a href="https://conversejs.org">Open Source</a> XMPP chat client</p>
</div>
</div>
<div class="row">
<div class="col-sm-8 offset-sm-2 col-md-8 offset-md-2 col-lg-6 offset-lg-3">
<form id="converse-login" class="pure-form converse-form">
<div class="form-group">
<label for="jid">XMPP Username:</label>
<input type="text" name="jid" class="form-control" placeholder="user@server" autocomplete="off">
</div>
<div class="form-group">
<label for="password">Password:</label>
<input type="password" name="password" class="form-control" placeholder="password" autocomplete="off">
</div>
<div class="row">
<div class="col-sm-8 offset-sm-2 col-md-8 offset-md-2 col-lg-6 offset-lg-3">
<form id="converse-login" class="pure-form converse-form">
<div class="form-group">
<label for="jid">XMPP Username:</label>
<input type="text" name="jid" class="form-control" placeholder="user@server" autocomplete="off">
</div>
<div class="form-group">
<label for="password">Password:</label>
<input type="password" name="password" class="form-control" placeholder="password" autocomplete="off">
</div>
<fieldset class="buttons">
<p><input class="btn btn-primary" type="submit" value="Log In"></p>
<p>Click <a href="#" data-toggle="modal" data-target="#registerModal">here</a> to register.</p>
</fieldset>
</form>
</div>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Register Modal -->
<div class="modal fade" id="registerModal" tabindex="-1" role="dialog" aria-labelledby="registerModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="registerModalLabel">Register</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<form id="converse-register">
<div class="form-group">
<label for="domain">Your XMPP provider's domain name:</label>
<input type="text" name="domain" class="form-control" placeholder=" e.g. conversejs.org">
</div>
<p>Tip: A list of public XMPP providers is available
<a href="https://xmpp.net/directory.php" class="url" target="_blank" rel="noopener">here</a>.</p>
<input class="btn btn-primary" type="submit" value="Fetch registration form">
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
<!-- Register Modal -->
<div class="modal fade" id="registerModal" tabindex="-1" role="dialog" aria-labelledby="registerModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="registerModalLabel">Register</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<form id="converse-register">
<div class="form-group">
<label for="domain">Your XMPP provider's domain name:</label>
<input type="text" name="domain" class="form-control" placeholder=" e.g. conversejs.org">
</div>
<p>Tip: A list of public XMPP providers is available
<a href="https://xmpp.net/directory.php" class="url" target="_blank" rel="noopener">here</a>.</p>
<input class="btn btn-primary" type="submit" value="Fetch registration form">
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<!-- Contact Profile Modal -->
<div class="modal fade" id="contactProfileModal" tabindex="-1" role="dialog" aria-labelledby="contactProfileModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="contactProfileModalLabel">JC Brand User Profile</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<!-- User Profile Modal -->
<div class="modal fade" id="userProfileModal" tabindex="-1" role="dialog" aria-labelledby="userProfileModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
......
......@@ -3,7 +3,7 @@
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Converse.js Mockups</title>
<title>Login Overlayed</title>
<link type="text/css" rel="stylesheet" media="screen" href="../../node_modules/font-awesome/css/font-awesome.css" />
<link type="text/css" rel="stylesheet" media="screen" href="../../css/converse.css" />
<link type="text/css" rel="stylesheet" media="screen" href="css/mockup.css" />
......@@ -15,64 +15,55 @@
</div>
<div id="conversejs">
<div id="controlbox" class="chatbox">
<div class="flyout box-flyout">
<div class="controlbox-panes">
<div id="login-dialog" class="controlbox-pane">
<div class="row">
<div class="brand-heading-container col-12">
<h1 class="brand-heading"><i class="icon-conversejs"></i> converse</h1>
</div>
<div class="row no-gutters">
<div id="controlbox" class="chatbox col col-lg-2 col-md-3 col-sm-4 col-sx-12">
<div class="flyout box-flyout">
<div class="controlbox-panes">
<div id="login-dialog" class="controlbox-pane row">
<div class="brand-heading-container col-12">
<h1 class="brand-heading"><i class="icon-conversejs"></i> converse</h1>
</div>
<div class="col-12">
<form id="converse-login" class="pure-form converse-form">
<div class="form-group">
<label for="jid">XMPP Username:</label>
<input type="text" name="jid" class="form-control" placeholder="user@server" autocomplete="off">
</div>
<div class="form-group">
<label for="password">Password:</label>
<input type="password" name="password" class="form-control" placeholder="password" autocomplete="off">
</div>
<p></p>
<p><input class="btn btn-primary" type="submit" value="Log In"></p>
<p>Click <a href="#" data-toggle="modal" data-target="#registerModal">here</a> to register.</p>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-12">
<form id="converse-login" class="pure-form converse-form">
<div class="form-group">
<label for="jid">XMPP Username:</label>
<input type="text" name="jid" class="form-control" placeholder="user@server" autocomplete="off">
</div>
<div class="form-group">
<label for="password">Password:</label>
<input type="password" name="password" class="form-control" placeholder="password" autocomplete="off">
</div>
<p></p>
<p><input class="btn btn-primary" type="submit" value="Log In"></p>
<p>Click <a href="#" data-toggle="modal" data-target="#registerModal">here</a> to register.</p>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="modals"></div>
</div>
<!-- Register Modal -->
<div class="modal fade" id="registerModal" tabindex="-1" role="dialog" aria-labelledby="registerModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="registerModalLabel">Register</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<form id="converse-register">
<div class="form-group">
<label for="domain">Your XMPP provider's domain name:</label>
<input type="text" name="domain" class="form-control" placeholder=" e.g. conversejs.org">
</div>
<p>Tip: A list of public XMPP providers is available
<a href="https://xmpp.net/directory.php" class="url" target="_blank" rel="noopener">here</a>.</p>
<input class="btn btn-primary" type="submit" value="Fetch registration form">
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
</body>
<script type="text/javascript" src="../../node_modules/lodash/lodash.js"></script>
<script type="text/javascript" src="../../node_modules/backbone/backbone.js"></script>
<script type="text/javascript" src="../../node_modules/backbone.nativeview/backbone.nativeview.js"></script>
<script type="text/javascript" src="sidebar.js"></script>
<script type="text/javascript" src="user-panel.js"></script>
<script type="text/javascript" src="modals.js"></script>
<script type="text/javascript" src="../../node_modules/bootstrap.native/dist/bootstrap-native-v4.js"></script>
<script>
document.addEventListener("DOMContentLoaded", function(event) {
new Modals();
new Sidebar();
new UserPanel();
});
</script>
</body>
</html>
......@@ -9,8 +9,8 @@
border-radius: 0;
}
bottom: $chatbox-hover-height;
display: block;
position: absolute;
@media screen and (max-height: $mobile-landscape-height) {
bottom: 0;
}
......@@ -65,12 +65,10 @@
}
}
.chatbox {
display: block;
text-align: left;
float: right;
height: $bottom-gutter-height;
margin: 0 $chat-gutter;
width: $chat-width;
@media screen and (max-height: $mobile-landscape-height) {
margin: 0;
width: $mobile-chat-width;
......@@ -84,9 +82,10 @@
box-shadow: 1px 3px 5px 3px rgba(0, 0, 0, 0.4);
height: $chat-height;
min-height: $chat-height/2;
min-width: $chat-width;
width: $chat-width;
z-index: 1;
overflow-y: scroll;
width: 100%;
@media screen and (max-height: $mobile-landscape-height) {
height: $mobile-chat-height;
width: $mobile-chat-width;
......@@ -448,9 +447,6 @@
padding: 3em 2em 3em;
}
}
> .chatbox {
width: calc(100% - 50px);
}
.chatbox {
.chat-body {
.chat-message {
......@@ -460,8 +456,6 @@
}
}
.row {
width: calc(100% - 50px);
.box-flyout {
left: 50px;
bottom: 0;
......
......@@ -49,8 +49,7 @@
}
.box-flyout {
min-width: $chatroom-width;
width: $chatroom-width;
width: 100%;
@media screen and (max-height: $mobile-landscape-height) {
height: $mobile-chat-height;
width: $mobile-chat-width;
......@@ -70,6 +69,10 @@
width: 100%;
overflow: hidden;
.row {
flex-direction: row;
}
.chat-info {
color: white;
line-height: normal;
......@@ -99,8 +102,6 @@
}
.chat-area {
word-wrap: break-word;
width: 100%;
float: left;
min-width: $chat-width;
height: calc(100% - 95px);
......@@ -121,13 +122,10 @@
.occupants {
overflow-x: hidden;
overflow-y: hidden;
float: right;
vertical-align: top;
background-color: white;
border-left: 1px solid $text-color;
border-bottom-right-radius: $chatbox-border-radius;
width: 30%;
height: 100%;
padding: 0.5em;
.occupants-heading {
padding: 0.3em 0;
......
......@@ -2,13 +2,6 @@
#controlbox {
margin-right: 2*$chat-gutter;
@media screen and (max-width: $mobile-portrait-length) {
margin: 0;
}
@media screen and (max-height: $mobile-landscape-height) {
margin: 0;
}
.pure-form.converse-form {
padding: 0;
}
......@@ -122,6 +115,8 @@
}
#login-dialog {
flex-direction: column;
.brand-heading {
color: $global-background-color;
}
......@@ -409,7 +404,6 @@
}
.controlbox-panes {
height: 100%;
overflow-y: scroll;
}
......@@ -420,9 +414,7 @@
font-size: $font-size;
left: 0;
text-align: left;
width: 100%;
height: 100%;
overflow-y: hidden;
overflow-y: scroll;
overflow-x: hidden;
border-radius: $chatbox-border-radius;
......@@ -532,6 +524,7 @@
top: 0;
left: 50px;
display: none;
width: calc(100% - 50px);
&.controlbox-pane {
height: 100vh;
......
......@@ -6,59 +6,32 @@
@include animation-timing-function(ease);
}
// FIXME: these need to go elsewhere, they're outside of #conversejs
.converse-bg {
position: relative;
height: 100vh;
text-align: center;
color: #fff;
}
body {
.brand-heading {
margin: auto;
font-size: 6em;
font-weight: bold;
.icon-conversejs {
font-size: 0.88em;
}
}
}
#converse-embedded-chat,
#conversejs {
height: 0;
width: 100vw;
bottom: 0;
color: $text-color;
direction: ltr;
display: block;
font-family: "Helvetica", "Arial", sans-serif;
font-size: $font-size;
height: $bottom-gutter-height;
position: fixed;
right: 0;
width: auto;
z-index: 1031; // One more than bootstrap navbar
@media screen and (max-height: $mobile-landscape-height) {
width: 100%;
width: 100vw;
::-webkit-input-placeholder { /* Chrome/Opera/Safari */
color: $subdued-color;
}
@media screen and (max-width: $mobile-portrait-length) {
width: 100%;
width: 100vw;
::-moz-placeholder { /* Firefox 19+ */
color: $subdued-color;
}
:-ms-input-placeholder { /* IE 10+ */
color: $subdued-color;
}
:-moz-placeholder { /* Firefox 18- */
color: $subdued-color;
}
::-webkit-input-placeholder { /* Chrome/Opera/Safari */
color: $subdued-color;
}
::-moz-placeholder { /* Firefox 19+ */
color: $subdued-color;
}
:-ms-input-placeholder { /* IE 10+ */
color: $subdued-color;
}
:-moz-placeholder { /* Firefox 18- */
color: $subdued-color;
}
::placeholder {
color: $subdued-color;
}
......@@ -81,31 +54,33 @@ body {
}
.sidebar {
display: none;
display: none;
position: absolute;
width: 50px;
height: 100vh;
padding: 10px 0;
background-color: $controlbox-head-color;
background-color: $controlbox-head-color;
color: white;
text-align: center;
.chatbox-btn {
float: none;
.chatbox-btn {
float: none;
margin: 0;
font-size: 1.35em;
&.fa-vcard {
&.fa-vcard {
margin-top: 1em;
}
}
.bottom {
}
.bottom {
position: absolute;
bottom: 1em;
}
}
.badge {
padding: 0.25em 0.4em;
}
.badge {
padding: 0.4em;
line-height: 1;
font-weight: normal;
font-size: 90%;
}
.fa {
......@@ -387,10 +362,6 @@ body {
}
}
#conversejs {
margin: 0;
width: 100%;
height: 100%;
.chatbox {
.chat-body {
border-radius: $chatbox-border-radius;
......
#conversejs {
@include box-sizing(border-box);
*, *:before, *:after {
@include box-sizing(border-box);
}
@media screen and (max-width: $mobile-portrait-length) {
margin: 0;
right: 10px;
......
......@@ -5,7 +5,7 @@
margin: 0;
height: $roster-height;
height: calc(~"100% - #{$controlbox-dropdown-height*2} - 20px");
padding: 0 0 2em 0;
padding: 0;
overflow: hidden;
&.no-contact-requests {
......
......@@ -58,3 +58,11 @@
}
}
}
@include media-breakpoint-down(sm) {
#conversejs:not(.fullscreen) {
.row {
flex-direction: column;
}
}
}
#conversejs:not(.fullscreen) {
#controlbox {
order: -1;
#converse-register {
.button-cancel {
font-size: 90%;
......
#conversejs {
.row {
flex-direction: row-reverse;
flex-wrap: nowrap;
}
}
......@@ -3,16 +3,12 @@
border-top-left-radius: $chatbox-border-radius;
border-top-right-radius: $chatbox-border-radius;
color: $inverse-link-color;
float: right;
font-weight: bold;
height: 100%;
margin: 0 $chat-gutter;
margin-right: $chat-gutter;
bottom: 3*$chat-gutter;
padding: 0;
width: 130px;
.badge {
position: absolute;
right: 122px;
bottom: 8px;
border: 1px solid $gray-color;
}
......@@ -21,22 +17,18 @@
border-top-left-radius: $chatbox-border-radius;
border-top-right-radius: $chatbox-border-radius;
background-color: $link-color;
color: white;
position: relative;
border: 1px solid white;
padding: 10px 0 0 0;
display: block;
width: 100%;
height: 100%;
text-align: center;
color: white;
}
.minimized-chats-flyout {
height: auto;
bottom: $bottom-gutter-height;
width: 100%;
.chat-head {
padding: 0.3em;
border-radius: $chatbox-border-radius;
width: $minimized-chats-width;
height: 35px;
margin-bottom: 0.2em;
box-shadow: 1px 3px 5px 3px rgba(0, 0, 0, 0.4);
......
......@@ -87,7 +87,7 @@ $info-color: $dark-green !default;
$button-border-radius: 5px !default;
$chatbox-border-radius: 4px !default;
$bottom-gutter-height: 35px !default;
$chatbox-hover-height: 6px !default;
$chatbox-hover-height: 3em !default;
$mobile_landscape_height: 450px !default;
$mobile_portrait_length: 480px !default;
......@@ -111,7 +111,7 @@ $line-height-large: 20px !default;
$controlbox-width: 200px !default;
$chat-width: 200px !default;
$chat-height: 450px !default;
$chat-gutter: 0.5em !default;
$chat-gutter: 1em !default;
$minimized-chats-width: 130px !default;
$mobile-chat-width: 100% !default;
......
......@@ -6,14 +6,42 @@
* Licensed under the Mozilla Public License
*/
#conversejs {
@import "bootstrap";
}
@import "bourbon";
@import "variables";
@import "bootstrap/scss/functions";
@import "bootstrap/scss/variables";
@import "bootstrap/scss/mixins";
@import "../fonts";
@import "../normalize";
#conversejs {
@import "bootstrap/scss/root";
@import "bootstrap/scss/reboot";
@import "bootstrap/scss/type";
@import "bootstrap/scss/images";
@import "bootstrap/scss/grid";
@import "bootstrap/scss/forms";
@import "bootstrap/scss/buttons";
@import "bootstrap/scss/transitions";
@import "bootstrap/scss/dropdown";
@import "bootstrap/scss/button-group";
@import "bootstrap/scss/input-group";
@import "bootstrap/scss/custom-forms";
@import "bootstrap/scss/card";
@import "bootstrap/scss/breadcrumb";
@import "bootstrap/scss/badge";
@import "bootstrap/scss/media";
@import "bootstrap/scss/list-group";
@import "bootstrap/scss/close";
@import "bootstrap/scss/modal";
@import "bootstrap/scss/tooltip";
@import "bootstrap/scss/popover";
@import "bootstrap/scss/utilities";
}
@import "../core";
@import "core";
@import "../chatbox";
@import "chatbox";
@import "../controlbox";
......
......@@ -85,3 +85,16 @@
}
}
}
@media screen and (max-width: 767px) {
#conversejs.fullscreen {
> .chatbox {
width: calc(100% - 50px);
}
.chatbox {
.row {
width: calc(100% - 50px);
}
}
}
}
#conversejs.fullscreen {
#controlbox {
width: 100%;
float: left;
margin: 0;
#login-dialog {
......
body {
width: 100%;
height: 100%;
height: 100vh;
font-family: "Lora", "Helvetica Neue", Helvetica, Arial, sans-serif;
color: #ffffff;
background-color: $global-background-color;
......@@ -38,8 +35,7 @@ body {
}
#conversejs.fullscreen {
width: 100vw;
height: 100vh;
height: auto;
bottom: 0;
left: 0;
right: 0;
......@@ -68,12 +64,3 @@ body {
}
}
}
@media screen and (max-width: 767px) {
#conversejs.fullscreen {
background-color: white;
margin: 0;
width: 100%;
height: 100%;
}
}
......@@ -6,11 +6,39 @@
* Licensed under the Mozilla Public License
*/
@import "bootstrap";
@import "bourbon";
@import "variables";
@import "bootstrap/scss/functions";
@import "bootstrap/scss/variables";
@import "bootstrap/scss/mixins";
@import "../fonts";
@import "../normalize";
#conversejs {
@import "bootstrap/scss/root";
@import "bootstrap/scss/reboot";
@import "bootstrap/scss/type";
@import "bootstrap/scss/images";
@import "bootstrap/scss/grid";
@import "bootstrap/scss/forms";
@import "bootstrap/scss/buttons";
@import "bootstrap/scss/transitions";
@import "bootstrap/scss/dropdown";
@import "bootstrap/scss/button-group";
@import "bootstrap/scss/input-group";
@import "bootstrap/scss/custom-forms";
@import "bootstrap/scss/card";
@import "bootstrap/scss/breadcrumb";
@import "bootstrap/scss/badge";
@import "bootstrap/scss/media";
@import "bootstrap/scss/list-group";
@import "bootstrap/scss/close";
@import "bootstrap/scss/modal";
@import "bootstrap/scss/tooltip";
@import "bootstrap/scss/popover";
@import "bootstrap/scss/utilities";
}
@import "../core";
@import "core";
@import "../chatbox";
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment