@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.
Files changed (47) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/configure/CHANGELOG.md +24 -0
  3. package/configure/lib/design/categories/RowLabel.js +3 -3
  4. package/configure/lib/design/categories/RowLabel.js.map +1 -1
  5. package/configure/lib/design/categories/alternateResponses.js +1 -1
  6. package/configure/lib/design/categories/alternateResponses.js.map +1 -1
  7. package/configure/lib/design/categories/choice-preview.js +2 -2
  8. package/configure/lib/design/categories/choice-preview.js.map +1 -1
  9. package/configure/lib/design/categories/droppable-placeholder.js +1 -1
  10. package/configure/lib/design/categories/droppable-placeholder.js.map +1 -1
  11. package/configure/lib/design/categories/index.js +32 -2
  12. package/configure/lib/design/categories/index.js.map +1 -1
  13. package/configure/lib/design/choices/choice.js +2 -2
  14. package/configure/lib/design/choices/choice.js.map +1 -1
  15. package/configure/lib/design/choices/index.js +2 -2
  16. package/configure/lib/design/choices/index.js.map +1 -1
  17. package/configure/lib/design/index.js +8 -8
  18. package/configure/lib/design/index.js.map +1 -1
  19. package/configure/lib/design/input-header.js +2 -2
  20. package/configure/lib/design/input-header.js.map +1 -1
  21. package/configure/lib/index.js +1 -1
  22. package/configure/lib/index.js.map +1 -1
  23. package/configure/package.json +8 -2
  24. package/controller/CHANGELOG.md +23 -0
  25. package/controller/lib/index.js +4 -4
  26. package/controller/lib/index.js.map +1 -1
  27. package/controller/package.json +5 -2
  28. package/docs/demo/.pie/.configure/package.json +10 -0
  29. package/docs/demo/.pie/.controllers/package.json +10 -0
  30. package/docs/demo/.pie/info.entry.js +89 -0
  31. package/docs/demo/.pie/info.webpack.config.js +108 -0
  32. package/docs/demo/.pie/package.json +10 -0
  33. package/docs/demo/pie.manifest.json +11 -0
  34. package/lib/categorize/categories.js +1 -1
  35. package/lib/categorize/categories.js.map +1 -1
  36. package/lib/categorize/category.js +1 -1
  37. package/lib/categorize/category.js.map +1 -1
  38. package/lib/categorize/choice.js +2 -2
  39. package/lib/categorize/choice.js.map +1 -1
  40. package/lib/categorize/droppable-placeholder.js +1 -1
  41. package/lib/categorize/droppable-placeholder.js.map +1 -1
  42. package/lib/categorize/index.js +7 -7
  43. package/lib/categorize/index.js.map +1 -1
  44. package/lib/index.js +2 -2
  45. package/lib/index.js.map +1 -1
  46. package/package.json +9 -3
  47. package/LICENSE.md +0 -5
@@ -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/pie-toolbox/correct-answer-toggle");
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/pie-toolbox/categorize");
36
+ var _categorize = require("@pie-lib/categorize");
37
37
 
38
- var _drag = require("@pie-lib/pie-toolbox/drag");
38
+ var _drag = require("@pie-lib/drag");
39
39
 
40
- var _renderUi = require("@pie-lib/pie-toolbox/render-ui");
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/pie-toolbox/translator"));
44
+ var _translator = _interopRequireDefault(require("@pie-lib/translator"));
45
45
 
46
- var _configUi = require("@pie-lib/pie-toolbox/config-ui");
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.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/pie-toolbox/math-rendering");
26
+ var _mathRendering = require("@pie-lib/math-rendering");
27
27
 
28
- var _renderUi = require("@pie-lib/pie-toolbox/render-ui");
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.1-next.2+55dc5255c",
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/pie-toolbox": "2.22.1",
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": "55dc5255ca12c1e7c16b2acfc0ff0b02167a339a",
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.