@pie-element/passage 2.4.1-next.42 → 2.4.1-next.45
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/controller/lib/index.js +55 -0
- package/controller/lib/index.js.map +1 -0
- package/lib/index.js +101 -0
- package/lib/index.js.map +1 -0
- package/lib/print.js +108 -0
- package/lib/print.js.map +1 -0
- package/lib/stimulus-tabs.js +324 -0
- package/lib/stimulus-tabs.js.map +1 -0
- package/module/controller.js +2807 -0
- package/module/demo.js +58 -0
- package/module/element.js +8945 -0
- package/module/index.html +21 -0
- package/module/manifest.json +14 -0
- package/module/print-demo.js +93 -0
- package/module/print.html +18 -0
- package/module/print.js +8916 -0
- package/package.json +3 -3
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.model = model;
|
|
9
|
+
|
|
10
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
11
|
+
|
|
12
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
13
|
+
|
|
14
|
+
var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
*
|
|
18
|
+
* @param {*} question
|
|
19
|
+
* @param {*} session
|
|
20
|
+
* @param {*} env
|
|
21
|
+
*/
|
|
22
|
+
function model(_x, _x2, _x3) {
|
|
23
|
+
return _model.apply(this, arguments);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function _model() {
|
|
27
|
+
_model = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(question, session, env) {
|
|
28
|
+
var _ref, role, mode, response;
|
|
29
|
+
|
|
30
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
31
|
+
while (1) {
|
|
32
|
+
switch (_context.prev = _context.next) {
|
|
33
|
+
case 0:
|
|
34
|
+
_ref = env || {}, role = _ref.role, mode = _ref.mode;
|
|
35
|
+
response = (0, _cloneDeep["default"])(question);
|
|
36
|
+
response.showTeacherInstructions = role === 'instructor' && (mode === 'view' || mode === 'evaluate'); // if we don't show the teacher instructions don't pass them on
|
|
37
|
+
|
|
38
|
+
if (!response.showTeacherInstructions) {
|
|
39
|
+
response.passages.forEach(function (passage) {
|
|
40
|
+
delete passage.teacherInstructions;
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return _context.abrupt("return", response);
|
|
45
|
+
|
|
46
|
+
case 5:
|
|
47
|
+
case "end":
|
|
48
|
+
return _context.stop();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}, _callee);
|
|
52
|
+
}));
|
|
53
|
+
return _model.apply(this, arguments);
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["model","question","session","env","role","mode","response","showTeacherInstructions","passages","forEach","passage","teacherInstructions"],"mappings":";;;;;;;;;;;;;AAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;SACsBA,K;;;;;yFAAf,iBAAqBC,QAArB,EAA+BC,OAA/B,EAAwCC,GAAxC;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,mBACkBA,GAAG,IAAI,EADzB,EACGC,IADH,QACGA,IADH,EACSC,IADT,QACSA,IADT;AAECC,YAAAA,QAFD,GAEY,2BAAUL,QAAV,CAFZ;AAILK,YAAAA,QAAQ,CAACC,uBAAT,GAAmCH,IAAI,KAAK,YAAT,KAA0BC,IAAI,KAAK,MAAT,IAAmBA,IAAI,KAAK,UAAtD,CAAnC,CAJK,CAML;;AACA,gBAAI,CAACC,QAAQ,CAACC,uBAAd,EAAuC;AACrCD,cAAAA,QAAQ,CAACE,QAAT,CAAkBC,OAAlB,CAA0B,UAACC,OAAD,EAAa;AACrC,uBAAOA,OAAO,CAACC,mBAAf;AACD,eAFD;AAGD;;AAXI,6CAaEL,QAbF;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G","sourcesContent":["import cloneDeep from 'lodash/cloneDeep';\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n */\nexport async function model(question, session, env) {\n const { role, mode } = env || {};\n const response = cloneDeep(question);\n\n response.showTeacherInstructions = role === 'instructor' && (mode === 'view' || mode === 'evaluate');\n\n // if we don't show the teacher instructions don't pass them on\n if (!response.showTeacherInstructions) {\n response.passages.forEach((passage) => {\n delete passage.teacherInstructions;\n });\n }\n\n return response;\n}\n"],"file":"index.js"}
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
|
|
10
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
+
|
|
12
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
+
|
|
14
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
15
|
+
|
|
16
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
17
|
+
|
|
18
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
19
|
+
|
|
20
|
+
var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper"));
|
|
21
|
+
|
|
22
|
+
var _piePlayerEvents = require("@pie-framework/pie-player-events");
|
|
23
|
+
|
|
24
|
+
var _react = _interopRequireDefault(require("react"));
|
|
25
|
+
|
|
26
|
+
var _reactDom = _interopRequireDefault(require("react-dom"));
|
|
27
|
+
|
|
28
|
+
var _stimulusTabs = _interopRequireDefault(require("./stimulus-tabs"));
|
|
29
|
+
|
|
30
|
+
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); }; }
|
|
31
|
+
|
|
32
|
+
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; } }
|
|
33
|
+
|
|
34
|
+
var PiePassage = /*#__PURE__*/function (_HTMLElement) {
|
|
35
|
+
(0, _inherits2["default"])(PiePassage, _HTMLElement);
|
|
36
|
+
|
|
37
|
+
var _super = _createSuper(PiePassage);
|
|
38
|
+
|
|
39
|
+
function PiePassage() {
|
|
40
|
+
var _this;
|
|
41
|
+
|
|
42
|
+
(0, _classCallCheck2["default"])(this, PiePassage);
|
|
43
|
+
_this = _super.call(this);
|
|
44
|
+
_this._model = {
|
|
45
|
+
passages: []
|
|
46
|
+
};
|
|
47
|
+
_this._session = null;
|
|
48
|
+
return _this;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
(0, _createClass2["default"])(PiePassage, [{
|
|
52
|
+
key: "model",
|
|
53
|
+
set: function set(s) {
|
|
54
|
+
this._model = s;
|
|
55
|
+
this.dispatchEvent(new _piePlayerEvents.ModelSetEvent(this.tagName.toLowerCase(), this._session, !!this._model));
|
|
56
|
+
|
|
57
|
+
this._render();
|
|
58
|
+
}
|
|
59
|
+
}, {
|
|
60
|
+
key: "session",
|
|
61
|
+
set: function set(s) {
|
|
62
|
+
this._session = s;
|
|
63
|
+
}
|
|
64
|
+
}, {
|
|
65
|
+
key: "connectedCallback",
|
|
66
|
+
value: function connectedCallback() {
|
|
67
|
+
this.setAttribute('aria-label', 'Passage');
|
|
68
|
+
this.setAttribute('role', 'region');
|
|
69
|
+
|
|
70
|
+
this._render();
|
|
71
|
+
}
|
|
72
|
+
}, {
|
|
73
|
+
key: "_render",
|
|
74
|
+
value: function _render() {
|
|
75
|
+
var _this$_model$showTeac = this._model.showTeacherInstructions,
|
|
76
|
+
showTeacherInstructions = _this$_model$showTeac === void 0 ? false : _this$_model$showTeac;
|
|
77
|
+
|
|
78
|
+
if (this._model.passages.length > 0) {
|
|
79
|
+
var passagesTabs = this._model.passages.map(function (passage, index) {
|
|
80
|
+
return {
|
|
81
|
+
id: index,
|
|
82
|
+
title: passage.title,
|
|
83
|
+
text: passage.text,
|
|
84
|
+
teacherInstructions: passage.teacherInstructions || ''
|
|
85
|
+
};
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
var elem = /*#__PURE__*/_react["default"].createElement(_stimulusTabs["default"], {
|
|
89
|
+
tabs: passagesTabs,
|
|
90
|
+
showTeacherInstructions: showTeacherInstructions
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
_reactDom["default"].render(elem, this);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}]);
|
|
97
|
+
return PiePassage;
|
|
98
|
+
}( /*#__PURE__*/(0, _wrapNativeSuper2["default"])(HTMLElement));
|
|
99
|
+
|
|
100
|
+
exports["default"] = PiePassage;
|
|
101
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["PiePassage","_model","passages","_session","s","dispatchEvent","ModelSetEvent","tagName","toLowerCase","_render","setAttribute","showTeacherInstructions","length","passagesTabs","map","passage","index","id","title","text","teacherInstructions","elem","React","createElement","StimulusTabs","tabs","ReactDOM","render","HTMLElement"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;;;;;IACqBA,U;;;;;AACnB,wBAAc;AAAA;;AAAA;AACZ;AACA,UAAKC,MAAL,GAAc;AACZC,MAAAA,QAAQ,EAAE;AADE,KAAd;AAGA,UAAKC,QAAL,GAAgB,IAAhB;AALY;AAMb;;;;SAED,aAAUC,CAAV,EAAa;AACX,WAAKH,MAAL,GAAcG,CAAd;AACA,WAAKC,aAAL,CAAmB,IAAIC,8BAAJ,CAAkB,KAAKC,OAAL,CAAaC,WAAb,EAAlB,EAA8C,KAAKL,QAAnD,EAA6D,CAAC,CAAC,KAAKF,MAApE,CAAnB;;AAEA,WAAKQ,OAAL;AACD;;;SAED,aAAYL,CAAZ,EAAe;AACb,WAAKD,QAAL,GAAgBC,CAAhB;AACD;;;WAED,6BAAoB;AAClB,WAAKM,YAAL,CAAkB,YAAlB,EAAgC,SAAhC;AACA,WAAKA,YAAL,CAAkB,MAAlB,EAA0B,QAA1B;;AACA,WAAKD,OAAL;AACD;;;WAED,mBAAU;AACR,kCAA4C,KAAKR,MAAjD,CAAQU,uBAAR;AAAA,UAAQA,uBAAR,sCAAkC,KAAlC;;AAEA,UAAI,KAAKV,MAAL,CAAYC,QAAZ,CAAqBU,MAArB,GAA8B,CAAlC,EAAqC;AACnC,YAAMC,YAAY,GAAG,KAAKZ,MAAL,CAAYC,QAAZ,CAAqBY,GAArB,CAAyB,UAACC,OAAD,EAAUC,KAAV,EAAoB;AAChE,iBAAO;AACLC,YAAAA,EAAE,EAAED,KADC;AAELE,YAAAA,KAAK,EAAEH,OAAO,CAACG,KAFV;AAGLC,YAAAA,IAAI,EAAEJ,OAAO,CAACI,IAHT;AAILC,YAAAA,mBAAmB,EAAEL,OAAO,CAACK,mBAAR,IAA+B;AAJ/C,WAAP;AAMD,SAPoB,CAArB;;AAQA,YAAIC,IAAI,gBAAGC,kBAAMC,aAAN,CAAoBC,wBAApB,EAAkC;AAC3CC,UAAAA,IAAI,EAAEZ,YADqC;AAE3CF,UAAAA,uBAAuB,EAAvBA;AAF2C,SAAlC,CAAX;;AAIAe,6BAASC,MAAT,CAAgBN,IAAhB,EAAsB,IAAtB;AACD;AACF;;;kDA5CqCO,W","sourcesContent":["import { ModelSetEvent } from '@pie-framework/pie-player-events';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport StimulusTabs from './stimulus-tabs';\nexport default class PiePassage extends HTMLElement {\n constructor() {\n super();\n this._model = {\n passages: [],\n };\n this._session = null;\n }\n\n set model(s) {\n this._model = s;\n this.dispatchEvent(new ModelSetEvent(this.tagName.toLowerCase(), this._session, !!this._model));\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 { showTeacherInstructions = false } = this._model;\n\n if (this._model.passages.length > 0) {\n const passagesTabs = this._model.passages.map((passage, index) => {\n return {\n id: index,\n title: passage.title,\n text: passage.text,\n teacherInstructions: passage.teacherInstructions || '',\n };\n });\n let elem = React.createElement(StimulusTabs, {\n tabs: passagesTabs,\n showTeacherInstructions,\n });\n ReactDOM.render(elem, this);\n }\n }\n}\n"],"file":"index.js"}
|
package/lib/print.js
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
|
|
10
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
+
|
|
12
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
+
|
|
14
|
+
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
15
|
+
|
|
16
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
17
|
+
|
|
18
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
19
|
+
|
|
20
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
21
|
+
|
|
22
|
+
var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper"));
|
|
23
|
+
|
|
24
|
+
var _react = _interopRequireDefault(require("react"));
|
|
25
|
+
|
|
26
|
+
var _reactDom = _interopRequireDefault(require("react-dom"));
|
|
27
|
+
|
|
28
|
+
var _debounce = _interopRequireDefault(require("lodash/debounce"));
|
|
29
|
+
|
|
30
|
+
var _stimulusTabs = _interopRequireDefault(require("./stimulus-tabs"));
|
|
31
|
+
|
|
32
|
+
var _debug = _interopRequireDefault(require("debug"));
|
|
33
|
+
|
|
34
|
+
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
|
+
|
|
36
|
+
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; } }
|
|
37
|
+
|
|
38
|
+
var log = (0, _debug["default"])('pie-element:passage:print');
|
|
39
|
+
|
|
40
|
+
var preparePrintPassage = function preparePrintPassage(model, opts) {
|
|
41
|
+
var instr = opts.role === 'instructor';
|
|
42
|
+
return model.passages.map(function (passage, index) {
|
|
43
|
+
return {
|
|
44
|
+
id: index,
|
|
45
|
+
title: passage.title,
|
|
46
|
+
text: passage.text,
|
|
47
|
+
teacherInstructions: instr && passage.teacherInstructions
|
|
48
|
+
};
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
var PassagePrint = /*#__PURE__*/function (_HTMLElement) {
|
|
53
|
+
(0, _inherits2["default"])(PassagePrint, _HTMLElement);
|
|
54
|
+
|
|
55
|
+
var _super = _createSuper(PassagePrint);
|
|
56
|
+
|
|
57
|
+
function PassagePrint() {
|
|
58
|
+
var _this;
|
|
59
|
+
|
|
60
|
+
(0, _classCallCheck2["default"])(this, PassagePrint);
|
|
61
|
+
_this = _super.call(this);
|
|
62
|
+
_this._model = null;
|
|
63
|
+
_this._options = null;
|
|
64
|
+
_this._session = [];
|
|
65
|
+
_this._rerender = (0, _debounce["default"])(function () {
|
|
66
|
+
if (_this._model && _this._session) {
|
|
67
|
+
if (_this._model.passages && _this._model.passages.length > 0) {
|
|
68
|
+
var printPassage = preparePrintPassage(_this._model, _this._options);
|
|
69
|
+
|
|
70
|
+
var element = /*#__PURE__*/_react["default"].createElement(_stimulusTabs["default"], {
|
|
71
|
+
tabs: printPassage,
|
|
72
|
+
disabledTabs: true,
|
|
73
|
+
showTeacherInstructions: _this._options.role === 'instructor'
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
_reactDom["default"].render(element, (0, _assertThisInitialized2["default"])(_this));
|
|
77
|
+
}
|
|
78
|
+
} else {
|
|
79
|
+
log('skip');
|
|
80
|
+
}
|
|
81
|
+
}, 50, {
|
|
82
|
+
leading: false,
|
|
83
|
+
trailing: true
|
|
84
|
+
});
|
|
85
|
+
return _this;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
(0, _createClass2["default"])(PassagePrint, [{
|
|
89
|
+
key: "model",
|
|
90
|
+
set: function set(s) {
|
|
91
|
+
this._model = s;
|
|
92
|
+
|
|
93
|
+
this._rerender();
|
|
94
|
+
}
|
|
95
|
+
}, {
|
|
96
|
+
key: "options",
|
|
97
|
+
set: function set(o) {
|
|
98
|
+
this._options = o;
|
|
99
|
+
}
|
|
100
|
+
}, {
|
|
101
|
+
key: "connectedCallback",
|
|
102
|
+
value: function connectedCallback() {}
|
|
103
|
+
}]);
|
|
104
|
+
return PassagePrint;
|
|
105
|
+
}( /*#__PURE__*/(0, _wrapNativeSuper2["default"])(HTMLElement));
|
|
106
|
+
|
|
107
|
+
exports["default"] = PassagePrint;
|
|
108
|
+
//# sourceMappingURL=print.js.map
|
package/lib/print.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/print.js"],"names":["log","preparePrintPassage","model","opts","instr","role","passages","map","passage","index","id","title","text","teacherInstructions","PassagePrint","_model","_options","_session","_rerender","length","printPassage","element","React","createElement","StimulusTabs","tabs","disabledTabs","showTeacherInstructions","ReactDOM","render","leading","trailing","s","o","HTMLElement"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;;;;;AAEA,IAAMA,GAAG,GAAG,uBAAM,2BAAN,CAAZ;;AAEA,IAAMC,mBAAmB,GAAG,SAAtBA,mBAAsB,CAACC,KAAD,EAAQC,IAAR,EAAiB;AAC3C,MAAMC,KAAK,GAAGD,IAAI,CAACE,IAAL,KAAc,YAA5B;AAEA,SAAOH,KAAK,CAACI,QAAN,CAAeC,GAAf,CAAmB,UAACC,OAAD,EAAUC,KAAV,EAAoB;AAC5C,WAAO;AACLC,MAAAA,EAAE,EAAED,KADC;AAELE,MAAAA,KAAK,EAAEH,OAAO,CAACG,KAFV;AAGLC,MAAAA,IAAI,EAAEJ,OAAO,CAACI,IAHT;AAILC,MAAAA,mBAAmB,EAAET,KAAK,IAAII,OAAO,CAACK;AAJjC,KAAP;AAMD,GAPM,CAAP;AAQD,CAXD;;IAaqBC,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,CAAYT,QAAZ,IAAwB,MAAKS,MAAL,CAAYT,QAAZ,CAAqBa,MAArB,GAA8B,CAA1D,EAA6D;AAC3D,cAAMC,YAAY,GAAGnB,mBAAmB,CAAC,MAAKc,MAAN,EAAc,MAAKC,QAAnB,CAAxC;;AAEA,cAAMK,OAAO,gBAAGC,kBAAMC,aAAN,CAAoBC,wBAApB,EAAkC;AAChDC,YAAAA,IAAI,EAAEL,YAD0C;AAEhDM,YAAAA,YAAY,EAAE,IAFkC;AAGhDC,YAAAA,uBAAuB,EAAE,MAAKX,QAAL,CAAcX,IAAd,KAAuB;AAHA,WAAlC,CAAhB;;AAMAuB,+BAASC,MAAT,CAAgBR,OAAhB;AACD;AACF,OAZD,MAYO;AACLrB,QAAAA,GAAG,CAAC,MAAD,CAAH;AACD;AACF,KAjBc,EAkBf,EAlBe,EAmBf;AAAE8B,MAAAA,OAAO,EAAE,KAAX;AAAkBC,MAAAA,QAAQ,EAAE;AAA5B,KAnBe,CAAjB;AANY;AA2Bb;;;;SAED,aAAUC,CAAV,EAAa;AACX,WAAKjB,MAAL,GAAciB,CAAd;;AACA,WAAKd,SAAL;AACD;;;SAED,aAAYe,CAAZ,EAAe;AACb,WAAKjB,QAAL,GAAgBiB,CAAhB;AACD;;;WAED,6BAAoB,CAAE;;;kDAvCkBC,W","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport debounce from 'lodash/debounce';\nimport StimulusTabs from './stimulus-tabs';\nimport debug from 'debug';\n\nconst log = debug('pie-element:passage:print');\n\nconst preparePrintPassage = (model, opts) => {\n const instr = opts.role === 'instructor';\n\n return model.passages.map((passage, index) => {\n return {\n id: index,\n title: passage.title,\n text: passage.text,\n teacherInstructions: instr && passage.teacherInstructions,\n };\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 tabs: printPassage,\n disabledTabs: true,\n showTeacherInstructions: this._options.role === 'instructor',\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"}
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
|
|
10
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
+
|
|
12
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
+
|
|
14
|
+
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
15
|
+
|
|
16
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
17
|
+
|
|
18
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
19
|
+
|
|
20
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
21
|
+
|
|
22
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
23
|
+
|
|
24
|
+
var _react = _interopRequireDefault(require("react"));
|
|
25
|
+
|
|
26
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
27
|
+
|
|
28
|
+
var _Tabs = _interopRequireDefault(require("@material-ui/core/Tabs"));
|
|
29
|
+
|
|
30
|
+
var _Tab = _interopRequireDefault(require("@material-ui/core/Tab"));
|
|
31
|
+
|
|
32
|
+
var _styles = require("@material-ui/core/styles");
|
|
33
|
+
|
|
34
|
+
var _renderUi = require("@pie-lib/pie-toolbox/render-ui");
|
|
35
|
+
|
|
36
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
37
|
+
|
|
38
|
+
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); }; }
|
|
39
|
+
|
|
40
|
+
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; } }
|
|
41
|
+
|
|
42
|
+
var styles = function styles(theme) {
|
|
43
|
+
return {
|
|
44
|
+
root: {
|
|
45
|
+
flexGrow: 1,
|
|
46
|
+
backgroundColor: _renderUi.color.background(),
|
|
47
|
+
color: _renderUi.color.text()
|
|
48
|
+
},
|
|
49
|
+
tab: {
|
|
50
|
+
backgroundColor: _renderUi.color.background(),
|
|
51
|
+
fontSize: 'inherit'
|
|
52
|
+
},
|
|
53
|
+
stickyTabs: {
|
|
54
|
+
background: _renderUi.color.background(),
|
|
55
|
+
position: 'sticky',
|
|
56
|
+
top: 0
|
|
57
|
+
},
|
|
58
|
+
title: {
|
|
59
|
+
textTransform: 'uppercase',
|
|
60
|
+
padding: "".concat(theme.spacing.unit, "px ").concat(theme.spacing.unit * 3, "px"),
|
|
61
|
+
borderBottom: "2px solid ".concat(_renderUi.color.secondary()),
|
|
62
|
+
width: 'fit-content',
|
|
63
|
+
marginBottom: theme.spacing.unit
|
|
64
|
+
},
|
|
65
|
+
buttonContainer: {
|
|
66
|
+
background: _renderUi.color.background()
|
|
67
|
+
},
|
|
68
|
+
tabContainer: {
|
|
69
|
+
backgroundColor: _renderUi.color.background(),
|
|
70
|
+
color: _renderUi.color.text(),
|
|
71
|
+
padding: theme.spacing.unit * 2
|
|
72
|
+
},
|
|
73
|
+
breakSpaces: {
|
|
74
|
+
whiteSpace: 'break-spaces'
|
|
75
|
+
},
|
|
76
|
+
teacherInstructions: {
|
|
77
|
+
marginBottom: theme.spacing.unit * 2
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
var StimulusTabs = /*#__PURE__*/function (_React$Component) {
|
|
83
|
+
(0, _inherits2["default"])(StimulusTabs, _React$Component);
|
|
84
|
+
|
|
85
|
+
var _super = _createSuper(StimulusTabs);
|
|
86
|
+
|
|
87
|
+
function StimulusTabs() {
|
|
88
|
+
var _this;
|
|
89
|
+
|
|
90
|
+
(0, _classCallCheck2["default"])(this, StimulusTabs);
|
|
91
|
+
|
|
92
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
93
|
+
args[_key] = arguments[_key];
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
_this = _super.call.apply(_super, [this].concat(args));
|
|
97
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", {
|
|
98
|
+
activeTab: 0
|
|
99
|
+
});
|
|
100
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleChange", function (event, activeTab) {
|
|
101
|
+
_this.setState(function () {
|
|
102
|
+
return {
|
|
103
|
+
activeTab: activeTab
|
|
104
|
+
};
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
setTimeout(function () {
|
|
108
|
+
var tabChangeEvent = new CustomEvent('pie-ui-passage-tabChanged', {
|
|
109
|
+
detail: {
|
|
110
|
+
tab: activeTab
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
window.dispatchEvent(tabChangeEvent);
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleKeyDown", function (event, currentTabId) {
|
|
117
|
+
var key = event.key;
|
|
118
|
+
var tabs = _this.props.tabs;
|
|
119
|
+
var newTabIndex = -1;
|
|
120
|
+
var currentIndex = tabs.findIndex(function (tab) {
|
|
121
|
+
return tab.id === currentTabId;
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
switch (key) {
|
|
125
|
+
case 'ArrowRight':
|
|
126
|
+
case 'ArrowDown':
|
|
127
|
+
newTabIndex = (currentIndex + 1) % tabs.length;
|
|
128
|
+
break;
|
|
129
|
+
|
|
130
|
+
case 'ArrowLeft':
|
|
131
|
+
case 'ArrowUp':
|
|
132
|
+
newTabIndex = (currentIndex - 1 + tabs.length) % tabs.length;
|
|
133
|
+
break;
|
|
134
|
+
|
|
135
|
+
case 'Home':
|
|
136
|
+
newTabIndex = 0;
|
|
137
|
+
break;
|
|
138
|
+
|
|
139
|
+
case 'End':
|
|
140
|
+
newTabIndex = tabs.length - 1;
|
|
141
|
+
break;
|
|
142
|
+
|
|
143
|
+
case 'Enter':
|
|
144
|
+
case ' ':
|
|
145
|
+
newTabIndex = currentIndex;
|
|
146
|
+
break;
|
|
147
|
+
|
|
148
|
+
default:
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if (newTabIndex !== -1) {
|
|
153
|
+
event.preventDefault();
|
|
154
|
+
|
|
155
|
+
_this.handleChange(event, tabs[newTabIndex].id);
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "parsedText", function (text) {
|
|
159
|
+
// fix imported audio content for Safari PD-1391
|
|
160
|
+
var div = document.createElement('div');
|
|
161
|
+
div.innerHTML = text.replace(/(<br\/>\n)/g, '<br/>');
|
|
162
|
+
var audio = div.querySelector('audio');
|
|
163
|
+
|
|
164
|
+
if (audio) {
|
|
165
|
+
var source = document.createElement('source');
|
|
166
|
+
source.setAttribute('type', 'audio/mp3');
|
|
167
|
+
source.setAttribute('src', audio.getAttribute('src'));
|
|
168
|
+
audio.removeAttribute('src');
|
|
169
|
+
audio.appendChild(source);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
return div.innerHTML;
|
|
173
|
+
});
|
|
174
|
+
return _this;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
(0, _createClass2["default"])(StimulusTabs, [{
|
|
178
|
+
key: "renderInstructions",
|
|
179
|
+
value: function renderInstructions(showTeacherInstructions, teacherInstructions) {
|
|
180
|
+
var disabledTabs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
181
|
+
|
|
182
|
+
if (!showTeacherInstructions || !teacherInstructions) {
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
var teacherInstructionsDiv = /*#__PURE__*/_react["default"].createElement(_renderUi.PreviewPrompt, {
|
|
187
|
+
tagName: "div",
|
|
188
|
+
className: "prompt",
|
|
189
|
+
defaultClassName: "teacher-instructions",
|
|
190
|
+
prompt: teacherInstructions
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
if (disabledTabs) {
|
|
194
|
+
return teacherInstructionsDiv;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
return /*#__PURE__*/_react["default"].createElement(_renderUi.Collapsible, {
|
|
198
|
+
labels: {
|
|
199
|
+
hidden: 'Show Teacher Instructions',
|
|
200
|
+
visible: 'Hide Teacher Instructions'
|
|
201
|
+
}
|
|
202
|
+
}, teacherInstructionsDiv);
|
|
203
|
+
}
|
|
204
|
+
}, {
|
|
205
|
+
key: "render",
|
|
206
|
+
value: function render() {
|
|
207
|
+
var _this2 = this;
|
|
208
|
+
|
|
209
|
+
var _this$props = this.props,
|
|
210
|
+
classes = _this$props.classes,
|
|
211
|
+
tabs = _this$props.tabs,
|
|
212
|
+
disabledTabs = _this$props.disabledTabs,
|
|
213
|
+
showTeacherInstructions = _this$props.showTeacherInstructions;
|
|
214
|
+
var activeTab = this.state.activeTab;
|
|
215
|
+
|
|
216
|
+
if (tabs && tabs.length > 1) {
|
|
217
|
+
return disabledTabs ? /*#__PURE__*/_react["default"].createElement("div", {
|
|
218
|
+
className: (0, _classnames["default"])(classes.root, 'passages')
|
|
219
|
+
}, tabs.map(function (tab) {
|
|
220
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
221
|
+
key: tab.id,
|
|
222
|
+
className: "passage-".concat(tab.id),
|
|
223
|
+
id: "tabpanel-".concat(tab.id),
|
|
224
|
+
"aria-labelledby": "tab-".concat(tab.id),
|
|
225
|
+
"aria-controls": "tabpanel-".concat(tab.id),
|
|
226
|
+
tabIndex: "0"
|
|
227
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
228
|
+
className: classes.tabContainer,
|
|
229
|
+
id: "tabpanel-".concat(tab.id),
|
|
230
|
+
role: "tabpanel",
|
|
231
|
+
"aria-labelledby": "button-".concat(tab.id)
|
|
232
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
233
|
+
className: (0, _classnames["default"])(classes.title, 'title'),
|
|
234
|
+
dangerouslySetInnerHTML: {
|
|
235
|
+
__html: _this2.parsedText(tab.title)
|
|
236
|
+
}
|
|
237
|
+
}), _this2.renderInstructions(showTeacherInstructions, tab.teacherInstructions, disabledTabs), /*#__PURE__*/_react["default"].createElement(_renderUi.Purpose, {
|
|
238
|
+
purpose: "passage-text"
|
|
239
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
240
|
+
className: "text",
|
|
241
|
+
key: tab.id,
|
|
242
|
+
dangerouslySetInnerHTML: {
|
|
243
|
+
__html: _this2.parsedText(tab.text)
|
|
244
|
+
}
|
|
245
|
+
}))));
|
|
246
|
+
})) : /*#__PURE__*/_react["default"].createElement("div", {
|
|
247
|
+
className: (0, _classnames["default"])(classes.root, 'passages')
|
|
248
|
+
}, /*#__PURE__*/_react["default"].createElement(_Tabs["default"], {
|
|
249
|
+
classes: {
|
|
250
|
+
root: classes.stickyTabs,
|
|
251
|
+
flexContainer: classes.buttonContainer
|
|
252
|
+
},
|
|
253
|
+
value: activeTab,
|
|
254
|
+
onChange: this.handleChange
|
|
255
|
+
}, tabs.map(function (tab) {
|
|
256
|
+
return /*#__PURE__*/_react["default"].createElement(_Tab["default"], {
|
|
257
|
+
className: classes.tab,
|
|
258
|
+
key: tab.id,
|
|
259
|
+
id: "button-".concat(tab.id),
|
|
260
|
+
label: /*#__PURE__*/_react["default"].createElement(_renderUi.Purpose, {
|
|
261
|
+
purpose: "passage-title"
|
|
262
|
+
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
263
|
+
dangerouslySetInnerHTML: {
|
|
264
|
+
__html: _this2.parsedText(tab.title)
|
|
265
|
+
}
|
|
266
|
+
})),
|
|
267
|
+
value: tab.id,
|
|
268
|
+
tabIndex: activeTab === tab.id ? 0 : -1,
|
|
269
|
+
"aria-controls": "tabpanel-".concat(tab.id),
|
|
270
|
+
"aria-selected": activeTab === tab.id,
|
|
271
|
+
onFocus: function onFocus() {
|
|
272
|
+
return _this2.handleChange(null, tab.id);
|
|
273
|
+
},
|
|
274
|
+
onKeyDown: function onKeyDown(event) {
|
|
275
|
+
return _this2.handleKeyDown(event, tab.id);
|
|
276
|
+
}
|
|
277
|
+
});
|
|
278
|
+
})), tabs.map(function (tab) {
|
|
279
|
+
return activeTab === tab.id ? /*#__PURE__*/_react["default"].createElement("div", {
|
|
280
|
+
className: classes.tabContainer,
|
|
281
|
+
key: tab.id,
|
|
282
|
+
id: "tabpanel-".concat(tab.id),
|
|
283
|
+
role: "tabpanel",
|
|
284
|
+
"aria-labelledby": "button-".concat(tab.id)
|
|
285
|
+
}, _this2.renderInstructions(showTeacherInstructions, tab.teacherInstructions), /*#__PURE__*/_react["default"].createElement(_renderUi.Purpose, {
|
|
286
|
+
purpose: "passage-text"
|
|
287
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
288
|
+
key: tab.id,
|
|
289
|
+
dangerouslySetInnerHTML: {
|
|
290
|
+
__html: _this2.parsedText(tab.text)
|
|
291
|
+
}
|
|
292
|
+
}))) : null;
|
|
293
|
+
}));
|
|
294
|
+
} else if (tabs && tabs[0]) {
|
|
295
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, this.renderInstructions(showTeacherInstructions, tabs[0].teacherInstructions, disabledTabs), /*#__PURE__*/_react["default"].createElement("div", {
|
|
296
|
+
className: (0, _classnames["default"])(classes.root, classes.tabContainer, classes.breakSpaces, 'passage')
|
|
297
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
298
|
+
className: "text",
|
|
299
|
+
dangerouslySetInnerHTML: {
|
|
300
|
+
__html: this.parsedText(tabs[0].text)
|
|
301
|
+
}
|
|
302
|
+
})));
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}]);
|
|
306
|
+
return StimulusTabs;
|
|
307
|
+
}(_react["default"].Component);
|
|
308
|
+
|
|
309
|
+
StimulusTabs.propTypes = {
|
|
310
|
+
classes: _propTypes["default"].object.isRequired,
|
|
311
|
+
tabs: _propTypes["default"].arrayOf(_propTypes["default"].shape({
|
|
312
|
+
id: _propTypes["default"].number.isRequired,
|
|
313
|
+
title: _propTypes["default"].string.isRequired,
|
|
314
|
+
text: _propTypes["default"].string.isRequired,
|
|
315
|
+
teacherInstructions: _propTypes["default"].string
|
|
316
|
+
}).isRequired).isRequired,
|
|
317
|
+
disabledTabs: _propTypes["default"].bool,
|
|
318
|
+
showTeacherInstructions: _propTypes["default"].bool
|
|
319
|
+
};
|
|
320
|
+
|
|
321
|
+
var _default = (0, _styles.withStyles)(styles)(StimulusTabs);
|
|
322
|
+
|
|
323
|
+
exports["default"] = _default;
|
|
324
|
+
//# sourceMappingURL=stimulus-tabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/stimulus-tabs.jsx"],"names":["styles","theme","root","flexGrow","backgroundColor","color","background","text","tab","fontSize","stickyTabs","position","top","title","textTransform","padding","spacing","unit","borderBottom","secondary","width","marginBottom","buttonContainer","tabContainer","breakSpaces","whiteSpace","teacherInstructions","StimulusTabs","activeTab","event","setState","setTimeout","tabChangeEvent","CustomEvent","detail","window","dispatchEvent","currentTabId","key","tabs","props","newTabIndex","currentIndex","findIndex","id","length","preventDefault","handleChange","div","document","createElement","innerHTML","replace","audio","querySelector","source","setAttribute","getAttribute","removeAttribute","appendChild","showTeacherInstructions","disabledTabs","teacherInstructionsDiv","hidden","visible","classes","state","map","__html","parsedText","renderInstructions","flexContainer","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, Purpose } from '@pie-lib/pie-toolbox/render-ui';\nimport classNames from 'classnames';\n\nconst styles = (theme) => ({\n root: {\n flexGrow: 1,\n backgroundColor: color.background(),\n color: color.text(),\n },\n tab: {\n backgroundColor: color.background(),\n fontSize: 'inherit',\n },\n stickyTabs: {\n background: color.background(),\n position: 'sticky',\n top: 0,\n },\n title: {\n textTransform: 'uppercase',\n padding: `${theme.spacing.unit}px ${theme.spacing.unit * 3}px`,\n borderBottom: `2px solid ${color.secondary()}`,\n width: 'fit-content',\n marginBottom: theme.spacing.unit,\n },\n buttonContainer: {\n background: color.background(),\n },\n tabContainer: {\n backgroundColor: color.background(),\n color: color.text(),\n padding: theme.spacing.unit * 2,\n },\n breakSpaces: {\n whiteSpace: 'break-spaces',\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 setTimeout(() => {\n const tabChangeEvent = new CustomEvent('pie-ui-passage-tabChanged', {\n detail: {\n tab: activeTab,\n },\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 case 'ArrowDown':\n newTabIndex = (currentIndex + 1) % tabs.length;\n break;\n case 'ArrowLeft':\n case 'ArrowUp':\n newTabIndex = (currentIndex - 1 + tabs.length) % tabs.length;\n break;\n case 'Home':\n newTabIndex = 0;\n break;\n case 'End':\n newTabIndex = tabs.length - 1;\n break;\n case 'Enter':\n case ' ':\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 }\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 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 render() {\n const { classes, tabs, disabledTabs, showTeacherInstructions } = this.props;\n const { activeTab } = this.state;\n\n if (tabs && tabs.length > 1) {\n return disabledTabs ? (\n <div className={classNames(classes.root, 'passages')}>\n {tabs.map((tab) => (\n <div\n key={tab.id}\n className={`passage-${tab.id}`}\n id={`tabpanel-${tab.id}`}\n aria-labelledby={`tab-${tab.id}`}\n aria-controls={`tabpanel-${tab.id}`}\n tabIndex=\"0\"\n >\n <div\n className={classes.tabContainer}\n id={`tabpanel-${tab.id}`}\n role=\"tabpanel\"\n aria-labelledby={`button-${tab.id}`}\n >\n <div\n className={classNames(classes.title, 'title')}\n dangerouslySetInnerHTML={{ __html: this.parsedText(tab.title) }}\n />\n {this.renderInstructions(showTeacherInstructions, tab.teacherInstructions, disabledTabs)}\n <Purpose purpose=\"passage-text\">\n <div className=\"text\" key={tab.id} dangerouslySetInnerHTML={{ __html: this.parsedText(tab.text) }} />\n </Purpose>\n </div>\n </div>\n ))}\n </div>\n ) : (\n <div className={classNames(classes.root, 'passages')}>\n <Tabs\n classes={{\n root: classes.stickyTabs,\n flexContainer: classes.buttonContainer,\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={\n <Purpose purpose=\"passage-title\">\n <span dangerouslySetInnerHTML={{ __html: this.parsedText(tab.title) }} />\n </Purpose>\n }\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\n {tabs.map((tab) =>\n activeTab === tab.id ? (\n <div\n className={classes.tabContainer}\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)}\n\n <Purpose purpose=\"passage-text\">\n <div key={tab.id} dangerouslySetInnerHTML={{ __html: this.parsedText(tab.text) }} />\n </Purpose>\n </div>\n ) : null,\n )}\n </div>\n );\n } else if (tabs && tabs[0]) {\n return (\n <>\n {this.renderInstructions(showTeacherInstructions, tabs[0].teacherInstructions, disabledTabs)}\n <div className={classNames(classes.root, classes.tabContainer, classes.breakSpaces, 'passage')}>\n <div className=\"text\" dangerouslySetInnerHTML={{ __html: this.parsedText(tabs[0].text) }} />\n </div>\n </>\n );\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 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"}
|