@pie-lib/mask-markup 1.13.47-next.1 → 1.15.0-beta.0
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 +16 -0
- package/NEXT.CHANGELOG.json +1 -0
- package/lib/__tests__/drag-in-the-blank.test.js +71 -0
- package/lib/__tests__/index.test.js +50 -0
- package/lib/__tests__/mask.test.js +149 -0
- package/lib/__tests__/serialization.test.js +45 -0
- package/lib/__tests__/utils.js +17 -0
- package/lib/__tests__/with-mask.test.js +65 -0
- package/lib/choices/__tests__/index.test.js +85 -0
- package/lib/choices/choice.js +81 -18
- package/lib/choices/index.js +12 -4
- package/lib/componentize.js +1 -1
- package/lib/components/__tests__/blank.test.js +234 -0
- package/lib/components/__tests__/correct-input.test.js +63 -0
- package/lib/components/__tests__/dropdown.test.js +70 -0
- package/lib/components/__tests__/input.test.js +64 -0
- package/lib/components/blank.js +147 -35
- package/lib/components/correct-input.js +9 -4
- package/lib/components/dropdown.js +183 -50
- package/lib/components/input.js +1 -1
- package/lib/constructed-response.js +88 -24
- package/lib/customizable.js +48 -0
- package/lib/drag-in-the-blank.js +35 -9
- package/lib/index.js +9 -1
- package/lib/inline-dropdown.js +4 -2
- package/lib/mask.js +46 -7
- package/lib/serialization.js +1 -1
- package/lib/with-mask.js +35 -3
- package/package.json +5 -5
- package/src/__tests__/__snapshots__/drag-in-the-blank.test.js.snap +316 -0
- package/src/__tests__/__snapshots__/mask.test.js.snap +55 -0
- package/src/__tests__/__snapshots__/with-mask.test.js.snap +62 -0
- package/src/__tests__/drag-in-the-blank.test.js +71 -0
- package/src/__tests__/index.test.js +39 -0
- package/src/__tests__/mask.test.js +152 -0
- package/src/__tests__/serialization.test.js +54 -0
- package/src/__tests__/utils.js +1 -0
- package/src/__tests__/with-mask.test.js +51 -0
- package/src/choices/__tests__/__snapshots__/index.test.js.snap +209 -0
- package/src/choices/__tests__/index.test.js +62 -0
- package/src/choices/choice.jsx +60 -6
- package/src/choices/index.jsx +2 -2
- package/src/components/__tests__/__snapshots__/blank.test.js.snap +111 -0
- package/src/components/__tests__/__snapshots__/correct-input.test.js.snap +64 -0
- package/src/components/__tests__/__snapshots__/dropdown.test.js.snap +133 -0
- package/src/components/__tests__/__snapshots__/input.test.js.snap +34 -0
- package/src/components/__tests__/blank.test.js +202 -0
- package/src/components/__tests__/correct-input.test.js +49 -0
- package/src/components/__tests__/dropdown.test.js +51 -0
- package/src/components/__tests__/input.test.js +50 -0
- package/src/components/blank.jsx +139 -28
- package/src/components/correct-input.jsx +6 -1
- package/src/components/dropdown.jsx +192 -71
- package/src/constructed-response.jsx +76 -18
- package/src/customizable.jsx +35 -0
- package/src/drag-in-the-blank.jsx +26 -3
- package/src/index.js +10 -1
- package/src/inline-dropdown.jsx +2 -0
- package/src/mask.jsx +30 -5
- package/src/serialization.js +1 -1
- package/src/with-mask.jsx +39 -2
- package/README.md +0 -14
- package/lib/choices/choice.js.map +0 -1
- package/lib/choices/index.js.map +0 -1
- package/lib/componentize.js.map +0 -1
- package/lib/components/blank.js.map +0 -1
- package/lib/components/correct-input.js.map +0 -1
- package/lib/components/dropdown.js.map +0 -1
- package/lib/components/input.js.map +0 -1
- package/lib/constructed-response.js.map +0 -1
- package/lib/drag-in-the-blank.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/inline-dropdown.js.map +0 -1
- package/lib/mask.js.map +0 -1
- package/lib/serialization.js.map +0 -1
- package/lib/with-mask.js.map +0 -1
|
@@ -1,34 +1,92 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import
|
|
2
|
+
import { withStyles } from '@material-ui/core/styles';
|
|
3
|
+
import classnames from 'classnames';
|
|
4
|
+
|
|
5
|
+
import { color } from '@pie-lib/render-ui';
|
|
6
|
+
import EditableHtml from '@pie-lib/editable-html';
|
|
3
7
|
import { withMask } from './with-mask';
|
|
4
8
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
const styles = () => ({
|
|
10
|
+
editableHtmlCustom: {
|
|
11
|
+
display: 'inline-block',
|
|
12
|
+
verticalAlign: 'middle',
|
|
13
|
+
margin: '4px',
|
|
14
|
+
borderRadius: '4px',
|
|
15
|
+
border: `1px solid ${color.black()}`,
|
|
16
|
+
},
|
|
17
|
+
correct: {
|
|
18
|
+
border: `1px solid ${color.correct()}`,
|
|
19
|
+
},
|
|
20
|
+
incorrect: {
|
|
21
|
+
border: `1px solid ${color.incorrect()}`,
|
|
22
|
+
},
|
|
23
|
+
});
|
|
11
24
|
|
|
12
|
-
|
|
13
|
-
|
|
25
|
+
const MaskedInput = (props) => (node, data) => {
|
|
26
|
+
const {
|
|
27
|
+
adjustedLimit,
|
|
28
|
+
disabled,
|
|
29
|
+
feedback,
|
|
30
|
+
showCorrectAnswer,
|
|
31
|
+
maxLength,
|
|
32
|
+
spellCheck,
|
|
33
|
+
classes,
|
|
34
|
+
pluginProps,
|
|
35
|
+
onChange,
|
|
36
|
+
} = props;
|
|
37
|
+
const dataset = node.data?.dataset || {};
|
|
38
|
+
|
|
39
|
+
if (dataset.component === 'input') {
|
|
14
40
|
const correctAnswer = ((props.choices && dataset && props.choices[dataset.id]) || [])[0];
|
|
15
41
|
const finalValue = showCorrectAnswer ? correctAnswer && correctAnswer.label : data[dataset.id] || '';
|
|
16
42
|
const width = maxLength && maxLength[dataset.id];
|
|
43
|
+
const feedbackStatus = feedback && feedback[dataset.id];
|
|
44
|
+
const isCorrect = showCorrectAnswer || feedbackStatus === 'correct';
|
|
45
|
+
const isIncorrect = !showCorrectAnswer && feedbackStatus === 'incorrect';
|
|
46
|
+
|
|
47
|
+
const handleInputChange = (newValue) => {
|
|
48
|
+
const updatedValue = {
|
|
49
|
+
...data,
|
|
50
|
+
[dataset.id]: newValue,
|
|
51
|
+
};
|
|
52
|
+
onChange(updatedValue);
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const handleKeyDown = (event) => {
|
|
56
|
+
// the keyCode value for the Enter/Return key is 13
|
|
57
|
+
if (event.key === 'Enter' || event.keyCode === 13) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
};
|
|
17
61
|
|
|
18
62
|
return (
|
|
19
|
-
<
|
|
63
|
+
<EditableHtml
|
|
64
|
+
id={dataset.id}
|
|
20
65
|
key={`${node.type}-input-${dataset.id}`}
|
|
21
|
-
correct={feedback && feedback[dataset.id] && feedback[dataset.id] === 'correct'}
|
|
22
66
|
disabled={showCorrectAnswer || disabled}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
showCorrectAnswer={showCorrectAnswer}
|
|
27
|
-
width={width}
|
|
67
|
+
disableUnderline
|
|
68
|
+
onChange={handleInputChange}
|
|
69
|
+
markup={finalValue || ''}
|
|
28
70
|
charactersLimit={adjustedLimit ? width : 25}
|
|
29
|
-
|
|
71
|
+
activePlugins={['languageCharacters']}
|
|
72
|
+
pluginProps={pluginProps}
|
|
73
|
+
languageCharactersProps={[{ language: 'spanish' }]}
|
|
30
74
|
spellCheck={spellCheck}
|
|
75
|
+
width={`calc(${width}em + 42px)`} // added 42px for left and right padding of editable-html
|
|
76
|
+
onKeyDown={handleKeyDown}
|
|
77
|
+
autoWidthToolbar
|
|
78
|
+
toolbarOpts={{
|
|
79
|
+
minWidth: 'auto',
|
|
80
|
+
noBorder: true,
|
|
81
|
+
isHidden: !!pluginProps?.characters?.disabled,
|
|
82
|
+
}}
|
|
83
|
+
className={classnames(classes.editableHtmlCustom, {
|
|
84
|
+
[classes.correct]: isCorrect,
|
|
85
|
+
[classes.incorrect]: isIncorrect,
|
|
86
|
+
})}
|
|
31
87
|
/>
|
|
32
88
|
);
|
|
33
89
|
}
|
|
34
|
-
}
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
export default withStyles(styles)(withMask('input', MaskedInput));
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
// import Input from './components/input';
|
|
3
|
+
import { withMask } from './with-mask';
|
|
4
|
+
|
|
5
|
+
// eslint-disable-next-line react/display-name
|
|
6
|
+
export default withMask('input', (props) => (node, data, onChange) => {
|
|
7
|
+
const dataset = node.data ? node.data.dataset || {} : {};
|
|
8
|
+
if (dataset.component === 'input') {
|
|
9
|
+
// eslint-disable-next-line react/prop-types
|
|
10
|
+
// const { adjustedLimit, disabled, feedback, showCorrectAnswer, maxLength, spellCheck } = props;
|
|
11
|
+
|
|
12
|
+
// the first answer is the correct one
|
|
13
|
+
// eslint-disable-next-line react/prop-types
|
|
14
|
+
// const correctAnswer = ((props.choices && dataset && props.choices[dataset.id]) || [])[0];
|
|
15
|
+
// const finalValue = showCorrectAnswer ? correctAnswer && correctAnswer.label : data[dataset.id] || '';
|
|
16
|
+
// const width = maxLength && maxLength[dataset.id];
|
|
17
|
+
|
|
18
|
+
return props.customMarkMarkupComponent(dataset.id);
|
|
19
|
+
// return (
|
|
20
|
+
// <Input
|
|
21
|
+
// key={`${node.type}-input-${dataset.id}`}
|
|
22
|
+
// correct={feedback && feedback[dataset.id] && feedback[dataset.id] === 'correct'}
|
|
23
|
+
// disabled={showCorrectAnswer || disabled}
|
|
24
|
+
// value={finalValue}
|
|
25
|
+
// id={dataset.id}
|
|
26
|
+
// onChange={onChange}
|
|
27
|
+
// showCorrectAnswer={showCorrectAnswer}
|
|
28
|
+
// width={width}
|
|
29
|
+
// charactersLimit={adjustedLimit ? width : 25}
|
|
30
|
+
// isConstructedResponse={true}
|
|
31
|
+
// spellCheck={spellCheck}
|
|
32
|
+
// />
|
|
33
|
+
// );
|
|
34
|
+
}
|
|
35
|
+
});
|
|
@@ -10,7 +10,15 @@ const Masked = withMask('blank', (props) => (node, data, onChange) => {
|
|
|
10
10
|
const dataset = node.data ? node.data.dataset || {} : {};
|
|
11
11
|
if (dataset.component === 'blank') {
|
|
12
12
|
// eslint-disable-next-line react/prop-types
|
|
13
|
-
const {
|
|
13
|
+
const {
|
|
14
|
+
disabled,
|
|
15
|
+
duplicates,
|
|
16
|
+
correctResponse,
|
|
17
|
+
feedback,
|
|
18
|
+
showCorrectAnswer,
|
|
19
|
+
emptyResponseAreaWidth,
|
|
20
|
+
emptyResponseAreaHeight,
|
|
21
|
+
} = props;
|
|
14
22
|
const choiceId = showCorrectAnswer ? correctResponse[dataset.id] : data[dataset.id];
|
|
15
23
|
// eslint-disable-next-line react/prop-types
|
|
16
24
|
const choice = choiceId && props.choices.find((c) => c.id === choiceId);
|
|
@@ -23,6 +31,8 @@ const Masked = withMask('blank', (props) => (node, data, onChange) => {
|
|
|
23
31
|
duplicates={duplicates}
|
|
24
32
|
choice={choice}
|
|
25
33
|
id={dataset.id}
|
|
34
|
+
emptyResponseAreaWidth={emptyResponseAreaWidth}
|
|
35
|
+
emptyResponseAreaHeight={emptyResponseAreaHeight}
|
|
26
36
|
onChange={onChange}
|
|
27
37
|
/>
|
|
28
38
|
);
|
|
@@ -42,6 +52,8 @@ export default class DragInTheBlank extends React.Component {
|
|
|
42
52
|
feedback: PropTypes.object,
|
|
43
53
|
correctResponse: PropTypes.object,
|
|
44
54
|
showCorrectAnswer: PropTypes.bool,
|
|
55
|
+
emptyResponseAreaWidth: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
|
|
56
|
+
emptyResponseAreaHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
|
|
45
57
|
};
|
|
46
58
|
|
|
47
59
|
UNSAFE_componentWillReceiveProps() {
|
|
@@ -56,13 +68,18 @@ export default class DragInTheBlank extends React.Component {
|
|
|
56
68
|
|
|
57
69
|
getPositionDirection = (choicePosition) => {
|
|
58
70
|
let flexDirection;
|
|
71
|
+
let justifyContent;
|
|
72
|
+
let alignItems;
|
|
59
73
|
|
|
60
74
|
switch (choicePosition) {
|
|
61
75
|
case 'left':
|
|
62
76
|
flexDirection = 'row';
|
|
77
|
+
alignItems = 'center';
|
|
63
78
|
break;
|
|
64
79
|
case 'right':
|
|
65
80
|
flexDirection = 'row-reverse';
|
|
81
|
+
justifyContent = 'flex-end';
|
|
82
|
+
alignItems = 'center';
|
|
66
83
|
break;
|
|
67
84
|
case 'below':
|
|
68
85
|
flexDirection = 'column-reverse';
|
|
@@ -73,7 +90,7 @@ export default class DragInTheBlank extends React.Component {
|
|
|
73
90
|
break;
|
|
74
91
|
}
|
|
75
92
|
|
|
76
|
-
return flexDirection;
|
|
93
|
+
return { flexDirection, justifyContent, alignItems };
|
|
77
94
|
};
|
|
78
95
|
|
|
79
96
|
render() {
|
|
@@ -89,12 +106,15 @@ export default class DragInTheBlank extends React.Component {
|
|
|
89
106
|
disabled,
|
|
90
107
|
feedback,
|
|
91
108
|
showCorrectAnswer,
|
|
109
|
+
emptyResponseAreaWidth,
|
|
110
|
+
emptyResponseAreaHeight,
|
|
92
111
|
} = this.props;
|
|
93
112
|
|
|
94
113
|
const choicePosition = choicesPosition || 'below';
|
|
95
114
|
const style = {
|
|
96
115
|
display: 'flex',
|
|
97
|
-
|
|
116
|
+
minWidth: '100px',
|
|
117
|
+
...this.getPositionDirection(choicePosition),
|
|
98
118
|
};
|
|
99
119
|
|
|
100
120
|
return (
|
|
@@ -107,6 +127,7 @@ export default class DragInTheBlank extends React.Component {
|
|
|
107
127
|
disabled={disabled}
|
|
108
128
|
/>
|
|
109
129
|
<Masked
|
|
130
|
+
elementType={'drag-in-the-blank'}
|
|
110
131
|
markup={markup}
|
|
111
132
|
layout={layout}
|
|
112
133
|
value={value}
|
|
@@ -117,6 +138,8 @@ export default class DragInTheBlank extends React.Component {
|
|
|
117
138
|
feedback={feedback}
|
|
118
139
|
correctResponse={correctResponse}
|
|
119
140
|
showCorrectAnswer={showCorrectAnswer}
|
|
141
|
+
emptyResponseAreaWidth={emptyResponseAreaWidth}
|
|
142
|
+
emptyResponseAreaHeight={emptyResponseAreaHeight}
|
|
120
143
|
/>
|
|
121
144
|
</div>
|
|
122
145
|
);
|
package/src/index.js
CHANGED
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
import { withMask, buildLayoutFromMarkup } from './with-mask';
|
|
2
2
|
import DragInTheBlank from './drag-in-the-blank';
|
|
3
3
|
import ConstructedResponse from './constructed-response';
|
|
4
|
+
import Customizable from './customizable';
|
|
4
5
|
import InlineDropdown from './inline-dropdown';
|
|
5
6
|
import componentize from './componentize';
|
|
6
7
|
|
|
7
|
-
export {
|
|
8
|
+
export {
|
|
9
|
+
withMask,
|
|
10
|
+
buildLayoutFromMarkup,
|
|
11
|
+
DragInTheBlank,
|
|
12
|
+
ConstructedResponse,
|
|
13
|
+
InlineDropdown,
|
|
14
|
+
componentize,
|
|
15
|
+
Customizable,
|
|
16
|
+
};
|
package/src/inline-dropdown.jsx
CHANGED
|
@@ -17,10 +17,12 @@ export default withMask('dropdown', (props) => (node, data, onChange) => {
|
|
|
17
17
|
correct={feedback && feedback[dataset.id] && feedback[dataset.id] === 'correct'}
|
|
18
18
|
disabled={disabled || showCorrectAnswer}
|
|
19
19
|
value={finalChoice}
|
|
20
|
+
correctValue={showCorrectAnswer ? correctAnswer && correctAnswer.label : undefined}
|
|
20
21
|
id={dataset.id}
|
|
21
22
|
onChange={onChange}
|
|
22
23
|
choices={choices[dataset.id]}
|
|
23
24
|
showCorrectAnswer={showCorrectAnswer}
|
|
25
|
+
singleQuery={Object.keys(choices).length == 1}
|
|
24
26
|
/>
|
|
25
27
|
);
|
|
26
28
|
}
|
package/src/mask.jsx
CHANGED
|
@@ -3,6 +3,7 @@ import PropTypes from 'prop-types';
|
|
|
3
3
|
import get from 'lodash/get';
|
|
4
4
|
import { withStyles } from '@material-ui/core/styles';
|
|
5
5
|
import { MARK_TAGS } from './serialization';
|
|
6
|
+
import cx from 'classnames';
|
|
6
7
|
|
|
7
8
|
const Paragraph = withStyles((theme) => ({
|
|
8
9
|
para: {
|
|
@@ -11,6 +12,13 @@ const Paragraph = withStyles((theme) => ({
|
|
|
11
12
|
},
|
|
12
13
|
}))((props) => <div className={props.classes.para}>{props.children}</div>);
|
|
13
14
|
|
|
15
|
+
const Spacer = withStyles(() => ({
|
|
16
|
+
spacer: {
|
|
17
|
+
display: 'inline-block',
|
|
18
|
+
width: '.75em',
|
|
19
|
+
},
|
|
20
|
+
}))((props) => <span className={props.classes.spacer} />);
|
|
21
|
+
|
|
14
22
|
const restrictWhitespaceTypes = ['tbody', 'tr'];
|
|
15
23
|
|
|
16
24
|
const addText = (parentNode, text) => {
|
|
@@ -34,7 +42,7 @@ const getMark = (n) => {
|
|
|
34
42
|
return null;
|
|
35
43
|
};
|
|
36
44
|
|
|
37
|
-
export const renderChildren = (layout, value, onChange, rootRenderChildren, parentNode) => {
|
|
45
|
+
export const renderChildren = (layout, value, onChange, rootRenderChildren, parentNode, elementType) => {
|
|
38
46
|
if (!value) {
|
|
39
47
|
return null;
|
|
40
48
|
}
|
|
@@ -59,6 +67,9 @@ export const renderChildren = (layout, value, onChange, rootRenderChildren, pare
|
|
|
59
67
|
const c = rootRenderChildren(n, value, onChange);
|
|
60
68
|
if (c) {
|
|
61
69
|
children.push(c);
|
|
70
|
+
if (parentNode?.type !== 'td' && elementType === 'drag-in-the-blank') {
|
|
71
|
+
children.push(<Spacer key={`spacer-${index}`} />);
|
|
72
|
+
}
|
|
62
73
|
return;
|
|
63
74
|
}
|
|
64
75
|
}
|
|
@@ -84,9 +95,12 @@ export const renderChildren = (layout, value, onChange, rootRenderChildren, pare
|
|
|
84
95
|
}
|
|
85
96
|
} else if (content.length > 0) {
|
|
86
97
|
children.push(content);
|
|
98
|
+
if (parentNode?.type !== 'td' && elementType === 'drag-in-the-blank') {
|
|
99
|
+
children.push(<Spacer key={`spacer-${index}`} />);
|
|
100
|
+
}
|
|
87
101
|
}
|
|
88
102
|
} else {
|
|
89
|
-
const subNodes = renderChildren(n, value, onChange, rootRenderChildren, n);
|
|
103
|
+
const subNodes = renderChildren(n, value, onChange, rootRenderChildren, n, elementType);
|
|
90
104
|
if (n.type === 'p' || n.type === 'paragraph') {
|
|
91
105
|
children.push(<Paragraph key={key}>{subNodes}</Paragraph>);
|
|
92
106
|
} else {
|
|
@@ -110,7 +124,17 @@ const MaskContainer = withStyles(() => ({
|
|
|
110
124
|
main: {
|
|
111
125
|
display: 'initial',
|
|
112
126
|
},
|
|
113
|
-
|
|
127
|
+
tableStyle: {
|
|
128
|
+
'&:not(.MathJax) table': {
|
|
129
|
+
borderCollapse: 'collapse',
|
|
130
|
+
},
|
|
131
|
+
// align table content to left as per STAR requirement PD-3687
|
|
132
|
+
'&:not(.MathJax) table td, &:not(.MathJax) table th': {
|
|
133
|
+
padding: '8px 12px',
|
|
134
|
+
textAlign: 'left',
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
}))((props) => <div className={cx(props.classes.main, props.classes.tableStyle)}>{props.children}</div>);
|
|
114
138
|
|
|
115
139
|
/**
|
|
116
140
|
* Renders a layout that uses the slate.js Value model structure.
|
|
@@ -121,6 +145,7 @@ export default class Mask extends React.Component {
|
|
|
121
145
|
layout: PropTypes.object,
|
|
122
146
|
value: PropTypes.object,
|
|
123
147
|
onChange: PropTypes.func,
|
|
148
|
+
elementType: PropTypes.string,
|
|
124
149
|
};
|
|
125
150
|
|
|
126
151
|
handleChange = (id, value) => {
|
|
@@ -129,8 +154,8 @@ export default class Mask extends React.Component {
|
|
|
129
154
|
};
|
|
130
155
|
|
|
131
156
|
render() {
|
|
132
|
-
const { value, layout } = this.props;
|
|
133
|
-
const children = renderChildren(layout, value, this.handleChange, this.props.renderChildren);
|
|
157
|
+
const { value, layout, elementType } = this.props;
|
|
158
|
+
const children = renderChildren(layout, value, this.handleChange, this.props.renderChildren, null, elementType);
|
|
134
159
|
|
|
135
160
|
return <MaskContainer>{children}</MaskContainer>;
|
|
136
161
|
}
|
package/src/serialization.js
CHANGED
package/src/with-mask.jsx
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import ReactDOM from 'react-dom';
|
|
2
3
|
import PropTypes from 'prop-types';
|
|
3
4
|
import Mask from './mask';
|
|
4
5
|
import componentize from './componentize';
|
|
@@ -23,13 +24,49 @@ export const withMask = (type, renderChildren) => {
|
|
|
23
24
|
layout: PropTypes.object,
|
|
24
25
|
value: PropTypes.object,
|
|
25
26
|
onChange: PropTypes.func,
|
|
27
|
+
customMarkMarkupComponent: PropTypes.func,
|
|
28
|
+
elementType: PropTypes.string,
|
|
26
29
|
};
|
|
27
30
|
|
|
31
|
+
componentDidUpdate(prevProps) {
|
|
32
|
+
if (this.props.markup !== prevProps.markup) {
|
|
33
|
+
// eslint-disable-next-line
|
|
34
|
+
const domNode = ReactDOM.findDOMNode(this);
|
|
35
|
+
// Query all elements that may contain outdated MathJax renderings
|
|
36
|
+
const mathElements = domNode && domNode.querySelectorAll('[data-latex][data-math-handled="true"]');
|
|
37
|
+
|
|
38
|
+
// Clean up for fresh MathJax processing
|
|
39
|
+
(mathElements || []).forEach((el) => {
|
|
40
|
+
// Remove the MathJax container to allow for clean updates
|
|
41
|
+
const mjxContainer = el.querySelector('mjx-container');
|
|
42
|
+
|
|
43
|
+
if (mjxContainer) {
|
|
44
|
+
el.removeChild(mjxContainer);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Update the innerHTML to match the raw LaTeX data, ensuring it is reprocessed correctly
|
|
48
|
+
const latexCode = el.getAttribute('data-raw');
|
|
49
|
+
el.innerHTML = latexCode;
|
|
50
|
+
|
|
51
|
+
// Remove the attribute to signal that MathJax should reprocess this element
|
|
52
|
+
el.removeAttribute('data-math-handled');
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
28
57
|
render() {
|
|
29
|
-
const { markup, layout, value, onChange } = this.props;
|
|
58
|
+
const { markup, layout, value, onChange, elementType } = this.props;
|
|
30
59
|
|
|
31
60
|
const maskLayout = layout ? layout : buildLayoutFromMarkup(markup, type);
|
|
32
|
-
return
|
|
61
|
+
return (
|
|
62
|
+
<Mask
|
|
63
|
+
elementType={elementType}
|
|
64
|
+
layout={maskLayout}
|
|
65
|
+
value={value}
|
|
66
|
+
onChange={onChange}
|
|
67
|
+
renderChildren={renderChildren(this.props)}
|
|
68
|
+
/>
|
|
69
|
+
);
|
|
33
70
|
}
|
|
34
71
|
};
|
|
35
72
|
};
|
package/README.md
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
# mask-markup
|
|
2
|
-
|
|
3
|
-
## issues
|
|
4
|
-
|
|
5
|
-
- dnd
|
|
6
|
-
- simple approach loses context due to stepping out of react tree to run a ReactDOM.render().
|
|
7
|
-
- Would need to pass drag parts as props (no context)
|
|
8
|
-
- Or do the entire tree render in react - like a simple slate
|
|
9
|
-
- HTML5Backend - ? going to be a an issue w/ multiple items using dnd?
|
|
10
|
-
|
|
11
|
-
* hey diddle sample
|
|
12
|
-
* add feedback
|
|
13
|
-
* check perf
|
|
14
|
-
* more complex html
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/choices/choice.jsx"],"names":["DRAG_TYPE","BlankContentComp","rootRef","props","connectDragSource","choice","classes","disabled","ref","ReactDOM","findDOMNode","chip","chipLabel","innerHTML","value","undefined","React","Component","PropTypes","bool","object","func","BlankContent","theme","border","palette","primary","main","borderRadius","spacing","unit","margin","transform","backgroundColor","color","background","text","alignItems","display","height","minHeight","fontSize","whiteSpace","maxWidth","pointerEvents","padding","tileSource","canDrag","beginDrag","instanceId","DragDropTile","connect","monitor","dragSource","isDragging"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { DragSource } from '@pie-lib/drag';\nimport { withStyles } from '@material-ui/core/styles';\nimport Chip from '@material-ui/core/Chip';\nimport classnames from 'classnames';\nimport ReactDOM from 'react-dom';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport { color } from '@pie-lib/render-ui';\n\nexport const DRAG_TYPE = 'MaskBlank';\n\nclass BlankContentComp extends React.Component {\n static propTypes = {\n disabled: PropTypes.bool,\n choice: PropTypes.object,\n classes: PropTypes.object,\n connectDragSource: PropTypes.func,\n };\n\n componentDidUpdate() {\n renderMath(this.rootRef);\n }\n\n render() {\n const { connectDragSource, choice, classes, disabled } = this.props;\n\n // TODO the Chip element is causing drag problems on touch devices. Avoid using Chip and consider refactoring the code. Keep in mind that Chip is a span with a button role, which interferes with seamless touch device dragging.\n\n return connectDragSource(\n <span className={classnames(classes.choice, disabled && classes.disabled)}>\n <Chip\n clickable={false}\n disabled={true}\n ref={(ref) => {\n //eslint-disable-next-line\n this.rootRef = ReactDOM.findDOMNode(ref);\n }}\n className={classes.chip}\n label={\n <span\n className={classes.chipLabel}\n ref={(ref) => {\n if (ref) {\n ref.innerHTML = choice.value || ' ';\n }\n }}\n >\n {' '}\n </span>\n }\n variant={disabled ? 'outlined' : undefined}\n />\n </span>,\n {},\n );\n }\n}\n\nexport const BlankContent = withStyles((theme) => ({\n choice: {\n border: `solid 0px ${theme.palette.primary.main}`,\n borderRadius: theme.spacing.unit * 2,\n margin: theme.spacing.unit / 2,\n transform: 'translate(0, 0)',\n },\n chip: {\n backgroundColor: color.background(),\n border: `1px solid ${color.text()}`,\n color: color.text(),\n alignItems: 'center',\n display: 'inline-flex',\n height: 'initial',\n minHeight: '32px',\n fontSize: 'inherit',\n whiteSpace: 'pre-wrap',\n maxWidth: '374px',\n // Added for touch devices, for image content.\n // This will prevent the context menu from appearing and not allowing other interactions with the image.\n // If interactions with the image in the token will be requested we should handle only the context Menu.\n pointerEvents: 'none',\n },\n chipLabel: {\n whiteSpace: 'pre-wrap',\n '& img': {\n display: 'block',\n padding: '2px 0',\n },\n },\n disabled: {},\n}))(BlankContentComp);\n\nconst tileSource = {\n canDrag(props) {\n return !props.disabled;\n },\n beginDrag(props) {\n return {\n choice: props.choice,\n instanceId: props.instanceId,\n };\n },\n};\n\nconst DragDropTile = DragSource(DRAG_TYPE, tileSource, (connect, monitor) => ({\n connectDragSource: connect.dragSource(),\n isDragging: monitor.isDragging(),\n}))(BlankContent);\n\nexport default DragDropTile;\n"],"file":"choice.js"}
|
package/lib/choices/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/choices/index.jsx"],"names":["Choices","choicePosition","props","margin","disabled","duplicates","choices","value","filteredChoices","filter","c","foundChoice","v","id","undefined","elementStyle","getStyleForWrapper","map","index","React","Component","PropTypes","bool","arrayOf","shape","label","string","object","isRequired"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;;;;;IAEqBA,O;;;;;;;;;;;;;;;2GASE,YAAM;AACzB,UAAQC,cAAR,GAA2B,MAAKC,KAAhC,CAAQD,cAAR;;AAEA,cAAQA,cAAR;AACE,aAAK,OAAL;AACE,iBAAO;AACLE,YAAAA,MAAM,EAAE;AADH,WAAP;;AAIF,aAAK,OAAL;AACE,iBAAO;AACLA,YAAAA,MAAM,EAAE;AADH,WAAP;;AAIF,aAAK,OAAL;AACE,iBAAO;AACLA,YAAAA,MAAM,EAAE;AADH,WAAP;;AAIF;AACE,iBAAO;AACLA,YAAAA,MAAM,EAAE;AADH,WAAP;AAjBJ;AAqBD,K;;;;;;WAED,kBAAS;AACP,wBAAiD,KAAKD,KAAtD;AAAA,UAAQE,QAAR,eAAQA,QAAR;AAAA,UAAkBC,UAAlB,eAAkBA,UAAlB;AAAA,UAA8BC,OAA9B,eAA8BA,OAA9B;AAAA,UAAuCC,KAAvC,eAAuCA,KAAvC;AACA,UAAMC,eAAe,GAAGF,OAAO,CAACG,MAAR,CAAe,UAACC,CAAD,EAAO;AAC5C,YAAIL,UAAU,KAAK,IAAnB,EAAyB;AACvB,iBAAO,IAAP;AACD;;AACD,YAAMM,WAAW,GAAG,yBAAQJ,KAAR,EAAe,UAACK,CAAD;AAAA,iBAAOA,CAAC,KAAKF,CAAC,CAACG,EAAf;AAAA,SAAf,CAApB;AACA,eAAOF,WAAW,KAAKG,SAAvB;AACD,OANuB,CAAxB;AAOA,UAAMC,YAAY,GAAG,KAAKC,kBAAL,EAArB;AAEA,0BACE;AAAK,QAAA,KAAK,EAAED;AAAZ,sBACE,gCAAC,4BAAD;AAA0B,QAAA,QAAQ,EAAEX;AAApC,SACGI,eAAe,CAACS,GAAhB,CAAoB,UAACP,CAAD,EAAIQ,KAAJ;AAAA,4BACnB,gCAAC,kBAAD;AAAQ,UAAA,GAAG,YAAKR,CAAC,CAACH,KAAP,cAAgBW,KAAhB,CAAX;AAAoC,UAAA,QAAQ,EAAEd,QAA9C;AAAwD,UAAA,MAAM,EAAEM;AAAhE,UADmB;AAAA,OAApB,CADH,CADF,CADF;AASD;;;EAvDkCS,kBAAMC,S;;;iCAAtBpB,O,eACA;AACjBI,EAAAA,QAAQ,EAAEiB,sBAAUC,IADH;AAEjBjB,EAAAA,UAAU,EAAEgB,sBAAUC,IAFL;AAGjBhB,EAAAA,OAAO,EAAEe,sBAAUE,OAAV,CAAkBF,sBAAUG,KAAV,CAAgB;AAAEC,IAAAA,KAAK,EAAEJ,sBAAUK,MAAnB;AAA2BnB,IAAAA,KAAK,EAAEc,sBAAUK;AAA5C,GAAhB,CAAlB,CAHQ;AAIjBnB,EAAAA,KAAK,EAAEc,sBAAUM,MAJA;AAKjB1B,EAAAA,cAAc,EAAEoB,sBAAUK,MAAV,CAAiBE;AALhB,C","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport findKey from 'lodash/findKey';\nimport Choice from './choice';\nimport DragDroppablePlaceholder from '@pie-lib/drag/lib/drag-in-the-blank-dp';\n\nexport default class Choices extends React.Component {\n static propTypes = {\n disabled: PropTypes.bool,\n duplicates: PropTypes.bool,\n choices: PropTypes.arrayOf(PropTypes.shape({ label: PropTypes.string, value: PropTypes.string })),\n value: PropTypes.object,\n choicePosition: PropTypes.string.isRequired,\n };\n\n getStyleForWrapper = () => {\n const { choicePosition } = this.props;\n\n switch (choicePosition) {\n case 'above':\n return {\n margin: '0 0 40px 0',\n };\n\n case 'below':\n return {\n margin: '40px 0 0 0',\n };\n\n case 'right':\n return {\n margin: '0 0 0 40px',\n };\n\n default:\n return {\n margin: '0 40px 0 0',\n };\n }\n };\n\n render() {\n const { disabled, duplicates, choices, value } = this.props;\n const filteredChoices = choices.filter((c) => {\n if (duplicates === true) {\n return true;\n }\n const foundChoice = findKey(value, (v) => v === c.id);\n return foundChoice === undefined;\n });\n const elementStyle = this.getStyleForWrapper();\n\n return (\n <div style={elementStyle}>\n <DragDroppablePlaceholder disabled={disabled}>\n {filteredChoices.map((c, index) => (\n <Choice key={`${c.value}-${index}`} disabled={disabled} choice={c} />\n ))}\n </DragDroppablePlaceholder>\n </div>\n );\n }\n}\n"],"file":"index.js"}
|
package/lib/componentize.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/componentize.js"],"names":["REGEX","s","t","markup","replace","match","g"],"mappings":";;;;;;AAAA,IAAMA,KAAK,GAAG,gBAAd;;eAEe,kBAACC,CAAD,EAAIC,CAAJ,EAAU;AACvB,MAAI,CAACD,CAAL,EAAQ;AACN,WAAO;AAAEE,MAAAA,MAAM,EAAE;AAAV,KAAP;AACD;;AAED,MAAMA,MAAM,GAAGF,CAAC,CAACG,OAAF,CAAUJ,KAAV,EAAiB,UAACK,KAAD,EAAQC,CAAR,EAAc;AAC5C,4CAAgCJ,CAAhC,0BAA+CI,CAA/C;AACD,GAFc,CAAf;AAIA,SAAO;AAAEH,IAAAA,MAAM,EAANA;AAAF,GAAP;AACD,C","sourcesContent":["const REGEX = /\\{\\{(\\d+)\\}\\}/g;\n\nexport default (s, t) => {\n if (!s) {\n return { markup: '' };\n }\n\n const markup = s.replace(REGEX, (match, g) => {\n return `<span data-component=\"${t}\" data-id=\"${g}\"></span>`;\n });\n\n return { markup };\n};\n"],"file":"componentize.js"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/blank.jsx"],"names":["log","DRAG_TYPE","useStyles","content","border","color","primary","minWidth","touchAction","overflow","chip","backgroundColor","background","text","fontSize","minHeight","height","maxWidth","position","chipLabel","whiteSpace","pointerEvents","display","padding","hidden","opacity","dragged","left","correct","incorrect","over","BlankContent","state","prevProps","rootRef","currentChoice","props","choice","prevChoice","JSON","stringify","setState","setTimeout","spanRef","offsetHeight","parent","childNodes","forEach","elem","Element","HTMLDocument","setAttribute","disabled","classes","isOver","dragItem","draggedLabel","value","label","ref","ReactDOM","findDOMNode","innerHTML","addDraggableFalseAttributes","undefined","React","Component","id","PropTypes","oneOfType","string","number","bool","duplicates","object","onChange","func","StyledBlankContent","connectedBlankContent","connectDragSource","connectDropTarget","tileTarget","drop","monitor","draggedItem","getItem","instanceId","dropped","canDrop","DropTile","connect","dropTarget","tileSource","canDrag","beginDrag","fromChoice","endDrag","dropResult","getDropResult","DragDropTile","dragSource","isDragging"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport debug from 'debug';\nimport { DragSource, DropTarget } from '@pie-lib/drag';\nimport { withStyles } from '@material-ui/core/styles';\nimport Chip from '@material-ui/core/Chip';\nimport classnames from 'classnames';\nimport { color } from '@pie-lib/render-ui';\nconst log = debug('pie-lib:mask-markup:blank');\nexport const DRAG_TYPE = 'MaskBlank';\n\nconst useStyles = withStyles(() => ({\n content: {\n border: `solid 0px ${color.primary()}`,\n minWidth: '200px',\n touchAction: 'none',\n overflow: 'hidden',\n },\n chip: {\n backgroundColor: color.background(),\n border: `1px solid ${color.text()}`,\n color: color.text(),\n minWidth: '90px',\n fontSize: 'inherit',\n minHeight: '32px',\n height: 'auto',\n maxWidth: '374px',\n position: 'relative',\n },\n chipLabel: {\n whiteSpace: 'pre-wrap',\n // Added for touch devices, for image content.\n // This will prevent the context menu from appearing and not allowing other interactions with the image.\n // If interactions with the image in the token will be requested we should handle only the context Menu.\n pointerEvents: 'none',\n '& img': {\n display: 'block',\n padding: '2px 0',\n },\n },\n hidden: {\n color: 'transparent',\n opacity: 0,\n },\n dragged: {\n position: 'absolute',\n left: 16,\n maxWidth: '60px',\n },\n correct: {\n border: `solid 1px ${color.correct()}`,\n },\n incorrect: {\n border: `solid 1px ${color.incorrect()}`,\n },\n over: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n },\n}));\n\nexport class BlankContent extends React.Component {\n static propTypes = {\n id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n disabled: PropTypes.bool,\n duplicates: PropTypes.bool,\n choice: PropTypes.object,\n classes: PropTypes.object,\n isOver: PropTypes.bool,\n dragItem: PropTypes.object,\n correct: PropTypes.bool,\n onChange: PropTypes.func,\n };\n\n constructor() {\n super();\n this.state = {\n height: 0,\n };\n }\n\n componentDidUpdate(prevProps) {\n renderMath(this.rootRef);\n const { choice: currentChoice } = this.props;\n const { choice: prevChoice } = prevProps;\n\n if (JSON.stringify(currentChoice) !== JSON.stringify(prevChoice)) {\n if (!currentChoice) {\n this.setState({\n height: 0,\n });\n return;\n }\n setTimeout(() => {\n this.setState({\n height: this.spanRef.offsetHeight,\n });\n }, 300);\n }\n }\n\n addDraggableFalseAttributes(parent) {\n parent.childNodes.forEach((elem) => {\n if (elem instanceof Element || elem instanceof HTMLDocument) {\n elem.setAttribute('draggable', false);\n }\n });\n }\n\n render() {\n const { disabled, choice, classes, isOver, dragItem, correct } = this.props;\n const draggedLabel = dragItem && isOver && dragItem.choice.value;\n const label = choice && choice.value;\n\n return (\n // TODO the Chip element is causing drag problems on touch devices. Avoid using Chip and consider refactoring the code. Keep in mind that Chip is a span with a button role, which interferes with seamless touch device dragging.\n <Chip\n clickable={false}\n disabled={true}\n ref={(ref) => {\n //eslint-disable-next-line\n this.rootRef = ReactDOM.findDOMNode(ref);\n }}\n component=\"span\"\n label={\n <React.Fragment>\n <span\n className={classnames(classes.chipLabel, isOver && classes.over, {\n [classes.hidden]: draggedLabel,\n })}\n ref={(ref) => {\n if (ref) {\n //eslint-disable-next-line\n this.spanRef = ReactDOM.findDOMNode(ref);\n ref.innerHTML = label || '';\n this.addDraggableFalseAttributes(ref);\n }\n }}\n >\n {' '}\n </span>\n {draggedLabel && (\n <span\n className={classnames(classes.chipLabel, isOver && classes.over, classes.dragged)}\n ref={(ref) => {\n if (ref) {\n //eslint-disable-next-line\n this.spanRef = ReactDOM.findDOMNode(ref);\n ref.innerHTML = draggedLabel || '';\n this.addDraggableFalseAttributes(ref);\n }\n }}\n >\n {' '}\n </span>\n )}\n </React.Fragment>\n }\n className={classnames(classes.chip, isOver && classes.over, {\n [classes.correct]: correct !== undefined && correct,\n [classes.incorrect]: correct !== undefined && !correct,\n })}\n variant={disabled ? 'outlined' : undefined}\n style={{\n ...(this.state.height ? { height: this.state.height } : {}),\n }}\n classes={{\n label: isOver && classes.over,\n }}\n />\n );\n }\n}\n\nconst StyledBlankContent = useStyles(BlankContent);\n\nconst connectedBlankContent = useStyles(({ connectDragSource, connectDropTarget, ...props }) => {\n const { classes, isOver } = props;\n\n return connectDropTarget(\n connectDragSource(\n <span className={classnames(classes.content, isOver && classes.over)}>\n <StyledBlankContent {...props} />\n </span>,\n ),\n );\n});\n\nconst tileTarget = {\n drop(props, monitor) {\n const draggedItem = monitor.getItem();\n\n log('props.instanceId', props.instanceId, 'draggedItem.instanceId:', draggedItem.instanceId);\n\n if (draggedItem.id !== props.id) {\n props.onChange(props.id, draggedItem.choice.id);\n }\n\n return {\n dropped: draggedItem.id !== props.id,\n };\n },\n canDrop(props, monitor) {\n const draggedItem = monitor.getItem();\n\n return draggedItem.instanceId === props.instanceId;\n },\n};\n\nconst DropTile = DropTarget(DRAG_TYPE, tileTarget, (connect, monitor) => ({\n connectDropTarget: connect.dropTarget(),\n isOver: monitor.isOver(),\n dragItem: monitor.getItem(),\n}))(connectedBlankContent);\n\nconst tileSource = {\n canDrag(props) {\n return !props.disabled && !!props.choice;\n },\n beginDrag(props) {\n return {\n id: props.id,\n choice: props.choice,\n instanceId: props.instanceId,\n fromChoice: true,\n };\n },\n endDrag(props, monitor) {\n // this will be null if it did not drop\n const dropResult = monitor.getDropResult();\n\n if (!dropResult || (dropResult.dropped && !props.duplicates)) {\n const draggedItem = monitor.getItem();\n\n if (draggedItem.fromChoice) {\n props.onChange(props.id, undefined);\n }\n }\n },\n};\n\nconst DragDropTile = DragSource(DRAG_TYPE, tileSource, (connect, monitor) => ({\n connectDragSource: connect.dragSource(),\n isDragging: monitor.isDragging(),\n}))(DropTile);\n\nexport default DragDropTile;\n"],"file":"blank.js"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/correct-input.jsx"],"names":["correctStyle","color","borderColor","input","text","backgroundColor","background","borderRadius","borderWidth","borderStyle","padding","opacity","cursor","primary","primaryDark","crInput","correct","incorrect","box","fontSize","outlinedInput","border","notchedOutline","props","charactersLimit","classes","disabled","isBox","isConstructedResponse","width","spellCheck","rest","label","undefined","inputProps","maxLength","style","Math","round","disabledInput"],"mappings":"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","sourcesContent":["import React from 'react';\nimport OutlinedInput from '@material-ui/core/OutlinedInput';\nimport classnames from 'classnames';\nimport { withStyles } from '@material-ui/core/styles';\nimport { color } from '@pie-lib/render-ui';\n\nconst correctStyle = (color) => ({\n borderColor: `${color} !important`,\n});\n\nexport default withStyles(() => ({\n input: {\n color: color.text(),\n backgroundColor: color.background(),\n borderRadius: '4px !important',\n borderWidth: '1px',\n borderStyle: 'solid',\n padding: '10px 20px 10px 10px',\n '&:disabled': {\n opacity: 0.8,\n cursor: 'not-allowed !important',\n },\n '&:hover': {\n borderColor: color.primary(),\n '&:disabled': {\n borderColor: 'initial',\n },\n },\n '&:focus': {\n borderColor: color.primaryDark(),\n },\n },\n crInput: {\n padding: '8px !important',\n },\n correct: correctStyle(color.correct()),\n incorrect: correctStyle(color.incorrect()),\n box: {\n fontSize: 'inherit',\n },\n outlinedInput: {\n padding: '2px',\n borderRadius: '4px',\n '& fieldset': {\n border: 0,\n },\n },\n notchedOutline: {\n borderColor: color.correct(),\n },\n}))((props) => {\n const {\n correct,\n charactersLimit,\n classes,\n disabled,\n isBox,\n isConstructedResponse,\n width,\n spellCheck,\n ...rest\n } = props;\n const label = typeof correct === 'boolean' ? (correct ? 'correct' : 'incorrect') : undefined;\n const inputProps = charactersLimit ? { maxLength: charactersLimit } : {};\n\n if (width) {\n inputProps.style = {\n width: `${width + Math.round(width / 10) + 1}ch`, // added some extra space for capital letters\n };\n }\n\n return (\n <OutlinedInput\n className={classnames({\n [classes.disabledInput]: disabled,\n [classes.box]: isBox,\n [classes.outlinedInput]: true,\n })}\n classes={{\n input: classnames({\n [classes.input]: true,\n [classes[label]]: label,\n [classes.crInput]: isConstructedResponse,\n }),\n }}\n inputProps={inputProps}\n labelWidth={0}\n disabled={disabled}\n spellCheck={spellCheck}\n {...rest}\n />\n );\n});\n"],"file":"correct-input.js"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/dropdown.jsx"],"names":["Dropdown","props","setState","showCheckmark","open","state","classes","id","correct","disabled","value","onChange","choices","showCorrectAnswer","root","icon","selectMenu","select","showCheckmarkAndOpen","hideCheckmarkAndClose","keepMounted","disablePortal","e","target","map","c","index","menuRoot","selected","label","__html","React","Component","PropTypes","string","bool","func","object","arrayOf","shape","styles","color","text","backgroundColor","background","borderColor","secondaryLight","paddingTop","paddingBottom","border","borderRadius","boxSizing","padding","fontSize"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport Select from '@material-ui/core/Select';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport CorrectInput from './correct-input';\nimport { withStyles } from '@material-ui/core/styles';\nimport { color } from '@pie-lib/render-ui';\n\nclass Dropdown extends React.Component {\n static propTypes = {\n id: PropTypes.string,\n value: PropTypes.string,\n disabled: PropTypes.bool,\n onChange: PropTypes.func,\n classes: PropTypes.object,\n correct: PropTypes.bool,\n choices: PropTypes.arrayOf(PropTypes.shape({ value: PropTypes.string, label: PropTypes.string })),\n showCorrectAnswer: PropTypes.bool,\n };\n\n constructor(props) {\n super(props);\n\n this.state = {\n showCheckmark: false,\n open: false,\n };\n }\n\n showCheckmarkAndOpen = () => {\n this.setState({\n showCheckmark: true,\n open: true,\n });\n };\n\n hideCheckmarkAndClose = () => {\n this.setState({\n showCheckmark: false,\n open: false,\n });\n };\n\n render() {\n const { classes, id, correct, disabled, value, onChange, choices, showCorrectAnswer } = this.props;\n\n const { showCheckmark, open } = this.state;\n\n return (\n <Select\n classes={{\n root: classes.root,\n icon: classes.icon,\n selectMenu: classes.selectMenu,\n select: classes.select,\n }}\n disabled={disabled}\n value={value || ''}\n onOpen={this.showCheckmarkAndOpen}\n onClose={this.hideCheckmarkAndClose}\n open={open}\n input={<CorrectInput correct={showCorrectAnswer || correct} />}\n MenuProps={{\n keepMounted: true,\n disablePortal: true,\n }}\n onChange={(e) => {\n onChange(id, e.target.value);\n }}\n >\n {(choices || []).map((c, index) => (\n <MenuItem\n classes={{ root: classes.menuRoot, selected: classes.selected }}\n key={`${c.label}-${index}`}\n value={c.value}\n >\n <span\n className={classes.label}\n dangerouslySetInnerHTML={{\n __html: c.label,\n }}\n />\n {showCheckmark && (\n <span\n className={classes.label}\n dangerouslySetInnerHTML={{ __html: c.value === value ? ' ✓' : '' }}\n />\n )}\n </MenuItem>\n ))}\n </Select>\n );\n }\n}\n\nconst styles = () => ({\n root: {\n color: color.text(),\n backgroundColor: color.background(),\n borderColor: color.secondaryLight(),\n '& ul': {\n paddingTop: 0,\n paddingBottom: 0,\n border: `1px solid ${color.text()}`,\n borderRadius: '5px',\n color: color.text(),\n backgroundColor: color.background(),\n },\n },\n select: {\n '&:focus': {\n borderRadius: '4px',\n },\n },\n selectMenu: {\n backgroundColor: color.background(),\n '&:hover': {\n borderColor: 'initial',\n },\n '&:focus': {\n borderColor: 'initial',\n },\n },\n icon: {\n color: color.text(),\n },\n selected: {\n color: `${color.text()} !important`,\n backgroundColor: `${color.background()} !important`,\n '&:hover': {\n color: color.text(),\n backgroundColor: `${color.secondaryLight()} !important`,\n },\n },\n menuRoot: {\n color: color.text(),\n backgroundColor: color.background(),\n '&:focus': {\n color: color.text(),\n backgroundColor: color.background(),\n },\n '&:hover': {\n color: color.text(),\n backgroundColor: color.secondaryLight(),\n },\n boxSizing: 'border-box',\n padding: '25px',\n '&:first-of-type': {\n borderRadius: '3px 3px 0 0',\n },\n '&:last-of-type': {\n borderRadius: '0 0 3px 3px',\n },\n },\n label: {\n fontSize: 'max(1rem, 14px)',\n },\n});\n\nexport default withStyles(styles)(Dropdown);\n"],"file":"dropdown.js"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/input.jsx"],"names":["Input","disabled","correct","charactersLimit","id","isConstructedResponse","value","onChange","showCorrectAnswer","spellCheck","width","e","target","propTypes","PropTypes","string","func","bool","number"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AAEA,IAAMA,KAAK,GAAG,SAARA,KAAQ,OAWR;AAAA,MAVJC,QAUI,QAVJA,QAUI;AAAA,MATJC,OASI,QATJA,OASI;AAAA,MARJC,eAQI,QARJA,eAQI;AAAA,MAPJC,EAOI,QAPJA,EAOI;AAAA,MANJC,qBAMI,QANJA,qBAMI;AAAA,MALJC,KAKI,QALJA,KAKI;AAAA,MAJJC,SAII,QAJJA,QAII;AAAA,MAHJC,iBAGI,QAHJA,iBAGI;AAAA,MAFJC,UAEI,QAFJA,UAEI;AAAA,MADJC,KACI,QADJA,KACI;AACJ,sBACE,gCAAC,wBAAD;AACE,IAAA,QAAQ,EAAET,QADZ;AAEE,IAAA,OAAO,EAAEO,iBAAiB,IAAIN,OAFhC;AAGE,IAAA,eAAe,EAAEC,eAHnB;AAIE,IAAA,OAAO,EAAC,UAJV;AAKE,IAAA,KAAK,EAAEG,KALT;AAME,IAAA,qBAAqB,EAAED,qBANzB;AAOE,IAAA,UAAU,EAAEI,UAPd;AAQE,IAAA,KAAK,EAAE,IART;AASE,IAAA,KAAK,EAAEC,KATT;AAUE,IAAA,QAAQ,EAAE,kBAACC,CAAD,EAAO;AACfJ,MAAAA,SAAQ,CAACH,EAAD,EAAKO,CAAC,CAACC,MAAF,CAASN,KAAd,CAAR;AACD;AAZH,IADF;AAgBD,CA5BD;;AA8BAN,KAAK,CAACa,SAAN,GAAkB;AAChBT,EAAAA,EAAE,EAAEU,sBAAUC,MADE;AAEhBT,EAAAA,KAAK,EAAEQ,sBAAUC,MAFD;AAGhBR,EAAAA,QAAQ,EAAEO,sBAAUE,IAHJ;AAIhBf,EAAAA,QAAQ,EAAEa,sBAAUG,IAJJ;AAKhBR,EAAAA,UAAU,EAAEK,sBAAUG,IALN;AAMhBf,EAAAA,OAAO,EAAEY,sBAAUG,IANH;AAOhBT,EAAAA,iBAAiB,EAAEM,sBAAUG,IAPb;AAQhBd,EAAAA,eAAe,EAAEW,sBAAUI,MARX;AAShBR,EAAAA,KAAK,EAAEI,sBAAUI,MATD;AAUhBb,EAAAA,qBAAqB,EAAES,sBAAUG;AAVjB,CAAlB;eAaejB,K","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport CorrectInput from './correct-input';\n\nconst Input = ({\n disabled,\n correct,\n charactersLimit,\n id,\n isConstructedResponse,\n value,\n onChange,\n showCorrectAnswer,\n spellCheck,\n width,\n}) => {\n return (\n <CorrectInput\n disabled={disabled}\n correct={showCorrectAnswer || correct}\n charactersLimit={charactersLimit}\n variant=\"outlined\"\n value={value}\n isConstructedResponse={isConstructedResponse}\n spellCheck={spellCheck}\n isBox={true}\n width={width}\n onChange={(e) => {\n onChange(id, e.target.value);\n }}\n />\n );\n};\n\nInput.propTypes = {\n id: PropTypes.string,\n value: PropTypes.string,\n onChange: PropTypes.func,\n disabled: PropTypes.bool,\n spellCheck: PropTypes.bool,\n correct: PropTypes.bool,\n showCorrectAnswer: PropTypes.bool,\n charactersLimit: PropTypes.number,\n width: PropTypes.number,\n isConstructedResponse: PropTypes.bool,\n};\n\nexport default Input;\n"],"file":"input.js"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constructed-response.jsx"],"names":["props","node","data","onChange","dataset","component","adjustedLimit","disabled","feedback","showCorrectAnswer","maxLength","spellCheck","correctAnswer","choices","id","finalValue","label","width","type"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AAEA;eACe,wBAAS,OAAT,EAAkB,UAACA,KAAD;AAAA,SAAW,UAACC,IAAD,EAAOC,IAAP,EAAaC,QAAb,EAA0B;AACpE,QAAMC,OAAO,GAAGH,IAAI,CAACC,IAAL,GAAYD,IAAI,CAACC,IAAL,CAAUE,OAAV,IAAqB,EAAjC,GAAsC,EAAtD;;AACA,QAAIA,OAAO,CAACC,SAAR,KAAsB,OAA1B,EAAmC;AACjC;AACA,UAAQC,aAAR,GAAwFN,KAAxF,CAAQM,aAAR;AAAA,UAAuBC,QAAvB,GAAwFP,KAAxF,CAAuBO,QAAvB;AAAA,UAAiCC,QAAjC,GAAwFR,KAAxF,CAAiCQ,QAAjC;AAAA,UAA2CC,iBAA3C,GAAwFT,KAAxF,CAA2CS,iBAA3C;AAAA,UAA8DC,SAA9D,GAAwFV,KAAxF,CAA8DU,SAA9D;AAAA,UAAyEC,UAAzE,GAAwFX,KAAxF,CAAyEW,UAAzE,CAFiC,CAIjC;AACA;;AACA,UAAMC,aAAa,GAAG,CAAEZ,KAAK,CAACa,OAAN,IAAiBT,OAAjB,IAA4BJ,KAAK,CAACa,OAAN,CAAcT,OAAO,CAACU,EAAtB,CAA7B,IAA2D,EAA5D,EAAgE,CAAhE,CAAtB;AACA,UAAMC,UAAU,GAAGN,iBAAiB,GAAGG,aAAa,IAAIA,aAAa,CAACI,KAAlC,GAA0Cd,IAAI,CAACE,OAAO,CAACU,EAAT,CAAJ,IAAoB,EAAlG;AACA,UAAMG,KAAK,GAAGP,SAAS,IAAIA,SAAS,CAACN,OAAO,CAACU,EAAT,CAApC;AAEA,0BACE,gCAAC,iBAAD;AACE,QAAA,GAAG,YAAKb,IAAI,CAACiB,IAAV,oBAAwBd,OAAO,CAACU,EAAhC,CADL;AAEE,QAAA,OAAO,EAAEN,QAAQ,IAAIA,QAAQ,CAACJ,OAAO,CAACU,EAAT,CAApB,IAAoCN,QAAQ,CAACJ,OAAO,CAACU,EAAT,CAAR,KAAyB,SAFxE;AAGE,QAAA,QAAQ,EAAEL,iBAAiB,IAAIF,QAHjC;AAIE,QAAA,KAAK,EAAEQ,UAJT;AAKE,QAAA,EAAE,EAAEX,OAAO,CAACU,EALd;AAME,QAAA,QAAQ,EAAEX,QANZ;AAOE,QAAA,iBAAiB,EAAEM,iBAPrB;AAQE,QAAA,KAAK,EAAEQ,KART;AASE,QAAA,eAAe,EAAEX,aAAa,GAAGW,KAAH,GAAW,EAT3C;AAUE,QAAA,qBAAqB,EAAE,IAVzB;AAWE,QAAA,UAAU,EAAEN;AAXd,QADF;AAeD;AACF,GA5BgC;AAAA,CAAlB,C","sourcesContent":["import React from 'react';\nimport Input from './components/input';\nimport { withMask } from './with-mask';\n\n// eslint-disable-next-line react/display-name\nexport default withMask('input', (props) => (node, data, onChange) => {\n const dataset = node.data ? node.data.dataset || {} : {};\n if (dataset.component === 'input') {\n // eslint-disable-next-line react/prop-types\n const { adjustedLimit, disabled, feedback, showCorrectAnswer, maxLength, spellCheck } = props;\n\n // the first answer is the correct one\n // eslint-disable-next-line react/prop-types\n const correctAnswer = ((props.choices && dataset && props.choices[dataset.id]) || [])[0];\n const finalValue = showCorrectAnswer ? correctAnswer && correctAnswer.label : data[dataset.id] || '';\n const width = maxLength && maxLength[dataset.id];\n\n return (\n <Input\n key={`${node.type}-input-${dataset.id}`}\n correct={feedback && feedback[dataset.id] && feedback[dataset.id] === 'correct'}\n disabled={showCorrectAnswer || disabled}\n value={finalValue}\n id={dataset.id}\n onChange={onChange}\n showCorrectAnswer={showCorrectAnswer}\n width={width}\n charactersLimit={adjustedLimit ? width : 25}\n isConstructedResponse={true}\n spellCheck={spellCheck}\n />\n );\n }\n});\n"],"file":"constructed-response.js"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/drag-in-the-blank.jsx"],"names":["Masked","props","node","data","onChange","dataset","component","disabled","duplicates","correctResponse","feedback","showCorrectAnswer","choiceId","id","choice","choices","find","c","type","DragInTheBlank","choicePosition","flexDirection","rootRef","markup","layout","value","choicesPosition","style","display","getPositionDirection","ref","React","Component","PropTypes","string","object","arrayOf","shape","label","func","bool"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport Choices from './choices';\nimport Blank from './components/blank';\nimport { withMask } from './with-mask';\n\n// eslint-disable-next-line react/display-name\nconst Masked = withMask('blank', (props) => (node, data, onChange) => {\n const dataset = node.data ? node.data.dataset || {} : {};\n if (dataset.component === 'blank') {\n // eslint-disable-next-line react/prop-types\n const { disabled, duplicates, correctResponse, feedback, showCorrectAnswer } = props;\n const choiceId = showCorrectAnswer ? correctResponse[dataset.id] : data[dataset.id];\n // eslint-disable-next-line react/prop-types\n const choice = choiceId && props.choices.find((c) => c.id === choiceId);\n\n return (\n <Blank\n key={`${node.type}-${dataset.id}`}\n correct={showCorrectAnswer || (feedback && feedback[dataset.id])}\n disabled={disabled}\n duplicates={duplicates}\n choice={choice}\n id={dataset.id}\n onChange={onChange}\n />\n );\n }\n});\n\nexport default class DragInTheBlank extends React.Component {\n static propTypes = {\n markup: PropTypes.string,\n layout: PropTypes.object,\n choicesPosition: PropTypes.string,\n choices: PropTypes.arrayOf(PropTypes.shape({ label: PropTypes.string, value: PropTypes.string })),\n value: PropTypes.object,\n onChange: PropTypes.func,\n duplicates: PropTypes.bool,\n disabled: PropTypes.bool,\n feedback: PropTypes.object,\n correctResponse: PropTypes.object,\n showCorrectAnswer: PropTypes.bool,\n };\n\n UNSAFE_componentWillReceiveProps() {\n if (this.rootRef) {\n renderMath(this.rootRef);\n }\n }\n\n componentDidUpdate() {\n renderMath(this.rootRef);\n }\n\n getPositionDirection = (choicePosition) => {\n let flexDirection;\n\n switch (choicePosition) {\n case 'left':\n flexDirection = 'row';\n break;\n case 'right':\n flexDirection = 'row-reverse';\n break;\n case 'below':\n flexDirection = 'column-reverse';\n break;\n default:\n // above\n flexDirection = 'column';\n break;\n }\n\n return flexDirection;\n };\n\n render() {\n const {\n markup,\n duplicates,\n layout,\n value,\n onChange,\n choicesPosition,\n choices,\n correctResponse,\n disabled,\n feedback,\n showCorrectAnswer,\n } = this.props;\n\n const choicePosition = choicesPosition || 'below';\n const style = {\n display: 'flex',\n flexDirection: this.getPositionDirection(choicePosition),\n };\n\n return (\n <div ref={(ref) => ref && (this.rootRef = ref)} style={style}>\n <Choices\n choicePosition={choicePosition}\n duplicates={duplicates}\n choices={choices}\n value={value}\n disabled={disabled}\n />\n <Masked\n markup={markup}\n layout={layout}\n value={value}\n choices={choices}\n onChange={onChange}\n disabled={disabled}\n duplicates={duplicates}\n feedback={feedback}\n correctResponse={correctResponse}\n showCorrectAnswer={showCorrectAnswer}\n />\n </div>\n );\n }\n}\n"],"file":"drag-in-the-blank.js"}
|
package/lib/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA","sourcesContent":["import { withMask, buildLayoutFromMarkup } from './with-mask';\nimport DragInTheBlank from './drag-in-the-blank';\nimport ConstructedResponse from './constructed-response';\nimport InlineDropdown from './inline-dropdown';\nimport componentize from './componentize';\n\nexport { withMask, buildLayoutFromMarkup, DragInTheBlank, ConstructedResponse, InlineDropdown, componentize };\n"],"file":"index.js"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/inline-dropdown.jsx"],"names":["props","node","data","onChange","dataset","component","choices","disabled","feedback","showCorrectAnswer","correctAnswer","id","find","c","correct","finalChoice","value","type"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AAEA;eACe,wBAAS,UAAT,EAAqB,UAACA,KAAD;AAAA,SAAW,UAACC,IAAD,EAAOC,IAAP,EAAaC,QAAb,EAA0B;AACvE,QAAMC,OAAO,GAAGH,IAAI,CAACC,IAAL,GAAYD,IAAI,CAACC,IAAL,CAAUE,OAAV,IAAqB,EAAjC,GAAsC,EAAtD;;AACA,QAAIA,OAAO,CAACC,SAAR,KAAsB,UAA1B,EAAsC;AACpC;AACA,UAAQC,OAAR,GAA2DN,KAA3D,CAAQM,OAAR;AAAA,UAAiBC,QAAjB,GAA2DP,KAA3D,CAAiBO,QAAjB;AAAA,UAA2BC,QAA3B,GAA2DR,KAA3D,CAA2BQ,QAA3B;AAAA,UAAqCC,iBAArC,GAA2DT,KAA3D,CAAqCS,iBAArC;AACA,UAAMC,aAAa,GAAGJ,OAAO,IAAIA,OAAO,CAACF,OAAO,CAACO,EAAT,CAAlB,IAAkCL,OAAO,CAACF,OAAO,CAACO,EAAT,CAAP,CAAoBC,IAApB,CAAyB,UAACC,CAAD;AAAA,eAAOA,CAAC,CAACC,OAAT;AAAA,OAAzB,CAAxD;AACA,UAAMC,WAAW,GAAGN,iBAAiB,GAAGC,aAAa,IAAIA,aAAa,CAACM,KAAlC,GAA0Cd,IAAI,CAACE,OAAO,CAACO,EAAT,CAAnF;AAEA,0BACE,gCAAC,oBAAD;AACE,QAAA,GAAG,YAAKV,IAAI,CAACgB,IAAV,uBAA2Bb,OAAO,CAACO,EAAnC,CADL;AAEE,QAAA,OAAO,EAAEH,QAAQ,IAAIA,QAAQ,CAACJ,OAAO,CAACO,EAAT,CAApB,IAAoCH,QAAQ,CAACJ,OAAO,CAACO,EAAT,CAAR,KAAyB,SAFxE;AAGE,QAAA,QAAQ,EAAEJ,QAAQ,IAAIE,iBAHxB;AAIE,QAAA,KAAK,EAAEM,WAJT;AAKE,QAAA,EAAE,EAAEX,OAAO,CAACO,EALd;AAME,QAAA,QAAQ,EAAER,QANZ;AAOE,QAAA,OAAO,EAAEG,OAAO,CAACF,OAAO,CAACO,EAAT,CAPlB;AAQE,QAAA,iBAAiB,EAAEF;AARrB,QADF;AAYD;AACF,GArBmC;AAAA,CAArB,C","sourcesContent":["import React from 'react';\nimport Dropdown from './components/dropdown';\nimport { withMask } from './with-mask';\n\n// eslint-disable-next-line react/display-name\nexport default withMask('dropdown', (props) => (node, data, onChange) => {\n const dataset = node.data ? node.data.dataset || {} : {};\n if (dataset.component === 'dropdown') {\n // eslint-disable-next-line react/prop-types\n const { choices, disabled, feedback, showCorrectAnswer } = props;\n const correctAnswer = choices && choices[dataset.id] && choices[dataset.id].find((c) => c.correct);\n const finalChoice = showCorrectAnswer ? correctAnswer && correctAnswer.value : data[dataset.id];\n\n return (\n <Dropdown\n key={`${node.type}-dropdown-${dataset.id}`}\n correct={feedback && feedback[dataset.id] && feedback[dataset.id] === 'correct'}\n disabled={disabled || showCorrectAnswer}\n value={finalChoice}\n id={dataset.id}\n onChange={onChange}\n choices={choices[dataset.id]}\n showCorrectAnswer={showCorrectAnswer}\n />\n );\n }\n});\n"],"file":"inline-dropdown.js"}
|