overleaf/services/web/public/stylesheets/app/editor.less
2018-09-03 09:42:37 +01:00

664 lines
12 KiB
Text

@import "./editor/file-tree.less";
@import "./editor/history.less";
@import "./editor/toolbar.less";
@import "./editor/left-menu.less";
@import "./editor/pdf.less";
@import "./editor/enago.less";
@import "./editor/share.less";
@import "./editor/chat.less";
@import "./editor/binary-file.less";
@import "./editor/search.less";
@import "./editor/publish-template.less";
@import "./editor/online-users.less";
@import "./editor/hotkeys.less";
@import "./editor/review-panel.less";
@import "./editor/rich-text.less";
@import "./editor/publish-modal.less";
@ui-layout-toggler-def-height: 50px;
@ui-resizer-size: 7px;
@keyframes blink {
0% {
opacity: 0.2;
}
20% {
opacity: 1;
}
100% {
opacity: 0.2;
}
}
.editor-menu-icon when (@is-overleaf = true) {
&.fa {
width: 1em;
background: @editor-header-logo-background;
&::before {
// Disable the font-awesome icon when in Overleaf by replacing it with a
// non-breakable space instead (otherwise the browser would render a
// zero-width element).
content: "\00a0";
}
}
}
.full-size {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
.global-alerts {
height: 0;
margin-top: 2px;
text-align: center;
.alert {
display: inline-block;
text-align: left;
min-width: 400px;
padding: @global-alerts-padding;
font-size: 14px;
margin-bottom: (@line-height-computed / 4);
position: relative;
z-index: 20;
}
}
#try-reconnect-now-button {
margin-left: 20px;
}
#ide-body {
.full-size;
top: @ide-body-top-offset;
&.ide-history-open {
top: @ide-body-top-offset + @editor-toolbar-height;
}
}
#editor, #editor-rich-text {
.full-size;
}
#editor-rich-text {
top: @editor-toolbar-height;
}
.toolbar-editor {
height: @editor-toolbar-height;
background-color: @editor-toolbar-bg;
padding: 0 5px;
overflow: hidden;
position: relative;
z-index: 10; // Prevent track changes showing over toolbar
}
.loading-screen {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
background-color: #FFF;
}
.loading-screen-brand-container {
width: 15%;
min-width: 200px;
text-align: center;
}
.loading-screen-brand {
position: relative;
width: 100%;
padding-top: @editor-loading-logo-padding-top;
height: 0;
background: @editor-loading-logo-background-url no-repeat bottom / 100%;
&::after {
content: '';
position: absolute;
height: inherit;
right: 0;
bottom: 0;
left: 0;
background: @editor-loading-logo-foreground-url no-repeat bottom / 100%;
transition: height .5s;
}
}
.loading-screen-label {
margin: 0;
padding-top: 1em;
font-size: 2em;
color: @gray-dark;
}
.loading-screen-ellip {
animation: blink 1.4s both infinite;
&:nth-child(2) {
animation-delay: 0.2s;
}
&:nth-child(3) {
animation-delay: 0.4s;
}
}
.loading-screen-error {
margin: 0;
padding-top: 1em;
color: @state-danger-text;
}
.loading-panel {
.full-size;
padding-top: 10rem;
font-family: @font-family-serif;
text-align: center;
background-color: #fafafa;
}
.error-panel {
.full-size;
padding: @line-height-computed;
background-color: #fafafa;
.alert {
max-width: 400px;
margin: auto;
}
}
.project-name {
.name {
display: inline-block;
max-width: 250px;
overflow: hidden;
text-overflow: ellipsis;
vertical-align: top;
padding: 6px;
color: @project-name-color;
font-weight: 700;
white-space: nowrap;
}
input {
height: 30px;
margin-top: 4px;
text-align: center;
padding: 6px;
font-weight: 700;
}
a.rename {
visibility: hidden;
display: inline-block;
color: @project-rename-link-color;
padding: 5px;
border-radius: @border-radius-small;
&:hover {
text-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
color: @project-rename-link-color-hover;
text-decoration: none;
}
}
&:hover {
a.rename {
visibility: visible;
}
}
}
/**************************************
Ace
***************************************/
// The internal components of the aceEditor directive
.ace-editor-wrapper {
.full-size;
.undo-conflict-warning {
position: absolute;
top: 0;
right: 0;
left: 0;
z-index: 10;
}
.ace-editor-body {
width: 100%;
height: 100%;
}
.spelling-highlight {
position: absolute;
background-image: url(/img/spellcheck-underline.png);
@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
background-image: url(/img/spellcheck-underline@2x.png);
background-size: 5px 4px;
}
background-repeat: repeat-x;
background-position: bottom left;
}
.remote-cursor {
position: absolute;
border-left: 2px solid transparent;
.nubbin {
height: 5px;
width: 5px;
position: absolute;
left: -2px;
}
}
.annotation-label {
padding: (@line-height-computed / 4) (@line-height-computed / 2);
font-size: 0.8rem;
z-index: 100;
font-family: @font-family-sans-serif;
color: white;
font-weight: 700;
white-space: nowrap;
}
.annotation {
position: absolute;
z-index: 2;
}
.highlights-before-label, .highlights-after-label {
position: absolute;
right: @line-height-computed;
z-index: 1;
}
.highlights-before-label {
top: @line-height-computed / 2;
}
.highlights-after-label {
bottom: @line-height-computed / 2;
}
}
// Hack to solve an issue where scrollbars aren't visible in Safari.
// Safari seems to clip part of the scrollbar element. By giving the
// element a background, we're telling Safari that it *really* needs to
// paint the whole area. See https://github.com/ajaxorg/ace/issues/2872
.ace_scrollbar-inner {
background-color: #FFF;
opacity: 0.01;
.ace_dark & {
background-color: #000;
}
}
/**************************************
CodeMirror
***************************************/
.cm-editor-wrapper {
position: relative;
height: 100%;
}
.cm-editor-body {
height: 100%;
}
// CM (for some reason) has height set to 300px in it's stylesheet
.CodeMirror {
height: 100%;
}
.ui-layout-resizer when (@is-overleaf = false) {
width: 6px;
background-color: @editor-resizer-bg-color;
border-left: 1px solid @editor-border-color;
border-right: 1px solid @editor-border-color;
.ui-layout-toggler {
color: #999;
font-family: FontAwesome;
font-style: normal;
font-weight: normal;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
font-size: 16px !important;
line-height: 50px;
background-color: @editor-toggler-bg-color;
&:hover {
background-color: @editor-toggler-hover-bg-color;
color: #333;
}
}
}
.ui-layout-resizer when (@is-overleaf = true) {
width: @ui-resizer-size !important;
background-color: @editor-resizer-bg-color;
&.ui-layout-resizer-closed {
&::before,
&::after {
content: none;
}
}
&::before,
&::after {
content: '\2847';
display: block;
position: absolute;
text-align: center;
left: -2px;
-webkit-font-smoothing: antialiased;
width: 100%;
font-size: 24px;
top: 25%;
color: @ol-blue-gray-2;
}
&::after {
top: 75%;
}
}
.ui-layout-resizer-west.ui-layout-resizer-open, .ui-layout-resizer-east.ui-layout-resizer-closed {
.ui-layout-toggler when (@is-overleaf = false) {
&:before {
content: "\f104"
}
}
}
.ui-layout-resizer-east.ui-layout-resizer-open, .ui-layout-resizer-west.ui-layout-resizer-closed {
.ui-layout-toggler when (@is-overleaf = false) {
&:before {
content: "\f105"
}
}
}
.ui-layout-toggler when (@is-overleaf = true) {
display: none !important;
}
.custom-toggler when (@is-overleaf = true) {
position: absolute;
display: flex;
align-items: center;
justify-content: center;
width: @ui-resizer-size !important;
height: 50px;
margin-top: -25px;
top: 50%;
z-index: 3;
background-color: @editor-toggler-bg-color;
&:hover,
&:focus {
outline: none;
text-decoration: none;
}
// Increase hit area
&::before {
content: '';
display: block;
position: absolute;
top: 0;
right: -3px;
bottom: 0;
left: -3px;
}
&::after {
font-family: FontAwesome;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
font-size: 65%;
font-weight: bold;
color: #FFF;
user-select: none;
pointer-events: none;
}
&:hover {
background-color: @editor-toggler-hover-bg-color;
}
}
.custom-toggler-east::after {
content: '\f105';
}
.custom-toggler-west::after {
content: '\f104';
}
.custom-toggler-closed.custom-toggler-east::after {
content: '\f104';
}
.custom-toggler-closed.custom-toggler-west::after {
content: '\f105';
}
.ui-layout-resizer-dragging {
background-color: @editor-resizer-bg-color-dragging;
}
.context-menu {
position: fixed;
z-index: 100;
}
.editor-dark {
color: @gray-lighter;
background-color: @editor-dark-background-color;
.ui-layout-resizer {
background-color: darken(@editor-dark-background-color, 10%);
border: none;
}
.btn-default {
color: white;
background-color: @gray;
border-color: darken(@gray-dark, 10%);
&:hover {
background-color: darken(@gray, 5%);
border-color: darken(@gray-dark, 20%);
}
}
}
.modal-alert {
margin-top:10px;
margin-bottom:0px;
}
// vertically centre the "connection down" modal so it does not hide
// the reconnecting indicator
.modal.lock-editor-modal {
display: flex !important;
.modal-dialog {
margin: auto;
}
}
.sl_references_search_hint-varDefault {
position: absolute;
bottom: -22px;
left: -1px;
right: 0px;
text-align: center;
padding: 2px;
background: rgb(202, 214, 250);
border: 1px solid lightgray;
box-shadow: 3px 3px 5px rgba(0,0,0,.2);
span {
color: black;
}
}
.sl_references_search_hint-varButton {
position: absolute;
bottom: -65px;
left: -1px;
right: 0px;
padding: 0 6px 6px;
text-align: center;
background: #fbfbfb;
color: #FFF;
box-shadow: 3px 3px 5px rgba(0,0,0,.2);
border-left: 1px solid lightgray;
font-family: @font-family-sans-serif;
font-size: 13px;
font-weight: 600;
hr {
margin: 6px -6px;
}
button {
width: 100%;
font-size: inherit;
line-height: 1.4;
}
span {
padding-left: 10px;
}
kbd {
display: block;
font-family: inherit;
font-size: 12px;
font-weight: normal;
}
}
// -- References Search Modal --
.references-search-modal-backdrop {
// don't grey out the editor when the
// modal is active
background-color: transparent;
}
.references-search-modal {
// upgrade prompt
.references-search-upgrade-prompt {
padding: 24px;
padding-bottom: 48px;
.upgrade-prompt {
text-align: center;
width: 400px;
padding-top: 14px;
padding-bottom: 14px;
padding-left: 38px;
padding-right: 38px;
margin: auto;
background: white;
opacity: 0.95;
border-radius: 8px;
.message {
margin-top: 15px;
&.call-to-action {
font-weight: bold;
}
ul.list-unstyled {
text-align: left;
}
}
a.btn {
opacity: 1.0;
}
}
}
.search-form {
// position the spinner inside the input element
i.fa-spinner {
margin-top: -30px;
}
}
.alert-danger {
margin-top: 12px;
margin-bottom: 0px;
}
// search result items list
.search-results {
font-size: 12px;
.no-results-message {
font-size: 16px;
}
.search-result-hit {
&:hover {
cursor: pointer;
}
border-bottom: 1px solid #ddd;
padding: 8px;
&:last-child {
border-bottom: 1px solid transparent;
}
border-left: 4px solid transparent;
&.selected-search-result-hit {
background-color: @red;
color: white;
.hit-year.small {
color: white;
}
.hit-journal.small {
color: white;
}
}
.hit-title {
font-size: 1.3em;
font-style: italic;
}
}
}
}
.referencesImportModal {
.referencesImportPreviewScroller {
font-family: monospace;
font-size: 0.8em;
max-height: 360px;
overflow: scroll;
white-space: pre;
padding: 8px 12px;
margin-bottom: 15px;
border: 1px solid @gray-lighter;
background-color: @gray-lightest;
}
}
.teaser-title,
.dropbox-teaser-title {
margin-top: 0;
text-align: center;
}
.teaser-img,
.dropbox-teaser-img {
.img-responsive;
margin-bottom: 5px;
}
.teaser-video-container,
.dropbox-teaser-video-container {
margin-top: -@modal-inner-padding;
margin-left: -@modal-inner-padding;
margin-right: -@modal-inner-padding;
margin-bottom: 5px;
overflow: hidden;
}
.teaser-video,
.dropbox-teaser-video {
width: 100%;
height: auto;
border-bottom: 1px solid @modal-header-border-color;
}
.spell-check-menu {
> .dropdown-menu > li > a {
padding: 2px 15px;
}
}
.spell-check-menu-from-bottom {
> .dropdown-menu {
top: auto;
bottom: 100%;
}
}