@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 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
 
@@ -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
 
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports["default"] = void 0;
7
7
  var _default = {
8
- teacherInstructionsEnabled: false,
8
+ teacherInstructionsEnabled: true,
9
9
  titleEnabled: true,
10
10
  subtitleEnabled: true,
11
11
  textEnabled: true,
@@ -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,KADf;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: false,\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"}
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"}
@@ -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 _ref, role, mode, normalizedQuestion, out;
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
- out = _objectSpread(_objectSpread({}, normalizedQuestion), {}, {
63
- teacherInstructions: null
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
- if (role === 'instructor' && (mode === 'view' || mode === 'evaluate')) {
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","session","env","role","mode","normalizedQuestion","out","teacherInstructions","teacherInstructionsEnabled","validate","config","errors","forEach","field","required"],"mappings":";;;;;;;;;;;;;;;;;AAAA;;;;;;AAEA,IAAMA,UAAU,GAAG,SAAbA,UAAa,CAACC,IAAD;AAAA,SAAU,CAACA,IAAI,IAAI,EAAT,EAAaC,OAAb,CAAqB,6BAArB,EAAoD,EAApD,CAAV;AAAA,CAAnB;;AAEO,SAASC,kBAAT,GAAwC;AAAA,MAAZC,KAAY,uEAAJ,EAAI;AAC7C,SAAO,IAAIC,OAAJ,CAAY,UAACC,OAAD,EAAa;AAC9BA,IAAAA,OAAO,iCACFC,oBADE,GAEFH,KAFE,EAAP;AAID,GALM,CAAP;AAMD;;AAEM,IAAMI,SAAS,GAAG,SAAZA,SAAY,CAACC,QAAD;AAAA,yCACpBF,oBADoB,GAEpBE,QAFoB;AAAA,CAAlB;AAKP;AACA;AACA;AACA;AACA;AACA;;;;;SACsBL,K;;;;;yFAAf,iBAAqBK,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,kBAFD,GAEsBN,SAAS,CAACC,QAAD,CAF/B;AAICM,YAAAA,GAJD,mCAKAD,kBALA;AAMHE,cAAAA,mBAAmB,EAAE;AANlB;;AASL,gBAAIJ,IAAI,KAAK,YAAT,KAA0BC,IAAI,KAAK,MAAT,IAAmBA,IAAI,KAAK,UAAtD,CAAJ,EAAuE;AACrE,kBAAIC,kBAAkB,CAACG,0BAAvB,EAAmD;AACjDF,gBAAAA,GAAG,CAACC,mBAAJ,GAA0BF,kBAAkB,CAACE,mBAA7C;AACD;AACF;;AAbI,6CAeED,GAfF;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;;;;AAkBA,IAAMG,QAAQ,GAAG,SAAXA,QAAW,GAA6B;AAAA,MAA5Bd,KAA4B,uEAApB,EAAoB;AAAA,MAAhBe,MAAgB,uEAAP,EAAO;AACnD,MAAMC,MAAM,GAAG,EAAf;AAEA,GAAC,qBAAD,EAAwB,OAAxB,EAAiC,UAAjC,EAA6C,QAA7C,EAAuD,MAAvD,EAA+DC,OAA/D,CAAuE,UAACC,KAAD,EAAW;AAAA;;AAChF,QAAI,iBAAAH,MAAM,CAACG,KAAD,CAAN,wDAAeC,QAAf,IAA2B,CAACvB,UAAU,CAACI,KAAK,CAACkB,KAAD,CAAN,CAA1C,EAA0D;AACxDF,MAAAA,MAAM,CAACE,KAAD,CAAN,GAAgB,yBAAhB;AACD;AACF,GAJD;AAMA,SAAOF,MAAP;AACD,CAVM","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({\n ...defaults,\n ...model,\n });\n });\n}\n\nexport const normalize = (question) => ({\n ...defaults,\n ...question,\n});\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 normalizedQuestion = normalize(question);\n\n const out = {\n ...normalizedQuestion,\n teacherInstructions: null\n };\n\n if (role === 'instructor' && (mode === 'view' || mode === 'evaluate')) {\n if (normalizedQuestion.teacherInstructionsEnabled) {\n out.teacherInstructions = normalizedQuestion.teacherInstructions;\n }\n }\n\n return out;\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"}
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"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pie-element/passage-controller",
3
3
  "private": true,
4
- "version": "1.4.0",
4
+ "version": "1.4.1",
5
5
  "description": "",
6
6
  "main": "lib/index.js",
7
7
  "module": "src/index.js",
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 = _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
- title: passage.title,
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","showTeacherInstructions","length","passagesTabs","map","passage","index","id","title","subtitle","author","text","teacherInstructions","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,yBAA2D,KAAKb,MAAhE;AAAA,+CAAQC,QAAR;AAAA,UAAQA,QAAR,sCAAmB,EAAnB;AAAA,+CAAuBa,uBAAvB;AAAA,UAAuBA,uBAAvB,sCAAiD,KAAjD;;AAEA,UAAI,KAAKd,MAAL,CAAYC,QAAZ,CAAqBc,MAArB,GAA8B,CAAlC,EAAqC;AACnC,YAAMC,YAAY,GAAGf,QAAQ,CAACgB,GAAT,CAAa,UAACC,OAAD,EAAUC,KAAV;AAAA,iBAAqB;AACrDC,YAAAA,EAAE,EAAED,KADiD;AAErDE,YAAAA,KAAK,EAAEH,OAAO,CAACG,KAFsC;AAGrDC,YAAAA,QAAQ,EAAEJ,OAAO,CAACI,QAHmC;AAIrDC,YAAAA,MAAM,EAAEL,OAAO,CAACK,MAJqC;AAKrDC,YAAAA,IAAI,EAAEN,OAAO,CAACM,IALuC;AAMrDC,YAAAA,mBAAmB,EAAEP,OAAO,CAACO,mBAAR,IAA+B;AANC,WAArB;AAAA,SAAb,CAArB;;AAQA,YAAMC,IAAI,gBAAGC,kBAAMC,aAAN,CAAoBC,wBAApB,EAAkC;AAC7CC,UAAAA,IAAI,EAAEd,YADuC;AAE7CF,UAAAA,uBAAuB,EAAvBA;AAF6C,SAAlC,CAAb;;AAKAiB,6BAASC,MAAT,CAAgBN,IAAhB,EAAsB,IAAtB,EAA4B;AAAA,iBAAM,yCAAW,MAAX,CAAN;AAAA,SAA5B;AACD;AACF;;;kDApDqCO,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 = [], showTeacherInstructions = false } = this._model;\n\n if (this._model.passages.length > 0) {\n const passagesTabs = passages.map((passage, index) => ({\n id: index,\n title: passage.title,\n subtitle: passage.subtitle,\n author: passage.author,\n text: passage.text,\n teacherInstructions: passage.teacherInstructions || '',\n }));\n const elem = React.createElement(StimulusTabs, {\n tabs: passagesTabs,\n showTeacherInstructions,\n });\n\n ReactDOM.render(elem, this, () => renderMath(this));\n }\n }\n}\n"],"file":"index.js"}
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
- title: passage.title,
46
- subtitle: passage.subtitle,
47
- author: passage.author,
48
- text: passage.text,
49
- teacherInstructions: isInstructor && passage.teacherInstructions
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
- showTeacherInstructions: _this._options.role === 'instructor'
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","subtitle","author","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;;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,KAAK,EAAEH,OAAO,CAACG,KAF8B;AAG7CC,MAAAA,QAAQ,EAAEJ,OAAO,CAACI,QAH2B;AAI7CC,MAAAA,MAAM,EAAEL,OAAO,CAACK,MAJ6B;AAK7CC,MAAAA,IAAI,EAAEN,OAAO,CAACM,IAL+B;AAM7CC,MAAAA,mBAAmB,EAAEX,YAAY,IAAII,OAAO,CAACO;AANA,KAArB;AAAA,GAAnB,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,CAAYX,QAAZ,IAAwB,MAAKW,MAAL,CAAYX,QAAZ,CAAqBe,MAArB,GAA8B,CAA1D,EAA6D;AAC3D,cAAMC,YAAY,GAAGrB,mBAAmB,CAAC,MAAKgB,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,CAAcb,IAAd,KAAuB;AAHA,WAAlC,CAAhB;;AAMAyB,+BAASC,MAAT,CAAgBR,OAAhB;AACD;AACF,OAZD,MAYO;AACLvB,QAAAA,GAAG,CAAC,MAAD,CAAH;AACD;AACF,KAjBc,EAkBf,EAlBe,EAmBf;AAAEgC,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 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 title: passage.title,\n subtitle: passage.subtitle,\n author: passage.author,\n text: passage.text,\n teacherInstructions: isInstructor && passage.teacherInstructions,\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"}
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"}
@@ -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(showTeacherInstructions, teacherInstructions) {
199
- var disabledTabs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
202
+ value: function renderInstructions(teacherInstructions) {
203
+ var disabledTabs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
200
204
 
201
- if (!showTeacherInstructions || !teacherInstructions) {
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, showTeacherInstructions, disabledTabs) {
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(showTeacherInstructions, tab.teacherInstructions, disabledTabs), /*#__PURE__*/_react["default"].createElement("h2", null, /*#__PURE__*/_react["default"].createElement("div", {
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, showTeacherInstructions, disabledTabs);
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.title)
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, showTeacherInstructions, disabledTabs) : null));
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);
@@ -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":"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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\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"}
@@ -1,5 +1,5 @@
1
1
  var defaults = {
2
- teacherInstructionsEnabled: false,
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
- ...defaults,
31
- ...question,
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 out = {
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
- teacherInstructions: null
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(showTeacherInstructions, teacherInstructions, disabledTabs = false) {
8719
- if (!showTeacherInstructions || !teacherInstructions) {
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: 140
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: 153
8745
+ lineNumber: 155
8745
8746
  }
8746
8747
  }, teacherInstructionsDiv);
8747
8748
  }
