2018-03-06 06:03:24 -05:00
|
|
|
.clearfix:after {
|
|
|
|
content: ".";
|
|
|
|
display: block;
|
|
|
|
clear: both;
|
|
|
|
visibility: hidden;
|
|
|
|
line-height: 0;
|
|
|
|
height: 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
body {
|
|
|
|
margin: 0;
|
2019-02-15 21:52:28 -05:00
|
|
|
font-family: Helvetica, sans-serif;
|
2018-03-06 06:03:24 -05:00
|
|
|
}
|
|
|
|
|
2020-07-05 11:29:25 -04:00
|
|
|
.d-flex {
|
|
|
|
display: flex;
|
|
|
|
flex-wrap: wrap;
|
|
|
|
justify-content: space-between;
|
|
|
|
align-items: center;
|
|
|
|
}
|
|
|
|
|
2018-03-06 06:03:24 -05:00
|
|
|
header {
|
|
|
|
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
|
|
|
|
background: #fcfcfc;
|
|
|
|
background: -webkit-linear-gradient(top, #fcfcfc 0%, #f2f2f2 100%);
|
|
|
|
padding: 0.8rem;
|
|
|
|
}
|
|
|
|
|
|
|
|
header .logo {
|
|
|
|
vertical-align: middle;
|
|
|
|
width: 45px;
|
|
|
|
height: 45px;
|
|
|
|
}
|
|
|
|
|
|
|
|
header h1 {
|
|
|
|
display: inline-block;
|
|
|
|
margin: 0 0 0 0.5rem;
|
|
|
|
vertical-align: middle;
|
|
|
|
font-weight: normal;
|
|
|
|
font-size: 1.5rem;
|
|
|
|
color: #666666;
|
|
|
|
}
|
|
|
|
|
2020-07-05 11:29:25 -04:00
|
|
|
header .information {
|
2018-03-06 06:03:24 -05:00
|
|
|
font-size: 1rem;
|
|
|
|
}
|
|
|
|
|
2018-03-07 13:12:10 -05:00
|
|
|
.button {
|
2018-03-06 06:03:24 -05:00
|
|
|
color: #ffffff;
|
|
|
|
background-color: #4e064f;
|
|
|
|
padding: 10px;
|
2018-03-07 13:12:10 -05:00
|
|
|
border: 0;
|
2018-03-06 06:03:24 -05:00
|
|
|
border-radius: 5px;
|
|
|
|
text-decoration: none;
|
|
|
|
margin-left: 1rem;
|
|
|
|
cursor: pointer;
|
|
|
|
}
|
|
|
|
|
2019-09-01 23:36:30 -04:00
|
|
|
a.button:visited {
|
|
|
|
color: #ffffff;
|
|
|
|
}
|
|
|
|
|
2018-03-14 11:16:09 -04:00
|
|
|
.close-button {
|
|
|
|
color: #ffffff;
|
|
|
|
background-color: #c90c0c;
|
|
|
|
padding: 10px;
|
|
|
|
border: 0;
|
|
|
|
border-radius: 5px;
|
|
|
|
text-decoration: none;
|
|
|
|
margin-left: 1rem;
|
|
|
|
cursor: pointer;
|
|
|
|
position: absolute;
|
|
|
|
right: 10px;
|
|
|
|
bottom: 10px;
|
|
|
|
}
|
|
|
|
|
2019-09-15 19:44:24 -04:00
|
|
|
ul.breadcrumbs {
|
|
|
|
display: block;
|
|
|
|
list-style: none;
|
|
|
|
margin: 10px 0;
|
|
|
|
padding: 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
ul.breadcrumbs li {
|
|
|
|
display: inline-block;
|
|
|
|
list-style: none;
|
|
|
|
margin: 0;
|
|
|
|
padding: 5px;
|
|
|
|
color: #999999;
|
|
|
|
}
|
|
|
|
|
|
|
|
ul.breadcrumbs li span.sep {
|
|
|
|
padding-left: 5px;
|
|
|
|
}
|
|
|
|
|
|
|
|
ul.breadcrumbs li a:link, ul.breadcrumbs li a:visited {
|
|
|
|
color: #666666;
|
|
|
|
border-bottom: 1px solid #666666;
|
|
|
|
}
|
|
|
|
|
2020-07-05 11:29:25 -04:00
|
|
|
.file-list {
|
2018-03-06 06:03:24 -05:00
|
|
|
width: 100%;
|
|
|
|
margin: 0 auto;
|
|
|
|
border-collapse: collapse;
|
|
|
|
}
|
|
|
|
|
2020-07-05 11:29:25 -04:00
|
|
|
.file-list .heading {
|
2018-03-06 06:03:24 -05:00
|
|
|
text-align: left;
|
|
|
|
text-transform: uppercase;
|
|
|
|
font-weight: normal;
|
|
|
|
color: #666666;
|
|
|
|
padding: 0.5rem;
|
|
|
|
}
|
|
|
|
|
2020-07-05 11:29:25 -04:00
|
|
|
.file-list div.d-flex {
|
2018-03-06 06:03:24 -05:00
|
|
|
border-bottom: 1px solid #e0e0e0;
|
2020-07-05 11:29:25 -04:00
|
|
|
justify-content: flex-start;
|
2018-03-06 06:03:24 -05:00
|
|
|
}
|
|
|
|
|
2020-07-05 11:29:25 -04:00
|
|
|
.file-list div.d-flex div {
|
2018-03-06 06:03:24 -05:00
|
|
|
white-space: nowrap;
|
2020-07-05 11:29:25 -04:00
|
|
|
padding: 0.5rem 0.8rem 0.5rem 0.8rem;
|
2018-03-06 06:03:24 -05:00
|
|
|
}
|
|
|
|
|
2020-07-05 11:29:25 -04:00
|
|
|
.file-list div.d-flex div img {
|
2018-03-06 06:03:24 -05:00
|
|
|
vertical-align: middle;
|
|
|
|
margin-right: 0.5rem;
|
|
|
|
}
|
|
|
|
|
2020-07-05 11:29:25 -04:00
|
|
|
.file-list div.d-flex div:last-child {
|
|
|
|
padding-right: 0.8rem;
|
|
|
|
flex-basis: 0;
|
|
|
|
flex-grow: 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
.file-list div.d-flex div:first-child {
|
|
|
|
flex-basis: 0;
|
|
|
|
flex-grow: 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
@media (max-width: 950px) {
|
|
|
|
.file-list div.d-flex div:last-child {
|
|
|
|
flex-basis: auto;
|
|
|
|
flex-grow: 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@media (max-width: 655px) {
|
|
|
|
.file-list div.d-flex {
|
|
|
|
display: block;
|
|
|
|
}
|
|
|
|
.file-list div.d-flex span {
|
|
|
|
max-width: 100%;
|
|
|
|
word-break: break-all;
|
|
|
|
white-space: normal;
|
|
|
|
}
|
|
|
|
.file-list div.d-flex #size-header {
|
|
|
|
display: none;
|
|
|
|
}
|
|
|
|
.file-list div.d-flex div:last-child {
|
|
|
|
padding-left: 3.5rem;
|
|
|
|
font-size: 0.85rem;
|
|
|
|
padding-top: 0;
|
|
|
|
}
|
|
|
|
header .information {
|
|
|
|
padding: 1rem 0;
|
|
|
|
}
|
2018-03-06 06:03:24 -05:00
|
|
|
}
|
2018-03-07 13:12:10 -05:00
|
|
|
|
2020-03-12 05:24:48 -04:00
|
|
|
.chat-container {
|
|
|
|
display: flex;
|
2020-08-19 20:22:15 -04:00
|
|
|
font-family: monospace;
|
2020-03-12 05:24:48 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
.chat-users {
|
|
|
|
width: 20%;
|
|
|
|
border: 1px solid rgba(0, 0, 0, 0.1);
|
|
|
|
border-radius: 2px;
|
|
|
|
overflow: auto;
|
|
|
|
background: #f2f2f2;
|
2020-08-19 20:22:15 -04:00
|
|
|
margin: 1rem 0 1rem 1rem;
|
2020-03-12 05:24:48 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
.chat-users .editable-username {
|
|
|
|
display: flex;
|
Refactors logic for chat user list and scroll
- Refactors server side code to use instance variable instead of
background thread to generate a list of connected users
- Send this user list anytime any change is made to the list. It can
be: join, update username, disconnect
- In js, render the entire user list everytime it is received.
- Scroll to the bottom of the chat, everytime the current user
sends a message
- Else, if already at the bottom of the chat, scroll to the bottom
after appending incoming status or chat message. But if the user
is scrolled up in the chat window, then do not scroll to the bottom
- When refreshed or close tab is clicked, default browser warning is
shown.
- On receiving disconnect, the browser removes user from room.
- If refreshed, it is shown as if the user left and joined again.
2020-05-03 18:17:13 -04:00
|
|
|
padding: 1rem;
|
2020-05-11 03:21:46 -04:00
|
|
|
flex-direction: column;
|
2020-03-12 05:24:48 -04:00
|
|
|
}
|
|
|
|
|
2020-08-19 20:22:15 -04:00
|
|
|
.chat-users .editable-username input {
|
|
|
|
font-family: monospace;
|
|
|
|
font-size: 1em;
|
|
|
|
}
|
|
|
|
|
2020-08-21 08:16:21 -04:00
|
|
|
.chat-users .editable-username #username-error {
|
|
|
|
color: #c90c0c;
|
|
|
|
margin: 0.5rem;
|
|
|
|
}
|
|
|
|
|
2020-03-12 05:24:48 -04:00
|
|
|
.chat-users #user-list li {
|
|
|
|
margin-bottom: 1em;
|
|
|
|
}
|
|
|
|
|
2020-03-09 08:14:00 -04:00
|
|
|
.chat-wrapper {
|
|
|
|
display: flex;
|
|
|
|
flex-direction: column;
|
2020-03-12 05:24:48 -04:00
|
|
|
flex: 1;
|
2020-08-19 20:22:15 -04:00
|
|
|
margin: 1rem 1rem 0 1rem;
|
|
|
|
height: calc(100vh - (65px + 2em));
|
2020-03-09 08:14:00 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
.chat-wrapper #chat {
|
|
|
|
border: 1px solid rgba(0, 0, 0, 0.1);
|
|
|
|
border-radius: 2px;
|
|
|
|
flex: 1;
|
|
|
|
overflow: auto;
|
|
|
|
background: #f2f2f2;
|
|
|
|
padding: 0 1rem;
|
|
|
|
}
|
|
|
|
|
2020-08-19 20:22:15 -04:00
|
|
|
.chat-wrapper .status {
|
|
|
|
font-style: italic;
|
|
|
|
font-size: 0.8em;
|
|
|
|
color: #666666;
|
|
|
|
}
|
|
|
|
|
2020-08-19 19:40:00 -04:00
|
|
|
.chat-wrapper .username {
|
|
|
|
font-weight: bold;
|
|
|
|
display: block;
|
|
|
|
}
|
|
|
|
.chat-wrapper .message {
|
2021-06-07 16:29:40 -04:00
|
|
|
word-break: break-word;
|
2020-08-19 19:40:00 -04:00
|
|
|
font-weight: normal;
|
|
|
|
display: block;
|
|
|
|
margin-bottom: 0.3em;
|
|
|
|
}
|
|
|
|
|
2020-03-09 08:14:00 -04:00
|
|
|
.chat-wrapper .chat-form {
|
2020-08-19 20:22:15 -04:00
|
|
|
display: block;
|
|
|
|
margin: 0.2rem 1rem 1rem 0;
|
|
|
|
padding: -0.5em;
|
2020-03-09 08:14:00 -04:00
|
|
|
}
|
|
|
|
|
2020-03-12 05:24:48 -04:00
|
|
|
.chat-wrapper input#new-message {
|
|
|
|
height: 100%;
|
2020-08-19 20:22:15 -04:00
|
|
|
width: 100%;
|
|
|
|
font-family: monospace;
|
|
|
|
font-size: 1em;
|
2020-03-12 05:24:48 -04:00
|
|
|
}
|
|
|
|
|
Refactors logic for chat user list and scroll
- Refactors server side code to use instance variable instead of
background thread to generate a list of connected users
- Send this user list anytime any change is made to the list. It can
be: join, update username, disconnect
- In js, render the entire user list everytime it is received.
- Scroll to the bottom of the chat, everytime the current user
sends a message
- Else, if already at the bottom of the chat, scroll to the bottom
after appending incoming status or chat message. But if the user
is scrolled up in the chat window, then do not scroll to the bottom
- When refreshed or close tab is clicked, default browser warning is
shown.
- On receiving disconnect, the browser removes user from room.
- If refreshed, it is shown as if the user left and joined again.
2020-05-03 18:17:13 -04:00
|
|
|
@media (max-width: 992px) {
|
|
|
|
.chat-users .editable-username {
|
|
|
|
display: block;
|
|
|
|
}
|
|
|
|
|
|
|
|
.chat-users input#username {
|
|
|
|
width: 90%;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-07-04 09:55:38 -04:00
|
|
|
.no-js {
|
|
|
|
display: none;
|
|
|
|
}
|
|
|
|
|
2018-03-07 13:12:10 -05:00
|
|
|
.upload-wrapper {
|
|
|
|
align-items: center;
|
|
|
|
justify-content: center;
|
|
|
|
min-height: 400px;
|
|
|
|
text-align: center;
|
|
|
|
}
|
|
|
|
|
2019-02-15 21:52:28 -05:00
|
|
|
.upload-wrapper img.logo {
|
2018-03-07 13:12:10 -05:00
|
|
|
width: 120px;
|
|
|
|
height: 120px;
|
|
|
|
}
|
|
|
|
|
2019-02-15 21:52:28 -05:00
|
|
|
.upload-wrapper .upload-header {
|
2018-03-07 13:12:10 -05:00
|
|
|
font-size: 30px;
|
|
|
|
font-weight: normal;
|
|
|
|
color: #666666;
|
|
|
|
margin: 0 0 10px 0;
|
|
|
|
}
|
|
|
|
|
2019-02-15 21:52:28 -05:00
|
|
|
.upload-wrapper .upload-description {
|
2018-03-07 13:12:10 -05:00
|
|
|
color: #666666;
|
|
|
|
margin: 0 0 20px 0;
|
|
|
|
}
|
2018-03-13 08:50:26 -04:00
|
|
|
|
2021-04-25 20:46:03 -04:00
|
|
|
.upload-wrapper textarea {
|
|
|
|
max-width: 95%;
|
|
|
|
width: 600px;
|
|
|
|
height: 150px;
|
|
|
|
padding: 10px;
|
|
|
|
}
|
|
|
|
|
2019-02-15 21:52:28 -05:00
|
|
|
div#uploads {
|
|
|
|
width: 800px;
|
|
|
|
max-width: 90%;
|
|
|
|
margin: 0 auto;
|
|
|
|
}
|
|
|
|
|
|
|
|
div#uploads .upload {
|
|
|
|
border: 1px solid #DDDDDD;
|
|
|
|
margin: 20px 0;
|
|
|
|
padding: 10px;
|
|
|
|
text-align: left;
|
|
|
|
}
|
|
|
|
|
|
|
|
div#uploads .upload .upload-filename {
|
|
|
|
font-weight: bold;
|
|
|
|
font-family: monospace;
|
|
|
|
font-size: 1.1em;
|
|
|
|
margin-bottom: 5px;
|
|
|
|
}
|
|
|
|
|
|
|
|
div#uploads .upload .upload-status {
|
|
|
|
color: #999999;
|
|
|
|
font-size: 0.9em;
|
|
|
|
margin-bottom: 5px;
|
|
|
|
}
|
|
|
|
|
|
|
|
div#uploads .upload input.cancel {
|
2021-08-22 16:21:09 -04:00
|
|
|
color: #d0011b;
|
2019-02-15 21:52:28 -05:00
|
|
|
border: 0;
|
|
|
|
background: none;
|
|
|
|
box-shadow: none;
|
|
|
|
border-radius: 0px;
|
2021-08-22 16:21:09 -04:00
|
|
|
cursor: pointer;
|
|
|
|
font-family: sans-serif;
|
|
|
|
font-size: 12px;
|
|
|
|
text-decoration: none;
|
2019-02-15 21:52:28 -05:00
|
|
|
display: inline-block;
|
|
|
|
float:right;
|
|
|
|
}
|
|
|
|
|
|
|
|
div#uploads .upload progress {
|
|
|
|
width: 100%;
|
|
|
|
height: 20px;
|
|
|
|
}
|
|
|
|
|
2018-03-13 08:50:26 -04:00
|
|
|
ul.flashes {
|
|
|
|
list-style: none;
|
|
|
|
margin: 0;
|
|
|
|
padding: 0;
|
2019-02-15 21:52:28 -05:00
|
|
|
width: 800px;
|
2020-07-05 11:29:25 -04:00
|
|
|
max-width: 100%;
|
2019-02-15 21:52:28 -05:00
|
|
|
margin: 0 auto;
|
2018-03-13 08:50:26 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
ul.flashes li {
|
2019-02-15 17:52:00 -05:00
|
|
|
margin: 0 0 5px 0;
|
2019-02-15 21:52:28 -05:00
|
|
|
padding: 5px;
|
2019-02-15 17:52:00 -05:00
|
|
|
list-style: none;
|
2019-02-22 21:16:06 -05:00
|
|
|
text-align: center;
|
2020-07-05 11:29:25 -04:00
|
|
|
word-break: break-word;
|
2018-03-13 08:50:26 -04:00
|
|
|
}
|
2018-07-16 21:45:14 -04:00
|
|
|
|
|
|
|
li.error {
|
2019-02-17 11:12:45 -05:00
|
|
|
color: #d0011b;
|
2018-07-16 21:45:14 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
li.info {
|
2019-02-17 11:12:45 -05:00
|
|
|
color: #5fa416;
|
2018-07-16 21:45:14 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
.closed-wrapper {
|
|
|
|
display: flex;
|
|
|
|
align-items: center;
|
|
|
|
justify-content: center;
|
|
|
|
min-height: 400px;
|
|
|
|
}
|
|
|
|
|
2018-09-15 22:52:53 -04:00
|
|
|
.info {
|
2018-07-16 21:45:14 -04:00
|
|
|
text-align: center;
|
|
|
|
}
|
|
|
|
|
2018-09-15 22:52:53 -04:00
|
|
|
.info img {
|
2018-07-16 21:45:14 -04:00
|
|
|
width: 120px;
|
|
|
|
height: 120px;
|
|
|
|
}
|
|
|
|
|
2018-09-15 22:52:53 -04:00
|
|
|
.info .info-header {
|
2018-07-16 21:45:14 -04:00
|
|
|
font-size: 30px;
|
|
|
|
font-weight: normal;
|
|
|
|
color: #666666;
|
|
|
|
margin: 0 0 10px 0;
|
|
|
|
}
|
|
|
|
|
2018-09-15 22:52:53 -04:00
|
|
|
.info .info-description {
|
2018-07-16 21:45:14 -04:00
|
|
|
color: #666666;
|
|
|
|
margin: 0 0 20px 0;
|
|
|
|
}
|
2019-09-01 19:13:05 -04:00
|
|
|
|
|
|
|
a {
|
|
|
|
text-decoration: none;
|
|
|
|
color: #1c1ca0;
|
|
|
|
}
|
|
|
|
|
|
|
|
a:visited {
|
|
|
|
color: #601ca0;
|
2021-08-22 16:21:09 -04:00
|
|
|
}
|