@pie-element/categorize 9.14.1-next.2 → 9.14.2-beta.1
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 +24 -0
- package/configure/CHANGELOG.md +24 -0
- package/configure/lib/design/categories/RowLabel.js +3 -3
- package/configure/lib/design/categories/RowLabel.js.map +1 -1
- package/configure/lib/design/categories/alternateResponses.js +1 -1
- package/configure/lib/design/categories/alternateResponses.js.map +1 -1
- package/configure/lib/design/categories/choice-preview.js +2 -2
- package/configure/lib/design/categories/choice-preview.js.map +1 -1
- package/configure/lib/design/categories/droppable-placeholder.js +1 -1
- package/configure/lib/design/categories/droppable-placeholder.js.map +1 -1
- package/configure/lib/design/categories/index.js +32 -2
- package/configure/lib/design/categories/index.js.map +1 -1
- package/configure/lib/design/choices/choice.js +2 -2
- package/configure/lib/design/choices/choice.js.map +1 -1
- package/configure/lib/design/choices/index.js +2 -2
- package/configure/lib/design/choices/index.js.map +1 -1
- package/configure/lib/design/index.js +8 -8
- package/configure/lib/design/index.js.map +1 -1
- package/configure/lib/design/input-header.js +2 -2
- package/configure/lib/design/input-header.js.map +1 -1
- package/configure/lib/index.js +1 -1
- package/configure/lib/index.js.map +1 -1
- package/configure/package.json +8 -2
- package/controller/CHANGELOG.md +23 -0
- package/controller/lib/index.js +4 -4
- package/controller/lib/index.js.map +1 -1
- package/controller/package.json +5 -2
- package/docs/demo/.pie/.configure/package.json +10 -0
- package/docs/demo/.pie/.controllers/package.json +10 -0
- package/docs/demo/.pie/info.entry.js +89 -0
- package/docs/demo/.pie/info.webpack.config.js +108 -0
- package/docs/demo/.pie/package.json +10 -0
- package/docs/demo/pie.manifest.json +11 -0
- package/lib/categorize/categories.js +1 -1
- package/lib/categorize/categories.js.map +1 -1
- package/lib/categorize/category.js +1 -1
- package/lib/categorize/category.js.map +1 -1
- package/lib/categorize/choice.js +2 -2
- package/lib/categorize/choice.js.map +1 -1
- package/lib/categorize/droppable-placeholder.js +1 -1
- package/lib/categorize/droppable-placeholder.js.map +1 -1
- package/lib/categorize/index.js +7 -7
- package/lib/categorize/index.js.map +1 -1
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/package.json +9 -3
- package/LICENSE.md +0 -5
package/lib/categorize/index.js
CHANGED
|
@@ -29,21 +29,21 @@ var _choices = _interopRequireDefault(require("./choices"));
|
|
|
29
29
|
|
|
30
30
|
var _categories = _interopRequireDefault(require("./categories"));
|
|
31
31
|
|
|
32
|
-
var _correctAnswerToggle = require("@pie-lib/
|
|
32
|
+
var _correctAnswerToggle = _interopRequireDefault(require("@pie-lib/correct-answer-toggle"));
|
|
33
33
|
|
|
34
34
|
var _styles = require("@material-ui/core/styles");
|
|
35
35
|
|
|
36
|
-
var _categorize = require("@pie-lib/
|
|
36
|
+
var _categorize = require("@pie-lib/categorize");
|
|
37
37
|
|
|
38
|
-
var _drag = require("@pie-lib/
|
|
38
|
+
var _drag = require("@pie-lib/drag");
|
|
39
39
|
|
|
40
|
-
var _renderUi = require("@pie-lib/
|
|
40
|
+
var _renderUi = require("@pie-lib/render-ui");
|
|
41
41
|
|
|
42
42
|
var _debug = _interopRequireDefault(require("debug"));
|
|
43
43
|
|
|
44
|
-
var _translator = _interopRequireDefault(require("@pie-lib/
|
|
44
|
+
var _translator = _interopRequireDefault(require("@pie-lib/translator"));
|
|
45
45
|
|
|
46
|
-
var _configUi = require("@pie-lib/
|
|
46
|
+
var _configUi = require("@pie-lib/config-ui");
|
|
47
47
|
|
|
48
48
|
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); }; }
|
|
49
49
|
|
|
@@ -260,7 +260,7 @@ var Categorize = /*#__PURE__*/function (_React$Component) {
|
|
|
260
260
|
prompt: model.prompt,
|
|
261
261
|
autoplayAudioEnabled: autoplayAudioEnabled,
|
|
262
262
|
customAudioButton: customAudioButton
|
|
263
|
-
}), /*#__PURE__*/_react["default"].createElement(_correctAnswerToggle
|
|
263
|
+
}), /*#__PURE__*/_react["default"].createElement(_correctAnswerToggle["default"], {
|
|
264
264
|
show: showCorrect || correct === false,
|
|
265
265
|
toggled: showCorrect,
|
|
266
266
|
onToggle: this.toggleShowCorrect,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/categorize/index.jsx"],"names":["translator","Translator","log","Categorize","props","c","onAnswersChange","session","answers","id","categoryId","choiceIndex","draggedChoice","model","maxChoicesPerCategory","newAnswers","undefined","answer","find","category","choices","length","setState","showMaxChoiceAlert","removeChoice","showCorrect","state","onShowCorrectToggle","choicePosition","flexDirection","correctResponse","some","correctRes","alternateResponses","nextProps","nextModel","note","language","t","lng","classes","choicesPosition","extraCSSRules","showNote","env","autoplayAudioEnabled","customAudioButton","mode","role","style","getPositionDirection","gap","categories","correct","disabled","rowLabels","categoriesPerRow","fontSizeFactor","nbOfRows","Math","ceil","existAlternate","existAlternateResponse","displayNote","alertMessage","alertTitle","onCloseText","showRationale","rationale","showTeacherInstructions","teacherInstructions","mainContainer","hidden","visible","collapsible","prompt","toggleShowCorrect","categorize","display","flex","dropChoice","slice","__html","correctness","feedback","React","Component","PropTypes","object","isRequired","shape","arrayOf","choice","string","func","CategorizeProvider","uid","generateId","styles","theme","color","text","backgroundColor","background","position","marginBottom","spacing","unit","paddingBottom"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport Choices from './choices';\nimport Categories from './categories';\nimport { CorrectAnswerToggle } from '@pie-lib/pie-toolbox/correct-answer-toggle';\nimport { withStyles } from '@material-ui/core/styles';\nimport { buildState, removeChoiceFromCategory, moveChoiceToCategory } from '@pie-lib/pie-toolbox/categorize';\nimport { withDragContext, uid } from '@pie-lib/pie-toolbox/drag';\nimport { color, Feedback, Collapsible, hasText, hasMedia, PreviewPrompt, UiLayout } from '@pie-lib/pie-toolbox/render-ui';\nimport debug from 'debug';\nimport Translator from '@pie-lib/pie-toolbox/translator';\nimport { AlertDialog } from '@pie-lib/pie-toolbox/config-ui';\nconst { translator } = Translator;\n\nconst log = debug('@pie-ui:categorize');\n\nexport class Categorize extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n model: PropTypes.object,\n session: PropTypes.shape({\n answers: PropTypes.arrayOf(\n PropTypes.shape({\n choice: PropTypes.string,\n category: PropTypes.string,\n }),\n ),\n }),\n onAnswersChange: PropTypes.func.isRequired,\n onShowCorrectToggle: PropTypes.func.isRequired,\n };\n\n static defaultProps = {\n disabled: false,\n };\n\n constructor(props) {\n super(props);\n\n this.state = {\n showCorrect: false,\n showMaxChoiceAlert: false,\n };\n }\n\n removeChoice = (c) => {\n log('[removeChoice]: ', c);\n const { onAnswersChange, session } = this.props;\n const answers = removeChoiceFromCategory(c.id, c.categoryId, c.choiceIndex, session.answers);\n onAnswersChange(answers);\n };\n\n dropChoice = (categoryId, draggedChoice) => {\n const { session, onAnswersChange, model } = this.props;\n const { maxChoicesPerCategory = 0 } = model || {};\n const { answers = [] } = session || {};\n let newAnswers;\n if (draggedChoice) {\n log('[dropChoice] category: ', draggedChoice.categoryId, 'choice: ', draggedChoice);\n } else {\n log('[dropChoice] category: ', undefined, 'choice: ', undefined);\n }\n\n const answer = answers.find((answer) => answer.category === categoryId);\n\n // treat special case to replace the existing choice with the new one when maxChoicesPerCategory = 1\n if (draggedChoice && maxChoicesPerCategory === 1 && answer && answer.choices && answer.choices.length === 1) {\n newAnswers = moveChoiceToCategory(\n draggedChoice.id,\n draggedChoice.categoryId,\n categoryId,\n draggedChoice.choiceIndex,\n answers,\n );\n newAnswers = removeChoiceFromCategory(answer.choices[0], categoryId, 0, answers);\n }\n\n // treat special case when there are as many choices as maxChoicesPerCategory is\n else if (\n draggedChoice &&\n maxChoicesPerCategory > 1 &&\n answer &&\n answer.choices &&\n answer.choices.length === maxChoicesPerCategory\n ) {\n newAnswers = draggedChoice.categoryId\n ? moveChoiceToCategory(\n draggedChoice.id,\n draggedChoice.categoryId,\n draggedChoice.categoryId,\n draggedChoice.choiceIndex,\n answers,\n )\n : removeChoiceFromCategory(draggedChoice.id, draggedChoice.categoryId, draggedChoice.choiceIndex, answers);\n this.setState({ showMaxChoiceAlert: true });\n }\n\n // treat special case when there are more choices that maxChoicesPerCategory is (testing purpose in pits)\n else if (maxChoicesPerCategory !== 0 && answer && answer.choices && answer.choices.length > maxChoicesPerCategory) {\n newAnswers = answers;\n this.setState({ showMaxChoiceAlert: true });\n } else {\n newAnswers = draggedChoice\n ? moveChoiceToCategory(\n draggedChoice.id,\n draggedChoice.categoryId,\n categoryId,\n draggedChoice.choiceIndex,\n answers,\n )\n : this.removeChoice(categoryId);\n }\n\n if (draggedChoice) {\n onAnswersChange(newAnswers);\n }\n };\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n const { model } = this.props;\n const { model: nextModel } = nextProps;\n\n // check if the note is the default one for prev language and change to the default one for new language\n // this check is necessary in order to diferanciate between default and authour defined note\n // and only change between languages for default ones\n if (\n model.note &&\n model.language &&\n model.language !== nextModel.language &&\n model.note === translator.t('common:commonCorrectAnswerWithAlternates', { lng: model.language })\n ) {\n model.note = translator.t('common:commonCorrectAnswerWithAlternates', { lng: nextModel.language });\n }\n\n this.setState({ showCorrect: false });\n }\n\n toggleShowCorrect = () =>\n this.setState({ showCorrect: !this.state.showCorrect }, () => {\n this.props.onShowCorrectToggle();\n });\n\n getPositionDirection = (choicePosition) => {\n let flexDirection;\n\n switch (choicePosition) {\n case 'left':\n flexDirection = 'row-reverse';\n break;\n case 'right':\n flexDirection = 'row';\n break;\n case 'below':\n flexDirection = 'column';\n break;\n default:\n // above\n flexDirection = 'column-reverse';\n break;\n }\n\n return flexDirection;\n };\n\n existAlternateResponse = (correctResponse) =>\n correctResponse?.some((correctRes) => correctRes.alternateResponses?.length > 0);\n\n render() {\n const { classes, model, session } = this.props;\n const { showCorrect, showMaxChoiceAlert } = this.state;\n const {\n choicesPosition,\n extraCSSRules,\n note,\n showNote,\n env,\n language,\n maxChoicesPerCategory,\n autoplayAudioEnabled,\n customAudioButton\n } = model;\n const { mode, role } = env || {};\n const choicePosition = choicesPosition || 'above';\n\n const style = {\n flexDirection: this.getPositionDirection(choicePosition),\n gap: '8px',\n };\n\n const { categories, choices, correct } = buildState(\n model.categories,\n model.choices,\n showCorrect ? model.correctResponse : session.answers,\n model.correctResponse,\n );\n\n log('[render] disabled: ', model.disabled);\n\n const { rowLabels, categoriesPerRow, correctResponse, fontSizeFactor } = model;\n const nbOfRows = (categories && Math.ceil(categories.length / categoriesPerRow)) || 0;\n const existAlternate = this.existAlternateResponse(correctResponse) || false;\n const displayNote =\n (showCorrect || (mode === 'view' && role === 'instructor')) && showNote && note && existAlternate;\n const alertMessage = translator.t('translation:categorize:limitMaxChoicesPerCategory', {\n lng: model.language,\n maxChoicesPerCategory,\n });\n\n const alertTitle = translator.t('common:warning', {\n lng: model.language,\n });\n\n const onCloseText = translator.t('common:cancel', {\n lng: model.language,\n });\n\n const showRationale = model.rationale && (hasText(model.rationale) || hasMedia(model.rationale));\n const showTeacherInstructions = model.teacherInstructions && (hasText(model.teacherInstructions) || hasMedia(model.teacherInstructions));\n\n return (\n <UiLayout extraCSSRules={extraCSSRules} id={'main-container'} className={classes.mainContainer} fontSizeFactor={fontSizeFactor}>\n {showTeacherInstructions && (\n <React.Fragment>\n <Collapsible\n labels={{\n hidden: 'Show Teacher Instructions',\n visible: 'Hide Teacher Instructions',\n }}\n className={classes.collapsible}\n >\n <PreviewPrompt prompt={model.teacherInstructions} />\n </Collapsible>\n </React.Fragment>\n )}\n\n {model.prompt && (\n <PreviewPrompt\n prompt={model.prompt}\n autoplayAudioEnabled={autoplayAudioEnabled}\n customAudioButton={customAudioButton}\n />\n )}\n\n <CorrectAnswerToggle\n show={showCorrect || correct === false}\n toggled={showCorrect}\n onToggle={this.toggleShowCorrect}\n language={language}\n />\n\n <div className={classes.categorize} style={style}>\n <div style={{ display: 'flex', flex: 1 }}>\n <Categories\n model={model}\n disabled={model.disabled}\n categories={categories}\n onDropChoice={this.dropChoice}\n onRemoveChoice={this.removeChoice}\n rowLabels={(rowLabels || []).slice(0, nbOfRows)}\n />\n </div>\n <Choices\n disabled={model.disabled}\n model={model}\n choices={choices}\n choicePosition={choicePosition}\n onDropChoice={this.dropChoice}\n onRemoveChoice={this.removeChoice}\n />\n </div>\n {displayNote && (\n <div\n className={classes.note}\n dangerouslySetInnerHTML={{\n __html: note,\n }}\n />\n )}\n\n {showRationale && (\n <Collapsible labels={{ hidden: 'Show Rationale', visible: 'Hide Rationale' }} className={classes.collapsible}>\n <PreviewPrompt prompt={model.rationale} />\n </Collapsible>\n )}\n\n {model.correctness && model.feedback && !showCorrect && (\n <Feedback correctness={model.correctness} feedback={model.feedback} />\n )}\n <AlertDialog\n title={alertTitle}\n text={alertMessage}\n open={showMaxChoiceAlert}\n onCloseText={onCloseText}\n onClose={() => this.setState({ showMaxChoiceAlert: false })}\n ></AlertDialog>\n </UiLayout>\n );\n }\n}\n\nclass CategorizeProvider extends React.Component {\n constructor(props) {\n super(props);\n this.uid = uid.generateId();\n }\n\n render() {\n return (\n <uid.Provider value={this.uid}>\n <Categorize {...this.props} />\n </uid.Provider>\n );\n }\n}\n\nconst styles = (theme) => ({\n mainContainer: {\n color: color.text(),\n backgroundColor: color.background(),\n position: 'relative'\n },\n note: {\n marginBottom: theme.spacing.unit * 2,\n },\n categorize: {\n marginBottom: theme.spacing.unit,\n display: 'flex',\n flexDirection: 'column',\n },\n collapsible: {\n paddingBottom: theme.spacing.unit * 2,\n },\n});\n\nexport default withDragContext(withStyles(styles)(CategorizeProvider));\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/categorize/index.jsx"],"names":["translator","Translator","log","Categorize","props","c","onAnswersChange","session","answers","id","categoryId","choiceIndex","draggedChoice","model","maxChoicesPerCategory","newAnswers","undefined","answer","find","category","choices","length","setState","showMaxChoiceAlert","removeChoice","showCorrect","state","onShowCorrectToggle","choicePosition","flexDirection","correctResponse","some","correctRes","alternateResponses","nextProps","nextModel","note","language","t","lng","classes","choicesPosition","extraCSSRules","showNote","env","autoplayAudioEnabled","customAudioButton","mode","role","style","getPositionDirection","gap","categories","correct","disabled","rowLabels","categoriesPerRow","fontSizeFactor","nbOfRows","Math","ceil","existAlternate","existAlternateResponse","displayNote","alertMessage","alertTitle","onCloseText","showRationale","rationale","showTeacherInstructions","teacherInstructions","mainContainer","hidden","visible","collapsible","prompt","toggleShowCorrect","categorize","display","flex","dropChoice","slice","__html","correctness","feedback","React","Component","PropTypes","object","isRequired","shape","arrayOf","choice","string","func","CategorizeProvider","uid","generateId","styles","theme","color","text","backgroundColor","background","position","marginBottom","spacing","unit","paddingBottom"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport Choices from './choices';\nimport Categories from './categories';\nimport CorrectAnswerToggle from '@pie-lib/correct-answer-toggle';\nimport { withStyles } from '@material-ui/core/styles';\nimport { buildState, removeChoiceFromCategory, moveChoiceToCategory } from '@pie-lib/categorize';\nimport { withDragContext, uid } from '@pie-lib/drag';\nimport { color, Feedback, Collapsible, hasText, hasMedia, PreviewPrompt, UiLayout } from '@pie-lib/render-ui';\nimport debug from 'debug';\nimport Translator from '@pie-lib/translator';\nimport { AlertDialog } from '@pie-lib/config-ui';\nconst { translator } = Translator;\n\nconst log = debug('@pie-ui:categorize');\n\nexport class Categorize extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n model: PropTypes.object,\n session: PropTypes.shape({\n answers: PropTypes.arrayOf(\n PropTypes.shape({\n choice: PropTypes.string,\n category: PropTypes.string,\n }),\n ),\n }),\n onAnswersChange: PropTypes.func.isRequired,\n onShowCorrectToggle: PropTypes.func.isRequired,\n };\n\n static defaultProps = {\n disabled: false,\n };\n\n constructor(props) {\n super(props);\n\n this.state = {\n showCorrect: false,\n showMaxChoiceAlert: false,\n };\n }\n\n removeChoice = (c) => {\n log('[removeChoice]: ', c);\n const { onAnswersChange, session } = this.props;\n const answers = removeChoiceFromCategory(c.id, c.categoryId, c.choiceIndex, session.answers);\n onAnswersChange(answers);\n };\n\n dropChoice = (categoryId, draggedChoice) => {\n const { session, onAnswersChange, model } = this.props;\n const { maxChoicesPerCategory = 0 } = model || {};\n const { answers = [] } = session || {};\n let newAnswers;\n if (draggedChoice) {\n log('[dropChoice] category: ', draggedChoice.categoryId, 'choice: ', draggedChoice);\n } else {\n log('[dropChoice] category: ', undefined, 'choice: ', undefined);\n }\n\n const answer = answers.find((answer) => answer.category === categoryId);\n\n // treat special case to replace the existing choice with the new one when maxChoicesPerCategory = 1\n if (draggedChoice && maxChoicesPerCategory === 1 && answer && answer.choices && answer.choices.length === 1) {\n newAnswers = moveChoiceToCategory(\n draggedChoice.id,\n draggedChoice.categoryId,\n categoryId,\n draggedChoice.choiceIndex,\n answers,\n );\n newAnswers = removeChoiceFromCategory(answer.choices[0], categoryId, 0, answers);\n }\n\n // treat special case when there are as many choices as maxChoicesPerCategory is\n else if (\n draggedChoice &&\n maxChoicesPerCategory > 1 &&\n answer &&\n answer.choices &&\n answer.choices.length === maxChoicesPerCategory\n ) {\n newAnswers = draggedChoice.categoryId\n ? moveChoiceToCategory(\n draggedChoice.id,\n draggedChoice.categoryId,\n draggedChoice.categoryId,\n draggedChoice.choiceIndex,\n answers,\n )\n : removeChoiceFromCategory(draggedChoice.id, draggedChoice.categoryId, draggedChoice.choiceIndex, answers);\n this.setState({ showMaxChoiceAlert: true });\n }\n\n // treat special case when there are more choices that maxChoicesPerCategory is (testing purpose in pits)\n else if (maxChoicesPerCategory !== 0 && answer && answer.choices && answer.choices.length > maxChoicesPerCategory) {\n newAnswers = answers;\n this.setState({ showMaxChoiceAlert: true });\n } else {\n newAnswers = draggedChoice\n ? moveChoiceToCategory(\n draggedChoice.id,\n draggedChoice.categoryId,\n categoryId,\n draggedChoice.choiceIndex,\n answers,\n )\n : this.removeChoice(categoryId);\n }\n\n if (draggedChoice) {\n onAnswersChange(newAnswers);\n }\n };\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n const { model } = this.props;\n const { model: nextModel } = nextProps;\n\n // check if the note is the default one for prev language and change to the default one for new language\n // this check is necessary in order to diferanciate between default and authour defined note\n // and only change between languages for default ones\n if (\n model.note &&\n model.language &&\n model.language !== nextModel.language &&\n model.note === translator.t('common:commonCorrectAnswerWithAlternates', { lng: model.language })\n ) {\n model.note = translator.t('common:commonCorrectAnswerWithAlternates', { lng: nextModel.language });\n }\n\n this.setState({ showCorrect: false });\n }\n\n toggleShowCorrect = () =>\n this.setState({ showCorrect: !this.state.showCorrect }, () => {\n this.props.onShowCorrectToggle();\n });\n\n getPositionDirection = (choicePosition) => {\n let flexDirection;\n\n switch (choicePosition) {\n case 'left':\n flexDirection = 'row-reverse';\n break;\n case 'right':\n flexDirection = 'row';\n break;\n case 'below':\n flexDirection = 'column';\n break;\n default:\n // above\n flexDirection = 'column-reverse';\n break;\n }\n\n return flexDirection;\n };\n\n existAlternateResponse = (correctResponse) =>\n correctResponse?.some((correctRes) => correctRes.alternateResponses?.length > 0);\n\n render() {\n const { classes, model, session } = this.props;\n const { showCorrect, showMaxChoiceAlert } = this.state;\n const {\n choicesPosition,\n extraCSSRules,\n note,\n showNote,\n env,\n language,\n maxChoicesPerCategory,\n autoplayAudioEnabled,\n customAudioButton,\n } = model;\n const { mode, role } = env || {};\n const choicePosition = choicesPosition || 'above';\n\n const style = {\n flexDirection: this.getPositionDirection(choicePosition),\n gap: '8px',\n };\n\n const { categories, choices, correct } = buildState(\n model.categories,\n model.choices,\n showCorrect ? model.correctResponse : session.answers,\n model.correctResponse,\n );\n\n log('[render] disabled: ', model.disabled);\n\n const { rowLabels, categoriesPerRow, correctResponse, fontSizeFactor } = model;\n const nbOfRows = (categories && Math.ceil(categories.length / categoriesPerRow)) || 0;\n const existAlternate = this.existAlternateResponse(correctResponse) || false;\n const displayNote =\n (showCorrect || (mode === 'view' && role === 'instructor')) && showNote && note && existAlternate;\n const alertMessage = translator.t('translation:categorize:limitMaxChoicesPerCategory', {\n lng: model.language,\n maxChoicesPerCategory,\n });\n\n const alertTitle = translator.t('common:warning', {\n lng: model.language,\n });\n\n const onCloseText = translator.t('common:cancel', {\n lng: model.language,\n });\n\n const showRationale = model.rationale && (hasText(model.rationale) || hasMedia(model.rationale));\n const showTeacherInstructions =\n model.teacherInstructions && (hasText(model.teacherInstructions) || hasMedia(model.teacherInstructions));\n\n return (\n <UiLayout\n extraCSSRules={extraCSSRules}\n id={'main-container'}\n className={classes.mainContainer}\n fontSizeFactor={fontSizeFactor}\n >\n {showTeacherInstructions && (\n <React.Fragment>\n <Collapsible\n labels={{\n hidden: 'Show Teacher Instructions',\n visible: 'Hide Teacher Instructions',\n }}\n className={classes.collapsible}\n >\n <PreviewPrompt prompt={model.teacherInstructions} />\n </Collapsible>\n </React.Fragment>\n )}\n\n {model.prompt && (\n <PreviewPrompt\n prompt={model.prompt}\n autoplayAudioEnabled={autoplayAudioEnabled}\n customAudioButton={customAudioButton}\n />\n )}\n\n <CorrectAnswerToggle\n show={showCorrect || correct === false}\n toggled={showCorrect}\n onToggle={this.toggleShowCorrect}\n language={language}\n />\n\n <div className={classes.categorize} style={style}>\n <div style={{ display: 'flex', flex: 1 }}>\n <Categories\n model={model}\n disabled={model.disabled}\n categories={categories}\n onDropChoice={this.dropChoice}\n onRemoveChoice={this.removeChoice}\n rowLabels={(rowLabels || []).slice(0, nbOfRows)}\n />\n </div>\n <Choices\n disabled={model.disabled}\n model={model}\n choices={choices}\n choicePosition={choicePosition}\n onDropChoice={this.dropChoice}\n onRemoveChoice={this.removeChoice}\n />\n </div>\n {displayNote && (\n <div\n className={classes.note}\n dangerouslySetInnerHTML={{\n __html: note,\n }}\n />\n )}\n\n {showRationale && (\n <Collapsible labels={{ hidden: 'Show Rationale', visible: 'Hide Rationale' }} className={classes.collapsible}>\n <PreviewPrompt prompt={model.rationale} />\n </Collapsible>\n )}\n\n {model.correctness && model.feedback && !showCorrect && (\n <Feedback correctness={model.correctness} feedback={model.feedback} />\n )}\n <AlertDialog\n title={alertTitle}\n text={alertMessage}\n open={showMaxChoiceAlert}\n onCloseText={onCloseText}\n onClose={() => this.setState({ showMaxChoiceAlert: false })}\n ></AlertDialog>\n </UiLayout>\n );\n }\n}\n\nclass CategorizeProvider extends React.Component {\n constructor(props) {\n super(props);\n this.uid = uid.generateId();\n }\n\n render() {\n return (\n <uid.Provider value={this.uid}>\n <Categorize {...this.props} />\n </uid.Provider>\n );\n }\n}\n\nconst styles = (theme) => ({\n mainContainer: {\n color: color.text(),\n backgroundColor: color.background(),\n position: 'relative',\n },\n note: {\n marginBottom: theme.spacing.unit * 2,\n },\n categorize: {\n marginBottom: theme.spacing.unit,\n display: 'flex',\n flexDirection: 'column',\n },\n collapsible: {\n paddingBottom: theme.spacing.unit * 2,\n },\n});\n\nexport default withDragContext(withStyles(styles)(CategorizeProvider));\n"],"file":"index.js"}
|
package/lib/index.js
CHANGED
|
@@ -23,9 +23,9 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
23
23
|
|
|
24
24
|
var _reactDom = _interopRequireDefault(require("react-dom"));
|
|
25
25
|
|
|
26
|
-
var _mathRendering = require("@pie-lib/
|
|
26
|
+
var _mathRendering = require("@pie-lib/math-rendering");
|
|
27
27
|
|
|
28
|
-
var _renderUi = require("@pie-lib/
|
|
28
|
+
var _renderUi = require("@pie-lib/render-ui");
|
|
29
29
|
|
|
30
30
|
var _piePlayerEvents = require("@pie-framework/pie-player-events");
|
|
31
31
|
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["Categorize","m","_model","eliminateBlindAnswersFromSession","dispatchEvent","ModelSetEvent","tagName","toLowerCase","isComplete","_audioInitialized","render","autoplayAudioEnabled","completeAudioEnabled","audioComplete","_session","answers","Array","isArray","some","answer","choices","length","s","mappedChoices","map","c","id","filteredAnswers","answerChoices","filter","includes","changeAnswers","selector","SessionChangedEvent","info","document","createElement","Object","assign","style","position","top","width","height","display","justifyContent","alignItems","background","zIndex","cursor","img","src","EnableAudioAutoplayImage","alt","appendChild","observer","MutationObserver","mutationsList","forEach","mutation","type","audio","querySelector","isInsidePrompt","closest","_createAudioInfoToast","container","enableAudio","play","removeChild","removeEventListener","setTimeout","paused","addEventListener","handlePlaying","audioStartTime","Date","getTime","handleEnded","audioEndTime","waitTime","_audio","_handlePlaying","_handleEnded","_enableAudio","disconnect","observe","childList","subtree","el","React","CategorizeComponent","model","session","onAnswersChange","bind","onShowCorrectToggle","ReactDOM","HTMLElement"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { renderMath } from '@pie-lib/pie-toolbox/math-rendering';\nimport { EnableAudioAutoplayImage } from '@pie-lib/pie-toolbox/render-ui';\nimport { SessionChangedEvent, ModelSetEvent } from '@pie-framework/pie-player-events';\nimport CategorizeComponent from './categorize';\n\nexport default class Categorize extends HTMLElement {\n set model(m) {\n this._model = m;\n\n this.eliminateBlindAnswersFromSession();\n this.dispatchEvent(new ModelSetEvent(this.tagName.toLowerCase(), this.isComplete(), !!this._model));\n // reset the audioInitialized to false since the model changed, and we might need to reinitialize the audio\n this._audioInitialized = false;\n\n this.render();\n }\n\n isComplete() {\n const { autoplayAudioEnabled, completeAudioEnabled } =this._model || {};\n\n if (autoplayAudioEnabled && completeAudioEnabled && !this.audioComplete) {\n return false;\n }\n\n if (!this._session || !this._session.answers) {\n return false;\n }\n\n if (!Array.isArray(this._session.answers)) {\n return false;\n }\n\n return this._session.answers.some((answer) => answer.choices && answer.choices.length > 0);\n }\n\n set session(s) {\n if (s && !s.answers) {\n s.answers = [];\n }\n\n this._session = s;\n this.render();\n }\n\n get session() {\n return this._session;\n }\n\n eliminateBlindAnswersFromSession() {\n const { answers = [] } = this._session || {};\n const { choices = [] } = this._model || {};\n\n const mappedChoices = choices.map((c) => c.id) || [];\n const filteredAnswers = answers.map((answer) => {\n const answerChoices = answer?.choices || [];\n answer.choices = answerChoices.filter((c) => mappedChoices.includes(c));\n\n return answer;\n });\n\n if (filteredAnswers.length > 0) {\n this.changeAnswers(filteredAnswers);\n }\n }\n\n changeAnswers(answers) {\n this._session.answers = answers;\n this._session.selector = 'Mouse';\n\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), this.isComplete()));\n\n this.render();\n }\n\n onShowCorrectToggle() {\n renderMath(this);\n }\n\n _createAudioInfoToast() {\n const info = document.createElement('div');\n info.id = 'play-audio-info';\n\n Object.assign(info.style, {\n position: 'absolute',\n top: 0,\n width:'100%',\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n background: 'white',\n zIndex: '1000',\n cursor: 'pointer'\n });\n\n const img = document.createElement('img');\n img.src = EnableAudioAutoplayImage;\n img.alt = 'Click anywhere to enable audio autoplay';\n img.width = 500;\n img.height = 300;\n\n info.appendChild(img);\n return info;\n }\n\n connectedCallback(){\n\n // Observation: audio in Chrome will have the autoplay attribute,\n // while other browsers will not have the autoplay attribute and will need a user interaction to play the audio\n // This workaround fixes the issue of audio being cached and played on any user interaction in Safari and Firefox\n const observer = new MutationObserver((mutationsList, observer) => {\n mutationsList.forEach((mutation) => {\n if (mutation.type === 'childList') {\n if (this._audioInitialized) return;\n const audio = this.querySelector('audio');\n const isInsidePrompt = audio && audio.closest('#preview-prompt');\n\n if (!this._model) return;\n if (!this._model.autoplayAudioEnabled) return;\n if (audio && !isInsidePrompt) return;\n if (!audio) return;\n\n const info = this._createAudioInfoToast();\n const container = this.querySelector('#main-container');\n const enableAudio = () => {\n if (this.querySelector('#play-audio-info')) {\n audio.play();\n container.removeChild(info);\n }\n\n document.removeEventListener('click', enableAudio);\n };\n\n // if the audio is paused, it means the user has not interacted with the page yet and the audio will not play\n // FIX FOR SAFARI: play with a slight delay to check if autoplay was blocked\n setTimeout(() => {\n if (audio.paused && !this.querySelector('#play-audio-info')) {\n // add info message as a toast to enable audio playback\n container.appendChild(info);\n document.addEventListener('click', enableAudio);\n } else {\n document.removeEventListener('click', enableAudio);\n }\n }, 500);\n\n // we need to listen for the playing event to remove the toast in case the audio plays because of re-rendering\n const handlePlaying = () => {\n //timestamp when auto-played audio started playing\n this._session.audioStartTime = this._session.audioStartTime || new Date().getTime();\n\n const info = this.querySelector('#play-audio-info');\n if (info) {\n container.removeChild(info);\n }\n\n audio.removeEventListener('playing', handlePlaying);\n };\n\n audio.addEventListener('playing', handlePlaying);\n\n // we need to listen for the ended event to update the isComplete state\n const handleEnded = () => {\n //timestamp when auto-played audio completed playing\n this._session.audioEndTime = this._session.audioEndTime || new Date().getTime();\n\n let { audioStartTime, audioEndTime, waitTime } = this._session;\n if(!waitTime && audioStartTime && audioEndTime) {\n // waitTime is elapsed time the user waited for auto-played audio to finish\n this._session.waitTime = (audioEndTime - audioStartTime);\n }\n\n this.audioComplete = true;\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), this.isComplete()));\n\n audio.removeEventListener('ended', handleEnded);\n };\n\n audio.addEventListener('ended', handleEnded);\n\n // store references to remove later\n this._audio = audio;\n this._handlePlaying = handlePlaying;\n this._handleEnded = handleEnded;\n this._enableAudio = enableAudio;\n // set to true to prevent multiple initializations\n this._audioInitialized = true;\n\n observer.disconnect();\n }\n });\n });\n\n observer.observe(this, { childList: true, subtree: true });\n }\n\n disconnectedCallback() {\n document.removeEventListener('click', this._enableAudio);\n\n if (this._audio) {\n this._audio.removeEventListener('playing', this._handlePlaying);\n this._audio.removeEventListener('ended', this._handleEnded);\n this._audio = null;\n }\n }\n\n render() {\n if (this._model && this._session) {\n const el = React.createElement(CategorizeComponent, {\n model: this._model,\n session: this._session,\n onAnswersChange: this.changeAnswers.bind(this),\n onShowCorrectToggle: this.onShowCorrectToggle.bind(this),\n });\n\n ReactDOM.render(el, this, () => {\n renderMath(this);\n });\n }\n }\n}\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["Categorize","m","_model","eliminateBlindAnswersFromSession","dispatchEvent","ModelSetEvent","tagName","toLowerCase","isComplete","_audioInitialized","render","autoplayAudioEnabled","completeAudioEnabled","audioComplete","_session","answers","Array","isArray","some","answer","choices","length","s","mappedChoices","map","c","id","filteredAnswers","answerChoices","filter","includes","changeAnswers","selector","SessionChangedEvent","info","document","createElement","Object","assign","style","position","top","width","height","display","justifyContent","alignItems","background","zIndex","cursor","img","src","EnableAudioAutoplayImage","alt","appendChild","observer","MutationObserver","mutationsList","forEach","mutation","type","audio","querySelector","isInsidePrompt","closest","_createAudioInfoToast","container","enableAudio","play","removeChild","removeEventListener","setTimeout","paused","addEventListener","handlePlaying","audioStartTime","Date","getTime","handleEnded","audioEndTime","waitTime","_audio","_handlePlaying","_handleEnded","_enableAudio","disconnect","observe","childList","subtree","el","React","CategorizeComponent","model","session","onAnswersChange","bind","onShowCorrectToggle","ReactDOM","HTMLElement"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport { EnableAudioAutoplayImage } from '@pie-lib/render-ui';\nimport { SessionChangedEvent, ModelSetEvent } from '@pie-framework/pie-player-events';\nimport CategorizeComponent from './categorize';\n\nexport default class Categorize extends HTMLElement {\n set model(m) {\n this._model = m;\n\n this.eliminateBlindAnswersFromSession();\n this.dispatchEvent(new ModelSetEvent(this.tagName.toLowerCase(), this.isComplete(), !!this._model));\n // reset the audioInitialized to false since the model changed, and we might need to reinitialize the audio\n this._audioInitialized = false;\n\n this.render();\n }\n\n isComplete() {\n const { autoplayAudioEnabled, completeAudioEnabled } = this._model || {};\n\n if (autoplayAudioEnabled && completeAudioEnabled && !this.audioComplete) {\n return false;\n }\n\n if (!this._session || !this._session.answers) {\n return false;\n }\n\n if (!Array.isArray(this._session.answers)) {\n return false;\n }\n\n return this._session.answers.some((answer) => answer.choices && answer.choices.length > 0);\n }\n\n set session(s) {\n if (s && !s.answers) {\n s.answers = [];\n }\n\n this._session = s;\n this.render();\n }\n\n get session() {\n return this._session;\n }\n\n eliminateBlindAnswersFromSession() {\n const { answers = [] } = this._session || {};\n const { choices = [] } = this._model || {};\n\n const mappedChoices = choices.map((c) => c.id) || [];\n const filteredAnswers = answers.map((answer) => {\n const answerChoices = answer?.choices || [];\n answer.choices = answerChoices.filter((c) => mappedChoices.includes(c));\n\n return answer;\n });\n\n if (filteredAnswers.length > 0) {\n this.changeAnswers(filteredAnswers);\n }\n }\n\n changeAnswers(answers) {\n this._session.answers = answers;\n this._session.selector = 'Mouse';\n\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), this.isComplete()));\n\n this.render();\n }\n\n onShowCorrectToggle() {\n renderMath(this);\n }\n\n _createAudioInfoToast() {\n const info = document.createElement('div');\n info.id = 'play-audio-info';\n\n Object.assign(info.style, {\n position: 'absolute',\n top: 0,\n width: '100%',\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n background: 'white',\n zIndex: '1000',\n cursor: 'pointer',\n });\n\n const img = document.createElement('img');\n img.src = EnableAudioAutoplayImage;\n img.alt = 'Click anywhere to enable audio autoplay';\n img.width = 500;\n img.height = 300;\n\n info.appendChild(img);\n return info;\n }\n\n connectedCallback() {\n // Observation: audio in Chrome will have the autoplay attribute,\n // while other browsers will not have the autoplay attribute and will need a user interaction to play the audio\n // This workaround fixes the issue of audio being cached and played on any user interaction in Safari and Firefox\n const observer = new MutationObserver((mutationsList, observer) => {\n mutationsList.forEach((mutation) => {\n if (mutation.type === 'childList') {\n if (this._audioInitialized) return;\n const audio = this.querySelector('audio');\n const isInsidePrompt = audio && audio.closest('#preview-prompt');\n\n if (!this._model) return;\n if (!this._model.autoplayAudioEnabled) return;\n if (audio && !isInsidePrompt) return;\n if (!audio) return;\n\n const info = this._createAudioInfoToast();\n const container = this.querySelector('#main-container');\n const enableAudio = () => {\n if (this.querySelector('#play-audio-info')) {\n audio.play();\n container.removeChild(info);\n }\n\n document.removeEventListener('click', enableAudio);\n };\n\n // if the audio is paused, it means the user has not interacted with the page yet and the audio will not play\n // FIX FOR SAFARI: play with a slight delay to check if autoplay was blocked\n setTimeout(() => {\n if (audio.paused && !this.querySelector('#play-audio-info')) {\n // add info message as a toast to enable audio playback\n container.appendChild(info);\n document.addEventListener('click', enableAudio);\n } else {\n document.removeEventListener('click', enableAudio);\n }\n }, 500);\n\n // we need to listen for the playing event to remove the toast in case the audio plays because of re-rendering\n const handlePlaying = () => {\n //timestamp when auto-played audio started playing\n this._session.audioStartTime = this._session.audioStartTime || new Date().getTime();\n\n const info = this.querySelector('#play-audio-info');\n if (info) {\n container.removeChild(info);\n }\n\n audio.removeEventListener('playing', handlePlaying);\n };\n\n audio.addEventListener('playing', handlePlaying);\n\n // we need to listen for the ended event to update the isComplete state\n const handleEnded = () => {\n //timestamp when auto-played audio completed playing\n this._session.audioEndTime = this._session.audioEndTime || new Date().getTime();\n\n let { audioStartTime, audioEndTime, waitTime } = this._session;\n if (!waitTime && audioStartTime && audioEndTime) {\n // waitTime is elapsed time the user waited for auto-played audio to finish\n this._session.waitTime = audioEndTime - audioStartTime;\n }\n\n this.audioComplete = true;\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), this.isComplete()));\n\n audio.removeEventListener('ended', handleEnded);\n };\n\n audio.addEventListener('ended', handleEnded);\n\n // store references to remove later\n this._audio = audio;\n this._handlePlaying = handlePlaying;\n this._handleEnded = handleEnded;\n this._enableAudio = enableAudio;\n // set to true to prevent multiple initializations\n this._audioInitialized = true;\n\n observer.disconnect();\n }\n });\n });\n\n observer.observe(this, { childList: true, subtree: true });\n }\n\n disconnectedCallback() {\n document.removeEventListener('click', this._enableAudio);\n\n if (this._audio) {\n this._audio.removeEventListener('playing', this._handlePlaying);\n this._audio.removeEventListener('ended', this._handleEnded);\n this._audio = null;\n }\n }\n\n render() {\n if (this._model && this._session) {\n const el = React.createElement(CategorizeComponent, {\n model: this._model,\n session: this._session,\n onAnswersChange: this.changeAnswers.bind(this),\n onShowCorrectToggle: this.onShowCorrectToggle.bind(this),\n });\n\n ReactDOM.render(el, this, () => {\n renderMath(this);\n });\n }\n }\n}\n"],"file":"index.js"}
|
package/package.json
CHANGED
|
@@ -4,14 +4,20 @@
|
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
7
|
-
"version": "9.14.
|
|
7
|
+
"version": "9.14.2-beta.1",
|
|
8
8
|
"description": "",
|
|
9
9
|
"author": "pie framework developers",
|
|
10
10
|
"license": "ISC",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@material-ui/core": "^3.9.2",
|
|
13
13
|
"@pie-framework/pie-player-events": "^0.1.0",
|
|
14
|
-
"@pie-lib/
|
|
14
|
+
"@pie-lib/categorize": "^0.17.0",
|
|
15
|
+
"@pie-lib/config-ui": "^11.18.0",
|
|
16
|
+
"@pie-lib/correct-answer-toggle": "^2.14.0",
|
|
17
|
+
"@pie-lib/drag": "^2.11.0",
|
|
18
|
+
"@pie-lib/math-rendering": "^3.11.0",
|
|
19
|
+
"@pie-lib/render-ui": "^4.24.0",
|
|
20
|
+
"@pie-lib/translator": "^2.12.0",
|
|
15
21
|
"classnames": "^2.2.5",
|
|
16
22
|
"debug": "^4.1.1",
|
|
17
23
|
"lodash": "^4.17.15",
|
|
@@ -20,7 +26,7 @@
|
|
|
20
26
|
"react-dnd": "^14.0.5",
|
|
21
27
|
"react-dom": "^16.8.1"
|
|
22
28
|
},
|
|
23
|
-
"gitHead": "
|
|
29
|
+
"gitHead": "0e14ff981bcdc8a89a0e58484026496701bfdbc3",
|
|
24
30
|
"scripts": {
|
|
25
31
|
"postpublish": "../../scripts/postpublish"
|
|
26
32
|
},
|
package/LICENSE.md
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
Copyright 2019 CoreSpring Inc
|
|
2
|
-
|
|
3
|
-
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
|
|
4
|
-
|
|
5
|
-
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|