From 7fd6194d96127672708b07dba63feffe9f9ea5c2 Mon Sep 17 00:00:00 2001
From: Thilo Wischmeyer <thwischm@gmail.com>
Date: Mon, 16 Nov 2020 23:43:43 +0100
Subject: [PATCH] New slot syntax for activators

The upgrade guide says "We understand this is considerably more verbose." They
weren't kidding.
---
 frontend/src/components/BaseLayout.vue        | 41 +++++++------
 frontend/src/components/FreeLocksButton.vue   | 22 +++----
 frontend/src/components/InstanceActions.vue   | 18 +++---
 frontend/src/components/export/DataExport.vue | 13 ++--
 .../src/components/export/ExportDialog.vue    | 60 ++++++++++---------
 .../feedback_labels/FeedbackLabel.vue         | 18 +++---
 .../feedback_list/FeedbackSearchOptions.vue   | 16 ++---
 .../components/student_list/StudentList.vue   | 28 +++++----
 .../student_list/StudentListMenu.vue          | 14 +++--
 .../student_list/StudentListReverseMapper.vue | 16 ++---
 .../submission_notes/base/FeedbackComment.vue | 28 +++++----
 .../AnnotatedSubmissionBottomToolbar.vue      | 59 ++++++++++--------
 .../AnnotatedSubmissionTopToolbar.vue         | 58 ++++++++++--------
 .../src/components/tutor_list/TutorList.vue   |  7 ++-
 14 files changed, 221 insertions(+), 177 deletions(-)

diff --git a/frontend/src/components/BaseLayout.vue b/frontend/src/components/BaseLayout.vue
index 484db939..062d34f7 100644
--- a/frontend/src/components/BaseLayout.vue
+++ b/frontend/src/components/BaseLayout.vue
@@ -41,13 +41,16 @@
           top
           style="min-width: 150px"
         >
-          <v-switch
-            slot="activator"
-            v-model="darkMode"
-            class="dark-mode-switch"
-            :disabled="!darkModeUnlocked"
-            :label="mini ? '' : 'dark mode'"
-          />
+          <template #activator="{ on }">
+            <div v-on="on">
+              <v-switch
+                v-model="darkMode"
+                class="dark-mode-switch"
+                :disabled="!darkModeUnlocked"
+                :label="mini ? '' : 'dark mode'"
+              />
+            </div>
+          </template>
           <span v-if="darkModeUnlocked">Experimental: styling issues may occur!</span>
           <span v-else>You need to visit the feedback site below first!</span>
         </v-tooltip>
@@ -93,17 +96,19 @@
           offset-y
           left
         >
-          <v-btn
-            id="user-options"
-            slot="activator"
-            text
-            style="text-transform: none"
-          >
-            <v-icon left>
-              account_circle
-            </v-icon>
-            {{ username }} ({{ userRole }})<v-icon>arrow_drop_down</v-icon>
-          </v-btn>
+          <template #activator="{ on }">
+            <v-btn
+              id="user-options"
+              text
+              style="text-transform: none"
+              v-on="on"
+            >
+              <v-icon left>
+                account_circle
+              </v-icon>
+              {{ username }} ({{ userRole }})<v-icon>arrow_drop_down</v-icon>
+            </v-btn>
+          </template>
           <user-options />
         </v-menu>
       </v-toolbar-items>
diff --git a/frontend/src/components/FreeLocksButton.vue b/frontend/src/components/FreeLocksButton.vue
index 4909358d..df5bb258 100644
--- a/frontend/src/components/FreeLocksButton.vue
+++ b/frontend/src/components/FreeLocksButton.vue
@@ -1,15 +1,17 @@
 <template>
   <v-tooltip bottom>
