qti3-item-player-vue3 0.2.4 → 0.2.5
Sign up to get free protection for your applications and to get access to all the features.
package/dist/assets/pci/pci.html
CHANGED
@@ -127,6 +127,8 @@ const QTI_PCI_API = {
|
|
127
127
|
properties: null,
|
128
128
|
contextVariables: null,
|
129
129
|
templateVariables: null,
|
130
|
+
stylesheets: null,
|
131
|
+
catalogInfo: null,
|
130
132
|
moduleResolution: null,
|
131
133
|
instance: null,
|
132
134
|
response: null,
|
@@ -137,107 +139,125 @@ const QTI_PCI_API = {
|
|
137
139
|
height: 0,
|
138
140
|
onQtiInteractionChanged: null,
|
139
141
|
|
140
|
-
getInstance
|
142
|
+
getInstance () {
|
141
143
|
return this.instance;
|
142
144
|
},
|
143
145
|
|
144
|
-
setInstance
|
146
|
+
setInstance (instance) {
|
145
147
|
this.instance = instance;
|
146
148
|
},
|
147
149
|
|
148
|
-
getTypeIdentifier
|
150
|
+
getTypeIdentifier () {
|
149
151
|
return this.typeIdentifier;
|
150
152
|
},
|
151
153
|
|
152
|
-
setTypeIdentifier
|
154
|
+
setTypeIdentifier (typeIdentifier) {
|
153
155
|
this.typeIdentifier = typeIdentifier;
|
154
156
|
},
|
155
157
|
|
156
|
-
getResponseIdentifier
|
158
|
+
getResponseIdentifier () {
|
157
159
|
return this.responseIdentifier;
|
158
160
|
},
|
159
161
|
|
160
|
-
setResponseIdentifier
|
162
|
+
setResponseIdentifier (responseIdentifier) {
|
161
163
|
this.responseIdentifier = responseIdentifier;
|
162
164
|
},
|
163
165
|
|
164
|
-
getPci
|
166
|
+
getPci () {
|
165
167
|
return this.pci;
|
166
168
|
},
|
167
169
|
|
168
|
-
setPci
|
170
|
+
setPci (pci) {
|
169
171
|
this.pci = pci;
|
170
172
|
},
|
171
173
|
|
172
|
-
getDom
|
174
|
+
getDom () {
|
173
175
|
return this.dom;
|
174
176
|
},
|
175
177
|
|
176
|
-
setDom
|
178
|
+
setDom (dom) {
|
177
179
|
this.dom = dom;
|
178
180
|
},
|
179
181
|
|
180
|
-
getProperties
|
182
|
+
getProperties () {
|
181
183
|
return this.properties;
|
182
184
|
},
|
183
185
|
|
184
|
-
setProperties
|
186
|
+
setProperties (properties) {
|
185
187
|
this.properties = properties;
|
186
188
|
},
|
187
189
|
|
188
|
-
getContextVariables
|
190
|
+
getContextVariables () {
|
189
191
|
return this.contextVariables;
|
190
192
|
},
|
191
193
|
|
192
|
-
setContextVariables
|
194
|
+
setContextVariables (contextVariables) {
|
193
195
|
this.contextVariables = contextVariables;
|
194
196
|
},
|
195
197
|
|
196
|
-
getTemplateVariables
|
198
|
+
getTemplateVariables () {
|
197
199
|
return this.templateVariables;
|
198
200
|
},
|
199
201
|
|
200
|
-
setTemplateVariables
|
202
|
+
setTemplateVariables (templateVariables) {
|
201
203
|
this.templateVariables = templateVariables;
|
202
204
|
},
|
203
205
|
|
204
|
-
|
206
|
+
getStylesheets () {
|
207
|
+
return this.stylesheets;
|
208
|
+
},
|
209
|
+
|
210
|
+
setStylesheets (stylesheets) {
|
211
|
+
if (typeof stylesheets === 'undefined') return;
|
212
|
+
this.stylesheets = stylesheets;
|
213
|
+
},
|
214
|
+
|
215
|
+
getCatalogInfo () {
|
216
|
+
return this.catalogInfo;
|
217
|
+
},
|
218
|
+
|
219
|
+
setCatalogInfo (catalogInfo) {
|
220
|
+
if (typeof catalogInfo === 'undefined') return;
|
221
|
+
this.catalogInfo = catalogInfo;
|
222
|
+
},
|
223
|
+
|
224
|
+
getBoundTo () {
|
205
225
|
return this.boundTo;
|
206
226
|
},
|
207
227
|
|
208
|
-
setBoundTo
|
228
|
+
setBoundTo (boundTo) {
|
209
229
|
this.boundTo = boundTo;
|
210
230
|
},
|
211
231
|
|
212
|
-
getStatus
|
232
|
+
getStatus () {
|
213
233
|
return this.status;
|
214
234
|
},
|
215
235
|
|
216
|
-
setStatus
|
236
|
+
setStatus (status) {
|
217
237
|
this.status = status;
|
218
238
|
},
|
219
239
|
|
220
|
-
getModuleResolution
|
240
|
+
getModuleResolution () {
|
221
241
|
return this.moduleResolution;
|
222
242
|
},
|
223
243
|
|
224
|
-
setModuleResolution
|
244
|
+
setModuleResolution (moduleResolution) {
|
225
245
|
this.moduleResolution = moduleResolution;
|
226
246
|
},
|
227
247
|
|
228
|
-
getState
|
248
|
+
getState () {
|
229
249
|
return this.state;
|
230
250
|
},
|
231
251
|
|
232
|
-
setState
|
252
|
+
setState (state) {
|
233
253
|
this.state = (typeof state === 'undefined') ? null : JSON.parse(state);
|
234
254
|
},
|
235
255
|
|
236
|
-
getStateFromState
|
256
|
+
getStateFromState () {
|
237
257
|
return (this.state === null) ? null : this.state.state;
|
238
258
|
},
|
239
259
|
|
240
|
-
getResponseFromState
|
260
|
+
getResponseFromState () {
|
241
261
|
return (this.state === null) ? undefined : this.state.response;
|
242
262
|
},
|
243
263
|
|
@@ -246,7 +266,7 @@ const QTI_PCI_API = {
|
|
246
266
|
* Upon completion, call NotifyPciStateReady, passing the
|
247
267
|
* stringified response and state as parameters.
|
248
268
|
*/
|
249
|
-
getInteractionState
|
269
|
+
getInteractionState () {
|
250
270
|
const obj = {
|
251
271
|
response: null,
|
252
272
|
state: null
|
@@ -265,7 +285,7 @@ const QTI_PCI_API = {
|
|
265
285
|
this.NotifyPciStateReady(JSON.stringify(obj));
|
266
286
|
},
|
267
287
|
|
268
|
-
initialize
|
288
|
+
initialize (pci) {
|
269
289
|
this.setDom(document.getElementById('qti3-player-pci-element'));
|
270
290
|
this.setPci(pci);
|
271
291
|
this.setTypeIdentifier(pci.typeIdentifier);
|
@@ -273,13 +293,16 @@ const QTI_PCI_API = {
|
|
273
293
|
this.setModuleResolution(pci.moduleResolution);
|
274
294
|
this.setContextVariables(pci.contextVariables);
|
275
295
|
this.setTemplateVariables(pci.templateVariables);
|
296
|
+
this.setStylesheets(pci.stylesheets);
|
297
|
+
this.setCatalogInfo(pci.catalogInfo);
|
276
298
|
this.setBoundTo(pci.boundTo);
|
277
299
|
this.setStatus(pci.status)
|
278
300
|
|
279
301
|
this.trackResize(this.getDom());
|
280
302
|
this.trackQtiInteractionChanged(this.getDom());
|
303
|
+
this.injectStylesheets();
|
281
304
|
this.injectClassAttribute();
|
282
|
-
|
305
|
+
this.injectMarkup();
|
283
306
|
this.launchPci(
|
284
307
|
this.getTypeIdentifier(),
|
285
308
|
this.getDom(),
|
@@ -293,13 +316,13 @@ const QTI_PCI_API = {
|
|
293
316
|
);
|
294
317
|
},
|
295
318
|
|
296
|
-
injectClassAttribute
|
319
|
+
injectClassAttribute () {
|
297
320
|
if (this.getPci().classAttribute.length == 0) return
|
298
321
|
let wrapperEl = document.getElementById('qti3-player-pci-wrapper');
|
299
322
|
wrapperEl.classList.add(this.getPci().classAttribute);
|
300
323
|
},
|
301
324
|
|
302
|
-
injectMarkup
|
325
|
+
injectMarkup () {
|
303
326
|
this.getDom().innerHTML =
|
304
327
|
`<div
|
305
328
|
id="qti3-player-pci-markup"
|
@@ -307,7 +330,21 @@ const QTI_PCI_API = {
|
|
307
330
|
>${this.getPci().markup}</div>`;
|
308
331
|
},
|
309
332
|
|
310
|
-
|
333
|
+
injectStylesheets () {
|
334
|
+
const stylesheets = this.getStylesheets();
|
335
|
+
if (stylesheets === null) return;
|
336
|
+
stylesheets.forEach((stylesheet) => {
|
337
|
+
// Get the head element
|
338
|
+
const head = document.head;
|
339
|
+
const link = document.createElement('link');
|
340
|
+
link.rel = 'stylesheet';
|
341
|
+
link.href = stylesheet.href;
|
342
|
+
link.type = stylesheet.type;
|
343
|
+
head.appendChild(link);
|
344
|
+
});
|
345
|
+
},
|
346
|
+
|
347
|
+
getModuleDependencies () {
|
311
348
|
// Init qtiCustomInteractionContext as the first dependency
|
312
349
|
let dependencies = ['qtiCustomInteractionContext'];
|
313
350
|
|
@@ -333,7 +370,7 @@ const QTI_PCI_API = {
|
|
333
370
|
* @param {Object} boundTo The response variable this PCI is bound to and its value
|
334
371
|
* @param {String} status Item lifecycle status; e.g., 'interacting'
|
335
372
|
*/
|
336
|
-
launchPci
|
373
|
+
launchPci (
|
337
374
|
typeIdentifier,
|
338
375
|
dom,
|
339
376
|
responseIdentifier,
|
@@ -374,7 +411,7 @@ const QTI_PCI_API = {
|
|
374
411
|
});
|
375
412
|
},
|
376
413
|
|
377
|
-
NotifyPciChildLoaded
|
414
|
+
NotifyPciChildLoaded () {
|
378
415
|
if (self == top) return;
|
379
416
|
|
380
417
|
// Extract the identifier qs param
|
@@ -384,7 +421,7 @@ const QTI_PCI_API = {
|
|
384
421
|
window.parent.postMessage({ message: 'PciChildLoaded', identifier: this.getResponseIdentifier(), success: true },'*');
|
385
422
|
},
|
386
423
|
|
387
|
-
NotifyPciReady
|
424
|
+
NotifyPciReady (instance, state) {
|
388
425
|
this.setInstance(instance);
|
389
426
|
|
390
427
|
if (self == top) return;
|
@@ -397,7 +434,7 @@ const QTI_PCI_API = {
|
|
397
434
|
window.parent.postMessage({ message: 'PciReady', identifier: this.getResponseIdentifier(), width: computedWidth, height: computedHeight, success: true },'*');
|
398
435
|
},
|
399
436
|
|
400
|
-
NotifyPciDone
|
437
|
+
NotifyPciDone (instance, response, state, status) {
|
401
438
|
if (self == top) return;
|
402
439
|
|
403
440
|
const stringifiedState = JSON.stringify({
|
@@ -408,12 +445,12 @@ const QTI_PCI_API = {
|
|
408
445
|
window.parent.postMessage({ message: 'PciDone', identifier: this.getResponseIdentifier(), state: stringifiedStateObject, status: status, success: true },'*');
|
409
446
|
},
|
410
447
|
|
411
|
-
NotifyPciStateReady
|
448
|
+
NotifyPciStateReady (stringifiedStateObject) {
|
412
449
|
if (self == top) return;
|
413
450
|
window.parent.postMessage({ message: 'PciGetState_Reply', identifier: this.getResponseIdentifier(), state: stringifiedStateObject, success: true },'*');
|
414
451
|
},
|
415
452
|
|
416
|
-
NotifyPciInteractionChanged
|
453
|
+
NotifyPciInteractionChanged (valid, value) {
|
417
454
|
if (self == top) return;
|
418
455
|
|
419
456
|
const stringifiedState = JSON.stringify({
|
@@ -430,7 +467,7 @@ const QTI_PCI_API = {
|
|
430
467
|
* @method getQueryParameterByName
|
431
468
|
* @param {String} name The name of the paramter to get from the URL.
|
432
469
|
*/
|
433
|
-
getQueryParameterByName
|
470
|
+
getQueryParameterByName (name) {
|
434
471
|
let regex = new RegExp("[\\?&]" + name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]') + '=([^&#]*)');
|
435
472
|
let results = regex.exec(window.location.search);
|
436
473
|
|
@@ -439,7 +476,7 @@ const QTI_PCI_API = {
|
|
439
476
|
return decodeURIComponent(results[1].replace(/\+/g, " "));
|
440
477
|
},
|
441
478
|
|
442
|
-
bindWindowEventListener
|
479
|
+
bindWindowEventListener (element, eventName, eventHandler) {
|
443
480
|
if (element.addEventListener) {
|
444
481
|
element.addEventListener(eventName, eventHandler, false);
|
445
482
|
} else if (element.attachEvent) {
|
@@ -448,7 +485,7 @@ const QTI_PCI_API = {
|
|
448
485
|
}
|
449
486
|
},
|
450
487
|
|
451
|
-
trackResize
|
488
|
+
trackResize (element) {
|
452
489
|
// create a mutation observer instance
|
453
490
|
let observer = new MutationObserver(function(mutations) {
|
454
491
|
mutations.forEach(function(mutation) {
|
@@ -475,12 +512,12 @@ const QTI_PCI_API = {
|
|
475
512
|
});
|
476
513
|
},
|
477
514
|
|
478
|
-
trackQtiInteractionChanged
|
515
|
+
trackQtiInteractionChanged (domElement) {
|
479
516
|
this.onQtiInteractionChanged = this.onQtiInteractionChangedHandler.bind(this);
|
480
517
|
domElement.addEventListener('qti-interaction-changed', this.onQtiInteractionChanged);
|
481
518
|
},
|
482
519
|
|
483
|
-
onQtiInteractionChangedHandler
|
520
|
+
onQtiInteractionChangedHandler (event) {
|
484
521
|
event.preventDefault();
|
485
522
|
|
486
523
|
if (typeof event.detail === 'undefined') {
|
@@ -1557,6 +1557,34 @@ class re {
|
|
1557
1557
|
computeNodeContext(t) {
|
1558
1558
|
return t === null || t.$options.name === "QtiAssessmentItem" ? "ITEM" : t.$options.name === "QtiAssessmentTest" ? "TEST" : this.computeNodeContext(t.$parent);
|
1559
1559
|
}
|
1560
|
+
base64ToBytes(t) {
|
1561
|
+
const i = atob(t);
|
1562
|
+
return Uint8Array.from(i, (s) => s.codePointAt(0));
|
1563
|
+
}
|
1564
|
+
bytesToBase64(t) {
|
1565
|
+
const i = Array.from(
|
1566
|
+
t,
|
1567
|
+
(s) => String.fromCodePoint(s)
|
1568
|
+
).join("");
|
1569
|
+
return btoa(i);
|
1570
|
+
}
|
1571
|
+
/**
|
1572
|
+
* @description Utility method to base64-encode arbitrary bytes.
|
1573
|
+
* @param {*} bytes
|
1574
|
+
* @returns base64-encoded string
|
1575
|
+
*/
|
1576
|
+
encodeBytesToBase64(t) {
|
1577
|
+
const i = new TextEncoder();
|
1578
|
+
return this.bytesToBase64(i.encode(t));
|
1579
|
+
}
|
1580
|
+
/**
|
1581
|
+
* @description Utility method to decode base64 bytes.
|
1582
|
+
* @param {*} base64
|
1583
|
+
* @returns decoded string
|
1584
|
+
*/
|
1585
|
+
decodeBase64ToBytes(t) {
|
1586
|
+
return new TextDecoder().decode(this.base64ToBytes(t));
|
1587
|
+
}
|
1560
1588
|
}
|
1561
1589
|
const yv = new re(), S = {
|
1562
1590
|
player: null,
|
@@ -9026,6 +9054,12 @@ const J1 = {
|
|
9026
9054
|
};
|
9027
9055
|
},
|
9028
9056
|
methods: {
|
9057
|
+
getHref() {
|
9058
|
+
return this.href;
|
9059
|
+
},
|
9060
|
+
getType() {
|
9061
|
+
return this.type;
|
9062
|
+
},
|
9029
9063
|
/**
|
9030
9064
|
* @description Pull the stylesheet from the Href URI.
|
9031
9065
|
* Wrap stylesheet contents in a style element, then inject into the
|
@@ -28837,6 +28871,8 @@ const ah = new j(), Nm = new re(), NO = {
|
|
28837
28871
|
configuration: null,
|
28838
28872
|
templateVariables: [],
|
28839
28873
|
contextVariables: [],
|
28874
|
+
stylesheets: [],
|
28875
|
+
catalogInfoNode: null,
|
28840
28876
|
uniqueId: null,
|
28841
28877
|
pciIframe: null,
|
28842
28878
|
isReady: !1,
|
@@ -28995,36 +29031,47 @@ const ah = new j(), Nm = new re(), NO = {
|
|
28995
29031
|
*/
|
28996
29032
|
validateChildren() {
|
28997
29033
|
if (!this.$slots.default) return;
|
28998
|
-
let e = !1, t = !1, i = !1, s = !1, n = !1;
|
28999
|
-
this.$slots.default().forEach((
|
29000
|
-
if (ah.isValidSlot(
|
29001
|
-
if (
|
29002
|
-
if (t || i || s || n)
|
29034
|
+
let e = !1, t = !1, i = !1, s = !1, n = !1, r = !1, a = !1;
|
29035
|
+
this.$slots.default().forEach((o) => {
|
29036
|
+
if (ah.isValidSlot(o)) {
|
29037
|
+
if (o.type.name === "QtiPrompt") {
|
29038
|
+
if (t || i || s || n || r || a)
|
29003
29039
|
throw new l("Invalid element order. qti-prompt must be the first element");
|
29004
29040
|
if (!e) return e = !0;
|
29005
29041
|
throw new l("Maximum of 1 qti-prompt element permitted");
|
29006
29042
|
}
|
29007
|
-
if (
|
29008
|
-
if (t || s || n)
|
29043
|
+
if (o.type.name === "QtiInteractionModules") {
|
29044
|
+
if (t || s || n || r || a)
|
29009
29045
|
throw new l("Invalid element order: qti-interaction-modules");
|
29010
29046
|
if (!i) return i = !0;
|
29011
29047
|
throw new l("Maximum of 1 qti-interaction-modules element permitted");
|
29012
29048
|
}
|
29013
|
-
if (
|
29014
|
-
if (s || n)
|
29049
|
+
if (o.type.name === "QtiInteractionMarkup") {
|
29050
|
+
if (s || n || r || a)
|
29015
29051
|
throw new l("Invalid element order: qti-interaction-markup");
|
29016
29052
|
if (!t) return t = !0;
|
29017
29053
|
throw new l("Maximum of 1 qti-interaction-markup element permitted");
|
29018
29054
|
}
|
29019
|
-
if (
|
29020
|
-
if (s)
|
29055
|
+
if (o.type.name === "QtiTemplateVariable") {
|
29056
|
+
if (s || r || a)
|
29021
29057
|
throw new l("Invalid element order: qti-template-variable");
|
29022
|
-
|
29023
|
-
|
29058
|
+
return n = !0;
|
29059
|
+
}
|
29060
|
+
if (o.type.name === "QtiContextVariable") {
|
29061
|
+
if (r || a)
|
29062
|
+
throw new l("Invalid element order: qti-context-variable");
|
29063
|
+
return s = !0;
|
29064
|
+
}
|
29065
|
+
if (o.type.name === "QtiStylesheet") {
|
29066
|
+
if (a)
|
29067
|
+
throw new l("Invalid element order: qti-stylesheet");
|
29068
|
+
return r = !0;
|
29024
29069
|
}
|
29025
|
-
if (
|
29026
|
-
|
29027
|
-
|
29070
|
+
if (o.type.name === "QtiCatalogInfo") {
|
29071
|
+
if (!a) return a = !0;
|
29072
|
+
throw new l("Maximum of 1 qti-catalog-info element permitted");
|
29073
|
+
}
|
29074
|
+
throw new l('Node is not permitted inside QtiPortableCustomInteraction: "' + o.type.name + '"');
|
29028
29075
|
}
|
29029
29076
|
});
|
29030
29077
|
},
|
@@ -29046,6 +29093,12 @@ const ah = new j(), Nm = new re(), NO = {
|
|
29046
29093
|
case "QtiContextVariable":
|
29047
29094
|
this.contextVariables.push(i);
|
29048
29095
|
break;
|
29096
|
+
case "QtiStylesheet":
|
29097
|
+
this.stylesheets.push(i);
|
29098
|
+
break;
|
29099
|
+
case "QtiCatalogInfo":
|
29100
|
+
this.catalogInfoNode = i;
|
29101
|
+
break;
|
29049
29102
|
}
|
29050
29103
|
}), this.priorState !== null && this.restoreValue(this.priorState.value, this.priorState.state), this.initialWidth = this.$refs.root.clientWidth);
|
29051
29104
|
},
|
@@ -29116,6 +29169,17 @@ const ah = new j(), Nm = new re(), NO = {
|
|
29116
29169
|
e[this.templateVariables[t].getIdentifier()] = this.templateVariables[t].evaluate();
|
29117
29170
|
return e;
|
29118
29171
|
},
|
29172
|
+
getStylesheets() {
|
29173
|
+
let e = [];
|
29174
|
+
for (let t = 0; t < this.stylesheets.length; t++) {
|
29175
|
+
const i = this.stylesheets[t];
|
29176
|
+
e.push({ href: i.getHref(), type: i.getType() });
|
29177
|
+
}
|
29178
|
+
return e;
|
29179
|
+
},
|
29180
|
+
getCatalogInfo() {
|
29181
|
+
return this.catalogInfoNode;
|
29182
|
+
},
|
29119
29183
|
getModules() {
|
29120
29184
|
return this.modules;
|
29121
29185
|
},
|
@@ -29158,6 +29222,8 @@ const ah = new j(), Nm = new re(), NO = {
|
|
29158
29222
|
boundTo: this.getResponseVariable(),
|
29159
29223
|
templateVariables: this.getTemplateVariables(),
|
29160
29224
|
contextVariables: this.getContextVariables(),
|
29225
|
+
stylesheets: this.getStylesheets(),
|
29226
|
+
catalogInfo: this.getCatalogInfo(),
|
29161
29227
|
module: this.module,
|
29162
29228
|
modules: this.getModules(),
|
29163
29229
|
moduleResolution: this.getConfiguration(),
|