@pie-element/multiple-choice 13.3.5-ng.0 → 13.4.0-beta.0
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.
- package/CHANGELOG.json +1972 -0
- package/CHANGELOG.md +2741 -0
- package/LICENSE.md +5 -0
- package/PRINT.md +35 -0
- package/README.md +56 -0
- package/choice.png +0 -0
- package/configure/CHANGELOG.json +1387 -0
- package/configure/CHANGELOG.md +2081 -0
- package/configure/lib/__tests__/root.test.js +279 -0
- package/configure/lib/defaults.js +203 -0
- package/configure/lib/defaults.js.map +1 -0
- package/configure/lib/index.js +203 -0
- package/configure/lib/index.js.map +1 -0
- package/configure/lib/main.js +484 -0
- package/configure/lib/main.js.map +1 -0
- package/configure/lib/utils.js +18 -0
- package/configure/lib/utils.js.map +1 -0
- package/configure/package.json +22 -0
- package/controller/CHANGELOG.json +527 -0
- package/controller/CHANGELOG.md +1412 -0
- package/controller/lib/__tests__/index.test.js +561 -0
- package/controller/lib/__tests__/utils.test.js +8 -0
- package/controller/lib/defaults.js +33 -0
- package/controller/lib/defaults.js.map +1 -0
- package/controller/lib/index.js +298 -0
- package/controller/lib/index.js.map +1 -0
- package/controller/lib/utils.js +15 -0
- package/controller/lib/utils.js.map +1 -0
- package/controller/package.json +15 -0
- package/docs/config-schema.json +2993 -0
- package/docs/config-schema.json.md +2217 -0
- package/docs/demo/config.js +8 -0
- package/docs/demo/generate.js +61 -0
- package/docs/demo/index.html +1 -0
- package/docs/demo/pie.manifest.json +11 -0
- package/docs/demo/session.js +7 -0
- package/docs/pie-schema.json +1332 -0
- package/docs/pie-schema.json.md +1015 -0
- package/lib/__tests__/choice-input-test.js +49 -0
- package/lib/__tests__/choice-input.test.js +49 -0
- package/lib/__tests__/index-test.js +206 -0
- package/lib/__tests__/index.test.js +221 -0
- package/lib/__tests__/key-events-test.js +95 -0
- package/lib/__tests__/key-events.test.js +107 -0
- package/lib/__tests__/multiple-choice-test.js +101 -0
- package/lib/__tests__/multiple-choice.test.js +256 -0
- package/lib/__tests__/session-updater-test.js +70 -0
- package/lib/__tests__/session-updater.test.js +70 -0
- package/lib/choice-input.js +383 -0
- package/lib/choice-input.js.map +1 -0
- package/lib/choice.js +192 -0
- package/lib/choice.js.map +1 -0
- package/lib/feedback-tick.js +134 -0
- package/lib/feedback-tick.js.map +1 -0
- package/lib/index.js +405 -0
- package/lib/index.js.map +1 -0
- package/lib/main.js +63 -0
- package/lib/main.js.map +1 -0
- package/lib/multiple-choice.js +399 -0
- package/lib/multiple-choice.js.map +1 -0
- package/lib/print.js +94 -0
- package/lib/print.js.map +1 -0
- package/lib/session-updater.js +37 -0
- package/lib/session-updater.js.map +1 -0
- package/lib/utils.js +14 -0
- package/lib/utils.js.map +1 -0
- package/module/configure.js +1 -0
- package/module/controller.js +3045 -0
- package/module/demo.js +86 -0
- package/module/element.js +1 -0
- package/module/index.html +21 -0
- package/module/manifest.json +14 -0
- package/module/print-demo.js +124 -0
- package/module/print.html +18 -0
- package/module/print.js +1 -17945
- package/package.json +28 -94
- package/configure.js +0 -2
- package/controller.js +0 -1
- package/dist/author/defaults.d.ts +0 -205
- package/dist/author/defaults.js +0 -151
- package/dist/author/index.d.ts +0 -26
- package/dist/author/index.js +0 -119
- package/dist/author/main.d.ts +0 -34
- package/dist/author/main.js +0 -287
- package/dist/author/utils.d.ts +0 -9
- package/dist/author/utils.js +0 -7
- package/dist/browser/Radio-Bbu0BH_k.js +0 -9581
- package/dist/browser/Radio-Bbu0BH_k.js.map +0 -1
- package/dist/browser/author/index.js +0 -37436
- package/dist/browser/author/index.js.map +0 -1
- package/dist/browser/controller/index.js +0 -204
- package/dist/browser/controller/index.js.map +0 -1
- package/dist/browser/delivery/index.js +0 -251
- package/dist/browser/delivery/index.js.map +0 -1
- package/dist/browser/dist-CHbLnyuX.js +0 -111
- package/dist/browser/dist-CHbLnyuX.js.map +0 -1
- package/dist/browser/main-DahQxQZC.js +0 -2451
- package/dist/browser/main-DahQxQZC.js.map +0 -1
- package/dist/browser/multiple-choice.css +0 -2
- package/dist/browser/print/index.js +0 -43
- package/dist/browser/print/index.js.map +0 -1
- package/dist/controller/defaults.d.ts +0 -35
- package/dist/controller/defaults.js +0 -29
- package/dist/controller/index.d.ts +0 -65
- package/dist/controller/index.js +0 -129
- package/dist/controller/utils.d.ts +0 -10
- package/dist/controller/utils.js +0 -8
- package/dist/delivery/choice-input.d.ts +0 -44
- package/dist/delivery/choice-input.js +0 -280
- package/dist/delivery/choice.d.ts +0 -20
- package/dist/delivery/choice.js +0 -105
- package/dist/delivery/feedback-tick.d.ts +0 -20
- package/dist/delivery/feedback-tick.js +0 -104
- package/dist/delivery/index.d.ts +0 -37
- package/dist/delivery/index.js +0 -215
- package/dist/delivery/main.d.ts +0 -31
- package/dist/delivery/main.js +0 -51
- package/dist/delivery/multiple-choice.d.ts +0 -61
- package/dist/delivery/multiple-choice.js +0 -245
- package/dist/delivery/session-updater.d.ts +0 -10
- package/dist/delivery/session-updater.js +0 -9
- package/dist/delivery/utils.d.ts +0 -10
- package/dist/delivery/utils.js +0 -4
- package/dist/index.d.ts +0 -1
- package/dist/index.iife.d.ts +0 -8
- package/dist/index.iife.js +0 -148
- package/dist/index.js +0 -2
- package/dist/node_modules/.bun/clsx@2.1.1/node_modules/clsx/dist/clsx.js +0 -16
- package/dist/print/index.d.ts +0 -15
- package/dist/print/index.js +0 -43
- package/dist/runtime-support.d.ts +0 -12
- package/dist/runtime-support.js +0 -12
- package/module/print.js.map +0 -1
package/lib/index.js
ADDED
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.isComplete = exports.default = void 0;
|
|
8
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
|
+
var _main = _interopRequireDefault(require("./main"));
|
|
10
|
+
var _react = _interopRequireDefault(require("react"));
|
|
11
|
+
var _client = require("react-dom/client");
|
|
12
|
+
var _lodashEs = require("lodash-es");
|
|
13
|
+
var _debug = _interopRequireDefault(require("debug"));
|
|
14
|
+
var _piePlayerEvents = require("@pie-framework/pie-player-events");
|
|
15
|
+
var _mathRendering = require("@pie-lib/math-rendering");
|
|
16
|
+
var _renderUi = require("@pie-lib/render-ui");
|
|
17
|
+
var _sessionUpdater = require("./session-updater");
|
|
18
|
+
var _utils = require("./utils");
|
|
19
|
+
const log = (0, _debug.default)('pie-ui:multiple-choice');
|
|
20
|
+
const isComplete = (session, model, audioComplete, elementContext) => {
|
|
21
|
+
const {
|
|
22
|
+
autoplayAudioEnabled,
|
|
23
|
+
completeAudioEnabled
|
|
24
|
+
} = model || {};
|
|
25
|
+
|
|
26
|
+
// check audio completion if audio settings are enabled and audio actually exists
|
|
27
|
+
if (autoplayAudioEnabled && completeAudioEnabled && !audioComplete) {
|
|
28
|
+
if (elementContext) {
|
|
29
|
+
const audio = elementContext.querySelector('audio');
|
|
30
|
+
const isInsidePrompt = audio && audio.closest('#preview-prompt');
|
|
31
|
+
|
|
32
|
+
// only require audio completion if audio exists and is inside the prompt
|
|
33
|
+
if (audio && isInsidePrompt) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (!session || !session.value) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
const {
|
|
42
|
+
choiceMode,
|
|
43
|
+
minSelections = 1,
|
|
44
|
+
maxSelections
|
|
45
|
+
} = model || {};
|
|
46
|
+
const selections = session.value.length || 0;
|
|
47
|
+
if (choiceMode === 'radio') {
|
|
48
|
+
return !!selections;
|
|
49
|
+
}
|
|
50
|
+
if (selections < minSelections || (0, _utils.exceedsMaxSelections)(selections, maxSelections)) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
return true;
|
|
54
|
+
};
|
|
55
|
+
exports.isComplete = isComplete;
|
|
56
|
+
function getPlayerAttributes(element) {
|
|
57
|
+
const player = element.closest('pie-player') || element.closest('pie-item-player');
|
|
58
|
+
if (!player) {
|
|
59
|
+
return {
|
|
60
|
+
baseHeadingLevel: undefined,
|
|
61
|
+
includeSrHeading: true
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
const getRaw = (camelCaseName, hyphenatedName, allLowerName) => {
|
|
65
|
+
let raw = player[camelCaseName];
|
|
66
|
+
|
|
67
|
+
// fallback in case someone sets via HTML attribute manually
|
|
68
|
+
if (raw == null) {
|
|
69
|
+
raw = player.getAttribute(hyphenatedName) ?? player.getAttribute(allLowerName);
|
|
70
|
+
}
|
|
71
|
+
return raw;
|
|
72
|
+
};
|
|
73
|
+
const levelRaw = getRaw('baseHeadingLevel', 'base-heading-level', 'baseheadinglevel');
|
|
74
|
+
const level = parseInt(levelRaw, 10);
|
|
75
|
+
const baseHeadingLevel = Number.isFinite(level) && level >= 1 && level <= 6 ? level : undefined;
|
|
76
|
+
const srRaw = getRaw('includeSrHeading', 'include-sr-heading', 'includesrheading');
|
|
77
|
+
const includeSrHeading = srRaw == null ? true : srRaw !== false && srRaw !== 'false';
|
|
78
|
+
return {
|
|
79
|
+
baseHeadingLevel,
|
|
80
|
+
includeSrHeading
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// Resolves heading attributes for a custom element, preferring explicit instance
|
|
85
|
+
// properties (set by a parent element such as EBSR) over player-level attributes.
|
|
86
|
+
function resolveHeadingProps(element) {
|
|
87
|
+
const fromPlayer = getPlayerAttributes(element);
|
|
88
|
+
return {
|
|
89
|
+
baseHeadingLevel: element._baseHeadingLevel !== undefined ? element._baseHeadingLevel : fromPlayer.baseHeadingLevel,
|
|
90
|
+
includeSrHeading: element._includeSrHeading !== undefined ? element._includeSrHeading : fromPlayer.includeSrHeading
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
class MultipleChoice extends HTMLElement {
|
|
94
|
+
constructor() {
|
|
95
|
+
super();
|
|
96
|
+
(0, _defineProperty2.default)(this, "_scheduleMathRender", () => {
|
|
97
|
+
if (this._mathRenderPending) return;
|
|
98
|
+
this._mathRenderPending = true;
|
|
99
|
+
requestAnimationFrame(() => {
|
|
100
|
+
if (this._mathObserver) {
|
|
101
|
+
this._mathObserver.disconnect();
|
|
102
|
+
}
|
|
103
|
+
log('render complete - render math');
|
|
104
|
+
(0, _mathRendering.renderMath)(this);
|
|
105
|
+
this._mathRenderPending = false;
|
|
106
|
+
setTimeout(() => {
|
|
107
|
+
if (this._mathObserver) {
|
|
108
|
+
this._mathObserver.observe(this, {
|
|
109
|
+
childList: true,
|
|
110
|
+
subtree: true
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}, 50);
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
this._model = null;
|
|
117
|
+
this._session = null;
|
|
118
|
+
this._options = null; // added for ebsr print mode detection
|
|
119
|
+
this.audioComplete = false;
|
|
120
|
+
this._boundHandleKeyDown = this.handleKeyDown.bind(this);
|
|
121
|
+
this._keyboardEventsEnabled = false;
|
|
122
|
+
this._audioInitialized = false;
|
|
123
|
+
this._root = null;
|
|
124
|
+
this._mathObserver = null;
|
|
125
|
+
this._mathRenderPending = false;
|
|
126
|
+
this._rerender = (0, _lodashEs.debounce)(() => {
|
|
127
|
+
if (this._model && this._session) {
|
|
128
|
+
var element = /*#__PURE__*/_react.default.createElement(_main.default, {
|
|
129
|
+
model: this._model,
|
|
130
|
+
session: this._session,
|
|
131
|
+
options: this._options,
|
|
132
|
+
onChoiceChanged: this._onChange.bind(this),
|
|
133
|
+
onShowCorrectToggle: this.onShowCorrectToggle.bind(this),
|
|
134
|
+
...resolveHeadingProps(this)
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
//TODO: aria-label is set in the _rerender because we need to change it when the model.choiceMode is updated. Consider revisiting the placement of the aria-label setting in the _rerender
|
|
138
|
+
this.setAttribute('aria-label', this._model.choiceMode === 'radio' ? 'Multiple Choice Question' : 'Multiple Correct Answer Question');
|
|
139
|
+
this.setAttribute('role', 'region');
|
|
140
|
+
this.setLangAttribute();
|
|
141
|
+
this._initMathObserver();
|
|
142
|
+
if (!this._root) {
|
|
143
|
+
this._root = (0, _client.createRoot)(this);
|
|
144
|
+
}
|
|
145
|
+
this._root.render(element);
|
|
146
|
+
if (this._model.keyboardEventsEnabled === true && !this._keyboardEventsEnabled) {
|
|
147
|
+
this.enableKeyboardEvents();
|
|
148
|
+
}
|
|
149
|
+
} else {
|
|
150
|
+
log('skip');
|
|
151
|
+
}
|
|
152
|
+
}, 50, {
|
|
153
|
+
leading: false,
|
|
154
|
+
trailing: true
|
|
155
|
+
});
|
|
156
|
+
this._dispatchResponseChanged = (0, _lodashEs.debounce)(() => {
|
|
157
|
+
this.dispatchEvent(new _piePlayerEvents.SessionChangedEvent(this.tagName.toLowerCase(), isComplete(this._session, this._model, this.audioComplete, this)));
|
|
158
|
+
});
|
|
159
|
+
this._dispatchModelSet = (0, _lodashEs.debounce)(() => {
|
|
160
|
+
this.dispatchEvent(new _piePlayerEvents.ModelSetEvent(this.tagName.toLowerCase(), isComplete(this._session, this._model, this.audioComplete, this), this._model !== undefined));
|
|
161
|
+
}, 50, {
|
|
162
|
+
leading: false,
|
|
163
|
+
trailing: true
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
_initMathObserver() {
|
|
167
|
+
if (this._mathObserver) return;
|
|
168
|
+
this._mathObserver = new MutationObserver(this._scheduleMathRender);
|
|
169
|
+
this._mathObserver.observe(this, {
|
|
170
|
+
childList: true,
|
|
171
|
+
subtree: true
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
_disconnectMathObserver() {
|
|
175
|
+
if (this._mathObserver) {
|
|
176
|
+
this._mathObserver.disconnect();
|
|
177
|
+
this._mathObserver = null;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
onShowCorrectToggle() {
|
|
181
|
+
(0, _mathRendering.renderMath)(this);
|
|
182
|
+
}
|
|
183
|
+
setLangAttribute() {
|
|
184
|
+
const language = this._model && typeof this._model.language ? this._model.language : '';
|
|
185
|
+
const lang = language ? language.slice(0, 2) : 'en';
|
|
186
|
+
this.setAttribute('lang', lang);
|
|
187
|
+
}
|
|
188
|
+
set model(s) {
|
|
189
|
+
this._model = s;
|
|
190
|
+
this._rerender();
|
|
191
|
+
// reset the audioInitialized to false since the model changed, and we might need to reinitialize the audio
|
|
192
|
+
this._audioInitialized = false;
|
|
193
|
+
this._dispatchModelSet();
|
|
194
|
+
}
|
|
195
|
+
get session() {
|
|
196
|
+
return this._session;
|
|
197
|
+
}
|
|
198
|
+
get options() {
|
|
199
|
+
return this._options;
|
|
200
|
+
}
|
|
201
|
+
set options(o) {
|
|
202
|
+
this._options = o;
|
|
203
|
+
this._rerender();
|
|
204
|
+
}
|
|
205
|
+
set baseHeadingLevel(level) {
|
|
206
|
+
this._baseHeadingLevel = level;
|
|
207
|
+
this._rerender();
|
|
208
|
+
}
|
|
209
|
+
set includeSrHeading(value) {
|
|
210
|
+
this._includeSrHeading = value;
|
|
211
|
+
this._rerender();
|
|
212
|
+
}
|
|
213
|
+
set session(s) {
|
|
214
|
+
this._session = s;
|
|
215
|
+
this._rerender();
|
|
216
|
+
//TODO: remove this session-changed should only be emit on user change
|
|
217
|
+
this._dispatchResponseChanged();
|
|
218
|
+
}
|
|
219
|
+
_onChange(data) {
|
|
220
|
+
(0, _sessionUpdater.updateSessionValue)(this._session, this._model.choiceMode, data);
|
|
221
|
+
this._dispatchResponseChanged();
|
|
222
|
+
this._rerender();
|
|
223
|
+
}
|
|
224
|
+
_createAudioInfoToast() {
|
|
225
|
+
const info = document.createElement('div');
|
|
226
|
+
info.id = 'play-audio-info';
|
|
227
|
+
Object.assign(info.style, {
|
|
228
|
+
position: 'absolute',
|
|
229
|
+
top: 0,
|
|
230
|
+
width: '100%',
|
|
231
|
+
height: '100%',
|
|
232
|
+
display: 'flex',
|
|
233
|
+
justifyContent: 'center',
|
|
234
|
+
alignItems: 'center',
|
|
235
|
+
background: 'white',
|
|
236
|
+
zIndex: '1000',
|
|
237
|
+
cursor: 'pointer'
|
|
238
|
+
});
|
|
239
|
+
const img = document.createElement('img');
|
|
240
|
+
img.src = _renderUi.EnableAudioAutoplayImage;
|
|
241
|
+
img.alt = 'Click anywhere to enable audio autoplay';
|
|
242
|
+
img.width = 500;
|
|
243
|
+
img.height = 300;
|
|
244
|
+
info.appendChild(img);
|
|
245
|
+
return info;
|
|
246
|
+
}
|
|
247
|
+
connectedCallback() {
|
|
248
|
+
this._initMathObserver();
|
|
249
|
+
this._initPlayerObserver();
|
|
250
|
+
this._rerender();
|
|
251
|
+
|
|
252
|
+
// Observation: audio in Chrome will have the autoplay attribute,
|
|
253
|
+
// while other browsers will not have the autoplay attribute and will need a user interaction to play the audio
|
|
254
|
+
// This workaround fixes the issue of audio being cached and played on any user interaction in Safari and Firefox
|
|
255
|
+
const observer = new MutationObserver((mutationsList, observer) => {
|
|
256
|
+
mutationsList.forEach(mutation => {
|
|
257
|
+
if (mutation.type === 'childList') {
|
|
258
|
+
if (this._audioInitialized) return;
|
|
259
|
+
const audio = this.querySelector('audio');
|
|
260
|
+
const isInsidePrompt = audio && audio.closest('#preview-prompt');
|
|
261
|
+
if (!this._model) return;
|
|
262
|
+
if (!this._model.autoplayAudioEnabled) return;
|
|
263
|
+
if (audio && !isInsidePrompt) return;
|
|
264
|
+
if (!audio) return;
|
|
265
|
+
const info = this._createAudioInfoToast();
|
|
266
|
+
const container = this.querySelector('#main-container');
|
|
267
|
+
const enableAudio = () => {
|
|
268
|
+
if (this.querySelector('#play-audio-info')) {
|
|
269
|
+
audio.play();
|
|
270
|
+
container.removeChild(info);
|
|
271
|
+
}
|
|
272
|
+
document.removeEventListener('click', enableAudio);
|
|
273
|
+
};
|
|
274
|
+
|
|
275
|
+
// if the audio is paused, it means the user has not interacted with the page yet and the audio will not play
|
|
276
|
+
// FIX FOR SAFARI: play with a slight delay to check if autoplay was blocked
|
|
277
|
+
setTimeout(() => {
|
|
278
|
+
if (audio.paused && !this.querySelector('#play-audio-info')) {
|
|
279
|
+
// add info message as a toast to enable audio playback
|
|
280
|
+
container.appendChild(info);
|
|
281
|
+
document.addEventListener('click', enableAudio);
|
|
282
|
+
} else {
|
|
283
|
+
document.removeEventListener('click', enableAudio);
|
|
284
|
+
}
|
|
285
|
+
}, 500);
|
|
286
|
+
|
|
287
|
+
// we need to listen for the playing event to remove the toast in case the audio plays because of re-rendering
|
|
288
|
+
const handlePlaying = () => {
|
|
289
|
+
(0, _sessionUpdater.updateSessionMetadata)(this._session, {
|
|
290
|
+
audioStartTime: new Date().getTime()
|
|
291
|
+
});
|
|
292
|
+
const info = this.querySelector('#play-audio-info');
|
|
293
|
+
if (info) {
|
|
294
|
+
container.removeChild(info);
|
|
295
|
+
}
|
|
296
|
+
audio.removeEventListener('playing', handlePlaying);
|
|
297
|
+
};
|
|
298
|
+
audio.addEventListener('playing', handlePlaying);
|
|
299
|
+
|
|
300
|
+
// we need to listen for the ended event to update the isComplete state
|
|
301
|
+
const handleEnded = () => {
|
|
302
|
+
(0, _sessionUpdater.updateSessionMetadata)(this._session, {
|
|
303
|
+
audioEndTime: new Date().getTime()
|
|
304
|
+
});
|
|
305
|
+
this.audioComplete = true;
|
|
306
|
+
this._dispatchResponseChanged();
|
|
307
|
+
audio.removeEventListener('ended', handleEnded);
|
|
308
|
+
};
|
|
309
|
+
audio.addEventListener('ended', handleEnded);
|
|
310
|
+
|
|
311
|
+
// store references to remove later
|
|
312
|
+
this._audio = audio;
|
|
313
|
+
this._handlePlaying = handlePlaying;
|
|
314
|
+
this._handleEnded = handleEnded;
|
|
315
|
+
this._enableAudio = enableAudio;
|
|
316
|
+
// set to true to prevent multiple initializations
|
|
317
|
+
this._audioInitialized = true;
|
|
318
|
+
observer.disconnect();
|
|
319
|
+
}
|
|
320
|
+
});
|
|
321
|
+
});
|
|
322
|
+
observer.observe(this, {
|
|
323
|
+
childList: true,
|
|
324
|
+
subtree: true
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
enableKeyboardEvents() {
|
|
328
|
+
if (!this._keyboardEventsEnabled) {
|
|
329
|
+
window.addEventListener('keydown', this._boundHandleKeyDown);
|
|
330
|
+
this._keyboardEventsEnabled = true;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
_initPlayerObserver() {
|
|
334
|
+
const player = this.closest('pie-player') || this.closest('pie-item-player');
|
|
335
|
+
if (!player) return;
|
|
336
|
+
this._playerObserver = new MutationObserver(() => {
|
|
337
|
+
this._rerender();
|
|
338
|
+
});
|
|
339
|
+
this._playerObserver.observe(player, {
|
|
340
|
+
attributes: true,
|
|
341
|
+
attributeFilter: ['base-heading-level', 'baseheadinglevel', 'include-sr-heading', 'includesrheading']
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
_disconnectPlayerObserver() {
|
|
345
|
+
if (this._playerObserver) {
|
|
346
|
+
this._playerObserver.disconnect();
|
|
347
|
+
this._playerObserver = null;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
disconnectedCallback() {
|
|
351
|
+
this._disconnectMathObserver();
|
|
352
|
+
this._disconnectPlayerObserver();
|
|
353
|
+
if (this._keyboardEventsEnabled) {
|
|
354
|
+
window.removeEventListener('keydown', this._boundHandleKeyDown);
|
|
355
|
+
this._keyboardEventsEnabled = false;
|
|
356
|
+
}
|
|
357
|
+
document.removeEventListener('click', this._enableAudio);
|
|
358
|
+
if (this._audio) {
|
|
359
|
+
this._audio.removeEventListener('playing', this._handlePlaying);
|
|
360
|
+
this._audio.removeEventListener('ended', this._handleEnded);
|
|
361
|
+
this._audio = null;
|
|
362
|
+
}
|
|
363
|
+
if (this._root) {
|
|
364
|
+
this._root.unmount();
|
|
365
|
+
this._root = null;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
/**
|
|
370
|
+
* Handles global keyboard events for selecting or toggling multiple-choice answers.
|
|
371
|
+
* Maps keys (1-9, 0, a-j, A-J) to choices and updates the session state accordingly.
|
|
372
|
+
* Ensures valid key presses toggle or select the appropriate choice based on the model.
|
|
373
|
+
*/
|
|
374
|
+
handleKeyDown(event) {
|
|
375
|
+
if (!this._model || !this._session) {
|
|
376
|
+
return;
|
|
377
|
+
}
|
|
378
|
+
const {
|
|
379
|
+
mode
|
|
380
|
+
} = this._model;
|
|
381
|
+
if (mode !== 'gather') {
|
|
382
|
+
return;
|
|
383
|
+
}
|
|
384
|
+
const keyToIndex = key => {
|
|
385
|
+
const numOffset = key >= '1' && key <= '9' ? key - '1' : key === '0' ? 9 : -1;
|
|
386
|
+
const letterOffset = /^[a-jA-J]$/.test(key) ? key.toLowerCase().charCodeAt(0) - 'a'.charCodeAt(0) : -1;
|
|
387
|
+
return numOffset >= 0 ? numOffset : letterOffset;
|
|
388
|
+
};
|
|
389
|
+
const choiceIndex = keyToIndex(event.key);
|
|
390
|
+
if (choiceIndex === undefined || choiceIndex <= -1 || choiceIndex >= this._model.choices?.length) {
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
const currentValue = this._session.value || [];
|
|
394
|
+
const choiceId = this._model.choices[choiceIndex].value;
|
|
395
|
+
const alreadySelected = currentValue.includes(choiceId);
|
|
396
|
+
const newValue = {
|
|
397
|
+
value: choiceId,
|
|
398
|
+
selected: this._model.choiceMode === 'radio' ? true : !alreadySelected,
|
|
399
|
+
selector: 'Keyboard'
|
|
400
|
+
};
|
|
401
|
+
this._onChange(newValue);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
exports.default = MultipleChoice;
|
|
405
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWFpbiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3JlYWN0IiwiX2NsaWVudCIsIl9sb2Rhc2hFcyIsIl9kZWJ1ZyIsIl9waWVQbGF5ZXJFdmVudHMiLCJfbWF0aFJlbmRlcmluZyIsIl9yZW5kZXJVaSIsIl9zZXNzaW9uVXBkYXRlciIsIl91dGlscyIsImxvZyIsImRlYnVnIiwiaXNDb21wbGV0ZSIsInNlc3Npb24iLCJtb2RlbCIsImF1ZGlvQ29tcGxldGUiLCJlbGVtZW50Q29udGV4dCIsImF1dG9wbGF5QXVkaW9FbmFibGVkIiwiY29tcGxldGVBdWRpb0VuYWJsZWQiLCJhdWRpbyIsInF1ZXJ5U2VsZWN0b3IiLCJpc0luc2lkZVByb21wdCIsImNsb3Nlc3QiLCJ2YWx1ZSIsImNob2ljZU1vZGUiLCJtaW5TZWxlY3Rpb25zIiwibWF4U2VsZWN0aW9ucyIsInNlbGVjdGlvbnMiLCJsZW5ndGgiLCJleGNlZWRzTWF4U2VsZWN0aW9ucyIsImV4cG9ydHMiLCJnZXRQbGF5ZXJBdHRyaWJ1dGVzIiwiZWxlbWVudCIsInBsYXllciIsImJhc2VIZWFkaW5nTGV2ZWwiLCJ1bmRlZmluZWQiLCJpbmNsdWRlU3JIZWFkaW5nIiwiZ2V0UmF3IiwiY2FtZWxDYXNlTmFtZSIsImh5cGhlbmF0ZWROYW1lIiwiYWxsTG93ZXJOYW1lIiwicmF3IiwiZ2V0QXR0cmlidXRlIiwibGV2ZWxSYXciLCJsZXZlbCIsInBhcnNlSW50IiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJzclJhdyIsInJlc29sdmVIZWFkaW5nUHJvcHMiLCJmcm9tUGxheWVyIiwiX2Jhc2VIZWFkaW5nTGV2ZWwiLCJfaW5jbHVkZVNySGVhZGluZyIsIk11bHRpcGxlQ2hvaWNlIiwiSFRNTEVsZW1lbnQiLCJjb25zdHJ1Y3RvciIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkZWZhdWx0IiwiX21hdGhSZW5kZXJQZW5kaW5nIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiX21hdGhPYnNlcnZlciIsImRpc2Nvbm5lY3QiLCJyZW5kZXJNYXRoIiwic2V0VGltZW91dCIsIm9ic2VydmUiLCJjaGlsZExpc3QiLCJzdWJ0cmVlIiwiX21vZGVsIiwiX3Nlc3Npb24iLCJfb3B0aW9ucyIsIl9ib3VuZEhhbmRsZUtleURvd24iLCJoYW5kbGVLZXlEb3duIiwiYmluZCIsIl9rZXlib2FyZEV2ZW50c0VuYWJsZWQiLCJfYXVkaW9Jbml0aWFsaXplZCIsIl9yb290IiwiX3JlcmVuZGVyIiwiZGVib3VuY2UiLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJNYWluIiwib3B0aW9ucyIsIm9uQ2hvaWNlQ2hhbmdlZCIsIl9vbkNoYW5nZSIsIm9uU2hvd0NvcnJlY3RUb2dnbGUiLCJzZXRBdHRyaWJ1dGUiLCJzZXRMYW5nQXR0cmlidXRlIiwiX2luaXRNYXRoT2JzZXJ2ZXIiLCJjcmVhdGVSb290IiwicmVuZGVyIiwia2V5Ym9hcmRFdmVudHNFbmFibGVkIiwiZW5hYmxlS2V5Ym9hcmRFdmVudHMiLCJsZWFkaW5nIiwidHJhaWxpbmciLCJfZGlzcGF0Y2hSZXNwb25zZUNoYW5nZWQiLCJkaXNwYXRjaEV2ZW50IiwiU2Vzc2lvbkNoYW5nZWRFdmVudCIsInRhZ05hbWUiLCJ0b0xvd2VyQ2FzZSIsIl9kaXNwYXRjaE1vZGVsU2V0IiwiTW9kZWxTZXRFdmVudCIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJfc2NoZWR1bGVNYXRoUmVuZGVyIiwiX2Rpc2Nvbm5lY3RNYXRoT2JzZXJ2ZXIiLCJsYW5ndWFnZSIsImxhbmciLCJzbGljZSIsInMiLCJvIiwiZGF0YSIsInVwZGF0ZVNlc3Npb25WYWx1ZSIsIl9jcmVhdGVBdWRpb0luZm9Ub2FzdCIsImluZm8iLCJkb2N1bWVudCIsImlkIiwiT2JqZWN0IiwiYXNzaWduIiwic3R5bGUiLCJwb3NpdGlvbiIsInRvcCIsIndpZHRoIiwiaGVpZ2h0IiwiZGlzcGxheSIsImp1c3RpZnlDb250ZW50IiwiYWxpZ25JdGVtcyIsImJhY2tncm91bmQiLCJ6SW5kZXgiLCJjdXJzb3IiLCJpbWciLCJzcmMiLCJFbmFibGVBdWRpb0F1dG9wbGF5SW1hZ2UiLCJhbHQiLCJhcHBlbmRDaGlsZCIsImNvbm5lY3RlZENhbGxiYWNrIiwiX2luaXRQbGF5ZXJPYnNlcnZlciIsIm9ic2VydmVyIiwibXV0YXRpb25zTGlzdCIsImZvckVhY2giLCJtdXRhdGlvbiIsInR5cGUiLCJjb250YWluZXIiLCJlbmFibGVBdWRpbyIsInBsYXkiLCJyZW1vdmVDaGlsZCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJwYXVzZWQiLCJhZGRFdmVudExpc3RlbmVyIiwiaGFuZGxlUGxheWluZyIsInVwZGF0ZVNlc3Npb25NZXRhZGF0YSIsImF1ZGlvU3RhcnRUaW1lIiwiRGF0ZSIsImdldFRpbWUiLCJoYW5kbGVFbmRlZCIsImF1ZGlvRW5kVGltZSIsIl9hdWRpbyIsIl9oYW5kbGVQbGF5aW5nIiwiX2hhbmRsZUVuZGVkIiwiX2VuYWJsZUF1ZGlvIiwid2luZG93IiwiX3BsYXllck9ic2VydmVyIiwiYXR0cmlidXRlcyIsImF0dHJpYnV0ZUZpbHRlciIsIl9kaXNjb25uZWN0UGxheWVyT2JzZXJ2ZXIiLCJkaXNjb25uZWN0ZWRDYWxsYmFjayIsInVubW91bnQiLCJldmVudCIsIm1vZGUiLCJrZXlUb0luZGV4Iiwia2V5IiwibnVtT2Zmc2V0IiwibGV0dGVyT2Zmc2V0IiwidGVzdCIsImNoYXJDb2RlQXQiLCJjaG9pY2VJbmRleCIsImNob2ljZXMiLCJjdXJyZW50VmFsdWUiLCJjaG9pY2VJZCIsImFscmVhZHlTZWxlY3RlZCIsImluY2x1ZGVzIiwibmV3VmFsdWUiLCJzZWxlY3RlZCIsInNlbGVjdG9yIl0sInNvdXJjZXMiOlsiLi4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBNYWluIGZyb20gJy4vbWFpbic7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY3JlYXRlUm9vdCB9IGZyb20gJ3JlYWN0LWRvbS9jbGllbnQnO1xuaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCB7IE1vZGVsU2V0RXZlbnQsIFNlc3Npb25DaGFuZ2VkRXZlbnQgfSBmcm9tICdAcGllLWZyYW1ld29yay9waWUtcGxheWVyLWV2ZW50cyc7XG5pbXBvcnQgeyByZW5kZXJNYXRoIH0gZnJvbSAnQHBpZS1saWIvbWF0aC1yZW5kZXJpbmcnO1xuaW1wb3J0IHsgRW5hYmxlQXVkaW9BdXRvcGxheUltYWdlIH0gZnJvbSAnQHBpZS1saWIvcmVuZGVyLXVpJztcbmltcG9ydCB7IHVwZGF0ZVNlc3Npb25WYWx1ZSwgdXBkYXRlU2Vzc2lvbk1ldGFkYXRhIH0gZnJvbSAnLi9zZXNzaW9uLXVwZGF0ZXInO1xuaW1wb3J0IHsgZXhjZWVkc01heFNlbGVjdGlvbnMgfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgbG9nID0gZGVidWcoJ3BpZS11aTptdWx0aXBsZS1jaG9pY2UnKTtcblxuZXhwb3J0IGNvbnN0IGlzQ29tcGxldGUgPSAoc2Vzc2lvbiwgbW9kZWwsIGF1ZGlvQ29tcGxldGUsIGVsZW1lbnRDb250ZXh0KSA9PiB7XG4gIGNvbnN0IHsgYXV0b3BsYXlBdWRpb0VuYWJsZWQsIGNvbXBsZXRlQXVkaW9FbmFibGVkIH0gPSBtb2RlbCB8fCB7fTtcblxuICAvLyBjaGVjayBhdWRpbyBjb21wbGV0aW9uIGlmIGF1ZGlvIHNldHRpbmdzIGFyZSBlbmFibGVkIGFuZCBhdWRpbyBhY3R1YWxseSBleGlzdHNcbiAgaWYgKGF1dG9wbGF5QXVkaW9FbmFibGVkICYmIGNvbXBsZXRlQXVkaW9FbmFibGVkICYmICFhdWRpb0NvbXBsZXRlKSB7XG4gICAgaWYgKGVsZW1lbnRDb250ZXh0KSB7XG4gICAgICBjb25zdCBhdWRpbyA9IGVsZW1lbnRDb250ZXh0LnF1ZXJ5U2VsZWN0b3IoJ2F1ZGlvJyk7XG4gICAgICBjb25zdCBpc0luc2lkZVByb21wdCA9IGF1ZGlvICYmIGF1ZGlvLmNsb3Nlc3QoJyNwcmV2aWV3LXByb21wdCcpO1xuXG4gICAgICAvLyBvbmx5IHJlcXVpcmUgYXVkaW8gY29tcGxldGlvbiBpZiBhdWRpbyBleGlzdHMgYW5kIGlzIGluc2lkZSB0aGUgcHJvbXB0XG4gICAgICBpZiAoYXVkaW8gJiYgaXNJbnNpZGVQcm9tcHQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICghc2Vzc2lvbiB8fCAhc2Vzc2lvbi52YWx1ZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHsgY2hvaWNlTW9kZSwgbWluU2VsZWN0aW9ucyA9IDEsIG1heFNlbGVjdGlvbnMgfSA9IG1vZGVsIHx8IHt9O1xuICBjb25zdCBzZWxlY3Rpb25zID0gc2Vzc2lvbi52YWx1ZS5sZW5ndGggfHwgMDtcblxuICBpZiAoY2hvaWNlTW9kZSA9PT0gJ3JhZGlvJykge1xuICAgIHJldHVybiAhIXNlbGVjdGlvbnM7XG4gIH1cblxuICBpZiAoc2VsZWN0aW9ucyA8IG1pblNlbGVjdGlvbnMgfHwgZXhjZWVkc01heFNlbGVjdGlvbnMoc2VsZWN0aW9ucywgbWF4U2VsZWN0aW9ucykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmZ1bmN0aW9uIGdldFBsYXllckF0dHJpYnV0ZXMoZWxlbWVudCkge1xuICBjb25zdCBwbGF5ZXIgPVxuICAgIGVsZW1lbnQuY2xvc2VzdCgncGllLXBsYXllcicpIHx8XG4gICAgZWxlbWVudC5jbG9zZXN0KCdwaWUtaXRlbS1wbGF5ZXInKTtcblxuICBpZiAoIXBsYXllcikge1xuICAgIHJldHVybiB7IGJhc2VIZWFkaW5nTGV2ZWw6IHVuZGVmaW5lZCwgaW5jbHVkZVNySGVhZGluZzogdHJ1ZSB9O1xuICB9XG5cbiAgY29uc3QgZ2V0UmF3ID0gKGNhbWVsQ2FzZU5hbWUsIGh5cGhlbmF0ZWROYW1lLCBhbGxMb3dlck5hbWUpID0+IHtcbiAgICBsZXQgcmF3ID0gcGxheWVyW2NhbWVsQ2FzZU5hbWVdO1xuXG4gICAgLy8gZmFsbGJhY2sgaW4gY2FzZSBzb21lb25lIHNldHMgdmlhIEhUTUwgYXR0cmlidXRlIG1hbnVhbGx5XG4gICAgaWYgKHJhdyA9PSBudWxsKSB7XG4gICAgICByYXcgPVxuICAgICAgICBwbGF5ZXIuZ2V0QXR0cmlidXRlKGh5cGhlbmF0ZWROYW1lKSA/P1xuICAgICAgICBwbGF5ZXIuZ2V0QXR0cmlidXRlKGFsbExvd2VyTmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhdztcbiAgfTtcblxuICBjb25zdCBsZXZlbFJhdyA9IGdldFJhdygnYmFzZUhlYWRpbmdMZXZlbCcsICdiYXNlLWhlYWRpbmctbGV2ZWwnLCAnYmFzZWhlYWRpbmdsZXZlbCcpO1xuICBjb25zdCBsZXZlbCA9IHBhcnNlSW50KGxldmVsUmF3LCAxMCk7XG4gIGNvbnN0IGJhc2VIZWFkaW5nTGV2ZWwgPSBOdW1iZXIuaXNGaW5pdGUobGV2ZWwpICYmIGxldmVsID49IDEgJiYgbGV2ZWwgPD0gNiA/IGxldmVsIDogdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHNyUmF3ID0gZ2V0UmF3KCdpbmNsdWRlU3JIZWFkaW5nJywgJ2luY2x1ZGUtc3ItaGVhZGluZycsICdpbmNsdWRlc3JoZWFkaW5nJyk7XG4gIGNvbnN0IGluY2x1ZGVTckhlYWRpbmcgPSBzclJhdyA9PSBudWxsID8gdHJ1ZSA6IHNyUmF3ICE9PSBmYWxzZSAmJiBzclJhdyAhPT0gJ2ZhbHNlJztcblxuICByZXR1cm4geyBiYXNlSGVhZGluZ0xldmVsLCBpbmNsdWRlU3JIZWFkaW5nIH07XG59XG5cbi8vIFJlc29sdmVzIGhlYWRpbmcgYXR0cmlidXRlcyBmb3IgYSBjdXN0b20gZWxlbWVudCwgcHJlZmVycmluZyBleHBsaWNpdCBpbnN0YW5jZVxuLy8gcHJvcGVydGllcyAoc2V0IGJ5IGEgcGFyZW50IGVsZW1lbnQgc3VjaCBhcyBFQlNSKSBvdmVyIHBsYXllci1sZXZlbCBhdHRyaWJ1dGVzLlxuZnVuY3Rpb24gcmVzb2x2ZUhlYWRpbmdQcm9wcyhlbGVtZW50KSB7XG4gIGNvbnN0IGZyb21QbGF5ZXIgPSBnZXRQbGF5ZXJBdHRyaWJ1dGVzKGVsZW1lbnQpO1xuXG4gIHJldHVybiB7XG4gICAgYmFzZUhlYWRpbmdMZXZlbDogZWxlbWVudC5fYmFzZUhlYWRpbmdMZXZlbCAhPT0gdW5kZWZpbmVkID8gZWxlbWVudC5fYmFzZUhlYWRpbmdMZXZlbCA6IGZyb21QbGF5ZXIuYmFzZUhlYWRpbmdMZXZlbCxcbiAgICBpbmNsdWRlU3JIZWFkaW5nOiBlbGVtZW50Ll9pbmNsdWRlU3JIZWFkaW5nICE9PSB1bmRlZmluZWQgPyBlbGVtZW50Ll9pbmNsdWRlU3JIZWFkaW5nIDogZnJvbVBsYXllci5pbmNsdWRlU3JIZWFkaW5nLFxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNdWx0aXBsZUNob2ljZSBleHRlbmRzIEhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9tb2RlbCA9IG51bGw7XG4gICAgdGhpcy5fc2Vzc2lvbiA9IG51bGw7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG51bGw7IC8vIGFkZGVkIGZvciBlYnNyIHByaW50IG1vZGUgZGV0ZWN0aW9uXG4gICAgdGhpcy5hdWRpb0NvbXBsZXRlID0gZmFsc2U7XG4gICAgdGhpcy5fYm91bmRIYW5kbGVLZXlEb3duID0gdGhpcy5oYW5kbGVLZXlEb3duLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fa2V5Ym9hcmRFdmVudHNFbmFibGVkID0gZmFsc2U7XG4gICAgdGhpcy5fYXVkaW9Jbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIHRoaXMuX3Jvb3QgPSBudWxsO1xuICAgIHRoaXMuX21hdGhPYnNlcnZlciA9IG51bGw7XG4gICAgdGhpcy5fbWF0aFJlbmRlclBlbmRpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuX3JlcmVuZGVyID0gZGVib3VuY2UoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9tb2RlbCAmJiB0aGlzLl9zZXNzaW9uKSB7XG4gICAgICAgICAgdmFyIGVsZW1lbnQgPSBSZWFjdC5jcmVhdGVFbGVtZW50KE1haW4sIHtcbiAgICAgICAgICAgIG1vZGVsOiB0aGlzLl9tb2RlbCxcbiAgICAgICAgICAgIHNlc3Npb246IHRoaXMuX3Nlc3Npb24sXG4gICAgICAgICAgICBvcHRpb25zOiB0aGlzLl9vcHRpb25zLFxuICAgICAgICAgICAgb25DaG9pY2VDaGFuZ2VkOiB0aGlzLl9vbkNoYW5nZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgb25TaG93Q29ycmVjdFRvZ2dsZTogdGhpcy5vblNob3dDb3JyZWN0VG9nZ2xlLmJpbmQodGhpcyksXG4gICAgICAgICAgICAuLi5yZXNvbHZlSGVhZGluZ1Byb3BzKHRoaXMpLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy9UT0RPOiBhcmlhLWxhYmVsIGlzIHNldCBpbiB0aGUgX3JlcmVuZGVyIGJlY2F1c2Ugd2UgbmVlZCB0byBjaGFuZ2UgaXQgd2hlbiB0aGUgbW9kZWwuY2hvaWNlTW9kZSBpcyB1cGRhdGVkLiBDb25zaWRlciByZXZpc2l0aW5nIHRoZSBwbGFjZW1lbnQgb2YgdGhlIGFyaWEtbGFiZWwgc2V0dGluZyBpbiB0aGUgX3JlcmVuZGVyXG4gICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgICAnYXJpYS1sYWJlbCcsXG4gICAgICAgICAgICB0aGlzLl9tb2RlbC5jaG9pY2VNb2RlID09PSAncmFkaW8nID8gJ011bHRpcGxlIENob2ljZSBRdWVzdGlvbicgOiAnTXVsdGlwbGUgQ29ycmVjdCBBbnN3ZXIgUXVlc3Rpb24nLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAncmVnaW9uJyk7XG4gICAgICAgICAgdGhpcy5zZXRMYW5nQXR0cmlidXRlKCk7XG5cbiAgICAgICAgICB0aGlzLl9pbml0TWF0aE9ic2VydmVyKCk7XG5cbiAgICAgICAgICBpZiAoIXRoaXMuX3Jvb3QpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jvb3QgPSBjcmVhdGVSb290KHRoaXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9yb290LnJlbmRlcihlbGVtZW50KTtcblxuICAgICAgICAgIGlmICh0aGlzLl9tb2RlbC5rZXlib2FyZEV2ZW50c0VuYWJsZWQgPT09IHRydWUgJiYgIXRoaXMuX2tleWJvYXJkRXZlbnRzRW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5lbmFibGVLZXlib2FyZEV2ZW50cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2coJ3NraXAnKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIDUwLFxuICAgICAgeyBsZWFkaW5nOiBmYWxzZSwgdHJhaWxpbmc6IHRydWUgfSxcbiAgICApO1xuXG4gICAgdGhpcy5fZGlzcGF0Y2hSZXNwb25zZUNoYW5nZWQgPSBkZWJvdW5jZSgoKSA9PiB7XG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgIG5ldyBTZXNzaW9uQ2hhbmdlZEV2ZW50KFxuICAgICAgICAgIHRoaXMudGFnTmFtZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgIGlzQ29tcGxldGUodGhpcy5fc2Vzc2lvbiwgdGhpcy5fbW9kZWwsIHRoaXMuYXVkaW9Db21wbGV0ZSwgdGhpcyksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fZGlzcGF0Y2hNb2RlbFNldCA9IGRlYm91bmNlKFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IE1vZGVsU2V0RXZlbnQoXG4gICAgICAgICAgICB0aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgIGlzQ29tcGxldGUodGhpcy5fc2Vzc2lvbiwgdGhpcy5fbW9kZWwsIHRoaXMuYXVkaW9Db21wbGV0ZSwgdGhpcyksXG4gICAgICAgICAgICB0aGlzLl9tb2RlbCAhPT0gdW5kZWZpbmVkLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgNTAsXG4gICAgICB7IGxlYWRpbmc6IGZhbHNlLCB0cmFpbGluZzogdHJ1ZSB9LFxuICAgICk7XG4gIH1cblxuICBfc2NoZWR1bGVNYXRoUmVuZGVyID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLl9tYXRoUmVuZGVyUGVuZGluZykgcmV0dXJuO1xuICAgIHRoaXMuX21hdGhSZW5kZXJQZW5kaW5nID0gdHJ1ZTtcblxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fbWF0aE9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMuX21hdGhPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB9XG4gICAgICBsb2coJ3JlbmRlciBjb21wbGV0ZSAtIHJlbmRlciBtYXRoJyk7XG4gICAgICByZW5kZXJNYXRoKHRoaXMpO1xuICAgICAgdGhpcy5fbWF0aFJlbmRlclBlbmRpbmcgPSBmYWxzZTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fbWF0aE9ic2VydmVyKSB7XG4gICAgICAgICAgdGhpcy5fbWF0aE9ic2VydmVyLm9ic2VydmUodGhpcywgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIDUwKTtcbiAgICB9KTtcbiAgfTtcblxuICBfaW5pdE1hdGhPYnNlcnZlcigpIHtcbiAgICBpZiAodGhpcy5fbWF0aE9ic2VydmVyKSByZXR1cm47XG4gICAgdGhpcy5fbWF0aE9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5fc2NoZWR1bGVNYXRoUmVuZGVyKTtcbiAgICB0aGlzLl9tYXRoT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIF9kaXNjb25uZWN0TWF0aE9ic2VydmVyKCkge1xuICAgIGlmICh0aGlzLl9tYXRoT2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMuX21hdGhPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB0aGlzLl9tYXRoT2JzZXJ2ZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIG9uU2hvd0NvcnJlY3RUb2dnbGUoKSB7XG4gICAgcmVuZGVyTWF0aCh0aGlzKTtcbiAgfVxuXG4gIHNldExhbmdBdHRyaWJ1dGUoKSB7XG4gICAgY29uc3QgbGFuZ3VhZ2UgPSB0aGlzLl9tb2RlbCAmJiB0eXBlb2YgdGhpcy5fbW9kZWwubGFuZ3VhZ2UgPyB0aGlzLl9tb2RlbC5sYW5ndWFnZSA6ICcnO1xuICAgIGNvbnN0IGxhbmcgPSBsYW5ndWFnZSA/IGxhbmd1YWdlLnNsaWNlKDAsIDIpIDogJ2VuJztcbiAgICB0aGlzLnNldEF0dHJpYnV0ZSgnbGFuZycsIGxhbmcpO1xuICB9XG5cbiAgc2V0IG1vZGVsKHMpIHtcbiAgICB0aGlzLl9tb2RlbCA9IHM7XG4gICAgdGhpcy5fcmVyZW5kZXIoKTtcbiAgICAvLyByZXNldCB0aGUgYXVkaW9Jbml0aWFsaXplZCB0byBmYWxzZSBzaW5jZSB0aGUgbW9kZWwgY2hhbmdlZCwgYW5kIHdlIG1pZ2h0IG5lZWQgdG8gcmVpbml0aWFsaXplIHRoZSBhdWRpb1xuICAgIHRoaXMuX2F1ZGlvSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9kaXNwYXRjaE1vZGVsU2V0KCk7XG4gIH1cblxuICBnZXQgc2Vzc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbjtcbiAgfVxuXG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xuICB9XG5cbiAgc2V0IG9wdGlvbnMobykge1xuICAgIHRoaXMuX29wdGlvbnMgPSBvO1xuICAgIHRoaXMuX3JlcmVuZGVyKCk7XG4gIH1cblxuICBzZXQgYmFzZUhlYWRpbmdMZXZlbChsZXZlbCkge1xuICAgIHRoaXMuX2Jhc2VIZWFkaW5nTGV2ZWwgPSBsZXZlbDtcbiAgICB0aGlzLl9yZXJlbmRlcigpO1xuICB9XG5cbiAgc2V0IGluY2x1ZGVTckhlYWRpbmcodmFsdWUpIHtcbiAgICB0aGlzLl9pbmNsdWRlU3JIZWFkaW5nID0gdmFsdWU7XG4gICAgdGhpcy5fcmVyZW5kZXIoKTtcbiAgfVxuXG4gIHNldCBzZXNzaW9uKHMpIHtcbiAgICB0aGlzLl9zZXNzaW9uID0gcztcbiAgICB0aGlzLl9yZXJlbmRlcigpO1xuICAgIC8vVE9ETzogcmVtb3ZlIHRoaXMgc2Vzc2lvbi1jaGFuZ2VkIHNob3VsZCBvbmx5IGJlIGVtaXQgb24gdXNlciBjaGFuZ2VcbiAgICB0aGlzLl9kaXNwYXRjaFJlc3BvbnNlQ2hhbmdlZCgpO1xuICB9XG5cbiAgX29uQ2hhbmdlKGRhdGEpIHtcbiAgICB1cGRhdGVTZXNzaW9uVmFsdWUodGhpcy5fc2Vzc2lvbiwgdGhpcy5fbW9kZWwuY2hvaWNlTW9kZSwgZGF0YSk7XG4gICAgdGhpcy5fZGlzcGF0Y2hSZXNwb25zZUNoYW5nZWQoKTtcbiAgICB0aGlzLl9yZXJlbmRlcigpO1xuICB9XG5cbiAgX2NyZWF0ZUF1ZGlvSW5mb1RvYXN0KCkge1xuICAgIGNvbnN0IGluZm8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBpbmZvLmlkID0gJ3BsYXktYXVkaW8taW5mbyc7XG5cbiAgICBPYmplY3QuYXNzaWduKGluZm8uc3R5bGUsIHtcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgdG9wOiAwLFxuICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICBiYWNrZ3JvdW5kOiAnd2hpdGUnLFxuICAgICAgekluZGV4OiAnMTAwMCcsXG4gICAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgIGltZy5zcmMgPSBFbmFibGVBdWRpb0F1dG9wbGF5SW1hZ2U7XG4gICAgaW1nLmFsdCA9ICdDbGljayBhbnl3aGVyZSB0byBlbmFibGUgYXVkaW8gYXV0b3BsYXknO1xuICAgIGltZy53aWR0aCA9IDUwMDtcbiAgICBpbWcuaGVpZ2h0ID0gMzAwO1xuXG4gICAgaW5mby5hcHBlbmRDaGlsZChpbWcpO1xuICAgIHJldHVybiBpbmZvO1xuICB9XG5cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5faW5pdE1hdGhPYnNlcnZlcigpO1xuICAgIHRoaXMuX2luaXRQbGF5ZXJPYnNlcnZlcigpO1xuICAgIHRoaXMuX3JlcmVuZGVyKCk7XG5cbiAgICAvLyBPYnNlcnZhdGlvbjogIGF1ZGlvIGluIENocm9tZSB3aWxsIGhhdmUgdGhlIGF1dG9wbGF5IGF0dHJpYnV0ZSxcbiAgICAvLyB3aGlsZSBvdGhlciBicm93c2VycyB3aWxsIG5vdCBoYXZlIHRoZSBhdXRvcGxheSBhdHRyaWJ1dGUgYW5kIHdpbGwgbmVlZCBhIHVzZXIgaW50ZXJhY3Rpb24gdG8gcGxheSB0aGUgYXVkaW9cbiAgICAvLyBUaGlzIHdvcmthcm91bmQgZml4ZXMgdGhlIGlzc3VlIG9mIGF1ZGlvIGJlaW5nIGNhY2hlZCBhbmQgcGxheWVkIG9uIGFueSB1c2VyIGludGVyYWN0aW9uIGluIFNhZmFyaSBhbmQgRmlyZWZveFxuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9uc0xpc3QsIG9ic2VydmVyKSA9PiB7XG4gICAgICBtdXRhdGlvbnNMaXN0LmZvckVhY2goKG11dGF0aW9uKSA9PiB7XG4gICAgICAgIGlmIChtdXRhdGlvbi50eXBlID09PSAnY2hpbGRMaXN0Jykge1xuICAgICAgICAgIGlmICh0aGlzLl9hdWRpb0luaXRpYWxpemVkKSByZXR1cm47XG5cbiAgICAgICAgICBjb25zdCBhdWRpbyA9IHRoaXMucXVlcnlTZWxlY3RvcignYXVkaW8nKTtcbiAgICAgICAgICBjb25zdCBpc0luc2lkZVByb21wdCA9IGF1ZGlvICYmIGF1ZGlvLmNsb3Nlc3QoJyNwcmV2aWV3LXByb21wdCcpO1xuXG4gICAgICAgICAgaWYgKCF0aGlzLl9tb2RlbCkgcmV0dXJuO1xuICAgICAgICAgIGlmICghdGhpcy5fbW9kZWwuYXV0b3BsYXlBdWRpb0VuYWJsZWQpIHJldHVybjtcbiAgICAgICAgICBpZiAoYXVkaW8gJiYgIWlzSW5zaWRlUHJvbXB0KSByZXR1cm47XG4gICAgICAgICAgaWYgKCFhdWRpbykgcmV0dXJuO1xuXG4gICAgICAgICAgY29uc3QgaW5mbyA9IHRoaXMuX2NyZWF0ZUF1ZGlvSW5mb1RvYXN0KCk7XG4gICAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5xdWVyeVNlbGVjdG9yKCcjbWFpbi1jb250YWluZXInKTtcbiAgICAgICAgICBjb25zdCBlbmFibGVBdWRpbyA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXJ5U2VsZWN0b3IoJyNwbGF5LWF1ZGlvLWluZm8nKSkge1xuICAgICAgICAgICAgICBhdWRpby5wbGF5KCk7XG4gICAgICAgICAgICAgIGNvbnRhaW5lci5yZW1vdmVDaGlsZChpbmZvKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBlbmFibGVBdWRpbyk7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIC8vIGlmIHRoZSBhdWRpbyBpcyBwYXVzZWQsIGl0IG1lYW5zIHRoZSB1c2VyIGhhcyBub3QgaW50ZXJhY3RlZCB3aXRoIHRoZSBwYWdlIHlldCBhbmQgdGhlIGF1ZGlvIHdpbGwgbm90IHBsYXlcbiAgICAgICAgICAvLyBGSVggRk9SIFNBRkFSSTogcGxheSB3aXRoIGEgc2xpZ2h0IGRlbGF5IHRvIGNoZWNrIGlmIGF1dG9wbGF5IHdhcyBibG9ja2VkXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXVkaW8ucGF1c2VkICYmICF0aGlzLnF1ZXJ5U2VsZWN0b3IoJyNwbGF5LWF1ZGlvLWluZm8nKSkge1xuICAgICAgICAgICAgICAvLyBhZGQgaW5mbyBtZXNzYWdlIGFzIGEgdG9hc3QgdG8gZW5hYmxlIGF1ZGlvIHBsYXliYWNrXG4gICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChpbmZvKTtcbiAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBlbmFibGVBdWRpbyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGVuYWJsZUF1ZGlvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCA1MDApO1xuXG4gICAgICAgICAgLy8gd2UgbmVlZCB0byBsaXN0ZW4gZm9yIHRoZSBwbGF5aW5nIGV2ZW50IHRvIHJlbW92ZSB0aGUgdG9hc3QgaW4gY2FzZSB0aGUgYXVkaW8gcGxheXMgYmVjYXVzZSBvZiByZS1yZW5kZXJpbmdcbiAgICAgICAgICBjb25zdCBoYW5kbGVQbGF5aW5nID0gKCkgPT4ge1xuICAgICAgICAgICAgdXBkYXRlU2Vzc2lvbk1ldGFkYXRhKHRoaXMuX3Nlc3Npb24sIHsgYXVkaW9TdGFydFRpbWU6IG5ldyBEYXRlKCkuZ2V0VGltZSgpIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBpbmZvID0gdGhpcy5xdWVyeVNlbGVjdG9yKCcjcGxheS1hdWRpby1pbmZvJyk7XG4gICAgICAgICAgICBpZiAoaW5mbykge1xuICAgICAgICAgICAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQoaW5mbyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGF1ZGlvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCBoYW5kbGVQbGF5aW5nKTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgYXVkaW8uYWRkRXZlbnRMaXN0ZW5lcigncGxheWluZycsIGhhbmRsZVBsYXlpbmcpO1xuXG4gICAgICAgICAgLy8gd2UgbmVlZCB0byBsaXN0ZW4gZm9yIHRoZSBlbmRlZCBldmVudCB0byB1cGRhdGUgdGhlIGlzQ29tcGxldGUgc3RhdGVcbiAgICAgICAgICBjb25zdCBoYW5kbGVFbmRlZCA9ICgpID0+IHtcbiAgICAgICAgICAgIHVwZGF0ZVNlc3Npb25NZXRhZGF0YSh0aGlzLl9zZXNzaW9uLCB7IGF1ZGlvRW5kVGltZTogbmV3IERhdGUoKS5nZXRUaW1lKCkgfSk7XG4gICAgICAgICAgICB0aGlzLmF1ZGlvQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZGlzcGF0Y2hSZXNwb25zZUNoYW5nZWQoKTtcbiAgICAgICAgICAgIGF1ZGlvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2VuZGVkJywgaGFuZGxlRW5kZWQpO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBhdWRpby5hZGRFdmVudExpc3RlbmVyKCdlbmRlZCcsIGhhbmRsZUVuZGVkKTtcblxuICAgICAgICAgIC8vIHN0b3JlIHJlZmVyZW5jZXMgdG8gcmVtb3ZlIGxhdGVyXG4gICAgICAgICAgdGhpcy5fYXVkaW8gPSBhdWRpbztcbiAgICAgICAgICB0aGlzLl9oYW5kbGVQbGF5aW5nID0gaGFuZGxlUGxheWluZztcbiAgICAgICAgICB0aGlzLl9oYW5kbGVFbmRlZCA9IGhhbmRsZUVuZGVkO1xuICAgICAgICAgIHRoaXMuX2VuYWJsZUF1ZGlvID0gZW5hYmxlQXVkaW87XG4gICAgICAgICAgLy8gc2V0IHRvIHRydWUgdG8gcHJldmVudCBtdWx0aXBsZSBpbml0aWFsaXphdGlvbnNcbiAgICAgICAgICB0aGlzLl9hdWRpb0luaXRpYWxpemVkID0gdHJ1ZTtcblxuICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBvYnNlcnZlci5vYnNlcnZlKHRoaXMsIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH0pO1xuICB9XG5cbiAgZW5hYmxlS2V5Ym9hcmRFdmVudHMoKSB7XG4gICAgaWYgKCF0aGlzLl9rZXlib2FyZEV2ZW50c0VuYWJsZWQpIHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fYm91bmRIYW5kbGVLZXlEb3duKTtcbiAgICAgIHRoaXMuX2tleWJvYXJkRXZlbnRzRW5hYmxlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgX2luaXRQbGF5ZXJPYnNlcnZlcigpIHtcbiAgICBjb25zdCBwbGF5ZXIgPSB0aGlzLmNsb3Nlc3QoJ3BpZS1wbGF5ZXInKSB8fCB0aGlzLmNsb3Nlc3QoJ3BpZS1pdGVtLXBsYXllcicpO1xuICAgIGlmICghcGxheWVyKSByZXR1cm47XG5cbiAgICB0aGlzLl9wbGF5ZXJPYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHtcbiAgICAgIHRoaXMuX3JlcmVuZGVyKCk7XG4gICAgfSk7XG4gICAgdGhpcy5fcGxheWVyT2JzZXJ2ZXIub2JzZXJ2ZShwbGF5ZXIsIHtcbiAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFsnYmFzZS1oZWFkaW5nLWxldmVsJywgJ2Jhc2VoZWFkaW5nbGV2ZWwnLCAnaW5jbHVkZS1zci1oZWFkaW5nJywgJ2luY2x1ZGVzcmhlYWRpbmcnXSxcbiAgICB9KTtcbiAgfVxuXG4gIF9kaXNjb25uZWN0UGxheWVyT2JzZXJ2ZXIoKSB7XG4gICAgaWYgKHRoaXMuX3BsYXllck9ic2VydmVyKSB7XG4gICAgICB0aGlzLl9wbGF5ZXJPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB0aGlzLl9wbGF5ZXJPYnNlcnZlciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5fZGlzY29ubmVjdE1hdGhPYnNlcnZlcigpO1xuICAgIHRoaXMuX2Rpc2Nvbm5lY3RQbGF5ZXJPYnNlcnZlcigpO1xuICAgIGlmICh0aGlzLl9rZXlib2FyZEV2ZW50c0VuYWJsZWQpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5fYm91bmRIYW5kbGVLZXlEb3duKTtcbiAgICAgIHRoaXMuX2tleWJvYXJkRXZlbnRzRW5hYmxlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fZW5hYmxlQXVkaW8pO1xuXG4gICAgaWYgKHRoaXMuX2F1ZGlvKSB7XG4gICAgICB0aGlzLl9hdWRpby5yZW1vdmVFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgdGhpcy5faGFuZGxlUGxheWluZyk7XG4gICAgICB0aGlzLl9hdWRpby5yZW1vdmVFdmVudExpc3RlbmVyKCdlbmRlZCcsIHRoaXMuX2hhbmRsZUVuZGVkKTtcbiAgICAgIHRoaXMuX2F1ZGlvID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcm9vdCkge1xuICAgICAgdGhpcy5fcm9vdC51bm1vdW50KCk7XG4gICAgICB0aGlzLl9yb290ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBnbG9iYWwga2V5Ym9hcmQgZXZlbnRzIGZvciBzZWxlY3Rpbmcgb3IgdG9nZ2xpbmcgbXVsdGlwbGUtY2hvaWNlIGFuc3dlcnMuXG4gICAqIE1hcHMga2V5cyAoMS05LCAwLCBhLWosIEEtSikgdG8gY2hvaWNlcyBhbmQgdXBkYXRlcyB0aGUgc2Vzc2lvbiBzdGF0ZSBhY2NvcmRpbmdseS5cbiAgICogRW5zdXJlcyB2YWxpZCBrZXkgcHJlc3NlcyB0b2dnbGUgb3Igc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBjaG9pY2UgYmFzZWQgb24gdGhlIG1vZGVsLlxuICAgKi9cbiAgaGFuZGxlS2V5RG93bihldmVudCkge1xuICAgIGlmICghdGhpcy5fbW9kZWwgfHwgIXRoaXMuX3Nlc3Npb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IG1vZGUgfSA9IHRoaXMuX21vZGVsO1xuICAgIGlmIChtb2RlICE9PSAnZ2F0aGVyJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGtleVRvSW5kZXggPSAoa2V5KSA9PiB7XG4gICAgICBjb25zdCBudW1PZmZzZXQgPSBrZXkgPj0gJzEnICYmIGtleSA8PSAnOScgPyBrZXkgLSAnMScgOiBrZXkgPT09ICcwJyA/IDkgOiAtMTtcbiAgICAgIGNvbnN0IGxldHRlck9mZnNldCA9IC9eW2EtakEtSl0kLy50ZXN0KGtleSkgPyBrZXkudG9Mb3dlckNhc2UoKS5jaGFyQ29kZUF0KDApIC0gJ2EnLmNoYXJDb2RlQXQoMCkgOiAtMTtcbiAgICAgIHJldHVybiBudW1PZmZzZXQgPj0gMCA/IG51bU9mZnNldCA6IGxldHRlck9mZnNldDtcbiAgICB9O1xuXG4gICAgY29uc3QgY2hvaWNlSW5kZXggPSBrZXlUb0luZGV4KGV2ZW50LmtleSk7XG5cbiAgICBpZiAoY2hvaWNlSW5kZXggPT09IHVuZGVmaW5lZCB8fCBjaG9pY2VJbmRleCA8PSAtMSB8fCBjaG9pY2VJbmRleCA+PSB0aGlzLl9tb2RlbC5jaG9pY2VzPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLl9zZXNzaW9uLnZhbHVlIHx8IFtdO1xuICAgIGNvbnN0IGNob2ljZUlkID0gdGhpcy5fbW9kZWwuY2hvaWNlc1tjaG9pY2VJbmRleF0udmFsdWU7XG5cbiAgICBjb25zdCBhbHJlYWR5U2VsZWN0ZWQgPSBjdXJyZW50VmFsdWUuaW5jbHVkZXMoY2hvaWNlSWQpO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0ge1xuICAgICAgdmFsdWU6IGNob2ljZUlkLFxuICAgICAgc2VsZWN0ZWQ6IHRoaXMuX21vZGVsLmNob2ljZU1vZGUgPT09ICdyYWRpbycgPyB0cnVlIDogIWFscmVhZHlTZWxlY3RlZCxcbiAgICAgIHNlbGVjdG9yOiAnS2V5Ym9hcmQnLFxuICAgIH07XG5cbiAgICB0aGlzLl9vbkNoYW5nZShuZXdWYWx1ZSk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxLQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxTQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxNQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxnQkFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sY0FBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sU0FBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsZUFBQSxHQUFBUixPQUFBO0FBQ0EsSUFBQVMsTUFBQSxHQUFBVCxPQUFBO0FBRUEsTUFBTVUsR0FBRyxHQUFHLElBQUFDLGNBQUssRUFBQyx3QkFBd0IsQ0FBQztBQUVwQyxNQUFNQyxVQUFVLEdBQUdBLENBQUNDLE9BQU8sRUFBRUMsS0FBSyxFQUFFQyxhQUFhLEVBQUVDLGNBQWMsS0FBSztFQUMzRSxNQUFNO0lBQUVDLG9CQUFvQjtJQUFFQztFQUFxQixDQUFDLEdBQUdKLEtBQUssSUFBSSxDQUFDLENBQUM7O0VBRWxFO0VBQ0EsSUFBSUcsb0JBQW9CLElBQUlDLG9CQUFvQixJQUFJLENBQUNILGFBQWEsRUFBRTtJQUNsRSxJQUFJQyxjQUFjLEVBQUU7TUFDbEIsTUFBTUcsS0FBSyxHQUFHSCxjQUFjLENBQUNJLGFBQWEsQ0FBQyxPQUFPLENBQUM7TUFDbkQsTUFBTUMsY0FBYyxHQUFHRixLQUFLLElBQUlBLEtBQUssQ0FBQ0csT0FBTyxDQUFDLGlCQUFpQixDQUFDOztNQUVoRTtNQUNBLElBQUlILEtBQUssSUFBSUUsY0FBYyxFQUFFO1FBQzNCLE9BQU8sS0FBSztNQUNkO0lBQ0Y7RUFDRjtFQUVBLElBQUksQ0FBQ1IsT0FBTyxJQUFJLENBQUNBLE9BQU8sQ0FBQ1UsS0FBSyxFQUFFO0lBQzlCLE9BQU8sS0FBSztFQUNkO0VBRUEsTUFBTTtJQUFFQyxVQUFVO0lBQUVDLGFBQWEsR0FBRyxDQUFDO0lBQUVDO0VBQWMsQ0FBQyxHQUFHWixLQUFLLElBQUksQ0FBQyxDQUFDO0VBQ3BFLE1BQU1hLFVBQVUsR0FBR2QsT0FBTyxDQUFDVSxLQUFLLENBQUNLLE1BQU0sSUFBSSxDQUFDO0VBRTVDLElBQUlKLFVBQVUsS0FBSyxPQUFPLEVBQUU7SUFDMUIsT0FBTyxDQUFDLENBQUNHLFVBQVU7RUFDckI7RUFFQSxJQUFJQSxVQUFVLEdBQUdGLGFBQWEsSUFBSSxJQUFBSSwyQkFBb0IsRUFBQ0YsVUFBVSxFQUFFRCxhQUFhLENBQUMsRUFBRTtJQUNqRixPQUFPLEtBQUs7RUFDZDtFQUVBLE9BQU8sSUFBSTtBQUNiLENBQUM7QUFBQ0ksT0FBQSxDQUFBbEIsVUFBQSxHQUFBQSxVQUFBO0FBRUYsU0FBU21CLG1CQUFtQkEsQ0FBQ0MsT0FBTyxFQUFFO0VBQ3BDLE1BQU1DLE1BQU0sR0FDVkQsT0FBTyxDQUFDVixPQUFPLENBQUMsWUFBWSxDQUFDLElBQzdCVSxPQUFPLENBQUNWLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztFQUVwQyxJQUFJLENBQUNXLE1BQU0sRUFBRTtJQUNYLE9BQU87TUFBRUMsZ0JBQWdCLEVBQUVDLFNBQVM7TUFBRUMsZ0JBQWdCLEVBQUU7SUFBSyxDQUFDO0VBQ2hFO0VBRUEsTUFBTUMsTUFBTSxHQUFHQSxDQUFDQyxhQUFhLEVBQUVDLGNBQWMsRUFBRUMsWUFBWSxLQUFLO0lBQzlELElBQUlDLEdBQUcsR0FBR1IsTUFBTSxDQUFDSyxhQUFhLENBQUM7O0lBRS9CO0lBQ0EsSUFBSUcsR0FBRyxJQUFJLElBQUksRUFBRTtNQUNmQSxHQUFHLEdBQ0RSLE1BQU0sQ0FBQ1MsWUFBWSxDQUFDSCxjQUFjLENBQUMsSUFDbkNOLE1BQU0sQ0FBQ1MsWUFBWSxDQUFDRixZQUFZLENBQUM7SUFDckM7SUFFQSxPQUFPQyxHQUFHO0VBQ1osQ0FBQztFQUVELE1BQU1FLFFBQVEsR0FBR04sTUFBTSxDQUFDLGtCQUFrQixFQUFFLG9CQUFvQixFQUFFLGtCQUFrQixDQUFDO0VBQ3JGLE1BQU1PLEtBQUssR0FBR0MsUUFBUSxDQUFDRixRQUFRLEVBQUUsRUFBRSxDQUFDO0VBQ3BDLE1BQU1ULGdCQUFnQixHQUFHWSxNQUFNLENBQUNDLFFBQVEsQ0FBQ0gsS0FBSyxDQUFDLElBQUlBLEtBQUssSUFBSSxDQUFDLElBQUlBLEtBQUssSUFBSSxDQUFDLEdBQUdBLEtBQUssR0FBR1QsU0FBUztFQUUvRixNQUFNYSxLQUFLLEdBQUdYLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsQ0FBQztFQUNsRixNQUFNRCxnQkFBZ0IsR0FBR1ksS0FBSyxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUdBLEtBQUssS0FBSyxLQUFLLElBQUlBLEtBQUssS0FBSyxPQUFPO0VBRXBGLE9BQU87SUFBRWQsZ0JBQWdCO0lBQUVFO0VBQWlCLENBQUM7QUFDL0M7O0FBRUE7QUFDQTtBQUNBLFNBQVNhLG1CQUFtQkEsQ0FBQ2pCLE9BQU8sRUFBRTtFQUNwQyxNQUFNa0IsVUFBVSxHQUFHbkIsbUJBQW1CLENBQUNDLE9BQU8sQ0FBQztFQUUvQyxPQUFPO0lBQ0xFLGdCQUFnQixFQUFFRixPQUFPLENBQUNtQixpQkFBaUIsS0FBS2hCLFNBQVMsR0FBR0gsT0FBTyxDQUFDbUIsaUJBQWlCLEdBQUdELFVBQVUsQ0FBQ2hCLGdCQUFnQjtJQUNuSEUsZ0JBQWdCLEVBQUVKLE9BQU8sQ0FBQ29CLGlCQUFpQixLQUFLakIsU0FBUyxHQUFHSCxPQUFPLENBQUNvQixpQkFBaUIsR0FBR0YsVUFBVSxDQUFDZDtFQUNyRyxDQUFDO0FBQ0g7QUFFZSxNQUFNaUIsY0FBYyxTQUFTQyxXQUFXLENBQUM7RUFDdERDLFdBQVdBLENBQUEsRUFBRztJQUNaLEtBQUssQ0FBQyxDQUFDO0lBQUMsSUFBQUMsZ0JBQUEsQ0FBQUMsT0FBQSwrQkEwRVksTUFBTTtNQUMxQixJQUFJLElBQUksQ0FBQ0Msa0JBQWtCLEVBQUU7TUFDN0IsSUFBSSxDQUFDQSxrQkFBa0IsR0FBRyxJQUFJO01BRTlCQyxxQkFBcUIsQ0FBQyxNQUFNO1FBQzFCLElBQUksSUFBSSxDQUFDQyxhQUFhLEVBQUU7VUFDdEIsSUFBSSxDQUFDQSxhQUFhLENBQUNDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pDO1FBQ0FuRCxHQUFHLENBQUMsK0JBQStCLENBQUM7UUFDcEMsSUFBQW9ELHlCQUFVLEVBQUMsSUFBSSxDQUFDO1FBQ2hCLElBQUksQ0FBQ0osa0JBQWtCLEdBQUcsS0FBSztRQUMvQkssVUFBVSxDQUFDLE1BQU07VUFDZixJQUFJLElBQUksQ0FBQ0gsYUFBYSxFQUFFO1lBQ3RCLElBQUksQ0FBQ0EsYUFBYSxDQUFDSSxPQUFPLENBQUMsSUFBSSxFQUFFO2NBQUVDLFNBQVMsRUFBRSxJQUFJO2NBQUVDLE9BQU8sRUFBRTtZQUFLLENBQUMsQ0FBQztVQUN0RTtRQUNGLENBQUMsRUFBRSxFQUFFLENBQUM7TUFDUixDQUFDLENBQUM7SUFDSixDQUFDO0lBMUZDLElBQUksQ0FBQ0MsTUFBTSxHQUFHLElBQUk7SUFDbEIsSUFBSSxDQUFDQyxRQUFRLEdBQUcsSUFBSTtJQUNwQixJQUFJLENBQUNDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUN0QixJQUFJLENBQUN0RCxhQUFhLEdBQUcsS0FBSztJQUMxQixJQUFJLENBQUN1RCxtQkFBbUIsR0FBRyxJQUFJLENBQUNDLGFBQWEsQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQztJQUN4RCxJQUFJLENBQUNDLHNCQUFzQixHQUFHLEtBQUs7SUFDbkMsSUFBSSxDQUFDQyxpQkFBaUIsR0FBRyxLQUFLO0lBQzlCLElBQUksQ0FBQ0MsS0FBSyxHQUFHLElBQUk7SUFDakIsSUFBSSxDQUFDZixhQUFhLEdBQUcsSUFBSTtJQUN6QixJQUFJLENBQUNGLGtCQUFrQixHQUFHLEtBQUs7SUFFL0IsSUFBSSxDQUFDa0IsU0FBUyxHQUFHLElBQUFDLGtCQUFRLEVBQ3ZCLE1BQU07TUFDSixJQUFJLElBQUksQ0FBQ1YsTUFBTSxJQUFJLElBQUksQ0FBQ0MsUUFBUSxFQUFFO1FBQ2hDLElBQUlwQyxPQUFPLGdCQUFHOEMsY0FBSyxDQUFDQyxhQUFhLENBQUNDLGFBQUksRUFBRTtVQUN0Q2xFLEtBQUssRUFBRSxJQUFJLENBQUNxRCxNQUFNO1VBQ2xCdEQsT0FBTyxFQUFFLElBQUksQ0FBQ3VELFFBQVE7VUFDdEJhLE9BQU8sRUFBRSxJQUFJLENBQUNaLFFBQVE7VUFDdEJhLGVBQWUsRUFBRSxJQUFJLENBQUNDLFNBQVMsQ0FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQztVQUMxQ1ksbUJBQW1CLEVBQUUsSUFBSSxDQUFDQSxtQkFBbUIsQ0FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQztVQUN4RCxHQUFHdkIsbUJBQW1CLENBQUMsSUFBSTtRQUM3QixDQUFDLENBQUM7O1FBRUY7UUFDQSxJQUFJLENBQUNvQyxZQUFZLENBQ2YsWUFBWSxFQUNaLElBQUksQ0FBQ2xCLE1BQU0sQ0FBQzNDLFVBQVUsS0FBSyxPQUFPLEdBQUcsMEJBQTBCLEdBQUcsa0NBQ3BFLENBQUM7UUFDRCxJQUFJLENBQUM2RCxZQUFZLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQztRQUNuQyxJQUFJLENBQUNDLGdCQUFnQixDQUFDLENBQUM7UUFFdkIsSUFBSSxDQUFDQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRXhCLElBQUksQ0FBQyxJQUFJLENBQUNaLEtBQUssRUFBRTtVQUNmLElBQUksQ0FBQ0EsS0FBSyxHQUFHLElBQUFhLGtCQUFVLEVBQUMsSUFBSSxDQUFDO1FBQy9CO1FBQ0EsSUFBSSxDQUFDYixLQUFLLENBQUNjLE1BQU0sQ0FBQ3pELE9BQU8sQ0FBQztRQUUxQixJQUFJLElBQUksQ0FBQ21DLE1BQU0sQ0FBQ3VCLHFCQUFxQixLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQ2pCLHNCQUFzQixFQUFFO1VBQzlFLElBQUksQ0FBQ2tCLG9CQUFvQixDQUFDLENBQUM7UUFDN0I7TUFDRixDQUFDLE1BQU07UUFDTGpGLEdBQUcsQ0FBQyxNQUFNLENBQUM7TUFDYjtJQUNGLENBQUMsRUFDRCxFQUFFLEVBQ0Y7TUFBRWtGLE9BQU8sRUFBRSxLQUFLO01BQUVDLFFBQVEsRUFBRTtJQUFLLENBQ25DLENBQUM7SUFFRCxJQUFJLENBQUNDLHdCQUF3QixHQUFHLElBQUFqQixrQkFBUSxFQUFDLE1BQU07TUFDN0MsSUFBSSxDQUFDa0IsYUFBYSxDQUNoQixJQUFJQyxvQ0FBbUIsQ0FDckIsSUFBSSxDQUFDQyxPQUFPLENBQUNDLFdBQVcsQ0FBQyxDQUFDLEVBQzFCdEYsVUFBVSxDQUFDLElBQUksQ0FBQ3dELFFBQVEsRUFBRSxJQUFJLENBQUNELE1BQU0sRUFBRSxJQUFJLENBQUNwRCxhQUFhLEVBQUUsSUFBSSxDQUNqRSxDQUNGLENBQUM7SUFDSCxDQUFDLENBQUM7SUFFRixJQUFJLENBQUNvRixpQkFBaUIsR0FBRyxJQUFBdEIsa0JBQVEsRUFDL0IsTUFBTTtNQUNKLElBQUksQ0FBQ2tCLGFBQWEsQ0FDaEIsSUFBSUssOEJBQWEsQ0FDZixJQUFJLENBQUNILE9BQU8sQ0FBQ0MsV0FBVyxDQUFDLENBQUMsRUFDMUJ0RixVQUFVLENBQUMsSUFBSSxDQUFDd0QsUUFBUSxFQUFFLElBQUksQ0FBQ0QsTUFBTSxFQUFFLElBQUksQ0FBQ3BELGFBQWEsRUFBRSxJQUFJLENBQUMsRUFDaEUsSUFBSSxDQUFDb0QsTUFBTSxLQUFLaEMsU0FDbEIsQ0FDRixDQUFDO0lBQ0gsQ0FBQyxFQUNELEVBQUUsRUFDRjtNQUFFeUQsT0FBTyxFQUFFLEtBQUs7TUFBRUMsUUFBUSxFQUFFO0lBQUssQ0FDbkMsQ0FBQztFQUNIO0VBcUJBTixpQkFBaUJBLENBQUEsRUFBRztJQUNsQixJQUFJLElBQUksQ0FBQzNCLGFBQWEsRUFBRTtJQUN4QixJQUFJLENBQUNBLGFBQWEsR0FBRyxJQUFJeUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDQyxtQkFBbUIsQ0FBQztJQUNuRSxJQUFJLENBQUMxQyxhQUFhLENBQUNJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7TUFBRUMsU0FBUyxFQUFFLElBQUk7TUFBRUMsT0FBTyxFQUFFO0lBQUssQ0FBQyxDQUFDO0VBQ3RFO0VBRUFxQyx1QkFBdUJBLENBQUEsRUFBRztJQUN4QixJQUFJLElBQUksQ0FBQzNDLGFBQWEsRUFBRTtNQUN0QixJQUFJLENBQUNBLGFBQWEsQ0FBQ0MsVUFBVSxDQUFDLENBQUM7TUFDL0IsSUFBSSxDQUFDRCxhQUFhLEdBQUcsSUFBSTtJQUMzQjtFQUNGO0VBRUF3QixtQkFBbUJBLENBQUEsRUFBRztJQUNwQixJQUFBdEIseUJBQVUsRUFBQyxJQUFJLENBQUM7RUFDbEI7RUFFQXdCLGdCQUFnQkEsQ0FBQSxFQUFHO0lBQ2pCLE1BQU1rQixRQUFRLEdBQUcsSUFBSSxDQUFDckMsTUFBTSxJQUFJLE9BQU8sSUFBSSxDQUFDQSxNQUFNLENBQUNxQyxRQUFRLEdBQUcsSUFBSSxDQUFDckMsTUFBTSxDQUFDcUMsUUFBUSxHQUFHLEVBQUU7SUFDdkYsTUFBTUMsSUFBSSxHQUFHRCxRQUFRLEdBQUdBLFFBQVEsQ0FBQ0UsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJO0lBQ25ELElBQUksQ0FBQ3JCLFlBQVksQ0FBQyxNQUFNLEVBQUVvQixJQUFJLENBQUM7RUFDakM7RUFFQSxJQUFJM0YsS0FBS0EsQ0FBQzZGLENBQUMsRUFBRTtJQUNYLElBQUksQ0FBQ3hDLE1BQU0sR0FBR3dDLENBQUM7SUFDZixJQUFJLENBQUMvQixTQUFTLENBQUMsQ0FBQztJQUNoQjtJQUNBLElBQUksQ0FBQ0YsaUJBQWlCLEdBQUcsS0FBSztJQUM5QixJQUFJLENBQUN5QixpQkFBaUIsQ0FBQyxDQUFDO0VBQzFCO0VBRUEsSUFBSXRGLE9BQU9BLENBQUEsRUFBRztJQUNaLE9BQU8sSUFBSSxDQUFDdUQsUUFBUTtFQUN0QjtFQUVBLElBQUlhLE9BQU9BLENBQUEsRUFBRztJQUNaLE9BQU8sSUFBSSxDQUFDWixRQUFRO0VBQ3RCO0VBRUEsSUFBSVksT0FBT0EsQ0FBQzJCLENBQUMsRUFBRTtJQUNiLElBQUksQ0FBQ3ZDLFFBQVEsR0FBR3VDLENBQUM7SUFDakIsSUFBSSxDQUFDaEMsU0FBUyxDQUFDLENBQUM7RUFDbEI7RUFFQSxJQUFJMUMsZ0JBQWdCQSxDQUFDVSxLQUFLLEVBQUU7SUFDMUIsSUFBSSxDQUFDTyxpQkFBaUIsR0FBR1AsS0FBSztJQUM5QixJQUFJLENBQUNnQyxTQUFTLENBQUMsQ0FBQztFQUNsQjtFQUVBLElBQUl4QyxnQkFBZ0JBLENBQUNiLEtBQUssRUFBRTtJQUMxQixJQUFJLENBQUM2QixpQkFBaUIsR0FBRzdCLEtBQUs7SUFDOUIsSUFBSSxDQUFDcUQsU0FBUyxDQUFDLENBQUM7RUFDbEI7RUFFQSxJQUFJL0QsT0FBT0EsQ0FBQzhGLENBQUMsRUFBRTtJQUNiLElBQUksQ0FBQ3ZDLFFBQVEsR0FBR3VDLENBQUM7SUFDakIsSUFBSSxDQUFDL0IsU0FBUyxDQUFDLENBQUM7SUFDaEI7SUFDQSxJQUFJLENBQUNrQix3QkFBd0IsQ0FBQyxDQUFDO0VBQ2pDO0VBRUFYLFNBQVNBLENBQUMwQixJQUFJLEVBQUU7SUFDZCxJQUFBQyxrQ0FBa0IsRUFBQyxJQUFJLENBQUMxQyxRQUFRLEVBQUUsSUFBSSxDQUFDRCxNQUFNLENBQUMzQyxVQUFVLEVBQUVxRixJQUFJLENBQUM7SUFDL0QsSUFBSSxDQUFDZix3QkFBd0IsQ0FBQyxDQUFDO0lBQy9CLElBQUksQ0FBQ2xCLFNBQVMsQ0FBQyxDQUFDO0VBQ2xCO0VBRUFtQyxxQkFBcUJBLENBQUEsRUFBRztJQUN0QixNQUFNQyxJQUFJLEdBQUdDLFFBQVEsQ0FBQ2xDLGFBQWEsQ0FBQyxLQUFLLENBQUM7SUFDMUNpQyxJQUFJLENBQUNFLEVBQUUsR0FBRyxpQkFBaUI7SUFFM0JDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDSixJQUFJLENBQUNLLEtBQUssRUFBRTtNQUN4QkMsUUFBUSxFQUFFLFVBQVU7TUFDcEJDLEdBQUcsRUFBRSxDQUFDO01BQ05DLEtBQUssRUFBRSxNQUFNO01BQ2JDLE1BQU0sRUFBRSxNQUFNO01BQ2RDLE9BQU8sRUFBRSxNQUFNO01BQ2ZDLGNBQWMsRUFBRSxRQUFRO01BQ3hCQyxVQUFVLEVBQUUsUUFBUTtNQUNwQkMsVUFBVSxFQUFFLE9BQU87TUFDbkJDLE1BQU0sRUFBRSxNQUFNO01BQ2RDLE1BQU0sRUFBRTtJQUNWLENBQUMsQ0FBQztJQUVGLE1BQU1DLEdBQUcsR0FBR2YsUUFBUSxDQUFDbEMsYUFBYSxDQUFDLEtBQUssQ0FBQztJQUN6Q2lELEdBQUcsQ0FBQ0MsR0FBRyxHQUFHQyxrQ0FBd0I7SUFDbENGLEdBQUcsQ0FBQ0csR0FBRyxHQUFHLHlDQUF5QztJQUNuREgsR0FBRyxDQUFDUixLQUFLLEdBQUcsR0FBRztJQUNmUSxHQUFHLENBQUNQLE1BQU0sR0FBRyxHQUFHO0lBRWhCVCxJQUFJLENBQUNvQixXQUFXLENBQUNKLEdBQUcsQ0FBQztJQUNyQixPQUFPaEIsSUFBSTtFQUNiO0VBRUFxQixpQkFBaUJBLENBQUEsRUFBRztJQUNsQixJQUFJLENBQUM5QyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3hCLElBQUksQ0FBQytDLG1CQUFtQixDQUFDLENBQUM7SUFDMUIsSUFBSSxDQUFDMUQsU0FBUyxDQUFDLENBQUM7O0lBRWhCO0lBQ0E7SUFDQTtJQUNBLE1BQU0yRCxRQUFRLEdBQUcsSUFBSWxDLGdCQUFnQixDQUFDLENBQUNtQyxhQUFhLEVBQUVELFFBQVEsS0FBSztNQUNqRUMsYUFBYSxDQUFDQyxPQUFPLENBQUVDLFFBQVEsSUFBSztRQUNsQyxJQUFJQSxRQUFRLENBQUNDLElBQUksS0FBSyxXQUFXLEVBQUU7VUFDakMsSUFBSSxJQUFJLENBQUNqRSxpQkFBaUIsRUFBRTtVQUU1QixNQUFNdkQsS0FBSyxHQUFHLElBQUksQ0FBQ0MsYUFBYSxDQUFDLE9BQU8sQ0FBQztVQUN6QyxNQUFNQyxjQUFjLEdBQUdGLEtBQUssSUFBSUEsS0FBSyxDQUFDRyxPQUFPLENBQUMsaUJBQWlCLENBQUM7VUFFaEUsSUFBSSxDQUFDLElBQUksQ0FBQzZDLE1BQU0sRUFBRTtVQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDQSxNQUFNLENBQUNsRCxvQkFBb0IsRUFBRTtVQUN2QyxJQUFJRSxLQUFLLElBQUksQ0FBQ0UsY0FBYyxFQUFFO1VBQzlCLElBQUksQ0FBQ0YsS0FBSyxFQUFFO1VBRVosTUFBTTZGLElBQUksR0FBRyxJQUFJLENBQUNELHFCQUFxQixDQUFDLENBQUM7VUFDekMsTUFBTTZCLFNBQVMsR0FBRyxJQUFJLENBQUN4SCxhQUFhLENBQUMsaUJBQWlCLENBQUM7VUFDdkQsTUFBTXlILFdBQVcsR0FBR0EsQ0FBQSxLQUFNO1lBQ3hCLElBQUksSUFBSSxDQUFDekgsYUFBYSxDQUFDLGtCQUFrQixDQUFDLEVBQUU7Y0FDMUNELEtBQUssQ0FBQzJILElBQUksQ0FBQyxDQUFDO2NBQ1pGLFNBQVMsQ0FBQ0csV0FBVyxDQUFDL0IsSUFBSSxDQUFDO1lBQzdCO1lBRUFDLFFBQVEsQ0FBQytCLG1CQUFtQixDQUFDLE9BQU8sRUFBRUgsV0FBVyxDQUFDO1VBQ3BELENBQUM7O1VBRUQ7VUFDQTtVQUNBOUUsVUFBVSxDQUFDLE1BQU07WUFDZixJQUFJNUMsS0FBSyxDQUFDOEgsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDN0gsYUFBYSxDQUFDLGtCQUFrQixDQUFDLEVBQUU7Y0FDM0Q7Y0FDQXdILFNBQVMsQ0FBQ1IsV0FBVyxDQUFDcEIsSUFBSSxDQUFDO2NBQzNCQyxRQUFRLENBQUNpQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUVMLFdBQVcsQ0FBQztZQUNqRCxDQUFDLE1BQU07Y0FDTDVCLFFBQVEsQ0FBQytCLG1CQUFtQixDQUFDLE9BQU8sRUFBRUgsV0FBVyxDQUFDO1lBQ3BEO1VBQ0YsQ0FBQyxFQUFFLEdBQUcsQ0FBQzs7VUFFUDtVQUNBLE1BQU1NLGFBQWEsR0FBR0EsQ0FBQSxLQUFNO1lBQzFCLElBQUFDLHFDQUFxQixFQUFDLElBQUksQ0FBQ2hGLFFBQVEsRUFBRTtjQUFFaUYsY0FBYyxFQUFFLElBQUlDLElBQUksQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQztZQUFFLENBQUMsQ0FBQztZQUU5RSxNQUFNdkMsSUFBSSxHQUFHLElBQUksQ0FBQzVGLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQztZQUNuRCxJQUFJNEYsSUFBSSxFQUFFO2NBQ1I0QixTQUFTLENBQUNHLFdBQVcsQ0FBQy9CLElBQUksQ0FBQztZQUM3QjtZQUVBN0YsS0FBSyxDQUFDNkgsbUJBQW1CLENBQUMsU0FBUyxFQUFFRyxhQUFhLENBQUM7VUFDckQsQ0FBQztVQUVEaEksS0FBSyxDQUFDK0gsZ0JBQWdCLENBQUMsU0FBUyxFQUFFQyxhQUFhLENBQUM7O1VBRWhEO1VBQ0EsTUFBTUssV0FBVyxHQUFHQSxDQUFBLEtBQU07WUFDeEIsSUFBQUoscUNBQXFCLEVBQUMsSUFBSSxDQUFDaEYsUUFBUSxFQUFFO2NBQUVxRixZQUFZLEVBQUUsSUFBSUgsSUFBSSxDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDO1lBQUUsQ0FBQyxDQUFDO1lBQzVFLElBQUksQ0FBQ3hJLGFBQWEsR0FBRyxJQUFJO1lBQ3pCLElBQUksQ0FBQytFLHdCQUF3QixDQUFDLENBQUM7WUFDL0IzRSxLQUFLLENBQUM2SCxtQkFBbUIsQ0FBQyxPQUFPLEVBQUVRLFdBQVcsQ0FBQztVQUNqRCxDQUFDO1VBRURySSxLQUFLLENBQUMrSCxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUVNLFdBQVcsQ0FBQzs7VUFFNUM7VUFDQSxJQUFJLENBQUNFLE1BQU0sR0FBR3ZJLEtBQUs7VUFDbkIsSUFBSSxDQUFDd0ksY0FBYyxHQUFHUixhQUFhO1VBQ25DLElBQUksQ0FBQ1MsWUFBWSxHQUFHSixXQUFXO1VBQy9CLElBQUksQ0FBQ0ssWUFBWSxHQUFHaEIsV0FBVztVQUMvQjtVQUNBLElBQUksQ0FBQ25FLGlCQUFpQixHQUFHLElBQUk7VUFFN0I2RCxRQUFRLENBQUMxRSxVQUFVLENBQUMsQ0FBQztRQUN2QjtNQUNGLENBQUMsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGMEUsUUFBUSxDQUFDdkUsT0FBTyxDQUFDLElBQUksRUFBRTtNQUFFQyxTQUFTLEVBQUUsSUFBSTtNQUFFQyxPQUFPLEVBQUU7SUFBSyxDQUFDLENBQUM7RUFDNUQ7RUFFQXlCLG9CQUFvQkEsQ0FBQSxFQUFHO0lBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUNsQixzQkFBc0IsRUFBRTtNQUNoQ3FGLE1BQU0sQ0FBQ1osZ0JBQWdCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQzVFLG1CQUFtQixDQUFDO01BQzVELElBQUksQ0FBQ0csc0JBQXNCLEdBQUcsSUFBSTtJQUNwQztFQUNGO0VBRUE2RCxtQkFBbUJBLENBQUEsRUFBRztJQUNwQixNQUFNckcsTUFBTSxHQUFHLElBQUksQ0FBQ1gsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQ0EsT0FBTyxDQUFDLGlCQUFpQixDQUFDO0lBQzVFLElBQUksQ0FBQ1csTUFBTSxFQUFFO0lBRWIsSUFBSSxDQUFDOEgsZUFBZSxHQUFHLElBQUkxRCxnQkFBZ0IsQ0FBQyxNQUFNO01BQ2hELElBQUksQ0FBQ3pCLFNBQVMsQ0FBQyxDQUFDO0lBQ2xCLENBQUMsQ0FBQztJQUNGLElBQUksQ0FBQ21GLGVBQWUsQ0FBQy9GLE9BQU8sQ0FBQy9CLE1BQU0sRUFBRTtNQUNuQytILFVBQVUsRUFBRSxJQUFJO01BQ2hCQyxlQUFlLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0I7SUFDdEcsQ0FBQyxDQUFDO0VBQ0o7RUFFQUMseUJBQXlCQSxDQUFBLEVBQUc7SUFDMUIsSUFBSSxJQUFJLENBQUNILGVBQWUsRUFBRTtNQUN4QixJQUFJLENBQUNBLGVBQWUsQ0FBQ2xHLFVBQVUsQ0FBQyxDQUFDO01BQ2pDLElBQUksQ0FBQ2tHLGVBQWUsR0FBRyxJQUFJO0lBQzdCO0VBQ0Y7RUFFQUksb0JBQW9CQSxDQUFBLEVBQUc7SUFDckIsSUFBSSxDQUFDNUQsdUJBQXVCLENBQUMsQ0FBQztJQUM5QixJQUFJLENBQUMyRCx5QkFBeUIsQ0FBQyxDQUFDO0lBQ2hDLElBQUksSUFBSSxDQUFDekYsc0JBQXNCLEVBQUU7TUFDL0JxRixNQUFNLENBQUNkLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMxRSxtQkFBbUIsQ0FBQztNQUMvRCxJQUFJLENBQUNHLHNCQUFzQixHQUFHLEtBQUs7SUFDckM7SUFFQXdDLFFBQVEsQ0FBQytCLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUNhLFlBQVksQ0FBQztJQUV4RCxJQUFJLElBQUksQ0FBQ0gsTUFBTSxFQUFFO01BQ2YsSUFBSSxDQUFDQSxNQUFNLENBQUNWLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUNXLGNBQWMsQ0FBQztNQUMvRCxJQUFJLENBQUNELE1BQU0sQ0FBQ1YsbUJBQW1CLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQ1ksWUFBWSxDQUFDO01BQzNELElBQUksQ0FBQ0YsTUFBTSxHQUFHLElBQUk7SUFDcEI7SUFFQSxJQUFJLElBQUksQ0FBQy9FLEtBQUssRUFBRTtNQUNkLElBQUksQ0FBQ0EsS0FBSyxDQUFDeUYsT0FBTyxDQUFDLENBQUM7TUFDcEIsSUFBSSxDQUFDekYsS0FBSyxHQUFHLElBQUk7SUFDbkI7RUFDRjs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0VBQ0VKLGFBQWFBLENBQUM4RixLQUFLLEVBQUU7SUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQ2xHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQ0MsUUFBUSxFQUFFO01BQ2xDO0lBQ0Y7SUFFQSxNQUFNO01BQUVrRztJQUFLLENBQUMsR0FBRyxJQUFJLENBQUNuRyxNQUFNO0lBQzVCLElBQUltRyxJQUFJLEtBQUssUUFBUSxFQUFFO01BQ3JCO0lBQ0Y7SUFFQSxNQUFNQyxVQUFVLEdBQUlDLEdBQUcsSUFBSztNQUMxQixNQUFNQyxTQUFTLEdBQUdELEdBQUcsSUFBSSxHQUFHLElBQUlBLEdBQUcsSUFBSSxHQUFHLEdBQUdBLEdBQUcsR0FBRyxHQUFHLEdBQUdBLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUM3RSxNQUFNRSxZQUFZLEdBQUcsWUFBWSxDQUFDQyxJQUFJLENBQUNILEdBQUcsQ0FBQyxHQUFHQSxHQUFHLENBQUN0RSxXQUFXLENBQUMsQ0FBQyxDQUFDMEUsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQ0EsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUN0RyxPQUFPSCxTQUFTLElBQUksQ0FBQyxHQUFHQSxTQUFTLEdBQUdDLFlBQVk7SUFDbEQsQ0FBQztJQUVELE1BQU1HLFdBQVcsR0FBR04sVUFBVSxDQUFDRixLQUFLLENBQUNHLEdBQUcsQ0FBQztJQUV6QyxJQUFJSyxXQUFXLEtBQUsxSSxTQUFTLElBQUkwSSxXQUFXLElBQUksQ0FBQyxDQUFDLElBQUlBLFdBQVcsSUFBSSxJQUFJLENBQUMxRyxNQUFNLENBQUMyRyxPQUFPLEVBQUVsSixNQUFNLEVBQUU7TUFDaEc7SUFDRjtJQUVBLE1BQU1tSixZQUFZLEdBQUcsSUFBSSxDQUFDM0csUUFBUSxDQUFDN0MsS0FBSyxJQUFJLEVBQUU7SUFDOUMsTUFBTXlKLFFBQVEsR0FBRyxJQUFJLENBQUM3RyxNQUFNLENBQUMyRyxPQUFPLENBQUNELFdBQVcsQ0FBQyxDQUFDdEosS0FBSztJQUV2RCxNQUFNMEosZUFBZSxHQUFHRixZQUFZLENBQUNHLFFBQVEsQ0FBQ0YsUUFBUSxDQUFDO0lBQ3ZELE1BQU1HLFFBQVEsR0FBRztNQUNmNUosS0FBSyxFQUFFeUosUUFBUTtNQUNmSSxRQUFRLEVBQUUsSUFBSSxDQUFDakgsTUFBTSxDQUFDM0MsVUFBVSxLQUFLLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQ3lKLGVBQWU7TUFDdEVJLFFBQVEsRUFBRTtJQUNaLENBQUM7SUFFRCxJQUFJLENBQUNsRyxTQUFTLENBQUNnRyxRQUFRLENBQUM7RUFDMUI7QUFDRjtBQUFDckosT0FBQSxDQUFBMkIsT0FBQSxHQUFBSixjQUFBIiwiaWdub3JlTGlzdCI6W119
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["_main","_interopRequireDefault","require","_react","_client","_lodashEs","_debug","_piePlayerEvents","_mathRendering","_renderUi","_sessionUpdater","_utils","log","debug","isComplete","session","model","audioComplete","elementContext","autoplayAudioEnabled","completeAudioEnabled","audio","querySelector","isInsidePrompt","closest","value","choiceMode","minSelections","maxSelections","selections","length","exceedsMaxSelections","exports","getPlayerAttributes","element","player","baseHeadingLevel","undefined","includeSrHeading","getRaw","camelCaseName","hyphenatedName","allLowerName","raw","getAttribute","levelRaw","level","parseInt","Number","isFinite","srRaw","resolveHeadingProps","fromPlayer","_baseHeadingLevel","_includeSrHeading","MultipleChoice","HTMLElement","constructor","_defineProperty2","default","_mathRenderPending","requestAnimationFrame","_mathObserver","disconnect","renderMath","setTimeout","observe","childList","subtree","_model","_session","_options","_boundHandleKeyDown","handleKeyDown","bind","_keyboardEventsEnabled","_audioInitialized","_root","_rerender","debounce","React","createElement","Main","options","onChoiceChanged","_onChange","onShowCorrectToggle","setAttribute","setLangAttribute","_initMathObserver","createRoot","render","keyboardEventsEnabled","enableKeyboardEvents","leading","trailing","_dispatchResponseChanged","dispatchEvent","SessionChangedEvent","tagName","toLowerCase","_dispatchModelSet","ModelSetEvent","MutationObserver","_scheduleMathRender","_disconnectMathObserver","language","lang","slice","s","o","data","updateSessionValue","_createAudioInfoToast","info","document","id","Object","assign","style","position","top","width","height","display","justifyContent","alignItems","background","zIndex","cursor","img","src","EnableAudioAutoplayImage","alt","appendChild","connectedCallback","_initPlayerObserver","observer","mutationsList","forEach","mutation","type","container","enableAudio","play","removeChild","removeEventListener","paused","addEventListener","handlePlaying","updateSessionMetadata","audioStartTime","Date","getTime","handleEnded","audioEndTime","_audio","_handlePlaying","_handleEnded","_enableAudio","window","_playerObserver","attributes","attributeFilter","_disconnectPlayerObserver","disconnectedCallback","unmount","event","mode","keyToIndex","key","numOffset","letterOffset","test","charCodeAt","choiceIndex","choices","currentValue","choiceId","alreadySelected","includes","newValue","selected","selector"],"sources":["../src/index.js"],"sourcesContent":["import Main from './main';\nimport React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { debounce } from 'lodash-es';\nimport debug from 'debug';\nimport { ModelSetEvent, SessionChangedEvent } from '@pie-framework/pie-player-events';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport { EnableAudioAutoplayImage } from '@pie-lib/render-ui';\nimport { updateSessionValue, updateSessionMetadata } from './session-updater';\nimport { exceedsMaxSelections } from './utils';\n\nconst log = debug('pie-ui:multiple-choice');\n\nexport const isComplete = (session, model, audioComplete, elementContext) => {\n const { autoplayAudioEnabled, completeAudioEnabled } = model || {};\n\n // check audio completion if audio settings are enabled and audio actually exists\n if (autoplayAudioEnabled && completeAudioEnabled && !audioComplete) {\n if (elementContext) {\n const audio = elementContext.querySelector('audio');\n const isInsidePrompt = audio && audio.closest('#preview-prompt');\n\n // only require audio completion if audio exists and is inside the prompt\n if (audio && isInsidePrompt) {\n return false;\n }\n }\n }\n\n if (!session || !session.value) {\n return false;\n }\n\n const { choiceMode, minSelections = 1, maxSelections } = model || {};\n const selections = session.value.length || 0;\n\n if (choiceMode === 'radio') {\n return !!selections;\n }\n\n if (selections < minSelections || exceedsMaxSelections(selections, maxSelections)) {\n return false;\n }\n\n return true;\n};\n\nfunction getPlayerAttributes(element) {\n const player =\n element.closest('pie-player') ||\n element.closest('pie-item-player');\n\n if (!player) {\n return { baseHeadingLevel: undefined, includeSrHeading: true };\n }\n\n const getRaw = (camelCaseName, hyphenatedName, allLowerName) => {\n let raw = player[camelCaseName];\n\n // fallback in case someone sets via HTML attribute manually\n if (raw == null) {\n raw =\n player.getAttribute(hyphenatedName) ??\n player.getAttribute(allLowerName);\n }\n\n return raw;\n };\n\n const levelRaw = getRaw('baseHeadingLevel', 'base-heading-level', 'baseheadinglevel');\n const level = parseInt(levelRaw, 10);\n const baseHeadingLevel = Number.isFinite(level) && level >= 1 && level <= 6 ? level : undefined;\n\n const srRaw = getRaw('includeSrHeading', 'include-sr-heading', 'includesrheading');\n const includeSrHeading = srRaw == null ? true : srRaw !== false && srRaw !== 'false';\n\n return { baseHeadingLevel, includeSrHeading };\n}\n\n// Resolves heading attributes for a custom element, preferring explicit instance\n// properties (set by a parent element such as EBSR) over player-level attributes.\nfunction resolveHeadingProps(element) {\n const fromPlayer = getPlayerAttributes(element);\n\n return {\n baseHeadingLevel: element._baseHeadingLevel !== undefined ? element._baseHeadingLevel : fromPlayer.baseHeadingLevel,\n includeSrHeading: element._includeSrHeading !== undefined ? element._includeSrHeading : fromPlayer.includeSrHeading,\n };\n}\n\nexport default class MultipleChoice extends HTMLElement {\n constructor() {\n super();\n this._model = null;\n this._session = null;\n this._options = null; // added for ebsr print mode detection\n this.audioComplete = false;\n this._boundHandleKeyDown = this.handleKeyDown.bind(this);\n this._keyboardEventsEnabled = false;\n this._audioInitialized = false;\n this._root = null;\n this._mathObserver = null;\n this._mathRenderPending = false;\n\n this._rerender = debounce(\n () => {\n if (this._model && this._session) {\n var element = React.createElement(Main, {\n model: this._model,\n session: this._session,\n options: this._options,\n onChoiceChanged: this._onChange.bind(this),\n onShowCorrectToggle: this.onShowCorrectToggle.bind(this),\n ...resolveHeadingProps(this),\n });\n\n //TODO: aria-label is set in the _rerender because we need to change it when the model.choiceMode is updated. Consider revisiting the placement of the aria-label setting in the _rerender\n this.setAttribute(\n 'aria-label',\n this._model.choiceMode === 'radio' ? 'Multiple Choice Question' : 'Multiple Correct Answer Question',\n );\n this.setAttribute('role', 'region');\n this.setLangAttribute();\n\n this._initMathObserver();\n\n if (!this._root) {\n this._root = createRoot(this);\n }\n this._root.render(element);\n\n if (this._model.keyboardEventsEnabled === true && !this._keyboardEventsEnabled) {\n this.enableKeyboardEvents();\n }\n } else {\n log('skip');\n }\n },\n 50,\n { leading: false, trailing: true },\n );\n\n this._dispatchResponseChanged = debounce(() => {\n this.dispatchEvent(\n new SessionChangedEvent(\n this.tagName.toLowerCase(),\n isComplete(this._session, this._model, this.audioComplete, this),\n ),\n );\n });\n\n this._dispatchModelSet = debounce(\n () => {\n this.dispatchEvent(\n new ModelSetEvent(\n this.tagName.toLowerCase(),\n isComplete(this._session, this._model, this.audioComplete, this),\n this._model !== undefined,\n ),\n );\n },\n 50,\n { leading: false, trailing: true },\n );\n }\n\n _scheduleMathRender = () => {\n if (this._mathRenderPending) return;\n this._mathRenderPending = true;\n\n requestAnimationFrame(() => {\n if (this._mathObserver) {\n this._mathObserver.disconnect();\n }\n log('render complete - render math');\n renderMath(this);\n this._mathRenderPending = false;\n setTimeout(() => {\n if (this._mathObserver) {\n this._mathObserver.observe(this, { childList: true, subtree: true });\n }\n }, 50);\n });\n };\n\n _initMathObserver() {\n if (this._mathObserver) return;\n this._mathObserver = new MutationObserver(this._scheduleMathRender);\n this._mathObserver.observe(this, { childList: true, subtree: true });\n }\n\n _disconnectMathObserver() {\n if (this._mathObserver) {\n this._mathObserver.disconnect();\n this._mathObserver = null;\n }\n }\n\n onShowCorrectToggle() {\n renderMath(this);\n }\n\n setLangAttribute() {\n const language = this._model && typeof this._model.language ? this._model.language : '';\n const lang = language ? language.slice(0, 2) : 'en';\n this.setAttribute('lang', lang);\n }\n\n set model(s) {\n this._model = s;\n this._rerender();\n // reset the audioInitialized to false since the model changed, and we might need to reinitialize the audio\n this._audioInitialized = false;\n this._dispatchModelSet();\n }\n\n get session() {\n return this._session;\n }\n\n get options() {\n return this._options;\n }\n\n set options(o) {\n this._options = o;\n this._rerender();\n }\n\n set baseHeadingLevel(level) {\n this._baseHeadingLevel = level;\n this._rerender();\n }\n\n set includeSrHeading(value) {\n this._includeSrHeading = value;\n this._rerender();\n }\n\n set session(s) {\n this._session = s;\n this._rerender();\n //TODO: remove this session-changed should only be emit on user change\n this._dispatchResponseChanged();\n }\n\n _onChange(data) {\n updateSessionValue(this._session, this._model.choiceMode, data);\n this._dispatchResponseChanged();\n this._rerender();\n }\n\n _createAudioInfoToast() {\n const info = document.createElement('div');\n info.id = 'play-audio-info';\n\n Object.assign(info.style, {\n position: 'absolute',\n top: 0,\n width: '100%',\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n background: 'white',\n zIndex: '1000',\n cursor: 'pointer',\n });\n\n const img = document.createElement('img');\n img.src = EnableAudioAutoplayImage;\n img.alt = 'Click anywhere to enable audio autoplay';\n img.width = 500;\n img.height = 300;\n\n info.appendChild(img);\n return info;\n }\n\n connectedCallback() {\n this._initMathObserver();\n this._initPlayerObserver();\n this._rerender();\n\n // Observation: audio in Chrome will have the autoplay attribute,\n // while other browsers will not have the autoplay attribute and will need a user interaction to play the audio\n // This workaround fixes the issue of audio being cached and played on any user interaction in Safari and Firefox\n const observer = new MutationObserver((mutationsList, observer) => {\n mutationsList.forEach((mutation) => {\n if (mutation.type === 'childList') {\n if (this._audioInitialized) return;\n\n const audio = this.querySelector('audio');\n const isInsidePrompt = audio && audio.closest('#preview-prompt');\n\n if (!this._model) return;\n if (!this._model.autoplayAudioEnabled) return;\n if (audio && !isInsidePrompt) return;\n if (!audio) return;\n\n const info = this._createAudioInfoToast();\n const container = this.querySelector('#main-container');\n const enableAudio = () => {\n if (this.querySelector('#play-audio-info')) {\n audio.play();\n container.removeChild(info);\n }\n\n document.removeEventListener('click', enableAudio);\n };\n\n // if the audio is paused, it means the user has not interacted with the page yet and the audio will not play\n // FIX FOR SAFARI: play with a slight delay to check if autoplay was blocked\n setTimeout(() => {\n if (audio.paused && !this.querySelector('#play-audio-info')) {\n // add info message as a toast to enable audio playback\n container.appendChild(info);\n document.addEventListener('click', enableAudio);\n } else {\n document.removeEventListener('click', enableAudio);\n }\n }, 500);\n\n // we need to listen for the playing event to remove the toast in case the audio plays because of re-rendering\n const handlePlaying = () => {\n updateSessionMetadata(this._session, { audioStartTime: new Date().getTime() });\n\n const info = this.querySelector('#play-audio-info');\n if (info) {\n container.removeChild(info);\n }\n\n audio.removeEventListener('playing', handlePlaying);\n };\n\n audio.addEventListener('playing', handlePlaying);\n\n // we need to listen for the ended event to update the isComplete state\n const handleEnded = () => {\n updateSessionMetadata(this._session, { audioEndTime: new Date().getTime() });\n this.audioComplete = true;\n this._dispatchResponseChanged();\n audio.removeEventListener('ended', handleEnded);\n };\n\n audio.addEventListener('ended', handleEnded);\n\n // store references to remove later\n this._audio = audio;\n this._handlePlaying = handlePlaying;\n this._handleEnded = handleEnded;\n this._enableAudio = enableAudio;\n // set to true to prevent multiple initializations\n this._audioInitialized = true;\n\n observer.disconnect();\n }\n });\n });\n\n observer.observe(this, { childList: true, subtree: true });\n }\n\n enableKeyboardEvents() {\n if (!this._keyboardEventsEnabled) {\n window.addEventListener('keydown', this._boundHandleKeyDown);\n this._keyboardEventsEnabled = true;\n }\n }\n\n _initPlayerObserver() {\n const player = this.closest('pie-player') || this.closest('pie-item-player');\n if (!player) return;\n\n this._playerObserver = new MutationObserver(() => {\n this._rerender();\n });\n this._playerObserver.observe(player, {\n attributes: true,\n attributeFilter: ['base-heading-level', 'baseheadinglevel', 'include-sr-heading', 'includesrheading'],\n });\n }\n\n _disconnectPlayerObserver() {\n if (this._playerObserver) {\n this._playerObserver.disconnect();\n this._playerObserver = null;\n }\n }\n\n disconnectedCallback() {\n this._disconnectMathObserver();\n this._disconnectPlayerObserver();\n if (this._keyboardEventsEnabled) {\n window.removeEventListener('keydown', this._boundHandleKeyDown);\n this._keyboardEventsEnabled = false;\n }\n\n document.removeEventListener('click', this._enableAudio);\n\n if (this._audio) {\n this._audio.removeEventListener('playing', this._handlePlaying);\n this._audio.removeEventListener('ended', this._handleEnded);\n this._audio = null;\n }\n\n if (this._root) {\n this._root.unmount();\n this._root = null;\n }\n }\n\n /**\n * Handles global keyboard events for selecting or toggling multiple-choice answers.\n * Maps keys (1-9, 0, a-j, A-J) to choices and updates the session state accordingly.\n * Ensures valid key presses toggle or select the appropriate choice based on the model.\n */\n handleKeyDown(event) {\n if (!this._model || !this._session) {\n return;\n }\n\n const { mode } = this._model;\n if (mode !== 'gather') {\n return;\n }\n\n const keyToIndex = (key) => {\n const numOffset = key >= '1' && key <= '9' ? key - '1' : key === '0' ? 9 : -1;\n const letterOffset = /^[a-jA-J]$/.test(key) ? key.toLowerCase().charCodeAt(0) - 'a'.charCodeAt(0) : -1;\n return numOffset >= 0 ? numOffset : letterOffset;\n };\n\n const choiceIndex = keyToIndex(event.key);\n\n if (choiceIndex === undefined || choiceIndex <= -1 || choiceIndex >= this._model.choices?.length) {\n return;\n }\n\n const currentValue = this._session.value || [];\n const choiceId = this._model.choices[choiceIndex].value;\n\n const alreadySelected = currentValue.includes(choiceId);\n const newValue = {\n value: choiceId,\n selected: this._model.choiceMode === 'radio' ? true : !alreadySelected,\n selector: 'Keyboard',\n };\n\n this._onChange(newValue);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/lib/main.js
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
|
+
var _react = _interopRequireDefault(require("react"));
|
|
11
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
12
|
+
var _renderUi = require("@pie-lib/render-ui");
|
|
13
|
+
var _multipleChoice = _interopRequireDefault(require("./multiple-choice"));
|
|
14
|
+
class Main extends _react.default.Component {
|
|
15
|
+
render() {
|
|
16
|
+
const {
|
|
17
|
+
model,
|
|
18
|
+
onChoiceChanged,
|
|
19
|
+
session,
|
|
20
|
+
onShowCorrectToggle,
|
|
21
|
+
options,
|
|
22
|
+
baseHeadingLevel,
|
|
23
|
+
includeSrHeading
|
|
24
|
+
} = this.props;
|
|
25
|
+
const {
|
|
26
|
+
extraCSSRules,
|
|
27
|
+
fontSizeFactor
|
|
28
|
+
} = model;
|
|
29
|
+
|
|
30
|
+
// model.partLabel is a property used for ebsr
|
|
31
|
+
return /*#__PURE__*/_react.default.createElement(_renderUi.PreviewLayout, {
|
|
32
|
+
extraCSSRules: extraCSSRules,
|
|
33
|
+
fontSizeFactor: fontSizeFactor,
|
|
34
|
+
classes: {}
|
|
35
|
+
}, /*#__PURE__*/_react.default.createElement(_multipleChoice.default, (0, _extends2.default)({}, model, {
|
|
36
|
+
options: options,
|
|
37
|
+
session: session,
|
|
38
|
+
onChoiceChanged: onChoiceChanged,
|
|
39
|
+
onShowCorrectToggle: onShowCorrectToggle,
|
|
40
|
+
baseHeadingLevel: baseHeadingLevel,
|
|
41
|
+
includeSrHeading: includeSrHeading
|
|
42
|
+
})));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
(0, _defineProperty2.default)(Main, "propTypes", {
|
|
46
|
+
model: _propTypes.default.object,
|
|
47
|
+
session: _propTypes.default.object,
|
|
48
|
+
options: _propTypes.default.object,
|
|
49
|
+
onChoiceChanged: _propTypes.default.func,
|
|
50
|
+
onShowCorrectToggle: _propTypes.default.func,
|
|
51
|
+
extraCSSRules: _propTypes.default.shape({
|
|
52
|
+
names: _propTypes.default.arrayOf(_propTypes.default.string),
|
|
53
|
+
rules: _propTypes.default.string
|
|
54
|
+
}),
|
|
55
|
+
baseHeadingLevel: _propTypes.default.number,
|
|
56
|
+
includeSrHeading: _propTypes.default.bool
|
|
57
|
+
});
|
|
58
|
+
(0, _defineProperty2.default)(Main, "defaultProps", {
|
|
59
|
+
model: {},
|
|
60
|
+
session: {}
|
|
61
|
+
});
|
|
62
|
+
var _default = exports.default = Main;
|
|
63
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wcm9wVHlwZXMiLCJfcmVuZGVyVWkiLCJfbXVsdGlwbGVDaG9pY2UiLCJNYWluIiwiUmVhY3QiLCJDb21wb25lbnQiLCJyZW5kZXIiLCJtb2RlbCIsIm9uQ2hvaWNlQ2hhbmdlZCIsInNlc3Npb24iLCJvblNob3dDb3JyZWN0VG9nZ2xlIiwib3B0aW9ucyIsImJhc2VIZWFkaW5nTGV2ZWwiLCJpbmNsdWRlU3JIZWFkaW5nIiwicHJvcHMiLCJleHRyYUNTU1J1bGVzIiwiZm9udFNpemVGYWN0b3IiLCJkZWZhdWx0IiwiY3JlYXRlRWxlbWVudCIsIlByZXZpZXdMYXlvdXQiLCJjbGFzc2VzIiwiX2V4dGVuZHMyIiwiX2RlZmluZVByb3BlcnR5MiIsIlByb3BUeXBlcyIsIm9iamVjdCIsImZ1bmMiLCJzaGFwZSIsIm5hbWVzIiwiYXJyYXlPZiIsInN0cmluZyIsInJ1bGVzIiwibnVtYmVyIiwiYm9vbCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWluLmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IFByZXZpZXdMYXlvdXQgfSBmcm9tICdAcGllLWxpYi9yZW5kZXItdWknO1xuaW1wb3J0IE11bHRpcGxlQ2hvaWNlIGZyb20gJy4vbXVsdGlwbGUtY2hvaWNlJztcblxuY2xhc3MgTWFpbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgbW9kZWw6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgc2Vzc2lvbjogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIG9uQ2hvaWNlQ2hhbmdlZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25TaG93Q29ycmVjdFRvZ2dsZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZXh0cmFDU1NSdWxlczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIG5hbWVzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgICAgIHJ1bGVzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIH0pLFxuICAgIGJhc2VIZWFkaW5nTGV2ZWw6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgaW5jbHVkZVNySGVhZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBtb2RlbDoge30sXG4gICAgc2Vzc2lvbjoge30sXG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgbW9kZWwsIG9uQ2hvaWNlQ2hhbmdlZCwgc2Vzc2lvbiwgb25TaG93Q29ycmVjdFRvZ2dsZSwgb3B0aW9ucywgYmFzZUhlYWRpbmdMZXZlbCwgaW5jbHVkZVNySGVhZGluZyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGV4dHJhQ1NTUnVsZXMsIGZvbnRTaXplRmFjdG9yIH0gPSBtb2RlbDtcblxuICAgIC8vIG1vZGVsLnBhcnRMYWJlbCBpcyBhIHByb3BlcnR5IHVzZWQgZm9yIGVic3JcbiAgICByZXR1cm4gKFxuICAgICAgPFByZXZpZXdMYXlvdXQgZXh0cmFDU1NSdWxlcz17ZXh0cmFDU1NSdWxlc30gZm9udFNpemVGYWN0b3I9e2ZvbnRTaXplRmFjdG9yfSBjbGFzc2VzPXt7fX0+XG4gICAgICAgIDxNdWx0aXBsZUNob2ljZVxuICAgICAgICAgIHsuLi5tb2RlbH1cbiAgICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgIHNlc3Npb249e3Nlc3Npb259XG4gICAgICAgICAgb25DaG9pY2VDaGFuZ2VkPXtvbkNob2ljZUNoYW5nZWR9XG4gICAgICAgICAgb25TaG93Q29ycmVjdFRvZ2dsZT17b25TaG93Q29ycmVjdFRvZ2dsZX1cbiAgICAgICAgICBiYXNlSGVhZGluZ0xldmVsPXtiYXNlSGVhZGluZ0xldmVsfVxuICAgICAgICAgIGluY2x1ZGVTckhlYWRpbmc9e2luY2x1ZGVTckhlYWRpbmd9XG4gICAgICAgIC8+XG4gICAgICA8L1ByZXZpZXdMYXlvdXQ+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBNYWluO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxVQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxTQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxlQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxNQUFNSSxJQUFJLFNBQVNDLGNBQUssQ0FBQ0MsU0FBUyxDQUFDO0VBb0JqQ0MsTUFBTUEsQ0FBQSxFQUFHO0lBQ1AsTUFBTTtNQUFFQyxLQUFLO01BQUVDLGVBQWU7TUFBRUMsT0FBTztNQUFFQyxtQkFBbUI7TUFBRUMsT0FBTztNQUFFQyxnQkFBZ0I7TUFBRUM7SUFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQ0MsS0FBSztJQUN4SCxNQUFNO01BQUVDLGFBQWE7TUFBRUM7SUFBZSxDQUFDLEdBQUdULEtBQUs7O0lBRS9DO0lBQ0Esb0JBQ0VWLE1BQUEsQ0FBQW9CLE9BQUEsQ0FBQUMsYUFBQSxDQUFDakIsU0FBQSxDQUFBa0IsYUFBYTtNQUFDSixhQUFhLEVBQUVBLGFBQWM7TUFBQ0MsY0FBYyxFQUFFQSxjQUFlO01BQUNJLE9BQU8sRUFBRSxDQUFDO0lBQUUsZ0JBQ3ZGdkIsTUFBQSxDQUFBb0IsT0FBQSxDQUFBQyxhQUFBLENBQUNoQixlQUFBLENBQUFlLE9BQWMsTUFBQUksU0FBQSxDQUFBSixPQUFBLE1BQ1RWLEtBQUs7TUFDVEksT0FBTyxFQUFFQSxPQUFRO01BQ2pCRixPQUFPLEVBQUVBLE9BQVE7TUFDakJELGVBQWUsRUFBRUEsZUFBZ0I7TUFDakNFLG1CQUFtQixFQUFFQSxtQkFBb0I7TUFDekNFLGdCQUFnQixFQUFFQSxnQkFBaUI7TUFDbkNDLGdCQUFnQixFQUFFQTtJQUFpQixFQUNwQyxDQUNZLENBQUM7RUFFcEI7QUFDRjtBQUFDLElBQUFTLGdCQUFBLENBQUFMLE9BQUEsRUF2Q0tkLElBQUksZUFDVztFQUNqQkksS0FBSyxFQUFFZ0Isa0JBQVMsQ0FBQ0MsTUFBTTtFQUN2QmYsT0FBTyxFQUFFYyxrQkFBUyxDQUFDQyxNQUFNO0VBQ3pCYixPQUFPLEVBQUVZLGtCQUFTLENBQUNDLE1BQU07RUFDekJoQixlQUFlLEVBQUVlLGtCQUFTLENBQUNFLElBQUk7RUFDL0JmLG1CQUFtQixFQUFFYSxrQkFBUyxDQUFDRSxJQUFJO0VBQ25DVixhQUFhLEVBQUVRLGtCQUFTLENBQUNHLEtBQUssQ0FBQztJQUM3QkMsS0FBSyxFQUFFSixrQkFBUyxDQUFDSyxPQUFPLENBQUNMLGtCQUFTLENBQUNNLE1BQU0sQ0FBQztJQUMxQ0MsS0FBSyxFQUFFUCxrQkFBUyxDQUFDTTtFQUNuQixDQUFDLENBQUM7RUFDRmpCLGdCQUFnQixFQUFFVyxrQkFBUyxDQUFDUSxNQUFNO0VBQ2xDbEIsZ0JBQWdCLEVBQUVVLGtCQUFTLENBQUNTO0FBQzlCLENBQUM7QUFBQSxJQUFBVixnQkFBQSxDQUFBTCxPQUFBLEVBYkdkLElBQUksa0JBZWM7RUFDcEJJLEtBQUssRUFBRSxDQUFDLENBQUM7RUFDVEUsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDO0FBQUEsSUFBQXdCLFFBQUEsR0FBQUMsT0FBQSxDQUFBakIsT0FBQSxHQXVCWWQsSUFBSSIsImlnbm9yZUxpc3QiOltdfQ==
|
package/lib/main.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","names":["_react","_interopRequireDefault","require","_propTypes","_renderUi","_multipleChoice","Main","React","Component","render","model","onChoiceChanged","session","onShowCorrectToggle","options","baseHeadingLevel","includeSrHeading","props","extraCSSRules","fontSizeFactor","default","createElement","PreviewLayout","classes","_extends2","_defineProperty2","PropTypes","object","func","shape","names","arrayOf","string","rules","number","bool","_default","exports"],"sources":["../src/main.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { PreviewLayout } from '@pie-lib/render-ui';\nimport MultipleChoice from './multiple-choice';\n\nclass Main extends React.Component {\n static propTypes = {\n model: PropTypes.object,\n session: PropTypes.object,\n options: PropTypes.object,\n onChoiceChanged: PropTypes.func,\n onShowCorrectToggle: PropTypes.func,\n extraCSSRules: PropTypes.shape({\n names: PropTypes.arrayOf(PropTypes.string),\n rules: PropTypes.string,\n }),\n baseHeadingLevel: PropTypes.number,\n includeSrHeading: PropTypes.bool,\n };\n\n static defaultProps = {\n model: {},\n session: {},\n };\n\n render() {\n const { model, onChoiceChanged, session, onShowCorrectToggle, options, baseHeadingLevel, includeSrHeading } = this.props;\n const { extraCSSRules, fontSizeFactor } = model;\n\n // model.partLabel is a property used for ebsr\n return (\n <PreviewLayout extraCSSRules={extraCSSRules} fontSizeFactor={fontSizeFactor} classes={{}}>\n <MultipleChoice\n {...model}\n options={options}\n session={session}\n onChoiceChanged={onChoiceChanged}\n onShowCorrectToggle={onShowCorrectToggle}\n baseHeadingLevel={baseHeadingLevel}\n includeSrHeading={includeSrHeading}\n />\n </PreviewLayout>\n );\n }\n}\n\nexport default Main;\n"],"mappings":";;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,SAAA,GAAAF,OAAA;AACA,IAAAG,eAAA,GAAAJ,sBAAA,CAAAC,OAAA;AAEA,MAAMI,IAAI,SAASC,cAAK,CAACC,SAAS,CAAC;EAoBjCC,MAAMA,CAAA,EAAG;IACP,MAAM;MAAEC,KAAK;MAAEC,eAAe;MAAEC,OAAO;MAAEC,mBAAmB;MAAEC,OAAO;MAAEC,gBAAgB;MAAEC;IAAiB,CAAC,GAAG,IAAI,CAACC,KAAK;IACxH,MAAM;MAAEC,aAAa;MAAEC;IAAe,CAAC,GAAGT,KAAK;;IAE/C;IACA,oBACEV,MAAA,CAAAoB,OAAA,CAAAC,aAAA,CAACjB,SAAA,CAAAkB,aAAa;MAACJ,aAAa,EAAEA,aAAc;MAACC,cAAc,EAAEA,cAAe;MAACI,OAAO,EAAE,CAAC;IAAE,gBACvFvB,MAAA,CAAAoB,OAAA,CAAAC,aAAA,CAAChB,eAAA,CAAAe,OAAc,MAAAI,SAAA,CAAAJ,OAAA,MACTV,KAAK;MACTI,OAAO,EAAEA,OAAQ;MACjBF,OAAO,EAAEA,OAAQ;MACjBD,eAAe,EAAEA,eAAgB;MACjCE,mBAAmB,EAAEA,mBAAoB;MACzCE,gBAAgB,EAAEA,gBAAiB;MACnCC,gBAAgB,EAAEA;IAAiB,EACpC,CACY,CAAC;EAEpB;AACF;AAAC,IAAAS,gBAAA,CAAAL,OAAA,EAvCKd,IAAI,eACW;EACjBI,KAAK,EAAEgB,kBAAS,CAACC,MAAM;EACvBf,OAAO,EAAEc,kBAAS,CAACC,MAAM;EACzBb,OAAO,EAAEY,kBAAS,CAACC,MAAM;EACzBhB,eAAe,EAAEe,kBAAS,CAACE,IAAI;EAC/Bf,mBAAmB,EAAEa,kBAAS,CAACE,IAAI;EACnCV,aAAa,EAAEQ,kBAAS,CAACG,KAAK,CAAC;IAC7BC,KAAK,EAAEJ,kBAAS,CAACK,OAAO,CAACL,kBAAS,CAACM,MAAM,CAAC;IAC1CC,KAAK,EAAEP,kBAAS,CAACM;EACnB,CAAC,CAAC;EACFjB,gBAAgB,EAAEW,kBAAS,CAACQ,MAAM;EAClClB,gBAAgB,EAAEU,kBAAS,CAACS;AAC9B,CAAC;AAAA,IAAAV,gBAAA,CAAAL,OAAA,EAbGd,IAAI,kBAec;EACpBI,KAAK,EAAE,CAAC,CAAC;EACTE,OAAO,EAAE,CAAC;AACZ,CAAC;AAAA,IAAAwB,QAAA,GAAAC,OAAA,CAAAjB,OAAA,GAuBYd,IAAI","ignoreList":[]}
|