fcad-core-dragon 2.0.0-beta.3 → 2.0.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/.editorconfig +33 -33
  2. package/.eslintignore +29 -29
  3. package/.eslintrc.cjs +81 -81
  4. package/CHANGELOG +373 -364
  5. package/README.md +71 -71
  6. package/bk.scss +117 -117
  7. package/package.json +61 -61
  8. package/src/$locales/en.json +143 -143
  9. package/src/$locales/fr.json +105 -105
  10. package/src/assets/data/onboardingMessages.json +47 -47
  11. package/src/components/AppBase.vue +1147 -1054
  12. package/src/components/AppBaseButton.vue +87 -87
  13. package/src/components/AppBaseErrorDisplay.vue +438 -438
  14. package/src/components/AppBaseFlipCard.vue +84 -84
  15. package/src/components/AppBaseModule.vue +1636 -1673
  16. package/src/components/AppBasePage.vue +779 -779
  17. package/src/components/AppBasePopover.vue +41 -41
  18. package/src/components/AppCompAudio.vue +234 -234
  19. package/src/components/AppCompBranchButtons.vue +552 -552
  20. package/src/components/AppCompButtonProgress.vue +126 -126
  21. package/src/components/AppCompCarousel.vue +298 -298
  22. package/src/components/AppCompInputCheckBoxNext.vue +195 -195
  23. package/src/components/AppCompInputDropdownNext.vue +159 -159
  24. package/src/components/AppCompInputRadioNext.vue +152 -152
  25. package/src/components/AppCompInputTextNext.vue +106 -106
  26. package/src/components/AppCompInputTextTableNext.vue +141 -141
  27. package/src/components/AppCompInputTextToFillDropdownNext.vue +230 -230
  28. package/src/components/AppCompInputTextToFillNext.vue +171 -171
  29. package/src/components/AppCompJauge.vue +74 -74
  30. package/src/components/AppCompMenu.vue +423 -413
  31. package/src/components/AppCompMenuItem.vue +228 -228
  32. package/src/components/AppCompNavigation.vue +959 -960
  33. package/src/components/AppCompNoteCall.vue +133 -133
  34. package/src/components/AppCompNoteCredit.vue +292 -292
  35. package/src/components/AppCompPlayBar.vue +1218 -1218
  36. package/src/components/AppCompPlayBarNext.vue +2052 -2052
  37. package/src/components/AppCompPlayBarProgress.vue +82 -82
  38. package/src/components/AppCompPopUpNext.vue +503 -503
  39. package/src/components/AppCompQuizNext.vue +2904 -2904
  40. package/src/components/AppCompQuizRecall.vue +276 -276
  41. package/src/components/AppCompSVGNext.vue +347 -347
  42. package/src/components/AppCompSettingsMenu.vue +172 -172
  43. package/src/components/AppCompTableOfContent.vue +387 -387
  44. package/src/components/AppCompTranscript.vue +24 -24
  45. package/src/components/AppCompVideoPlayer.vue +368 -368
  46. package/src/components/AppCompViewDisplay.vue +6 -6
  47. package/src/components/BaseModule.vue +72 -72
  48. package/src/composables/useQuiz.js +206 -206
  49. package/src/externalComps/ModuleView.vue +22 -22
  50. package/src/externalComps/SummaryView.vue +91 -91
  51. package/src/main.js +272 -272
  52. package/src/mixins/$mediaMixins.js +819 -819
  53. package/src/mixins/timerMixin.js +155 -155
  54. package/src/module/stores/appStore.js +901 -893
  55. package/src/module/xapi/ADL.js +380 -376
  56. package/src/module/xapi/Crypto/Hasher.js +241 -241
  57. package/src/module/xapi/Crypto/WordArray.js +278 -278
  58. package/src/module/xapi/Crypto/algorithms/BufferedBlockAlgorithm.js +103 -103
  59. package/src/module/xapi/Crypto/algorithms/C_algo.js +315 -315
  60. package/src/module/xapi/Crypto/algorithms/HMAC.js +9 -9
  61. package/src/module/xapi/Crypto/algorithms/SHA1.js +9 -9
  62. package/src/module/xapi/Crypto/encoders/Base.js +105 -105
  63. package/src/module/xapi/Crypto/encoders/Base64.js +99 -99
  64. package/src/module/xapi/Crypto/encoders/Hex.js +61 -61
  65. package/src/module/xapi/Crypto/encoders/Latin1.js +61 -61
  66. package/src/module/xapi/Crypto/encoders/Utf8.js +45 -45
  67. package/src/module/xapi/Crypto/index.js +53 -53
  68. package/src/module/xapi/Statement/activity.js +47 -47
  69. package/src/module/xapi/Statement/agent.js +55 -55
  70. package/src/module/xapi/Statement/group.js +26 -26
  71. package/src/module/xapi/Statement/index.js +259 -259
  72. package/src/module/xapi/Statement/statement.js +253 -253
  73. package/src/module/xapi/Statement/statementRef.js +23 -23
  74. package/src/module/xapi/Statement/substatement.js +22 -22
  75. package/src/module/xapi/Statement/verb.js +36 -36
  76. package/src/module/xapi/activitytypes.js +17 -17
  77. package/src/module/xapi/launch.js +157 -157
  78. package/src/module/xapi/utils.js +167 -167
  79. package/src/module/xapi/verbs.js +294 -294
  80. package/src/module/xapi/wrapper.js +1963 -1963
  81. package/src/module/xapi/xapiStatement.js +444 -444
  82. package/src/plugins/bus.js +8 -8
  83. package/src/plugins/gsap.js +14 -14
  84. package/src/plugins/helper.js +314 -308
  85. package/src/plugins/i18n.js +44 -44
  86. package/src/plugins/idb.js +227 -219
  87. package/src/plugins/save.js +37 -37
  88. package/src/plugins/scorm.js +287 -287
  89. package/src/plugins/xapi.js +11 -11
  90. package/src/public/index.html +33 -33
  91. package/src/router/index.js +43 -43
  92. package/src/router/routes.js +312 -312
  93. package/src/shared/generalfuncs.js +210 -210
  94. package/src/shared/validators.js +1069 -1069
  95. package/vite.config.js +0 -27
