@pie-element/passage 2.3.2-next.30 → 2.3.2-next.42
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 +19 -11
- package/controller/lib/index.js.map +1 -1
- package/docs/demo/generate.js +1 -0
- package/lib/index.js +7 -2
- package/lib/index.js.map +1 -1
- package/lib/print.js +13 -4
- package/lib/print.js.map +1 -1
- package/lib/stimulus-tabs.js +40 -7
- package/lib/stimulus-tabs.js.map +1 -1
- package/module/controller.js +2797 -5
- package/module/demo.js +1 -0
- package/module/element.js +65 -25
- package/module/print-demo.js +1 -0
- package/module/print.js +78 -32
- package/package.json +2 -2
package/controller/lib/index.js
CHANGED
|
@@ -11,31 +11,39 @@ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"))
|
|
|
11
11
|
|
|
12
12
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
13
13
|
|
|
14
|
+
var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
|
|
15
|
+
|
|
14
16
|
/**
|
|
15
17
|
*
|
|
16
18
|
* @param {*} question
|
|
17
19
|
* @param {*} session
|
|
18
20
|
* @param {*} env
|
|
19
|
-
* @param {*} updateSession - optional - a function that will set the properties passed into it on the session.
|
|
20
21
|
*/
|
|
21
|
-
function model(_x, _x2, _x3
|
|
22
|
+
function model(_x, _x2, _x3) {
|
|
22
23
|
return _model.apply(this, arguments);
|
|
23
24
|
}
|
|
24
25
|
|
|
25
26
|
function _model() {
|
|
26
|
-
_model = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(question, session, env
|
|
27
|
+
_model = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(question, session, env) {
|
|
28
|
+
var _ref, role, mode, response;
|
|
29
|
+
|
|
27
30
|
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
28
31
|
while (1) {
|
|
29
32
|
switch (_context.prev = _context.next) {
|
|
30
33
|
case 0:
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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:
|
|
39
47
|
case "end":
|
|
40
48
|
return _context.stop();
|
|
41
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["model","question","session","env","
|
|
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/docs/demo/generate.js
CHANGED
|
@@ -3,6 +3,7 @@ exports.model = (id, element) => ({
|
|
|
3
3
|
element,
|
|
4
4
|
passages: [
|
|
5
5
|
{
|
|
6
|
+
teacherInstructions: 'Teacher instructions tab 1',
|
|
6
7
|
title: 'Hope Is the Thing with Feathers',
|
|
7
8
|
text: '<p><font style="visibility:hidden">00000</font>Hope is the thing with feathers<br /><font style="visibility:hidden">00000</font>That perches in the soul,<br /><font style="visibility:hidden">00000</font>And sings the tune without the words,<br /><font style="visibility:hidden">00000</font>And never stops at all,</p><p>5<font style="visibility:hidden">0000</font>And sweetest in the gale is heard;<br /><font style="visibility:hidden">00000</font>And sore must be the storm<br /><font style="visibility:hidden">00000</font>That could abash the little bird<br /><font style="visibility:hidden">00000</font>That kept so many warm.</p><p><font style="visibility:hidden">00000</font>I’ve heard it in the chillest land,<br />10<font style="visibility:hidden">000</font>And on the strangest sea;<br /><font style="visibility:hidden">00000</font>Yet, never, in extremity,<br /><font style="visibility:hidden">00000</font>It asked a crumb of me.</p><p><span class="no-number">"Hope is the Thing With Feathers" by Emily Dickinson, from <em>The Complete Poems of Emily Dickinson</em>. In the public domain.</span></p>',
|
|
8
9
|
},
|
package/lib/index.js
CHANGED
|
@@ -72,17 +72,22 @@ var PiePassage = /*#__PURE__*/function (_HTMLElement) {
|
|
|
72
72
|
}, {
|
|
73
73
|
key: "_render",
|
|
74
74
|
value: function _render() {
|
|
75
|
+
var _this$_model$showTeac = this._model.showTeacherInstructions,
|
|
76
|
+
showTeacherInstructions = _this$_model$showTeac === void 0 ? false : _this$_model$showTeac;
|
|
77
|
+
|
|
75
78
|
if (this._model.passages.length > 0) {
|
|
76
79
|
var passagesTabs = this._model.passages.map(function (passage, index) {
|
|
77
80
|
return {
|
|
78
81
|
id: index,
|
|
79
82
|
title: passage.title,
|
|
80
|
-
text: passage.text
|
|
83
|
+
text: passage.text,
|
|
84
|
+
teacherInstructions: passage.teacherInstructions || ''
|
|
81
85
|
};
|
|
82
86
|
});
|
|
83
87
|
|
|
84
88
|
var elem = /*#__PURE__*/_react["default"].createElement(_stimulusTabs["default"], {
|
|
85
|
-
tabs: passagesTabs
|
|
89
|
+
tabs: passagesTabs,
|
|
90
|
+
showTeacherInstructions: showTeacherInstructions
|
|
86
91
|
});
|
|
87
92
|
|
|
88
93
|
_reactDom["default"].render(elem, this);
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["PiePassage","_model","passages","_session","s","dispatchEvent","ModelSetEvent","tagName","toLowerCase","_render","setAttribute","length","passagesTabs","map","passage","index","id","title","text","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,
|
|
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
CHANGED
|
@@ -37,12 +37,14 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Re
|
|
|
37
37
|
|
|
38
38
|
var log = (0, _debug["default"])('pie-element:passage:print');
|
|
39
39
|
|
|
40
|
-
var preparePrintPassage = function preparePrintPassage(model) {
|
|
40
|
+
var preparePrintPassage = function preparePrintPassage(model, opts) {
|
|
41
|
+
var instr = opts.role === 'instructor';
|
|
41
42
|
return model.passages.map(function (passage, index) {
|
|
42
43
|
return {
|
|
43
44
|
id: index,
|
|
44
45
|
title: passage.title,
|
|
45
|
-
text: passage.text
|
|
46
|
+
text: passage.text,
|
|
47
|
+
teacherInstructions: instr && passage.teacherInstructions
|
|
46
48
|
};
|
|
47
49
|
});
|
|
48
50
|
};
|
|
@@ -58,15 +60,17 @@ var PassagePrint = /*#__PURE__*/function (_HTMLElement) {
|
|
|
58
60
|
(0, _classCallCheck2["default"])(this, PassagePrint);
|
|
59
61
|
_this = _super.call(this);
|
|
60
62
|
_this._model = null;
|
|
63
|
+
_this._options = null;
|
|
61
64
|
_this._session = [];
|
|
62
65
|
_this._rerender = (0, _debounce["default"])(function () {
|
|
63
66
|
if (_this._model && _this._session) {
|
|
64
67
|
if (_this._model.passages && _this._model.passages.length > 0) {
|
|
65
|
-
var printPassage = preparePrintPassage(_this._model);
|
|
68
|
+
var printPassage = preparePrintPassage(_this._model, _this._options);
|
|
66
69
|
|
|
67
70
|
var element = /*#__PURE__*/_react["default"].createElement(_stimulusTabs["default"], {
|
|
68
71
|
tabs: printPassage,
|
|
69
|
-
disabledTabs: true
|
|
72
|
+
disabledTabs: true,
|
|
73
|
+
showTeacherInstructions: _this._options.role === 'instructor'
|
|
70
74
|
});
|
|
71
75
|
|
|
72
76
|
_reactDom["default"].render(element, (0, _assertThisInitialized2["default"])(_this));
|
|
@@ -88,6 +92,11 @@ var PassagePrint = /*#__PURE__*/function (_HTMLElement) {
|
|
|
88
92
|
|
|
89
93
|
this._rerender();
|
|
90
94
|
}
|
|
95
|
+
}, {
|
|
96
|
+
key: "options",
|
|
97
|
+
set: function set(o) {
|
|
98
|
+
this._options = o;
|
|
99
|
+
}
|
|
91
100
|
}, {
|
|
92
101
|
key: "connectedCallback",
|
|
93
102
|
value: function connectedCallback() {}
|
package/lib/print.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/print.js"],"names":["log","preparePrintPassage","model","passages","map","passage","index","id","title","text","PassagePrint","_model","_session","_rerender","length","printPassage","element","React","createElement","StimulusTabs","tabs","disabledTabs","ReactDOM","render","leading","trailing","s","HTMLElement"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;;;;;AAEA,IAAMA,GAAG,GAAG,uBAAM,2BAAN,CAAZ;;AAEA,IAAMC,mBAAmB,GAAG,SAAtBA,mBAAsB,CAACC,KAAD;
|
|
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"}
|
package/lib/stimulus-tabs.js
CHANGED
|
@@ -72,6 +72,9 @@ var styles = function styles(theme) {
|
|
|
72
72
|
},
|
|
73
73
|
breakSpaces: {
|
|
74
74
|
whiteSpace: 'break-spaces'
|
|
75
|
+
},
|
|
76
|
+
teacherInstructions: {
|
|
77
|
+
marginBottom: theme.spacing.unit * 2
|
|
75
78
|
}
|
|
76
79
|
};
|
|
77
80
|
};
|
|
@@ -172,6 +175,33 @@ var StimulusTabs = /*#__PURE__*/function (_React$Component) {
|
|
|
172
175
|
}
|
|
173
176
|
|
|
174
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
|
+
}, {
|
|
175
205
|
key: "render",
|
|
176
206
|
value: function render() {
|
|
177
207
|
var _this2 = this;
|
|
@@ -179,7 +209,8 @@ var StimulusTabs = /*#__PURE__*/function (_React$Component) {
|
|
|
179
209
|
var _this$props = this.props,
|
|
180
210
|
classes = _this$props.classes,
|
|
181
211
|
tabs = _this$props.tabs,
|
|
182
|
-
disabledTabs = _this$props.disabledTabs
|
|
212
|
+
disabledTabs = _this$props.disabledTabs,
|
|
213
|
+
showTeacherInstructions = _this$props.showTeacherInstructions;
|
|
183
214
|
var activeTab = this.state.activeTab;
|
|
184
215
|
|
|
185
216
|
if (tabs && tabs.length > 1) {
|
|
@@ -203,7 +234,7 @@ var StimulusTabs = /*#__PURE__*/function (_React$Component) {
|
|
|
203
234
|
dangerouslySetInnerHTML: {
|
|
204
235
|
__html: _this2.parsedText(tab.title)
|
|
205
236
|
}
|
|
206
|
-
}), /*#__PURE__*/_react["default"].createElement(_renderUi.Purpose, {
|
|
237
|
+
}), _this2.renderInstructions(showTeacherInstructions, tab.teacherInstructions, disabledTabs), /*#__PURE__*/_react["default"].createElement(_renderUi.Purpose, {
|
|
207
238
|
purpose: "passage-text"
|
|
208
239
|
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
209
240
|
className: "text",
|
|
@@ -251,7 +282,7 @@ var StimulusTabs = /*#__PURE__*/function (_React$Component) {
|
|
|
251
282
|
id: "tabpanel-".concat(tab.id),
|
|
252
283
|
role: "tabpanel",
|
|
253
284
|
"aria-labelledby": "button-".concat(tab.id)
|
|
254
|
-
}, /*#__PURE__*/_react["default"].createElement(_renderUi.Purpose, {
|
|
285
|
+
}, _this2.renderInstructions(showTeacherInstructions, tab.teacherInstructions), /*#__PURE__*/_react["default"].createElement(_renderUi.Purpose, {
|
|
255
286
|
purpose: "passage-text"
|
|
256
287
|
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
257
288
|
key: tab.id,
|
|
@@ -261,14 +292,14 @@ var StimulusTabs = /*#__PURE__*/function (_React$Component) {
|
|
|
261
292
|
}))) : null;
|
|
262
293
|
}));
|
|
263
294
|
} else if (tabs && tabs[0]) {
|
|
264
|
-
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
295
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, this.renderInstructions(showTeacherInstructions, tabs[0].teacherInstructions, disabledTabs), /*#__PURE__*/_react["default"].createElement("div", {
|
|
265
296
|
className: (0, _classnames["default"])(classes.root, classes.tabContainer, classes.breakSpaces, 'passage')
|
|
266
297
|
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
267
298
|
className: "text",
|
|
268
299
|
dangerouslySetInnerHTML: {
|
|
269
300
|
__html: this.parsedText(tabs[0].text)
|
|
270
301
|
}
|
|
271
|
-
}));
|
|
302
|
+
})));
|
|
272
303
|
}
|
|
273
304
|
}
|
|
274
305
|
}]);
|
|
@@ -280,9 +311,11 @@ StimulusTabs.propTypes = {
|
|
|
280
311
|
tabs: _propTypes["default"].arrayOf(_propTypes["default"].shape({
|
|
281
312
|
id: _propTypes["default"].number.isRequired,
|
|
282
313
|
title: _propTypes["default"].string.isRequired,
|
|
283
|
-
text: _propTypes["default"].string.isRequired
|
|
314
|
+
text: _propTypes["default"].string.isRequired,
|
|
315
|
+
teacherInstructions: _propTypes["default"].string
|
|
284
316
|
}).isRequired).isRequired,
|
|
285
|
-
disabledTabs: _propTypes["default"].bool
|
|
317
|
+
disabledTabs: _propTypes["default"].bool,
|
|
318
|
+
showTeacherInstructions: _propTypes["default"].bool
|
|
286
319
|
};
|
|
287
320
|
|
|
288
321
|
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","root","flexGrow","backgroundColor","color","background","text","tab","fontSize","stickyTabs","position","top","title","textTransform","padding","spacing","unit","borderBottom","secondary","width","marginBottom","buttonContainer","tabContainer","breakSpaces","whiteSpace","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","classes","disabledTabs","state","map","__html","parsedText","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 { color, 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});\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 render() {\n const { classes, tabs, disabledTabs } = 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 <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 <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 <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\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 }).isRequired,\n ).isRequired,\n disabledTabs: 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","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"}
|