-    <v-btn
-      slot="activator"
-      text
-      icon
-      :disabled="!activeAssignmentsExist"
-      :loading="loading"
-      @click="freeLocks"
-    >
-      <v-icon>vpn_key</v-icon>
-    </v-btn>
+    <template #activator="{ on }">
+      <v-btn
+        text
+        icon
+        :disabled="!activeAssignmentsExist"
+        :loading="loading"
+        @click="freeLocks"
+        v-on="on"
+      >
+        <v-icon>vpn_key</v-icon>
+      </v-btn>
+    </template>
     <span>Free all locked Submissions</span>
   </v-tooltip>
 </template>
diff --git a/frontend/src/components/InstanceActions.vue b/frontend/src/components/InstanceActions.vue
index 2d8f1958..f80f8990 100644
--- a/frontend/src/components/InstanceActions.vue
+++ b/frontend/src/components/InstanceActions.vue
@@ -8,14 +8,16 @@
         :key="i"
         bottom
       >
-        <v-btn
-          slot="activator"
-          text
-          icon
-          @click="a.action"
-        >
-          <v-icon>{{ a.icon }}</v-icon>
-        </v-btn>
+        <template #activator="{ on }">
+          <v-btn
+            text
+            icon
+            @click="a.action"
+            v-on="on"
+          >
+            <v-icon>{{ a.icon }}</v-icon>
+          </v-btn>
+        </template>
         {{ a.text }}
       </v-tooltip>
     </template>
diff --git a/frontend/src/components/export/DataExport.vue b/frontend/src/components/export/DataExport.vue
index d733c96a..4cdd54ff 100644
--- a/frontend/src/components/export/DataExport.vue
+++ b/frontend/src/components/export/DataExport.vue
@@ -30,11 +30,14 @@
         <v-row>
           <v-col cols="4">
             <v-tooltip top>
-              <v-checkbox
-                slot="activator"
-                v-model="setPasswords"
-                label="Set passwords"
-              />
+              <template #activator="{ on }">
+                <div v-on="on">
+                  <v-checkbox
+                    v-model="setPasswords"
+                    label="Set passwords"
+                  />
+                </div>
+              </template>
               <span>Setting this will cause all student passwords
                 to be reset upon export. The new passwords will be contained in the
                 export file.
diff --git a/frontend/src/components/export/ExportDialog.vue b/frontend/src/components/export/ExportDialog.vue
index d2e66c5d..7cba0ceb 100644
--- a/frontend/src/components/export/ExportDialog.vue
+++ b/frontend/src/components/export/ExportDialog.vue
@@ -1,34 +1,36 @@
 <template>
   <v-menu offset-y>
-    <v-tooltip
-      slot="activator"
-      bottom
-    >
-      <v-btn
-        id="export-btn"
-        slot="activator"
-        :icon="!corrected"
-        :text="!corrected"
-        :color="corrected ? 'success' : undefined"
-        style="text-transform: none;"
-      >
-        <v-icon :left="corrected">
-          file_download
-        </v-icon>
-        <span v-if="corrected">
-          Export
-        </span>
-      </v-btn>
-      Export
-      <span
-        v-if="corrected"
-        id="corrected-tooltip"
-      >(All submissions have been corrected!)</span>
-      <span
-        v-else
-        id="uncorrected-tooltip"
-      >(UNCORRECTED submissions left! Export will be incomplete.)</span>
-    </v-tooltip>
+    <template #activator="{ on: menu }">
+      <v-tooltip left>
+        <template #activator="{ on: tooltip }">
+          <v-btn
+            id="export-btn"
+            slot="activator"
+            :icon="!corrected"
+            :text="!corrected"
+            :color="corrected ? 'success' : undefined"
+            style="text-transform: none;"
+            v-on="{ ...tooltip, ...menu }"
+          >
+            <v-icon :left="corrected">
+              file_download
+            </v-icon>
+            <span v-if="corrected">
+              Export
+            </span>
+          </v-btn>
+        </template>
+        Export
+        <span
+          v-if="corrected"
+          id="corrected-tooltip"
+        >(All submissions have been corrected!)</span>
+        <span
+          v-else
+          id="uncorrected-tooltip"
+        >(UNCORRECTED submissions left! Export will be incomplete.)</span>
+      </v-tooltip>
+    </template>
     <v-list>
       <v-list-item
         v-for="(item, i) in menuItems"