@@ -1,253 +1,253 @@
1
- import { Agent } from './agent'
2
- import { Group } from './group'
3
- import { StatementRef } from './statementRef'
4
- import { SubStatement } from './substatement'
5
- import { Activity } from './activity'
6
- import { Verb } from './verb'
7
- import ADL from '../ADL'
8
- /*******************************************************************************
9
- * XAPIStatement - a convenience class to wrap statement objects
10
- *
11
- * This sub-API is supposed to make it easier to author valid xAPI statements
12
- * by adding constructors and encouraging best practices. All objects in this
13
- * API are fully JSON-compatible, so anything expecting an xAPI statement can
14
- * take an improved statement and vice versa.
15
- *
16
- * A working knowledge of what exactly the LRS expects is still expected,
17
- * but it's easier to map an 'I did this' statement to xAPI now.
18
- *
19
- * Tech note: All constructors also double as shallow clone functions. E.g.
20
- *
21
- * var activity1 = new Activity('A walk in the park');
22
- * var activity2 = new Activity(activity1);
23
- * var activity3 = new Activity(stmt_from_lrs.object);
24
- *
25
- *******************************************************************************/
26
-
27
- /*
28
- * A convenient JSON-compatible xAPI statement wrapper
29
- * All args are optional, but the statement may not be complete or valid
30
- * Can also pass an Agent IFI, Verb ID, and an Activity ID in lieu of these args
31
- * @param {string} [actor] The Agent or Group committing the action described by the statement
32
- * @param {string} [verb] The Verb for the action described by the statement
33
- * @param {string} [object] The receiver of the action. An Agent, Group, Activity, SubStatement, or StatementRef
34
- * @example
35
- * var stmt = new ADL.XAPIStatement(
36
- * 'mailto:steve.vergenz.ctr@adlnet.gov',
37
- * 'http://adlnet.gov/expapi/verbs/launched',
38
- * 'http://vwf.adlnet.gov/xapi/virtual_world_sandbox'
39
- * );
40
- * >> {
41
- * "actor": {
42
- * "objectType": "Agent",
43
- * "mbox": "mailto:steve.vergenz.ctr@adlnet.gov" },
44
- * "verb": {
45
- * "id": "http://adlnet.gov/expapi/verbs/launched" },
46
- * "object": {
47
- * "objectType": "Activity",
48
- * "id": "http://vwf.adlnet.gov/xapi/virtual_world_sandbox" },
49
- * "result": {
50
- * "An optional property that represents a measured outcome related to the Statement in which it is included."}}
51
- */
52
-
53
- export default class Statement {
54
- constructor(actor, verb, object, result) {
55
- //this.Agent = new Agent()
56
- //this.Group = new Group()
57
- this.Agent = Agent
58
- this.Group = Group
59
- this.Verb = Verb
60
- this.Activity = Activity
61
- this.StatementRef = StatementRef
62
- this.SubStatement = SubStatement
63
-
64
- //ADL.XAPIStatement = this
65
- // if first arg is an xapi statement, parse
66
- if (actor && actor.actor && actor.verb && actor.object) {
67
- var stmt = actor
68
- for (var i in stmt) {
69
- if (i != 'actor' && i != 'verb' && i != 'object') this[i] = stmt[i]
70
- }
71
- actor = stmt.actor
72
- verb = stmt.verb
73
- object = stmt.object
74
- }
75
- if (actor) {
76
- if (actor instanceof Agent) this.actor = actor
77
- else if (actor.objectType === 'Agent' || !actor.objectType)
78
- this.actor = new Agent(actor)
79
- else if (actor.objectType === 'Group') this.actor = new Group(actor)
80
- } else this.actor = null
81
-
82
- if (verb) {
83
- if (verb instanceof Verb) this.verb = verb
84
- else this.verb = new Verb(verb)
85
- } else this.verb = null
86
-
87
- // decide what kind of object was passed
88
- if (object) {
89
- if (object.objectType === 'Activity' || !object.objectType) {
90
- if (object instanceof Activity) this.object = object
91
- else this.object = new Activity(object)
92
- } else if (object.objectType === 'Agent') {
93
- if (object instanceof Agent) this.object = object
94
- else this.object = new Agent(object)
95
- } else if (object.objectType === 'Group') {
96
- if (object instanceof Group) this.object = object
97
- else this.object = new Group(object)
98
- } else if (object.objectType === 'StatementRef') {
99
- if (object instanceof StatementRef) this.object = object
100
- else this.object = new StatementRef(object)
101
- } else if (object.objectType === 'SubStatement') {
102
- if (object instanceof SubStatement) this.object = object
103
- else this.object = new SubStatement(object)
104
- } else this.object = null
105
- } else this.object = null
106
-
107
- // add support for result object
108
- if (result) {
109
- this.result = result
110
- }
111
- }
112
- _getobj(obj, path) {
113
- var parts = path.split('.')
114
-
115
- var part = parts[0]
116
- path = parts.slice(1).join('.')
117
-
118
- if (!obj[part]) {
119
- if (/\[\]$/.test(part)) {
120
- part = part.slice(0, -2)
121
- if (!Array.isArray(obj[part])) {
122
- obj[part] = []
123
- }
124
- } else obj[part] = {}
125
- }
126
- }
127
- toString() {
128
- return (
129
- this.actor.toString() +
130
- ' ' +
131
- this.verb.toString() +
132
- ' ' +
133
- this.object.toString() +
134
- ' ' +
135
- this.result.toString()
136
- )
137
- }
138
-
139
- isValid() {
140
- return (
141
- this.actor &&
142
- this.actor.isValid() &&
143
- this.verb &&
144
- this.verb.isValid() &&
145
- this.object &&
146
- this.object.isValid() &&
147
- this.result &&
148
- this.result.isValid()
149
- )
150
- }
151
- generateRegistration() {
152
- this._getobj(this, 'context').registration = ADL.ruuid()
153
- }
154
-
155
- addParentActivity(activity) {
156
- this._getobj(this, 'context.contextActivities.parent[]').push(
157
- new Activity(activity)
158
- )
159
- }
160
-
161
- addGroupingActivity(activity) {
162
- this._getobj(this, 'context.contextActivities.grouping[]').push(
163
- new Activity(activity)
164
- )
165
- }
166
-
167
- addOtherContextActivity(activity) {
168
- this._getobj(this, 'context.contextActivities.other[]').push(
169
- new Activity(activity)
170
- )
171
- }
172
- generateId() {
173
- this.id = ADL.ruuid()
174
- }
175
-
176
- setActor(email, name, objectType) {
177
- var actor = {
178
- mbox: 'mailto:' + email,
179
- name: name,
180
- objectType: ''
181
- }
182
- actor.objectType = objectType || 'Agent'
183
-
184
- this.actor = actor
185
- }
186
-
187
- setVerb(verb) {
188
- //this.verb = this.verb[verb]
189
- //return this;
190
- }
191
-
192
- setObject(objectId, objectName, objectDescription, objectType) {
193
- var object = {
194
- id: objectId,
195
- definition: {
196
- name: {
197
- 'en-US': objectName,
198
- 'fr-FR': objectName
199
- },
200
- description: {
201
- 'en-US': objectDescription,
202
- 'fr-FR': objectDescription
203
- }
204
- },
205
- objectType: ''
206
- }
207
- object.objectType = objectType || 'Activity'
208
-
209
- this.object = object
210
- }
211
-
212
- setResultScore(score, scoreScale, scoreMin, scoreMax) {
213
- if (!this.result) this.result = {}
214
- this.result.score = {
215
- scaled: scoreScale || 1,
216
- min: scoreMin,
217
- max: scoreMax,
218
- raw: score
219
- }
220
- }
221
-
222
- setResultKey(key, value) {
223
- if (!this.result) this.result = {} //define the result key
224
- //define the extra keys of the result
225
- if (key == 'success') this.result.success = value
226
- else if (key == 'response') this.result.response = value
227
- else if (key == 'duration') this.result.duration = value
228
- else if (key == 'extensions') this.result.extensions = value
229
- else if (key == 'completion') this.result.completion = value
230
- }
231
-
232
- setContextKey(key, value) {
233
- if (!this.context) this.context = {}
234
- if (key == 'instructor') this.context.instructor = value
235
- else if (key == 'contextActivities') this.context.contextActivities = value
236
- }
237
-
238
- // customize(key, lang) {
239
- // let lang = lang
240
- // if (key == 'description') {
241
- // //this.
242
- // }
243
- // }
244
-
245
- getStatement() {
246
- return this
247
- }
248
-
249
- //setContext(key, value) {
250
- // if (key == "context ") return;
251
- // else if (key == " contextActivities") return;
252
- //};
253
- }
1
+ import { Agent } from './agent'
2
+ import { Group } from './group'
3
+ import { StatementRef } from './statementRef'
4
+ import { SubStatement } from './substatement'
5
+ import { Activity } from './activity'
6
+ import { Verb } from './verb'
7
+ import ADL from '../ADL'
8
+ /*******************************************************************************
9
+ * XAPIStatement - a convenience class to wrap statement objects
10
+ *
11
+ * This sub-API is supposed to make it easier to author valid xAPI statements
12
+ * by adding constructors and encouraging best practices. All objects in this
13
+ * API are fully JSON-compatible, so anything expecting an xAPI statement can
14
+ * take an improved statement and vice versa.
15
+ *
16
+ * A working knowledge of what exactly the LRS expects is still expected,
17
+ * but it's easier to map an 'I did this' statement to xAPI now.
18
+ *
19
+ * Tech note: All constructors also double as shallow clone functions. E.g.
20
+ *
21
+ * var activity1 = new Activity('A walk in the park');
22
+ * var activity2 = new Activity(activity1);
23
+ * var activity3 = new Activity(stmt_from_lrs.object);
24
+ *
25
+ *******************************************************************************/
26
+
27
+ /*
28
+ * A convenient JSON-compatible xAPI statement wrapper
29
+ * All args are optional, but the statement may not be complete or valid
30
+ * Can also pass an Agent IFI, Verb ID, and an Activity ID in lieu of these args
31
+ * @param {string} [actor] The Agent or Group committing the action described by the statement
32
+ * @param {string} [verb] The Verb for the action described by the statement
33
+ * @param {string} [object] The receiver of the action. An Agent, Group, Activity, SubStatement, or StatementRef
34
+ * @example
35
+ * var stmt = new ADL.XAPIStatement(
36
+ * 'mailto:steve.vergenz.ctr@adlnet.gov',
37
+ * 'http://adlnet.gov/expapi/verbs/launched',
38
+ * 'http://vwf.adlnet.gov/xapi/virtual_world_sandbox'
39
+ * );
40
+ * >> {
41
+ * "actor": {
42
+ * "objectType": "Agent",
43
+ * "mbox": "mailto:steve.vergenz.ctr@adlnet.gov" },
44
+ * "verb": {
45
+ * "id": "http://adlnet.gov/expapi/verbs/launched" },
46
+ * "object": {
47
+ * "objectType": "Activity",
48
+ * "id": "http://vwf.adlnet.gov/xapi/virtual_world_sandbox" },
49
+ * "result": {
50
+ * "An optional property that represents a measured outcome related to the Statement in which it is included."}}
51
+ */
52
+
53
+ export default class Statement {
54
+ constructor(actor, verb, object, result) {
55
+ //this.Agent = new Agent()
56
+ //this.Group = new Group()
57
+ this.Agent = Agent
58
+ this.Group = Group
59
+ this.Verb = Verb
60
+ this.Activity = Activity
61
+ this.StatementRef = StatementRef
62
+ this.SubStatement = SubStatement
63
+
64
+ //ADL.XAPIStatement = this
65
+ // if first arg is an xapi statement, parse
66
+ if (actor && actor.actor && actor.verb && actor.object) {
67
+ var stmt = actor
68
+ for (var i in stmt) {
69
+ if (i != 'actor' && i != 'verb' && i != 'object') this[i] = stmt[i]
70
+ }
71
+ actor = stmt.actor
72
+ verb = stmt.verb
73
+ object = stmt.object
74
+ }
75
+ if (actor) {
76
+ if (actor instanceof Agent) this.actor = actor
77
+ else if (actor.objectType === 'Agent' || !actor.objectType)
78
+ this.actor = new Agent(actor)
79
+ else if (actor.objectType === 'Group') this.actor = new Group(actor)
80
+ } else this.actor = null
81
+
82
+ if (verb) {
83
+ if (verb instanceof Verb) this.verb = verb
84
+ else this.verb = new Verb(verb)
85
+ } else this.verb = null
86
+
87
+ // decide what kind of object was passed
88
+ if (object) {
89
+ if (object.objectType === 'Activity' || !object.objectType) {
90
+ if (object instanceof Activity) this.object = object
91
+ else this.object = new Activity(object)
92
+ } else if (object.objectType === 'Agent') {
93
+ if (object instanceof Agent) this.object = object
94
+ else this.object = new Agent(object)
95
+ } else if (object.objectType === 'Group') {
96
+ if (object instanceof Group) this.object = object
97
+ else this.object = new Group(object)
98
+ } else if (object.objectType === 'StatementRef') {
99
+ if (object instanceof StatementRef) this.object = object
100
+ else this.object = new StatementRef(object)
101
+ } else if (object.objectType === 'SubStatement') {
102
+ if (object instanceof SubStatement) this.object = object
103
+ else this.object = new SubStatement(object)
104
+ } else this.object = null
105
+ } else this.object = null
106
+
107
+ // add support for result object
108
+ if (result) {
109
+ this.result = result
110
+ }
111
+ }
112
+ _getobj(obj, path) {
113
+ var parts = path.split('.')
114
+
115
+ var part = parts[0]
116
+ path = parts.slice(1).join('.')
117
+
118
+ if (!obj[part]) {
119
+ if (/\[\]$/.test(part)) {
120
+ part = part.slice(0, -2)
121
+ if (!Array.isArray(obj[part])) {
122
+ obj[part] = []
123
+ }
124
+ } else obj[part] = {}
125
+ }
126
+ }
127
+ toString() {
128
+ return (
129
+ this.actor.toString() +
130
+ ' ' +
131
+ this.verb.toString() +
132
+ ' ' +
133
+ this.object.toString() +
134
+ ' ' +
135
+ this.result.toString()
136
+ )
137
+ }
138
+
139
+ isValid() {
140
+ return (
141
+ this.actor &&
142
+ this.actor.isValid() &&
143
+ this.verb &&
144
+ this.verb.isValid() &&
145
+ this.object &&
146
+ this.object.isValid() &&
147
+ this.result &&
148
+ this.result.isValid()
149
+ )
150
+ }
151
+ generateRegistration() {
152
+ this._getobj(this, 'context').registration = ADL.ruuid()
153
+ }
154
+
155
+ addParentActivity(activity) {
156
+ this._getobj(this, 'context.contextActivities.parent[]').push(
157
+ new Activity(activity)
158
+ )
159
+ }
160
+
161
+ addGroupingActivity(activity) {
162
+ this._getobj(this, 'context.contextActivities.grouping[]').push(
163
+ new Activity(activity)
164
+ )
165
+ }
166
+
167
+ addOtherContextActivity(activity) {
168
+ this._getobj(this, 'context.contextActivities.other[]').push(
169
+ new Activity(activity)
170
+ )
171
+ }
172
+ generateId() {
173
+ this.id = ADL.ruuid()
174
+ }
175
+
176
+ setActor(email, name, objectType) {
177
+ var actor = {
178
+ mbox: 'mailto:' + email,
179
+ name: name,
180
+ objectType: ''
181
+ }
182
+ actor.objectType = objectType || 'Agent'
183
+
184
+ this.actor = actor
185
+ }
186
+
187
+ setVerb(verb) {
188
+ //this.verb = this.verb[verb]
189
+ //return this;
190
+ }
191
+
192
+ setObject(objectId, objectName, objectDescription, objectType) {
193
+ var object = {
194
+ id: objectId,
195
+ definition: {
196
+ name: {
197
+ 'en-US': objectName,
198
+ 'fr-FR': objectName
199
+ },
200
+ description: {
201
+ 'en-US': objectDescription,
202
+ 'fr-FR': objectDescription
203
+ }
204
+ },
205
+ objectType: ''
206
+ }
207
+ object.objectType = objectType || 'Activity'
208
+
209
+ this.object = object
210
+ }
211
+
212
+ setResultScore(score, scoreScale, scoreMin, scoreMax) {
213
+ if (!this.result) this.result = {}
214
+ this.result.score = {
215
+ scaled: scoreScale || 1,
216
+ min: scoreMin,
217
+ max: scoreMax,
218
+ raw: score
219
+ }
220
+ }
221
+
222
+ setResultKey(key, value) {
223
+ if (!this.result) this.result = {} //define the result key
224
+ //define the extra keys of the result
225
+ if (key == 'success') this.result.success = value
226
+ else if (key == 'response') this.result.response = value
227
+ else if (key == 'duration') this.result.duration = value
228
+ else if (key == 'extensions') this.result.extensions = value
229
+ else if (key == 'completion') this.result.completion = value
230
+ }
231
+
232
+ setContextKey(key, value) {
233
+ if (!this.context) this.context = {}
234
+ if (key == 'instructor') this.context.instructor = value
235
+ else if (key == 'contextActivities') this.context.contextActivities = value
236
+ }
237
+
238
+ // customize(key, lang) {
239
+ // let lang = lang
240
+ // if (key == 'description') {
241
+ // //this.
242
+ // }
243
+ // }
244
+
245
+ getStatement() {
246
+ return this
247
+ }
248
+
249
+ //setContext(key, value) {
250
+ // if (key == "context ") return;
251
+ // else if (key == " contextActivities") return;
252
+ //};
253
+ }
@@ -1,23 +1,23 @@
1
- /*
2
- * An object that refers to a separate statement
3
- * @param {string} id The UUID of another xAPI statement
4
- */
5
- export default class StatementRef {
6
- constructor(id) {
7
- if (id && id.id) {
8
- for (var i in id) {
9
- this[i] = id[i]
10
- }
11
- } else {
12
- this.objectType = 'StatementRef'
13
- this.id = id
14
- }
15
- }
16
-
17
- toString() {
18
- return 'statement(' + this.id + ')'
19
- }
20
- isValid() {
21
- return this.id && this.objectType && this.objectType === 'StatementRef'
22
- }
23
- }
1
+ /*
2
+ * An object that refers to a separate statement
3
+ * @param {string} id The UUID of another xAPI statement
4
+ */
5
+ export default class StatementRef {
6
+ constructor(id) {
7
+ if (id && id.id) {
8
+ for (var i in id) {
9
+ this[i] = id[i]
10
+ }
11
+ } else {
12
+ this.objectType = 'StatementRef'
13
+ this.id = id
14
+ }
15
+ }
16
+
17
+ toString() {
18
+ return 'statement(' + this.id + ')'
19
+ }
20
+ isValid() {
21
+ return this.id && this.objectType && this.objectType === 'StatementRef'
22
+ }
23
+ }
@@ -1,22 +1,22 @@
1
- import Statement from './statement'
2
-
3
- /*
4
- * An object that refers to a separate statement
5
- * @param {string} id The UUID of another xAPI statement
6
- */
7
- export default class SubStatement {
8
- constructor(actor, verb, object) {
9
- //super(actor, verb, object)
10
- Statement.call(this, actor, verb, object)
11
- this.objectType = 'SubStatement'
12
-
13
- delete this.id
14
- delete this.stored
15
- delete this.version
16
- delete this.authority
17
- this.prototype = new Statement()
18
- }
19
- toString() {
20
- return '"' + SubStatement.prototype.prototype.toString.call(this) + '"'
21
- }
22
- }
1
+ import Statement from './statement'
2
+
3
+ /*
4
+ * An object that refers to a separate statement
5
+ * @param {string} id The UUID of another xAPI statement
6
+ */
7
+ export default class SubStatement {
8
+ constructor(actor, verb, object) {
9
+ //super(actor, verb, object)
10
+ Statement.call(this, actor, verb, object)
11
+ this.objectType = 'SubStatement'
12
+
13
+ delete this.id
14
+ delete this.stored
15
+ delete this.version
16
+ delete this.authority
17
+ this.prototype = new Statement()
18
+ }
19
+ toString() {
20
+ return '"' + SubStatement.prototype.prototype.toString.call(this) + '"'
21
+ }
22
+ }
@@ -1,36 +1,36 @@
1
- /*
2
- * Really only provides a convenient language map
3
- * @param {string} id The IRI of the action taken
4
- * @param {string} [description] An English-language description, or a Language Map
5
- */
6
- export default class Verb {
7
- constructor(id, description) {
8
- //let id = id || 'http://adlnet.gov/expapi/verbs/launched'
9
- // if passed a verb object then copy and return
10
- if (id && id.id) {
11
- for (var i in id) {
12
- this[i] = id[i]
13
- }
14
- return
15
- }
16
- // save id and build language map
17
- this.id = id || 'http://adlnet.gov/expapi/verbs/launched'
18
- if (description) {
19
- if (typeof description === 'string' || description instanceof String) {
20
- this.display = { 'en-US': description }
21
- } else {
22
- this.display = description
23
- }
24
- }
25
- }
26
-
27
- toString() {
28
- if (this.display && (this.display['en-US'] || this.display['en']))
29
- return this.display['en-US'] || this.display['en']
30
- else return this.id
31
- }
32
-
33
- isValid() {
34
- return this.id
35
- }
36
- }
1
+ /*
2
+ * Really only provides a convenient language map
3
+ * @param {string} id The IRI of the action taken
4
+ * @param {string} [description] An English-language description, or a Language Map
5
+ */
6
+ export default class Verb {
7
+ constructor(id, description) {
8
+ //let id = id || 'http://adlnet.gov/expapi/verbs/launched'
9
+ // if passed a verb object then copy and return
10
+ if (id && id.id) {
11
+ for (var i in id) {
12
+ this[i] = id[i]
13
+ }
14
+ return
15
+ }
16
+ // save id and build language map
17
+ this.id = id || 'http://adlnet.gov/expapi/verbs/launched'
18
+ if (description) {
19
+ if (typeof description === 'string' || description instanceof String) {
20
+ this.display = { 'en-US': description }
21
+ } else {
22
+ this.display = description
23
+ }
24
+ }
25
+ }
26
+
27
+ toString() {
28
+ if (this.display && (this.display['en-US'] || this.display['en']))
29
+ return this.display['en-US'] || this.display['en']
30
+ else return this.id
31
+ }
32
+
33
+ isValid() {
34
+ return this.id
35
+ }
36
+ }