From 43187201a7d9ef6fdcef43dbf7ad649b5cd3f261 Mon Sep 17 00:00:00 2001
From: Elmar Ludwig <elmar.ludwig@uni-osnabrueck.de>
Date: Mon, 15 May 2023 06:51:44 +0000
Subject: [PATCH] add CSS for .drag-handle and use it for all handles, fixes
 #2469

Closes #2469

Merge request studip/studip!1794
---
 app/views/admin/statusgroups/_members.php     |  2 +-
 app/views/course/forum/area/add.php           |  8 +----
 app/views/course/plus/sorttools.php           |  2 +-
 app/views/course/statusgroups/_group.php      |  2 +-
 app/views/fachabschluss/faecher/fach.php      |  2 +-
 app/views/global_search/settings.php          |  2 +-
 app/views/module/module/modul.php             |  4 +--
 app/views/module/module/modulteil.php         |  2 +-
 app/views/questionnaire/edit.php              |  4 +--
 app/views/resources/search/rooms.php          | 12 ++-----
 app/views/shared/form_dokumente.php           |  2 +-
 .../studiengaenge/studiengang.php             |  2 +-
 .../assets/javascripts/bootstrap/dates.js     |  4 +--
 .../javascripts/bootstrap/statusgroups.js     |  4 +--
 resources/assets/javascripts/lib/forum.js     |  2 +-
 .../assets/javascripts/lib/statusgroups.js    |  2 +-
 resources/assets/javascripts/mvv.js           |  4 +--
 resources/assets/stylesheets/less/tables.less |  4 ---
 .../assets/stylesheets/scss/courseware.scss   | 23 +++++--------
 resources/assets/stylesheets/scss/dates.scss  |  6 ++--
 .../assets/stylesheets/scss/drag-handle.scss  | 19 +++++++++++
 resources/assets/stylesheets/scss/forum.scss  | 34 ++-----------------
 resources/assets/stylesheets/scss/mvv.scss    | 13 ++-----
 .../stylesheets/scss/questionnaire.scss       | 13 ++-----
 .../assets/stylesheets/scss/resources.scss    |  4 ---
 .../assets/stylesheets/scss/statusgroups.scss |  8 -----
 resources/assets/stylesheets/studip.scss      |  1 +
 .../components/questionnaires/InputArray.vue  |  2 +-
 .../components/questionnaires/LikertEdit.vue  |  2 +-
 .../questionnaires/RangescaleEdit.vue         |  2 +-
 30 files changed, 62 insertions(+), 129 deletions(-)
 create mode 100644 resources/assets/stylesheets/scss/drag-handle.scss

diff --git a/app/views/admin/statusgroups/_members.php b/app/views/admin/statusgroups/_members.php
index 2150e4e88b0..4e64b9e1956 100644
--- a/app/views/admin/statusgroups/_members.php
+++ b/app/views/admin/statusgroups/_members.php
@@ -7,7 +7,7 @@
 ?>
 <? foreach ($group->members as $user): ?>
     <tr data-userid="<?= $user->user_id ?>">
-        <td <?= ($tutor ? 'class="dragHandle"' : '') ?>></td>
+        <td <?= ($tutor ? 'class="drag-handle"' : '') ?>></td>
         <td><?= $user->position + 1 ?></td>
         <td><?= $user->avatar() ?></td>
         <td><?= htmlReady($user->name()) ?></td>
diff --git a/app/views/course/forum/area/add.php b/app/views/course/forum/area/add.php
index eac15459a4a..881c1220fd0 100644
--- a/app/views/course/forum/area/add.php
+++ b/app/views/course/forum/area/add.php
@@ -1,10 +1,5 @@
 <tr data-area-id="<?= $entry['topic_id'] ?>" <?= (ForumPerm::has('sort_area', $seminar_id)) ? 'class="movable"' : '' ?>>