8748
- renderTab(tab, showTeacherInstructions, disabledTabs) {
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: 168
8760
+ lineNumber: 170
8760
8761
  }
8761
- }, this.renderInstructions(showTeacherInstructions, tab.teacherInstructions, disabledTabs), React$1.createElement('h2', {
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: 176
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: 177
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: 181
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: 186
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: 190
8807
+ lineNumber: 204
8807
8808
  }
8808
8809
  }));
8809
8810
  }
8810
8811
  render() {
8811
- const {classes, tabs, disabledTabs, showTeacherInstructions} = this.props;
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: 210
8823
+ lineNumber: 225
8823
8824
  }
8824
- }, disabledTabs || tabs.length === 1 ? tabs.map(tab => this.renderTab(tab, showTeacherInstructions, disabledTabs)) : React$1.createElement(React$1.Fragment, null, React$1.createElement(Tabs, {
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: 215
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.title)
8843
+ __html: this.parsedText(tab.label)
8843
8844
  },
8844
8845
  __self: this,
8845
8846
  __source: {
8846
8847
  fileName: _jsxFileName,
8847
- lineNumber: 228
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: 224
8860
+ lineNumber: 239
8860
8861
  }
8861
- }))), selectedTab ? this.renderTab(selectedTab, showTeacherInstructions, disabledTabs) : null));
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 = [], showTeacherInstructions = false} = this._model;
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
- title: passage.title,
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
@@ -2,7 +2,7 @@
2
2
  <!doctype html>
