@pie-element/ebsr 14.2.1 → 14.2.2-next.1
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/configure.js +2 -0
- package/controller.js +1 -0
- package/dist/author/defaults.d.ts +348 -0
- package/dist/author/defaults.js +161 -0
- package/dist/author/index.d.ts +34 -0
- package/dist/author/index.js +78 -0
- package/dist/author/main.d.ts +22 -0
- package/dist/author/main.js +121 -0
- package/dist/browser/author/index.js +13940 -0
- package/dist/browser/author/index.js.map +1 -0
- package/dist/browser/browser-CdX8WGiZ.js +207 -0
- package/dist/browser/browser-CdX8WGiZ.js.map +1 -0
- package/dist/browser/controller/index.js +257 -0
- package/dist/browser/controller/index.js.map +1 -0
- package/dist/browser/delivery/index.js +133 -0
- package/dist/browser/delivery/index.js.map +1 -0
- package/dist/browser/dist-CaWRqnXk.js +62 -0
- package/dist/browser/dist-CaWRqnXk.js.map +1 -0
- package/dist/browser/dist-D9ARZhQk.js +1426 -0
- package/dist/browser/dist-D9ARZhQk.js.map +1 -0
- package/dist/browser/dist-DQkngCcw.js +36 -0
- package/dist/browser/dist-DQkngCcw.js.map +1 -0
- package/dist/browser/print/index.js +107 -0
- package/dist/browser/print/index.js.map +1 -0
- package/dist/controller/defaults.d.ts +15 -0
- package/dist/controller/defaults.js +26 -0
- package/dist/controller/index.d.ts +42 -0
- package/dist/controller/index.js +185 -0
- package/dist/controller/utils.d.ts +10 -0
- package/dist/controller/utils.js +8 -0
- package/dist/delivery/index.d.ts +26 -0
- package/dist/delivery/index.js +132 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.iife.d.ts +8 -0
- package/dist/index.iife.js +165 -0
- package/dist/index.js +2 -0
- package/dist/print/index.d.ts +25 -0
- package/dist/print/index.js +106 -0
- package/dist/runtime-support.d.ts +12 -0
- package/dist/runtime-support.js +12 -0
- package/package.json +88 -19
- package/CHANGELOG.json +0 -1547
- package/CHANGELOG.md +0 -2285
- package/LICENSE.md +0 -5
- package/README.md +0 -62
- package/configure/CHANGELOG.json +0 -992
- package/configure/CHANGELOG.md +0 -2148
- package/configure/lib/defaults.js +0 -229
- package/configure/lib/defaults.js.map +0 -1
- package/configure/lib/index.js +0 -154
- package/configure/lib/index.js.map +0 -1
- package/configure/lib/main.js +0 -222
- package/configure/lib/main.js.map +0 -1
- package/configure/package.json +0 -23
- package/configure/src/__tests__/index.test.js +0 -492
- package/configure/src/defaults.js +0 -173
- package/configure/src/index.js +0 -174
- package/configure/src/main.jsx +0 -235
- package/controller/CHANGELOG.json +0 -552
- package/controller/CHANGELOG.md +0 -1286
- package/controller/lib/defaults.js +0 -31
- package/controller/lib/defaults.js.map +0 -1
- package/controller/lib/index.js +0 -448
- package/controller/lib/index.js.map +0 -1
- package/controller/lib/utils.js +0 -18
- package/controller/lib/utils.js.map +0 -1
- package/controller/package.json +0 -18
- package/controller/src/__tests__/index.test.js +0 -591
- package/controller/src/__tests__/utils.test.js +0 -48
- package/controller/src/defaults.js +0 -25
- package/controller/src/index.js +0 -442
- package/controller/src/utils.js +0 -18
- package/docs/config-schema.json +0 -5787
- package/docs/config-schema.json.md +0 -4278
- package/docs/demo/config.js +0 -8
- package/docs/demo/generate.js +0 -52
- package/docs/demo/index.html +0 -2
- package/docs/demo/session.js +0 -14
- package/docs/pie-schema.json +0 -2911
- package/docs/pie-schema.json.md +0 -2142
- package/ebsr.png +0 -0
- package/lib/index.js +0 -207
- package/lib/index.js.map +0 -1
- package/lib/print.js +0 -186
- package/lib/print.js.map +0 -1
- package/module/configure.js +0 -1
- package/module/controller.js +0 -5664
- package/module/demo.js +0 -77
- package/module/element.js +0 -1
- package/module/index.html +0 -21
- package/module/manifest.json +0 -14
- package/module/print-demo.js +0 -115
- package/module/print.html +0 -18
- package/module/print.js +0 -1
- package/src/__tests__/index.test.js +0 -129
- package/src/index.js +0 -222
- package/src/print.js +0 -207
package/ebsr.png
DELETED
|
Binary file
|
package/lib/index.js
DELETED
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.isSessionComplete = exports.default = void 0;
|
|
8
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
|
-
var _piePlayerEvents = require("@pie-framework/pie-player-events");
|
|
10
|
-
var _multipleChoice = _interopRequireDefault(require("@pie-element/multiple-choice"));
|
|
11
|
-
var _lodashEs = require("lodash-es");
|
|
12
|
-
var _debug = _interopRequireDefault(require("debug"));
|
|
13
|
-
const SESSION_CHANGED = _piePlayerEvents.SessionChangedEvent.TYPE;
|
|
14
|
-
const MC_TAG_NAME = 'ebsr-multiple-choice';
|
|
15
|
-
const log = (0, _debug.default)('pie-elements:ebsr');
|
|
16
|
-
class EbsrMC extends _multipleChoice.default {}
|
|
17
|
-
const defineMultipleChoice = () => {
|
|
18
|
-
if (!customElements.get(MC_TAG_NAME)) {
|
|
19
|
-
customElements.define(MC_TAG_NAME, EbsrMC);
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
|
-
defineMultipleChoice();
|
|
23
|
-
const isNonEmptyArray = a => Array.isArray(a) && a.length > 0;
|
|
24
|
-
const isSessionComplete = session => {
|
|
25
|
-
const a = (0, _lodashEs.get)(session, 'value.partA.value');
|
|
26
|
-
const b = (0, _lodashEs.get)(session, 'value.partB.value');
|
|
27
|
-
return isNonEmptyArray(a) && isNonEmptyArray(b);
|
|
28
|
-
};
|
|
29
|
-
exports.isSessionComplete = isSessionComplete;
|
|
30
|
-
function getPlayerAttributes(element) {
|
|
31
|
-
const player = element.closest('pie-player') || element.closest('pie-item-player');
|
|
32
|
-
if (!player) {
|
|
33
|
-
return {
|
|
34
|
-
baseHeadingLevel: undefined,
|
|
35
|
-
includeSrHeading: true
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
const getRaw = (camelCaseName, hyphenatedName, allLowerName) => {
|
|
39
|
-
let raw = player[camelCaseName];
|
|
40
|
-
|
|
41
|
-
// fallback in case someone sets via HTML attribute manually
|
|
42
|
-
if (raw == null) {
|
|
43
|
-
raw = player.getAttribute(hyphenatedName) ?? player.getAttribute(allLowerName);
|
|
44
|
-
}
|
|
45
|
-
return raw;
|
|
46
|
-
};
|
|
47
|
-
const levelRaw = getRaw('baseHeadingLevel', 'base-heading-level', 'baseheadinglevel');
|
|
48
|
-
const level = parseInt(levelRaw, 10);
|
|
49
|
-
const baseHeadingLevel = Number.isFinite(level) && level >= 1 && level <= 6 ? level : undefined;
|
|
50
|
-
const srRaw = getRaw('includeSrHeading', 'include-sr-heading', 'includesrheading');
|
|
51
|
-
const includeSrHeading = srRaw == null ? true : srRaw !== false && srRaw !== 'false';
|
|
52
|
-
return {
|
|
53
|
-
baseHeadingLevel,
|
|
54
|
-
includeSrHeading
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
class Ebsr extends HTMLElement {
|
|
58
|
-
constructor() {
|
|
59
|
-
super();
|
|
60
|
-
(0, _defineProperty2.default)(this, "onSessionUpdated", e => {
|
|
61
|
-
if (e.target === this) {
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
e.preventDefault();
|
|
65
|
-
e.stopImmediatePropagation();
|
|
66
|
-
const id = e.target.getAttribute('id');
|
|
67
|
-
if (id) {
|
|
68
|
-
const key = `part${id.toUpperCase()}`;
|
|
69
|
-
if (e.update) {
|
|
70
|
-
this._model[key] = e.update;
|
|
71
|
-
}
|
|
72
|
-
//TODO: accessing a private property here. The session event should contain the update in future to prevent this.
|
|
73
|
-
this.dispatchSessionChanged(e.srcElement._session, key);
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
this._model = {};
|
|
77
|
-
this._session = {};
|
|
78
|
-
}
|
|
79
|
-
set model(m) {
|
|
80
|
-
this._model = m;
|
|
81
|
-
customElements.whenDefined(MC_TAG_NAME).then(() => {
|
|
82
|
-
this.setPartModel(this.partA, 'partA');
|
|
83
|
-
this.setPartModel(this.partB, 'partB');
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
set session(s) {
|
|
87
|
-
this._session = s;
|
|
88
|
-
customElements.whenDefined(MC_TAG_NAME).then(() => {
|
|
89
|
-
this.setPartSession(this.partA, 'partA');
|
|
90
|
-
this.setPartSession(this.partB, 'partB');
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
get session() {
|
|
94
|
-
return this._session;
|
|
95
|
-
}
|
|
96
|
-
setPartModel(part, key) {
|
|
97
|
-
if (this._model && this._model[key] && part) {
|
|
98
|
-
const {
|
|
99
|
-
mode
|
|
100
|
-
} = this._model;
|
|
101
|
-
part.model = {
|
|
102
|
-
...this._model[key],
|
|
103
|
-
mode,
|
|
104
|
-
keyMode: this._model[key].choicePrefix
|
|
105
|
-
};
|
|
106
|
-
|
|
107
|
-
// Parts of an EBSR item should not render their own SR headings —
|
|
108
|
-
// the EBSR element itself provides the item-level heading.
|
|
109
|
-
const {
|
|
110
|
-
includeSrHeading,
|
|
111
|
-
baseHeadingLevel
|
|
112
|
-
} = getPlayerAttributes(this);
|
|
113
|
-
part.includeSrHeading = includeSrHeading;
|
|
114
|
-
part.baseHeadingLevel = baseHeadingLevel;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
setPartSession(part, key) {
|
|
118
|
-
if (this._session && this._model && part) {
|
|
119
|
-
const {
|
|
120
|
-
value
|
|
121
|
-
} = this._session;
|
|
122
|
-
part.session = value && value[key] ? value[key] : {
|
|
123
|
-
id: key
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
dispatchSessionChanged(partSession, key) {
|
|
128
|
-
this._session.value = {
|
|
129
|
-
...this._session.value,
|
|
130
|
-
[key]: partSession
|
|
131
|
-
};
|
|
132
|
-
log('[onSessionChanged] session: ', this._session);
|
|
133
|
-
const complete = isSessionComplete(this._session);
|
|
134
|
-
this.dispatchEvent(new _piePlayerEvents.SessionChangedEvent(this.tagName.toLowerCase(), complete));
|
|
135
|
-
}
|
|
136
|
-
get partA() {
|
|
137
|
-
return this.querySelector(`${MC_TAG_NAME}#a`);
|
|
138
|
-
}
|
|
139
|
-
get partB() {
|
|
140
|
-
return this.querySelector(`${MC_TAG_NAME}#b`);
|
|
141
|
-
}
|
|
142
|
-
connectedCallback() {
|
|
143
|
-
this._render();
|
|
144
|
-
this._initPlayerObserver();
|
|
145
|
-
this.addEventListener(SESSION_CHANGED, this.onSessionUpdated);
|
|
146
|
-
}
|
|
147
|
-
disconnectedCallback() {
|
|
148
|
-
this._disconnectPlayerObserver();
|
|
149
|
-
this.removeEventListener(SESSION_CHANGED, this.onSessionUpdated);
|
|
150
|
-
}
|
|
151
|
-
_initPlayerObserver() {
|
|
152
|
-
const player = this.closest('pie-player') || this.closest('pie-item-player');
|
|
153
|
-
if (!player) return;
|
|
154
|
-
this._playerObserver = new MutationObserver(() => {
|
|
155
|
-
this._render();
|
|
156
|
-
});
|
|
157
|
-
this._playerObserver.observe(player, {
|
|
158
|
-
attributes: true,
|
|
159
|
-
attributeFilter: ['base-heading-level', 'baseheadinglevel', 'include-sr-heading', 'includesrheading']
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
_disconnectPlayerObserver() {
|
|
163
|
-
if (this._playerObserver) {
|
|
164
|
-
this._playerObserver.disconnect();
|
|
165
|
-
this._playerObserver = null;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
_render() {
|
|
169
|
-
this.ariaLabel = 'Two-Part Question';
|
|
170
|
-
this.role = 'region';
|
|
171
|
-
const {
|
|
172
|
-
baseHeadingLevel: ebsrLevel,
|
|
173
|
-
includeSrHeading
|
|
174
|
-
} = getPlayerAttributes(this);
|
|
175
|
-
const headingTag = ebsrLevel ? `h${Math.min(6, ebsrLevel)}` : 'h2';
|
|
176
|
-
const srHeading = includeSrHeading ? `<${headingTag} class="srOnly">Two-Part Question</${headingTag}>` : '';
|
|
177
|
-
this.innerHTML = `
|
|
178
|
-
<style>
|
|
179
|
-
.srOnly {
|
|
180
|
-
position: absolute;
|
|
181
|
-
width: 1px;
|
|
182
|
-
height: 1px;
|
|
183
|
-
padding: 0;
|
|
184
|
-
margin: -1px;
|
|
185
|
-
overflow: hidden;
|
|
186
|
-
left: -10000px;
|
|
187
|
-
top: auto;
|
|
188
|
-
}
|
|
189
|
-
${this._model?.extraCSSRules?.rules}
|
|
190
|
-
</style>
|
|
191
|
-
${srHeading}
|
|
192
|
-
<${MC_TAG_NAME} id="a"></${MC_TAG_NAME}>
|
|
193
|
-
<${MC_TAG_NAME} id="b"></${MC_TAG_NAME}>
|
|
194
|
-
`;
|
|
195
|
-
|
|
196
|
-
// when item is re-rendered (due to connectedCallback), if the custom element is already defined,
|
|
197
|
-
// we need to set the model and session, otherwise the setters are not reached again
|
|
198
|
-
if (customElements.get(MC_TAG_NAME)) {
|
|
199
|
-
this.setPartModel(this.partA, 'partA');
|
|
200
|
-
this.setPartModel(this.partB, 'partB');
|
|
201
|
-
this.setPartSession(this.partA, 'partA');
|
|
202
|
-
this.setPartSession(this.partB, 'partB');
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
exports.default = Ebsr;
|
|
207
|
-
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_piePlayerEvents","require","_multipleChoice","_interopRequireDefault","_lodashEs","_debug","SESSION_CHANGED","SessionChangedEvent","TYPE","MC_TAG_NAME","log","debug","EbsrMC","MultipleChoice","defineMultipleChoice","customElements","get","define","isNonEmptyArray","a","Array","isArray","length","isSessionComplete","session","b","exports","getPlayerAttributes","element","player","closest","baseHeadingLevel","undefined","includeSrHeading","getRaw","camelCaseName","hyphenatedName","allLowerName","raw","getAttribute","levelRaw","level","parseInt","Number","isFinite","srRaw","Ebsr","HTMLElement","constructor","_defineProperty2","default","e","target","preventDefault","stopImmediatePropagation","id","key","toUpperCase","update","_model","dispatchSessionChanged","srcElement","_session","model","m","whenDefined","then","setPartModel","partA","partB","s","setPartSession","part","mode","keyMode","choicePrefix","value","partSession","complete","dispatchEvent","tagName","toLowerCase","querySelector","connectedCallback","_render","_initPlayerObserver","addEventListener","onSessionUpdated","disconnectedCallback","_disconnectPlayerObserver","removeEventListener","_playerObserver","MutationObserver","observe","attributes","attributeFilter","disconnect","ariaLabel","role","ebsrLevel","headingTag","Math","min","srHeading","innerHTML","extraCSSRules","rules"],"sources":["../src/index.js"],"sourcesContent":["import { SessionChangedEvent } from '@pie-framework/pie-player-events';\nimport MultipleChoice from '@pie-element/multiple-choice';\nimport { get } from 'lodash-es';\nimport debug from 'debug';\n\nconst SESSION_CHANGED = SessionChangedEvent.TYPE;\nconst MC_TAG_NAME = 'ebsr-multiple-choice';\nconst log = debug('pie-elements:ebsr');\n\nclass EbsrMC extends MultipleChoice {}\n\nconst defineMultipleChoice = () => {\n if (!customElements.get(MC_TAG_NAME)) {\n customElements.define(MC_TAG_NAME, EbsrMC);\n }\n};\n\ndefineMultipleChoice();\n\nconst isNonEmptyArray = (a) => Array.isArray(a) && a.length > 0;\n\nexport const isSessionComplete = (session) => {\n const a = get(session, 'value.partA.value');\n const b = get(session, 'value.partB.value');\n\n return isNonEmptyArray(a) && isNonEmptyArray(b);\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\nexport default class Ebsr extends HTMLElement {\n constructor() {\n super();\n this._model = {};\n this._session = {};\n }\n\n onSessionUpdated = (e) => {\n if (e.target === this) {\n return;\n }\n\n e.preventDefault();\n e.stopImmediatePropagation();\n\n const id = e.target.getAttribute('id');\n\n if (id) {\n const key = `part${id.toUpperCase()}`;\n\n if (e.update) {\n this._model[key] = e.update;\n }\n //TODO: accessing a private property here. The session event should contain the update in future to prevent this.\n this.dispatchSessionChanged(e.srcElement._session, key);\n }\n };\n\n set model(m) {\n this._model = m;\n\n customElements.whenDefined(MC_TAG_NAME).then(() => {\n this.setPartModel(this.partA, 'partA');\n this.setPartModel(this.partB, 'partB');\n });\n }\n\n set session(s) {\n this._session = s;\n\n customElements.whenDefined(MC_TAG_NAME).then(() => {\n this.setPartSession(this.partA, 'partA');\n this.setPartSession(this.partB, 'partB');\n });\n }\n\n get session() {\n return this._session;\n }\n\n setPartModel(part, key) {\n if (this._model && this._model[key] && part) {\n const { mode } = this._model;\n\n part.model = {\n ...this._model[key],\n mode,\n keyMode: this._model[key].choicePrefix,\n };\n\n // Parts of an EBSR item should not render their own SR headings —\n // the EBSR element itself provides the item-level heading.\n const { includeSrHeading, baseHeadingLevel } = getPlayerAttributes(this);\n part.includeSrHeading = includeSrHeading;\n part.baseHeadingLevel = baseHeadingLevel;\n }\n }\n\n setPartSession(part, key) {\n if (this._session && this._model && part) {\n const { value } = this._session;\n part.session = value && value[key] ? value[key] : { id: key };\n }\n }\n\n dispatchSessionChanged(partSession, key) {\n this._session.value = {\n ...this._session.value,\n [key]: partSession,\n };\n\n log('[onSessionChanged] session: ', this._session);\n const complete = isSessionComplete(this._session);\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), complete));\n }\n\n get partA() {\n return this.querySelector(`${MC_TAG_NAME}#a`);\n }\n\n get partB() {\n return this.querySelector(`${MC_TAG_NAME}#b`);\n }\n\n connectedCallback() {\n this._render();\n this._initPlayerObserver();\n this.addEventListener(SESSION_CHANGED, this.onSessionUpdated);\n }\n\n disconnectedCallback() {\n this._disconnectPlayerObserver();\n this.removeEventListener(SESSION_CHANGED, this.onSessionUpdated);\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._render();\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 _render() {\n this.ariaLabel = 'Two-Part Question';\n this.role = 'region';\n\n const { baseHeadingLevel: ebsrLevel, includeSrHeading } = getPlayerAttributes(this);\n const headingTag = ebsrLevel ? `h${Math.min(6, ebsrLevel)}` : 'h2';\n const srHeading = includeSrHeading ? `<${headingTag} class=\"srOnly\">Two-Part Question</${headingTag}>` : '';\n\n this.innerHTML = `\n <style>\n .srOnly {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n left: -10000px;\n top: auto;\n }\n ${this._model?.extraCSSRules?.rules}\n </style>\n ${srHeading}\n <${MC_TAG_NAME} id=\"a\"></${MC_TAG_NAME}>\n <${MC_TAG_NAME} id=\"b\"></${MC_TAG_NAME}>\n `;\n\n // when item is re-rendered (due to connectedCallback), if the custom element is already defined,\n // we need to set the model and session, otherwise the setters are not reached again\n if (customElements.get(MC_TAG_NAME)) {\n this.setPartModel(this.partA, 'partA');\n this.setPartModel(this.partB, 'partB');\n this.setPartSession(this.partA, 'partA');\n this.setPartSession(this.partB, 'partB');\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/lib/print.js
DELETED
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.isSessionComplete = exports.default = void 0;
|
|
8
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
|
-
var _lodashEs = require("lodash-es");
|
|
10
|
-
var _multipleChoice = _interopRequireDefault(require("@pie-element/multiple-choice"));
|
|
11
|
-
var _debug = _interopRequireDefault(require("debug"));
|
|
12
|
-
var _piePlayerEvents = require("@pie-framework/pie-player-events");
|
|
13
|
-
var _translator = _interopRequireDefault(require("@pie-lib/translator"));
|
|
14
|
-
const MC_TAG_NAME = 'ebsr-multiple-choice';
|
|
15
|
-
const SESSION_CHANGED = _piePlayerEvents.SessionChangedEvent.TYPE;
|
|
16
|
-
const {
|
|
17
|
-
translator
|
|
18
|
-
} = _translator.default;
|
|
19
|
-
const log = (0, _debug.default)('pie-element:ebsr:print');
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Live in same package as main element - so we can access some of the shared comps!
|
|
23
|
-
*
|
|
24
|
-
* - update pslb to build print if src/print.js is there
|
|
25
|
-
* - update demo el
|
|
26
|
-
* - get configure/controller building
|
|
27
|
-
*/
|
|
28
|
-
|
|
29
|
-
const preparePrintModel = (model, opts) => {
|
|
30
|
-
const instr = opts.role === 'instructor';
|
|
31
|
-
const printModel = (0, _lodashEs.cloneDeep)(model);
|
|
32
|
-
printModel.prompt = printModel.promptEnabled !== false ? printModel.prompt : undefined;
|
|
33
|
-
printModel.teacherInstructions = instr && printModel.teacherInstructionsEnabled !== false ? printModel.teacherInstructions : undefined;
|
|
34
|
-
printModel.showTeacherInstructions = instr;
|
|
35
|
-
printModel.alwaysShowCorrect = instr;
|
|
36
|
-
printModel.mode = instr ? 'evaluate' : 'gather';
|
|
37
|
-
printModel.disabled = true;
|
|
38
|
-
printModel.animationsDisabled = true;
|
|
39
|
-
printModel.lockChoiceOrder = true;
|
|
40
|
-
printModel.choicesLayout = printModel.choicesLayout || 'vertical';
|
|
41
|
-
printModel.choices = (printModel.choices || []).map(c => {
|
|
42
|
-
c.rationale = instr && printModel.rationaleEnabled !== false ? c.rationale : undefined;
|
|
43
|
-
c.hideTick = instr;
|
|
44
|
-
c.feedback = undefined;
|
|
45
|
-
return c;
|
|
46
|
-
});
|
|
47
|
-
printModel.keyMode = printModel.choicePrefix || 'letters';
|
|
48
|
-
return printModel;
|
|
49
|
-
};
|
|
50
|
-
class EbsrMC extends _multipleChoice.default {}
|
|
51
|
-
const defineMultipleChoice = () => {
|
|
52
|
-
if (!customElements.get(MC_TAG_NAME)) {
|
|
53
|
-
customElements.define(MC_TAG_NAME, EbsrMC);
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
defineMultipleChoice();
|
|
57
|
-
const isNonEmptyArray = a => Array.isArray(a) && a.length > 0;
|
|
58
|
-
const isSessionComplete = session => {
|
|
59
|
-
const a = (0, _lodashEs.get)(session, 'value.partA.value');
|
|
60
|
-
const b = (0, _lodashEs.get)(session, 'value.partB.value');
|
|
61
|
-
return isNonEmptyArray(a) && isNonEmptyArray(b);
|
|
62
|
-
};
|
|
63
|
-
exports.isSessionComplete = isSessionComplete;
|
|
64
|
-
class Ebsr extends HTMLElement {
|
|
65
|
-
constructor() {
|
|
66
|
-
super();
|
|
67
|
-
(0, _defineProperty2.default)(this, "onSessionUpdated", e => {
|
|
68
|
-
if (e.target === this) {
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
e.preventDefault();
|
|
72
|
-
e.stopImmediatePropagation();
|
|
73
|
-
const id = e.target.getAttribute('id');
|
|
74
|
-
if (id) {
|
|
75
|
-
const key = `part${id.toUpperCase()}`;
|
|
76
|
-
if (e.update) {
|
|
77
|
-
this._model[key] = e.update;
|
|
78
|
-
}
|
|
79
|
-
//TODO: accessing a private property here. The session event should contain the update in future to prevent this.
|
|
80
|
-
this.dispatchSessionChanged(e.srcElement._session, key);
|
|
81
|
-
}
|
|
82
|
-
});
|
|
83
|
-
this._model = {};
|
|
84
|
-
this._session = {};
|
|
85
|
-
this._options = null;
|
|
86
|
-
}
|
|
87
|
-
set model(m) {
|
|
88
|
-
this._model = m;
|
|
89
|
-
this._updateParts();
|
|
90
|
-
}
|
|
91
|
-
set session(s) {
|
|
92
|
-
this._session = s;
|
|
93
|
-
customElements.whenDefined(MC_TAG_NAME).then(() => {
|
|
94
|
-
this.setPartSession(this.partA, 'partA');
|
|
95
|
-
this.setPartSession(this.partB, 'partB');
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
_updateParts() {
|
|
99
|
-
customElements.whenDefined(MC_TAG_NAME).then(() => {
|
|
100
|
-
this.setPartModel(this.partA, 'partA');
|
|
101
|
-
this.setPartModel(this.partB, 'partB');
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
setPartModel(part, key) {
|
|
105
|
-
if (this._model && this._model[key] && part && this._options) {
|
|
106
|
-
let labels = {
|
|
107
|
-
partA: undefined,
|
|
108
|
-
partB: undefined
|
|
109
|
-
};
|
|
110
|
-
if (this._model.partLabels) {
|
|
111
|
-
const language = this._model.language;
|
|
112
|
-
labels = {
|
|
113
|
-
partA: translator.t('ebsr.part', {
|
|
114
|
-
lng: language,
|
|
115
|
-
index: this._model.partLabelType === 'Letters' ? 'A' : '1'
|
|
116
|
-
}),
|
|
117
|
-
partB: translator.t('ebsr.part', {
|
|
118
|
-
lng: language,
|
|
119
|
-
index: this._model.partLabelType === 'Letters' ? 'B' : '2'
|
|
120
|
-
})
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
part.model = {
|
|
124
|
-
...preparePrintModel(this._model[key], this._options),
|
|
125
|
-
keyMode: this._model[key].choicePrefix,
|
|
126
|
-
partLabel: labels[key]
|
|
127
|
-
};
|
|
128
|
-
|
|
129
|
-
// pass options to enable print mode detection in multiple-choice component
|
|
130
|
-
part.options = this._options;
|
|
131
|
-
if (!part._session) {
|
|
132
|
-
// for print, "set session" is not called,
|
|
133
|
-
// but ebsr needs sessions in order to render the elements,
|
|
134
|
-
// so we set it here it was not set already
|
|
135
|
-
part.session = {};
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
set options(o) {
|
|
140
|
-
this._options = o;
|
|
141
|
-
// re-render parts so role changes (student/instructor) propagate to each part
|
|
142
|
-
this._updateParts();
|
|
143
|
-
}
|
|
144
|
-
setPartSession(part, key) {
|
|
145
|
-
if (this._session && this._model && part) {
|
|
146
|
-
const {
|
|
147
|
-
value
|
|
148
|
-
} = this._session;
|
|
149
|
-
part.session = value && value[key] ? value[key] : {
|
|
150
|
-
id: key
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
dispatchSessionChanged(partSession, key) {
|
|
155
|
-
this._session.value = {
|
|
156
|
-
...this._session.value,
|
|
157
|
-
[key]: partSession
|
|
158
|
-
};
|
|
159
|
-
log('[onSessionChanged] session: ', this._session);
|
|
160
|
-
const complete = isSessionComplete(this._session);
|
|
161
|
-
this.dispatchEvent(new _piePlayerEvents.SessionChangedEvent(this.tagName.toLowerCase(), complete));
|
|
162
|
-
}
|
|
163
|
-
get partA() {
|
|
164
|
-
return this.querySelector(`${MC_TAG_NAME}#a`);
|
|
165
|
-
}
|
|
166
|
-
get partB() {
|
|
167
|
-
return this.querySelector(`${MC_TAG_NAME}#b`);
|
|
168
|
-
}
|
|
169
|
-
connectedCallback() {
|
|
170
|
-
this._render();
|
|
171
|
-
this.addEventListener(SESSION_CHANGED, this.onSessionUpdated);
|
|
172
|
-
}
|
|
173
|
-
disconnectedCallback() {
|
|
174
|
-
this.removeEventListener(SESSION_CHANGED, this.onSessionUpdated);
|
|
175
|
-
}
|
|
176
|
-
_render() {
|
|
177
|
-
this.innerHTML = `
|
|
178
|
-
<div>
|
|
179
|
-
<${MC_TAG_NAME} id="a"></${MC_TAG_NAME}>
|
|
180
|
-
<${MC_TAG_NAME} id="b"></${MC_TAG_NAME}>
|
|
181
|
-
</div>
|
|
182
|
-
`;
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
exports.default = Ebsr;
|
|
186
|
-
//# sourceMappingURL=print.js.map
|
package/lib/print.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"print.js","names":["_lodashEs","require","_multipleChoice","_interopRequireDefault","_debug","_piePlayerEvents","_translator","MC_TAG_NAME","SESSION_CHANGED","SessionChangedEvent","TYPE","translator","Translator","log","debug","preparePrintModel","model","opts","instr","role","printModel","cloneDeep","prompt","promptEnabled","undefined","teacherInstructions","teacherInstructionsEnabled","showTeacherInstructions","alwaysShowCorrect","mode","disabled","animationsDisabled","lockChoiceOrder","choicesLayout","choices","map","c","rationale","rationaleEnabled","hideTick","feedback","keyMode","choicePrefix","EbsrMC","MultipleChoice","defineMultipleChoice","customElements","get","define","isNonEmptyArray","a","Array","isArray","length","isSessionComplete","session","b","exports","Ebsr","HTMLElement","constructor","_defineProperty2","default","e","target","preventDefault","stopImmediatePropagation","id","getAttribute","key","toUpperCase","update","_model","dispatchSessionChanged","srcElement","_session","_options","m","_updateParts","s","whenDefined","then","setPartSession","partA","partB","setPartModel","part","labels","partLabels","language","t","lng","index","partLabelType","partLabel","options","o","value","partSession","complete","dispatchEvent","tagName","toLowerCase","querySelector","connectedCallback","_render","addEventListener","onSessionUpdated","disconnectedCallback","removeEventListener","innerHTML"],"sources":["../src/print.js"],"sourcesContent":["import { cloneDeep, get } from 'lodash-es';\nimport MultipleChoice from '@pie-element/multiple-choice';\nimport debug from 'debug';\nimport { SessionChangedEvent } from '@pie-framework/pie-player-events';\nconst MC_TAG_NAME = 'ebsr-multiple-choice';\nconst SESSION_CHANGED = SessionChangedEvent.TYPE;\nimport Translator from '@pie-lib/translator';\n\nconst { translator } = Translator;\n\nconst log = debug('pie-element:ebsr:print');\n\n/**\n * Live in same package as main element - so we can access some of the shared comps!\n *\n * - update pslb to build print if src/print.js is there\n * - update demo el\n * - get configure/controller building\n */\n\nconst preparePrintModel = (model, opts) => {\n const instr = opts.role === 'instructor';\n const printModel = cloneDeep(model);\n\n printModel.prompt = printModel.promptEnabled !== false ? printModel.prompt : undefined;\n printModel.teacherInstructions =\n instr && printModel.teacherInstructionsEnabled !== false ? printModel.teacherInstructions : undefined;\n printModel.showTeacherInstructions = instr;\n printModel.alwaysShowCorrect = instr;\n printModel.mode = instr ? 'evaluate' : 'gather';\n\n printModel.disabled = true;\n printModel.animationsDisabled = true;\n printModel.lockChoiceOrder = true;\n printModel.choicesLayout = printModel.choicesLayout || 'vertical';\n\n printModel.choices = (printModel.choices || []).map((c) => {\n c.rationale = instr && printModel.rationaleEnabled !== false ? c.rationale : undefined;\n c.hideTick = instr;\n c.feedback = undefined;\n return c;\n });\n\n printModel.keyMode = printModel.choicePrefix || 'letters';\n\n return printModel;\n};\n\nclass EbsrMC extends MultipleChoice {}\n\nconst defineMultipleChoice = () => {\n if (!customElements.get(MC_TAG_NAME)) {\n customElements.define(MC_TAG_NAME, EbsrMC);\n }\n};\n\ndefineMultipleChoice();\n\nconst isNonEmptyArray = (a) => Array.isArray(a) && a.length > 0;\n\nexport const isSessionComplete = (session) => {\n const a = get(session, 'value.partA.value');\n const b = get(session, 'value.partB.value');\n\n return isNonEmptyArray(a) && isNonEmptyArray(b);\n};\n\nexport default class Ebsr extends HTMLElement {\n constructor() {\n super();\n this._model = {};\n this._session = {};\n this._options = null;\n }\n\n onSessionUpdated = (e) => {\n if (e.target === this) {\n return;\n }\n\n e.preventDefault();\n e.stopImmediatePropagation();\n\n const id = e.target.getAttribute('id');\n\n if (id) {\n const key = `part${id.toUpperCase()}`;\n\n if (e.update) {\n this._model[key] = e.update;\n }\n //TODO: accessing a private property here. The session event should contain the update in future to prevent this.\n this.dispatchSessionChanged(e.srcElement._session, key);\n }\n };\n\n set model(m) {\n this._model = m;\n this._updateParts();\n }\n\n set session(s) {\n this._session = s;\n\n customElements.whenDefined(MC_TAG_NAME).then(() => {\n this.setPartSession(this.partA, 'partA');\n this.setPartSession(this.partB, 'partB');\n });\n }\n\n _updateParts() {\n customElements.whenDefined(MC_TAG_NAME).then(() => {\n this.setPartModel(this.partA, 'partA');\n this.setPartModel(this.partB, 'partB');\n });\n }\n\n setPartModel(part, key) {\n if (this._model && this._model[key] && part && this._options) {\n let labels = {\n partA: undefined,\n partB: undefined,\n };\n\n if (this._model.partLabels) {\n const language = this._model.language;\n\n labels = {\n partA: translator.t('ebsr.part', {\n lng: language,\n index: this._model.partLabelType === 'Letters' ? 'A' : '1',\n }),\n partB: translator.t('ebsr.part', {\n lng: language,\n index: this._model.partLabelType === 'Letters' ? 'B' : '2',\n }),\n };\n }\n\n part.model = {\n ...preparePrintModel(this._model[key], this._options),\n keyMode: this._model[key].choicePrefix,\n partLabel: labels[key],\n };\n\n // pass options to enable print mode detection in multiple-choice component\n part.options = this._options;\n\n if (!part._session) {\n // for print, \"set session\" is not called,\n // but ebsr needs sessions in order to render the elements,\n // so we set it here it was not set already\n part.session = {};\n }\n }\n }\n\n set options(o) {\n this._options = o;\n // re-render parts so role changes (student/instructor) propagate to each part\n this._updateParts();\n }\n\n setPartSession(part, key) {\n if (this._session && this._model && part) {\n const { value } = this._session;\n part.session = value && value[key] ? value[key] : { id: key };\n }\n }\n\n dispatchSessionChanged(partSession, key) {\n this._session.value = {\n ...this._session.value,\n [key]: partSession,\n };\n\n log('[onSessionChanged] session: ', this._session);\n const complete = isSessionComplete(this._session);\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), complete));\n }\n\n get partA() {\n return this.querySelector(`${MC_TAG_NAME}#a`);\n }\n\n get partB() {\n return this.querySelector(`${MC_TAG_NAME}#b`);\n }\n\n connectedCallback() {\n this._render();\n this.addEventListener(SESSION_CHANGED, this.onSessionUpdated);\n }\n\n disconnectedCallback() {\n this.removeEventListener(SESSION_CHANGED, this.onSessionUpdated);\n }\n\n _render() {\n this.innerHTML = `\n <div>\n <${MC_TAG_NAME} id=\"a\"></${MC_TAG_NAME}>\n <${MC_TAG_NAME} id=\"b\"></${MC_TAG_NAME}>\n </div>\n `;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|