-    <td class="icon">
-    <? if (ForumPerm::has('sort_area', $seminar_id)) : ?>
-        <?= Assets::img('anfasser_48.png', ['class' => 'handle js']) ?>
-    <? endif ?>
-
-        <a href="<?= $controller->link_for("course/forum/index/index/{$entry['topic_id']}#{$entry['topic_id']}") ?>">
+    <td class="icon <?= ForumPerm::has('sort_area', $seminar_id) ? 'drag-handle' : '' ?>">
         <? if ($entry['chdate'] >= $visitdate && $entry['user_id'] !== $GLOBALS['user']->id): ?>
             <?= Icon::create('forum', Icon::ROLE_ATTENTION)->asImg([
                 'title' => _('Dieser Eintrag ist neu!'),
@@ -15,7 +10,6 @@
                 'title' => ForumHelpers::getVisitText($num_postings, $entry['topic_id'], $constraint['depth']),
             ]) ?>
         <? endif ?>
-        </a>
     </td>
     <td class="areaentry">
         <div style="position: relative;<?= Request::get('edit_area') == $entry['topic_id'] ? 'height: auto;' : '' ?>">
diff --git a/app/views/course/plus/sorttools.php b/app/views/course/plus/sorttools.php
index 9d2044b2210..153e7c9f8ff 100644
--- a/app/views/course/plus/sorttools.php
+++ b/app/views/course/plus/sorttools.php
@@ -4,7 +4,7 @@
     <?php if (!$tool->getStudipModule()) continue; ?>
         <article class="draggable" id="plugin_<?= $tool->plugin_id ?>">
             <header>
-                <span class="sg-sortable-handle"></span>
+                <span class="drag-handle"></span>
                 <h1><?= htmlready($tool->getDisplayName()) ?></h1>
             </header>
         </article>
diff --git a/app/views/course/statusgroups/_group.php b/app/views/course/statusgroups/_group.php
index e9230658a56..8cc8a5a4244 100644
--- a/app/views/course/statusgroups/_group.php
+++ b/app/views/course/statusgroups/_group.php
@@ -1,7 +1,7 @@
 <article class="<?= ContentBoxHelper::classes($group->id) ?> <? if ($group->id != 'nogroup' && $is_tutor && !$is_locked) echo 'draggable'; ?> <?= $open_group ? 'open' : '' ?>" id="<?= $group->id ?>">
     <header>
         <? if ($group->id != 'nogroup' && $is_tutor && !$is_locked) : ?>
-            <span class="sg-sortable-handle"></span>
+            <span class="drag-handle"></span>
         <? endif ?>
         <h1>
             <?php if ($group->id != 'nogroup' && $is_tutor && !$is_locked) : ?>
diff --git a/app/views/fachabschluss/faecher/fach.php b/app/views/fachabschluss/faecher/fach.php
index 80b1e45b26b..b1a5cc6f5b6 100644
--- a/app/views/fachabschluss/faecher/fach.php
+++ b/app/views/fachabschluss/faecher/fach.php
@@ -59,7 +59,7 @@
                 <li class="mvv-item-list-placeholder"><?= _('Es wurde noch keine verantwortliche Einrichtung angegeben.') ?></li>
             <? endif; ?>
             <? foreach ($fach->getFachbereiche() as $fachbereich) : ?>
-                <li id="fachbereiche_<?= $fachbereich->getId() ?>" class="sort_items">
+                <li id="fachbereiche_<?= $fachbereich->getId() ?>" class="drag-handle">
                     <div class="mvv-item-list-text">
                         <? if ($fachbereich) : ?>
                             <?= htmlReady($fachbereich->getDisplayName()) ?>
diff --git a/app/views/global_search/settings.php b/app/views/global_search/settings.php
index bf1764dfb6a..a0bb852a997 100644
--- a/app/views/global_search/settings.php
+++ b/app/views/global_search/settings.php
@@ -47,7 +47,7 @@
             <tbody>
                 <?php foreach ($modules as $module) : ?>
                     <tr>
