@pie-element/rubric 1.5.16 → 1.5.17-beta.587
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 +443 -0
- package/configure/CHANGELOG.md +389 -0
- package/configure/lib/defaults.js +29 -0
- package/configure/lib/defaults.js.map +1 -0
- package/configure/lib/index.js +46 -9
- package/configure/lib/index.js.map +1 -1
- package/configure/lib/main.js +100 -0
- package/configure/lib/main.js.map +1 -0
- package/configure/package.json +5 -3
- package/configure/src/defaults.js +21 -0
- package/configure/src/index.js +34 -8
- package/configure/src/main.jsx +48 -0
- package/controller/CHANGELOG.md +46 -0
- package/controller/lib/index.js.map +1 -1
- package/controller/package.json +1 -1
- package/controller/src/__tests__/index.test.js +2 -5
- package/controller/src/index.js +2 -2
- package/docs/config-schema.json +79 -0
- package/docs/config-schema.json.md +65 -0
- package/docs/demo/config.js +2 -2
- package/docs/demo/generate.js +2 -1
- package/docs/demo/index.html +1 -2
- package/docs/pie-schema.json +80 -0
- package/docs/pie-schema.json.md +53 -0
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/main.js +44 -19
- package/lib/main.js.map +1 -1
- package/lib/print.js +114 -0
- package/lib/print.js.map +1 -0
- package/package.json +6 -2
- package/src/__tests__/__snapshots__/rubric-view.test.jsx.snap +7271 -263
- package/src/__tests__/rubric-view.test.jsx +11 -12
- package/src/index.js +2 -5
- package/src/main.jsx +51 -23
- package/src/print.js +63 -0
|
@@ -3,16 +3,16 @@ import React from 'react';
|
|
|
3
3
|
import Rubric from '../main';
|
|
4
4
|
import Link from '@material-ui/core/Link';
|
|
5
5
|
|
|
6
|
-
|
|
7
6
|
describe('rubric viewer', () => {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
7
|
+
const wrapper = (extras) => {
|
|
8
|
+
const props = {
|
|
9
|
+
value: {
|
|
10
|
+
points: ['nothing right', 'a teeny bit right', 'mostly right', 'bingo'],
|
|
11
|
+
sampleAnswers: [null, 'just right', 'not left', null],
|
|
12
|
+
excludeZero: false,
|
|
13
|
+
...extras,
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
16
|
|
|
17
17
|
return mount(<Rubric {...props} />);
|
|
18
18
|
};
|
|
@@ -36,12 +36,11 @@ describe('rubric viewer', () => {
|
|
|
36
36
|
it('renders correctly with exluded zeroes', () => {
|
|
37
37
|
let w = wrapper({ excludeZero: true });
|
|
38
38
|
w.find(Link).simulate('click');
|
|
39
|
-
expect(w.find('li').length).toEqual(
|
|
39
|
+
expect(w.find('li').length).toEqual(5);
|
|
40
40
|
|
|
41
41
|
w = wrapper({ excludeZero: false });
|
|
42
42
|
w.find(Link).simulate('click');
|
|
43
|
-
expect(w.find('li').length).toEqual(
|
|
43
|
+
expect(w.find('li').length).toEqual(6);
|
|
44
44
|
});
|
|
45
45
|
});
|
|
46
|
-
|
|
47
46
|
});
|
package/src/index.js
CHANGED
|
@@ -3,9 +3,7 @@ import React from 'react';
|
|
|
3
3
|
import ReactDOM from 'react-dom';
|
|
4
4
|
import debug from 'debug';
|
|
5
5
|
|
|
6
|
-
|
|
7
6
|
export default class RubricRender extends HTMLElement {
|
|
8
|
-
|
|
9
7
|
constructor() {
|
|
10
8
|
super();
|
|
11
9
|
debug.log('constructor called');
|
|
@@ -28,9 +26,8 @@ export default class RubricRender extends HTMLElement {
|
|
|
28
26
|
|
|
29
27
|
_render() {
|
|
30
28
|
if (this._model) {
|
|
31
|
-
const el =
|
|
32
|
-
|
|
33
|
-
);
|
|
29
|
+
const el = <Rubric value={this._model} />;
|
|
30
|
+
|
|
34
31
|
ReactDOM.render(el, this);
|
|
35
32
|
}
|
|
36
33
|
}
|
package/src/main.jsx
CHANGED
|
@@ -10,6 +10,7 @@ import PropTypes from 'prop-types';
|
|
|
10
10
|
export const RubricType = PropTypes.shape({
|
|
11
11
|
excludeZero: PropTypes.bool,
|
|
12
12
|
points: PropTypes.arrayOf(PropTypes.string),
|
|
13
|
+
sampleAnswers: PropTypes.arrayOf(PropTypes.string),
|
|
13
14
|
});
|
|
14
15
|
|
|
15
16
|
class Rubric extends React.Component {
|
|
@@ -26,6 +27,7 @@ class Rubric extends React.Component {
|
|
|
26
27
|
|
|
27
28
|
static propTypes = {
|
|
28
29
|
classes: PropTypes.object.isRequired,
|
|
30
|
+
animationsDisabled: PropTypes.bool,
|
|
29
31
|
value: RubricType,
|
|
30
32
|
};
|
|
31
33
|
|
|
@@ -43,34 +45,59 @@ class Rubric extends React.Component {
|
|
|
43
45
|
};
|
|
44
46
|
|
|
45
47
|
render() {
|
|
46
|
-
const { value, classes } = this.props;
|
|
48
|
+
const { value, classes, animationsDisabled } = this.props;
|
|
49
|
+
|
|
47
50
|
if (value && value.points) {
|
|
48
|
-
const points = value
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
51
|
+
const { points, sampleAnswers } = value;
|
|
52
|
+
|
|
53
|
+
const rubricList = (
|
|
54
|
+
<List component="nav">
|
|
55
|
+
{points
|
|
56
|
+
.slice(0)
|
|
57
|
+
.reverse()
|
|
58
|
+
.map((desc, index) => {
|
|
59
|
+
index = points.length - index - 1;
|
|
60
|
+
return (
|
|
61
|
+
this.shouldRenderPoint(index, value) && (
|
|
62
|
+
<React.Fragment key={index}>
|
|
63
|
+
<ListItem key={`P${index}`}>
|
|
60
64
|
<ListItemText
|
|
61
65
|
className={classes.rubricCol}
|
|
62
|
-
primary={`${index} PTS`}
|
|
63
|
-
/>
|
|
64
|
-
<ListItemText
|
|
65
|
-
primary={
|
|
66
|
-
<div dangerouslySetInnerHTML={{ __html: desc }} />
|
|
67
|
-
}
|
|
66
|
+
primary={index === 1 ? `${index} PT` : `${index} PTS`}
|
|
68
67
|
/>
|
|
68
|
+
<ListItemText primary={<div dangerouslySetInnerHTML={{ __html: desc }} />} />
|
|
69
69
|
</ListItem>
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
70
|
+
{sampleAnswers && sampleAnswers[index] && (
|
|
71
|
+
<ListItem key={`S${index}`}>
|
|
72
|
+
<ListItemText
|
|
73
|
+
className={classes.rubricCol}
|
|
74
|
+
style={{ marginLeft: '20px' }}
|
|
75
|
+
primary={'Sample Answer'}
|
|
76
|
+
/>
|
|
77
|
+
<ListItemText primary={<div dangerouslySetInnerHTML={{ __html: sampleAnswers[index] }} />} />
|
|
78
|
+
</ListItem>
|
|
79
|
+
)}
|
|
80
|
+
</React.Fragment>
|
|
81
|
+
)
|
|
82
|
+
);
|
|
83
|
+
})}
|
|
84
|
+
</List>
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
return (
|
|
88
|
+
<div className={classes.root}>
|
|
89
|
+
{!animationsDisabled ? (
|
|
90
|
+
<React.Fragment>
|
|
91
|
+
<Link href={this.dudUrl} onClick={this.toggleRubric}>
|
|
92
|
+
{this.state.linkPrefix} Rubric
|
|
93
|
+
</Link>
|
|
94
|
+
<Collapse in={this.state.rubricOpen} timeout="auto">
|
|
95
|
+
{rubricList}
|
|
96
|
+
</Collapse>
|
|
97
|
+
</React.Fragment>
|
|
98
|
+
) : (
|
|
99
|
+
rubricList
|
|
100
|
+
)}
|
|
74
101
|
</div>
|
|
75
102
|
);
|
|
76
103
|
} else {
|
|
@@ -82,6 +109,7 @@ class Rubric extends React.Component {
|
|
|
82
109
|
const styles = () => ({
|
|
83
110
|
rubricCol: {
|
|
84
111
|
flex: '0 1 auto',
|
|
112
|
+
minWidth: 'fit-content',
|
|
85
113
|
},
|
|
86
114
|
});
|
|
87
115
|
|
package/src/print.js
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import ReactDOM from 'react-dom';
|
|
3
|
+
import debounce from 'lodash/debounce';
|
|
4
|
+
import Main from './main';
|
|
5
|
+
import { renderMath } from '@pie-lib/math-rendering';
|
|
6
|
+
import debug from 'debug';
|
|
7
|
+
|
|
8
|
+
const log = debug('pie-element:rubric:print');
|
|
9
|
+
|
|
10
|
+
const preparePrintModel = (model, opts) => {
|
|
11
|
+
const instr = opts.role === 'instructor';
|
|
12
|
+
|
|
13
|
+
if (!instr) {
|
|
14
|
+
return {};
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
model.value = { ...model };
|
|
18
|
+
model.mode = 'evaluate';
|
|
19
|
+
model.animationsDisabled = true;
|
|
20
|
+
|
|
21
|
+
return model;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export default class RubricPrint extends HTMLElement {
|
|
25
|
+
constructor() {
|
|
26
|
+
super();
|
|
27
|
+
this._options = null;
|
|
28
|
+
this._model = null;
|
|
29
|
+
this._session = [];
|
|
30
|
+
this._rerender = debounce(
|
|
31
|
+
() => {
|
|
32
|
+
if (this._model && this._session) {
|
|
33
|
+
const printModel = preparePrintModel(this._model, this._options);
|
|
34
|
+
|
|
35
|
+
const element =
|
|
36
|
+
this._options &&
|
|
37
|
+
React.createElement(Main, {
|
|
38
|
+
...printModel,
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
ReactDOM.render(element, this, () => {
|
|
42
|
+
log('render complete - render math');
|
|
43
|
+
renderMath(this);
|
|
44
|
+
});
|
|
45
|
+
} else {
|
|
46
|
+
log('skip');
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
50,
|
|
50
|
+
{ leading: false, trailing: true },
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
set options(o) {
|
|
54
|
+
this._options = o;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
set model(s) {
|
|
58
|
+
this._model = s;
|
|
59
|
+
this._rerender();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
connectedCallback() {}
|
|
63
|
+
}
|