3
3
  <html>
4
4
  <head>
5
- <title>@pie-element/passage@2.21.3</title>
5
+ <title>@pie-element/passage@2.21.4</title>
6
6
  <script
7
7
  type="module"
8
8
  src="https://cdn.jsdelivr.net/npm/@pslb/demo-el@^1.0.0/dist/demo-el/demo-el.esm.js"></script>
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-element/passage",
3
- "version": "2.21.3",
3
+ "version": "2.21.4",
4
4
  "modules": [
5
5
  {
6
6
  "name": "@pie-lib/pie-toolbox-math-rendering-module",
package/module/print.html CHANGED
@@ -2,7 +2,7 @@
2
2
  <!doctype html>
3
3
  <html>
4
4
  <head>
5
- <title>@pie-element/passage@2.21.3</title>
5
+ <title>@pie-element/passage@2.21.4</title>
6
6
  <link
7
7
  href="https://fonts.googleapis.com/css?family=Roboto&display=swap"
8
8
  rel="stylesheet"
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(showTeacherInstructions, teacherInstructions, disabledTabs = false) {
8682
- if (!showTeacherInstructions || !teacherInstructions) {
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: 140
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: 153
8708
+ lineNumber: 155
8708
8709
  }
8709
8710
  }, teacherInstructionsDiv);
8710
8711
  }
8711
- renderTab(tab, showTeacherInstructions, disabledTabs) {
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: 168
8723
+ lineNumber: 170
8723
8724
  }
8724
- }, this.renderInstructions(showTeacherInstructions, tab.teacherInstructions, disabledTabs), React$1.createElement('h2', {
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: 176
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: 177
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: 181
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: 186
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: 190
8770
+ lineNumber: 204
8770
8771
  }
8771
8772
  }));
8772
8773
  }
8773
8774
  render() {
8774
- const {classes, tabs, disabledTabs, showTeacherInstructions} = this.props;
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: 210
8786
+ lineNumber: 225
8786
8787
  }
8787
- }, disabledTabs || tabs.length === 1 ? tabs.map(tab => this.renderTab(tab, showTeacherInstructions, disabledTabs)) : React$1.createElement(React$1.Fragment, null, React$1.createElement(Tabs, {
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: 215
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.title)
8806
+ __html: this.parsedText(tab.label)
8806
8807
  },
8807
8808
  __self: this,
8808
8809
  __source: {
8809
8810
  fileName: _jsxFileName,
8810
- lineNumber: 228
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: 224
8823
+ lineNumber: 239
8823
8824
  }
8824
- }))), selectedTab ? this.renderTab(selectedTab, showTeacherInstructions, disabledTabs) : null));
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
- title: passage.title,
8851
- subtitle: passage.subtitle,
8852
- author: passage.author,
8853
- text: passage.text,
8854
- teacherInstructions: isInstructor && passage.teacherInstructions
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
- showTeacherInstructions: this._options.role === 'instructor'
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.4-next.3+3f46db2cf",
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": "3f46db2cf8b31e3dfabd60b0f5664e294d50e500",
20
+ "gitHead": "706f474da3d9befb5e3633180c35672b02c3b685",
21
21
  "scripts": {
22
22
  "postpublish": "../../scripts/postpublish"
23
23
  },