@pie-element/passage 2.13.1-next.3 → 2.13.1-next.5
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/docs/demo/generate.js +20 -18
- package/lib/index.js +7 -2
- package/lib/index.js.map +1 -1
- package/lib/print.js +4 -2
- package/lib/print.js.map +1 -1
- package/lib/stimulus-tabs.js +94 -103
- package/lib/stimulus-tabs.js.map +1 -1
- package/module/demo.js +20 -18
- package/module/element.js +162 -182
- package/module/print-demo.js +20 -18
- package/module/print.js +161 -181
- package/package.json +2 -2
package/docs/demo/generate.js
CHANGED
|
@@ -3,28 +3,30 @@ exports.model = (id, element) => ({
|
|
|
3
3
|
element,
|
|
4
4
|
passages: [
|
|
5
5
|
{
|
|
6
|
-
teacherInstructions: 'Teacher instructions tab
|
|
6
|
+
teacherInstructions: 'Teacher instructions for first tab',
|
|
7
7
|
title: 'Hope Is the Thing with Feathers',
|
|
8
|
-
|
|
8
|
+
subtitle: 'from <em>The Complete Poems of Emily Dickinson</em>',
|
|
9
|
+
author: 'by Emily Dickinson',
|
|
10
|
+
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>',
|
|
9
11
|
},
|
|
10
12
|
{
|
|
11
13
|
title: 'Ineskeen Road, July Evening',
|
|
12
|
-
text: `The bicycles go by in twos and threes -<br/>
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
14
|
+
text: `The bicycles go by in twos and threes -<br/>
|
|
15
|
+
There's a dance in Billy Brennan's barn tonight,<br/>
|
|
16
|
+
And there's the half-talk code of mysteries<br/>
|
|
17
|
+
And the wink-and-elbow language of delight.<br/>
|
|
18
|
+
Half-past eight and there is not a spot<br/>
|
|
19
|
+
Upon a mile of road, no shadow thrown<br/>
|
|
20
|
+
That might turn out a man or woman, not<br/>
|
|
21
|
+
A footfall tapping secrecies of stone. <br/>
|
|
22
|
+
<p/>
|
|
23
|
+
I have what every poet hates in spite<br/>
|
|
24
|
+
Of all the solemn talk of contemplation.<br/>
|
|
25
|
+
Oh, Alexander Selkirk knew the plight<br/>
|
|
26
|
+
Of being king and government and nation.<br/>
|
|
27
|
+
A road, a mile of kingdom. I am king<br/>
|
|
28
|
+
Of banks and stones and every blooming thing.<br/>
|
|
29
|
+
`,
|
|
28
30
|
},
|
|
29
31
|
],
|
|
30
32
|
});
|
package/lib/index.js
CHANGED
|
@@ -72,14 +72,19 @@ var PiePassage = /*#__PURE__*/function (_HTMLElement) {
|
|
|
72
72
|
}, {
|
|
73
73
|
key: "_render",
|
|
74
74
|
value: function _render() {
|
|
75
|
-
var _this$_model
|
|
75
|
+
var _this$_model = this._model,
|
|
76
|
+
_this$_model$passages = _this$_model.passages,
|
|
77
|
+
passages = _this$_model$passages === void 0 ? [] : _this$_model$passages,
|
|
78
|
+
_this$_model$showTeac = _this$_model.showTeacherInstructions,
|
|
76
79
|
showTeacherInstructions = _this$_model$showTeac === void 0 ? false : _this$_model$showTeac;
|
|
77
80
|
|
|
78
81
|
if (this._model.passages.length > 0) {
|
|
79
|
-
var passagesTabs =
|
|
82
|
+
var passagesTabs = passages.map(function (passage, index) {
|
|
80
83
|
return {
|
|
81
84
|
id: index,
|
|
82
85
|
title: passage.title,
|
|
86
|
+
subtitle: passage.subtitle,
|
|
87
|
+
author: passage.author,
|
|
83
88
|
text: passage.text,
|
|
84
89
|
teacherInstructions: passage.teacherInstructions || ''
|
|
85
90
|
};
|
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","showTeacherInstructions","length","passagesTabs","map","passage","index","id","title","text","teacherInstructions","elem","React","createElement","StimulusTabs","tabs","ReactDOM","render","HTMLElement"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;;;;;
|
|
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","subtitle","author","text","teacherInstructions","elem","React","createElement","StimulusTabs","tabs","ReactDOM","render","HTMLElement"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;;;;;IAEqBA,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,yBAA2D,KAAKR,MAAhE;AAAA,+CAAQC,QAAR;AAAA,UAAQA,QAAR,sCAAmB,EAAnB;AAAA,+CAAuBS,uBAAvB;AAAA,UAAuBA,uBAAvB,sCAAiD,KAAjD;;AAEA,UAAI,KAAKV,MAAL,CAAYC,QAAZ,CAAqBU,MAArB,GAA8B,CAAlC,EAAqC;AACnC,YAAMC,YAAY,GAAGX,QAAQ,CAACY,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;AACD;AACF;;;kDA7CqCO,W","sourcesContent":["import { ModelSetEvent } from '@pie-framework/pie-player-events';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\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 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 { 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);\n }\n }\n}\n"],"file":"index.js"}
|
package/lib/print.js
CHANGED
|
@@ -38,13 +38,15 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Re
|
|
|
38
38
|
var log = (0, _debug["default"])('pie-element:passage:print');
|
|
39
39
|
|
|
40
40
|
var preparePrintPassage = function preparePrintPassage(model, opts) {
|
|
41
|
-
var
|
|
41
|
+
var isInstructor = opts.role === 'instructor';
|
|
42
42
|
return model.passages.map(function (passage, index) {
|
|
43
43
|
return {
|
|
44
44
|
id: index,
|
|
45
45
|
title: passage.title,
|
|
46
|
+
subtitle: passage.subtitle,
|
|
47
|
+
author: passage.author,
|
|
46
48
|
text: passage.text,
|
|
47
|
-
teacherInstructions:
|
|
49
|
+
teacherInstructions: isInstructor && passage.teacherInstructions
|
|
48
50
|
};
|
|
49
51
|
});
|
|
50
52
|
};
|
package/lib/print.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/print.js"],"names":["log","preparePrintPassage","model","opts","
|
|
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;;AACA;;;;;;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 StimulusTabs from './stimulus-tabs';\nimport debug from 'debug';\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"}
|
package/lib/stimulus-tabs.js
CHANGED
|
@@ -41,39 +41,42 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Re
|
|
|
41
41
|
|
|
42
42
|
var styles = function styles(theme) {
|
|
43
43
|
return {
|
|
44
|
-
|
|
44
|
+
passages: {
|
|
45
45
|
flexGrow: 1,
|
|
46
46
|
backgroundColor: _renderUi.color.background(),
|
|
47
47
|
color: _renderUi.color.text()
|
|
48
48
|
},
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
49
|
+
passage: {
|
|
50
|
+
backgroundColor: _renderUi.color.background(),
|
|
51
|
+
color: _renderUi.color.text(),
|
|
52
|
+
padding: theme.spacing.unit * 2
|
|
53
|
+
},
|
|
54
|
+
passageTitle: {
|
|
55
|
+
fontSize: '1.75rem'
|
|
55
56
|
},
|
|
57
|
+
passageSubtitle: {
|
|
58
|
+
fontSize: '1.5rem'
|
|
59
|
+
},
|
|
60
|
+
passageAuthor: {
|
|
61
|
+
fontSize: '1.25rem'
|
|
62
|
+
},
|
|
63
|
+
passageText: {},
|
|
56
64
|
stickyTabs: {
|
|
57
65
|
background: _renderUi.color.background(),
|
|
58
66
|
position: 'sticky',
|
|
59
67
|
top: 0
|
|
60
68
|
},
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
69
|
+
tab: {
|
|
70
|
+
background: theme.palette.common.white,
|
|
71
|
+
// replace with color.background() once PD-2801 is DONE
|
|
72
|
+
fontSize: 'inherit',
|
|
73
|
+
color: theme.palette.common.black // remove when PD-2801 is DONE
|
|
74
|
+
|
|
67
75
|
},
|
|
68
|
-
|
|
76
|
+
tabButton: {
|
|
69
77
|
background: theme.palette.common.white // replace with color.background() once PD-2801 is DONE
|
|
70
78
|
|
|
71
79
|
},
|
|
72
|
-
tabContainer: {
|
|
73
|
-
backgroundColor: _renderUi.color.background(),
|
|
74
|
-
color: _renderUi.color.text(),
|
|
75
|
-
padding: theme.spacing.unit * 2
|
|
76
|
-
},
|
|
77
80
|
breakSpaces: {
|
|
78
81
|
whiteSpace: 'break-spaces'
|
|
79
82
|
},
|
|
@@ -159,7 +162,8 @@ var StimulusTabs = /*#__PURE__*/function (_React$Component) {
|
|
|
159
162
|
_this.handleChange(event, tabs[newTabIndex].id);
|
|
160
163
|
}
|
|
161
164
|
});
|
|
162
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "parsedText", function (
|
|
165
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "parsedText", function () {
|
|
166
|
+
var text = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
163
167
|
// fix imported audio content for Safari PD-1391
|
|
164
168
|
var div = document.createElement('div');
|
|
165
169
|
div.innerHTML = text.replace(/(<br\/>\n)/g, '<br/>');
|
|
@@ -205,6 +209,39 @@ var StimulusTabs = /*#__PURE__*/function (_React$Component) {
|
|
|
205
209
|
}
|
|
206
210
|
}, teacherInstructionsDiv);
|
|
207
211
|
}
|
|
212
|
+
}, {
|
|
213
|
+
key: "renderTab",
|
|
214
|
+
value: function renderTab(tab, showTeacherInstructions, disabledTabs) {
|
|
215
|
+
var classes = this.props.classes;
|
|
216
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
217
|
+
className: (0, _classnames["default"])(classes.passage, 'passage'),
|
|
218
|
+
key: tab.id,
|
|
219
|
+
id: "tabpanel-".concat(tab.id),
|
|
220
|
+
role: "tabpanel",
|
|
221
|
+
"aria-labelledby": "button-".concat(tab.id)
|
|
222
|
+
}, this.renderInstructions(showTeacherInstructions, tab.teacherInstructions, disabledTabs), /*#__PURE__*/_react["default"].createElement("h2", null, /*#__PURE__*/_react["default"].createElement("div", {
|
|
223
|
+
className: (0, _classnames["default"])(classes.passageTitle, 'title'),
|
|
224
|
+
dangerouslySetInnerHTML: {
|
|
225
|
+
__html: this.parsedText(tab.title)
|
|
226
|
+
}
|
|
227
|
+
}), /*#__PURE__*/_react["default"].createElement("div", {
|
|
228
|
+
className: (0, _classnames["default"])(classes.passageSubtitle, 'subtitle'),
|
|
229
|
+
dangerouslySetInnerHTML: {
|
|
230
|
+
__html: this.parsedText(tab.subtitle)
|
|
231
|
+
}
|
|
232
|
+
})), /*#__PURE__*/_react["default"].createElement("div", {
|
|
233
|
+
className: (0, _classnames["default"])(classes.passageAuthor, 'author'),
|
|
234
|
+
dangerouslySetInnerHTML: {
|
|
235
|
+
__html: this.parsedText(tab.author)
|
|
236
|
+
}
|
|
237
|
+
}), /*#__PURE__*/_react["default"].createElement("div", {
|
|
238
|
+
key: tab.id,
|
|
239
|
+
className: (0, _classnames["default"])(classes.passageText, 'text'),
|
|
240
|
+
dangerouslySetInnerHTML: {
|
|
241
|
+
__html: this.parsedText(tab.text)
|
|
242
|
+
}
|
|
243
|
+
}));
|
|
244
|
+
}
|
|
208
245
|
}, {
|
|
209
246
|
key: "render",
|
|
210
247
|
value: function render() {
|
|
@@ -217,94 +254,46 @@ var StimulusTabs = /*#__PURE__*/function (_React$Component) {
|
|
|
217
254
|
showTeacherInstructions = _this$props.showTeacherInstructions;
|
|
218
255
|
var activeTab = this.state.activeTab;
|
|
219
256
|
|
|
220
|
-
if (tabs && tabs.length
|
|
221
|
-
return
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
257
|
+
if (!(tabs !== null && tabs !== void 0 && tabs.length)) {
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
var selectedTab = (tabs || []).find(function (tab) {
|
|
262
|
+
return tab.id === activeTab;
|
|
263
|
+
});
|
|
264
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
265
|
+
className: (0, _classnames["default"])(classes.passages, (0, _defineProperty2["default"])({}, classes.breakSpaces, tabs.length === 1), 'passages')
|
|
266
|
+
}, disabledTabs || tabs.length === 1 ? tabs.map(function (tab) {
|
|
267
|
+
return _this2.renderTab(tab, showTeacherInstructions, disabledTabs);
|
|
268
|
+
}) : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_Tabs["default"], {
|
|
269
|
+
classes: {
|
|
270
|
+
root: classes.stickyTabs,
|
|
271
|
+
flexContainer: classes.tabButton
|
|
272
|
+
},
|
|
273
|
+
value: activeTab,
|
|
274
|
+
onChange: this.handleChange
|
|
275
|
+
}, tabs.map(function (tab) {
|
|
276
|
+
return /*#__PURE__*/_react["default"].createElement(_Tab["default"], {
|
|
277
|
+
className: classes.tab,
|
|
278
|
+
key: tab.id,
|
|
279
|
+
id: "button-".concat(tab.id),
|
|
280
|
+
label: /*#__PURE__*/_react["default"].createElement("span", {
|
|
238
281
|
dangerouslySetInnerHTML: {
|
|
239
282
|
__html: _this2.parsedText(tab.title)
|
|
240
283
|
}
|
|
241
|
-
}),
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
}
|
|
249
|
-
}))));
|
|
250
|
-
})) : /*#__PURE__*/_react["default"].createElement("div", {
|
|
251
|
-
className: (0, _classnames["default"])(classes.root, 'passages')
|
|
252
|
-
}, /*#__PURE__*/_react["default"].createElement(_Tabs["default"], {
|
|
253
|
-
classes: {
|
|
254
|
-
root: classes.stickyTabs,
|
|
255
|
-
flexContainer: classes.buttonContainer
|
|
284
|
+
}),
|
|
285
|
+
value: tab.id,
|
|
286
|
+
tabIndex: activeTab === tab.id ? 0 : -1,
|
|
287
|
+
"aria-controls": "tabpanel-".concat(tab.id),
|
|
288
|
+
"aria-selected": activeTab === tab.id,
|
|
289
|
+
onFocus: function onFocus() {
|
|
290
|
+
return _this2.handleChange(null, tab.id);
|
|
256
291
|
},
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
}, tabs.map(function (tab) {
|
|
260
|
-
return /*#__PURE__*/_react["default"].createElement(_Tab["default"], {
|
|
261
|
-
className: classes.tab,
|
|
262
|
-
key: tab.id,
|
|
263
|
-
id: "button-".concat(tab.id),
|
|
264
|
-
label: /*#__PURE__*/_react["default"].createElement(_renderUi.Purpose, {
|
|
265
|
-
purpose: "passage-title"
|
|
266
|
-
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
267
|
-
dangerouslySetInnerHTML: {
|
|
268
|
-
__html: _this2.parsedText(tab.title)
|
|
269
|
-
}
|
|
270
|
-
})),
|
|
271
|
-
value: tab.id,
|
|
272
|
-
tabIndex: activeTab === tab.id ? 0 : -1,
|
|
273
|
-
"aria-controls": "tabpanel-".concat(tab.id),
|
|
274
|
-
"aria-selected": activeTab === tab.id,
|
|
275
|
-
onFocus: function onFocus() {
|
|
276
|
-
return _this2.handleChange(null, tab.id);
|
|
277
|
-
},
|
|
278
|
-
onKeyDown: function onKeyDown(event) {
|
|
279
|
-
return _this2.handleKeyDown(event, tab.id);
|
|
280
|
-
}
|
|
281
|
-
});
|
|
282
|
-
})), tabs.map(function (tab) {
|
|
283
|
-
return activeTab === tab.id ? /*#__PURE__*/_react["default"].createElement("div", {
|
|
284
|
-
className: classes.tabContainer,
|
|
285
|
-
key: tab.id,
|
|
286
|
-
id: "tabpanel-".concat(tab.id),
|
|
287
|
-
role: "tabpanel",
|
|
288
|
-
"aria-labelledby": "button-".concat(tab.id)
|
|
289
|
-
}, _this2.renderInstructions(showTeacherInstructions, tab.teacherInstructions), /*#__PURE__*/_react["default"].createElement(_renderUi.Purpose, {
|
|
290
|
-
purpose: "passage-text"
|
|
291
|
-
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
292
|
-
key: tab.id,
|
|
293
|
-
dangerouslySetInnerHTML: {
|
|
294
|
-
__html: _this2.parsedText(tab.text)
|
|
295
|
-
}
|
|
296
|
-
}))) : null;
|
|
297
|
-
}));
|
|
298
|
-
} else if (tabs && tabs[0]) {
|
|
299
|
-
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, this.renderInstructions(showTeacherInstructions, tabs[0].teacherInstructions, disabledTabs), /*#__PURE__*/_react["default"].createElement("div", {
|
|
300
|
-
className: (0, _classnames["default"])(classes.root, classes.tabContainer, classes.breakSpaces, 'passage')
|
|
301
|
-
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
302
|
-
className: "text",
|
|
303
|
-
dangerouslySetInnerHTML: {
|
|
304
|
-
__html: this.parsedText(tabs[0].text)
|
|
292
|
+
onKeyDown: function onKeyDown(event) {
|
|
293
|
+
return _this2.handleKeyDown(event, tab.id);
|
|
305
294
|
}
|
|
306
|
-
})
|
|
307
|
-
}
|
|
295
|
+
});
|
|
296
|
+
})), selectedTab ? this.renderTab(selectedTab, showTeacherInstructions, disabledTabs) : null));
|
|
308
297
|
}
|
|
309
298
|
}]);
|
|
310
299
|
return StimulusTabs;
|
|
@@ -315,6 +304,8 @@ StimulusTabs.propTypes = {
|
|
|
315
304
|
tabs: _propTypes["default"].arrayOf(_propTypes["default"].shape({
|
|
316
305
|
id: _propTypes["default"].number.isRequired,
|
|
317
306
|
title: _propTypes["default"].string.isRequired,
|
|
307
|
+
subtitle: _propTypes["default"].string,
|
|
308
|
+
author: _propTypes["default"].string,
|
|
318
309
|
text: _propTypes["default"].string.isRequired,
|
|
319
310
|
teacherInstructions: _propTypes["default"].string
|
|
320
311
|
}).isRequired).isRequired,
|
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","palette","common","white","fontSize","black","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 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 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: theme.palette.common.white, // replace with color.background() once PD-2801 is DONE\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"}
|
|
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","breakSpaces","whiteSpace","teacherInstructions","marginBottom","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","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 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\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 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\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, { [classes.breakSpaces]: tabs.length === 1 }, '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"}
|
package/module/demo.js
CHANGED
|
@@ -8,28 +8,30 @@ generate.model = (id, element) => ({
|
|
|
8
8
|
element,
|
|
9
9
|
passages: [
|
|
10
10
|
{
|
|
11
|
-
teacherInstructions: 'Teacher instructions tab
|
|
11
|
+
teacherInstructions: 'Teacher instructions for first tab',
|
|
12
12
|
title: 'Hope Is the Thing with Feathers',
|
|
13
|
-
|
|
13
|
+
subtitle: 'from <em>The Complete Poems of Emily Dickinson</em>',
|
|
14
|
+
author: 'by Emily Dickinson',
|
|
15
|
+
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>',
|
|
14
16
|
},
|
|
15
17
|
{
|
|
16
18
|
title: 'Ineskeen Road, July Evening',
|
|
17
|
-
text: `The bicycles go by in twos and threes -<br/>
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
19
|
+
text: `The bicycles go by in twos and threes -<br/>
|
|
20
|
+
There's a dance in Billy Brennan's barn tonight,<br/>
|
|
21
|
+
And there's the half-talk code of mysteries<br/>
|
|
22
|
+
And the wink-and-elbow language of delight.<br/>
|
|
23
|
+
Half-past eight and there is not a spot<br/>
|
|
24
|
+
Upon a mile of road, no shadow thrown<br/>
|
|
25
|
+
That might turn out a man or woman, not<br/>
|
|
26
|
+
A footfall tapping secrecies of stone. <br/>
|
|
27
|
+
<p/>
|
|
28
|
+
I have what every poet hates in spite<br/>
|
|
29
|
+
Of all the solemn talk of contemplation.<br/>
|
|
30
|
+
Oh, Alexander Selkirk knew the plight<br/>
|
|
31
|
+
Of being king and government and nation.<br/>
|
|
32
|
+
A road, a mile of kingdom. I am king<br/>
|
|
33
|
+
Of banks and stones and every blooming thing.<br/>
|
|
34
|
+
`,
|
|
33
35
|
},
|
|
34
36
|
],
|
|
35
37
|
});
|