diff --git a/frontend/src/components/feedback_labels/FeedbackLabel.vue b/frontend/src/components/feedback_labels/FeedbackLabel.vue
index 89c23dc2..23d1e472 100644
--- a/frontend/src/components/feedback_labels/FeedbackLabel.vue
+++ b/frontend/src/components/feedback_labels/FeedbackLabel.vue
@@ -1,13 +1,15 @@
 <template>
   <v-tooltip top>
-    <v-chip
-      slot="activator"
-      :close="removable"
-      :color="colour"
-      @input="onClose"
-    >
-      {{ name }}
-    </v-chip>
+    <template #activator="{ on }">
+      <v-chip
+        :close="removable"
+        :color="colour"
+        v-on="on"
+        @input="onClose"
+      >
+        {{ name }}
+      </v-chip>
+    </template>
     <span> {{ description }} </span>
   </v-tooltip>
 </template>
diff --git a/frontend/src/components/feedback_list/FeedbackSearchOptions.vue b/frontend/src/components/feedback_list/FeedbackSearchOptions.vue
index 38cc5d82..fb64db3b 100644
--- a/frontend/src/components/feedback_list/FeedbackSearchOptions.vue
+++ b/frontend/src/components/feedback_list/FeedbackSearchOptions.vue
@@ -40,13 +40,15 @@
           style="max-width: 60%"
         />
         <v-tooltip top>
-          <a
-            slot="activator"
-            href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#character-classes"
-            target="_blank"
-          >
-            <v-icon>help</v-icon>
-          </a>
+          <template #activator="{ on }">
+            <a
+              href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#character-classes"
+              target="_blank"
+              v-on="on"
+            >
+              <v-icon>help</v-icon>
+            </a>
+          </template>
           <span>Go to RegEx documentation</span>
         </v-tooltip>
       </v-row>
diff --git a/frontend/src/components/student_list/StudentList.vue b/frontend/src/components/student_list/StudentList.vue
index d0466998..7287a67b 100644
--- a/frontend/src/components/student_list/StudentList.vue
+++ b/frontend/src/components/student_list/StudentList.vue
@@ -68,19 +68,21 @@
             </v-btn>
             {{ props.item.name }}
             <v-tooltip top>
-              <template slot="activator">
-                <v-icon
-                  v-if="!props.item.isActive"
-                  small
-                >
-                  lock
-                </v-icon>
-                <v-icon
-                  v-else
-                  small
-                >
-                  lock_open
-                </v-icon>
+              <template #activator="{ on }">
+                <div v-on="on">
+                  <v-icon
+                    v-if="!props.item.isActive"
+                    small
+                  >
+                    lock
+                  </v-icon>
+                  <v-icon
+                    v-else
+                    small
+                  >
+                    lock_open
+                  </v-icon>
+                </div>
               </template>
               <span v-if="!props.item.isActive">Participant doesn't have access.</span>
               <span v-else>Participant has access.</span>
diff --git a/frontend/src/components/student_list/StudentListMenu.vue b/frontend/src/components/student_list/StudentListMenu.vue
index 95176ffb..e528cc98 100644
--- a/frontend/src/components/student_list/StudentListMenu.vue
+++ b/frontend/src/components/student_list/StudentListMenu.vue
@@ -5,12 +5,14 @@
     bottom
     offset-y
   >
-    <v-btn
-      slot="activator"
-      icon
-    >
-      <v-icon>menu</v-icon>
-    </v-btn>
+    <template #activator="{ on }">
+      <v-btn
+        icon
+        v-on="on"
+      >
+        <v-icon>menu</v-icon>
+      </v-btn>
+    </template>
     <v-list>
       <v-list-item
         v-for="item in items"