-                        <td class="dragHandle"></td>
+                        <td class="drag-handle"></td>
                         <td>
                             <?php $resourcesInactive = (get_class($module) == 'GlobalSearchResources' ||
                                 get_class($module) == 'GlobalSearchRoomBookings') && !Config::get()->RESOURCES_ENABLE ?>
diff --git a/app/views/module/module/modul.php b/app/views/module/module/modul.php
index a6d534fec4e..c75abdacf5a 100644
--- a/app/views/module/module/modul.php
+++ b/app/views/module/module/modul.php
@@ -320,7 +320,7 @@ if ($GLOBALS['MVV_MODUL']['SPRACHE']['default'] != $display_language) {
                     <?= _('Geben Sie gegebenenfalls beteiligte Einrichtungen an.') ?>
                 </li>
                 <? foreach ($modul->assigned_institutes as $assigned_institute) : ?>
-                    <li id="institut_<?= $assigned_institute->institut_id ?>" class="sort_items">
+                    <li id="institut_<?= $assigned_institute->institut_id ?>" class="drag-handle">
                         <div class="mvv-item-list-text">
                             <? if ($assigned_institute->institute) : ?>
                                 <?= htmlReady($assigned_institute->institute->Name) ?>
@@ -371,7 +371,7 @@ if ($GLOBALS['MVV_MODUL']['SPRACHE']['default'] != $display_language) {
                 </li>
                 <? endif; ?>
                 <? foreach ($modul->languages as $assigned_language) : ?>
-                <li id="language_<?= $assigned_language->lang ?>" class="sort_items">
+                <li id="language_<?= $assigned_language->lang ?>" class="drag-handle">
                     <div class="mvv-item-list-text"><?= htmlReady($assigned_language->getDisplayName()) ?></div>
                     <div class="mvv-item-list-buttons">
                         <a href="#" class="mvv-item-remove"><?= Icon::create('trash', 'clickable', array('title' => _('Sprache entfernen')))->asImg(); ?></a>
diff --git a/app/views/module/module/modulteil.php b/app/views/module/module/modulteil.php
index d7e75f4a77c..a89ca674a63 100644
--- a/app/views/module/module/modulteil.php
+++ b/app/views/module/module/modulteil.php
@@ -139,7 +139,7 @@ if ($GLOBALS['MVV_MODULTEIL']['SPRACHE']['default'] != $display_language) {
                     </li>
                 <? endif; ?>
                 <? foreach ($modulteil->languages as $assigned_language) : ?>
-                    <li id="language_<?= $assigned_language->lang ?>" class="sort_items">
+                    <li id="language_<?= $assigned_language->lang ?>" class="drag-handle">
                         <div class="mvv-item-list-text"><?= htmlReady($assigned_language->getDisplayName()) ?></div>
                         <div class="mvv-item-list-buttons">
                             <a href="#" class="mvv-item-remove">
diff --git a/app/views/questionnaire/edit.php b/app/views/questionnaire/edit.php
index 9b18650811a..d040b756d7a 100644
--- a/app/views/questionnaire/edit.php
+++ b/app/views/questionnaire/edit.php
@@ -150,7 +150,7 @@ foreach ($questionnaire->questions as $question) {
                 <span class="icon"><studip-icon shape="evaluation" role="clickable" size="30" alt=""></studip-icon></span>
                 <?= _('Einstellungen') ?>
             </a>
-            <draggable v-if="questions.length > 0" v-model="questions" handle=".handle" group="questions" class="questions_container questions">
+            <draggable v-if="questions.length > 0" v-model="questions" handle=".drag-handle" group="questions" class="questions_container questions">
                 <div v-for="question in questions"
                      :key="question.id"
                      @mouseenter="hoverTab = question.id"
@@ -158,7 +158,7 @@ foreach ($questionnaire->questions as $question) {
                      :class="(activeTab === question.id || activeTab === 'meta_' + question.id ? 'active' : '') + (hoverTab === question.id ? ' hovered' : '')">
                     <a href="#"
                        @click.prevent="switchTab(question.id)">
-                        <span class="handle"></span>
+                        <span class="drag-handle"></span>
                         <span class="icon type">
                             <studip-icon :shape="questiontypes[question.questiontype].icon" role="clickable" size="30" alt=""></studip-icon>
                         </span>
diff --git a/app/views/resources/search/rooms.php b/app/views/resources/search/rooms.php
index 2d24b249176..d35f0304edb 100644
--- a/app/views/resources/search/rooms.php
+++ b/app/views/resources/search/rooms.php
@@ -16,16 +16,8 @@
         <tbody>
             <? foreach ($rooms as $room): ?>
                 <tr>
-                    <td>
-                        <?= Assets::img(
-                            'anfasser_24.png',
-                            [
-                                'class'           => 'clipboard-draggable-item',
-                                'data-id'         => $room->id,
-                                'data-range_type' => 'Room',
-                                'data-name'       => $room->name
-                            ]
-                        ) ?>
+                    <td class="drag-handle clipboard-draggable-item"
+                        data-id="<?= $room->id ?>" data-range_type="Room" data-name="<?= htmlReady($room->name) ?>">
                     </td>
                     <td>
                         <? if ($room->bookingPlanVisibleForUser($current_user)): ?>
diff --git a/app/views/shared/form_dokumente.php b/app/views/shared/form_dokumente.php
index 9cbdebe6071..35275cd51b7 100644
--- a/app/views/shared/form_dokumente.php
+++ b/app/views/shared/form_dokumente.php
@@ -39,7 +39,7 @@
         <? endif; ?>
         <? foreach ($dokumente as $dokument) : ?>
             <? if ($perm_dokumente) : ?>
-                <li id="dokumente_<?= $dokument->dokument_id ?>" class="sort_items">
+                <li id="dokumente_<?= $dokument->dokument_id ?>" class="drag-handle">
                     <div style="flex: 9;">
                         <?= htmlReady($dokument->document->isI18nField('name')
                             ? $dokument->document->name->original()
diff --git a/app/views/studiengaenge/studiengaenge/studiengang.php b/app/views/studiengaenge/studiengaenge/studiengang.php
index 29a6f2b78c3..b900e4311ee 100644
--- a/app/views/studiengaenge/studiengaenge/studiengang.php
+++ b/app/views/studiengaenge/studiengaenge/studiengang.php
@@ -239,7 +239,7 @@ use Studip\Button, Studip\LinkButton;
                     <?= _('Geben Sie die Lehrsprachen an.') ?>
                 </li>
                 <? foreach ($studiengang->languages as $assigned_language) : ?>
-                <li id="language_<?= $assigned_language->lang ?>" class="sort_items">
+                <li id="language_<?= $assigned_language->lang ?>" class="drag-handle">
                     <div class="mvv-item-list-text"><?= htmlReady($assigned_language->getDisplayName()) ?></div>
                     <div class="mvv-item-list-buttons">
                         <a href="#" class="mvv-item-remove"><?= Icon::create('trash', 'clickable', array('title' => _('Sprache entfernen')))->asImg() ?></a>
diff --git a/resources/assets/javascripts/bootstrap/dates.js b/resources/assets/javascripts/bootstrap/dates.js
index c6cc77e5780..08bc06cc20c 100644
--- a/resources/assets/javascripts/bootstrap/dates.js
+++ b/resources/assets/javascripts/bootstrap/dates.js
@@ -9,7 +9,7 @@ function createDraggable() {
 
         $(this)
             .children()
-            .addClass('draggable-topic-handle');
+            .addClass('drag-handle');
 
         $(this)
             .closest('li')
@@ -19,7 +19,7 @@ function createDraggable() {
             .draggable({
                 axis: 'y',
                 containment: $(this).closest('tbody'),
-                handle: '.draggable-topic-handle',
+                handle: '.drag-handle',
                 revert: true
             });
     });
diff --git a/resources/assets/javascripts/bootstrap/statusgroups.js b/resources/assets/javascripts/bootstrap/statusgroups.js
index 3ec865b6f72..30348089944 100644
--- a/resources/assets/javascripts/bootstrap/statusgroups.js
+++ b/resources/assets/javascripts/bootstrap/statusgroups.js
@@ -23,9 +23,7 @@ STUDIP.ready(function() {
         }
     });
 
-    var handle = '.sg-sortable-handle';
     // Check for touch device
-    handle = '.sg-sortable-handle';
     if (window.matchMedia('(hover: none)').matches) {
         $('.course-statusgroups[data-sortable]').addClass('by-touch');
     }
@@ -36,7 +34,7 @@ STUDIP.ready(function() {
             axis: 'y',
             containment: 'parent',
             forcePlaceholderSize: true,
-            handle: handle,
+            handle: '.drag-handle',
             items: '> .draggable',
             placeholder: 'sortable-placeholder',
             start: function(event, ui) {
diff --git a/resources/assets/javascripts/lib/forum.js b/resources/assets/javascripts/lib/forum.js
index 8dcc076f93c..fb2e4c714f5 100644
--- a/resources/assets/javascripts/lib/forum.js
+++ b/resources/assets/javascripts/lib/forum.js
@@ -45,7 +45,7 @@ const Forum = {
             axis: 'y',
             items: ">*:not(.sort-disabled)",
             connectWith: 'tbody.sortable',
-            handle: 'img.handle',
+            handle: '.drag-handle',
             helper: function (e, ui) {
                 ui.children().each(function () {
                     jQuery(this).width(jQuery(this).width());
diff --git a/resources/assets/javascripts/lib/statusgroups.js b/resources/assets/javascripts/lib/statusgroups.js
index ea6b6bd1814..917396e33de 100644
--- a/resources/assets/javascripts/lib/statusgroups.js
+++ b/resources/assets/javascripts/lib/statusgroups.js
@@ -3,7 +3,7 @@ const Statusgroups = {
     apply: function() {
         $('.movable tbody').sortable({
             axis: 'y',
-            handle: '.dragHandle',
+            handle: '.drag-handle',
             helper: function(event, ui) {
                 ui.children().each(function() {
                     $(this).width($(this).width());
diff --git a/resources/assets/javascripts/mvv.js b/resources/assets/javascripts/mvv.js
index 7233df89634..5caba3f8c21 100644
--- a/resources/assets/javascripts/mvv.js
+++ b/resources/assets/javascripts/mvv.js
@@ -364,7 +364,7 @@ STUDIP.MVV.Sort = {
     },
     init: function(target) {
         target.sortable({
-            items: '> .sort_items',
+            items: '> .drag-handle',
             cursor: 'move',
             containment: 'parent',
             axis: 'y',
@@ -450,7 +450,7 @@ STUDIP.MVV.Content = {
             jQuery('<div class="mvv-item-list-text"/>')
                 .text(item_name).appendTo(item);
             if (target.hasClass('sortable')) {
-                item.addClass('sort_items');
+                item.addClass('drag-handle');
             }
             target.children('.mvv-item-list-placeholder').hide();
             if (target.hasClass('mvv-assign-single')) {
diff --git a/resources/assets/stylesheets/less/tables.less b/resources/assets/stylesheets/less/tables.less
index 6eab679e5cc..c7b1f95c262 100644
--- a/resources/assets/stylesheets/less/tables.less
+++ b/resources/assets/stylesheets/less/tables.less
@@ -433,10 +433,6 @@ table.default {
                 border-bottom: 1px solid @table-header-color;
                 transition: background-color 0.3s;
             }
-            > td.dragHandle {
-                background: #ffffff url("@{image-path}/anfasser_24.png") center no-repeat;
-                cursor: move;
-            }
             &.dragover > td {
                 background-color: @yellow-20;
             }
diff --git a/resources/assets/stylesheets/scss/courseware.scss b/resources/assets/stylesheets/scss/courseware.scss
index 7de515e0140..8a91effb369 100644
--- a/resources/assets/stylesheets/scss/courseware.scss
+++ b/resources/assets/stylesheets/scss/courseware.scss
@@ -1250,14 +1250,9 @@ label[for="cw-keypoint-color"] {
  * * * * * * * */
 
 .cw-sortable-handle {
+    @extend .drag-handle;
     display: inline-block;
-    cursor: grab;
-    background-image: url("#{$image-path}/anfasser_24.png");
-    background-repeat: no-repeat;
-    width: 7px;
     height: 24px;
-    padding-right: 4px;
-    vertical-align: middle;
     &.cw-sortable-handle-dragging {
         cursor: grabbing;
     }
@@ -1266,20 +1261,20 @@ label[for="cw-keypoint-color"] {
 .cw-block-item-sortable {
     .cw-sortable-handle {
         position: relative;
-        left: 12px;
+        left: 4px;
     }
     .cw-block {
-        margin-top: -32px;
+        margin-top: -38px;
     }
 }
 
 .cw-container-item-sortable {
     .cw-sortable-handle {
         position: relative;
-        left: 12px;
+        left: 4px;
     }
     .cw-container {
-        margin-top: -32px;
+        margin-top: -38px;
     }
 }
 
@@ -1335,9 +1330,6 @@ label[for="cw-keypoint-color"] {
                 > .cw-tree-item-wrapper {
                     border-bottom: solid thin $content-color-40;
                     display: block;
-                    > .cw-sortable-handle {
-                        margin-bottom: 4px;
-                    }
                     > a.cw-tree-item-link {
                         display: block;
                         font-size: 18px;
@@ -1362,7 +1354,7 @@ label[for="cw-keypoint-color"] {
                                 padding-left: 4px;
                                 font-size: 16px;
                                 &.cw-tree-item-link-edit {
-                                    width: calc(100% - 19px);
+                                    width: calc(100% - 20px);
                                 }
                             }
                         }
@@ -1409,6 +1401,9 @@ label[for="cw-keypoint-color"] {
         }
     }
 
+    .cw-sortable-handle {
+        vertical-align: middle;
+    }
     .cw-tree-item-link {
         &:hover {
             background-color: $light-gray-color-20;
diff --git a/resources/assets/stylesheets/scss/dates.scss b/resources/assets/stylesheets/scss/dates.scss
index 30e9978beff..cf89cda8dd3 100644
--- a/resources/assets/stylesheets/scss/dates.scss
+++ b/resources/assets/stylesheets/scss/dates.scss
@@ -23,10 +23,8 @@ table.dates {
             background-color: $activity-color-80;
         }
     }
-    .draggable-topic-handle {
-        cursor: move;
-        background: transparent url("#{$image-path}/anfasser_24.png") 3px center no-repeat;
-        padding-left: 12px;
+    .drag-handle {
+        background-size: unset;
     }
     .ui-draggable-dragging {
         img.icon-shape-trash {
diff --git a/resources/assets/stylesheets/scss/drag-handle.scss b/resources/assets/stylesheets/scss/drag-handle.scss
new file mode 100644
index 00000000000..30925bc8646
--- /dev/null
+++ b/resources/assets/stylesheets/scss/drag-handle.scss
@@ -0,0 +1,19 @@
+.drag-handle {
+    background-image: url("#{$image-path}/grabber_grey.svg");
+    background-position: 2px center;
+    background-repeat: no-repeat;
+    background-size: auto 24px;
+    cursor: move;
+    padding-left: 12px;
+
+    &:hover {
+        background-image: url("#{$image-path}/grabber_black.svg");
+    }
+    &.darkbackground:hover {
+        background-image: url("#{$image-path}/grabber_white.svg");
+    }
+}
+
+table.default td.drag-handle {
+    padding-left: 14px;
+}
diff --git a/resources/assets/stylesheets/scss/forum.scss b/resources/assets/stylesheets/scss/forum.scss
index 0638330c103..583a7fbe3a9 100644
--- a/resources/assets/stylesheets/scss/forum.scss
+++ b/resources/assets/stylesheets/scss/forum.scss
@@ -36,16 +36,6 @@ $shadow: 1px 1px 3px rgba(0, 0, 0, 0.2);
     box-shadow: $shadow
 }
 
-html.no-js #forum {
-    .js {
-        display: none;
-    }
-
-    .handle {
-        cursor: default;
-    }
-}
-
 #forum {
     img.button, input[type=image] {
         vertical-align: middle;
@@ -143,24 +133,8 @@ html.no-js #forum {
         }
     }
 
-    .icon {
-        padding: 0;
-        margin: 0pt;
-        width: 30px;
-        height: 50px;
-        white-space: nowrap;
-        text-align: center;
-
-        * {
-            vertical-align: middle;
-        }
-    }
-
-    .icon_thread {
-        padding: 0pt;
-        margin: 0pt;
-        width: 40px;
-        height: 30px;
+    .icon img {
+        vertical-align: middle;
     }
 
     span.areaname {
@@ -288,10 +262,6 @@ html.no-js #forum {
         height: 20em;
     }
 
-    .handle.ui-sortable-handle {
-        cursor: move;
-    }
-
     .editor_toolbar {
         width: 100%;
     }
diff --git a/resources/assets/stylesheets/scss/mvv.scss b/resources/assets/stylesheets/scss/mvv.scss
index a6e41251da9..4be1580ffec 100644
--- a/resources/assets/stylesheets/scss/mvv.scss
+++ b/resources/assets/stylesheets/scss/mvv.scss
@@ -148,9 +148,7 @@ table {
                 &.empty {
                     padding-left: 30px;
                 }
-                background: $white url("#{$image-path}/anfasser_24.png") no-repeat left center;
-                cursor: move;
-                padding-left: 10px;
+                @extend .drag-handle;
             }
         }
 
@@ -318,18 +316,11 @@ ul {
         li {
             border-bottom: solid $dark-gray-color-45 1px;
             padding-top: 5px;
-            padding-left: 5px;
+            padding-left: 12px;
             margin-bottom: 5px;
             margin-left: 0;
             display: flex;
             flex-wrap: wrap;
-
-            &.sort_items {
-                background: $white url("#{$image-path}/anfasser_24.png") no-repeat left center;
-                cursor: move;
-                padding-left: 10px;
-            }
-
         }
 
         &.ui-autocomplete {
diff --git a/resources/assets/stylesheets/scss/questionnaire.scss b/resources/assets/stylesheets/scss/questionnaire.scss
index 94239bcbcae..15aa062c263 100644
--- a/resources/assets/stylesheets/scss/questionnaire.scss
+++ b/resources/assets/stylesheets/scss/questionnaire.scss
@@ -149,18 +149,9 @@ $width: 270px;
                 justify-items: center;
             }
         }
-        .handle {
+        .drag-handle {
             display: inline-block;
-            width: 8px;
-            height: 27px;
-            background-image: url("#{$image-path}/grabber_grey.svg");
-            background-size: 100% auto;
-            background-position: center center;
-            background-repeat: no-repeat;
-            cursor: move;
-            &:hover {
-                background-image: url("#{$image-path}/grabber_black.svg");
-            }
+            height: 24px;
         }
     }
 
diff --git a/resources/assets/stylesheets/scss/resources.scss b/resources/assets/stylesheets/scss/resources.scss
index 628d37d7df3..95d7217655c 100644
--- a/resources/assets/stylesheets/scss/resources.scss
+++ b/resources/assets/stylesheets/scss/resources.scss
@@ -205,10 +205,6 @@ ul.resource-tree {
     }
 }
 
-.clipboard-draggable-item {
-    cursor: move;
-}
-
 .room-clipboard-special-actions {
     margin-top: 0.25em;
     margin-left: 0.25em;
diff --git a/resources/assets/stylesheets/scss/statusgroups.scss b/resources/assets/stylesheets/scss/statusgroups.scss
index 7e3776b744f..c49bea6a45c 100644
--- a/resources/assets/stylesheets/scss/statusgroups.scss
+++ b/resources/assets/stylesheets/scss/statusgroups.scss
@@ -76,13 +76,5 @@ section.course-statusgroups {
         article.ui-sortable-placeholder {
             border-style: dotted;
         }
-
-        .sg-sortable-handle {
-            cursor: move;
-            background-image: url("#{$image-path}/anfasser_24.png");
-            background-position: 3px center;
-            background-repeat: no-repeat;
-            width: 12px;
-        }
     }
 }
diff --git a/resources/assets/stylesheets/studip.scss b/resources/assets/stylesheets/studip.scss
index 5a462db2742..e47024bd988 100644
--- a/resources/assets/stylesheets/studip.scss
+++ b/resources/assets/stylesheets/studip.scss
@@ -39,6 +39,7 @@
 @import "scss/dashboard";
 @import "scss/dialog";
 @import "scss/documents";
+@import "scss/drag-handle";
 @import "scss/enrolment";
 @import "scss/evaluation";
 @import "scss/files";
diff --git a/resources/vue/components/questionnaires/InputArray.vue b/resources/vue/components/questionnaires/InputArray.vue
index 7d1f4e61b48..4295e4cb6c4 100644
--- a/resources/vue/components/questionnaires/InputArray.vue
+++ b/resources/vue/components/questionnaires/InputArray.vue
@@ -9,7 +9,7 @@
                    :ref="'draghandle_' + index"
                    :title="$gettextInterpolate('Sortierelement für Option %{option}. Drücken Sie die Tasten Pfeil-nach-oben oder Pfeil-nach-unten, um dieses Element in der Liste zu verschieben.', {option: option})"
                    @keydown="keyHandler($event, index)">
-                    <span class="handle"></span>
+                    <span class="drag-handle"></span>
                 </a>
                 <input type="text"
                        :placeholder="$gettext('Option')"
diff --git a/resources/vue/components/questionnaires/LikertEdit.vue b/resources/vue/components/questionnaires/LikertEdit.vue
index 88795463dfe..57228b91486 100644
--- a/resources/vue/components/questionnaires/LikertEdit.vue
+++ b/resources/vue/components/questionnaires/LikertEdit.vue
@@ -25,7 +25,7 @@
                            :title="$gettextInterpolate('Sortierelement für Aussage %{statement}. Drücken Sie die Tasten Pfeil-nach-oben oder Pfeil-nach-unten, um dieses Element in der Liste zu verschieben.', {statement: statement})"
                            @keydown="keyHandler($event, index)"
                            :ref="'draghandle_' + index">
-                            <span class="handle"></span>
+                            <span class="drag-handle"></span>
                         </a>
                     </td>
                     <td>
diff --git a/resources/vue/components/questionnaires/RangescaleEdit.vue b/resources/vue/components/questionnaires/RangescaleEdit.vue
index e1e26bf1040..2d1450fe770 100644
--- a/resources/vue/components/questionnaires/RangescaleEdit.vue
+++ b/resources/vue/components/questionnaires/RangescaleEdit.vue
@@ -28,7 +28,7 @@
                            :title="$gettextInterpolate('Sortierelement für Aussage %{statement}. Drücken Sie die Tasten Pfeil-nach-oben oder Pfeil-nach-unten, um dieses Element in der Liste zu verschieben.', {statement: statement})"
                            @keydown="keyHandler($event, index)"
                            :ref="'draghandle_' + index">
-                            <span class="handle"></span>
+                            <span class="drag-handle"></span>
                         </a>
                     </td>
                     <td>
-- 
GitLab