(web) adding 'InviteLink has expired' page and handling server errors on Login and Invite screens.

This commit is contained in:
Alexey Kontsevoy 2016-03-13 13:30:34 -04:00
parent 331763f418
commit a99b8aa5fa
26 changed files with 1595 additions and 4108 deletions

844
web/dist/app/app.js vendored

File diff suppressed because one or more lines are too long

View file

@ -1,681 +0,0 @@
/*!
* Datepicker for Bootstrap v1.6.0 (https://github.com/eternicode/bootstrap-datepicker)
*
* Copyright 2012 Stefan Petre
* Improvements by Andrew Rowls
* Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
*/
.datepicker {
border-radius: 4px;
direction: ltr;
}
.datepicker-inline {
width: 220px;
}
.datepicker.datepicker-rtl {
direction: rtl;
}
.datepicker.datepicker-rtl table tr td span {
float: right;
}
.datepicker-dropdown {
top: 0;
left: 0;
padding: 4px;
}
.datepicker-dropdown:before {
content: '';
display: inline-block;
border-left: 7px solid transparent;
border-right: 7px solid transparent;
border-bottom: 7px solid rgba(0, 0, 0, 0.15);
border-top: 0;
border-bottom-color: rgba(0, 0, 0, 0.2);
position: absolute;
}
.datepicker-dropdown:after {
content: '';
display: inline-block;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-bottom: 6px solid #ffffff;
border-top: 0;
position: absolute;
}
.datepicker-dropdown.datepicker-orient-left:before {
left: 6px;
}
.datepicker-dropdown.datepicker-orient-left:after {
left: 7px;
}
.datepicker-dropdown.datepicker-orient-right:before {
right: 6px;
}
.datepicker-dropdown.datepicker-orient-right:after {
right: 7px;
}
.datepicker-dropdown.datepicker-orient-bottom:before {
top: -7px;
}
.datepicker-dropdown.datepicker-orient-bottom:after {
top: -6px;
}
.datepicker-dropdown.datepicker-orient-top:before {
bottom: -7px;
border-bottom: 0;
border-top: 7px solid rgba(0, 0, 0, 0.15);
}
.datepicker-dropdown.datepicker-orient-top:after {
bottom: -6px;
border-bottom: 0;
border-top: 6px solid #ffffff;
}
.datepicker > div {
display: none;
}
.datepicker table {
margin: 0;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.datepicker table tr td,
.datepicker table tr th {
text-align: center;
width: 30px;
height: 30px;
border-radius: 4px;
border: none;
}
.table-striped .datepicker table tr td,
.table-striped .datepicker table tr th {
background-color: transparent;
}
.datepicker table tr td.old,
.datepicker table tr td.new {
color: #777777;
}
.datepicker table tr td.day:hover,
.datepicker table tr td.focused {
background: #eeeeee;
cursor: pointer;
}
.datepicker table tr td.disabled,
.datepicker table tr td.disabled:hover {
background: none;
color: #777777;
cursor: default;
}
.datepicker table tr td.highlighted {
color: #000000;
background-color: #d9edf7;
border-color: #85c5e5;
border-radius: 0;
}
.datepicker table tr td.highlighted:focus,
.datepicker table tr td.highlighted.focus {
color: #000000;
background-color: #afd9ee;
border-color: #298fc2;
}
.datepicker table tr td.highlighted:hover {
color: #000000;
background-color: #afd9ee;
border-color: #52addb;
}
.datepicker table tr td.highlighted:active,
.datepicker table tr td.highlighted.active {
color: #000000;
background-color: #afd9ee;
border-color: #52addb;
}
.datepicker table tr td.highlighted:active:hover,
.datepicker table tr td.highlighted.active:hover,
.datepicker table tr td.highlighted:active:focus,
.datepicker table tr td.highlighted.active:focus,
.datepicker table tr td.highlighted:active.focus,
.datepicker table tr td.highlighted.active.focus {
color: #000000;
background-color: #91cbe8;
border-color: #298fc2;
}
.datepicker table tr td.highlighted.disabled:hover,
.datepicker table tr td.highlighted[disabled]:hover,
fieldset[disabled] .datepicker table tr td.highlighted:hover,
.datepicker table tr td.highlighted.disabled:focus,
.datepicker table tr td.highlighted[disabled]:focus,
fieldset[disabled] .datepicker table tr td.highlighted:focus,
.datepicker table tr td.highlighted.disabled.focus,
.datepicker table tr td.highlighted[disabled].focus,
fieldset[disabled] .datepicker table tr td.highlighted.focus {
background-color: #d9edf7;
border-color: #85c5e5;
}
.datepicker table tr td.highlighted.focused {
background: #afd9ee;
}
.datepicker table tr td.highlighted.disabled,
.datepicker table tr td.highlighted.disabled:active {
background: #d9edf7;
color: #777777;
}
.datepicker table tr td.today {
color: #000000;
background-color: #ffdb99;
border-color: #ffb733;
}
.datepicker table tr td.today:focus,
.datepicker table tr td.today.focus {
color: #000000;
background-color: #ffc966;
border-color: #b37400;
}
.datepicker table tr td.today:hover {
color: #000000;
background-color: #ffc966;
border-color: #f59e00;
}
.datepicker table tr td.today:active,
.datepicker table tr td.today.active {
color: #000000;
background-color: #ffc966;
border-color: #f59e00;
}
.datepicker table tr td.today:active:hover,
.datepicker table tr td.today.active:hover,
.datepicker table tr td.today:active:focus,
.datepicker table tr td.today.active:focus,
.datepicker table tr td.today:active.focus,
.datepicker table tr td.today.active.focus {
color: #000000;
background-color: #ffbc42;
border-color: #b37400;
}
.datepicker table tr td.today.disabled:hover,
.datepicker table tr td.today[disabled]:hover,
fieldset[disabled] .datepicker table tr td.today:hover,
.datepicker table tr td.today.disabled:focus,
.datepicker table tr td.today[disabled]:focus,
fieldset[disabled] .datepicker table tr td.today:focus,
.datepicker table tr td.today.disabled.focus,
.datepicker table tr td.today[disabled].focus,
fieldset[disabled] .datepicker table tr td.today.focus {
background-color: #ffdb99;
border-color: #ffb733;
}
.datepicker table tr td.today.focused {
background: #ffc966;
}
.datepicker table tr td.today.disabled,
.datepicker table tr td.today.disabled:active {
background: #ffdb99;
color: #777777;
}
.datepicker table tr td.range {
color: #000000;
background-color: #eeeeee;
border-color: #bbbbbb;
border-radius: 0;
}
.datepicker table tr td.range:focus,
.datepicker table tr td.range.focus {
color: #000000;
background-color: #d5d5d5;
border-color: #7c7c7c;
}
.datepicker table tr td.range:hover {
color: #000000;
background-color: #d5d5d5;
border-color: #9d9d9d;
}
.datepicker table tr td.range:active,
.datepicker table tr td.range.active {
color: #000000;
background-color: #d5d5d5;
border-color: #9d9d9d;
}
.datepicker table tr td.range:active:hover,
.datepicker table tr td.range.active:hover,
.datepicker table tr td.range:active:focus,
.datepicker table tr td.range.active:focus,
.datepicker table tr td.range:active.focus,
.datepicker table tr td.range.active.focus {
color: #000000;
background-color: #c3c3c3;
border-color: #7c7c7c;
}
.datepicker table tr td.range.disabled:hover,
.datepicker table tr td.range[disabled]:hover,
fieldset[disabled] .datepicker table tr td.range:hover,
.datepicker table tr td.range.disabled:focus,
.datepicker table tr td.range[disabled]:focus,
fieldset[disabled] .datepicker table tr td.range:focus,
.datepicker table tr td.range.disabled.focus,
.datepicker table tr td.range[disabled].focus,
fieldset[disabled] .datepicker table tr td.range.focus {
background-color: #eeeeee;
border-color: #bbbbbb;
}
.datepicker table tr td.range.focused {
background: #d5d5d5;
}
.datepicker table tr td.range.disabled,
.datepicker table tr td.range.disabled:active {
background: #eeeeee;
color: #777777;
}
.datepicker table tr td.range.highlighted {
color: #000000;
background-color: #e4eef3;
border-color: #9dc1d3;
}
.datepicker table tr td.range.highlighted:focus,
.datepicker table tr td.range.highlighted.focus {
color: #000000;
background-color: #c1d7e3;
border-color: #4b88a6;
}
.datepicker table tr td.range.highlighted:hover {
color: #000000;
background-color: #c1d7e3;
border-color: #73a6c0;
}
.datepicker table tr td.range.highlighted:active,
.datepicker table tr td.range.highlighted.active {
color: #000000;
background-color: #c1d7e3;
border-color: #73a6c0;
}
.datepicker table tr td.range.highlighted:active:hover,
.datepicker table tr td.range.highlighted.active:hover,
.datepicker table tr td.range.highlighted:active:focus,
.datepicker table tr td.range.highlighted.active:focus,
.datepicker table tr td.range.highlighted:active.focus,
.datepicker table tr td.range.highlighted.active.focus {
color: #000000;
background-color: #a8c8d8;
border-color: #4b88a6;
}
.datepicker table tr td.range.highlighted.disabled:hover,
.datepicker table tr td.range.highlighted[disabled]:hover,
fieldset[disabled] .datepicker table tr td.range.highlighted:hover,
.datepicker table tr td.range.highlighted.disabled:focus,
.datepicker table tr td.range.highlighted[disabled]:focus,
fieldset[disabled] .datepicker table tr td.range.highlighted:focus,
.datepicker table tr td.range.highlighted.disabled.focus,
.datepicker table tr td.range.highlighted[disabled].focus,
fieldset[disabled] .datepicker table tr td.range.highlighted.focus {
background-color: #e4eef3;
border-color: #9dc1d3;
}
.datepicker table tr td.range.highlighted.focused {
background: #c1d7e3;
}
.datepicker table tr td.range.highlighted.disabled,
.datepicker table tr td.range.highlighted.disabled:active {
background: #e4eef3;
color: #777777;
}
.datepicker table tr td.range.today {
color: #000000;
background-color: #f7ca77;
border-color: #f1a417;
}
.datepicker table tr td.range.today:focus,
.datepicker table tr td.range.today.focus {
color: #000000;
background-color: #f4b747;
border-color: #815608;
}
.datepicker table tr td.range.today:hover {
color: #000000;
background-color: #f4b747;
border-color: #bf800c;
}
.datepicker table tr td.range.today:active,
.datepicker table tr td.range.today.active {
color: #000000;
background-color: #f4b747;
border-color: #bf800c;
}
.datepicker table tr td.range.today:active:hover,
.datepicker table tr td.range.today.active:hover,
.datepicker table tr td.range.today:active:focus,
.datepicker table tr td.range.today.active:focus,
.datepicker table tr td.range.today:active.focus,
.datepicker table tr td.range.today.active.focus {
color: #000000;
background-color: #f2aa25;
border-color: #815608;
}
.datepicker table tr td.range.today.disabled:hover,
.datepicker table tr td.range.today[disabled]:hover,
fieldset[disabled] .datepicker table tr td.range.today:hover,
.datepicker table tr td.range.today.disabled:focus,
.datepicker table tr td.range.today[disabled]:focus,
fieldset[disabled] .datepicker table tr td.range.today:focus,
.datepicker table tr td.range.today.disabled.focus,
.datepicker table tr td.range.today[disabled].focus,
fieldset[disabled] .datepicker table tr td.range.today.focus {
background-color: #f7ca77;
border-color: #f1a417;
}
.datepicker table tr td.range.today.disabled,
.datepicker table tr td.range.today.disabled:active {
background: #f7ca77;
color: #777777;
}
.datepicker table tr td.selected,
.datepicker table tr td.selected.highlighted {
color: #ffffff;
background-color: #777777;
border-color: #555555;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.datepicker table tr td.selected:focus,
.datepicker table tr td.selected.highlighted:focus,
.datepicker table tr td.selected.focus,
.datepicker table tr td.selected.highlighted.focus {
color: #ffffff;
background-color: #5e5e5e;
border-color: #161616;
}
.datepicker table tr td.selected:hover,
.datepicker table tr td.selected.highlighted:hover {
color: #ffffff;
background-color: #5e5e5e;
border-color: #373737;
}
.datepicker table tr td.selected:active,
.datepicker table tr td.selected.highlighted:active,
.datepicker table tr td.selected.active,
.datepicker table tr td.selected.highlighted.active {
color: #ffffff;
background-color: #5e5e5e;
border-color: #373737;
}
.datepicker table tr td.selected:active:hover,
.datepicker table tr td.selected.highlighted:active:hover,
.datepicker table tr td.selected.active:hover,
.datepicker table tr td.selected.highlighted.active:hover,
.datepicker table tr td.selected:active:focus,
.datepicker table tr td.selected.highlighted:active:focus,
.datepicker table tr td.selected.active:focus,
.datepicker table tr td.selected.highlighted.active:focus,
.datepicker table tr td.selected:active.focus,
.datepicker table tr td.selected.highlighted:active.focus,
.datepicker table tr td.selected.active.focus,
.datepicker table tr td.selected.highlighted.active.focus {
color: #ffffff;
background-color: #4c4c4c;
border-color: #161616;
}
.datepicker table tr td.selected.disabled:hover,
.datepicker table tr td.selected.highlighted.disabled:hover,
.datepicker table tr td.selected[disabled]:hover,
.datepicker table tr td.selected.highlighted[disabled]:hover,
fieldset[disabled] .datepicker table tr td.selected:hover,
fieldset[disabled] .datepicker table tr td.selected.highlighted:hover,
.datepicker table tr td.selected.disabled:focus,
.datepicker table tr td.selected.highlighted.disabled:focus,
.datepicker table tr td.selected[disabled]:focus,
.datepicker table tr td.selected.highlighted[disabled]:focus,
fieldset[disabled] .datepicker table tr td.selected:focus,
fieldset[disabled] .datepicker table tr td.selected.highlighted:focus,
.datepicker table tr td.selected.disabled.focus,
.datepicker table tr td.selected.highlighted.disabled.focus,
.datepicker table tr td.selected[disabled].focus,
.datepicker table tr td.selected.highlighted[disabled].focus,
fieldset[disabled] .datepicker table tr td.selected.focus,
fieldset[disabled] .datepicker table tr td.selected.highlighted.focus {
background-color: #777777;
border-color: #555555;
}
.datepicker table tr td.active,
.datepicker table tr td.active.highlighted {
color: #ffffff;
background-color: #337ab7;
border-color: #2e6da4;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.datepicker table tr td.active:focus,
.datepicker table tr td.active.highlighted:focus,
.datepicker table tr td.active.focus,
.datepicker table tr td.active.highlighted.focus {
color: #ffffff;
background-color: #286090;
border-color: #122b40;
}
.datepicker table tr td.active:hover,
.datepicker table tr td.active.highlighted:hover {
color: #ffffff;
background-color: #286090;
border-color: #204d74;
}
.datepicker table tr td.active:active,
.datepicker table tr td.active.highlighted:active,
.datepicker table tr td.active.active,
.datepicker table tr td.active.highlighted.active {
color: #ffffff;
background-color: #286090;
border-color: #204d74;
}
.datepicker table tr td.active:active:hover,
.datepicker table tr td.active.highlighted:active:hover,
.datepicker table tr td.active.active:hover,
.datepicker table tr td.active.highlighted.active:hover,
.datepicker table tr td.active:active:focus,
.datepicker table tr td.active.highlighted:active:focus,
.datepicker table tr td.active.active:focus,
.datepicker table tr td.active.highlighted.active:focus,
.datepicker table tr td.active:active.focus,
.datepicker table tr td.active.highlighted:active.focus,
.datepicker table tr td.active.active.focus,
.datepicker table tr td.active.highlighted.active.focus {
color: #ffffff;
background-color: #204d74;
border-color: #122b40;
}
.datepicker table tr td.active.disabled:hover,
.datepicker table tr td.active.highlighted.disabled:hover,
.datepicker table tr td.active[disabled]:hover,
.datepicker table tr td.active.highlighted[disabled]:hover,
fieldset[disabled] .datepicker table tr td.active:hover,
fieldset[disabled] .datepicker table tr td.active.highlighted:hover,
.datepicker table tr td.active.disabled:focus,
.datepicker table tr td.active.highlighted.disabled:focus,
.datepicker table tr td.active[disabled]:focus,
.datepicker table tr td.active.highlighted[disabled]:focus,
fieldset[disabled] .datepicker table tr td.active:focus,
fieldset[disabled] .datepicker table tr td.active.highlighted:focus,
.datepicker table tr td.active.disabled.focus,
.datepicker table tr td.active.highlighted.disabled.focus,
.datepicker table tr td.active[disabled].focus,
.datepicker table tr td.active.highlighted[disabled].focus,
fieldset[disabled] .datepicker table tr td.active.focus,
fieldset[disabled] .datepicker table tr td.active.highlighted.focus {
background-color: #337ab7;
border-color: #2e6da4;
}
.datepicker table tr td span {
display: block;
width: 23%;
height: 54px;
line-height: 54px;
float: left;
margin: 1%;
cursor: pointer;
border-radius: 4px;
}
.datepicker table tr td span:hover,
.datepicker table tr td span.focused {
background: #eeeeee;
}
.datepicker table tr td span.disabled,
.datepicker table tr td span.disabled:hover {
background: none;
color: #777777;
cursor: default;
}
.datepicker table tr td span.active,
.datepicker table tr td span.active:hover,
.datepicker table tr td span.active.disabled,
.datepicker table tr td span.active.disabled:hover {
color: #ffffff;
background-color: #337ab7;
border-color: #2e6da4;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.datepicker table tr td span.active:focus,
.datepicker table tr td span.active:hover:focus,
.datepicker table tr td span.active.disabled:focus,
.datepicker table tr td span.active.disabled:hover:focus,
.datepicker table tr td span.active.focus,
.datepicker table tr td span.active:hover.focus,
.datepicker table tr td span.active.disabled.focus,
.datepicker table tr td span.active.disabled:hover.focus {
color: #ffffff;
background-color: #286090;
border-color: #122b40;
}
.datepicker table tr td span.active:hover,
.datepicker table tr td span.active:hover:hover,
.datepicker table tr td span.active.disabled:hover,
.datepicker table tr td span.active.disabled:hover:hover {
color: #ffffff;
background-color: #286090;
border-color: #204d74;
}
.datepicker table tr td span.active:active,
.datepicker table tr td span.active:hover:active,
.datepicker table tr td span.active.disabled:active,
.datepicker table tr td span.active.disabled:hover:active,
.datepicker table tr td span.active.active,
.datepicker table tr td span.active:hover.active,
.datepicker table tr td span.active.disabled.active,
.datepicker table tr td span.active.disabled:hover.active {
color: #ffffff;
background-color: #286090;
border-color: #204d74;
}
.datepicker table tr td span.active:active:hover,
.datepicker table tr td span.active:hover:active:hover,
.datepicker table tr td span.active.disabled:active:hover,
.datepicker table tr td span.active.disabled:hover:active:hover,
.datepicker table tr td span.active.active:hover,
.datepicker table tr td span.active:hover.active:hover,
.datepicker table tr td span.active.disabled.active:hover,
.datepicker table tr td span.active.disabled:hover.active:hover,
.datepicker table tr td span.active:active:focus,
.datepicker table tr td span.active:hover:active:focus,
.datepicker table tr td span.active.disabled:active:focus,
.datepicker table tr td span.active.disabled:hover:active:focus,
.datepicker table tr td span.active.active:focus,
.datepicker table tr td span.active:hover.active:focus,
.datepicker table tr td span.active.disabled.active:focus,
.datepicker table tr td span.active.disabled:hover.active:focus,
.datepicker table tr td span.active:active.focus,
.datepicker table tr td span.active:hover:active.focus,
.datepicker table tr td span.active.disabled:active.focus,
.datepicker table tr td span.active.disabled:hover:active.focus,
.datepicker table tr td span.active.active.focus,
.datepicker table tr td span.active:hover.active.focus,
.datepicker table tr td span.active.disabled.active.focus,
.datepicker table tr td span.active.disabled:hover.active.focus {
color: #ffffff;
background-color: #204d74;
border-color: #122b40;
}
.datepicker table tr td span.active.disabled:hover,
.datepicker table tr td span.active:hover.disabled:hover,
.datepicker table tr td span.active.disabled.disabled:hover,
.datepicker table tr td span.active.disabled:hover.disabled:hover,
.datepicker table tr td span.active[disabled]:hover,
.datepicker table tr td span.active:hover[disabled]:hover,
.datepicker table tr td span.active.disabled[disabled]:hover,
.datepicker table tr td span.active.disabled:hover[disabled]:hover,
fieldset[disabled] .datepicker table tr td span.active:hover,
fieldset[disabled] .datepicker table tr td span.active:hover:hover,
fieldset[disabled] .datepicker table tr td span.active.disabled:hover,
fieldset[disabled] .datepicker table tr td span.active.disabled:hover:hover,
.datepicker table tr td span.active.disabled:focus,
.datepicker table tr td span.active:hover.disabled:focus,
.datepicker table tr td span.active.disabled.disabled:focus,
.datepicker table tr td span.active.disabled:hover.disabled:focus,
.datepicker table tr td span.active[disabled]:focus,
.datepicker table tr td span.active:hover[disabled]:focus,
.datepicker table tr td span.active.disabled[disabled]:focus,
.datepicker table tr td span.active.disabled:hover[disabled]:focus,
fieldset[disabled] .datepicker table tr td span.active:focus,
fieldset[disabled] .datepicker table tr td span.active:hover:focus,
fieldset[disabled] .datepicker table tr td span.active.disabled:focus,
fieldset[disabled] .datepicker table tr td span.active.disabled:hover:focus,
.datepicker table tr td span.active.disabled.focus,
.datepicker table tr td span.active:hover.disabled.focus,
.datepicker table tr td span.active.disabled.disabled.focus,
.datepicker table tr td span.active.disabled:hover.disabled.focus,
.datepicker table tr td span.active[disabled].focus,
.datepicker table tr td span.active:hover[disabled].focus,
.datepicker table tr td span.active.disabled[disabled].focus,
.datepicker table tr td span.active.disabled:hover[disabled].focus,
fieldset[disabled] .datepicker table tr td span.active.focus,
fieldset[disabled] .datepicker table tr td span.active:hover.focus,
fieldset[disabled] .datepicker table tr td span.active.disabled.focus,
fieldset[disabled] .datepicker table tr td span.active.disabled:hover.focus {
background-color: #337ab7;
border-color: #2e6da4;
}
.datepicker table tr td span.old,
.datepicker table tr td span.new {
color: #777777;
}
.datepicker .datepicker-switch {
width: 145px;
}
.datepicker .datepicker-switch,
.datepicker .prev,
.datepicker .next,
.datepicker tfoot tr th {
cursor: pointer;
}
.datepicker .datepicker-switch:hover,
.datepicker .prev:hover,
.datepicker .next:hover,
.datepicker tfoot tr th:hover {
background: #eeeeee;
}
.datepicker .cw {
font-size: 10px;
width: 12px;
padding: 0 2px 0 5px;
vertical-align: middle;
}
.input-group.date .input-group-addon {
cursor: pointer;
}
.input-daterange {
width: 100%;
}
.input-daterange input {
text-align: center;
}
.input-daterange input:first-child {
border-radius: 3px 0 0 3px;
}
.input-daterange input:last-child {
border-radius: 0 3px 3px 0;
}
.input-daterange .input-group-addon {
width: auto;
min-width: 16px;
padding: 4px 5px;
line-height: 1.42857143;
text-shadow: 0 1px 0 #fff;
border-width: 1px 0;
margin-left: -5px;
margin-right: -5px;
}
/*# sourceMappingURL=bootstrap-datepicker3.css.map */

View file

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="150px" height="150px" viewBox="0 0 150 150" enable-background="new 0 0 150 150" xml:space="preserve">
<g display="none">
<path display="inline" d="M76,35.422c-10.912,0-20.806,4.438-27.973,11.605S36.422,64.088,36.422,75
c0,10.912,4.438,20.806,11.605,27.973c7.167,7.166,17.061,11.604,27.973,11.604c10.912,0,20.806-4.438,27.973-11.604
c7.166-7.167,11.604-17.061,11.604-27.973c0-10.912-4.438-20.806-11.604-27.973C96.806,39.861,86.912,35.422,76,35.422z"/>
<path display="inline" d="M141.604,95.871l-6.731-5.839l-6.731-5.839c0.24-1.306,0.395-2.662,0.488-4.037
c0.095-1.373,0.129-2.765,0.129-4.139s-0.034-2.765-0.129-4.139c-0.094-1.374-0.248-2.731-0.488-4.037l6.731-5.839l6.731-5.839
c0.481-0.344,0.809-0.841,0.955-1.391c0.146-0.55,0.111-1.15-0.129-1.701c-1.375-4.224-3.247-8.346-5.506-12.245
c-2.258-3.898-4.902-7.574-7.822-10.905c-0.412-0.481-0.91-0.808-1.442-0.953c-0.532-0.146-1.1-0.111-1.649,0.129l-8.484,2.954
l-8.483,2.953c-2.095-1.718-4.328-3.263-6.672-4.628c-2.345-1.365-4.801-2.55-7.343-3.547l-1.682-8.792l-1.683-8.792
c-0.103-0.55-0.396-1.082-0.808-1.494s-0.945-0.704-1.529-0.773C84.93,6.085,80.465,5.639,76,5.639s-8.93,0.446-13.327,1.339
c-0.584,0.069-1.116,0.361-1.529,0.773c-0.412,0.412-0.704,0.944-0.807,1.494l-1.683,8.793l-1.683,8.793
c-2.542,0.997-5.032,2.182-7.394,3.547c-2.361,1.365-4.594,2.91-6.621,4.628l-8.484-2.953l-8.484-2.954
c-0.549-0.241-1.116-0.275-1.648-0.129c-0.533,0.146-1.031,0.472-1.443,0.953c-2.919,3.332-5.564,7.007-7.823,10.905
c-2.258,3.898-4.13,8.021-5.504,12.245c-0.241,0.55-0.275,1.151-0.128,1.7c0.146,0.549,0.472,1.047,0.953,1.391l6.732,5.839
l6.732,5.839c-0.24,1.305-0.395,2.662-0.489,4.036c-0.095,1.374-0.129,2.766-0.129,4.139c0,1.374,0.034,2.766,0.128,4.139
c0.094,1.375,0.249,2.731,0.489,4.037l-6.731,5.839l-6.731,5.839c-0.48,0.344-0.807,0.842-0.953,1.392
c-0.146,0.549-0.112,1.149,0.128,1.699c1.374,4.226,3.246,8.347,5.504,12.246c2.259,3.898,4.903,7.573,7.823,10.905
c0.413,0.48,0.911,0.807,1.443,0.953c0.533,0.146,1.099,0.111,1.649-0.129l8.484-2.954l8.484-2.954
c2.026,1.718,4.259,3.264,6.621,4.629c2.361,1.365,4.852,2.55,7.393,3.546l1.683,8.794l1.683,8.793
c0.103,0.55,0.395,1.082,0.807,1.494s0.945,0.705,1.529,0.773c2.198,0.412,4.396,0.738,6.611,0.961
c2.215,0.224,4.448,0.344,6.716,0.344c2.267,0,4.499-0.12,6.715-0.344c2.216-0.223,4.413-0.549,6.611-0.961
c0.585-0.068,1.117-0.361,1.529-0.773c0.413-0.412,0.704-0.944,0.808-1.494l1.683-8.793l1.683-8.794
c2.542-0.996,4.998-2.181,7.343-3.546c2.344-1.365,4.577-2.911,6.672-4.629l8.483,2.954l8.484,2.954
c0.55,0.24,1.117,0.274,1.649,0.129c0.532-0.146,1.03-0.473,1.442-0.953c2.92-3.332,5.564-7.007,7.822-10.905
c2.259-3.899,4.131-8.021,5.506-12.246c0.24-0.55,0.273-1.15,0.127-1.699C142.412,96.713,142.085,96.215,141.604,95.871z
M76,118.577c-12.015,0-22.909-4.888-30.8-12.778C37.31,97.908,32.422,87.014,32.422,75c0-12.015,4.887-22.909,12.778-30.8
C53.091,36.31,63.985,31.422,76,31.422c12.014,0,22.908,4.887,30.799,12.778c7.891,7.891,12.778,18.785,12.778,30.8
c0,12.014-4.888,22.908-12.778,30.799S88.014,118.577,76,118.577z"/>
</g>
<g id="Layer_2">
<g>
<path d="M75.851,35.422c-10.912,0-20.806,4.438-27.973,11.605S36.273,64.088,36.273,75s4.438,20.805,11.605,27.973
c7.167,7.166,17.061,11.604,27.973,11.604c10.912,0,20.806-4.438,27.973-11.604c7.166-7.168,11.604-17.061,11.604-27.973
s-4.438-20.807-11.604-27.973C96.656,39.86,86.763,35.422,75.851,35.422z M92.65,64.207H80.531v34.2h-9.36v-34.2h-12.12v-8.28
h33.6V64.207z"/>
<path d="M142.409,97.262c-0.146-0.549-0.474-1.047-0.955-1.391l-6.731-5.84l-6.731-5.838c0.24-1.307,0.395-2.662,0.488-4.037
c0.095-1.373,0.129-2.766,0.129-4.139c0-1.375-0.034-2.765-0.129-4.14c-0.094-1.374-0.248-2.731-0.488-4.037l6.731-5.839
l6.731-5.839c0.481-0.344,0.809-0.841,0.955-1.391c0.146-0.55,0.111-1.15-0.129-1.701c-1.375-4.224-3.247-8.346-5.506-12.245
c-2.258-3.898-4.902-7.574-7.822-10.905c-0.412-0.481-0.91-0.808-1.442-0.953c-0.532-0.146-1.1-0.111-1.649,0.129l-8.484,2.954
l-8.483,2.953c-2.095-1.718-4.328-3.263-6.672-4.628c-2.345-1.365-4.801-2.55-7.343-3.547l-1.682-8.792l-1.683-8.792
c-0.103-0.55-0.396-1.082-0.808-1.494s-0.945-0.704-1.529-0.773C84.78,6.084,80.315,5.638,75.85,5.638s-8.93,0.446-13.327,1.339
c-0.584,0.069-1.116,0.361-1.529,0.773c-0.412,0.412-0.704,0.944-0.807,1.494l-1.683,8.793l-1.683,8.793
c-2.542,0.997-5.032,2.182-7.394,3.547c-2.361,1.365-4.594,2.91-6.621,4.628l-8.484-2.953l-8.484-2.954
c-0.549-0.241-1.116-0.275-1.648-0.129c-0.533,0.146-1.031,0.472-1.443,0.953c-2.919,3.332-5.564,7.007-7.823,10.905
c-2.258,3.898-4.13,8.021-5.504,12.245c-0.241,0.55-0.275,1.151-0.128,1.7c0.146,0.549,0.472,1.047,0.953,1.391l6.732,5.839
l6.732,5.839c-0.24,1.305-0.395,2.662-0.489,4.036c-0.095,1.374-0.129,2.766-0.129,4.139c0,1.373,0.034,2.766,0.128,4.139
c0.094,1.375,0.249,2.73,0.489,4.037l-6.731,5.838l-6.731,5.84c-0.48,0.344-0.807,0.842-0.953,1.391
c-0.146,0.549-0.112,1.15,0.128,1.699c1.374,4.227,3.246,8.348,5.504,12.246c2.259,3.898,4.903,7.574,7.823,10.906
c0.413,0.48,0.911,0.807,1.443,0.953c0.533,0.145,1.099,0.111,1.649-0.129l8.484-2.955l8.484-2.953
c2.026,1.717,4.259,3.264,6.621,4.629c2.361,1.365,4.852,2.549,7.393,3.545l1.683,8.795l1.683,8.793
c0.103,0.549,0.395,1.082,0.807,1.494s0.945,0.705,1.529,0.773c2.198,0.412,4.396,0.738,6.611,0.961s4.448,0.344,6.716,0.344
c2.267,0,4.499-0.121,6.715-0.344s4.413-0.549,6.611-0.961c0.585-0.068,1.117-0.361,1.529-0.773
c0.413-0.412,0.704-0.945,0.808-1.494l1.683-8.793l1.683-8.795c2.542-0.996,4.998-2.18,7.343-3.545
c2.344-1.365,4.577-2.912,6.672-4.629l8.483,2.953l8.484,2.955c0.55,0.24,1.117,0.273,1.649,0.129
c0.532-0.146,1.03-0.473,1.442-0.953c2.92-3.332,5.564-7.008,7.822-10.906c2.259-3.898,4.131-8.02,5.506-12.246
C142.522,98.412,142.556,97.811,142.409,97.262z M106.649,105.799c-7.891,7.891-18.785,12.777-30.799,12.777
c-12.015,0-22.909-4.887-30.8-12.777C37.16,97.908,32.273,87.014,32.273,75c0-12.015,4.887-22.909,12.778-30.8
c7.891-7.891,18.785-12.778,30.8-12.778c12.014,0,22.908,4.887,30.799,12.778c7.891,7.891,12.778,18.785,12.778,30.8
C119.428,87.014,114.54,97.908,106.649,105.799z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.4 KiB

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

1643
web/dist/app/vendor.js vendored

File diff suppressed because one or more lines are too long

6
web/dist/index.html vendored
View file

@ -13,12 +13,12 @@
<script src="/web/app/assets/js/bootstrap.js"></script>
<script src="/web/app/assets/js/term.js"></script>
<script src="/web/app/assets/js/bootstrap-datepicker-1.6.0.js"></script>
<script src="/web/app/vendor.js?ver=0.11457824653536"></script>
<script src="/web/app/styles.js?ver=0.11457824653536"></script>
<script src="/web/app/vendor.js?ver=0.11457890068495"></script>
<script src="/web/app/styles.js?ver=0.11457890068495"></script>
</head>
<body class="grv">
<div id="app"></div>
</body>
<script src="/web/app/app.js?ver=0.11457824653536"></script>
<script src="/web/app/app.js?ver=0.11457890068495"></script>
</html>

View file

@ -1,6 +1,5 @@
var React = require('react');
var {getters, actions} = require('app/modules/activeTerminal/');
var NotFoundPage = require('app/components/notFoundPage.jsx');
var SessionPlayer = require('./sessionPlayer.jsx');
var ActiveSession = require('./activeSession.jsx');

View file

@ -0,0 +1,35 @@
var React = require('react');
var NotFound = React.createClass({
render() {
return (
<div className="grv-error-page">
<div className="grv-logo-tprt">Teleport</div>
<div className="grv-warning"><i className="fa fa-warning"></i> </div>
<h1>Whoops, we cannot find that</h1>
<div>Looks like the page you are looking for isn't here any longer</div>
<div>If you believe this is an error, please contact your organization administrator.</div>
<div className="contact-section">If you believe this is an issue with Teleport, please <a href="https://github.com/gravitational/teleport/issues/new">create a GitHub issue.</a>
</div>
</div>
);
}
})
var ExpiredInvite = React.createClass({
render() {
return (
<div className="grv-error-page">
<div className="grv-logo-tprt">Teleport</div>
<div className="grv-warning"><i className="fa fa-warning"></i> </div>
<h1>Invite code has expired</h1>
<div>Looks like your invite code isn't valid anymore</div>
<div className="contact-section">If you believe this is an issue with Teleport, please <a href="https://github.com/gravitational/teleport/issues/new">create a GitHub issue.</a>
</div>
</div>
);
}
})
export default NotFound;
export {NotFound, ExpiredInvite}

View file

@ -4,4 +4,4 @@ module.exports.NewUser = require('./newUser.jsx');
module.exports.Nodes = require('./nodes/main.jsx');
module.exports.Sessions = require('./sessions/main.jsx');
module.exports.CurrentSessionHost = require('./currentSession/main.jsx');
module.exports.NotFoundPage = require('./notFoundPage.jsx');
module.exports.NotFound = require('./errorPage.jsx').NotFound;

View file

@ -2,7 +2,7 @@ var React = require('react');
var $ = require('jQuery');
var reactor = require('app/reactor');
var LinkedStateMixin = require('react-addons-linked-state-mixin');
var {actions} = require('app/modules/user');
var {actions, getters} = require('app/modules/user');
var GoogleAuthInfo = require('./googleAuthLogo');
var cfg = require('app/config');
@ -31,6 +31,8 @@ var LoginInputForm = React.createClass({
},
render() {
let {isProcessing, isFailed, message } = this.props.attemp;
return (
<form ref="form" className="grv-login-input-form">
<h3> Welcome to Teleport </h3>
@ -44,7 +46,8 @@ var LoginInputForm = React.createClass({
<div className="form-group">
<input valueLink={this.linkState('token')} className="form-control required" name="token" placeholder="Two factor token (Google Authenticator)"/>
</div>
<button type="submit" className="btn btn-primary block full-width m-b" onClick={this.onClick}>Login</button>
<button onClick={this.onClick} disabled={isProcessing} type="submit" className="btn btn-primary block full-width m-b">Login</button>
{ isFailed ? (<label className="error">{message}</label>) : null }
</div>
</form>
);
@ -57,6 +60,7 @@ var Login = React.createClass({
getDataBindings() {
return {
attemp: getters.loginAttemp
}
},
@ -71,15 +75,13 @@ var Login = React.createClass({
actions.login(inputData, redirect);
},
render() {
var isProcessing = false;//this.state.userRequest.get('isLoading');
var isError = false;//this.state.userRequest.get('isError');
render() {
return (
<div className="grv-login text-center">
<div className="grv-logo-tprt"></div>
<div className="grv-content grv-flex">
<div className="grv-flex-column">
<LoginInputForm onClick={this.onClick}/>
<LoginInputForm attemp={this.state.attemp} onClick={this.onClick}/>
<GoogleAuthInfo/>
<div className="grv-login-info">
<i className="fa fa-question"></i>

View file

@ -5,6 +5,7 @@ var {actions, getters} = require('app/modules/invite');
var userModule = require('app/modules/user');
var LinkedStateMixin = require('react-addons-linked-state-mixin');
var GoogleAuthInfo = require('./googleAuthLogo');
var {ExpiredInvite} = require('./errorPage');
var InviteInputForm = React.createClass({
@ -58,6 +59,7 @@ var InviteInputForm = React.createClass({
},
render() {
let {isProcessing, isFailed, message } = this.props.attemp;
return (
<form ref="form" className="grv-invite-input-form">
<h3> Get started with Teleport </h3>
@ -89,12 +91,13 @@ var InviteInputForm = React.createClass({
</div>
<div className="form-group">
<input
name="token"
name="token"
valueLink={this.linkState('token')}
className="form-control required"
placeholder="Two factor token (Google Authenticator)" />
</div>
<button type="submit" disabled={this.props.attemp.isProcessing} className="btn btn-primary block full-width m-b" onClick={this.onClick} >Sign up</button>
<button type="submit" disabled={isProcessing} className="btn btn-primary block full-width m-b" onClick={this.onClick} >Sign up</button>
{ isFailed ? (<label className="error">{message}</label>) : null }
</div>
</form>
);
@ -108,7 +111,8 @@ var Invite = React.createClass({
getDataBindings() {
return {
invite: getters.invite,
attemp: getters.attemp
attemp: getters.attemp,
fetchingInvite: getters.fetchingInvite
}
},
@ -117,7 +121,13 @@ var Invite = React.createClass({
},
render: function() {
if(!this.state.invite) {
let {fetchingInvite, invite, attemp} = this.state;
if(fetchingInvite.isFailed){
return <ExpiredInvite/>
}
if(!invite) {
return null;
}
@ -126,12 +136,12 @@ var Invite = React.createClass({
<div className="grv-logo-tprt"></div>
<div className="grv-content grv-flex">
<div className="grv-flex-column">
<InviteInputForm attemp={this.state.attemp} invite={this.state.invite.toJS()}/>
<InviteInputForm attemp={attemp} invite={invite.toJS()}/>
<GoogleAuthInfo/>
</div>
<div className="grv-flex-column grv-invite-barcode">
<h4>Scan bar code for auth token <br/> <small>Scan below to generate your two factor token</small></h4>
<img className="img-thumbnail" src={ `data:image/png;base64,${this.state.invite.get('qr')}` } />
<img className="img-thumbnail" src={ `data:image/png;base64,${invite.get('qr')}` } />
</div>
</div>
</div>

View file

@ -1,19 +0,0 @@
var React = require('react');
var NotFoundPage = React.createClass({
render() {
return (
<div className="grv-page-notfound">
<div className="grv-logo-tprt">Teleport</div>
<div className="grv-warning"><i className="fa fa-warning"></i> </div>
<h1>Whoops, we cannot find that</h1>
<div>Looks like the page you are looking for isn't here any longer</div>
<div>If you believe this is an error, please contact your organization administrator.</div>
<div className="contact-section">If you believe this is an issue with Teleport, please <a href="https://github.com/gravitational/teleport/issues/new">create a GitHub issue.</a>
</div>
</div>
);
}
})
module.exports = NotFoundPage;

View file

@ -57,7 +57,6 @@ const ButtonCell = ({ rowIndex, data, ...props }) => {
)
}
var SessionList = React.createClass({
mixins: [LinkedStateMixin],
@ -101,7 +100,7 @@ var SessionList = React.createClass({
render: function() {
var data = this.sortAndFilter(this.props.sessionRecords);
return (
<div>
<div>
<div className="grv-search">
<input valueLink={this.linkState('filter')} placeholder="Search..." className="form-control input-sm"/>
</div>

View file

@ -1,7 +1,7 @@
var React = require('react');
var render = require('react-dom').render;
var { Router, Route, Redirect, IndexRoute, browserHistory } = require('react-router');
var { App, Login, Nodes, Sessions, NewUser, CurrentSessionHost, NotFoundPage } = require('./components');
var { App, Login, Nodes, Sessions, NewUser, CurrentSessionHost, NotFound } = require('./components');
var {ensureUser} = require('./modules/user/actions');
var auth = require('./auth');
var session = require('./session');
@ -26,7 +26,7 @@ render((
<Route path={cfg.routes.nodes} component={Nodes}/>
<Route path={cfg.routes.activeSession} components={{CurrentSessionHost: CurrentSessionHost}}/>
<Route path={cfg.routes.sessions} component={Sessions}/>
</Route>
<Route path="*" component={NotFoundPage} />
</Route>
<Route path="*" component={NotFound} />
</Router>
), document.getElementById("app"));

View file

@ -1,13 +1,20 @@
var reactor = require('app/reactor');
var { TLPT_RECEIVE_USER_INVITE } = require('./actionTypes');
var { FETCHING_INVITE} = require('app/modules/restApi/constants');
var restApiActions = require('app/modules/restApi/actions');
var api = require('app/services/api');
var cfg = require('app/config');
export default {
fetchInvite(inviteToken){
var path = cfg.api.getInviteUrl(inviteToken);
restApiActions.start(FETCHING_INVITE);
api.get(path).done(invite=>{
restApiActions.success(FETCHING_INVITE);
reactor.dispatch(TLPT_RECEIVE_USER_INVITE, invite);
}).
fail((err)=>{
restApiActions.fail(FETCHING_INVITE, err.responseJSON.message);
});
}
}

View file

@ -1,26 +1,10 @@
/*eslint no-undef: 0, no-unused-vars: 0, no-debugger:0*/
var {TRYING_TO_SIGN_UP, FETCHING_INVITE} = require('app/modules/restApi/constants');
var {requestStatus} = require('app/modules/restApi/getters');
var {TRYING_TO_SIGN_UP} = require('app/modules/restApi/constants');
const invite = [ ['tlpt_invite'], (invite) => {
return invite;
}
];
const attemp = [ ['tlpt_rest_api', TRYING_TO_SIGN_UP], (attemp) => {
var defaultObj = {
isProcessing: false,
isError: false,
isSuccess: false,
message: ''
}
return attemp ? attemp.toJS() : defaultObj;
}
];
const invite = [ ['tlpt_invite'], (invite) => invite ];
export default {
invite,
attemp
attemp: requestStatus(TRYING_TO_SIGN_UP),
fetchingInvite: requestStatus(FETCHING_INVITE)
}

View file

@ -1,5 +1,7 @@
import keyMirror from 'keymirror'
export default keyMirror({
TRYING_TO_SIGN_UP: null
TRYING_TO_SIGN_UP: null,
TRYING_TO_LOGIN: null,
FETCHING_INVITE: null
})

View file

@ -0,0 +1,13 @@
var defaultObj = {
isProcessing: false,
isError: false,
isSuccess: false,
message: ''
}
const requestStatus = (reqType) => [ ['tlpt_rest_api', reqType], (attemp) => {
return attemp ? attemp.toJS() : defaultObj;
}
];
export default { requestStatus };

View file

@ -1,3 +1,3 @@
module.exports.getters = require('./getters');
module.exports.actions = require('./actions');
module.exports.nodeStore = require('./statusStore');
module.exports.constants = require('./constants');

View file

@ -1,6 +1,6 @@
var reactor = require('app/reactor');
var { TLPT_RECEIVE_USER } = require('./actionTypes');
var { TRYING_TO_SIGN_UP} = require('app/modules/restApi/constants');
var { TRYING_TO_SIGN_UP, TRYING_TO_LOGIN} = require('app/modules/restApi/constants');
var restApiActions = require('app/modules/restApi/actions');
var auth = require('app/auth');
var session = require('app/session');
@ -28,18 +28,19 @@ export default {
restApiActions.success(TRYING_TO_SIGN_UP);
session.getHistory().push({pathname: cfg.routes.app});
})
.fail(()=>{
restApiActions.fail(TRYING_TO_SIGN_UP, 'failed to sing up');
.fail((err)=>{
restApiActions.fail(TRYING_TO_SIGN_UP, err.responseJSON.message || 'failed to sing up');
});
},
login({user, password, token}, redirect){
auth.login(user, password, token)
.done((sessionData)=>{
reactor.dispatch(TLPT_RECEIVE_USER, sessionData.user);
session.getHistory().push({pathname: redirect});
})
.fail(()=>{
})
restApiActions.start(TRYING_TO_LOGIN);
auth.login(user, password, token)
.done((sessionData)=>{
restApiActions.success(TRYING_TO_LOGIN);
reactor.dispatch(TLPT_RECEIVE_USER, sessionData.user);
session.getHistory().push({pathname: redirect});
})
.fail((err)=> restApiActions.fail(TRYING_TO_LOGIN, err.responseJSON.message))
}
}

View file

@ -1,3 +1,6 @@
var {TRYING_TO_LOGIN} = require('app/modules/restApi/constants');
var {requestStatus} = require('app/modules/restApi/getters');
const user = [ ['tlpt_user'], (currentUser) => {
if(!currentUser){
return null;
@ -15,5 +18,6 @@ const user = [ ['tlpt_user'], (currentUser) => {
];
export default {
user
user,
loginAttemp: requestStatus(TRYING_TO_LOGIN)
}

View file

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="150px" height="150px" viewBox="0 0 150 150" enable-background="new 0 0 150 150" xml:space="preserve">
<g display="none">
<path display="inline" d="M76,35.422c-10.912,0-20.806,4.438-27.973,11.605S36.422,64.088,36.422,75
c0,10.912,4.438,20.806,11.605,27.973c7.167,7.166,17.061,11.604,27.973,11.604c10.912,0,20.806-4.438,27.973-11.604
c7.166-7.167,11.604-17.061,11.604-27.973c0-10.912-4.438-20.806-11.604-27.973C96.806,39.861,86.912,35.422,76,35.422z"/>
<path display="inline" d="M141.604,95.871l-6.731-5.839l-6.731-5.839c0.24-1.306,0.395-2.662,0.488-4.037
c0.095-1.373,0.129-2.765,0.129-4.139s-0.034-2.765-0.129-4.139c-0.094-1.374-0.248-2.731-0.488-4.037l6.731-5.839l6.731-5.839
c0.481-0.344,0.809-0.841,0.955-1.391c0.146-0.55,0.111-1.15-0.129-1.701c-1.375-4.224-3.247-8.346-5.506-12.245
c-2.258-3.898-4.902-7.574-7.822-10.905c-0.412-0.481-0.91-0.808-1.442-0.953c-0.532-0.146-1.1-0.111-1.649,0.129l-8.484,2.954
l-8.483,2.953c-2.095-1.718-4.328-3.263-6.672-4.628c-2.345-1.365-4.801-2.55-7.343-3.547l-1.682-8.792l-1.683-8.792
c-0.103-0.55-0.396-1.082-0.808-1.494s-0.945-0.704-1.529-0.773C84.93,6.085,80.465,5.639,76,5.639s-8.93,0.446-13.327,1.339
c-0.584,0.069-1.116,0.361-1.529,0.773c-0.412,0.412-0.704,0.944-0.807,1.494l-1.683,8.793l-1.683,8.793
c-2.542,0.997-5.032,2.182-7.394,3.547c-2.361,1.365-4.594,2.91-6.621,4.628l-8.484-2.953l-8.484-2.954
c-0.549-0.241-1.116-0.275-1.648-0.129c-0.533,0.146-1.031,0.472-1.443,0.953c-2.919,3.332-5.564,7.007-7.823,10.905
c-2.258,3.898-4.13,8.021-5.504,12.245c-0.241,0.55-0.275,1.151-0.128,1.7c0.146,0.549,0.472,1.047,0.953,1.391l6.732,5.839
l6.732,5.839c-0.24,1.305-0.395,2.662-0.489,4.036c-0.095,1.374-0.129,2.766-0.129,4.139c0,1.374,0.034,2.766,0.128,4.139
c0.094,1.375,0.249,2.731,0.489,4.037l-6.731,5.839l-6.731,5.839c-0.48,0.344-0.807,0.842-0.953,1.392
c-0.146,0.549-0.112,1.149,0.128,1.699c1.374,4.226,3.246,8.347,5.504,12.246c2.259,3.898,4.903,7.573,7.823,10.905
c0.413,0.48,0.911,0.807,1.443,0.953c0.533,0.146,1.099,0.111,1.649-0.129l8.484-2.954l8.484-2.954
c2.026,1.718,4.259,3.264,6.621,4.629c2.361,1.365,4.852,2.55,7.393,3.546l1.683,8.794l1.683,8.793
c0.103,0.55,0.395,1.082,0.807,1.494s0.945,0.705,1.529,0.773c2.198,0.412,4.396,0.738,6.611,0.961
c2.215,0.224,4.448,0.344,6.716,0.344c2.267,0,4.499-0.12,6.715-0.344c2.216-0.223,4.413-0.549,6.611-0.961
c0.585-0.068,1.117-0.361,1.529-0.773c0.413-0.412,0.704-0.944,0.808-1.494l1.683-8.793l1.683-8.794
c2.542-0.996,4.998-2.181,7.343-3.546c2.344-1.365,4.577-2.911,6.672-4.629l8.483,2.954l8.484,2.954
c0.55,0.24,1.117,0.274,1.649,0.129c0.532-0.146,1.03-0.473,1.442-0.953c2.92-3.332,5.564-7.007,7.822-10.905
c2.259-3.899,4.131-8.021,5.506-12.246c0.24-0.55,0.273-1.15,0.127-1.699C142.412,96.713,142.085,96.215,141.604,95.871z
M76,118.577c-12.015,0-22.909-4.888-30.8-12.778C37.31,97.908,32.422,87.014,32.422,75c0-12.015,4.887-22.909,12.778-30.8
C53.091,36.31,63.985,31.422,76,31.422c12.014,0,22.908,4.887,30.799,12.778c7.891,7.891,12.778,18.785,12.778,30.8
c0,12.014-4.888,22.908-12.778,30.799S88.014,118.577,76,118.577z"/>
</g>
<g id="Layer_2">
<g>
<path d="M75.851,35.422c-10.912,0-20.806,4.438-27.973,11.605S36.273,64.088,36.273,75s4.438,20.805,11.605,27.973
c7.167,7.166,17.061,11.604,27.973,11.604c10.912,0,20.806-4.438,27.973-11.604c7.166-7.168,11.604-17.061,11.604-27.973
s-4.438-20.807-11.604-27.973C96.656,39.86,86.763,35.422,75.851,35.422z M92.65,64.207H80.531v34.2h-9.36v-34.2h-12.12v-8.28
h33.6V64.207z"/>
<path d="M142.409,97.262c-0.146-0.549-0.474-1.047-0.955-1.391l-6.731-5.84l-6.731-5.838c0.24-1.307,0.395-2.662,0.488-4.037
c0.095-1.373,0.129-2.766,0.129-4.139c0-1.375-0.034-2.765-0.129-4.14c-0.094-1.374-0.248-2.731-0.488-4.037l6.731-5.839
l6.731-5.839c0.481-0.344,0.809-0.841,0.955-1.391c0.146-0.55,0.111-1.15-0.129-1.701c-1.375-4.224-3.247-8.346-5.506-12.245
c-2.258-3.898-4.902-7.574-7.822-10.905c-0.412-0.481-0.91-0.808-1.442-0.953c-0.532-0.146-1.1-0.111-1.649,0.129l-8.484,2.954
l-8.483,2.953c-2.095-1.718-4.328-3.263-6.672-4.628c-2.345-1.365-4.801-2.55-7.343-3.547l-1.682-8.792l-1.683-8.792
c-0.103-0.55-0.396-1.082-0.808-1.494s-0.945-0.704-1.529-0.773C84.78,6.084,80.315,5.638,75.85,5.638s-8.93,0.446-13.327,1.339
c-0.584,0.069-1.116,0.361-1.529,0.773c-0.412,0.412-0.704,0.944-0.807,1.494l-1.683,8.793l-1.683,8.793
c-2.542,0.997-5.032,2.182-7.394,3.547c-2.361,1.365-4.594,2.91-6.621,4.628l-8.484-2.953l-8.484-2.954
c-0.549-0.241-1.116-0.275-1.648-0.129c-0.533,0.146-1.031,0.472-1.443,0.953c-2.919,3.332-5.564,7.007-7.823,10.905
c-2.258,3.898-4.13,8.021-5.504,12.245c-0.241,0.55-0.275,1.151-0.128,1.7c0.146,0.549,0.472,1.047,0.953,1.391l6.732,5.839
l6.732,5.839c-0.24,1.305-0.395,2.662-0.489,4.036c-0.095,1.374-0.129,2.766-0.129,4.139c0,1.373,0.034,2.766,0.128,4.139
c0.094,1.375,0.249,2.73,0.489,4.037l-6.731,5.838l-6.731,5.84c-0.48,0.344-0.807,0.842-0.953,1.391
c-0.146,0.549-0.112,1.15,0.128,1.699c1.374,4.227,3.246,8.348,5.504,12.246c2.259,3.898,4.903,7.574,7.823,10.906
c0.413,0.48,0.911,0.807,1.443,0.953c0.533,0.145,1.099,0.111,1.649-0.129l8.484-2.955l8.484-2.953
c2.026,1.717,4.259,3.264,6.621,4.629c2.361,1.365,4.852,2.549,7.393,3.545l1.683,8.795l1.683,8.793
c0.103,0.549,0.395,1.082,0.807,1.494s0.945,0.705,1.529,0.773c2.198,0.412,4.396,0.738,6.611,0.961s4.448,0.344,6.716,0.344
c2.267,0,4.499-0.121,6.715-0.344s4.413-0.549,6.611-0.961c0.585-0.068,1.117-0.361,1.529-0.773
c0.413-0.412,0.704-0.945,0.808-1.494l1.683-8.793l1.683-8.795c2.542-0.996,4.998-2.18,7.343-3.545
c2.344-1.365,4.577-2.912,6.672-4.629l8.483,2.953l8.484,2.955c0.55,0.24,1.117,0.273,1.649,0.129
c0.532-0.146,1.03-0.473,1.442-0.953c2.92-3.332,5.564-7.008,7.822-10.906c2.259-3.898,4.131-8.02,5.506-12.246
C142.522,98.412,142.556,97.811,142.409,97.262z M106.649,105.799c-7.891,7.891-18.785,12.777-30.799,12.777
c-12.015,0-22.909-4.887-30.8-12.777C37.16,97.908,32.273,87.014,32.273,75c0-12.015,4.887-22.909,12.778-30.8
c7.891-7.891,18.785-12.778,30.8-12.778c12.014,0,22.908,4.887,30.799,12.778c7.891,7.891,12.778,18.785,12.778,30.8
C119.428,87.014,114.54,97.908,106.649,105.799z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.4 KiB

View file

@ -6,7 +6,7 @@
@import "grv-sessions";
@import "grv-nav";
@import "grv-current-session";
@import "grv-page-notfound";
@import "grv-error-page";
@import "grv-slider";
@import "grv-session-player";
@import "grv-terminal";

View file

@ -1,5 +1,4 @@
.grv-page-notfound{
.grv-error-page{
margin: 0 auto;
max-width: 600px;
text-align: center;

View file

@ -9,7 +9,7 @@
.grv-content{
padding: 15px;
width: 700px;
width: 600px;
z-index: 100;
margin: 0 auto;
margin-top: 20px;