diff --git a/frontend/src/components/student_list/StudentListReverseMapper.vue b/frontend/src/components/student_list/StudentListReverseMapper.vue
index 941019bc..70be9ad0 100644
--- a/frontend/src/components/student_list/StudentListReverseMapper.vue
+++ b/frontend/src/components/student_list/StudentListReverseMapper.vue
@@ -8,13 +8,15 @@
       display-text="Select map file"
     />
     <v-tooltip top>
-      <v-btn
-        slot="activator"
-        icon
-        @click="readMapFileAndApply"
-      >
-        <v-icon>vpn_key</v-icon>
-      </v-btn>
+      <template #activator="{ on }">
+        <v-btn
+          icon
+          v-on="on"
+          @click="readMapFileAndApply"
+        >
+          <v-icon>vpn_key</v-icon>
+        </v-btn>
+      </template>
       <span>Apply mapping</span>
     </v-tooltip>
   </v-row>
diff --git a/frontend/src/components/submission_notes/base/FeedbackComment.vue b/frontend/src/components/submission_notes/base/FeedbackComment.vue
index ee5c53ac..4b68b06c 100644
--- a/frontend/src/components/submission_notes/base/FeedbackComment.vue
+++ b/frontend/src/components/submission_notes/base/FeedbackComment.vue
@@ -23,24 +23,28 @@
           top
           size="20px"
         >
-          <v-icon
-            slot="activator"
-            size="20px"
-          >
-            visibility
-          </v-icon>
+          <template #activator="{ on }">
+            <v-icon
+              size="20px"
+              v-on="on"
+            >
+              visibility
+            </v-icon>
+          </template>
           <span>Will be visible to student</span>
         </v-tooltip>
         <v-tooltip
           v-else
           top
         >
-          <v-icon
-            slot="activator"
-            size="20px"
-          >
-            visibility_off
-          </v-icon>
+          <template #activator="{ on }">
+            <v-icon
+              size="20px"
+              v-on="on"
+            >
+              visibility_off
+            </v-icon>
+          </template>
           <span>Won't be visible to student</span>
         </v-tooltip>
       </div>
diff --git a/frontend/src/components/submission_notes/toolbars/AnnotatedSubmissionBottomToolbar.vue b/frontend/src/components/submission_notes/toolbars/AnnotatedSubmissionBottomToolbar.vue
index 785051b6..3eecbd7e 100644
--- a/frontend/src/components/submission_notes/toolbars/AnnotatedSubmissionBottomToolbar.vue
+++ b/frontend/src/components/submission_notes/toolbars/AnnotatedSubmissionBottomToolbar.vue
@@ -47,13 +47,16 @@
         v-if="showFinalCheckbox"
         top
       >
-        <v-checkbox
-          slot="activator"
-          v-model="isFinal"
-          label="Final"
-          class="final-checkbox"
-          hide-details
-        />
+        <template #activator="{ on }">
+          <div v-on="on">
+            <v-checkbox
+              v-model="isFinal"
+              label="Final"
+              class="final-checkbox"
+              hide-details
+            />
+          </div>
+        </template>
         <span>If unchecked this submission will be marked for review by the lecturer</span>
       </v-tooltip>
       <v-spacer />
@@ -61,28 +64,32 @@
         v-if="skippable"
         top
       >
-        <v-btn
-          id="skip-submission"
-          slot="activator"
-          text
-          @click="skipSubmission"
-        >
-          Skip
-        </v-btn>
+        <template #activator="{ on }">
+          <v-btn
+            id="skip-submission"
+            text
+            v-on="on"
+            @click="skipSubmission"
+          >
+            Skip
+          </v-btn>
+        </template>
         <span>Skip this submission</span>
       </v-tooltip>
       <v-tooltip top>
