diff --git a/src/components/Course/components/Lesson/Exercise/MarkExerciseModal.svelte b/src/components/Course/components/Lesson/Exercise/MarkExerciseModal.svelte
new file mode 100644
index 00000000..e7ba5b2a
--- /dev/null
+++ b/src/components/Course/components/Lesson/Exercise/MarkExerciseModal.svelte
@@ -0,0 +1,53 @@
+
+
+
+
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Repellendus debitis
+ quos porro doloremque amet alias modi ducimus delectus cum dolor sunt
+ laborum provident, deserunt magni facilis non nobis illum ipsum. Lorem ipsum
+ dolor sit amet, consectetur adipisicing elit. Deleniti rem aliquid, saepe
+ fuga reiciendis ullam officiis soluta cum, vitae aut eum expedita cumque
+ perspiciatis pariatur necessitatibus, praesentium ea laudantium ut?
+
+
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Repellendus debitis
+ quos porro doloremque amet alias modi ducimus delectus cum dolor sunt
+ laborum provident, deserunt magni facilis non nobis illum ipsum. Lorem ipsum
+ dolor sit amet, consectetur adipisicing elit. Deleniti rem aliquid, saepe
+ fuga reiciendis ullam officiis soluta cum, vitae aut eum expedita cumque
+ perspiciatis pariatur necessitatibus, praesentium ea laudantium ut?
+
+
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Repellendus debitis
+ quos porro doloremque amet alias modi ducimus delectus cum dolor sunt
+ laborum provident, deserunt magni facilis non nobis illum ipsum. Lorem ipsum
+ dolor sit amet, consectetur adipisicing elit. Deleniti rem aliquid, saepe
+ fuga reiciendis ullam officiis soluta cum, vitae aut eum expedita cumque
+ perspiciatis pariatur necessitatibus, praesentium ea laudantium ut?
+
+
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Repellendus debitis
+ quos porro doloremque amet alias modi ducimus delectus cum dolor sunt
+ laborum provident, deserunt magni facilis non nobis illum ipsum. Lorem ipsum
+ dolor sit amet, consectetur adipisicing elit. Deleniti rem aliquid, saepe
+ fuga reiciendis ullam officiis soluta cum, vitae aut eum expedita cumque
+ perspiciatis pariatur necessitatibus, praesentium ea laudantium ut?
+
+
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Repellendus debitis
+ quos porro doloremque amet alias modi ducimus delectus cum dolor sunt
+ laborum provident, deserunt magni facilis non nobis illum ipsum. Lorem ipsum
+ dolor sit amet, consectetur adipisicing elit. Deleniti rem aliquid, saepe
+ fuga reiciendis ullam officiis soluta cum, vitae aut eum expedita cumque
+ perspiciatis pariatur necessitatibus, praesentium ea laudantium ut?
+
+
diff --git a/src/components/Course/components/Lesson/Exercise/Preview.svelte b/src/components/Course/components/Lesson/Exercise/Preview.svelte
new file mode 100644
index 00000000..009eec10
--- /dev/null
+++ b/src/components/Course/components/Lesson/Exercise/Preview.svelte
@@ -0,0 +1,52 @@
+
+
+{#each questions as currentQuestion, currentQuestionIndex}
+ {#if QUESTION_TYPE.RADIO === currentQuestion.type}
+
+ {:else if QUESTION_TYPE.CHECKBOX === currentQuestion.type}
+
+ {:else if QUESTION_TYPE.TEXTAREA === currentQuestion.type}
+
+ {/if}
+{/each}
diff --git a/src/components/Course/components/Lesson/Exercise/ViewMode.svelte b/src/components/Course/components/Lesson/Exercise/ViewMode.svelte
index dae1f702..e6a681ab 100644
--- a/src/components/Course/components/Lesson/Exercise/ViewMode.svelte
+++ b/src/components/Course/components/Lesson/Exercise/ViewMode.svelte
@@ -1,6 +1,7 @@
-
-
-{#if !preview && questions.length && !$userQuestionniareAnswers.isFinished}
-
+{#if !preview && questions.length && !$questionnaireMetaData.isFinished}
+
{/if}
{#if preview}
- {#each questions as currentQuestion, currentQuestionIndex}
- {#if QUESTION_TYPE.RADIO === currentQuestion.type}
-
- {:else if QUESTION_TYPE.CHECKBOX === currentQuestion.type}
-
- {:else if QUESTION_TYPE.TEXTAREA === currentQuestion.type}
-
- {/if}
- {/each}
+
{:else if !questions.length}
{title}
- {#if STATUS.IN_PROGRESS === $userQuestionniareAnswers.status}
+ {#if STATUS.IN_PROGRESS === $questionnaireMetaData.status}
Pending
- {:else if STATUS.REVIEWED === $userQuestionniareAnswers.status && getTotalScores() > 0}
+ {:else if STATUS.REVIEWED === $questionnaireMetaData.status && getTotalScores() > 0}
- {#each questions as currentQuestion, currentQuestionIndex}
- {#if QUESTION_TYPE.RADIO === currentQuestion.type}
-
- {:else if QUESTION_TYPE.CHECKBOX === currentQuestion.type}
-
- {:else if QUESTION_TYPE.TEXTAREA === currentQuestion.type}
-
- {/if}
- {/each}
+
{:else if QUESTION_TYPE.RADIO === currentQuestion.type}
{:else if QUESTION_TYPE.CHECKBOX === currentQuestion.type}
diff --git a/src/components/Course/components/Lesson/Exercise/functions.js b/src/components/Course/components/Lesson/Exercise/functions.js
new file mode 100644
index 00000000..41677f20
--- /dev/null
+++ b/src/components/Course/components/Lesson/Exercise/functions.js
@@ -0,0 +1,72 @@
+import { QUESTION_TYPE } from '../../../../Question/constants';
+
+export function wasCorrectAnswerSelected(currentQuestion, answers) {
+ if (currentQuestion.type === QUESTION_TYPE.TEXTAREA) {
+ return true;
+ }
+
+ const answer = answers[currentQuestion.id];
+ const formattedAnswers = typeof answer === 'string' ? [answer] : answer;
+ return (
+ formattedAnswers &&
+ formattedAnswers.some((answer) => {
+ if (
+ !currentQuestion.answers ||
+ !currentQuestion.answers.length ||
+ currentQuestion.answers.includes(answer)
+ ) {
+ return true;
+ }
+
+ return false;
+ })
+ );
+}
+
+export function getPropsForQuestion(
+ questions,
+ question,
+ questionnaireMetaData,
+ questionIndex,
+ onSubmit,
+ onPrevious,
+ preview
+) {
+ const { answers, isFinished } = questionnaireMetaData;
+
+ const isLast = questionIndex === questions.length;
+ const isOpenQuesiton = question.type === QUESTION_TYPE.TEXTAREA;
+
+ return {
+ title: questionIndex + '. ' + question.title,
+ name: `${question.id}`,
+ options: question.options,
+ answers: question.answers,
+ code: question.code,
+ defaultValue: isOpenQuesiton
+ ? answers[question.id] || ''
+ : answers[question.id] || [],
+ onSubmit,
+ onPrevious,
+ disablePreviousButton: questionIndex === 1,
+ isLast,
+ isPreview: preview || isFinished,
+ disabled:
+ (isFinished && wasCorrectAnswerSelected(question, answers)) || isFinished,
+ nextButtonProps: isOpenQuesiton
+ ? {
+ label: 'Next',
+ isActive: true,
+ }
+ : wasCorrectAnswerSelected(question, answers)
+ ? {
+ label: isLast ? 'Finish' : 'Next',
+ isActive: true,
+ disableOptionSelect: true,
+ }
+ : {
+ label: 'Check',
+ isActive: false,
+ },
+ };
+}
diff --git a/src/components/Course/components/Lesson/Exercise/index.svelte b/src/components/Course/components/Lesson/Exercise/index.svelte
index 362690d5..8e5b798b 100644
--- a/src/components/Course/components/Lesson/Exercise/index.svelte
+++ b/src/components/Course/components/Lesson/Exercise/index.svelte
@@ -1,5 +1,6 @@
diff --git a/src/components/Course/components/Lesson/Exercise/store/answers.js b/src/components/Course/components/Lesson/Exercise/store/answers.js
index 68dee86d..8f2210e2 100644
--- a/src/components/Course/components/Lesson/Exercise/store/answers.js
+++ b/src/components/Course/components/Lesson/Exercise/store/answers.js
@@ -2,7 +2,7 @@ import { writable } from 'svelte/store';
import { STATUS } from '../constants';
-// export const userQuestionniareAnswers = writable({
+// export const questionnaireMetaData = writable({
// answers: {},
// scores: { gates: 60 },
// currentQuestionIndex: 5,
@@ -19,4 +19,4 @@ const initAnswerState = {
status: STATUS.IN_PROGRESS,
};
-export const userQuestionniareAnswers = writable(initAnswerState);
+export const questionnaireMetaData = writable(initAnswerState);
diff --git a/src/components/Course/components/Lesson/Exercise/store/index.js b/src/components/Course/components/Lesson/Exercise/store/index.js
index 9b1ab5a2..6b487537 100644
--- a/src/components/Course/components/Lesson/Exercise/store/index.js
+++ b/src/components/Course/components/Lesson/Exercise/store/index.js
@@ -19,7 +19,7 @@ export function handleAddQuestion() {
...questions,
{
...QUESTION_TEMPLATE,
- id: questions.length + 1,
+ id: `${questions.length + 1}-form`,
value: '',
answers: [],
options: [
diff --git a/src/components/Course/components/Navigation/index.svelte b/src/components/Course/components/Navigation/index.svelte
index 31a1def2..a7b6c528 100644
--- a/src/components/Course/components/Navigation/index.svelte
+++ b/src/components/Course/components/Navigation/index.svelte
@@ -20,7 +20,7 @@
export let courseId;
export let path;
- let show = true;
+ let show = null;
const { page } = stores();
@@ -70,6 +70,8 @@
}
onMount(() => {
+ show = localStorage.getItem('hideCourseNav') === 'false';
+
hotkeys('b', function (event, handler) {
event.preventDefault();
switch (handler.key) {
@@ -79,6 +81,12 @@
}
});
});
+
+ $: {
+ if (process.browser && show !== null) {
+ localStorage.setItem('hideCourseNav', `${!show}`);
+ }
+ }
diff --git a/src/components/Form/Checkbox.svelte b/src/components/Form/Checkbox.svelte
index b8f8cd63..763cbb0e 100644
--- a/src/components/Form/Checkbox.svelte
+++ b/src/components/Form/Checkbox.svelte
@@ -5,10 +5,11 @@
export let name;
export let isEditable = false;
export let disabled = false;
+ export let className = '';
diff --git a/src/components/Form/RadioItem.svelte b/src/components/Form/RadioItem.svelte
index beec6bd7..402a9b23 100644
--- a/src/components/Form/RadioItem.svelte
+++ b/src/components/Form/RadioItem.svelte
@@ -5,10 +5,11 @@
export let name;
export let isEditable = false;
export let disabled = false;
+ export let className = '';
diff --git a/src/components/Modal/index.svelte b/src/components/Modal/index.svelte
index 2c742b70..bfd77ab9 100644
--- a/src/components/Modal/index.svelte
+++ b/src/components/Modal/index.svelte
@@ -1,9 +1,19 @@
{#if open}
@@ -11,7 +21,7 @@
class="dialog fixed overflow-x-hidden overflow-y-auto inset-0 flex justify-center items-center z-50 bg-gray-100 bg-opacity-50"
>
-
+
{modalHeading}
@@ -19,7 +29,9 @@
-
+
+
+
{/if}
@@ -28,4 +40,7 @@
.dialog {
background-color: rgba(0, 0, 0, 0.5);
}
+ .body {
+ max-height: 60vh;
+ }
diff --git a/src/components/Question/CheckboxQuestion/index.svelte b/src/components/Question/CheckboxQuestion/index.svelte
index b92eda52..62ffe4d3 100644
--- a/src/components/Question/CheckboxQuestion/index.svelte
+++ b/src/components/Question/CheckboxQuestion/index.svelte
@@ -34,7 +34,7 @@
if (isPreview) return;
const values = getVal(event.target, name);
onSubmit(name, values);
- // event.target.reset();
+ event.target.reset();
}
function handlePrevious(event) {
@@ -65,13 +65,14 @@
{#each options as option}
{#each options as option}
- import ArrowUp16 from "carbon-icons-svelte/lib/ArrowUp16";
- import Chip from "../Chip/index.svelte";
+ import ArrowUp16 from 'carbon-icons-svelte/lib/ArrowUp16';
+ import Chip from '../Chip/index.svelte';
export let value = 0;
diff --git a/src/routes/courses/[id]/allexercises.svelte b/src/routes/courses/[id]/allexercises.svelte
index a273cc8b..c7fe537b 100644
--- a/src/routes/courses/[id]/allexercises.svelte
+++ b/src/routes/courses/[id]/allexercises.svelte
@@ -15,7 +15,9 @@
+
+
-
-
+
+
{#each sections as { id, title, items }, idx (id)}
@@ -131,9 +245,10 @@
.section {
max-width: 355px;
min-width: 355px;
+ height: 80vh;
}
.content {
- height: 90%;
+ height: 95%;
}