diff --git a/app/controllers/course/files.php b/app/controllers/course/files.php index 19c3697cbc90412ac100871cc979df0a4a115f0d..4370eea24d3ec406cf7372f7476f44eb175cdb23 100644 --- a/app/controllers/course/files.php +++ b/app/controllers/course/files.php @@ -90,7 +90,6 @@ class Course_FilesController extends AuthenticatedController Icon::create('file-pic'), [ 'onClick' => "STUDIP.Files.openGallery(); return false;", - 'style' => 'display: none', ] ); @@ -174,7 +173,6 @@ class Course_FilesController extends AuthenticatedController Icon::create('file-pic'), [ 'onClick' => "STUDIP.Files.openGallery(); return false;", - 'style' => 'display: none', ] ); if ($GLOBALS['user']->id !== 'nobody') { diff --git a/app/controllers/course/wiki.php b/app/controllers/course/wiki.php index 469a5da3425ef86830cab278f0230e30a962a7fe..11e691541b5e0fc95434cc1edb13332fa3bb5e4a 100644 --- a/app/controllers/course/wiki.php +++ b/app/controllers/course/wiki.php @@ -59,7 +59,9 @@ class Course_WikiController extends AuthenticatedController $widget->setExtra($extra); } $element = new WidgetElement($toc_content_empty ? _('Keine QuickLinks vorhanden') : $toc_content); - $element->icon = Icon::create('link-intern'); + if (!$toc_content_empty) { + $element->icon = Icon::create('link-intern'); + } $widget->addElement($element); } @@ -83,6 +85,7 @@ class Course_WikiController extends AuthenticatedController ['data-dialog' => 'width=700'] ); } + $actions->addSeparator(); if ($GLOBALS['perm']->have_studip_perm('tutor', $this->range->id)) { //minimum perm tutor necessary $actions->addLink( _('Seiten aus Veranstaltung importieren'), @@ -91,6 +94,7 @@ class Course_WikiController extends AuthenticatedController ['data-dialog' => 'width=700'] ); } + $actions->addLink('foo',$this->new_pageURL($this->page->id), Icon::create('export') ); $sidebar->addWidget($actions); } diff --git a/app/controllers/files.php b/app/controllers/files.php index df4657c832a089d0b3364534a7ec3494dfb102ab..f5957d7d9e3ec94ea8f57e6b4ca5ab3bf235df47 100644 --- a/app/controllers/files.php +++ b/app/controllers/files.php @@ -144,7 +144,6 @@ class FilesController extends AuthenticatedController Icon::create('file-pic'), [ 'onClick' => "STUDIP.Files.openGallery(); return false;", - 'style' => 'display: none', ] ); @@ -617,7 +616,6 @@ class FilesController extends AuthenticatedController Icon::create('file-pic'), [ 'onClick' => "STUDIP.Files.openGallery(); return false;", - 'style' => 'display: none', ] ); $sidebar->addWidget($actions); diff --git a/app/views/admin/plugin/upload-drag-and-drop.php b/app/views/admin/plugin/upload-drag-and-drop.php index 1cdac24b5120ef934a69ce6fd7a4c8dda5b7c77d..efa99235b86b42a370722f07ca4935f2ddf32836 100644 --- a/app/views/admin/plugin/upload-drag-and-drop.php +++ b/app/views/admin/plugin/upload-drag-and-drop.php @@ -3,11 +3,13 @@ * @var Admin_PluginController $controller */ ?> -<form action="<?= $controller->url_for('admin/plugin/install') ?>" - method="post" enctype="multipart/form-data" class="drag-and-drop"> - <?= CSRFProtection::tokenTag() ?> - <input type="hidden" name="studip_ticket" value="<?= get_ticket() ?>"> +<div class="drag-and-drop-wrapper"> + <form action="<?= $controller->url_for('admin/plugin/install') ?>" + method="post" enctype="multipart/form-data" class="drag-and-drop"> + <?= CSRFProtection::tokenTag() ?> + <input type="hidden" name="studip_ticket" value="<?= get_ticket() ?>"> - <?= _('Plugin auswählen oder via Drag and Drop installieren') ?> - <input type="file" name="upload_file"> -</form> + <?= _('Plugin auswählen oder via Drag and Drop installieren') ?> + <input type="file" name="upload_file"> + </form> +</div> \ No newline at end of file diff --git a/app/views/files/upload-drag-and-drop.php b/app/views/files/upload-drag-and-drop.php index bf4b06c3624e5777e30138e92ea6baa26051b4cc..0eb0adeab9a67b688c3ffb062eb9982507906b63 100644 --- a/app/views/files/upload-drag-and-drop.php +++ b/app/views/files/upload-drag-and-drop.php @@ -1,3 +1,5 @@ -<form class="drag-and-drop files"> - <?= _('Neue Dateien zum Hinzufügen per Drag & Drop in diesen Bereich ziehen.') ?> -</form> \ No newline at end of file +<div class="drag-and-drop-wrapper"> + <form class="drag-and-drop files"> + <?= _('Lege Dateien zum Hochladen hier ab.') ?> + </form> +</div> \ No newline at end of file diff --git a/resources/assets/javascripts/bootstrap/files.js b/resources/assets/javascripts/bootstrap/files.js index 6caef6d1d76ce57b9e53d33a0bef8fce200c2d9e..62ae6cfd78c30f2b8eb548e43700f33771d288be 100644 --- a/resources/assets/javascripts/bootstrap/files.js +++ b/resources/assets/javascripts/bootstrap/files.js @@ -17,9 +17,9 @@ function searchMoreFiles (button) { return false; } -STUDIP.eventBus.on('files-vue-app-updated', ({hasImages}) => { - $('#sidebar-actions a[onclick*="Files.openGallery"]').toggle(hasImages); -}); +STUDIP.eventBus.on("files-vue-app-updated", ({ hasImages }) => { + $('#sidebar-actions a[onclick*="Files.openGallery"]').parent().toggle(hasImages); + }); STUDIP.domReady(() => { diff --git a/resources/assets/stylesheets/highcontrast.scss b/resources/assets/stylesheets/highcontrast.scss index d081c2c0d6e71ade92b3357f2437d99a308a9beb..57eafb4a5db28538a1ff40a4ca8c9e3a6531d133 100644 --- a/resources/assets/stylesheets/highcontrast.scss +++ b/resources/assets/stylesheets/highcontrast.scss @@ -202,8 +202,7 @@ button.button[disabled]:hover { /* SIDEBAR AND WIDGETS */ -.studip-widget .widget-header, -.sidebar-widget-header { +.studip-widget .widget-header { background-color: $black !important; color: $white !important; } @@ -249,16 +248,14 @@ button.button[disabled]:hover { .widget-links.sidebar-navigation > li.active { - background-color: $black !important; - color: $white !important; - box-shadow: unset; - + background-color: var(--black); + border-color: var(--black); } .widget-links.sidebar-navigation > li.active, .widget-links.sidebar-navigation > li.active a { - + color: var(--white); &::before, &::after { border-left-color: $black; @@ -272,6 +269,7 @@ button.button[disabled]:hover { box-shadow: unset; border-top: 2px solid $black; border-bottom: 2px solid $black; + border-left: solid 4px $medium-gray; a { color: $black; diff --git a/resources/assets/stylesheets/mixins/colors.scss b/resources/assets/stylesheets/mixins/colors.scss index 041bc626cb7769f93410ff9a61ea7eb03936afc8..21039f60ffaf08b25669348c20a1102883bf8054 100644 --- a/resources/assets/stylesheets/mixins/colors.scss +++ b/resources/assets/stylesheets/mixins/colors.scss @@ -244,10 +244,13 @@ $color--font-inverted: $color--white; $color--main-navigation-background: $color--gray-7; $color--main-navigation-border: $color--gray-5; +$color--sidebar-marker-active: $color--gray-5; $color--sidebar-marker-focus: $color--gray-5; $color--sidebar-marker-hover: $color--gray-5; +$color--sidebar-active: $color--gray-6; $color--sidebar-focus: $color--gray-6; $color--sidebar-hover: $color--gray-6; +$color--sidebar-divider: $color--gray-6; $color--dialog-overlay: $color--gray-1; @@ -282,4 +285,4 @@ $color--focus: $color--gray-4; $color--warning: $color--red-1; $color--attention: $color--yellow-1; -$color--good: $color--green-1; \ No newline at end of file +$color--good: $color--green-1; diff --git a/resources/assets/stylesheets/scss/admin.scss b/resources/assets/stylesheets/scss/admin.scss index 67b87924c3588fba80e6b16911ece6e0dfaad8bd..634c4e8394198461cc998bf998abe13e7fec30a1 100644 --- a/resources/assets/stylesheets/scss/admin.scss +++ b/resources/assets/stylesheets/scss/admin.scss @@ -1,17 +1,27 @@ .drag-and-drop { display: none; } +.drag-and-drop-wrapper { + background-color: var(--color--tile-background); + border: solid thin var(--color--tile-border); + border-radius: 5px; + padding: 5px; + + &:hover { + background-color: var(--color--tile-background-hover); + border-color: var(--color--tile-border-hover); + } +} .js .drag-and-drop { display: block; - margin: 5px; + margin: 0; overflow: hidden; - padding: 10px; - padding-left: 0px; + padding: 15px 15px 15px 80px; position: relative; - text-align: center; - background-color: var(--content-color-20); - @include background-icon(upload, clickable, 50); + text-align: left; + background-color: transparent; + border: solid thin transparent; + @include background-icon(upload, clickable, 48); background-repeat: no-repeat; - background-position: center 10px; - padding-top: 70px; + background-position: 15px center; color: var(--base-color); cursor: pointer; @@ -26,10 +36,9 @@ top: 0; } - &.hovered { - background-color: var(--base-color); - @include background-icon(upload, info_alt, 50); - color: var(--white); + &:hover { + border: dashed thin var(--color--tile-border-hover); + border-radius: 5px; } } .js .widget-links .drag-and-drop { diff --git a/resources/assets/stylesheets/scss/blubber.scss b/resources/assets/stylesheets/scss/blubber.scss index 1e96554d0da39edcdeddb9cc5af4ca025e94114b..8c5f599406320c9eabf772487c4b43b9d8b4610c 100644 --- a/resources/assets/stylesheets/scss/blubber.scss +++ b/resources/assets/stylesheets/scss/blubber.scss @@ -342,8 +342,6 @@ padding-left: 0px; li { - border-bottom: thin solid var(--content-color-40); - height: 50px; max-height: 50px; overflow: hidden; @@ -351,12 +349,10 @@ cursor: pointer; color: var(--base-color); font-weight: bold; - &:last-child { - border-bottom: none; - } + border-left: solid 4px transparent; &.unseen { - border-left: 3px solid var(--active-color); + border-color: var(--active-color); padding-left: 7px; } @@ -371,31 +367,9 @@ justify-content: center; } - &.active { - background-color: var(--yellow-40); - - &::before { - content: ''; - position: absolute; - height: 0px; - width: 0px; - border-top: 35px transparent solid; - border-bottom: 35px transparent solid; - border-left: 10px var(--content-color-40) solid; - right: -2px; - margin-top: -10px; - } - &::after { - content: ''; - position: absolute; - height: 0px; - width: 0px; - border-top: 35px transparent solid; - border-bottom: 35px transparent solid; - border-left: 10px var(--yellow-40) solid; - right: -1px; - margin-top: -70px; - } + &.active, &:hover { + background-color: var(--color--sidebar-active); + border-color: var(--color--sidebar-marker-active); } a { diff --git a/resources/assets/stylesheets/scss/sidebar.scss b/resources/assets/stylesheets/scss/sidebar.scss index 9b25dfe1d7293eb88f8e5439f7645a14e24c5066..d27418b66396a438d239549df9f463b52e52b7d0 100644 --- a/resources/assets/stylesheets/scss/sidebar.scss +++ b/resources/assets/stylesheets/scss/sidebar.scss @@ -1,3 +1,5 @@ +$icon-size: 16px; + #sidebar { background: var(--white); border-left: 0; @@ -49,31 +51,51 @@ } .sidebar-widget, .sidebar-widget-placeholder { - background: var(--white); - border: 1px solid var(--content-color-40); + background-color: var(--white); + border: none; margin: 15px 0 0; - width: $sidebar-width - 5px; + width: $sidebar-width; } - .sidebar-widget-header, - .sidebar-widget-extra { - background: var(--content-color-20); - color: var(--base-color); + .sidebar-widget-header { + background-color: var(--white); + color: var(--black); font-weight: bold; padding: 4px; word-break: break-word; } + .sidebar-widget-extra { + background-color: var(--white); + a { + display: inline-block; + height: $icon-size; + width: $icon-size; + padding: 4px; + border: solid thin var(--base-color); + border-radius: 5px; + margin-bottom: 4px; + + &:hover { + background-color: var(--base-color); + + img { + filter: brightness(100); + } + } + } + } + // Links inside the sidebar a.link-intern { - @include icon(before, link-intern, clickable, 16px, 2px); + @include icon(before, link-intern, clickable, $icon-size, 2px); } a.link-extern { - @include icon(before, link-extern, clickable, 16px, 2px); + @include icon(before, link-extern, clickable, $icon-size, 2px); } // Prevent selects from growing too large select { - max-width: 100%; + max-width: calc(100% - 1ex); } } @@ -83,16 +105,52 @@ ul.widget-list { padding: 0; > li { background-repeat: no-repeat; - background-position: 0 1px; - background-size: 16px 16px; - padding-left: 20px; + background-position: 2px center; + background-size: $icon-size $icon-size; word-wrap: break-word; + margin-left: -4px; + padding: 2px 0; + background-color: var(--white); + border-left: solid 4px var(--white); + + > *:not(label) { + padding: 4px 0 4px 24px; + line-height: $icon-size + 1; + } + + &:has(>button:not(.options-radio, .options-checkbox)), &:has(>a):not(:last-child) { + border-bottom: solid thin var(--color--sidebar-divider); + } + + &:last-child { + button, a { + border-bottom: none; + } + } + + &:hover { + background-color: var(--color--sidebar-active); + border-left: solid 4px var(--color--sidebar-marker-active); + + a, button { + color: var(--color--font-primary); + } + } + + &:has(>hr) { + margin-left: -10px; + &:hover { + background-color: transparent; + border-color: transparent; + } + } } hr { border-style: none; - border-top: thin solid var(--content-color-40); - margin: 4px 0px 4px -20px; + border-top: 2px solid var(--white); + margin: 4px 0px; + margin-top: -3px; } button { @@ -100,14 +158,18 @@ ul.widget-list { text-align: left; width: 100%; } + + &.sidebar-navigation, + &.sidebar-views { + > li a { + padding: 4px 0; + } + } } div#sidebar-navigation { div.sidebar-widget-header { display: none; } - div.sidebar-widget-content { - border-top: 0px; - } } .widget-links { margin: 5px; @@ -128,20 +190,22 @@ div#sidebar-navigation { font-weight: lighter; } &.sidebar-navigation > li.active { - background-color: var(--base-color); + background-color: var(--color--sidebar-active); + border-left: solid 4px var(--color--sidebar-marker-active); margin-left: -4px; - //#arrow > .right-border(14px, $content-color-20, 1px, $content-color-40, -5px); - @include arrow-right-border(14px, $base-color, 1px, $base-color, -5px); + padding-left: 1px; + a { - color: var(--white); + color: var(--black); padding-left: 4px; } } &.sidebar-views > li.active { - background: var(--activity-color-40); - margin-left: -5px; - box-shadow: inset 0 0 0 1px var(--activity-color); - @include arrow-right-border(14px, $activity-color-40, 1px, $activity-color, -5px); + background-color: var(--color--sidebar-active); + border-left: solid 4px var(--color--sidebar-marker-active); + margin-left: -4px; + padding-left: 1px; + a, button { color: var(--base-color); padding-left: 5px; @@ -150,23 +214,6 @@ div#sidebar-navigation { &.sidebar-navigation > li, &.sidebar-views > li { padding-left: 5px; - - &.active { - - line-height: 2em; - &:before, &:after { - margin-left: -1px; - } - display: block; - - // Obtuse angle looks kinda ugly with borders - &:before { - border-left-width: floor(calc(14px * 2 / 3)); - } - &:after { - border-left-width: floor(calc(14px * 2 / 3 - 1px)); - } - } } } @@ -197,16 +244,15 @@ div#sidebar-navigation { padding: 0; > li { - line-height: 1.5em; margin-left: 0; - padding-left: 0; + padding-left: 2px; } .options-checkbox { background-repeat: no-repeat; - background-position: left 2px; + background-position: 2px center; display: block; - padding-left: 20px; + padding-left: 24px; &.options-checked { @include background-icon(checkbox-checked); @@ -214,13 +260,16 @@ div#sidebar-navigation { &.options-unchecked { @include background-icon(checkbox-unchecked); } + &:hover { + color: var(--color--font-primary); + } } .options-radio { background-repeat: no-repeat; - background-position: left 2px; + background-position: 2px center; display: block; - padding-left: 20px; + padding-left: 24px; &.options-checked { @include background-icon(radiobutton-checked); @@ -228,13 +277,16 @@ div#sidebar-navigation { &.options-unchecked { @include background-icon(radiobutton-unchecked); } + &:hover { + color: var(--color--font-primary); + } } } } .sidebar-widget-content { - border-top: 1px solid var(--content-color-40); overflow-wrap: break-word; - padding: 4px; + padding: 0; + margin-left: 4px; transition: all 0.5s; } diff --git a/resources/assets/stylesheets/scss/variables.scss b/resources/assets/stylesheets/scss/variables.scss index f95e7e79860ec0e9a420f33bde4ef722b0d87e9b..ca0fd9b5dad57c048c70d39ec311f68bcadbba79 100644 --- a/resources/assets/stylesheets/scss/variables.scss +++ b/resources/assets/stylesheets/scss/variables.scss @@ -206,10 +206,13 @@ $grid-gap: 0; #{"--"}color--main-navigation-background: $color--main-navigation-background; #{"--"}color--main-navigation-border: $color--main-navigation-border; + #{"--"}color--sidebar-marker-active: $color--sidebar-marker-active; #{"--"}color--sidebar-marker-focus: $color--sidebar-marker-focus; #{"--"}color--sidebar-marker-hover: $color--sidebar-marker-hover; + #{"--"}color--sidebar-active:$color--sidebar-active; #{"--"}color--sidebar-focus: $color--sidebar-focus; #{"--"}color--sidebar-hover: $color--sidebar-hover; + #{"--"}color--sidebar-divider: $color--sidebar-divider; #{"--"}color--dialog-overlay: $color--dialog-overlay; diff --git a/resources/vue/components/SidebarWidget.vue b/resources/vue/components/SidebarWidget.vue index 88c283469aa91625d40847b85c2749f6a22fd437..692f4f904b245bcf5968cd4e3643bcaab22ab72f 100644 --- a/resources/vue/components/SidebarWidget.vue +++ b/resources/vue/components/SidebarWidget.vue @@ -1,14 +1,14 @@ <template> - <div class="sidebar-widget"> + <div class="sidebar-widget" :class="{'sidebar-widget-has-extra' : this.$slots.actions }"> <div class="sidebar-widget-header" v-if="title"> {{ title }} - <div class="actions" v-if="this.$slots.actions"> - <slot name="actions"></slot> - </div> </div> <div class="sidebar-widget-content" ref="scrollable"> <slot name="content" /> </div> + <div class="sidebar-widget-extra" v-if="this.$slots.actions"> + <slot name="actions"></slot> + </div> </div> </template>