-        <v-btn
-          id="submit-feedback"
-          slot="activator"
-          color="primary"
-          :loading="loading"
-          block
-          :disabled="!scoreIsValid"
-          @click="submit"
-        >
-          Submit
-        </v-btn>
+        <template #activator="{ on }">
+          <v-btn
+            id="submit-feedback"
+            color="primary"
+            :loading="loading"
+            block
+            :disabled="!scoreIsValid"
+            v-on="on"
+            @click="submit"
+          >
+            Submit
+          </v-btn>
+        </template>
         <span>Submit and continue</span>
       </v-tooltip>
     </v-card-actions>
diff --git a/frontend/src/components/submission_notes/toolbars/AnnotatedSubmissionTopToolbar.vue b/frontend/src/components/submission_notes/toolbars/AnnotatedSubmissionTopToolbar.vue
index b899ca6b..5f498ddc 100644
--- a/frontend/src/components/submission_notes/toolbars/AnnotatedSubmissionTopToolbar.vue
+++ b/frontend/src/components/submission_notes/toolbars/AnnotatedSubmissionTopToolbar.vue
@@ -42,15 +42,17 @@
       v-if="sourceCodeAvailable"
       top
     >
-      <v-btn
-        slot="activator"
-        icon
-        @click="downloadSourceCode"
-      >
-        <v-icon>
-          cloud_download
-        </v-icon>
-      </v-btn>
+      <template #activator="{ on }">
+        <v-btn
+          icon
+          v-on="on"
+          @click="downloadSourceCode"
+        >
+          <v-icon>
+            cloud_download
+          </v-icon>
+        </v-btn>
+      </template>
       <span>Download original source code (.ipynb, etc.)</span>
     </v-tooltip>
     <v-btn
@@ -62,29 +64,33 @@
       VIEW ORIGINAL SUBMISSION
     </v-btn>
     <v-tooltip top>
-      <v-btn
-        v-if="showClipboard"
-        slot="activator"
-        icon
-        @click="copyToClipboard"
-      >
-        <v-icon>content_copy</v-icon>
-      </v-btn>
+      <template #activator="{ on }">
+        <v-btn
+          v-if="showClipboard"
+          icon
+          v-on="on"
+          @click="copyToClipboard"
+        >
+          <v-icon>content_copy</v-icon>
+        </v-btn>
+      </template>
       <span>{{ copyMessage }}</span>
     </v-tooltip>
     <v-tooltip
       v-if="solutionHidden"
       top
     >
-      <v-btn
-        slot="activator"
-        icon
-        @click="showSolution"
-      >
-        <v-icon>
-          keyboard_arrow_left
-        </v-icon>
-      </v-btn>
+      <template #activator="{ on }">
+        <v-btn
+          icon
+          v-on="on"
+          @click="showSolution"
+        >
+          <v-icon>
+            keyboard_arrow_left
+          </v-icon>
+        </v-btn>
+      </template>
       <span>Show Solution</span>
     </v-tooltip>
 
diff --git a/frontend/src/components/tutor_list/TutorList.vue b/frontend/src/components/tutor_list/TutorList.vue
index f5d936ec..ccca6faf 100644
--- a/frontend/src/components/tutor_list/TutorList.vue
+++ b/frontend/src/components/tutor_list/TutorList.vue
@@ -38,9 +38,10 @@
               v-if="props.item.reservedSubmissions"
               top
             >
-              <template slot="activator">
+              <template #activator="{ on }">
                 <v-icon
                   small
+                  v-on="on"
                   @click="deleteAssignmentsOfTutor(props.item)"
                 >
                   clear
@@ -56,16 +57,18 @@
               @click="changeActiveStatus(props.item)"
             >
               <v-tooltip top>
-                <template slot="activator">
+                <template #activator="{ on }">
                   <v-icon
                     v-if="!props.item.isActive"
                     small
+                    v-on="on"
                   >
                     lock
                   </v-icon>
                   <v-icon
                     v-else
                     small
+                    v-on="on"
                   >
                     lock_open
                   </v-icon>
-- 
GitLab