Type
-
diff --git a/src/classrooms/components/tasks/TaskOptionEditor.vue b/src/classrooms/components/tasks/TaskOptionEditor.vue
index adf0f696..09c7cbd3 100644
--- a/src/classrooms/components/tasks/TaskOptionEditor.vue
+++ b/src/classrooms/components/tasks/TaskOptionEditor.vue
@@ -1,14 +1,14 @@
-
-
-
- {{ isEditMode ? 'Edit Task' : 'Create Task' }}
-
-
-
- {{ error }}
-
-
-
-
-
-
-
- {{ t('newTask.item') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/src/classrooms/pages/NewClassroomTask.vue b/src/classrooms/pages/NewClassroomTask.vue
index 9a4b2db7..3e188a3f 100644
--- a/src/classrooms/pages/NewClassroomTask.vue
+++ b/src/classrooms/pages/NewClassroomTask.vue
@@ -1,207 +1,7 @@
-
-
-
- {{ isEditMode ? t('newTask.edit') : t('newTask.create') }}
-
-
-
- {{ error }}
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ t('newTask.loading') }}
-
-
-
- {{ stopsError }}
-
-
-
-
-
-
-
- {{ t('newTask.item') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/src/classrooms/pages/TaskEditorPage.vue b/src/classrooms/pages/TaskEditorPage.vue
new file mode 100644
index 00000000..cf0818c7
--- /dev/null
+++ b/src/classrooms/pages/TaskEditorPage.vue
@@ -0,0 +1,290 @@
+
+
+
+
+
+
+ {{ isEditMode ? t('newTask.edit') : t('newTask.create') }}
+
+
+
+ {{ error }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('newTask.loading') }}
+
+
+
+ {{ stopsError }}
+
+
+
+
+
+
+
+ {{ t('newTask.item') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/classrooms/routes.ts b/src/classrooms/routes.ts
index fec88d79..181e137f 100644
--- a/src/classrooms/routes.ts
+++ b/src/classrooms/routes.ts
@@ -9,8 +9,7 @@ import TeacherPlaytestMapPage from '@/teacher-playtest/pages/TeacherPlaytestMapP
import NotificationsPage from '@/notifications/pages/NotificationsPage.vue'
import TeacherPlaytestStopPage from '@/teacher-playtest/pages/TeacherPlaytestStopPage.vue'
import ClassroomTasks from '@/classrooms/pages/ClassroomTasks.vue'
-import NewClassroomTask from '@/classrooms/pages/NewClassroomTask.vue'
-import EditClassroomTask from '@/classrooms/pages/EditClassroomTask.vue'
+import TaskEditorPage from '@/classrooms/pages/TaskEditorPage.vue'
import PendingApproval from '@/classrooms/pages/PendingApproval.vue'
import TeacherMystery from '@/teacher-mystery/pages/TeacherMystery.vue'
import TeacherPupilNotebookPage from '@/notebook/pages/TeacherPupilNotebookPage.vue'
@@ -114,25 +113,25 @@ export function createClassroomRoutes(
},
},
{
- path: 'classrooms/:classroomId/tasks/:slug',
- name: 'classroom-tasks',
- component: ClassroomTasks,
+ path: 'classrooms/:classroomId/tasks/new',
+ name: 'new-classroom-task',
+ component: TaskEditorPage,
meta: {
backTarget: classroomDetailsBackTarget,
},
},
{
- path: 'classrooms/:classroomId/tasks/new',
- name: 'new-classroom-task',
- component: NewClassroomTask,
+ path: 'classrooms/:classroomId/tasks/:taskId/edit',
+ name: 'edit-classroom-task',
+ component: TaskEditorPage,
meta: {
backTarget: classroomDetailsBackTarget,
},
},
{
- path: 'classrooms/:classroomId/tasks/:taskId',
- name: 'edit-classroom-task',
- component: EditClassroomTask,
+ path: 'classrooms/:classroomId/tasks/:slug',
+ name: 'classroom-tasks',
+ component: ClassroomTasks,
meta: {
backTarget: classroomDetailsBackTarget,
},
diff --git a/src/locales/en.ts b/src/locales/en.ts
index 0eb9682c..b7819da3 100644
--- a/src/locales/en.ts
+++ b/src/locales/en.ts
@@ -156,6 +156,8 @@ export const en = {
tasksToRetry: 'Tasks to fix',
goToTask: 'Go to task',
welcomeToStop: 'Welcome to {stop}',
+ imageThingsLeftToFind: '{count} things left to find',
+ imageAllThingsFound: 'All things found',
email: {
inbox: 'Innboks',
whatWouldYouDo: 'Hva ville du gjort?',
@@ -973,6 +975,50 @@ export const en = {
},
joinCode: 'Classroom code',
},
+ taskOverview: {
+ imageSelectLocked: 'Cannot be edited',
+ },
+ newTask: {
+ savefail: 'Saving failed',
+ edit: 'Edit task',
+ create: 'Create task',
+ select: 'Select stop',
+ loading: 'Loading stop...',
+ additem: 'Add item',
+ cancel: 'Cancel',
+ save: 'Save',
+ stops: 'Stops',
+ remove: 'Remove',
+ item: 'Item',
+ prompt: 'Question',
+ ep: 'English question',
+ np: 'Norwegian question',
+ et: 'English title',
+ nt: 'Norwegian title',
+ ei: 'English introduction',
+ ni: 'Norwegian introduction',
+ news: 'News comparison',
+ imageAssessment: 'Image assessment',
+ imageSelect: 'Image select',
+ passwordEvaluation: 'Password evaluation',
+ socialScenario: 'Social scenario',
+ image: 'Image',
+ imageUrl: 'Image URL',
+ uploadImage: 'Upload image',
+ uploading: 'Uploading...',
+ removeImage: 'Remove image',
+ uploadFail: 'Could not upload image',
+ uploadAuth: 'You must be logged in to upload an image',
+ difficulty: 'Difficulty',
+ options: 'Options',
+ eo: 'English option',
+ no: 'Norwegian option',
+ correct: 'Correct',
+ answer: 'Answer key',
+ ea: 'English explanation',
+ na: 'Norwegian explanation',
+ addoption: 'Add option',
+ },
classroomModeration: {
title: 'Word filter',
description:
diff --git a/src/locales/nb.ts b/src/locales/nb.ts
index 08717d8a..ebc03615 100644
--- a/src/locales/nb.ts
+++ b/src/locales/nb.ts
@@ -158,6 +158,8 @@ export const nb = {
tasksToRetry: 'Oppgaver å gjenta',
goToTask: 'Gå til oppgave',
welcomeToStop: 'Velkommen til {stop}',
+ imageThingsLeftToFind: '{count} ting igjen å finne',
+ imageAllThingsFound: 'Alle ting er funnet',
email: {
inbox: 'Innboks',
whatWouldYouDo: 'Hva ville du gjort?',
@@ -977,6 +979,7 @@ export const nb = {
unpublished: 'Ikke publisert',
published: 'Publisert',
edit: 'Rediger',
+ imageSelectLocked: 'Kan ikke redigeres',
cancel: 'Avbryt',
},
newTask: {
@@ -999,6 +1002,17 @@ export const nb = {
ei: 'Engelsk introduksjon',
ni: 'Norsk introduksjon',
news: 'Nyhetssammenligning',
+ imageAssessment: 'Bildevurdering',
+ imageSelect: 'Bildevalg',
+ passwordEvaluation: 'Passordvurdering',
+ socialScenario: 'Sosialt scenario',
+ image: 'Bilde',
+ imageUrl: 'Bildeadresse',
+ uploadImage: 'Last opp bilde',
+ uploading: 'Laster opp...',
+ removeImage: 'Fjern bilde',
+ uploadFail: 'Kunne ikke laste opp bildet',
+ uploadAuth: 'Du må være logget inn for å laste opp bilde',
difficulty: 'Vanskelighetsgrad',
options: 'Valgmuligheter',
eo: 'Engelsk valgmulighet',
diff --git a/src/stops/api/stops.api.ts b/src/stops/api/stops.api.ts
index 0c7c7525..81b84b70 100644
--- a/src/stops/api/stops.api.ts
+++ b/src/stops/api/stops.api.ts
@@ -292,6 +292,29 @@ export function requestUpdateTaskPublishState(
)
}
+export function requestUploadTaskMedia(
+ classroomId: number,
+ authorizationHeader: string,
+ file: File,
+): Promise<{ url: string }> {
+ const formData = new FormData()
+ formData.append('file', file)
+
+ return fetch(`${CLASSROOMS_BASE}/${classroomId}/tasks/upload`, {
+ method: 'POST',
+ headers: { Authorization: authorizationHeader },
+ body: formData,
+ credentials: 'include',
+ }).then(async (response) => {
+ if (!response.ok) {
+ const fallback = `Request failed with status ${response.status}`
+ const errorMessage = await readJsonErrorMessage(response)
+ throw new Error(errorMessage || fallback)
+ }
+
+ return response.json() as Promise<{ url: string }>
+ })
+}
export function requestDeleteTask(
classroomId: number,
taskId: number,