@pie-element/passage 2.21.4-next.3 → 2.21.5-next.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/controller/CHANGELOG.md +11 -0
- package/controller/lib/defaults.js +1 -1
- package/controller/lib/defaults.js.map +1 -1
- package/controller/lib/index.js +27 -16
- package/controller/lib/index.js.map +1 -1
- package/controller/package.json +1 -1
- package/lib/index.js +12 -15
- package/lib/index.js.map +1 -1
- package/lib/print.js +7 -7
- package/lib/print.js.map +1 -1
- package/lib/stimulus-tabs.js +18 -15
- package/lib/stimulus-tabs.js.map +1 -1
- package/module/controller.js +27 -21
- package/module/element.js +30 -34
- package/module/index.html +1 -1
- package/module/manifest.json +1 -1
- package/module/print.html +1 -1
- package/module/print.js +34 -33
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [2.21.4](https://github.com/pie-framework/pie-elements/compare/@pie-element/passage@2.21.3...@pie-element/passage@2.21.4) (2024-09-05)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **passage:** add possibility to enable/disable fields in player PD-4006 PD-4058 ([3b379b1](https://github.com/pie-framework/pie-elements/commit/3b379b18684c3a337b3405a3517e429b4017b51f))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
## [2.21.3](https://github.com/pie-framework/pie-elements/compare/@pie-element/passage@2.21.2...@pie-element/passage@2.21.3) (2024-08-29)
|
|
7
18
|
|
|
8
19
|
|
package/controller/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [1.4.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/passage-controller@1.4.0...@pie-element/passage-controller@1.4.1) (2024-09-05)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **passage:** add possibility to enable/disable fields in player PD-4006 PD-4058 ([3b379b1](https://github.com/pie-framework/pie-elements/commit/3b379b18684c3a337b3405a3517e429b4017b51f))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
# [1.4.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/passage-controller@1.3.0...@pie-element/passage-controller@1.4.0) (2024-06-25)
|
|
7
18
|
|
|
8
19
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/defaults.js"],"names":["teacherInstructionsEnabled","titleEnabled","subtitleEnabled","textEnabled","authorEnabled","passages","teacherInstructions","title","subtitle","author","text"],"mappings":";;;;;;eAAe;AACbA,EAAAA,0BAA0B,EAAE,
|
|
1
|
+
{"version":3,"sources":["../src/defaults.js"],"names":["teacherInstructionsEnabled","titleEnabled","subtitleEnabled","textEnabled","authorEnabled","passages","teacherInstructions","title","subtitle","author","text"],"mappings":";;;;;;eAAe;AACbA,EAAAA,0BAA0B,EAAE,IADf;AAEbC,EAAAA,YAAY,EAAE,IAFD;AAGbC,EAAAA,eAAe,EAAE,IAHJ;AAIbC,EAAAA,WAAW,EAAE,IAJA;AAKbC,EAAAA,aAAa,EAAE,IALF;AAMbC,EAAAA,QAAQ,EAAE,CACR;AACEC,IAAAA,mBAAmB,EAAE,EADvB;AAEEC,IAAAA,KAAK,EAAE,EAFT;AAGEC,IAAAA,QAAQ,EAAE,EAHZ;AAIEC,IAAAA,MAAM,EAAE,EAJV;AAKEC,IAAAA,IAAI,EAAE;AALR,GADQ;AANG,C","sourcesContent":["export default {\n teacherInstructionsEnabled: true,\n titleEnabled: true,\n subtitleEnabled: true,\n textEnabled: true,\n authorEnabled: true,\n passages: [\n {\n teacherInstructions: '',\n title: '',\n subtitle: '',\n author: '',\n text: '',\n },\n ],\n};\n"],"file":"defaults.js"}
|
package/controller/lib/index.js
CHANGED
|
@@ -35,6 +35,19 @@ function createDefaultModel() {
|
|
|
35
35
|
var normalize = function normalize(question) {
|
|
36
36
|
return _objectSpread(_objectSpread({}, _defaults["default"]), question);
|
|
37
37
|
};
|
|
38
|
+
|
|
39
|
+
exports.normalize = normalize;
|
|
40
|
+
|
|
41
|
+
var normalizeTeacherInstructions = function normalizeTeacherInstructions(instructions, env) {
|
|
42
|
+
var role = env.role,
|
|
43
|
+
mode = env.mode;
|
|
44
|
+
|
|
45
|
+
if (role === 'instructor' && (mode === 'view' || mode === 'evaluate')) {
|
|
46
|
+
return instructions || '';
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return '';
|
|
50
|
+
};
|
|
38
51
|
/**
|
|
39
52
|
*
|
|
40
53
|
* @param {*} question
|
|
@@ -43,35 +56,33 @@ var normalize = function normalize(question) {
|
|
|
43
56
|
*/
|
|
44
57
|
|
|
45
58
|
|
|
46
|
-
exports.normalize = normalize;
|
|
47
|
-
|
|
48
59
|
function model(_x, _x2, _x3) {
|
|
49
60
|
return _model.apply(this, arguments);
|
|
50
61
|
}
|
|
51
62
|
|
|
52
63
|
function _model() {
|
|
53
64
|
_model = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(question, session, env) {
|
|
54
|
-
var
|
|
55
|
-
|
|
65
|
+
var normalizedQuestion, normalizedPassages;
|
|
56
66
|
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
57
67
|
while (1) {
|
|
58
68
|
switch (_context.prev = _context.next) {
|
|
59
69
|
case 0:
|
|
60
|
-
_ref = env || {}, role = _ref.role, mode = _ref.mode;
|
|
61
70
|
normalizedQuestion = normalize(question);
|
|
62
|
-
|
|
63
|
-
|
|
71
|
+
normalizedPassages = normalizedQuestion.passages.map(function (passage, index) {
|
|
72
|
+
return {
|
|
73
|
+
teacherInstructions: normalizedQuestion.teacherInstructionsEnabled ? normalizeTeacherInstructions(passage.teacherInstructions, env) : '',
|
|
74
|
+
label: passage.titles || "Passage ".concat(index + 1),
|
|
75
|
+
title: normalizedQuestion.titleEnabled ? passage.title || '' : '',
|
|
76
|
+
subtitle: normalizedQuestion.subtitleEnabled ? passage.subtitle || '' : '',
|
|
77
|
+
author: normalizedQuestion.authorEnabled ? passage.author || '' : '',
|
|
78
|
+
text: normalizedQuestion.textEnabled ? passage.text || '' : ''
|
|
79
|
+
};
|
|
64
80
|
});
|
|
81
|
+
return _context.abrupt("return", _objectSpread(_objectSpread({}, normalizedQuestion), {}, {
|
|
82
|
+
passages: normalizedPassages
|
|
83
|
+
}));
|
|
65
84
|
|
|
66
|
-
|
|
67
|
-
if (normalizedQuestion.teacherInstructionsEnabled) {
|
|
68
|
-
out.teacherInstructions = normalizedQuestion.teacherInstructions;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
return _context.abrupt("return", out);
|
|
73
|
-
|
|
74
|
-
case 5:
|
|
85
|
+
case 3:
|
|
75
86
|
case "end":
|
|
76
87
|
return _context.stop();
|
|
77
88
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["getContent","html","replace","createDefaultModel","model","Promise","resolve","defaults","normalize","question","
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["getContent","html","replace","createDefaultModel","model","Promise","resolve","defaults","normalize","question","normalizeTeacherInstructions","instructions","env","role","mode","session","normalizedQuestion","normalizedPassages","passages","map","passage","index","teacherInstructions","teacherInstructionsEnabled","label","titles","title","titleEnabled","subtitle","subtitleEnabled","author","authorEnabled","text","textEnabled","validate","config","errors","forEach","field","required"],"mappings":"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","sourcesContent":["import defaults from './defaults';\n\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe)([^>]+)>)/gi, '');\n\nexport function createDefaultModel(model = {}) {\n return new Promise((resolve) => {\n resolve({ ...defaults, ...model });\n });\n}\n\nexport const normalize = (question) => ({ ...defaults, ...question });\n\nconst normalizeTeacherInstructions = (instructions, env) => {\n const { role, mode } = env;\n\n if (role === 'instructor' && (mode === 'view' || mode === 'evaluate')) {\n return instructions || '';\n }\n\n return '';\n};\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n */\nexport async function model(question, session, env) {\n const normalizedQuestion = normalize(question);\n\n const normalizedPassages = normalizedQuestion.passages.map((passage, index) => ({\n teacherInstructions: normalizedQuestion.teacherInstructionsEnabled\n ? normalizeTeacherInstructions(passage.teacherInstructions, env)\n : '',\n label: passage.titles || `Passage ${index + 1}`,\n title: normalizedQuestion.titleEnabled ? passage.title || '' : '',\n subtitle: normalizedQuestion.subtitleEnabled ? passage.subtitle || '' : '',\n author: normalizedQuestion.authorEnabled ? passage.author || '' : '',\n text: normalizedQuestion.textEnabled ? passage.text || '' : '',\n }));\n\n return {\n ...normalizedQuestion,\n passages: normalizedPassages,\n };\n}\n\nexport const validate = (model = {}, config = {}) => {\n const errors = {};\n\n ['teacherInstructions', 'title', 'subtitle', 'author', 'text'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n return errors;\n};\n"],"file":"index.js"}
|
package/controller/package.json
CHANGED
package/lib/index.js
CHANGED
|
@@ -7,6 +7,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports["default"] = void 0;
|
|
9
9
|
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
|
|
10
12
|
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
11
13
|
|
|
12
14
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
@@ -31,6 +33,10 @@ var _reactDom = _interopRequireDefault(require("react-dom"));
|
|
|
31
33
|
|
|
32
34
|
var _stimulusTabs = _interopRequireDefault(require("./stimulus-tabs"));
|
|
33
35
|
|
|
36
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
37
|
+
|
|
38
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
39
|
+
|
|
34
40
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
|
|
35
41
|
|
|
36
42
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
@@ -86,27 +92,18 @@ var PiePassage = /*#__PURE__*/function (_HTMLElement) {
|
|
|
86
92
|
value: function _render() {
|
|
87
93
|
var _this2 = this;
|
|
88
94
|
|
|
89
|
-
var _this$_model = this._model,
|
|
90
|
-
_this$_model$passages
|
|
91
|
-
passages = _this$_model$passages === void 0 ? [] : _this$_model$passages,
|
|
92
|
-
_this$_model$showTeac = _this$_model.showTeacherInstructions,
|
|
93
|
-
showTeacherInstructions = _this$_model$showTeac === void 0 ? false : _this$_model$showTeac;
|
|
95
|
+
var _this$_model$passages = this._model.passages,
|
|
96
|
+
passages = _this$_model$passages === void 0 ? [] : _this$_model$passages;
|
|
94
97
|
|
|
95
98
|
if (this._model.passages.length > 0) {
|
|
96
99
|
var passagesTabs = passages.map(function (passage, index) {
|
|
97
|
-
return {
|
|
98
|
-
id: index
|
|
99
|
-
|
|
100
|
-
subtitle: passage.subtitle,
|
|
101
|
-
author: passage.author,
|
|
102
|
-
text: passage.text,
|
|
103
|
-
teacherInstructions: passage.teacherInstructions || ''
|
|
104
|
-
};
|
|
100
|
+
return _objectSpread({
|
|
101
|
+
id: index
|
|
102
|
+
}, passage);
|
|
105
103
|
});
|
|
106
104
|
|
|
107
105
|
var elem = /*#__PURE__*/_react["default"].createElement(_stimulusTabs["default"], {
|
|
108
|
-
tabs: passagesTabs
|
|
109
|
-
showTeacherInstructions: showTeacherInstructions
|
|
106
|
+
tabs: passagesTabs
|
|
110
107
|
});
|
|
111
108
|
|
|
112
109
|
_reactDom["default"].render(elem, this, function () {
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["PiePassage","_model","passages","_session","language","lang","slice","setAttribute","s","dispatchEvent","ModelSetEvent","tagName","toLowerCase","setLangAttribute","_render","
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["PiePassage","_model","passages","_session","language","lang","slice","setAttribute","s","dispatchEvent","ModelSetEvent","tagName","toLowerCase","setLangAttribute","_render","length","passagesTabs","map","passage","index","id","elem","React","createElement","StimulusTabs","tabs","ReactDOM","render","HTMLElement"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA;;;;;;;;;;IAEqBA,U;;;;;AACnB,wBAAc;AAAA;;AAAA;AACZ;AACA,UAAKC,MAAL,GAAc;AACZC,MAAAA,QAAQ,EAAE;AADE,KAAd;AAGA,UAAKC,QAAL,GAAgB,IAAhB;AALY;AAMb;;;;WAED,4BAAmB;AACjB,UAAMC,QAAQ,GAAG,KAAKH,MAAL,6BAAsB,KAAKA,MAAL,CAAYG,QAAlC,IAA6C,KAAKH,MAAL,CAAYG,QAAzD,GAAoE,EAArF;AACA,UAAMC,IAAI,GAAGD,QAAQ,GAAGA,QAAQ,CAACE,KAAT,CAAe,CAAf,EAAkB,CAAlB,CAAH,GAA0B,IAA/C;AACA,WAAKC,YAAL,CAAkB,MAAlB,EAA0BF,IAA1B;AACD;;;SAED,aAAUG,CAAV,EAAa;AACX,WAAKP,MAAL,GAAcO,CAAd;AACA,WAAKC,aAAL,CAAmB,IAAIC,8BAAJ,CAAkB,KAAKC,OAAL,CAAaC,WAAb,EAAlB,EAA8C,KAAKT,QAAnD,EAA6D,CAAC,CAAC,KAAKF,MAApE,CAAnB;AACA,WAAKY,gBAAL;;AAEA,WAAKC,OAAL;AACD;;;SAED,aAAYN,CAAZ,EAAe;AACb,WAAKL,QAAL,GAAgBK,CAAhB;AACD;;;WAED,6BAAoB;AAClB,WAAKD,YAAL,CAAkB,YAAlB,EAAgC,SAAhC;AACA,WAAKA,YAAL,CAAkB,MAAlB,EAA0B,QAA1B;;AACA,WAAKO,OAAL;AACD;;;WAED,mBAAU;AAAA;;AACR,kCAA0B,KAAKb,MAA/B,CAAQC,QAAR;AAAA,UAAQA,QAAR,sCAAmB,EAAnB;;AAEA,UAAI,KAAKD,MAAL,CAAYC,QAAZ,CAAqBa,MAArB,GAA8B,CAAlC,EAAqC;AACnC,YAAMC,YAAY,GAAGd,QAAQ,CAACe,GAAT,CAAa,UAACC,OAAD,EAAUC,KAAV;AAAA;AAChCC,YAAAA,EAAE,EAAED;AAD4B,aAE7BD,OAF6B;AAAA,SAAb,CAArB;;AAKA,YAAMG,IAAI,gBAAGC,kBAAMC,aAAN,CAAoBC,wBAApB,EAAkC;AAC7CC,UAAAA,IAAI,EAAET;AADuC,SAAlC,CAAb;;AAIAU,6BAASC,MAAT,CAAgBN,IAAhB,EAAsB,IAAtB,EAA4B;AAAA,iBAAM,yCAAW,MAAX,CAAN;AAAA,SAA5B;AACD;AACF;;;kDAhDqCO,W","sourcesContent":["import { ModelSetEvent } from '@pie-framework/pie-player-events';\nimport { renderMath } from '@pie-lib/pie-toolbox/math-rendering-accessible';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport StimulusTabs from './stimulus-tabs';\n\nexport default class PiePassage extends HTMLElement {\n constructor() {\n super();\n this._model = {\n passages: [],\n };\n this._session = null;\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.dispatchEvent(new ModelSetEvent(this.tagName.toLowerCase(), this._session, !!this._model));\n this.setLangAttribute();\n\n this._render();\n }\n\n set session(s) {\n this._session = s;\n }\n\n connectedCallback() {\n this.setAttribute('aria-label', 'Passage');\n this.setAttribute('role', 'region');\n this._render();\n }\n\n _render() {\n const { passages = [] } = this._model;\n\n if (this._model.passages.length > 0) {\n const passagesTabs = passages.map((passage, index) => ({\n id: index,\n ...passage,\n }));\n\n const elem = React.createElement(StimulusTabs, {\n tabs: passagesTabs,\n });\n\n ReactDOM.render(elem, this, () => renderMath(this));\n }\n }\n}\n"],"file":"index.js"}
|
package/lib/print.js
CHANGED
|
@@ -42,11 +42,12 @@ var preparePrintPassage = function preparePrintPassage(model, opts) {
|
|
|
42
42
|
return model.passages.map(function (passage, index) {
|
|
43
43
|
return {
|
|
44
44
|
id: index,
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
45
|
+
teacherInstructions: model.teacherInstructionsEnabled ? isInstructor && passage.teacherInstructions || '' : '',
|
|
46
|
+
label: passage.title || "Passage ".concat(index + 1),
|
|
47
|
+
title: model.titleEnabled ? passage.title || '' : '',
|
|
48
|
+
author: model.authorEnabled ? passage.author || '' : '',
|
|
49
|
+
subtitle: model.subtitleEnabled ? passage.subtitle || '' : '',
|
|
50
|
+
text: model.textEnabled ? passage.text || '' : ''
|
|
50
51
|
};
|
|
51
52
|
});
|
|
52
53
|
};
|
|
@@ -70,9 +71,8 @@ var PassagePrint = /*#__PURE__*/function (_HTMLElement) {
|
|
|
70
71
|
var printPassage = preparePrintPassage(_this._model, _this._options);
|
|
71
72
|
|
|
72
73
|
var element = /*#__PURE__*/_react["default"].createElement(_stimulusTabs["default"], {
|
|
73
|
-
tabs: printPassage,
|
|
74
74
|
disabledTabs: true,
|
|
75
|
-
|
|
75
|
+
tabs: printPassage
|
|
76
76
|
});
|
|
77
77
|
|
|
78
78
|
_reactDom["default"].render(element, (0, _assertThisInitialized2["default"])(_this));
|
package/lib/print.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/print.js"],"names":["log","preparePrintPassage","model","opts","isInstructor","role","passages","map","passage","index","id","title","
|
|
1
|
+
{"version":3,"sources":["../src/print.js"],"names":["log","preparePrintPassage","model","opts","isInstructor","role","passages","map","passage","index","id","teacherInstructions","teacherInstructionsEnabled","label","title","titleEnabled","author","authorEnabled","subtitle","subtitleEnabled","text","textEnabled","PassagePrint","_model","_options","_session","_rerender","length","printPassage","element","React","createElement","StimulusTabs","disabledTabs","tabs","ReactDOM","render","leading","trailing","s","o","HTMLElement"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA;;;;;;AAEA,IAAMA,GAAG,GAAG,uBAAM,2BAAN,CAAZ;;AAEA,IAAMC,mBAAmB,GAAG,SAAtBA,mBAAsB,CAACC,KAAD,EAAQC,IAAR,EAAiB;AAC3C,MAAMC,YAAY,GAAGD,IAAI,CAACE,IAAL,KAAc,YAAnC;AAEA,SAAOH,KAAK,CAACI,QAAN,CAAeC,GAAf,CAAmB,UAACC,OAAD,EAAUC,KAAV;AAAA,WAAqB;AAC7CC,MAAAA,EAAE,EAAED,KADyC;AAE7CE,MAAAA,mBAAmB,EAAET,KAAK,CAACU,0BAAN,GAAoCR,YAAY,IAAII,OAAO,CAACG,mBAAzB,IAAiD,EAApF,GAAyF,EAFjE;AAG7CE,MAAAA,KAAK,EAAEL,OAAO,CAACM,KAAR,sBAA4BL,KAAK,GAAG,CAApC,CAHsC;AAI7CK,MAAAA,KAAK,EAAEZ,KAAK,CAACa,YAAN,GAAqBP,OAAO,CAACM,KAAR,IAAiB,EAAtC,GAA2C,EAJL;AAK7CE,MAAAA,MAAM,EAAEd,KAAK,CAACe,aAAN,GAAsBT,OAAO,CAACQ,MAAR,IAAkB,EAAxC,GAA6C,EALR;AAM7CE,MAAAA,QAAQ,EAAEhB,KAAK,CAACiB,eAAN,GAAwBX,OAAO,CAACU,QAAR,IAAoB,EAA5C,GAAiD,EANd;AAO7CE,MAAAA,IAAI,EAAElB,KAAK,CAACmB,WAAN,GAAoBb,OAAO,CAACY,IAAR,IAAgB,EAApC,GAAyC;AAPF,KAArB;AAAA,GAAnB,CAAP;AASD,CAZD;;IAcqBE,Y;;;;;AACnB,0BAAc;AAAA;;AAAA;AACZ;AACA,UAAKC,MAAL,GAAc,IAAd;AACA,UAAKC,QAAL,GAAgB,IAAhB;AACA,UAAKC,QAAL,GAAgB,EAAhB;AAEA,UAAKC,SAAL,GAAiB,0BACf,YAAM;AACJ,UAAI,MAAKH,MAAL,IAAe,MAAKE,QAAxB,EAAkC;AAChC,YAAI,MAAKF,MAAL,CAAYjB,QAAZ,IAAwB,MAAKiB,MAAL,CAAYjB,QAAZ,CAAqBqB,MAArB,GAA8B,CAA1D,EAA6D;AAC3D,cAAMC,YAAY,GAAG3B,mBAAmB,CAAC,MAAKsB,MAAN,EAAc,MAAKC,QAAnB,CAAxC;;AAEA,cAAMK,OAAO,gBAAGC,kBAAMC,aAAN,CAAoBC,wBAApB,EAAkC;AAChDC,YAAAA,YAAY,EAAE,IADkC;AAEhDC,YAAAA,IAAI,EAAEN;AAF0C,WAAlC,CAAhB;;AAKAO,+BAASC,MAAT,CAAgBP,OAAhB;AACD;AACF,OAXD,MAWO;AACL7B,QAAAA,GAAG,CAAC,MAAD,CAAH;AACD;AACF,KAhBc,EAiBf,EAjBe,EAkBf;AAAEqC,MAAAA,OAAO,EAAE,KAAX;AAAkBC,MAAAA,QAAQ,EAAE;AAA5B,KAlBe,CAAjB;AANY;AA0Bb;;;;SAED,aAAUC,CAAV,EAAa;AACX,WAAKhB,MAAL,GAAcgB,CAAd;;AACA,WAAKb,SAAL;AACD;;;SAED,aAAYc,CAAZ,EAAe;AACb,WAAKhB,QAAL,GAAgBgB,CAAhB;AACD;;;WAED,6BAAoB,CAAE;;;kDAtCkBC,W","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport debounce from 'lodash/debounce';\nimport debug from 'debug';\n\nimport StimulusTabs from './stimulus-tabs';\n\nconst log = debug('pie-element:passage:print');\n\nconst preparePrintPassage = (model, opts) => {\n const isInstructor = opts.role === 'instructor';\n\n return model.passages.map((passage, index) => ({\n id: index,\n teacherInstructions: model.teacherInstructionsEnabled ? (isInstructor && passage.teacherInstructions) || '' : '',\n label: passage.title || `Passage ${index + 1}`,\n title: model.titleEnabled ? passage.title || '' : '',\n author: model.authorEnabled ? passage.author || '' : '',\n subtitle: model.subtitleEnabled ? passage.subtitle || '' : '',\n text: model.textEnabled ? passage.text || '' : '',\n }));\n};\n\nexport default class PassagePrint extends HTMLElement {\n constructor() {\n super();\n this._model = null;\n this._options = null;\n this._session = [];\n\n this._rerender = debounce(\n () => {\n if (this._model && this._session) {\n if (this._model.passages && this._model.passages.length > 0) {\n const printPassage = preparePrintPassage(this._model, this._options);\n\n const element = React.createElement(StimulusTabs, {\n disabledTabs: true,\n tabs: printPassage,\n });\n\n ReactDOM.render(element, this);\n }\n } else {\n log('skip');\n }\n },\n 50,\n { leading: false, trailing: true },\n );\n }\n\n set model(s) {\n this._model = s;\n this._rerender();\n }\n\n set options(o) {\n this._options = o;\n }\n\n connectedCallback() {}\n}\n"],"file":"print.js"}
|
package/lib/stimulus-tabs.js
CHANGED
|
@@ -83,6 +83,10 @@ var styles = function styles(theme) {
|
|
|
83
83
|
};
|
|
84
84
|
};
|
|
85
85
|
|
|
86
|
+
var getContent = function getContent(html) {
|
|
87
|
+
return (html || '').replace(/(<(?!img|iframe)([^>]+)>)/gi, '');
|
|
88
|
+
};
|
|
89
|
+
|
|
86
90
|
var StimulusTabs = /*#__PURE__*/function (_React$Component) {
|
|
87
91
|
(0, _inherits2["default"])(StimulusTabs, _React$Component);
|
|
88
92
|
|
|
@@ -195,10 +199,10 @@ var StimulusTabs = /*#__PURE__*/function (_React$Component) {
|
|
|
195
199
|
|
|
196
200
|
(0, _createClass2["default"])(StimulusTabs, [{
|
|
197
201
|
key: "renderInstructions",
|
|
198
|
-
value: function renderInstructions(
|
|
199
|
-
var disabledTabs = arguments.length >
|
|
202
|
+
value: function renderInstructions(teacherInstructions) {
|
|
203
|
+
var disabledTabs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
200
204
|
|
|
201
|
-
if (!
|
|
205
|
+
if (!getContent(teacherInstructions)) {
|
|
202
206
|
return;
|
|
203
207
|
}
|
|
204
208
|
|
|
@@ -222,7 +226,7 @@ var StimulusTabs = /*#__PURE__*/function (_React$Component) {
|
|
|
222
226
|
}
|
|
223
227
|
}, {
|
|
224
228
|
key: "renderTab",
|
|
225
|
-
value: function renderTab(tab,
|
|
229
|
+
value: function renderTab(tab, disabledTabs) {
|
|
226
230
|
var classes = this.props.classes;
|
|
227
231
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
228
232
|
className: (0, _classnames["default"])(classes.passage, 'passage'),
|
|
@@ -230,22 +234,22 @@ var StimulusTabs = /*#__PURE__*/function (_React$Component) {
|
|
|
230
234
|
id: "tabpanel-".concat(tab.id),
|
|
231
235
|
role: "tabpanel",
|
|
232
236
|
"aria-labelledby": "button-".concat(tab.id)
|
|
233
|
-
}, this.renderInstructions(
|
|
237
|
+
}, this.renderInstructions(tab.teacherInstructions, disabledTabs), (getContent(tab.title) || getContent(tab.subtitle)) && /*#__PURE__*/_react["default"].createElement("h2", null, getContent(tab.title) && /*#__PURE__*/_react["default"].createElement("div", {
|
|
234
238
|
className: (0, _classnames["default"])(classes.passageTitle, 'title'),
|
|
235
239
|
dangerouslySetInnerHTML: {
|
|
236
240
|
__html: this.parsedText(tab.title)
|
|
237
241
|
}
|
|
238
|
-
}), /*#__PURE__*/_react["default"].createElement("div", {
|
|
242
|
+
}), getContent(tab.subtitle) && /*#__PURE__*/_react["default"].createElement("div", {
|
|
239
243
|
className: (0, _classnames["default"])(classes.passageSubtitle, 'subtitle'),
|
|
240
244
|
dangerouslySetInnerHTML: {
|
|
241
245
|
__html: this.parsedText(tab.subtitle)
|
|
242
246
|
}
|
|
243
|
-
})), /*#__PURE__*/_react["default"].createElement("div", {
|
|
247
|
+
})), getContent(tab.author) && /*#__PURE__*/_react["default"].createElement("div", {
|
|
244
248
|
className: (0, _classnames["default"])(classes.passageAuthor, 'author'),
|
|
245
249
|
dangerouslySetInnerHTML: {
|
|
246
250
|
__html: this.parsedText(tab.author)
|
|
247
251
|
}
|
|
248
|
-
}), /*#__PURE__*/_react["default"].createElement("div", {
|
|
252
|
+
}), getContent(tab.text) && /*#__PURE__*/_react["default"].createElement("div", {
|
|
249
253
|
key: tab.id,
|
|
250
254
|
className: (0, _classnames["default"])(classes.passageText, 'text'),
|
|
251
255
|
dangerouslySetInnerHTML: {
|
|
@@ -261,8 +265,7 @@ var StimulusTabs = /*#__PURE__*/function (_React$Component) {
|
|
|
261
265
|
var _this$props = this.props,
|
|
262
266
|
classes = _this$props.classes,
|
|
263
267
|
tabs = _this$props.tabs,
|
|
264
|
-
disabledTabs = _this$props.disabledTabs
|
|
265
|
-
showTeacherInstructions = _this$props.showTeacherInstructions;
|
|
268
|
+
disabledTabs = _this$props.disabledTabs;
|
|
266
269
|
var activeTab = this.state.activeTab;
|
|
267
270
|
|
|
268
271
|
if (!(tabs !== null && tabs !== void 0 && tabs.length)) {
|
|
@@ -275,7 +278,7 @@ var StimulusTabs = /*#__PURE__*/function (_React$Component) {
|
|
|
275
278
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
276
279
|
className: (0, _classnames["default"])(classes.passages, 'passages')
|
|
277
280
|
}, disabledTabs || tabs.length === 1 ? tabs.map(function (tab) {
|
|
278
|
-
return _this2.renderTab(tab,
|
|
281
|
+
return _this2.renderTab(tab, disabledTabs);
|
|
279
282
|
}) : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_Tabs["default"], {
|
|
280
283
|
classes: {
|
|
281
284
|
root: classes.stickyTabs,
|
|
@@ -290,7 +293,7 @@ var StimulusTabs = /*#__PURE__*/function (_React$Component) {
|
|
|
290
293
|
id: "button-".concat(tab.id),
|
|
291
294
|
label: /*#__PURE__*/_react["default"].createElement("span", {
|
|
292
295
|
dangerouslySetInnerHTML: {
|
|
293
|
-
__html: _this2.parsedText(tab.
|
|
296
|
+
__html: _this2.parsedText(tab.label)
|
|
294
297
|
}
|
|
295
298
|
}),
|
|
296
299
|
value: tab.id,
|
|
@@ -304,7 +307,7 @@ var StimulusTabs = /*#__PURE__*/function (_React$Component) {
|
|
|
304
307
|
return _this2.handleKeyDown(event, tab.id);
|
|
305
308
|
}
|
|
306
309
|
});
|
|
307
|
-
})), selectedTab ? this.renderTab(selectedTab,
|
|
310
|
+
})), selectedTab ? this.renderTab(selectedTab, disabledTabs) : null));
|
|
308
311
|
}
|
|
309
312
|
}]);
|
|
310
313
|
return StimulusTabs;
|
|
@@ -314,14 +317,14 @@ StimulusTabs.propTypes = {
|
|
|
314
317
|
classes: _propTypes["default"].object.isRequired,
|
|
315
318
|
tabs: _propTypes["default"].arrayOf(_propTypes["default"].shape({
|
|
316
319
|
id: _propTypes["default"].number.isRequired,
|
|
320
|
+
label: _propTypes["default"].string.isRequired,
|
|
317
321
|
title: _propTypes["default"].string.isRequired,
|
|
318
322
|
subtitle: _propTypes["default"].string,
|
|
319
323
|
author: _propTypes["default"].string,
|
|
320
324
|
text: _propTypes["default"].string.isRequired,
|
|
321
325
|
teacherInstructions: _propTypes["default"].string
|
|
322
326
|
}).isRequired).isRequired,
|
|
323
|
-
disabledTabs: _propTypes["default"].bool
|
|
324
|
-
showTeacherInstructions: _propTypes["default"].bool
|
|
327
|
+
disabledTabs: _propTypes["default"].bool
|
|
325
328
|
};
|
|
326
329
|
|
|
327
330
|
var _default = (0, _styles.withStyles)(styles)(StimulusTabs);
|
package/lib/stimulus-tabs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/stimulus-tabs.jsx"],"names":["styles","theme","passages","flexGrow","backgroundColor","color","background","text","passage","padding","spacing","unit","passageTitle","fontSize","passageSubtitle","passageAuthor","passageText","stickyTabs","position","top","tab","palette","common","white","black","tabButton","teacherInstructions","marginBottom","StimulusTabs","activeTab","event","setState","setTimeout","tabChangeEvent","CustomEvent","detail","window","dispatchEvent","currentTabId","key","tabs","props","newTabIndex","currentIndex","findIndex","id","length","preventDefault","handleChange","document","getElementById","focus","div","createElement","innerHTML","replace","audio","querySelector","source","setAttribute","getAttribute","removeAttribute","appendChild","showTeacherInstructions","disabledTabs","teacherInstructionsDiv","hidden","visible","classes","renderInstructions","__html","parsedText","title","subtitle","author","state","selectedTab","find","map","renderTab","root","flexContainer","handleKeyDown","React","Component","propTypes","PropTypes","object","isRequired","arrayOf","shape","number","string","bool"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;AAEA,IAAMA,MAAM,GAAG,SAATA,MAAS,CAACC,KAAD;AAAA,SAAY;AACzBC,IAAAA,QAAQ,EAAE;AACRC,MAAAA,QAAQ,EAAE,CADF;AAERC,MAAAA,eAAe,EAAEC,gBAAMC,UAAN,EAFT;AAGRD,MAAAA,KAAK,EAAEA,gBAAME,IAAN;AAHC,KADe;AAMzBC,IAAAA,OAAO,EAAE;AACPJ,MAAAA,eAAe,EAAEC,gBAAMC,UAAN,EADV;AAEPD,MAAAA,KAAK,EAAEA,gBAAME,IAAN,EAFA;AAGPE,MAAAA,OAAO,EAAER,KAAK,CAACS,OAAN,CAAcC,IAAd,GAAqB;AAHvB,KANgB;AAWzBC,IAAAA,YAAY,EAAE;AACZC,MAAAA,QAAQ,EAAE;AADE,KAXW;AAczBC,IAAAA,eAAe,EAAE;AACfD,MAAAA,QAAQ,EAAE;AADK,KAdQ;AAiBzBE,IAAAA,aAAa,EAAE;AACbF,MAAAA,QAAQ,EAAE;AADG,KAjBU;AAoBzBG,IAAAA,WAAW,EAAE,EApBY;AAqBzBC,IAAAA,UAAU,EAAE;AACVX,MAAAA,UAAU,EAAED,gBAAMC,UAAN,EADF;AAEVY,MAAAA,QAAQ,EAAE,QAFA;AAGVC,MAAAA,GAAG,EAAE;AAHK,KArBa;AA0BzBC,IAAAA,GAAG,EAAE;AACHd,MAAAA,UAAU,EAAEL,KAAK,CAACoB,OAAN,CAAcC,MAAd,CAAqBC,KAD9B;AACqC;AACxCV,MAAAA,QAAQ,EAAE,SAFP;AAGHR,MAAAA,KAAK,EAAEJ,KAAK,CAACoB,OAAN,CAAcC,MAAd,CAAqBE,KAHzB,CAGgC;;AAHhC,KA1BoB;AA+BzBC,IAAAA,SAAS,EAAE;AACTnB,MAAAA,UAAU,EAAEL,KAAK,CAACoB,OAAN,CAAcC,MAAd,CAAqBC,KADxB,CAC+B;;AAD/B,KA/Bc;AAkCzBG,IAAAA,mBAAmB,EAAE;AACnBC,MAAAA,YAAY,EAAE1B,KAAK,CAACS,OAAN,CAAcC,IAAd,GAAqB;AADhB;AAlCI,GAAZ;AAAA,CAAf;;IAuCMiB,Y;;;;;;;;;;;;;;;8FACI;AACNC,MAAAA,SAAS,EAAE;AADL,K;qGAIO,UAACC,KAAD,EAAQD,SAAR,EAAsB;AACnC,YAAKE,QAAL,CAAc;AAAA,eAAO;AAAEF,UAAAA,SAAS,EAATA;AAAF,SAAP;AAAA,OAAd;;AAEAG,MAAAA,UAAU,CAAC,YAAM;AACf,YAAMC,cAAc,GAAG,IAAIC,WAAJ,CAAgB,2BAAhB,EAA6C;AAClEC,UAAAA,MAAM,EAAE;AAAEf,YAAAA,GAAG,EAAES;AAAP;AAD0D,SAA7C,CAAvB;AAIAO,QAAAA,MAAM,CAACC,aAAP,CAAqBJ,cAArB;AACD,OANS,CAAV;AAOD,K;sGAEe,UAACH,KAAD,EAAQQ,YAAR,EAAyB;AACvC,UAAQC,GAAR,GAAgBT,KAAhB,CAAQS,GAAR;AACA,UAAQC,IAAR,GAAiB,MAAKC,KAAtB,CAAQD,IAAR;AAEA,UAAIE,WAAW,GAAG,CAAC,CAAnB;AACA,UAAMC,YAAY,GAAGH,IAAI,CAACI,SAAL,CAAe,UAACxB,GAAD;AAAA,eAASA,GAAG,CAACyB,EAAJ,KAAWP,YAApB;AAAA,OAAf,CAArB;;AAEA,cAAQC,GAAR;AACE,aAAK,YAAL;AACE;AACAG,UAAAA,WAAW,GAAG,CAACC,YAAY,GAAG,CAAhB,IAAqBH,IAAI,CAACM,MAAxC;AACA;;AACF,aAAK,WAAL;AACE;AACAJ,UAAAA,WAAW,GAAG,CAACC,YAAY,GAAG,CAAf,GAAmBH,IAAI,CAACM,MAAzB,IAAmCN,IAAI,CAACM,MAAtD;AACA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,aAAK,MAAL;AACE;AACAJ,UAAAA,WAAW,GAAG,CAAd;AACA;;AACF,aAAK,KAAL;AACE;AACAA,UAAAA,WAAW,GAAGF,IAAI,CAACM,MAAL,GAAc,CAA5B;AACA;;AACF,aAAK,OAAL;AACA,aAAK,GAAL;AACE;AACAJ,UAAAA,WAAW,GAAGC,YAAd;AACA;;AACF;AACE;AAhCJ;;AAmCA,UAAID,WAAW,KAAK,CAAC,CAArB,EAAwB;AACtBZ,QAAAA,KAAK,CAACiB,cAAN;;AACA,cAAKC,YAAL,CAAkBlB,KAAlB,EAAyBU,IAAI,CAACE,WAAD,CAAJ,CAAkBG,EAA3C;;AACAI,QAAAA,QAAQ,CAACC,cAAT,kBAAkCV,IAAI,CAACE,WAAD,CAAJ,CAAkBG,EAApD,GAA0DM,KAA1D;AACD;AACF,K;mGAEY,YAAe;AAAA,UAAd5C,IAAc,uEAAP,EAAO;AAC1B;AACA,UAAM6C,GAAG,GAAGH,QAAQ,CAACI,aAAT,CAAuB,KAAvB,CAAZ;AACAD,MAAAA,GAAG,CAACE,SAAJ,GAAgB/C,IAAI,CAACgD,OAAL,CAAa,aAAb,EAA4B,OAA5B,CAAhB;AAEA,UAAMC,KAAK,GAAGJ,GAAG,CAACK,aAAJ,CAAkB,OAAlB,CAAd;;AAEA,UAAID,KAAJ,EAAW;AACT,YAAME,MAAM,GAAGT,QAAQ,CAACI,aAAT,CAAuB,QAAvB,CAAf;AAEAK,QAAAA,MAAM,CAACC,YAAP,CAAoB,MAApB,EAA4B,WAA5B;AACAD,QAAAA,MAAM,CAACC,YAAP,CAAoB,KAApB,EAA2BH,KAAK,CAACI,YAAN,CAAmB,KAAnB,CAA3B;AAEAJ,QAAAA,KAAK,CAACK,eAAN,CAAsB,KAAtB;AACAL,QAAAA,KAAK,CAACM,WAAN,CAAkBJ,MAAlB;AACD;;AAED,aAAON,GAAG,CAACE,SAAX;AACD,K;;;;;;WAED,4BAAmBS,uBAAnB,EAA4CrC,mBAA5C,EAAuF;AAAA,UAAtBsC,YAAsB,uEAAP,KAAO;;AACrF,UAAI,CAACD,uBAAD,IAA4B,CAACrC,mBAAjC,EAAsD;AACpD;AACD;;AAED,UAAMuC,sBAAsB,gBAC1B,gCAAC,uBAAD;AACE,QAAA,OAAO,EAAC,KADV;AAEE,QAAA,SAAS,EAAC,QAFZ;AAGE,QAAA,gBAAgB,EAAC,sBAHnB;AAIE,QAAA,MAAM,EAAEvC;AAJV,QADF;;AASA,UAAIsC,YAAJ,EAAkB;AAChB,eAAOC,sBAAP;AACD;;AAED,0BACE,gCAAC,qBAAD;AACE,QAAA,MAAM,EAAE;AACNC,UAAAA,MAAM,EAAE,2BADF;AAENC,UAAAA,OAAO,EAAE;AAFH;AADV,SAMGF,sBANH,CADF;AAUD;;;WAED,mBAAU7C,GAAV,EAAe2C,uBAAf,EAAwCC,YAAxC,EAAsD;AACpD,UAAQI,OAAR,GAAoB,KAAK3B,KAAzB,CAAQ2B,OAAR;AAEA,0BACE;AACE,QAAA,SAAS,EAAE,4BAAWA,OAAO,CAAC5D,OAAnB,EAA4B,SAA5B,CADb;AAEE,QAAA,GAAG,EAAEY,GAAG,CAACyB,EAFX;AAGE,QAAA,EAAE,qBAAczB,GAAG,CAACyB,EAAlB,CAHJ;AAIE,QAAA,IAAI,EAAC,UAJP;AAKE,4CAA2BzB,GAAG,CAACyB,EAA/B;AALF,SAOG,KAAKwB,kBAAL,CAAwBN,uBAAxB,EAAiD3C,GAAG,CAACM,mBAArD,EAA0EsC,YAA1E,CAPH,eAQE,yDACE;AACE,QAAA,SAAS,EAAE,4BAAWI,OAAO,CAACxD,YAAnB,EAAiC,OAAjC,CADb;AAEE,QAAA,uBAAuB,EAAE;AAAE0D,UAAAA,MAAM,EAAE,KAAKC,UAAL,CAAgBnD,GAAG,CAACoD,KAApB;AAAV;AAF3B,QADF,eAKE;AACE,QAAA,SAAS,EAAE,4BAAWJ,OAAO,CAACtD,eAAnB,EAAoC,UAApC,CADb;AAEE,QAAA,uBAAuB,EAAE;AAAEwD,UAAAA,MAAM,EAAE,KAAKC,UAAL,CAAgBnD,GAAG,CAACqD,QAApB;AAAV;AAF3B,QALF,CARF,eAkBE;AACE,QAAA,SAAS,EAAE,4BAAWL,OAAO,CAACrD,aAAnB,EAAkC,QAAlC,CADb;AAEE,QAAA,uBAAuB,EAAE;AAAEuD,UAAAA,MAAM,EAAE,KAAKC,UAAL,CAAgBnD,GAAG,CAACsD,MAApB;AAAV;AAF3B,QAlBF,eAsBE;AACE,QAAA,GAAG,EAAEtD,GAAG,CAACyB,EADX;AAEE,QAAA,SAAS,EAAE,4BAAWuB,OAAO,CAACpD,WAAnB,EAAgC,MAAhC,CAFb;AAGE,QAAA,uBAAuB,EAAE;AAAEsD,UAAAA,MAAM,EAAE,KAAKC,UAAL,CAAgBnD,GAAG,CAACb,IAApB;AAAV;AAH3B,QAtBF,CADF;AA8BD;;;WAED,kBAAS;AAAA;;AACP,wBAAiE,KAAKkC,KAAtE;AAAA,UAAQ2B,OAAR,eAAQA,OAAR;AAAA,UAAiB5B,IAAjB,eAAiBA,IAAjB;AAAA,UAAuBwB,YAAvB,eAAuBA,YAAvB;AAAA,UAAqCD,uBAArC,eAAqCA,uBAArC;AACA,UAAQlC,SAAR,GAAsB,KAAK8C,KAA3B,CAAQ9C,SAAR;;AAEA,UAAI,EAACW,IAAD,aAACA,IAAD,eAACA,IAAI,CAAEM,MAAP,CAAJ,EAAmB;AACjB;AACD;;AAED,UAAM8B,WAAW,GAAG,CAACpC,IAAI,IAAI,EAAT,EAAaqC,IAAb,CAAkB,UAACzD,GAAD;AAAA,eAASA,GAAG,CAACyB,EAAJ,KAAWhB,SAApB;AAAA,OAAlB,CAApB;AAEA,0BACE;AAAK,QAAA,SAAS,EAAE,4BAAWuC,OAAO,CAAClE,QAAnB,EAA6B,UAA7B;AAAhB,SACG8D,YAAY,IAAIxB,IAAI,CAACM,MAAL,KAAgB,CAAhC,GACCN,IAAI,CAACsC,GAAL,CAAS,UAAC1D,GAAD;AAAA,eAAS,MAAI,CAAC2D,SAAL,CAAe3D,GAAf,EAAoB2C,uBAApB,EAA6CC,YAA7C,CAAT;AAAA,OAAT,CADD,gBAGC,+EACE,gCAAC,gBAAD;AACE,QAAA,OAAO,EAAE;AACPgB,UAAAA,IAAI,EAAEZ,OAAO,CAACnD,UADP;AAEPgE,UAAAA,aAAa,EAAEb,OAAO,CAAC3C;AAFhB,SADX;AAKE,QAAA,KAAK,EAAEI,SALT;AAME,QAAA,QAAQ,EAAE,KAAKmB;AANjB,SAQGR,IAAI,CAACsC,GAAL,CAAS,UAAC1D,GAAD;AAAA,4BACR,gCAAC,eAAD;AACE,UAAA,SAAS,EAAEgD,OAAO,CAAChD,GADrB;AAEE,UAAA,GAAG,EAAEA,GAAG,CAACyB,EAFX;AAGE,UAAA,EAAE,mBAAYzB,GAAG,CAACyB,EAAhB,CAHJ;AAIE,UAAA,KAAK,eAAE;AAAM,YAAA,uBAAuB,EAAE;AAAEyB,cAAAA,MAAM,EAAE,MAAI,CAACC,UAAL,CAAgBnD,GAAG,CAACoD,KAApB;AAAV;AAA/B,YAJT;AAKE,UAAA,KAAK,EAAEpD,GAAG,CAACyB,EALb;AAME,UAAA,QAAQ,EAAEhB,SAAS,KAAKT,GAAG,CAACyB,EAAlB,GAAuB,CAAvB,GAA2B,CAAC,CANxC;AAOE,8CAA2BzB,GAAG,CAACyB,EAA/B,CAPF;AAQE,2BAAehB,SAAS,KAAKT,GAAG,CAACyB,EARnC;AASE,UAAA,OAAO,EAAE;AAAA,mBAAM,MAAI,CAACG,YAAL,CAAkB,IAAlB,EAAwB5B,GAAG,CAACyB,EAA5B,CAAN;AAAA,WATX;AAUE,UAAA,SAAS,EAAE,mBAACf,KAAD;AAAA,mBAAW,MAAI,CAACoD,aAAL,CAAmBpD,KAAnB,EAA0BV,GAAG,CAACyB,EAA9B,CAAX;AAAA;AAVb,UADQ;AAAA,OAAT,CARH,CADF,EAwBG+B,WAAW,GAAG,KAAKG,SAAL,CAAeH,WAAf,EAA4Bb,uBAA5B,EAAqDC,YAArD,CAAH,GAAwE,IAxBtF,CAJJ,CADF;AAkCD;;;EAnMwBmB,kBAAMC,S;;AAsMjCxD,YAAY,CAACyD,SAAb,GAAyB;AACvBjB,EAAAA,OAAO,EAAEkB,sBAAUC,MAAV,CAAiBC,UADH;AAEvBhD,EAAAA,IAAI,EAAE8C,sBAAUG,OAAV,CACJH,sBAAUI,KAAV,CAAgB;AACd7C,IAAAA,EAAE,EAAEyC,sBAAUK,MAAV,CAAiBH,UADP;AAEdhB,IAAAA,KAAK,EAAEc,sBAAUM,MAAV,CAAiBJ,UAFV;AAGdf,IAAAA,QAAQ,EAAEa,sBAAUM,MAHN;AAIdlB,IAAAA,MAAM,EAAEY,sBAAUM,MAJJ;AAKdrF,IAAAA,IAAI,EAAE+E,sBAAUM,MAAV,CAAiBJ,UALT;AAMd9D,IAAAA,mBAAmB,EAAE4D,sBAAUM;AANjB,GAAhB,EAOGJ,UARC,EASJA,UAXqB;AAYvBxB,EAAAA,YAAY,EAAEsB,sBAAUO,IAZD;AAavB9B,EAAAA,uBAAuB,EAAEuB,sBAAUO;AAbZ,CAAzB;;eAgBe,wBAAW7F,MAAX,EAAmB4B,YAAnB,C","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport Tabs from '@material-ui/core/Tabs';\nimport Tab from '@material-ui/core/Tab';\nimport { withStyles } from '@material-ui/core/styles';\nimport { Collapsible, color, PreviewPrompt } from '@pie-lib/pie-toolbox/render-ui';\nimport classNames from 'classnames';\n\nconst styles = (theme) => ({\n passages: {\n flexGrow: 1,\n backgroundColor: color.background(),\n color: color.text(),\n },\n passage: {\n backgroundColor: color.background(),\n color: color.text(),\n padding: theme.spacing.unit * 2,\n },\n passageTitle: {\n fontSize: '1.75rem',\n },\n passageSubtitle: {\n fontSize: '1.5rem',\n },\n passageAuthor: {\n fontSize: '1.25rem',\n },\n passageText: {},\n stickyTabs: {\n background: color.background(),\n position: 'sticky',\n top: 0,\n },\n tab: {\n background: theme.palette.common.white, // replace with color.background() once PD-2801 is DONE\n fontSize: 'inherit',\n color: theme.palette.common.black, // remove when PD-2801 is DONE\n },\n tabButton: {\n background: theme.palette.common.white, // replace with color.background() once PD-2801 is DONE\n },\n teacherInstructions: {\n marginBottom: theme.spacing.unit * 2,\n },\n});\n\nclass StimulusTabs extends React.Component {\n state = {\n activeTab: 0,\n };\n\n handleChange = (event, activeTab) => {\n this.setState(() => ({ activeTab }));\n\n setTimeout(() => {\n const tabChangeEvent = new CustomEvent('pie-ui-passage-tabChanged', {\n detail: { tab: activeTab },\n });\n\n window.dispatchEvent(tabChangeEvent);\n });\n };\n\n handleKeyDown = (event, currentTabId) => {\n const { key } = event;\n const { tabs } = this.props;\n\n let newTabIndex = -1;\n const currentIndex = tabs.findIndex((tab) => tab.id === currentTabId);\n\n switch (key) {\n case 'ArrowRight':\n // Move to the next tab\n newTabIndex = (currentIndex + 1) % tabs.length;\n break;\n case 'ArrowLeft':\n // Move to the previous tab\n newTabIndex = (currentIndex - 1 + tabs.length) % tabs.length;\n break;\n // Commented out ArrowDown and ArrowUp for future vertical tab navigation\n // case 'ArrowDown':\n // // Move to the next tab (for vertical alignment)\n // newTabIndex = (currentIndex + 1) % tabs.length;\n // break;\n // case 'ArrowUp':\n // // Move to the previous tab (for vertical alignment)\n // newTabIndex = (currentIndex - 1 + tabs.length) % tabs.length;\n // break;\n case 'Home':\n // Move to the first tab\n newTabIndex = 0;\n break;\n case 'End':\n // Move to the last tab\n newTabIndex = tabs.length - 1;\n break;\n case 'Enter':\n case ' ':\n // Activate the current tab\n newTabIndex = currentIndex;\n break;\n default:\n break;\n }\n\n if (newTabIndex !== -1) {\n event.preventDefault();\n this.handleChange(event, tabs[newTabIndex].id);\n document.getElementById(`button-${tabs[newTabIndex].id}`).focus();\n }\n };\n\n parsedText = (text = '') => {\n // fix imported audio content for Safari PD-1391\n const div = document.createElement('div');\n div.innerHTML = text.replace(/(<br\\/>\\n)/g, '<br/>');\n\n const audio = div.querySelector('audio');\n\n if (audio) {\n const source = document.createElement('source');\n\n source.setAttribute('type', 'audio/mp3');\n source.setAttribute('src', audio.getAttribute('src'));\n\n audio.removeAttribute('src');\n audio.appendChild(source);\n }\n\n return div.innerHTML;\n };\n\n renderInstructions(showTeacherInstructions, teacherInstructions, disabledTabs = false) {\n if (!showTeacherInstructions || !teacherInstructions) {\n return;\n }\n\n const teacherInstructionsDiv = (\n <PreviewPrompt\n tagName=\"div\"\n className=\"prompt\"\n defaultClassName=\"teacher-instructions\"\n prompt={teacherInstructions}\n />\n );\n\n if (disabledTabs) {\n return teacherInstructionsDiv;\n }\n\n return (\n <Collapsible\n labels={{\n hidden: 'Show Teacher Instructions',\n visible: 'Hide Teacher Instructions',\n }}\n >\n {teacherInstructionsDiv}\n </Collapsible>\n );\n }\n\n renderTab(tab, showTeacherInstructions, disabledTabs) {\n const { classes } = this.props;\n\n return (\n <div\n className={classNames(classes.passage, 'passage')}\n key={tab.id}\n id={`tabpanel-${tab.id}`}\n role=\"tabpanel\"\n aria-labelledby={`button-${tab.id}`}\n >\n {this.renderInstructions(showTeacherInstructions, tab.teacherInstructions, disabledTabs)}\n <h2>\n <div\n className={classNames(classes.passageTitle, 'title')}\n dangerouslySetInnerHTML={{ __html: this.parsedText(tab.title) }}\n />\n <div\n className={classNames(classes.passageSubtitle, 'subtitle')}\n dangerouslySetInnerHTML={{ __html: this.parsedText(tab.subtitle) }}\n />\n </h2>\n <div\n className={classNames(classes.passageAuthor, 'author')}\n dangerouslySetInnerHTML={{ __html: this.parsedText(tab.author) }}\n />\n <div\n key={tab.id}\n className={classNames(classes.passageText, 'text')}\n dangerouslySetInnerHTML={{ __html: this.parsedText(tab.text) }}\n />\n </div>\n );\n }\n\n render() {\n const { classes, tabs, disabledTabs, showTeacherInstructions } = this.props;\n const { activeTab } = this.state;\n\n if (!tabs?.length) {\n return;\n }\n\n const selectedTab = (tabs || []).find((tab) => tab.id === activeTab);\n\n return (\n <div className={classNames(classes.passages, 'passages')}>\n {disabledTabs || tabs.length === 1 ? (\n tabs.map((tab) => this.renderTab(tab, showTeacherInstructions, disabledTabs))\n ) : (\n <>\n <Tabs\n classes={{\n root: classes.stickyTabs,\n flexContainer: classes.tabButton,\n }}\n value={activeTab}\n onChange={this.handleChange}\n >\n {tabs.map((tab) => (\n <Tab\n className={classes.tab}\n key={tab.id}\n id={`button-${tab.id}`}\n label={<span dangerouslySetInnerHTML={{ __html: this.parsedText(tab.title) }} />}\n value={tab.id}\n tabIndex={activeTab === tab.id ? 0 : -1}\n aria-controls={`tabpanel-${tab.id}`}\n aria-selected={activeTab === tab.id}\n onFocus={() => this.handleChange(null, tab.id)}\n onKeyDown={(event) => this.handleKeyDown(event, tab.id)}\n />\n ))}\n </Tabs>\n {selectedTab ? this.renderTab(selectedTab, showTeacherInstructions, disabledTabs) : null}\n </>\n )}\n </div>\n );\n }\n}\n\nStimulusTabs.propTypes = {\n classes: PropTypes.object.isRequired,\n tabs: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.number.isRequired,\n title: PropTypes.string.isRequired,\n subtitle: PropTypes.string,\n author: PropTypes.string,\n text: PropTypes.string.isRequired,\n teacherInstructions: PropTypes.string,\n }).isRequired,\n ).isRequired,\n disabledTabs: PropTypes.bool,\n showTeacherInstructions: PropTypes.bool,\n};\n\nexport default withStyles(styles)(StimulusTabs);\n"],"file":"stimulus-tabs.js"}
|
|
1
|
+
{"version":3,"sources":["../src/stimulus-tabs.jsx"],"names":["styles","theme","passages","flexGrow","backgroundColor","color","background","text","passage","padding","spacing","unit","passageTitle","fontSize","passageSubtitle","passageAuthor","passageText","stickyTabs","position","top","tab","palette","common","white","black","tabButton","teacherInstructions","marginBottom","getContent","html","replace","StimulusTabs","activeTab","event","setState","setTimeout","tabChangeEvent","CustomEvent","detail","window","dispatchEvent","currentTabId","key","tabs","props","newTabIndex","currentIndex","findIndex","id","length","preventDefault","handleChange","document","getElementById","focus","div","createElement","innerHTML","audio","querySelector","source","setAttribute","getAttribute","removeAttribute","appendChild","disabledTabs","teacherInstructionsDiv","hidden","visible","classes","renderInstructions","title","subtitle","__html","parsedText","author","state","selectedTab","find","map","renderTab","root","flexContainer","label","handleKeyDown","React","Component","propTypes","PropTypes","object","isRequired","arrayOf","shape","number","string","bool"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport Tabs from '@material-ui/core/Tabs';\nimport Tab from '@material-ui/core/Tab';\nimport { withStyles } from '@material-ui/core/styles';\nimport { Collapsible, color, PreviewPrompt } from '@pie-lib/pie-toolbox/render-ui';\nimport classNames from 'classnames';\n\nconst styles = (theme) => ({\n passages: {\n flexGrow: 1,\n backgroundColor: color.background(),\n color: color.text(),\n },\n passage: {\n backgroundColor: color.background(),\n color: color.text(),\n padding: theme.spacing.unit * 2,\n },\n passageTitle: {\n fontSize: '1.75rem',\n },\n passageSubtitle: {\n fontSize: '1.5rem',\n },\n passageAuthor: {\n fontSize: '1.25rem',\n },\n passageText: {},\n stickyTabs: {\n background: color.background(),\n position: 'sticky',\n top: 0,\n },\n tab: {\n background: theme.palette.common.white, // replace with color.background() once PD-2801 is DONE\n fontSize: 'inherit',\n color: theme.palette.common.black, // remove when PD-2801 is DONE\n },\n tabButton: {\n background: theme.palette.common.white, // replace with color.background() once PD-2801 is DONE\n },\n teacherInstructions: {\n marginBottom: theme.spacing.unit * 2,\n },\n});\n\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe)([^>]+)>)/gi, '');\n\nclass StimulusTabs extends React.Component {\n state = {\n activeTab: 0,\n };\n\n handleChange = (event, activeTab) => {\n this.setState(() => ({ activeTab }));\n\n setTimeout(() => {\n const tabChangeEvent = new CustomEvent('pie-ui-passage-tabChanged', {\n detail: { tab: activeTab },\n });\n\n window.dispatchEvent(tabChangeEvent);\n });\n };\n\n handleKeyDown = (event, currentTabId) => {\n const { key } = event;\n const { tabs } = this.props;\n\n let newTabIndex = -1;\n const currentIndex = tabs.findIndex((tab) => tab.id === currentTabId);\n\n switch (key) {\n case 'ArrowRight':\n // Move to the next tab\n newTabIndex = (currentIndex + 1) % tabs.length;\n break;\n case 'ArrowLeft':\n // Move to the previous tab\n newTabIndex = (currentIndex - 1 + tabs.length) % tabs.length;\n break;\n // Commented out ArrowDown and ArrowUp for future vertical tab navigation\n // case 'ArrowDown':\n // // Move to the next tab (for vertical alignment)\n // newTabIndex = (currentIndex + 1) % tabs.length;\n // break;\n // case 'ArrowUp':\n // // Move to the previous tab (for vertical alignment)\n // newTabIndex = (currentIndex - 1 + tabs.length) % tabs.length;\n // break;\n case 'Home':\n // Move to the first tab\n newTabIndex = 0;\n break;\n case 'End':\n // Move to the last tab\n newTabIndex = tabs.length - 1;\n break;\n case 'Enter':\n case ' ':\n // Activate the current tab\n newTabIndex = currentIndex;\n break;\n default:\n break;\n }\n\n if (newTabIndex !== -1) {\n event.preventDefault();\n this.handleChange(event, tabs[newTabIndex].id);\n document.getElementById(`button-${tabs[newTabIndex].id}`).focus();\n }\n };\n\n parsedText = (text = '') => {\n // fix imported audio content for Safari PD-1391\n const div = document.createElement('div');\n div.innerHTML = text.replace(/(<br\\/>\\n)/g, '<br/>');\n\n const audio = div.querySelector('audio');\n\n if (audio) {\n const source = document.createElement('source');\n\n source.setAttribute('type', 'audio/mp3');\n source.setAttribute('src', audio.getAttribute('src'));\n\n audio.removeAttribute('src');\n audio.appendChild(source);\n }\n\n return div.innerHTML;\n };\n\n renderInstructions(teacherInstructions, disabledTabs = false) {\n if (!getContent(teacherInstructions)) {\n return;\n }\n\n const teacherInstructionsDiv = (\n <PreviewPrompt\n tagName=\"div\"\n className=\"prompt\"\n defaultClassName=\"teacher-instructions\"\n prompt={teacherInstructions}\n />\n );\n\n if (disabledTabs) {\n return teacherInstructionsDiv;\n }\n\n return (\n <Collapsible\n labels={{\n hidden: 'Show Teacher Instructions',\n visible: 'Hide Teacher Instructions',\n }}\n >\n {teacherInstructionsDiv}\n </Collapsible>\n );\n }\n\n renderTab(tab, disabledTabs) {\n const { classes } = this.props;\n\n return (\n <div\n className={classNames(classes.passage, 'passage')}\n key={tab.id}\n id={`tabpanel-${tab.id}`}\n role=\"tabpanel\"\n aria-labelledby={`button-${tab.id}`}\n >\n {this.renderInstructions(tab.teacherInstructions, disabledTabs)}\n\n {(getContent(tab.title) || getContent(tab.subtitle)) && (\n <h2>\n {getContent(tab.title) && (\n <div\n className={classNames(classes.passageTitle, 'title')}\n dangerouslySetInnerHTML={{ __html: this.parsedText(tab.title) }}\n />\n )}\n {getContent(tab.subtitle) && (\n <div\n className={classNames(classes.passageSubtitle, 'subtitle')}\n dangerouslySetInnerHTML={{ __html: this.parsedText(tab.subtitle) }}\n />\n )}\n </h2>\n )}\n\n {getContent(tab.author) && (\n <div\n className={classNames(classes.passageAuthor, 'author')}\n dangerouslySetInnerHTML={{ __html: this.parsedText(tab.author) }}\n />\n )}\n\n {getContent(tab.text) && (\n <div\n key={tab.id}\n className={classNames(classes.passageText, 'text')}\n dangerouslySetInnerHTML={{ __html: this.parsedText(tab.text) }}\n />\n )}\n </div>\n );\n }\n\n render() {\n const { classes, tabs, disabledTabs } = this.props;\n const { activeTab } = this.state;\n\n if (!tabs?.length) {\n return;\n }\n\n const selectedTab = (tabs || []).find((tab) => tab.id === activeTab);\n\n return (\n <div className={classNames(classes.passages, 'passages')}>\n {disabledTabs || tabs.length === 1 ? (\n tabs.map((tab) => this.renderTab(tab, disabledTabs))\n ) : (\n <>\n <Tabs\n classes={{\n root: classes.stickyTabs,\n flexContainer: classes.tabButton,\n }}\n value={activeTab}\n onChange={this.handleChange}\n >\n {tabs.map((tab) => (\n <Tab\n className={classes.tab}\n key={tab.id}\n id={`button-${tab.id}`}\n label={<span dangerouslySetInnerHTML={{ __html: this.parsedText(tab.label) }} />}\n value={tab.id}\n tabIndex={activeTab === tab.id ? 0 : -1}\n aria-controls={`tabpanel-${tab.id}`}\n aria-selected={activeTab === tab.id}\n onFocus={() => this.handleChange(null, tab.id)}\n onKeyDown={(event) => this.handleKeyDown(event, tab.id)}\n />\n ))}\n </Tabs>\n {selectedTab ? this.renderTab(selectedTab, disabledTabs) : null}\n </>\n )}\n </div>\n );\n }\n}\n\nStimulusTabs.propTypes = {\n classes: PropTypes.object.isRequired,\n tabs: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.number.isRequired,\n label: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired,\n subtitle: PropTypes.string,\n author: PropTypes.string,\n text: PropTypes.string.isRequired,\n teacherInstructions: PropTypes.string,\n }).isRequired,\n ).isRequired,\n disabledTabs: PropTypes.bool,\n};\n\nexport default withStyles(styles)(StimulusTabs);\n"],"file":"stimulus-tabs.js"}
|
package/module/controller.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
var defaults = {
|
|
2
|
-
teacherInstructionsEnabled:
|
|
2
|
+
teacherInstructionsEnabled: true,
|
|
3
3
|
titleEnabled: true,
|
|
4
4
|
subtitleEnabled: true,
|
|
5
5
|
textEnabled: true,
|
|
@@ -11,7 +11,7 @@ var defaults = {
|
|
|
11
11
|
subtitle: '',
|
|
12
12
|
author: '',
|
|
13
13
|
text: '',
|
|
14
|
-
}
|
|
14
|
+
},
|
|
15
15
|
],
|
|
16
16
|
};
|
|
17
17
|
|
|
@@ -19,17 +19,21 @@ const getContent = (html) => (html || '').replace(/(<(?!img|iframe)([^>]+)>)/gi,
|
|
|
19
19
|
|
|
20
20
|
function createDefaultModel(model = {}) {
|
|
21
21
|
return new Promise((resolve) => {
|
|
22
|
-
resolve({
|
|
23
|
-
...defaults,
|
|
24
|
-
...model,
|
|
25
|
-
});
|
|
22
|
+
resolve({ ...defaults, ...model });
|
|
26
23
|
});
|
|
27
24
|
}
|
|
28
25
|
|
|
29
|
-
const normalize = (question) => ({
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
26
|
+
const normalize = (question) => ({ ...defaults, ...question });
|
|
27
|
+
|
|
28
|
+
const normalizeTeacherInstructions = (instructions, env) => {
|
|
29
|
+
const { role, mode } = env;
|
|
30
|
+
|
|
31
|
+
if (role === 'instructor' && (mode === 'view' || mode === 'evaluate')) {
|
|
32
|
+
return instructions || '';
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return '';
|
|
36
|
+
};
|
|
33
37
|
|
|
34
38
|
/**
|
|
35
39
|
*
|
|
@@ -38,21 +42,23 @@ const normalize = (question) => ({
|
|
|
38
42
|
* @param {*} env
|
|
39
43
|
*/
|
|
40
44
|
async function model(question, session, env) {
|
|
41
|
-
const { role, mode } = env || {};
|
|
42
45
|
const normalizedQuestion = normalize(question);
|
|
43
46
|
|
|
44
|
-
const
|
|
47
|
+
const normalizedPassages = normalizedQuestion.passages.map((passage, index) => ({
|
|
48
|
+
teacherInstructions: normalizedQuestion.teacherInstructionsEnabled
|
|
49
|
+
? normalizeTeacherInstructions(passage.teacherInstructions, env)
|
|
50
|
+
: '',
|
|
51
|
+
label: passage.titles || `Passage ${index + 1}`,
|
|
52
|
+
title: normalizedQuestion.titleEnabled ? passage.title || '' : '',
|
|
53
|
+
subtitle: normalizedQuestion.subtitleEnabled ? passage.subtitle || '' : '',
|
|
54
|
+
author: normalizedQuestion.authorEnabled ? passage.author || '' : '',
|
|
55
|
+
text: normalizedQuestion.textEnabled ? passage.text || '' : '',
|
|
56
|
+
}));
|
|
57
|
+
|
|
58
|
+
return {
|
|
45
59
|
...normalizedQuestion,
|
|
46
|
-
|
|
60
|
+
passages: normalizedPassages,
|
|
47
61
|
};
|
|
48
|
-
|
|
49
|
-
if (role === 'instructor' && (mode === 'view' || mode === 'evaluate')) {
|
|
50
|
-
if (normalizedQuestion.teacherInstructionsEnabled) {
|
|
51
|
-
out.teacherInstructions = normalizedQuestion.teacherInstructions;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
return out;
|
|
56
62
|
}
|
|
57
63
|
|
|
58
64
|
const validate = (model = {}, config = {}) => {
|
package/module/element.js
CHANGED
|
@@ -8641,6 +8641,7 @@ const styles = theme => ({
|
|
|
8641
8641
|
marginBottom: theme.spacing.unit * 2
|
|
8642
8642
|
}
|
|
8643
8643
|
});
|
|
8644
|
+
const getContent = html => (html || '').replace(/(<(?!img|iframe)([^>]+)>)/gi, '');
|
|
8644
8645
|
class StimulusTabs extends React$1.Component {
|
|
8645
8646
|
constructor(...args) {
|
|
8646
8647
|
super(...args);
|
|
@@ -8715,8 +8716,8 @@ class StimulusTabs extends React$1.Component {
|
|
|
8715
8716
|
return div.innerHTML;
|
|
8716
8717
|
};
|
|
8717
8718
|
}
|
|
8718
|
-
renderInstructions(
|
|
8719
|
-
if (!
|
|
8719
|
+
renderInstructions(teacherInstructions, disabledTabs = false) {
|
|
8720
|
+
if (!getContent(teacherInstructions)) {
|
|
8720
8721
|
return;
|
|
8721
8722
|
}
|
|
8722
8723
|
const teacherInstructionsDiv = React$1.createElement(PreviewPrompt, {
|
|
@@ -8727,7 +8728,7 @@ class StimulusTabs extends React$1.Component {
|
|
|
8727
8728
|
__self: this,
|
|
8728
8729
|
__source: {
|
|
8729
8730
|
fileName: _jsxFileName,
|
|
8730
|
-
lineNumber:
|
|
8731
|
+
lineNumber: 142
|
|
8731
8732
|
}
|
|
8732
8733
|
});
|
|
8733
8734
|
if (disabledTabs) {
|
|
@@ -8741,11 +8742,11 @@ class StimulusTabs extends React$1.Component {
|
|
|
8741
8742
|
__self: this,
|
|
8742
8743
|
__source: {
|
|
8743
8744
|
fileName: _jsxFileName,
|
|
8744
|
-
lineNumber:
|
|
8745
|
+
lineNumber: 155
|
|
8745
8746
|
}
|
|
8746
8747
|
}, teacherInstructionsDiv);
|
|
8747
8748
|
}
|
|
8748
|
-
renderTab(tab,
|
|
8749
|
+
renderTab(tab, disabledTabs) {
|
|
8749
8750
|
const {classes} = this.props;
|
|
8750
8751
|
return React$1.createElement('div', {
|
|
8751
8752
|
className: classNames(classes.passage, 'passage'),
|
|
@@ -8756,15 +8757,15 @@ class StimulusTabs extends React$1.Component {
|
|
|
8756
8757
|
__self: this,
|
|
8757
8758
|
__source: {
|
|
8758
8759
|
fileName: _jsxFileName,
|
|
8759
|
-
lineNumber:
|
|
8760
|
+
lineNumber: 170
|
|
8760
8761
|
}
|
|
8761
|
-
}, this.renderInstructions(
|
|
8762
|
+
}, this.renderInstructions(tab.teacherInstructions, disabledTabs), (getContent(tab.title) || getContent(tab.subtitle)) && React$1.createElement('h2', {
|
|
8762
8763
|
__self: this,
|
|
8763
8764
|
__source: {
|
|
8764
8765
|
fileName: _jsxFileName,
|
|
8765
|
-
lineNumber:
|
|
8766
|
+
lineNumber: 180
|
|
8766
8767
|
}
|
|
8767
|
-
}, React$1.createElement('div', {
|
|
8768
|
+
}, getContent(tab.title) && React$1.createElement('div', {
|
|
8768
8769
|
className: classNames(classes.passageTitle, 'title'),
|
|
8769
8770
|
dangerouslySetInnerHTML: {
|
|
8770
8771
|
__html: this.parsedText(tab.title)
|
|
@@ -8772,9 +8773,9 @@ class StimulusTabs extends React$1.Component {
|
|
|
8772
8773
|
__self: this,
|
|
8773
8774
|
__source: {
|
|
8774
8775
|
fileName: _jsxFileName,
|
|
8775
|
-
lineNumber:
|
|
8776
|
+
lineNumber: 182
|
|
8776
8777
|
}
|
|
8777
|
-
}), React$1.createElement('div', {
|
|
8778
|
+
}), getContent(tab.subtitle) && React$1.createElement('div', {
|
|
8778
8779
|
className: classNames(classes.passageSubtitle, 'subtitle'),
|
|
8779
8780
|
dangerouslySetInnerHTML: {
|
|
8780
8781
|
__html: this.parsedText(tab.subtitle)
|
|
@@ -8782,9 +8783,9 @@ class StimulusTabs extends React$1.Component {
|
|
|
8782
8783
|
__self: this,
|
|
8783
8784
|
__source: {
|
|
8784
8785
|
fileName: _jsxFileName,
|
|
8785
|
-
lineNumber:
|
|
8786
|
+
lineNumber: 188
|
|
8786
8787
|
}
|
|
8787
|
-
})), React$1.createElement('div', {
|
|
8788
|
+
})), getContent(tab.author) && React$1.createElement('div', {
|
|
8788
8789
|
className: classNames(classes.passageAuthor, 'author'),
|
|
8789
8790
|
dangerouslySetInnerHTML: {
|
|
8790
8791
|
__html: this.parsedText(tab.author)
|
|
@@ -8792,9 +8793,9 @@ class StimulusTabs extends React$1.Component {
|
|
|
8792
8793
|
__self: this,
|
|
8793
8794
|
__source: {
|
|
8794
8795
|
fileName: _jsxFileName,
|
|
8795
|
-
lineNumber:
|
|
8796
|
+
lineNumber: 197
|
|
8796
8797
|
}
|
|
8797
|
-
}), React$1.createElement('div', {
|
|
8798
|
+
}), getContent(tab.text) && React$1.createElement('div', {
|
|
8798
8799
|
key: tab.id,
|
|
8799
8800
|
className: classNames(classes.passageText, 'text'),
|
|
8800
8801
|
dangerouslySetInnerHTML: {
|
|
@@ -8803,12 +8804,12 @@ class StimulusTabs extends React$1.Component {
|
|
|
8803
8804
|
__self: this,
|
|
8804
8805
|
__source: {
|
|
8805
8806
|
fileName: _jsxFileName,
|
|
8806
|
-
lineNumber:
|
|
8807
|
+
lineNumber: 204
|
|
8807
8808
|
}
|
|
8808
8809
|
}));
|
|
8809
8810
|
}
|
|
8810
8811
|
render() {
|
|
8811
|
-
const {classes, tabs, disabledTabs
|
|
8812
|
+
const {classes, tabs, disabledTabs} = this.props;
|
|
8812
8813
|
const {activeTab} = this.state;
|
|
8813
8814
|
if (!_optionalChain([tabs, 'optionalAccess', _ => _.length])) {
|
|
8814
8815
|
return;
|
|
@@ -8819,9 +8820,9 @@ class StimulusTabs extends React$1.Component {
|
|
|
8819
8820
|
__self: this,
|
|
8820
8821
|
__source: {
|
|
8821
8822
|
fileName: _jsxFileName,
|
|
8822
|
-
lineNumber:
|
|
8823
|
+
lineNumber: 225
|
|
8823
8824
|
}
|
|
8824
|
-
}, disabledTabs || tabs.length === 1 ? tabs.map(tab => this.renderTab(tab,
|
|
8825
|
+
}, disabledTabs || tabs.length === 1 ? tabs.map(tab => this.renderTab(tab, disabledTabs)) : React$1.createElement(React$1.Fragment, null, React$1.createElement(Tabs, {
|
|
8825
8826
|
classes: {
|
|
8826
8827
|
root: classes.stickyTabs,
|
|
8827
8828
|
flexContainer: classes.tabButton
|
|
@@ -8831,7 +8832,7 @@ class StimulusTabs extends React$1.Component {
|
|
|
8831
8832
|
__self: this,
|
|
8832
8833
|
__source: {
|
|
8833
8834
|
fileName: _jsxFileName,
|
|
8834
|
-
lineNumber:
|
|
8835
|
+
lineNumber: 230
|
|
8835
8836
|
}
|
|
8836
8837
|
}, tabs.map(tab => React$1.createElement(Tab, {
|
|
8837
8838
|
className: classes.tab,
|
|
@@ -8839,12 +8840,12 @@ class StimulusTabs extends React$1.Component {
|
|
|
8839
8840
|
id: `button-${tab.id}`,
|
|
8840
8841
|
label: React$1.createElement('span', {
|
|
8841
8842
|
dangerouslySetInnerHTML: {
|
|
8842
|
-
__html: this.parsedText(tab.
|
|
8843
|
+
__html: this.parsedText(tab.label)
|
|
8843
8844
|
},
|
|
8844
8845
|
__self: this,
|
|
8845
8846
|
__source: {
|
|
8846
8847
|
fileName: _jsxFileName,
|
|
8847
|
-
lineNumber:
|
|
8848
|
+
lineNumber: 243
|
|
8848
8849
|
}
|
|
8849
8850
|
}),
|
|
8850
8851
|
value: tab.id,
|
|
@@ -8856,23 +8857,23 @@ class StimulusTabs extends React$1.Component {
|
|
|
8856
8857
|
__self: this,
|
|
8857
8858
|
__source: {
|
|
8858
8859
|
fileName: _jsxFileName,
|
|
8859
|
-
lineNumber:
|
|
8860
|
+
lineNumber: 239
|
|
8860
8861
|
}
|
|
8861
|
-
}))), selectedTab ? this.renderTab(selectedTab,
|
|
8862
|
+
}))), selectedTab ? this.renderTab(selectedTab, disabledTabs) : null));
|
|
8862
8863
|
}
|
|
8863
8864
|
}
|
|
8864
8865
|
StimulusTabs.propTypes = {
|
|
8865
8866
|
classes: PropTypes.object.isRequired,
|
|
8866
8867
|
tabs: PropTypes.arrayOf(PropTypes.shape({
|
|
8867
8868
|
id: PropTypes.number.isRequired,
|
|
8869
|
+
label: PropTypes.string.isRequired,
|
|
8868
8870
|
title: PropTypes.string.isRequired,
|
|
8869
8871
|
subtitle: PropTypes.string,
|
|
8870
8872
|
author: PropTypes.string,
|
|
8871
8873
|
text: PropTypes.string.isRequired,
|
|
8872
8874
|
teacherInstructions: PropTypes.string
|
|
8873
8875
|
}).isRequired).isRequired,
|
|
8874
|
-
disabledTabs: PropTypes.bool
|
|
8875
|
-
showTeacherInstructions: PropTypes.bool
|
|
8876
|
+
disabledTabs: PropTypes.bool
|
|
8876
8877
|
};
|
|
8877
8878
|
var StimulusTabs$1 = styles$1.withStyles(styles)(StimulusTabs);
|
|
8878
8879
|
const {renderMath: renderMath} = _dll_pie_lib__pie_toolbox_math_rendering_accessible;
|
|
@@ -8906,19 +8907,14 @@ class PiePassage extends HTMLElement {
|
|
|
8906
8907
|
this._render();
|
|
8907
8908
|
}
|
|
8908
8909
|
_render() {
|
|
8909
|
-
const {passages = []
|
|
8910
|
+
const {passages = []} = this._model;
|
|
8910
8911
|
if (this._model.passages.length > 0) {
|
|
8911
8912
|
const passagesTabs = passages.map((passage, index) => ({
|
|
8912
8913
|
id: index,
|
|
8913
|
-
|
|
8914
|
-
subtitle: passage.subtitle,
|
|
8915
|
-
author: passage.author,
|
|
8916
|
-
text: passage.text,
|
|
8917
|
-
teacherInstructions: passage.teacherInstructions || ''
|
|
8914
|
+
...passage
|
|
8918
8915
|
}));
|
|
8919
8916
|
const elem = React.createElement(StimulusTabs$1, {
|
|
8920
|
-
tabs: passagesTabs
|
|
8921
|
-
showTeacherInstructions
|
|
8917
|
+
tabs: passagesTabs
|
|
8922
8918
|
});
|
|
8923
8919
|
ReactDOM.render(elem, this, () => renderMath(this));
|
|
8924
8920
|
}
|
package/module/index.html
CHANGED
package/module/manifest.json
CHANGED
package/module/print.html
CHANGED
package/module/print.js
CHANGED
|
@@ -8604,6 +8604,7 @@ const styles = theme => ({
|
|
|
8604
8604
|
marginBottom: theme.spacing.unit * 2
|
|
8605
8605
|
}
|
|
8606
8606
|
});
|
|
8607
|
+
const getContent = html => (html || '').replace(/(<(?!img|iframe)([^>]+)>)/gi, '');
|
|
8607
8608
|
class StimulusTabs extends React$1.Component {
|
|
8608
8609
|
constructor(...args) {
|
|
8609
8610
|
super(...args);
|
|
@@ -8678,8 +8679,8 @@ class StimulusTabs extends React$1.Component {
|
|
|
8678
8679
|
return div.innerHTML;
|
|
8679
8680
|
};
|
|
8680
8681
|
}
|
|
8681
|
-
renderInstructions(
|
|
8682
|
-
if (!
|
|
8682
|
+
renderInstructions(teacherInstructions, disabledTabs = false) {
|
|
8683
|
+
if (!getContent(teacherInstructions)) {
|
|
8683
8684
|
return;
|
|
8684
8685
|
}
|
|
8685
8686
|
const teacherInstructionsDiv = React$1.createElement(PreviewPrompt, {
|
|
@@ -8690,7 +8691,7 @@ class StimulusTabs extends React$1.Component {
|
|
|
8690
8691
|
__self: this,
|
|
8691
8692
|
__source: {
|
|
8692
8693
|
fileName: _jsxFileName,
|
|
8693
|
-
lineNumber:
|
|
8694
|
+
lineNumber: 142
|
|
8694
8695
|
}
|
|
8695
8696
|
});
|
|
8696
8697
|
if (disabledTabs) {
|
|
@@ -8704,11 +8705,11 @@ class StimulusTabs extends React$1.Component {
|
|
|
8704
8705
|
__self: this,
|
|
8705
8706
|
__source: {
|
|
8706
8707
|
fileName: _jsxFileName,
|
|
8707
|
-
lineNumber:
|
|
8708
|
+
lineNumber: 155
|
|
8708
8709
|
}
|
|
8709
8710
|
}, teacherInstructionsDiv);
|
|
8710
8711
|
}
|
|
8711
|
-
renderTab(tab,
|
|
8712
|
+
renderTab(tab, disabledTabs) {
|
|
8712
8713
|
const {classes} = this.props;
|
|
8713
8714
|
return React$1.createElement('div', {
|
|
8714
8715
|
className: classNames(classes.passage, 'passage'),
|
|
@@ -8719,15 +8720,15 @@ class StimulusTabs extends React$1.Component {
|
|
|
8719
8720
|
__self: this,
|
|
8720
8721
|
__source: {
|
|
8721
8722
|
fileName: _jsxFileName,
|
|
8722
|
-
lineNumber:
|
|
8723
|
+
lineNumber: 170
|
|
8723
8724
|
}
|
|
8724
|
-
}, this.renderInstructions(
|
|
8725
|
+
}, this.renderInstructions(tab.teacherInstructions, disabledTabs), (getContent(tab.title) || getContent(tab.subtitle)) && React$1.createElement('h2', {
|
|
8725
8726
|
__self: this,
|
|
8726
8727
|
__source: {
|
|
8727
8728
|
fileName: _jsxFileName,
|
|
8728
|
-
lineNumber:
|
|
8729
|
+
lineNumber: 180
|
|
8729
8730
|
}
|
|
8730
|
-
}, React$1.createElement('div', {
|
|
8731
|
+
}, getContent(tab.title) && React$1.createElement('div', {
|
|
8731
8732
|
className: classNames(classes.passageTitle, 'title'),
|
|
8732
8733
|
dangerouslySetInnerHTML: {
|
|
8733
8734
|
__html: this.parsedText(tab.title)
|
|
@@ -8735,9 +8736,9 @@ class StimulusTabs extends React$1.Component {
|
|
|
8735
8736
|
__self: this,
|
|
8736
8737
|
__source: {
|
|
8737
8738
|
fileName: _jsxFileName,
|
|
8738
|
-
lineNumber:
|
|
8739
|
+
lineNumber: 182
|
|
8739
8740
|
}
|
|
8740
|
-
}), React$1.createElement('div', {
|
|
8741
|
+
}), getContent(tab.subtitle) && React$1.createElement('div', {
|
|
8741
8742
|
className: classNames(classes.passageSubtitle, 'subtitle'),
|
|
8742
8743
|
dangerouslySetInnerHTML: {
|
|
8743
8744
|
__html: this.parsedText(tab.subtitle)
|
|
@@ -8745,9 +8746,9 @@ class StimulusTabs extends React$1.Component {
|
|
|
8745
8746
|
__self: this,
|
|
8746
8747
|
__source: {
|
|
8747
8748
|
fileName: _jsxFileName,
|
|
8748
|
-
lineNumber:
|
|
8749
|
+
lineNumber: 188
|
|
8749
8750
|
}
|
|
8750
|
-
})), React$1.createElement('div', {
|
|
8751
|
+
})), getContent(tab.author) && React$1.createElement('div', {
|
|
8751
8752
|
className: classNames(classes.passageAuthor, 'author'),
|
|
8752
8753
|
dangerouslySetInnerHTML: {
|
|
8753
8754
|
__html: this.parsedText(tab.author)
|
|
@@ -8755,9 +8756,9 @@ class StimulusTabs extends React$1.Component {
|
|
|
8755
8756
|
__self: this,
|
|
8756
8757
|
__source: {
|
|
8757
8758
|
fileName: _jsxFileName,
|
|
8758
|
-
lineNumber:
|
|
8759
|
+
lineNumber: 197
|
|
8759
8760
|
}
|
|
8760
|
-
}), React$1.createElement('div', {
|
|
8761
|
+
}), getContent(tab.text) && React$1.createElement('div', {
|
|
8761
8762
|
key: tab.id,
|
|
8762
8763
|
className: classNames(classes.passageText, 'text'),
|
|
8763
8764
|
dangerouslySetInnerHTML: {
|
|
@@ -8766,12 +8767,12 @@ class StimulusTabs extends React$1.Component {
|
|
|
8766
8767
|
__self: this,
|
|
8767
8768
|
__source: {
|
|
8768
8769
|
fileName: _jsxFileName,
|
|
8769
|
-
lineNumber:
|
|
8770
|
+
lineNumber: 204
|
|
8770
8771
|
}
|
|
8771
8772
|
}));
|
|
8772
8773
|
}
|
|
8773
8774
|
render() {
|
|
8774
|
-
const {classes, tabs, disabledTabs
|
|
8775
|
+
const {classes, tabs, disabledTabs} = this.props;
|
|
8775
8776
|
const {activeTab} = this.state;
|
|
8776
8777
|
if (!_optionalChain([tabs, 'optionalAccess', _ => _.length])) {
|
|
8777
8778
|
return;
|
|
@@ -8782,9 +8783,9 @@ class StimulusTabs extends React$1.Component {
|
|
|
8782
8783
|
__self: this,
|
|
8783
8784
|
__source: {
|
|
8784
8785
|
fileName: _jsxFileName,
|
|
8785
|
-
lineNumber:
|
|
8786
|
+
lineNumber: 225
|
|
8786
8787
|
}
|
|
8787
|
-
}, disabledTabs || tabs.length === 1 ? tabs.map(tab => this.renderTab(tab,
|
|
8788
|
+
}, disabledTabs || tabs.length === 1 ? tabs.map(tab => this.renderTab(tab, disabledTabs)) : React$1.createElement(React$1.Fragment, null, React$1.createElement(Tabs, {
|
|
8788
8789
|
classes: {
|
|
8789
8790
|
root: classes.stickyTabs,
|
|
8790
8791
|
flexContainer: classes.tabButton
|
|
@@ -8794,7 +8795,7 @@ class StimulusTabs extends React$1.Component {
|
|
|
8794
8795
|
__self: this,
|
|
8795
8796
|
__source: {
|
|
8796
8797
|
fileName: _jsxFileName,
|
|
8797
|
-
lineNumber:
|
|
8798
|
+
lineNumber: 230
|
|
8798
8799
|
}
|
|
8799
8800
|
}, tabs.map(tab => React$1.createElement(Tab, {
|
|
8800
8801
|
className: classes.tab,
|
|
@@ -8802,12 +8803,12 @@ class StimulusTabs extends React$1.Component {
|
|
|
8802
8803
|
id: `button-${tab.id}`,
|
|
8803
8804
|
label: React$1.createElement('span', {
|
|
8804
8805
|
dangerouslySetInnerHTML: {
|
|
8805
|
-
__html: this.parsedText(tab.
|
|
8806
|
+
__html: this.parsedText(tab.label)
|
|
8806
8807
|
},
|
|
8807
8808
|
__self: this,
|
|
8808
8809
|
__source: {
|
|
8809
8810
|
fileName: _jsxFileName,
|
|
8810
|
-
lineNumber:
|
|
8811
|
+
lineNumber: 243
|
|
8811
8812
|
}
|
|
8812
8813
|
}),
|
|
8813
8814
|
value: tab.id,
|
|
@@ -8819,23 +8820,23 @@ class StimulusTabs extends React$1.Component {
|
|
|
8819
8820
|
__self: this,
|
|
8820
8821
|
__source: {
|
|
8821
8822
|
fileName: _jsxFileName,
|
|
8822
|
-
lineNumber:
|
|
8823
|
+
lineNumber: 239
|
|
8823
8824
|
}
|
|
8824
|
-
}))), selectedTab ? this.renderTab(selectedTab,
|
|
8825
|
+
}))), selectedTab ? this.renderTab(selectedTab, disabledTabs) : null));
|
|
8825
8826
|
}
|
|
8826
8827
|
}
|
|
8827
8828
|
StimulusTabs.propTypes = {
|
|
8828
8829
|
classes: PropTypes.object.isRequired,
|
|
8829
8830
|
tabs: PropTypes.arrayOf(PropTypes.shape({
|
|
8830
8831
|
id: PropTypes.number.isRequired,
|
|
8832
|
+
label: PropTypes.string.isRequired,
|
|
8831
8833
|
title: PropTypes.string.isRequired,
|
|
8832
8834
|
subtitle: PropTypes.string,
|
|
8833
8835
|
author: PropTypes.string,
|
|
8834
8836
|
text: PropTypes.string.isRequired,
|
|
8835
8837
|
teacherInstructions: PropTypes.string
|
|
8836
8838
|
}).isRequired).isRequired,
|
|
8837
|
-
disabledTabs: PropTypes.bool
|
|
8838
|
-
showTeacherInstructions: PropTypes.bool
|
|
8839
|
+
disabledTabs: PropTypes.bool
|
|
8839
8840
|
};
|
|
8840
8841
|
var StimulusTabs$1 = styles$1.withStyles(styles)(StimulusTabs);
|
|
8841
8842
|
const React = _dll_react;
|
|
@@ -8847,11 +8848,12 @@ const preparePrintPassage = (model, opts) => {
|
|
|
8847
8848
|
const isInstructor = opts.role === 'instructor';
|
|
8848
8849
|
return model.passages.map((passage, index) => ({
|
|
8849
8850
|
id: index,
|
|
8850
|
-
|
|
8851
|
-
|
|
8852
|
-
|
|
8853
|
-
|
|
8854
|
-
|
|
8851
|
+
teacherInstructions: model.teacherInstructionsEnabled ? isInstructor && passage.teacherInstructions || '' : '',
|
|
8852
|
+
label: passage.title || `Passage ${index + 1}`,
|
|
8853
|
+
title: model.titleEnabled ? passage.title || '' : '',
|
|
8854
|
+
author: model.authorEnabled ? passage.author || '' : '',
|
|
8855
|
+
subtitle: model.subtitleEnabled ? passage.subtitle || '' : '',
|
|
8856
|
+
text: model.textEnabled ? passage.text || '' : ''
|
|
8855
8857
|
}));
|
|
8856
8858
|
};
|
|
8857
8859
|
class PassagePrint extends HTMLElement {
|
|
@@ -8865,9 +8867,8 @@ class PassagePrint extends HTMLElement {
|
|
|
8865
8867
|
if (this._model.passages && this._model.passages.length > 0) {
|
|
8866
8868
|
const printPassage = preparePrintPassage(this._model, this._options);
|
|
8867
8869
|
const element = React.createElement(StimulusTabs$1, {
|
|
8868
|
-
tabs: printPassage,
|
|
8869
8870
|
disabledTabs: true,
|
|
8870
|
-
|
|
8871
|
+
tabs: printPassage
|
|
8871
8872
|
});
|
|
8872
8873
|
ReactDOM.render(element, this);
|
|
8873
8874
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-element/passage",
|
|
3
|
-
"version": "2.21.
|
|
3
|
+
"version": "2.21.5-next.4+706f474da",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"react": "^16.8.1",
|
|
18
18
|
"react-dom": "^16.8.1"
|
|
19
19
|
},
|
|
20
|
-
"gitHead": "
|
|
20
|
+
"gitHead": "706f474da3d9befb5e3633180c35672b02c3b685",
|
|
21
21
|
"scripts": {
|
|
22
22
|
"postpublish": "../../scripts/postpublish"
|
|
23
23
|
},
|