Skip to content

Commit dcc2af5

Browse files
authored
Merge pull request #3 from Gradiant/feature/SUMN-1099-scorm-activities-support
feat(SUMN-1099): Adding support to scorm activity types and recipe
2 parents 9fd5861 + 6071504 commit dcc2af5

File tree

14 files changed

+504
-75
lines changed

14 files changed

+504
-75
lines changed

docs/README.md

Lines changed: 286 additions & 63 deletions
Large diffs are not rendered by default.

docs/modules/recipes.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
* [discussion](recipes.md#discussion)
1212
* [nonInteractive](recipes.md#noninteractive)
1313
* [openAnswer](recipes.md#openanswer)
14+
* [scorm](recipes.md#scorm)
1415

1516
---
1617

@@ -61,4 +62,13 @@ ___
6162
*Defined in src/recipes/recipes.ts:4*
6263

6364
___
65+
<a id="scorm"></a>
66+
67+
### `<Const>` scorm
68+
69+
**● scorm**: *"https://w3id.org/xapi/smart/activity/recipe/scorm"* = categoryIdentifiers.smart.recipeScorm
70+
71+
*Defined in src/recipes/recipes.ts:9*
72+
73+
___
6474

docs/modules/scormtypes.md

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
[SMART xAPI DSL](../README.md) > [scormTypes](../modules/scormtypes.md)
2+
3+
# Module: scormTypes
4+
5+
## Index
6+
7+
### Variables
8+
9+
* [choice](scormtypes.md#choice)
10+
* [genericScorm](scormtypes.md#genericscorm)
11+
* [inlineChoice](scormtypes.md#inlinechoice)
12+
* [multipleChoice](scormtypes.md#multiplechoice)
13+
* [textEntry](scormtypes.md#textentry)
14+
15+
---
16+
17+
## Variables
18+
19+
<a id="choice"></a>
20+
21+
### `<Const>` choice
22+
23+
**● choice**: *"http://imsglobal.org/qti/choice"* = types.qti.choice
24+
25+
*Defined in src/activity-types/activity-types.ts:74*
26+
27+
___
28+
<a id="genericscorm"></a>
29+
30+
### `<Const>` genericScorm
31+
32+
**● genericScorm**: *"https://w3id.org/xapi/smart/activity/scorm"* = types.smart.scorm
33+
34+
*Defined in src/activity-types/activity-types.ts:78*
35+
36+
___
37+
<a id="inlinechoice"></a>
38+
39+
### `<Const>` inlineChoice
40+
41+
**● inlineChoice**: *"http://imsglobal.org/qti/inlineChoice"* = types.qti.inlineChoice
42+
43+
*Defined in src/activity-types/activity-types.ts:76*
44+
45+
___
46+
<a id="multiplechoice"></a>
47+
48+
### `<Const>` multipleChoice
49+
50+
**● multipleChoice**: *"http://imsglobal.org/qti/choiceMultiple"* = types.qti.multipleChoice
51+
52+
*Defined in src/activity-types/activity-types.ts:75*
53+
54+
___
55+
<a id="textentry"></a>
56+
57+
### `<Const>` textEntry
58+
59+
**● textEntry**: *"http://imsglobal.org/qti/textEntry"* = types.qti.textEntry
60+
61+
*Defined in src/activity-types/activity-types.ts:77*
62+
63+
___
64+

package-lock.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"index.d.ts"
2222
],
2323
"dependencies": {
24-
"@gradiant/xapi-dsl": "^1.8.0"
24+
"@gradiant/xapi-dsl": "^1.9.0"
2525
},
2626
"devDependencies": {
2727
"@types/chai": "^4.1.7",

src/activity-types/activity-type.types.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ import {
44
discussionTypes,
55
feedbackTypes,
66
nonInteractiveTypes,
7-
openAnswerTypes
7+
openAnswerTypes,
8+
scormTypes
89
} from './activity-types';
910

1011
export type EssayActivityType = typeof openAnswerTypes.essay;
@@ -46,3 +47,16 @@ export type QuestionType = typeof feedbackTypes.question;
4647
export type ReviewType = typeof feedbackTypes.review;
4748
export type SurveyType = typeof feedbackTypes.survey;
4849
export type FeedbackType = QuestionType | ReviewType | SurveyType;
50+
51+
export type ScormChoiceActivityType = typeof scormTypes.choice;
52+
export type ScormMultipleChoiceActivityType = typeof scormTypes.multipleChoice;
53+
export type ScormInlineChoiceActivityType = typeof scormTypes.inlineChoice;
54+
export type ScormTextEntryActivityType = typeof scormTypes.textEntry;
55+
export type ScormGenericActivityType = typeof scormTypes.genericScorm;
56+
57+
export type ScormType =
58+
| ScormChoiceActivityType
59+
| ScormMultipleChoiceActivityType
60+
| ScormInlineChoiceActivityType
61+
| ScormTextEntryActivityType
62+
| ScormGenericActivityType;

src/activity-types/activity-types.checkers.ts

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ import {
88
feedbackTypes,
99
nonInteractiveTypes,
1010
openAnswerTypes,
11-
otherTypes
11+
otherTypes,
12+
scormTypes
1213
} from './activity-types';
1314

1415
export type ActivityTypeChecker = (activityType: string) => boolean;
@@ -271,3 +272,48 @@ export const isSurvey = isActivityType(feedbackTypes.survey);
271272
* - {@link feedbackTypes.survey}
272273
*/
273274
export const isFeedback: ActivityTypeChecker = anyPass([isQuestion, isReview, isSurvey]);
275+
276+
// Scorm Types
277+
// --------------
278+
279+
/**
280+
* Check if the given activity type if {@link scormTypes.choice}
281+
*/
282+
export const isScormGeneric = isActivityType(scormTypes.genericScorm);
283+
284+
/**
285+
* Check if the given activity type if {@link scormTypes.choice}
286+
*/
287+
export const isScormChoice = isActivityType(scormTypes.choice);
288+
289+
/**
290+
* Check if the given activity type if {@link scormTypes.multipleChoice}
291+
*/
292+
export const isScormMultipleChoice = isActivityType(scormTypes.multipleChoice);
293+
294+
/**
295+
* Check if the given activity type if {@link scormTypes.multipleChoice}
296+
*/
297+
export const isScormInlineChoice = isActivityType(scormTypes.inlineChoice);
298+
299+
/**
300+
* Check if the given activity type if {@link scormTypes.textEntry}
301+
*/
302+
export const isScormTextEntry = isActivityType(scormTypes.textEntry);
303+
304+
/**
305+
* Check if the given activity type is one of:
306+
*
307+
* - {@link scormTypes.genericScorm}
308+
* - {@link scormTypes.choice}
309+
* - {@link scormTypes.multipleChoice}
310+
* - {@link scormTypes.textEntry}
311+
* - {@link scormTypes.inlineChoice}
312+
*/
313+
export const isScorm: ActivityTypeChecker = anyPass([
314+
isScormGeneric,
315+
isScormChoice,
316+
isScormInlineChoice,
317+
isScormMultipleChoice,
318+
isScormTextEntry
319+
]);

src/activity-types/activity-types.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,14 @@ export namespace feedbackTypes {
7070
export const survey = types.tincan.survey;
7171
}
7272

73+
export namespace scormTypes {
74+
export const choice = types.qti.choice;
75+
export const multipleChoice = types.qti.multipleChoice;
76+
export const inlineChoice = types.qti.inlineChoice;
77+
export const textEntry = types.qti.textEntry;
78+
export const genericScorm = types.smart.scorm;
79+
}
80+
7381
/**
7482
* Every activity type combined into a single object
7583
*/
@@ -81,7 +89,8 @@ export const activityTypes = {
8189
...nonInteractiveTypes,
8290
...bookTypes,
8391
...otherTypes,
84-
...feedbackTypes
92+
...feedbackTypes,
93+
...scormTypes
8594
};
8695

8796
/**

src/recipes/recipes.checkers.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,8 @@ export const isDiscussionRecipe = isRecipe(recipes.discussion);
3333
* Check if the given recipe identifier is {@link recipes.nonInteractive}
3434
*/
3535
export const isNonInteractiveRecipe = isRecipe(recipes.nonInteractive);
36+
37+
/**
38+
* Check if the given recipe identifier is {@link recipes.scorm}
39+
*/
40+
export const isScormRecipe = isRecipe(recipes.scorm);

src/recipes/recipes.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@ export namespace recipes {
66
export const audioVideo = categoryIdentifiers.smart.recipeAudioVideo;
77
export const discussion = categoryIdentifiers.smart.recipeDiscussion;
88
export const nonInteractive = categoryIdentifiers.smart.recipeNoInteractive;
9+
export const scorm = categoryIdentifiers.smart.recipeScorm;
910
}

0 commit comments

Comments
 (0)