@pie-element/placement-ordering 14.1.7 → 14.1.9
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 +12 -0
- package/configure/CHANGELOG.md +12 -0
- package/configure/lib/__tests__/choice-editor.test.js +376 -0
- package/configure/lib/__tests__/choice-tile.test.js +283 -0
- package/configure/lib/__tests__/design.test.js +268 -0
- package/configure/lib/__tests__/help.test.js +64 -0
- package/configure/lib/__tests__/index.test.js +77 -0
- package/configure/lib/__tests__/utils.test.js +493 -0
- package/configure/lib/choice-editor.js +1 -1
- package/configure/lib/choice-editor.js.map +1 -1
- package/configure/lib/choice-tile.js +2 -1
- package/configure/lib/choice-tile.js.map +1 -1
- package/configure/package.json +3 -3
- package/controller/CHANGELOG.md +4 -0
- package/controller/lib/__tests__/index.test.js +401 -0
- package/controller/lib/__tests__/scoring.test.js +165 -0
- package/controller/package.json +1 -1
- package/docs/demo/pie.manifest.json +11 -0
- package/lib/__tests__/index-test.js +90 -0
- package/lib/__tests__/ordering.test.js +133 -0
- package/lib/__tests__/placement-ordering.test.js +445 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"choice-tile.js","names":["_react","_interopRequireDefault","require","_propTypes","_debug","_core","_CardActions","_DragHandle","_IconButton","_RemoveCircle","_styles","_renderUi","_editableHtmlTipTap","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","log","debug","StyledChoiceTile","styled","theme","margin","spacing","backgroundColor","palette","background","paper","display","flexDirection","cursor","touchAction","StyledEditableHtml","EditableHtml","isTargetPrompt","width","borderRadius","error","light","StyledControls","justifyContent","StyledActions","DragHandle","color","StyledErrorText","fontSize","typography","main","marginLeft","marginTop","StyledRemoveCircle","RemoveCircle","fill","StyledIconButton","IconButton","tertiary","ChoiceTile","props","choice","index","onChoiceChange","onDelete","imageSupport","spellCheck","toolbarOpts","pluginProps","maxImageWidth","maxImageHeight","mathMlOptions","label","editable","type","draggableId","id","droppableId","attributes","listeners","setNodeRef","setDragRef","transform","isDragging","useDraggable","data","setDropRef","useDroppable","onLabelChange","style","x","y","undefined","opacity","filteredDefaultPlugins","DEFAULT_PLUGINS","filter","p","isEditableElement","target","closest","isContentEditable","filteredListeners","onKeyDown","onPointerDown","createElement","ref","_extends2","disabled","placeholder","includes","markup","onChange","activePlugins","autoWidthToolbar","languageCharactersProps","language","onClick","size","exports","propTypes","PropTypes","any","object","string","isOver","bool","empty","outcome","number","shape","add","func","isRequired","delete","choices","array","choicesLabel","_default"],"sources":["../src/choice-tile.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport debug from 'debug';\nimport { useDraggable, useDroppable } from '@dnd-kit/core';\nimport CardActions from '@mui/material/CardActions';\nimport DragHandle from '@mui/icons-material/DragHandle';\nimport IconButton from '@mui/material/IconButton';\nimport RemoveCircle from '@mui/icons-material/RemoveCircle';\nimport { styled } from '@mui/material/styles';\n\nimport { color } from '@pie-lib/render-ui';\nimport EditableHtml, { DEFAULT_PLUGINS } from '@pie-lib/editable-html-tip-tap';\n\nconst log = debug('@pie-element:placement-ordering:configure:choice-tile');\n\nconst StyledChoiceTile = styled('div')(({ theme }) => ({\n margin: `${theme.spacing(1)} 0`,\n backgroundColor: theme.palette.background.paper,\n display: 'flex',\n flexDirection: 'column',\n cursor: 'move',\n touchAction: 'none',\n}));\n\nconst StyledEditableHtml = styled(EditableHtml)(({ theme, isTargetPrompt }) => ({\n width: '80%',\n borderRadius: '4px',\n ...(isTargetPrompt && {\n backgroundColor: theme.palette.error.light,\n }),\n}));\n\nconst StyledControls = styled('div')(() => ({\n display: 'flex',\n justifyContent: 'flex-end',\n}));\n\nconst StyledActions = styled(DragHandle)(({ theme }) => ({\n color: theme.palette.error[400],\n}));\n\nconst StyledErrorText = styled('div')(({ theme }) => ({\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n marginLeft: theme.spacing(5),\n marginTop: theme.spacing(1),\n}));\n\nconst StyledRemoveCircle = styled(RemoveCircle)(({ theme }) => ({\n fill: theme.palette.error[500],\n}));\n\nconst StyledIconButton = styled(IconButton)({\n color: `${color.tertiary()} !important`,\n});\n\nexport const ChoiceTile = (props) => {\n const {\n choice,\n index,\n onChoiceChange,\n onDelete,\n imageSupport,\n spellCheck,\n toolbarOpts,\n pluginProps,\n maxImageWidth,\n maxImageHeight,\n error,\n mathMlOptions = {},\n } = props;\n const { label, editable, type } = choice;\n const draggableId = `${type}-${choice.id}`;\n const droppableId = `${type}-drop-${choice.id}`;\n\n const {\n attributes,\n listeners,\n setNodeRef: setDragRef,\n transform,\n isDragging,\n } = useDraggable({\n id: draggableId,\n data: {\n id: choice.id,\n index,\n type,\n },\n });\n\n const { setNodeRef: setDropRef } = useDroppable({\n id: droppableId,\n data: {\n id: choice.id,\n index,\n type,\n },\n });\n\n const onLabelChange = (label) => {\n choice.label = label;\n onChoiceChange(choice);\n };\n\n const style = {\n transform: transform ? `translate3d(${transform.x}px, ${transform.y}px, 0)` : undefined,\n opacity: isDragging ? 0.5 : 1,\n width: '100%',\n };\n\n const filteredDefaultPlugins = (DEFAULT_PLUGINS || []).filter((p) => p !== 'bulleted-list' && p !== 'numbered-list');\n\n const isEditableElement = (target) =>\n target.closest('[contenteditable]') ||\n target.closest('input') ||\n target.closest('textarea') ||\n target.isContentEditable;\n\n // edit listeners to prevent dragging when interacting with editable-html element\n const filteredListeners = {\n ...listeners,\n onKeyDown: (e) => {\n if (isEditableElement(e.target)) {\n return;\n }\n\n listeners?.onKeyDown?.(e);\n },\n onPointerDown: (e) => {\n if (isEditableElement(e.target)) {\n return;\n }\n\n listeners?.onPointerDown?.(e);\n },\n };\n\n return (\n <div ref={setDropRef}>\n <div ref={setDragRef} {...filteredListeners} {...attributes}>\n <StyledChoiceTile style={style}>\n <div style={{ width: '100%', display: 'flex' }}>\n <CardActions>\n <StyledActions />\n </CardActions>\n\n <StyledEditableHtml\n disabled={!editable}\n placeholder={type !== 'target' && !label.includes('data-latex') ? 'Enter a choice' : ''}\n markup={label}\n imageSupport={imageSupport || undefined}\n onChange={onLabelChange}\n pluginProps={pluginProps}\n toolbarOpts={toolbarOpts}\n activePlugins={filteredDefaultPlugins}\n spellCheck={spellCheck}\n autoWidthToolbar\n maxImageWidth={maxImageWidth}\n maxImageHeight={maxImageHeight}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n error={editable && error}\n mathMlOptions={mathMlOptions}\n />\n\n {editable && (\n <StyledControls>\n <StyledIconButton onClick={onDelete} size=\"large\">\n <StyledRemoveCircle />\n </StyledIconButton>\n </StyledControls>\n )}\n </div>\n\n {editable && error && <StyledErrorText>{error}</StyledErrorText>}\n </StyledChoiceTile>\n </div>\n </div>\n );\n};\n\nChoiceTile.propTypes = {\n id: PropTypes.any,\n maxImageHeight: PropTypes.object,\n maxImageWidth: PropTypes.object,\n label: PropTypes.string,\n isOver: PropTypes.bool,\n type: PropTypes.string,\n empty: PropTypes.bool,\n disabled: PropTypes.bool,\n outcome: PropTypes.object,\n index: PropTypes.number,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n choice: PropTypes.object,\n choices: PropTypes.array.isRequired,\n onChoiceChange: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n toolbarOpts: PropTypes.object,\n pluginProps: PropTypes.object,\n choicesLabel: PropTypes.string,\n error: PropTypes.string,\n spellCheck: PropTypes.bool,\n mathMlOptions: PropTypes.object,\n};\n\nexport default ChoiceTile;\n"],"mappings":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,MAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,KAAA,GAAAH,OAAA;AACA,IAAAI,YAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,WAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,WAAA,GAAAP,sBAAA,CAAAC,OAAA;AACA,IAAAO,aAAA,GAAAR,sBAAA,CAAAC,OAAA;AACA,IAAAQ,OAAA,GAAAR,OAAA;AAEA,IAAAS,SAAA,GAAAT,OAAA;AACA,IAAAU,mBAAA,GAAAC,uBAAA,CAAAX,OAAA;AAA+E,SAAAW,wBAAAC,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAH,uBAAA,YAAAA,CAAAC,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAE/E,MAAMkB,GAAG,GAAG,IAAAC,cAAK,EAAC,uDAAuD,CAAC;AAE1E,MAAMC,gBAAgB,GAAG,IAAAC,cAAM,EAAC,KAAK,CAAC,CAAC,CAAC;EAAEC;AAAM,CAAC,MAAM;EACrDC,MAAM,EAAE,GAAGD,KAAK,CAACE,OAAO,CAAC,CAAC,CAAC,IAAI;EAC/BC,eAAe,EAAEH,KAAK,CAACI,OAAO,CAACC,UAAU,CAACC,KAAK;EAC/CC,OAAO,EAAE,MAAM;EACfC,aAAa,EAAE,QAAQ;EACvBC,MAAM,EAAE,MAAM;EACdC,WAAW,EAAE;AACf,CAAC,CAAC,CAAC;AAEH,MAAMC,kBAAkB,GAAG,IAAAZ,cAAM,EAACa,2BAAY,CAAC,CAAC,CAAC;EAAEZ,KAAK;EAAEa;AAAe,CAAC,MAAM;EAC9EC,KAAK,EAAE,KAAK;EACZC,YAAY,EAAE,KAAK;EACnB,IAAIF,cAAc,IAAI;IACpBV,eAAe,EAAEH,KAAK,CAACI,OAAO,CAACY,KAAK,CAACC;EACvC,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,MAAMC,cAAc,GAAG,IAAAnB,cAAM,EAAC,KAAK,CAAC,CAAC,OAAO;EAC1CQ,OAAO,EAAE,MAAM;EACfY,cAAc,EAAE;AAClB,CAAC,CAAC,CAAC;AAEH,MAAMC,aAAa,GAAG,IAAArB,cAAM,EAACsB,mBAAU,CAAC,CAAC,CAAC;EAAErB;AAAM,CAAC,MAAM;EACvDsB,KAAK,EAAEtB,KAAK,CAACI,OAAO,CAACY,KAAK,CAAC,GAAG;AAChC,CAAC,CAAC,CAAC;AAEH,MAAMO,eAAe,GAAG,IAAAxB,cAAM,EAAC,KAAK,CAAC,CAAC,CAAC;EAAEC;AAAM,CAAC,MAAM;EACpDwB,QAAQ,EAAExB,KAAK,CAACyB,UAAU,CAACD,QAAQ,GAAG,CAAC;EACvCF,KAAK,EAAEtB,KAAK,CAACI,OAAO,CAACY,KAAK,CAACU,IAAI;EAC/BC,UAAU,EAAE3B,KAAK,CAACE,OAAO,CAAC,CAAC,CAAC;EAC5B0B,SAAS,EAAE5B,KAAK,CAACE,OAAO,CAAC,CAAC;AAC5B,CAAC,CAAC,CAAC;AAEH,MAAM2B,kBAAkB,GAAG,IAAA9B,cAAM,EAAC+B,qBAAY,CAAC,CAAC,CAAC;EAAE9B;AAAM,CAAC,MAAM;EAC9D+B,IAAI,EAAE/B,KAAK,CAACI,OAAO,CAACY,KAAK,CAAC,GAAG;AAC/B,CAAC,CAAC,CAAC;AAEH,MAAMgB,gBAAgB,GAAG,IAAAjC,cAAM,EAACkC,mBAAU,CAAC,CAAC;EAC1CX,KAAK,EAAE,GAAGA,eAAK,CAACY,QAAQ,CAAC,CAAC;AAC5B,CAAC,CAAC;AAEK,MAAMC,UAAU,GAAIC,KAAK,IAAK;EACnC,MAAM;IACJC,MAAM;IACNC,KAAK;IACLC,cAAc;IACdC,QAAQ;IACRC,YAAY;IACZC,UAAU;IACVC,WAAW;IACXC,WAAW;IACXC,aAAa;IACbC,cAAc;IACd9B,KAAK;IACL+B,aAAa,GAAG,CAAC;EACnB,CAAC,GAAGX,KAAK;EACT,MAAM;IAAEY,KAAK;IAAEC,QAAQ;IAAEC;EAAK,CAAC,GAAGb,MAAM;EACxC,MAAMc,WAAW,GAAG,GAAGD,IAAI,IAAIb,MAAM,CAACe,EAAE,EAAE;EAC1C,MAAMC,WAAW,GAAG,GAAGH,IAAI,SAASb,MAAM,CAACe,EAAE,EAAE;EAE/C,MAAM;IACJE,UAAU;IACVC,SAAS;IACTC,UAAU,EAAEC,UAAU;IACtBC,SAAS;IACTC;EACF,CAAC,GAAG,IAAAC,kBAAY,EAAC;IACfR,EAAE,EAAED,WAAW;IACfU,IAAI,EAAE;MACJT,EAAE,EAAEf,MAAM,CAACe,EAAE;MACbd,KAAK;MACLY;IACF;EACF,CAAC,CAAC;EAEF,MAAM;IAAEM,UAAU,EAAEM;EAAW,CAAC,GAAG,IAAAC,kBAAY,EAAC;IAC9CX,EAAE,EAAEC,WAAW;IACfQ,IAAI,EAAE;MACJT,EAAE,EAAEf,MAAM,CAACe,EAAE;MACbd,KAAK;MACLY;IACF;EACF,CAAC,CAAC;EAEF,MAAMc,aAAa,GAAIhB,KAAK,IAAK;IAC/BX,MAAM,CAACW,KAAK,GAAGA,KAAK;IACpBT,cAAc,CAACF,MAAM,CAAC;EACxB,CAAC;EAED,MAAM4B,KAAK,GAAG;IACZP,SAAS,EAAEA,SAAS,GAAG,eAAeA,SAAS,CAACQ,CAAC,OAAOR,SAAS,CAACS,CAAC,QAAQ,GAAGC,SAAS;IACvFC,OAAO,EAAEV,UAAU,GAAG,GAAG,GAAG,CAAC;IAC7B7C,KAAK,EAAE;EACT,CAAC;EAED,MAAMwD,sBAAsB,GAAG,CAACC,mCAAe,IAAI,EAAE,EAAEC,MAAM,CAAEC,CAAC,IAAKA,CAAC,KAAK,eAAe,IAAIA,CAAC,KAAK,eAAe,CAAC;EAEpH,MAAMC,iBAAiB,GAAIC,MAAM,IAC/BA,MAAM,CAACC,OAAO,CAAC,mBAAmB,CAAC,IACnCD,MAAM,CAACC,OAAO,CAAC,OAAO,CAAC,IACvBD,MAAM,CAACC,OAAO,CAAC,UAAU,CAAC,IAC1BD,MAAM,CAACE,iBAAiB;;EAE1B;EACA,MAAMC,iBAAiB,GAAG;IACxB,GAAGvB,SAAS;IACZwB,SAAS,EAAGtG,CAAC,IAAK;MAChB,IAAIiG,iBAAiB,CAACjG,CAAC,CAACkG,MAAM,CAAC,EAAE;QAC/B;MACF;MAEApB,SAAS,EAAEwB,SAAS,GAAGtG,CAAC,CAAC;IAC3B,CAAC;IACDuG,aAAa,EAAGvG,CAAC,IAAK;MACpB,IAAIiG,iBAAiB,CAACjG,CAAC,CAACkG,MAAM,CAAC,EAAE;QAC/B;MACF;MAEApB,SAAS,EAAEyB,aAAa,GAAGvG,CAAC,CAAC;IAC/B;EACF,CAAC;EAED,oBACEd,MAAA,CAAAwB,OAAA,CAAA8F,aAAA;IAAKC,GAAG,EAAEpB;EAAW,gBACnBnG,MAAA,CAAAwB,OAAA,CAAA8F,aAAA,YAAAE,SAAA,CAAAhG,OAAA;IAAK+F,GAAG,EAAEzB;EAAW,GAAKqB,iBAAiB,EAAMxB,UAAU,gBACzD3F,MAAA,CAAAwB,OAAA,CAAA8F,aAAA,CAACnF,gBAAgB;IAACmE,KAAK,EAAEA;EAAM,gBAC7BtG,MAAA,CAAAwB,OAAA,CAAA8F,aAAA;IAAKhB,KAAK,EAAE;MAAEnD,KAAK,EAAE,MAAM;MAAEP,OAAO,EAAE;IAAO;EAAE,gBAC7C5C,MAAA,CAAAwB,OAAA,CAAA8F,aAAA,CAAChH,YAAA,CAAAkB,OAAW,qBACVxB,MAAA,CAAAwB,OAAA,CAAA8F,aAAA,CAAC7D,aAAa,MAAE,CACL,CAAC,eAEdzD,MAAA,CAAAwB,OAAA,CAAA8F,aAAA,CAACtE,kBAAkB;IACjByE,QAAQ,EAAE,CAACnC,QAAS;IACpBoC,WAAW,EAAEnC,IAAI,KAAK,QAAQ,IAAI,CAACF,KAAK,CAACsC,QAAQ,CAAC,YAAY,CAAC,GAAG,gBAAgB,GAAG,EAAG;IACxFC,MAAM,EAAEvC,KAAM;IACdP,YAAY,EAAEA,YAAY,IAAI2B,SAAU;IACxCoB,QAAQ,EAAExB,aAAc;IACxBpB,WAAW,EAAEA,WAAY;IACzBD,WAAW,EAAEA,WAAY;IACzB8C,aAAa,EAAEnB,sBAAuB;IACtC5B,UAAU,EAAEA,UAAW;IACvBgD,gBAAgB;IAChB7C,aAAa,EAAEA,aAAc;IAC7BC,cAAc,EAAEA,cAAe;IAC/B6C,uBAAuB,EAAE,CAAC;MAAEC,QAAQ,EAAE;IAAU,CAAC,EAAE;MAAEA,QAAQ,EAAE;IAAU,CAAC,CAAE;IAC5E5E,KAAK,EAAEiC,QAAQ,IAAIjC,KAAM;IACzB+B,aAAa,EAAEA;EAAc,CAC9B,CAAC,EAEDE,QAAQ,iBACPtF,MAAA,CAAAwB,OAAA,CAAA8F,aAAA,CAAC/D,cAAc,qBACbvD,MAAA,CAAAwB,OAAA,CAAA8F,aAAA,CAACjD,gBAAgB;IAAC6D,OAAO,EAAErD,QAAS;IAACsD,IAAI,EAAC;EAAO,gBAC/CnI,MAAA,CAAAwB,OAAA,CAAA8F,aAAA,CAACpD,kBAAkB,MAAE,CACL,CACJ,CAEf,CAAC,EAELoB,QAAQ,IAAIjC,KAAK,iBAAIrD,MAAA,CAAAwB,OAAA,CAAA8F,aAAA,CAAC1D,eAAe,QAAEP,KAAuB,CAC/C,CACf,CACF,CAAC;AAEV,CAAC;AAAC+E,OAAA,CAAA5D,UAAA,GAAAA,UAAA;AAEFA,UAAU,CAAC6D,SAAS,GAAG;EACrB5C,EAAE,EAAE6C,kBAAS,CAACC,GAAG;EACjBpD,cAAc,EAAEmD,kBAAS,CAACE,MAAM;EAChCtD,aAAa,EAAEoD,kBAAS,CAACE,MAAM;EAC/BnD,KAAK,EAAEiD,kBAAS,CAACG,MAAM;EACvBC,MAAM,EAAEJ,kBAAS,CAACK,IAAI;EACtBpD,IAAI,EAAE+C,kBAAS,CAACG,MAAM;EACtBG,KAAK,EAAEN,kBAAS,CAACK,IAAI;EACrBlB,QAAQ,EAAEa,kBAAS,CAACK,IAAI;EACxBE,OAAO,EAAEP,kBAAS,CAACE,MAAM;EACzB7D,KAAK,EAAE2D,kBAAS,CAACQ,MAAM;EACvBhE,YAAY,EAAEwD,kBAAS,CAACS,KAAK,CAAC;IAC5BC,GAAG,EAAEV,kBAAS,CAACW,IAAI,CAACC,UAAU;IAC9BC,MAAM,EAAEb,kBAAS,CAACW,IAAI,CAACC;EACzB,CAAC,CAAC;EACFxE,MAAM,EAAE4D,kBAAS,CAACE,MAAM;EACxBY,OAAO,EAAEd,kBAAS,CAACe,KAAK,CAACH,UAAU;EACnCtE,cAAc,EAAE0D,kBAAS,CAACW,IAAI,CAACC,UAAU;EACzCrE,QAAQ,EAAEyD,kBAAS,CAACW,IAAI,CAACC,UAAU;EACnClE,WAAW,EAAEsD,kBAAS,CAACE,MAAM;EAC7BvD,WAAW,EAAEqD,kBAAS,CAACE,MAAM;EAC7Bc,YAAY,EAAEhB,kBAAS,CAACG,MAAM;EAC9BpF,KAAK,EAAEiF,kBAAS,CAACG,MAAM;EACvB1D,UAAU,EAAEuD,kBAAS,CAACK,IAAI;EAC1BvD,aAAa,EAAEkD,kBAAS,CAACE;AAC3B,CAAC;AAAC,IAAAe,QAAA,GAAAnB,OAAA,CAAA5G,OAAA,GAEagD,UAAU","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"choice-tile.js","names":["_react","_interopRequireDefault","require","_propTypes","_debug","_core","_CardActions","_DragHandle","_IconButton","_RemoveCircle","_styles","_renderUi","_editableHtmlTipTap","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","log","debug","StyledChoiceTile","styled","theme","margin","spacing","backgroundColor","palette","background","paper","display","flexDirection","cursor","touchAction","StyledEditableHtml","EditableHtml","isTargetPrompt","width","borderRadius","error","light","StyledControls","justifyContent","StyledActions","DragHandle","color","StyledErrorText","fontSize","typography","main","marginLeft","marginTop","StyledRemoveCircle","RemoveCircle","fill","StyledIconButton","IconButton","tertiary","ChoiceTile","props","choice","index","onChoiceChange","onDelete","imageSupport","spellCheck","toolbarOpts","pluginProps","maxImageWidth","maxImageHeight","mathMlOptions","label","editable","type","draggableId","id","droppableId","attributes","listeners","setNodeRef","setDragRef","transform","isDragging","useDraggable","data","setDropRef","useDroppable","onLabelChange","style","x","y","undefined","opacity","filteredDefaultPlugins","DEFAULT_PLUGINS","filter","p","isEditableElement","target","closest","isContentEditable","filteredListeners","onKeyDown","onPointerDown","createElement","ref","_extends2","alignItems","disabled","placeholder","includes","markup","onChange","activePlugins","autoWidthToolbar","languageCharactersProps","language","onClick","size","exports","propTypes","PropTypes","any","object","string","isOver","bool","empty","outcome","number","shape","add","func","isRequired","delete","choices","array","choicesLabel","_default"],"sources":["../src/choice-tile.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport debug from 'debug';\nimport { useDraggable, useDroppable } from '@dnd-kit/core';\nimport CardActions from '@mui/material/CardActions';\nimport DragHandle from '@mui/icons-material/DragHandle';\nimport IconButton from '@mui/material/IconButton';\nimport RemoveCircle from '@mui/icons-material/RemoveCircle';\nimport { styled } from '@mui/material/styles';\n\nimport { color } from '@pie-lib/render-ui';\nimport EditableHtml, { DEFAULT_PLUGINS } from '@pie-lib/editable-html-tip-tap';\n\nconst log = debug('@pie-element:placement-ordering:configure:choice-tile');\n\nconst StyledChoiceTile = styled('div')(({ theme }) => ({\n margin: `${theme.spacing(1)} 0`,\n backgroundColor: theme.palette.background.paper,\n display: 'flex',\n flexDirection: 'column',\n cursor: 'move',\n touchAction: 'none',\n}));\n\nconst StyledEditableHtml = styled(EditableHtml)(({ theme, isTargetPrompt }) => ({\n width: '80%',\n borderRadius: '4px',\n ...(isTargetPrompt && {\n backgroundColor: theme.palette.error.light,\n }),\n}));\n\nconst StyledControls = styled('div')(() => ({\n display: 'flex',\n justifyContent: 'flex-end',\n}));\n\nconst StyledActions = styled(DragHandle)(({ theme }) => ({\n color: theme.palette.error[400],\n}));\n\nconst StyledErrorText = styled('div')(({ theme }) => ({\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n marginLeft: theme.spacing(5),\n marginTop: theme.spacing(1),\n}));\n\nconst StyledRemoveCircle = styled(RemoveCircle)(({ theme }) => ({\n fill: theme.palette.error[500],\n}));\n\nconst StyledIconButton = styled(IconButton)({\n color: `${color.tertiary()} !important`,\n});\n\nexport const ChoiceTile = (props) => {\n const {\n choice,\n index,\n onChoiceChange,\n onDelete,\n imageSupport,\n spellCheck,\n toolbarOpts,\n pluginProps,\n maxImageWidth,\n maxImageHeight,\n error,\n mathMlOptions = {},\n } = props;\n const { label, editable, type } = choice;\n const draggableId = `${type}-${choice.id}`;\n const droppableId = `${type}-drop-${choice.id}`;\n\n const {\n attributes,\n listeners,\n setNodeRef: setDragRef,\n transform,\n isDragging,\n } = useDraggable({\n id: draggableId,\n data: {\n id: choice.id,\n index,\n type,\n },\n });\n\n const { setNodeRef: setDropRef } = useDroppable({\n id: droppableId,\n data: {\n id: choice.id,\n index,\n type,\n },\n });\n\n const onLabelChange = (label) => {\n choice.label = label;\n onChoiceChange(choice);\n };\n\n const style = {\n transform: transform ? `translate3d(${transform.x}px, ${transform.y}px, 0)` : undefined,\n opacity: isDragging ? 0.5 : 1,\n width: '100%',\n };\n\n const filteredDefaultPlugins = (DEFAULT_PLUGINS || []).filter((p) => p !== 'bulleted-list' && p !== 'numbered-list');\n\n const isEditableElement = (target) =>\n target.closest('[contenteditable]') ||\n target.closest('input') ||\n target.closest('textarea') ||\n target.isContentEditable;\n\n // edit listeners to prevent dragging when interacting with editable-html element\n const filteredListeners = {\n ...listeners,\n onKeyDown: (e) => {\n if (isEditableElement(e.target)) {\n return;\n }\n\n listeners?.onKeyDown?.(e);\n },\n onPointerDown: (e) => {\n if (isEditableElement(e.target)) {\n return;\n }\n\n listeners?.onPointerDown?.(e);\n },\n };\n\n return (\n <div ref={setDropRef}>\n <div ref={setDragRef} {...filteredListeners} {...attributes}>\n <StyledChoiceTile style={style}>\n <div style={{ width: '100%', display: 'flex', alignItems: 'center' }}>\n <CardActions>\n <StyledActions />\n </CardActions>\n\n <StyledEditableHtml\n disabled={!editable}\n placeholder={type !== 'target' && !label.includes('data-latex') ? 'Enter a choice' : ''}\n markup={label}\n imageSupport={imageSupport || undefined}\n onChange={onLabelChange}\n pluginProps={pluginProps}\n toolbarOpts={toolbarOpts}\n activePlugins={filteredDefaultPlugins}\n spellCheck={spellCheck}\n autoWidthToolbar\n maxImageWidth={maxImageWidth}\n maxImageHeight={maxImageHeight}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n error={editable && error}\n mathMlOptions={mathMlOptions}\n />\n\n {editable && (\n <StyledControls>\n <StyledIconButton onClick={onDelete} size=\"large\">\n <StyledRemoveCircle />\n </StyledIconButton>\n </StyledControls>\n )}\n </div>\n\n {editable && error && <StyledErrorText>{error}</StyledErrorText>}\n </StyledChoiceTile>\n </div>\n </div>\n );\n};\n\nChoiceTile.propTypes = {\n id: PropTypes.any,\n maxImageHeight: PropTypes.object,\n maxImageWidth: PropTypes.object,\n label: PropTypes.string,\n isOver: PropTypes.bool,\n type: PropTypes.string,\n empty: PropTypes.bool,\n disabled: PropTypes.bool,\n outcome: PropTypes.object,\n index: PropTypes.number,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n choice: PropTypes.object,\n choices: PropTypes.array.isRequired,\n onChoiceChange: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n toolbarOpts: PropTypes.object,\n pluginProps: PropTypes.object,\n choicesLabel: PropTypes.string,\n error: PropTypes.string,\n spellCheck: PropTypes.bool,\n mathMlOptions: PropTypes.object,\n};\n\nexport default ChoiceTile;\n"],"mappings":"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","ignoreList":[]}
|
package/configure/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-element/placement-ordering-configure",
|
|
3
|
-
"version": "11.1.
|
|
3
|
+
"version": "11.1.9",
|
|
4
4
|
"private": true,
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "src/index.js",
|
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
"@mui/icons-material": "^7.3.4",
|
|
12
12
|
"@mui/material": "^7.3.4",
|
|
13
13
|
"@pie-framework/pie-configure-events": "^1.3.0",
|
|
14
|
-
"@pie-lib/config-ui": "13.0.
|
|
14
|
+
"@pie-lib/config-ui": "13.0.13",
|
|
15
15
|
"@pie-lib/drag": "4.0.6",
|
|
16
|
-
"@pie-lib/editable-html-tip-tap": "2.1.
|
|
16
|
+
"@pie-lib/editable-html-tip-tap": "2.1.11",
|
|
17
17
|
"@pie-lib/render-ui": "6.1.3",
|
|
18
18
|
"debug": "^4.1.1",
|
|
19
19
|
"lodash-es": "^4.17.23",
|
package/controller/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [11.1.3](https://github.com/pie-framework/pie-elements/compare/@pie-element/placement-ordering-controller@11.1.2...@pie-element/placement-ordering-controller@11.1.3) (2026-08-11)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @pie-element/placement-ordering-controller
|
|
9
|
+
|
|
6
10
|
## [11.1.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/placement-ordering-controller@11.1.1...@pie-element/placement-ordering-controller@11.1.2) (2026-07-02)
|
|
7
11
|
|
|
8
12
|
### Bug Fixes
|
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _lodashEs = require("lodash-es");
|
|
4
|
+
var controller = _interopRequireWildcard(require("../index"));
|
|
5
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
6
|
+
describe('index', () => {
|
|
7
|
+
let base = o => {
|
|
8
|
+
o = (0, _lodashEs.merge)({
|
|
9
|
+
prompt: 'hi',
|
|
10
|
+
promptEnabled: true,
|
|
11
|
+
choices: [],
|
|
12
|
+
correctResponse: [],
|
|
13
|
+
feedbackEnabled: true
|
|
14
|
+
}, o);
|
|
15
|
+
return o;
|
|
16
|
+
};
|
|
17
|
+
describe('model', () => {
|
|
18
|
+
let assertModel = (q, s, e, partialExpected) => {
|
|
19
|
+
return async () => {
|
|
20
|
+
if ((0, _lodashEs.isFunction)(partialExpected) && partialExpected.name === 'Error') {
|
|
21
|
+
expect(() => controller.model(q, s, e)).toThrow(Error);
|
|
22
|
+
return Promise.resolve();
|
|
23
|
+
} else {
|
|
24
|
+
const result = await controller.model(q, s, e);
|
|
25
|
+
if ((0, _lodashEs.isFunction)(partialExpected)) {
|
|
26
|
+
return partialExpected(result);
|
|
27
|
+
} else {
|
|
28
|
+
expect(result).toMatchObject(partialExpected);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
it('returns prompt', assertModel(base(), {}, {}, m => expect(m.prompt).toEqual('hi')));
|
|
34
|
+
it('returns empty config for mode=gather', assertModel(base(), {}, {
|
|
35
|
+
mode: 'gather'
|
|
36
|
+
}, {}));
|
|
37
|
+
it('returns empty config for mode=view', assertModel(base(), {}, {
|
|
38
|
+
mode: 'view'
|
|
39
|
+
}, {
|
|
40
|
+
disabled: true
|
|
41
|
+
}));
|
|
42
|
+
it('returns config.disabled=true for mode=evaluate', assertModel(base(), {}, {
|
|
43
|
+
mode: 'evaluate'
|
|
44
|
+
}, {
|
|
45
|
+
disabled: true
|
|
46
|
+
}));
|
|
47
|
+
it('returns feedback', assertModel(base({
|
|
48
|
+
correctResponse: ['a', 'b'],
|
|
49
|
+
feedback: {
|
|
50
|
+
correct: {
|
|
51
|
+
type: 'custom',
|
|
52
|
+
custom: 'foo'
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}), {
|
|
56
|
+
value: ['a', 'b']
|
|
57
|
+
}, {
|
|
58
|
+
mode: 'evaluate'
|
|
59
|
+
}, {
|
|
60
|
+
feedback: 'foo'
|
|
61
|
+
}));
|
|
62
|
+
describe('choices and outcomes', () => {
|
|
63
|
+
let model, session, env;
|
|
64
|
+
model = base({
|
|
65
|
+
correctResponse: ['a', 'b', 'c'],
|
|
66
|
+
alternateResponses: [{
|
|
67
|
+
response: ['c', 'b', 'a']
|
|
68
|
+
}],
|
|
69
|
+
choices: [{
|
|
70
|
+
label: 'a',
|
|
71
|
+
id: 'a'
|
|
72
|
+
}, {
|
|
73
|
+
label: 'b',
|
|
74
|
+
id: 'b'
|
|
75
|
+
}, {
|
|
76
|
+
label: 'c',
|
|
77
|
+
id: 'c'
|
|
78
|
+
}]
|
|
79
|
+
});
|
|
80
|
+
session = {
|
|
81
|
+
value: ['a', 'b', 'c']
|
|
82
|
+
};
|
|
83
|
+
env = {
|
|
84
|
+
mode: 'evaluate'
|
|
85
|
+
};
|
|
86
|
+
it('choices', assertModel(model, {}, {}, {
|
|
87
|
+
choices: [{
|
|
88
|
+
id: 'a',
|
|
89
|
+
label: 'a'
|
|
90
|
+
}, {
|
|
91
|
+
id: 'b',
|
|
92
|
+
label: 'b'
|
|
93
|
+
}, {
|
|
94
|
+
label: 'c',
|
|
95
|
+
id: 'c'
|
|
96
|
+
}]
|
|
97
|
+
}));
|
|
98
|
+
|
|
99
|
+
// Main Correct Response
|
|
100
|
+
it('returns outcomes - 3 correct', assertModel(model, session, env, {
|
|
101
|
+
outcomes: [{
|
|
102
|
+
id: 'a',
|
|
103
|
+
outcome: 'correct'
|
|
104
|
+
}, {
|
|
105
|
+
id: 'b',
|
|
106
|
+
outcome: 'correct'
|
|
107
|
+
}, {
|
|
108
|
+
id: 'c',
|
|
109
|
+
outcome: 'correct'
|
|
110
|
+
}]
|
|
111
|
+
}));
|
|
112
|
+
|
|
113
|
+
// Alternate Correct Response
|
|
114
|
+
it('returns outcomes for alternate response - 3 correct', assertModel(model, {
|
|
115
|
+
value: ['c', 'b', 'a']
|
|
116
|
+
}, env, {
|
|
117
|
+
outcomes: [{
|
|
118
|
+
id: 'c',
|
|
119
|
+
outcome: 'correct'
|
|
120
|
+
}, {
|
|
121
|
+
id: 'b',
|
|
122
|
+
outcome: 'correct'
|
|
123
|
+
}, {
|
|
124
|
+
id: 'a',
|
|
125
|
+
outcome: 'correct'
|
|
126
|
+
}]
|
|
127
|
+
}));
|
|
128
|
+
|
|
129
|
+
// Main Correct Response
|
|
130
|
+
it('returns outcomes - 1 correct', assertModel(model, {
|
|
131
|
+
value: ['a']
|
|
132
|
+
}, env, {
|
|
133
|
+
outcomes: [{
|
|
134
|
+
id: 'a',
|
|
135
|
+
outcome: 'correct'
|
|
136
|
+
}]
|
|
137
|
+
}));
|
|
138
|
+
|
|
139
|
+
// Alternate Correct Response
|
|
140
|
+
it('returns outcomes for alternate - 1 correct', assertModel(model, {
|
|
141
|
+
value: ['c']
|
|
142
|
+
}, env, {
|
|
143
|
+
outcomes: [{
|
|
144
|
+
id: 'c',
|
|
145
|
+
outcome: 'correct'
|
|
146
|
+
}]
|
|
147
|
+
}));
|
|
148
|
+
it('does not return config.correctResponse - 1 correct', assertModel(model, session, env, {
|
|
149
|
+
disabled: true
|
|
150
|
+
}));
|
|
151
|
+
it('returns outcomes - 2 incorrect', assertModel(model, {
|
|
152
|
+
value: ['b', 'a']
|
|
153
|
+
}, env, {
|
|
154
|
+
outcomes: [{
|
|
155
|
+
id: 'b',
|
|
156
|
+
outcome: 'incorrect'
|
|
157
|
+
}, {
|
|
158
|
+
id: 'a',
|
|
159
|
+
outcome: 'incorrect'
|
|
160
|
+
}]
|
|
161
|
+
}));
|
|
162
|
+
it('returns config.correctResponse - 2 - incorrect', assertModel(model, {
|
|
163
|
+
value: ['b', 'a']
|
|
164
|
+
}, env, {
|
|
165
|
+
correctResponse: ['a', 'b', 'c']
|
|
166
|
+
}));
|
|
167
|
+
});
|
|
168
|
+
describe('session not set', () => {
|
|
169
|
+
const assertModelCorrectness = session => {
|
|
170
|
+
it(`returns correctness: incorrect of session is ${JSON.stringify(session)}`, async () => {
|
|
171
|
+
const m = await controller.model(base({
|
|
172
|
+
correctResponse: ['a', 'b']
|
|
173
|
+
}), session, {
|
|
174
|
+
mode: 'evaluate'
|
|
175
|
+
});
|
|
176
|
+
expect(m.correctness).toEqual('incorrect');
|
|
177
|
+
});
|
|
178
|
+
};
|
|
179
|
+
assertModelCorrectness(undefined);
|
|
180
|
+
assertModelCorrectness(null);
|
|
181
|
+
assertModelCorrectness({});
|
|
182
|
+
});
|
|
183
|
+
describe('correct response', () => {
|
|
184
|
+
const model = base({
|
|
185
|
+
correctResponse: ['a', 'b', 'c'],
|
|
186
|
+
alternateResponses: [{
|
|
187
|
+
response: ['c', 'b', 'a']
|
|
188
|
+
}],
|
|
189
|
+
choices: [{
|
|
190
|
+
label: 'a',
|
|
191
|
+
id: 'a'
|
|
192
|
+
}, {
|
|
193
|
+
label: 'b',
|
|
194
|
+
id: 'b'
|
|
195
|
+
}, {
|
|
196
|
+
label: 'c',
|
|
197
|
+
id: 'c'
|
|
198
|
+
}]
|
|
199
|
+
});
|
|
200
|
+
it('returns correct response if env is correct', async () => {
|
|
201
|
+
const sess = await controller.createCorrectResponseSession(model, {
|
|
202
|
+
mode: 'gather',
|
|
203
|
+
role: 'instructor'
|
|
204
|
+
});
|
|
205
|
+
expect(sess).toEqual({
|
|
206
|
+
id: '1',
|
|
207
|
+
value: ['a', 'b', 'c']
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
it('returns correct response if env is correct for shuffled choices', async () => {
|
|
211
|
+
const model = base({
|
|
212
|
+
correctResponse: ['a', 'b', 'c'],
|
|
213
|
+
alternateResponses: [{
|
|
214
|
+
response: ['c', 'b', 'a']
|
|
215
|
+
}],
|
|
216
|
+
choices: [{
|
|
217
|
+
label: 'c',
|
|
218
|
+
id: 'c'
|
|
219
|
+
}, {
|
|
220
|
+
label: 'b',
|
|
221
|
+
id: 'b'
|
|
222
|
+
}, {
|
|
223
|
+
label: 'a',
|
|
224
|
+
id: 'a'
|
|
225
|
+
}]
|
|
226
|
+
});
|
|
227
|
+
const sess = await controller.createCorrectResponseSession(model, {
|
|
228
|
+
mode: 'gather',
|
|
229
|
+
role: 'instructor'
|
|
230
|
+
});
|
|
231
|
+
expect(sess).toEqual({
|
|
232
|
+
id: '1',
|
|
233
|
+
value: ['a', 'b', 'c']
|
|
234
|
+
});
|
|
235
|
+
});
|
|
236
|
+
it('returns null if mode is evaluate', async () => {
|
|
237
|
+
const sess = await controller.createCorrectResponseSession(model, {
|
|
238
|
+
mode: 'evaluate',
|
|
239
|
+
role: 'instructor'
|
|
240
|
+
});
|
|
241
|
+
expect(sess).toBeNull();
|
|
242
|
+
});
|
|
243
|
+
it('returns null if role is student', async () => {
|
|
244
|
+
const noResult = await controller.createCorrectResponseSession(model, {
|
|
245
|
+
mode: 'gather',
|
|
246
|
+
role: 'student'
|
|
247
|
+
});
|
|
248
|
+
expect(noResult).toBeNull();
|
|
249
|
+
});
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
describe('outcome', () => {
|
|
253
|
+
const assertOutcome = (question, value, expectedScore, env) => {
|
|
254
|
+
it(`${expectedScore} when answer: ${value} and question: ${JSON.stringify(question)}, env: ${JSON.stringify(env)}`, async () => {
|
|
255
|
+
const result = await controller.outcome(question, {
|
|
256
|
+
value
|
|
257
|
+
}, env);
|
|
258
|
+
expect(result.score).toEqual(expectedScore);
|
|
259
|
+
});
|
|
260
|
+
};
|
|
261
|
+
const assertOutcomeError = (question, session, env) => {
|
|
262
|
+
it(`throws error for ${JSON.stringify(question)}`, () => expect(controller.outcome(question, session, env)).rejects.toThrow(controller.questionError()));
|
|
263
|
+
};
|
|
264
|
+
const assertOutcomeSessionNotset = session => {
|
|
265
|
+
it(`return score: 0 and empty: true if session is ${JSON.stringify(session)}`, () => expect(controller.outcome({}, session, {
|
|
266
|
+
mode: 'evaluate'
|
|
267
|
+
})).resolves.toEqual({
|
|
268
|
+
score: 0,
|
|
269
|
+
empty: true,
|
|
270
|
+
logTrace: ["Student did not interact with the placement-ordering item."]
|
|
271
|
+
}));
|
|
272
|
+
};
|
|
273
|
+
assertOutcomeError(null, {
|
|
274
|
+
value: []
|
|
275
|
+
}, {});
|
|
276
|
+
assertOutcomeError({}, {
|
|
277
|
+
value: []
|
|
278
|
+
}, {});
|
|
279
|
+
assertOutcomeError({
|
|
280
|
+
correctResponse: []
|
|
281
|
+
}, {
|
|
282
|
+
value: []
|
|
283
|
+
}, {});
|
|
284
|
+
assertOutcomeSessionNotset(undefined);
|
|
285
|
+
assertOutcomeSessionNotset(null);
|
|
286
|
+
assertOutcomeSessionNotset({});
|
|
287
|
+
|
|
288
|
+
// Main Correct Response
|
|
289
|
+
assertOutcome({
|
|
290
|
+
partialScoring: true,
|
|
291
|
+
correctResponse: ['a'],
|
|
292
|
+
alternateResponses: [{
|
|
293
|
+
response: ['c']
|
|
294
|
+
}]
|
|
295
|
+
}, ['a'], 1);
|
|
296
|
+
assertOutcome({
|
|
297
|
+
partialScoring: true,
|
|
298
|
+
correctResponse: ['a'],
|
|
299
|
+
alternateResponses: [{
|
|
300
|
+
response: ['c']
|
|
301
|
+
}]
|
|
302
|
+
}, ['b'], 0);
|
|
303
|
+
assertOutcome({
|
|
304
|
+
correctResponse: ['a', 'b', 'c'],
|
|
305
|
+
alternateResponses: [{
|
|
306
|
+
response: ['b', 'c', 'a']
|
|
307
|
+
}]
|
|
308
|
+
}, ['c', 'a', 'b'], 0.33);
|
|
309
|
+
assertOutcome({
|
|
310
|
+
correctResponse: ['a', 'b'],
|
|
311
|
+
alternateResponses: [['c', 'b']]
|
|
312
|
+
}, ['c', 'a', 'b'], 0);
|
|
313
|
+
assertOutcome({
|
|
314
|
+
correctResponse: ['a', 'b', 'c'],
|
|
315
|
+
alternateResponses: [{
|
|
316
|
+
response: ['a', 'c', 'b']
|
|
317
|
+
}]
|
|
318
|
+
}, ['a', 'b'], 0.33);
|
|
319
|
+
assertOutcome({
|
|
320
|
+
partialScoring: true,
|
|
321
|
+
correctResponse: ['a', 'b', 'c'],
|
|
322
|
+
alternateResponses: [{
|
|
323
|
+
response: ['a', 'b']
|
|
324
|
+
}]
|
|
325
|
+
}, ['c', 'a', 'b'], 0.33);
|
|
326
|
+
assertOutcome({
|
|
327
|
+
partialScoring: false,
|
|
328
|
+
correctResponse: ['a', 'b', 'c'],
|
|
329
|
+
alternateResponses: [{
|
|
330
|
+
response: ['a', 'c', 'b']
|
|
331
|
+
}]
|
|
332
|
+
}, ['a', 'b'], 0);
|
|
333
|
+
assertOutcome({
|
|
334
|
+
partialScoring: false,
|
|
335
|
+
correctResponse: ['a', 'b', 'c'],
|
|
336
|
+
alternateResponses: [{
|
|
337
|
+
response: ['a', 'b']
|
|
338
|
+
}]
|
|
339
|
+
}, ['c', 'a', 'b'], 0, {
|
|
340
|
+
partialScoring: true
|
|
341
|
+
});
|
|
342
|
+
|
|
343
|
+
// Alternate Correct Response
|
|
344
|
+
assertOutcome({
|
|
345
|
+
partialScoring: true,
|
|
346
|
+
correctResponse: ['a'],
|
|
347
|
+
alternateResponses: [{
|
|
348
|
+
response: ['c']
|
|
349
|
+
}]
|
|
350
|
+
}, ['c'], 1);
|
|
351
|
+
assertOutcome({
|
|
352
|
+
partialScoring: true,
|
|
353
|
+
correctResponse: ['a'],
|
|
354
|
+
alternateResponses: [{
|
|
355
|
+
response: ['c']
|
|
356
|
+
}]
|
|
357
|
+
}, ['b'], 0);
|
|
358
|
+
assertOutcome({
|
|
359
|
+
correctResponse: ['a', 'b', 'c'],
|
|
360
|
+
alternateResponses: [{
|
|
361
|
+
response: ['c', 'b', 'a']
|
|
362
|
+
}]
|
|
363
|
+
}, ['c', 'a', 'b'], 0.67);
|
|
364
|
+
assertOutcome({
|
|
365
|
+
correctResponse: ['a', 'b'],
|
|
366
|
+
alternateResponses: [{
|
|
367
|
+
response: ['c', 'b']
|
|
368
|
+
}]
|
|
369
|
+
}, ['c', 'a', 'b'], 0);
|
|
370
|
+
assertOutcome({
|
|
371
|
+
correctResponse: ['a', 'b', 'c'],
|
|
372
|
+
alternateResponses: [{
|
|
373
|
+
response: ['c', 'b', 'a']
|
|
374
|
+
}]
|
|
375
|
+
}, ['c', 'b'], 0.33);
|
|
376
|
+
assertOutcome({
|
|
377
|
+
partialScoring: true,
|
|
378
|
+
correctResponse: ['a', 'b', 'c'],
|
|
379
|
+
alternateResponses: [{
|
|
380
|
+
response: ['a', 'c', 'b']
|
|
381
|
+
}]
|
|
382
|
+
}, ['c', 'a', 'b'], 0.67);
|
|
383
|
+
assertOutcome({
|
|
384
|
+
partialScoring: false,
|
|
385
|
+
correctResponse: ['a', 'b', 'c'],
|
|
386
|
+
alternateResponses: [{
|
|
387
|
+
response: ['a', 'c', 'b']
|
|
388
|
+
}]
|
|
389
|
+
}, ['a', 'b'], 0);
|
|
390
|
+
assertOutcome({
|
|
391
|
+
partialScoring: false,
|
|
392
|
+
correctResponse: ['a', 'b', 'c'],
|
|
393
|
+
alternateResponses: [{
|
|
394
|
+
response: ['a', 'c', 'b']
|
|
395
|
+
}]
|
|
396
|
+
}, ['c', 'a', 'b'], 0, {
|
|
397
|
+
partialScoring: true
|
|
398
|
+
});
|
|
399
|
+
});
|
|
400
|
+
});
|
|
401
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoRXMiLCJyZXF1aXJlIiwiY29udHJvbGxlciIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZGVzY3JpYmUiLCJiYXNlIiwibWVyZ2UiLCJwcm9tcHQiLCJwcm9tcHRFbmFibGVkIiwiY2hvaWNlcyIsImNvcnJlY3RSZXNwb25zZSIsImZlZWRiYWNrRW5hYmxlZCIsImFzc2VydE1vZGVsIiwicSIsInMiLCJwYXJ0aWFsRXhwZWN0ZWQiLCJpc0Z1bmN0aW9uIiwibmFtZSIsImV4cGVjdCIsIm1vZGVsIiwidG9UaHJvdyIsIkVycm9yIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZXN1bHQiLCJ0b01hdGNoT2JqZWN0IiwiaXQiLCJtIiwidG9FcXVhbCIsIm1vZGUiLCJkaXNhYmxlZCIsImZlZWRiYWNrIiwiY29ycmVjdCIsInR5cGUiLCJjdXN0b20iLCJ2YWx1ZSIsInNlc3Npb24iLCJlbnYiLCJhbHRlcm5hdGVSZXNwb25zZXMiLCJyZXNwb25zZSIsImxhYmVsIiwiaWQiLCJvdXRjb21lcyIsIm91dGNvbWUiLCJhc3NlcnRNb2RlbENvcnJlY3RuZXNzIiwiSlNPTiIsInN0cmluZ2lmeSIsImNvcnJlY3RuZXNzIiwidW5kZWZpbmVkIiwic2VzcyIsImNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24iLCJyb2xlIiwidG9CZU51bGwiLCJub1Jlc3VsdCIsImFzc2VydE91dGNvbWUiLCJxdWVzdGlvbiIsImV4cGVjdGVkU2NvcmUiLCJzY29yZSIsImFzc2VydE91dGNvbWVFcnJvciIsInJlamVjdHMiLCJxdWVzdGlvbkVycm9yIiwiYXNzZXJ0T3V0Y29tZVNlc3Npb25Ob3RzZXQiLCJyZXNvbHZlcyIsImVtcHR5IiwibG9nVHJhY2UiLCJwYXJ0aWFsU2NvcmluZyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vaW5kZXgudGVzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0Z1bmN0aW9uLCBtZXJnZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgKiBhcyBjb250cm9sbGVyIGZyb20gJy4uL2luZGV4JztcblxuZGVzY3JpYmUoJ2luZGV4JywgKCkgPT4ge1xuICBsZXQgYmFzZSA9IChvKSA9PiB7XG4gICAgbyA9IG1lcmdlKFxuICAgICAge1xuICAgICAgICBwcm9tcHQ6ICdoaScsXG4gICAgICAgIHByb21wdEVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGNob2ljZXM6IFtdLFxuICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFtdLFxuICAgICAgICBmZWVkYmFja0VuYWJsZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAgbyxcbiAgICApO1xuICAgIHJldHVybiBvO1xuICB9O1xuXG4gIGRlc2NyaWJlKCdtb2RlbCcsICgpID0+IHtcbiAgICBsZXQgYXNzZXJ0TW9kZWwgPSAocSwgcywgZSwgcGFydGlhbEV4cGVjdGVkKSA9PiB7XG4gICAgICByZXR1cm4gYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihwYXJ0aWFsRXhwZWN0ZWQpICYmIHBhcnRpYWxFeHBlY3RlZC5uYW1lID09PSAnRXJyb3InKSB7XG4gICAgICAgICAgZXhwZWN0KCgpID0+IGNvbnRyb2xsZXIubW9kZWwocSwgcywgZSkpLnRvVGhyb3coRXJyb3IpO1xuXG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnRyb2xsZXIubW9kZWwocSwgcywgZSk7XG5cbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihwYXJ0aWFsRXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFydGlhbEV4cGVjdGVkKHJlc3VsdCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvTWF0Y2hPYmplY3QocGFydGlhbEV4cGVjdGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcblxuICAgIGl0KFxuICAgICAgJ3JldHVybnMgcHJvbXB0JyxcbiAgICAgIGFzc2VydE1vZGVsKGJhc2UoKSwge30sIHt9LCAobSkgPT4gZXhwZWN0KG0ucHJvbXB0KS50b0VxdWFsKCdoaScpKSxcbiAgICApO1xuXG4gICAgaXQoJ3JldHVybnMgZW1wdHkgY29uZmlnIGZvciBtb2RlPWdhdGhlcicsIGFzc2VydE1vZGVsKGJhc2UoKSwge30sIHsgbW9kZTogJ2dhdGhlcicgfSwge30pKTtcblxuICAgIGl0KCdyZXR1cm5zIGVtcHR5IGNvbmZpZyBmb3IgbW9kZT12aWV3JywgYXNzZXJ0TW9kZWwoYmFzZSgpLCB7fSwgeyBtb2RlOiAndmlldycgfSwgeyBkaXNhYmxlZDogdHJ1ZSB9KSk7XG5cbiAgICBpdChcbiAgICAgICdyZXR1cm5zIGNvbmZpZy5kaXNhYmxlZD10cnVlIGZvciBtb2RlPWV2YWx1YXRlJyxcbiAgICAgIGFzc2VydE1vZGVsKGJhc2UoKSwge30sIHsgbW9kZTogJ2V2YWx1YXRlJyB9LCB7IGRpc2FibGVkOiB0cnVlIH0pLFxuICAgICk7XG5cbiAgICBpdChcbiAgICAgICdyZXR1cm5zIGZlZWRiYWNrJyxcbiAgICAgIGFzc2VydE1vZGVsKFxuICAgICAgICBiYXNlKHtcbiAgICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFsnYScsICdiJ10sXG4gICAgICAgICAgZmVlZGJhY2s6IHsgY29ycmVjdDogeyB0eXBlOiAnY3VzdG9tJywgY3VzdG9tOiAnZm9vJyB9IH0sXG4gICAgICAgIH0pLFxuICAgICAgICB7IHZhbHVlOiBbJ2EnLCAnYiddIH0sXG4gICAgICAgIHsgbW9kZTogJ2V2YWx1YXRlJyB9LFxuICAgICAgICB7IGZlZWRiYWNrOiAnZm9vJyB9LFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgZGVzY3JpYmUoJ2Nob2ljZXMgYW5kIG91dGNvbWVzJywgKCkgPT4ge1xuICAgICAgbGV0IG1vZGVsLCBzZXNzaW9uLCBlbnY7XG5cbiAgICAgIG1vZGVsID0gYmFzZSh7XG4gICAgICAgIGNvcnJlY3RSZXNwb25zZTogWydhJywgJ2InLCAnYyddLFxuICAgICAgICBhbHRlcm5hdGVSZXNwb25zZXM6IFt7IHJlc3BvbnNlOiBbJ2MnLCAnYicsICdhJ10gfV0sXG4gICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICB7IGxhYmVsOiAnYScsIGlkOiAnYScgfSxcbiAgICAgICAgICB7IGxhYmVsOiAnYicsIGlkOiAnYicgfSxcbiAgICAgICAgICB7IGxhYmVsOiAnYycsIGlkOiAnYycgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuXG4gICAgICBzZXNzaW9uID0geyB2YWx1ZTogWydhJywgJ2InLCAnYyddIH07XG4gICAgICBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcblxuICAgICAgaXQoXG4gICAgICAgICdjaG9pY2VzJyxcbiAgICAgICAgYXNzZXJ0TW9kZWwoXG4gICAgICAgICAgbW9kZWwsXG4gICAgICAgICAge30sXG4gICAgICAgICAge30sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgICB7IGlkOiAnYScsIGxhYmVsOiAnYScgfSxcbiAgICAgICAgICAgICAgeyBpZDogJ2InLCBsYWJlbDogJ2InIH0sXG4gICAgICAgICAgICAgIHsgbGFiZWw6ICdjJywgaWQ6ICdjJyB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgKTtcblxuICAgICAgLy8gTWFpbiBDb3JyZWN0IFJlc3BvbnNlXG4gICAgICBpdChcbiAgICAgICAgJ3JldHVybnMgb3V0Y29tZXMgLSAzIGNvcnJlY3QnLFxuICAgICAgICBhc3NlcnRNb2RlbChtb2RlbCwgc2Vzc2lvbiwgZW52LCB7XG4gICAgICAgICAgb3V0Y29tZXM6IFtcbiAgICAgICAgICAgIHsgaWQ6ICdhJywgb3V0Y29tZTogJ2NvcnJlY3QnIH0sXG4gICAgICAgICAgICB7IGlkOiAnYicsIG91dGNvbWU6ICdjb3JyZWN0JyB9LFxuICAgICAgICAgICAgeyBpZDogJ2MnLCBvdXRjb21lOiAnY29ycmVjdCcgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIC8vIEFsdGVybmF0ZSBDb3JyZWN0IFJlc3BvbnNlXG4gICAgICBpdChcbiAgICAgICAgJ3JldHVybnMgb3V0Y29tZXMgZm9yIGFsdGVybmF0ZSByZXNwb25zZSAtIDMgY29ycmVjdCcsXG4gICAgICAgIGFzc2VydE1vZGVsKG1vZGVsLCB7IHZhbHVlOiBbJ2MnLCAnYicsICdhJ10gfSwgZW52LCB7XG4gICAgICAgICAgb3V0Y29tZXM6IFtcbiAgICAgICAgICAgIHsgaWQ6ICdjJywgb3V0Y29tZTogJ2NvcnJlY3QnIH0sXG4gICAgICAgICAgICB7IGlkOiAnYicsIG91dGNvbWU6ICdjb3JyZWN0JyB9LFxuICAgICAgICAgICAgeyBpZDogJ2EnLCBvdXRjb21lOiAnY29ycmVjdCcgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIC8vIE1haW4gQ29ycmVjdCBSZXNwb25zZVxuICAgICAgaXQoXG4gICAgICAgICdyZXR1cm5zIG91dGNvbWVzIC0gMSBjb3JyZWN0JyxcbiAgICAgICAgYXNzZXJ0TW9kZWwobW9kZWwsIHsgdmFsdWU6IFsnYSddIH0sIGVudiwge1xuICAgICAgICAgIG91dGNvbWVzOiBbeyBpZDogJ2EnLCBvdXRjb21lOiAnY29ycmVjdCcgfV0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgICAgLy8gQWx0ZXJuYXRlIENvcnJlY3QgUmVzcG9uc2VcbiAgICAgIGl0KFxuICAgICAgICAncmV0dXJucyBvdXRjb21lcyBmb3IgYWx0ZXJuYXRlIC0gMSBjb3JyZWN0JyxcbiAgICAgICAgYXNzZXJ0TW9kZWwobW9kZWwsIHsgdmFsdWU6IFsnYyddIH0sIGVudiwge1xuICAgICAgICAgIG91dGNvbWVzOiBbeyBpZDogJ2MnLCBvdXRjb21lOiAnY29ycmVjdCcgfV0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgICAgaXQoJ2RvZXMgbm90IHJldHVybiBjb25maWcuY29ycmVjdFJlc3BvbnNlIC0gMSBjb3JyZWN0JywgYXNzZXJ0TW9kZWwobW9kZWwsIHNlc3Npb24sIGVudiwgeyBkaXNhYmxlZDogdHJ1ZSB9KSk7XG5cbiAgICAgIGl0KFxuICAgICAgICAncmV0dXJucyBvdXRjb21lcyAtIDIgaW5jb3JyZWN0JyxcbiAgICAgICAgYXNzZXJ0TW9kZWwobW9kZWwsIHsgdmFsdWU6IFsnYicsICdhJ10gfSwgZW52LCB7XG4gICAgICAgICAgb3V0Y29tZXM6IFtcbiAgICAgICAgICAgIHsgaWQ6ICdiJywgb3V0Y29tZTogJ2luY29ycmVjdCcgfSxcbiAgICAgICAgICAgIHsgaWQ6ICdhJywgb3V0Y29tZTogJ2luY29ycmVjdCcgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIGl0KFxuICAgICAgICAncmV0dXJucyBjb25maWcuY29ycmVjdFJlc3BvbnNlIC0gMiAtIGluY29ycmVjdCcsXG4gICAgICAgIGFzc2VydE1vZGVsKG1vZGVsLCB7IHZhbHVlOiBbJ2InLCAnYSddIH0sIGVudiwge1xuICAgICAgICAgIGNvcnJlY3RSZXNwb25zZTogWydhJywgJ2InLCAnYyddLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnc2Vzc2lvbiBub3Qgc2V0JywgKCkgPT4ge1xuICAgICAgY29uc3QgYXNzZXJ0TW9kZWxDb3JyZWN0bmVzcyA9IChzZXNzaW9uKSA9PiB7XG4gICAgICAgIGl0KGByZXR1cm5zIGNvcnJlY3RuZXNzOiBpbmNvcnJlY3Qgb2Ygc2Vzc2lvbiBpcyAke0pTT04uc3RyaW5naWZ5KHNlc3Npb24pfWAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBtID0gYXdhaXQgY29udHJvbGxlci5tb2RlbChiYXNlKHsgY29ycmVjdFJlc3BvbnNlOiBbJ2EnLCAnYiddIH0pLCBzZXNzaW9uLCB7IG1vZGU6ICdldmFsdWF0ZScgfSk7XG4gICAgICAgICAgZXhwZWN0KG0uY29ycmVjdG5lc3MpLnRvRXF1YWwoJ2luY29ycmVjdCcpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGFzc2VydE1vZGVsQ29ycmVjdG5lc3ModW5kZWZpbmVkKTtcbiAgICAgIGFzc2VydE1vZGVsQ29ycmVjdG5lc3MobnVsbCk7XG4gICAgICBhc3NlcnRNb2RlbENvcnJlY3RuZXNzKHt9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjb3JyZWN0IHJlc3BvbnNlJywgKCkgPT4ge1xuICAgICAgY29uc3QgbW9kZWwgPSBiYXNlKHtcbiAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBbJ2EnLCAnYicsICdjJ10sXG4gICAgICAgIGFsdGVybmF0ZVJlc3BvbnNlczogW3sgcmVzcG9uc2U6IFsnYycsICdiJywgJ2EnXSB9XSxcbiAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgIHsgbGFiZWw6ICdhJywgaWQ6ICdhJyB9LFxuICAgICAgICAgIHsgbGFiZWw6ICdiJywgaWQ6ICdiJyB9LFxuICAgICAgICAgIHsgbGFiZWw6ICdjJywgaWQ6ICdjJyB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIGl0KCdyZXR1cm5zIGNvcnJlY3QgcmVzcG9uc2UgaWYgZW52IGlzIGNvcnJlY3QnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlc3MgPSBhd2FpdCBjb250cm9sbGVyLmNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24obW9kZWwsIHtcbiAgICAgICAgICBtb2RlOiAnZ2F0aGVyJyxcbiAgICAgICAgICByb2xlOiAnaW5zdHJ1Y3RvcicsXG4gICAgICAgIH0pO1xuICAgICAgICBleHBlY3Qoc2VzcykudG9FcXVhbCh7IGlkOiAnMScsIHZhbHVlOiBbJ2EnLCAnYicsICdjJ10gfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgY29ycmVjdCByZXNwb25zZSBpZiBlbnYgaXMgY29ycmVjdCBmb3Igc2h1ZmZsZWQgY2hvaWNlcycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgbW9kZWwgPSBiYXNlKHtcbiAgICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFsnYScsICdiJywgJ2MnXSxcbiAgICAgICAgICBhbHRlcm5hdGVSZXNwb25zZXM6IFt7IHJlc3BvbnNlOiBbJ2MnLCAnYicsICdhJ10gfV0sXG4gICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgeyBsYWJlbDogJ2MnLCBpZDogJ2MnIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnYicsIGlkOiAnYicgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdhJywgaWQ6ICdhJyB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHNlc3MgPSBhd2FpdCBjb250cm9sbGVyLmNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24obW9kZWwsIHtcbiAgICAgICAgICBtb2RlOiAnZ2F0aGVyJyxcbiAgICAgICAgICByb2xlOiAnaW5zdHJ1Y3RvcicsXG4gICAgICAgIH0pO1xuICAgICAgICBleHBlY3Qoc2VzcykudG9FcXVhbCh7IGlkOiAnMScsIHZhbHVlOiBbJ2EnLCAnYicsICdjJ10gfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgbnVsbCBpZiBtb2RlIGlzIGV2YWx1YXRlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBzZXNzID0gYXdhaXQgY29udHJvbGxlci5jcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uKG1vZGVsLCB7XG4gICAgICAgICAgbW9kZTogJ2V2YWx1YXRlJyxcbiAgICAgICAgICByb2xlOiAnaW5zdHJ1Y3RvcicsXG4gICAgICAgIH0pO1xuICAgICAgICBleHBlY3Qoc2VzcykudG9CZU51bGwoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBudWxsIGlmIHJvbGUgaXMgc3R1ZGVudCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qgbm9SZXN1bHQgPSBhd2FpdCBjb250cm9sbGVyLmNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24obW9kZWwsIHtcbiAgICAgICAgICBtb2RlOiAnZ2F0aGVyJyxcbiAgICAgICAgICByb2xlOiAnc3R1ZGVudCcsXG4gICAgICAgIH0pO1xuICAgICAgICBleHBlY3Qobm9SZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ291dGNvbWUnLCAoKSA9PiB7XG4gICAgY29uc3QgYXNzZXJ0T3V0Y29tZSA9IChxdWVzdGlvbiwgdmFsdWUsIGV4cGVjdGVkU2NvcmUsIGVudikgPT4ge1xuICAgICAgaXQoYCR7ZXhwZWN0ZWRTY29yZX0gd2hlbiBhbnN3ZXI6ICR7dmFsdWV9IGFuZCBxdWVzdGlvbjogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgcXVlc3Rpb24sXG4gICAgICApfSwgZW52OiAke0pTT04uc3RyaW5naWZ5KGVudil9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb250cm9sbGVyLm91dGNvbWUocXVlc3Rpb24sIHsgdmFsdWUgfSwgZW52KTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5zY29yZSkudG9FcXVhbChleHBlY3RlZFNjb3JlKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYXNzZXJ0T3V0Y29tZUVycm9yID0gKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpID0+IHtcbiAgICAgIGl0KGB0aHJvd3MgZXJyb3IgZm9yICR7SlNPTi5zdHJpbmdpZnkocXVlc3Rpb24pfWAsICgpID0+XG4gICAgICAgIGV4cGVjdChjb250cm9sbGVyLm91dGNvbWUocXVlc3Rpb24sIHNlc3Npb24sIGVudikpLnJlamVjdHMudG9UaHJvdyhjb250cm9sbGVyLnF1ZXN0aW9uRXJyb3IoKSkpO1xuICAgIH07XG4gICAgY29uc3QgYXNzZXJ0T3V0Y29tZVNlc3Npb25Ob3RzZXQgPSAoc2Vzc2lvbikgPT4ge1xuICAgICAgaXQoYHJldHVybiBzY29yZTogMCBhbmQgZW1wdHk6IHRydWUgaWYgc2Vzc2lvbiBpcyAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBzZXNzaW9uXG4gICAgICApfWAsICgpID0+XG4gICAgICAgIGV4cGVjdChcbiAgICAgICAgICBjb250cm9sbGVyLm91dGNvbWUoe30sIHNlc3Npb24sIHsgbW9kZTogJ2V2YWx1YXRlJyB9KVxuICAgICAgICApLnJlc29sdmVzLnRvRXF1YWwoe1xuICAgICAgICAgIHNjb3JlOiAwLCBlbXB0eTogdHJ1ZSwgbG9nVHJhY2U6IFtcIlN0dWRlbnQgZGlkIG5vdCBpbnRlcmFjdCB3aXRoIHRoZSBwbGFjZW1lbnQtb3JkZXJpbmcgaXRlbS5cIl1cbiAgICAgICAgfSkpO1xuICAgIH07XG5cbiAgICBhc3NlcnRPdXRjb21lRXJyb3IobnVsbCwgeyB2YWx1ZTogW10gfSwge30pO1xuICAgIGFzc2VydE91dGNvbWVFcnJvcih7fSwgeyB2YWx1ZTogW10gfSwge30pO1xuICAgIGFzc2VydE91dGNvbWVFcnJvcih7IGNvcnJlY3RSZXNwb25zZTogW10gfSwgeyB2YWx1ZTogW10gfSwge30pO1xuXG4gICAgYXNzZXJ0T3V0Y29tZVNlc3Npb25Ob3RzZXQodW5kZWZpbmVkKTtcbiAgICBhc3NlcnRPdXRjb21lU2Vzc2lvbk5vdHNldChudWxsKTtcbiAgICBhc3NlcnRPdXRjb21lU2Vzc2lvbk5vdHNldCh7fSk7XG5cbiAgICAvLyBNYWluIENvcnJlY3QgUmVzcG9uc2VcbiAgICBhc3NlcnRPdXRjb21lKFxuICAgICAge1xuICAgICAgICBwYXJ0aWFsU2NvcmluZzogdHJ1ZSxcbiAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBbJ2EnXSxcbiAgICAgICAgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbeyByZXNwb25zZTogWydjJ10gfV0sXG4gICAgICB9LFxuICAgICAgWydhJ10sXG4gICAgICAxLFxuICAgICk7XG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgIHtcbiAgICAgICAgcGFydGlhbFNjb3Jpbmc6IHRydWUsXG4gICAgICAgIGNvcnJlY3RSZXNwb25zZTogWydhJ10sXG4gICAgICAgIGFsdGVybmF0ZVJlc3BvbnNlczogW3sgcmVzcG9uc2U6IFsnYyddIH1dLFxuICAgICAgfSxcbiAgICAgIFsnYiddLFxuICAgICAgMCxcbiAgICApO1xuICAgIGFzc2VydE91dGNvbWUoXG4gICAgICB7XG4gICAgICAgIGNvcnJlY3RSZXNwb25zZTogWydhJywgJ2InLCAnYyddLFxuICAgICAgICBhbHRlcm5hdGVSZXNwb25zZXM6IFt7IHJlc3BvbnNlOiBbJ2InLCAnYycsICdhJ10gfV0sXG4gICAgICB9LFxuICAgICAgWydjJywgJ2EnLCAnYiddLFxuICAgICAgMC4zMyxcbiAgICApO1xuICAgIGFzc2VydE91dGNvbWUoeyBjb3JyZWN0UmVzcG9uc2U6IFsnYScsICdiJ10sIGFsdGVybmF0ZVJlc3BvbnNlczogW1snYycsICdiJ11dIH0sIFsnYycsICdhJywgJ2InXSwgMCk7XG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgIHtcbiAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBbJ2EnLCAnYicsICdjJ10sXG4gICAgICAgIGFsdGVybmF0ZVJlc3BvbnNlczogW3sgcmVzcG9uc2U6IFsnYScsICdjJywgJ2InXSB9XSxcbiAgICAgIH0sXG4gICAgICBbJ2EnLCAnYiddLFxuICAgICAgMC4zMyxcbiAgICApO1xuICAgIGFzc2VydE91dGNvbWUoXG4gICAgICB7XG4gICAgICAgIHBhcnRpYWxTY29yaW5nOiB0cnVlLFxuICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFsnYScsICdiJywgJ2MnXSxcbiAgICAgICAgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbeyByZXNwb25zZTogWydhJywgJ2InXSB9XSxcbiAgICAgIH0sXG4gICAgICBbJ2MnLCAnYScsICdiJ10sXG4gICAgICAwLjMzLFxuICAgICk7XG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgIHtcbiAgICAgICAgcGFydGlhbFNjb3Jpbmc6IGZhbHNlLFxuICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFsnYScsICdiJywgJ2MnXSxcbiAgICAgICAgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbeyByZXNwb25zZTogWydhJywgJ2MnLCAnYiddIH1dLFxuICAgICAgfSxcbiAgICAgIFsnYScsICdiJ10sXG4gICAgICAwLFxuICAgICk7XG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgIHtcbiAgICAgICAgcGFydGlhbFNjb3Jpbmc6IGZhbHNlLFxuICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFsnYScsICdiJywgJ2MnXSxcbiAgICAgICAgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbeyByZXNwb25zZTogWydhJywgJ2InXSB9XSxcbiAgICAgIH0sXG4gICAgICBbJ2MnLCAnYScsICdiJ10sXG4gICAgICAwLFxuICAgICAgeyBwYXJ0aWFsU2NvcmluZzogdHJ1ZSB9LFxuICAgICk7XG5cbiAgICAvLyBBbHRlcm5hdGUgQ29ycmVjdCBSZXNwb25zZVxuICAgIGFzc2VydE91dGNvbWUoXG4gICAgICB7XG4gICAgICAgIHBhcnRpYWxTY29yaW5nOiB0cnVlLFxuICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFsnYSddLFxuICAgICAgICBhbHRlcm5hdGVSZXNwb25zZXM6IFt7IHJlc3BvbnNlOiBbJ2MnXSB9XSxcbiAgICAgIH0sXG4gICAgICBbJ2MnXSxcbiAgICAgIDEsXG4gICAgKTtcbiAgICBhc3NlcnRPdXRjb21lKFxuICAgICAge1xuICAgICAgICBwYXJ0aWFsU2NvcmluZzogdHJ1ZSxcbiAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBbJ2EnXSxcbiAgICAgICAgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbeyByZXNwb25zZTogWydjJ10gfV0sXG4gICAgICB9LFxuICAgICAgWydiJ10sXG4gICAgICAwLFxuICAgICk7XG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgIHtcbiAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBbJ2EnLCAnYicsICdjJ10sXG4gICAgICAgIGFsdGVybmF0ZVJlc3BvbnNlczogW3sgcmVzcG9uc2U6IFsnYycsICdiJywgJ2EnXSB9XSxcbiAgICAgIH0sXG4gICAgICBbJ2MnLCAnYScsICdiJ10sXG4gICAgICAwLjY3LFxuICAgICk7XG4gICAgYXNzZXJ0T3V0Y29tZSh7IGNvcnJlY3RSZXNwb25zZTogWydhJywgJ2InXSwgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbeyByZXNwb25zZTogWydjJywgJ2InXSB9XSB9LCBbJ2MnLCAnYScsICdiJ10sIDApO1xuICAgIGFzc2VydE91dGNvbWUoXG4gICAgICB7XG4gICAgICAgIGNvcnJlY3RSZXNwb25zZTogWydhJywgJ2InLCAnYyddLFxuICAgICAgICBhbHRlcm5hdGVSZXNwb25zZXM6IFt7IHJlc3BvbnNlOiBbJ2MnLCAnYicsICdhJ10gfV0sXG4gICAgICB9LFxuICAgICAgWydjJywgJ2InXSxcbiAgICAgIDAuMzMsXG4gICAgKTtcbiAgICBhc3NlcnRPdXRjb21lKFxuICAgICAge1xuICAgICAgICBwYXJ0aWFsU2NvcmluZzogdHJ1ZSxcbiAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBbJ2EnLCAnYicsICdjJ10sXG4gICAgICAgIGFsdGVybmF0ZVJlc3BvbnNlczogW3sgcmVzcG9uc2U6IFsnYScsICdjJywgJ2InXSB9XSxcbiAgICAgIH0sXG4gICAgICBbJ2MnLCAnYScsICdiJ10sXG4gICAgICAwLjY3LFxuICAgICk7XG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgIHtcbiAgICAgICAgcGFydGlhbFNjb3Jpbmc6IGZhbHNlLFxuICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFsnYScsICdiJywgJ2MnXSxcbiAgICAgICAgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbeyByZXNwb25zZTogWydhJywgJ2MnLCAnYiddIH1dLFxuICAgICAgfSxcbiAgICAgIFsnYScsICdiJ10sXG4gICAgICAwLFxuICAgICk7XG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgIHtcbiAgICAgICAgcGFydGlhbFNjb3Jpbmc6IGZhbHNlLFxuICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFsnYScsICdiJywgJ2MnXSxcbiAgICAgICAgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbeyByZXNwb25zZTogWydhJywgJ2MnLCAnYiddIH1dLFxuICAgICAgfSxcbiAgICAgIFsnYycsICdhJywgJ2InXSxcbiAgICAgIDAsXG4gICAgICB7IHBhcnRpYWxTY29yaW5nOiB0cnVlIH0sXG4gICAgKTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFBQSxTQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxVQUFBLEdBQUFDLHVCQUFBLENBQUFGLE9BQUE7QUFBdUMsU0FBQUUsd0JBQUFDLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFILHVCQUFBLFlBQUFBLENBQUFDLENBQUEsRUFBQUMsQ0FBQSxTQUFBQSxDQUFBLElBQUFELENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLFNBQUFMLENBQUEsTUFBQU0sQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsS0FBQUMsU0FBQSxRQUFBQyxPQUFBLEVBQUFWLENBQUEsaUJBQUFBLENBQUEsdUJBQUFBLENBQUEseUJBQUFBLENBQUEsU0FBQVEsQ0FBQSxNQUFBRixDQUFBLEdBQUFMLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLFFBQUFHLENBQUEsQ0FBQUssR0FBQSxDQUFBWCxDQUFBLFVBQUFNLENBQUEsQ0FBQU0sR0FBQSxDQUFBWixDQUFBLEdBQUFNLENBQUEsQ0FBQU8sR0FBQSxDQUFBYixD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W119
|