@khanacademy/perseus-editor 4.1.5 → 4.1.7
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/dist/es/index.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +9 -6
- package/.babelrc.js +0 -8
- package/.eslintrc.js +0 -12
- package/CHANGELOG.md +0 -1155
- package/src/README.md +0 -7
- package/src/__stories__/editor-page.stories.tsx +0 -65
- package/src/__stories__/editor.stories.tsx +0 -134
- package/src/__stories__/item-editor.stories.tsx +0 -41
- package/src/__stories__/tex-error-view.stories.tsx +0 -26
- package/src/__testdata__/input-number.testdata.ts +0 -27
- package/src/__tests__/editor.test.tsx +0 -142
- package/src/__tests__/hint-editor.test.tsx +0 -83
- package/src/__tests__/i18n.test.ts +0 -501
- package/src/__tests__/integration.test.ts +0 -5
- package/src/__tests__/item-extras-editor.test.tsx +0 -85
- package/src/__tests__/traversal.test.ts +0 -377
- package/src/all-editors.test.ts +0 -16
- package/src/all-editors.ts +0 -83
- package/src/all-widgets.ts +0 -7
- package/src/article-editor.tsx +0 -438
- package/src/components/__stories__/blur-input.stories.tsx +0 -22
- package/src/components/__stories__/section-control-button.stories.tsx +0 -26
- package/src/components/__tests__/blur-input.test.tsx +0 -67
- package/src/components/blur-input.tsx +0 -69
- package/src/components/checkbox.tsx +0 -194
- package/src/components/device-framer.tsx +0 -90
- package/src/components/drag-target.tsx +0 -87
- package/src/components/dropdown-option.tsx +0 -311
- package/src/components/form-wrapped-text-field.tsx +0 -245
- package/src/components/graph-points-count-selector.tsx +0 -31
- package/src/components/graph-settings.tsx +0 -627
- package/src/components/graph-type-selector.tsx +0 -31
- package/src/components/hover-behavior.ts +0 -177
- package/src/components/json-editor.tsx +0 -121
- package/src/components/link.ts +0 -173
- package/src/components/section-control-button.tsx +0 -53
- package/src/components/segment-count-selector.tsx +0 -27
- package/src/components/simple-button.tsx +0 -85
- package/src/components/sortable.tsx +0 -187
- package/src/components/util.ts +0 -38
- package/src/components/viewport-resizer.tsx +0 -72
- package/src/components/widget-editor.tsx +0 -222
- package/src/components/widget-select.tsx +0 -48
- package/src/diffs/__stories__/perseus-diff-wrapper.tsx +0 -11
- package/src/diffs/__stories__/structured-item-diff.stories.tsx +0 -855
- package/src/diffs/__stories__/tags-diff.stories.tsx +0 -36
- package/src/diffs/__stories__/text-diff.stories.tsx +0 -35
- package/src/diffs/__tests__/split-diff.test.ts +0 -33
- package/src/diffs/__tests__/string-array-diff.test.ts +0 -73
- package/src/diffs/__tests__/structured-item-diff.test.ts +0 -433
- package/src/diffs/__tests__/widget-diff-performer.test.ts +0 -43
- package/src/diffs/article-diff.tsx +0 -69
- package/src/diffs/item-diff.tsx +0 -76
- package/src/diffs/renderer-diff.tsx +0 -137
- package/src/diffs/split-diff.ts +0 -31
- package/src/diffs/string-array-diff.ts +0 -74
- package/src/diffs/structured-item-diff.tsx +0 -275
- package/src/diffs/tags-diff.tsx +0 -49
- package/src/diffs/text-diff.tsx +0 -193
- package/src/diffs/widget-diff-performer.ts +0 -69
- package/src/diffs/widget-diff.tsx +0 -290
- package/src/editor-page.tsx +0 -325
- package/src/editor.tsx +0 -1099
- package/src/hint-editor.tsx +0 -469
- package/src/i18n.ts +0 -140
- package/src/iframe-content-renderer.tsx +0 -188
- package/src/index.ts +0 -30
- package/src/item-editor.tsx +0 -158
- package/src/item-extras-editor.tsx +0 -230
- package/src/katex-mhchem/index.js +0 -73
- package/src/katex-mhchem/parser.js +0 -2659
- package/src/multirenderer-editor.tsx +0 -1061
- package/src/stateful-article-editor.tsx +0 -173
- package/src/stateful-editor-page.tsx +0 -88
- package/src/styles/perseus-editor.less +0 -1321
- package/src/testing-widgets.ts +0 -11
- package/src/tex-error-view.tsx +0 -90
- package/src/util/points.test.ts +0 -24
- package/src/util/points.ts +0 -13
- package/src/util/register-all-widgets-and-editors-for-testing.test.ts +0 -17
- package/src/util/register-all-widgets-and-editors-for-testing.ts +0 -17
- package/src/version.ts +0 -10
- package/src/widgets/__stories__/categorizer-editor.stories.tsx +0 -24
- package/src/widgets/__stories__/definition-editor.stories.tsx +0 -18
- package/src/widgets/__stories__/dropdown-editor.stories.tsx +0 -18
- package/src/widgets/__stories__/explanation-editor.stories.tsx +0 -18
- package/src/widgets/__stories__/expression-editor.stories.tsx +0 -122
- package/src/widgets/__stories__/image-editor.stories.tsx +0 -72
- package/src/widgets/__stories__/input-number-editor.stories.tsx +0 -18
- package/src/widgets/__stories__/interaction-editor.stories.tsx +0 -37
- package/src/widgets/__stories__/label-image-editor.stories.tsx +0 -99
- package/src/widgets/__stories__/matcher-editor.stories.tsx +0 -18
- package/src/widgets/__stories__/number-line-editor.stories.tsx +0 -18
- package/src/widgets/__stories__/numeric-input-editor.stories.tsx +0 -18
- package/src/widgets/__stories__/radio-editor.stories.tsx +0 -116
- package/src/widgets/__stories__/sorter-editor.stories.tsx +0 -18
- package/src/widgets/__tests__/categorizer-editor.test.tsx +0 -51
- package/src/widgets/__tests__/definition-editor.test.tsx +0 -41
- package/src/widgets/__tests__/dropdown-editor.test.tsx +0 -57
- package/src/widgets/__tests__/explanation-editor.test.tsx +0 -59
- package/src/widgets/__tests__/expression-editor.test.tsx +0 -403
- package/src/widgets/__tests__/input-number-editor.test.tsx +0 -128
- package/src/widgets/__tests__/matcher-editor.test.tsx +0 -47
- package/src/widgets/__tests__/number-line-editor.test.tsx +0 -144
- package/src/widgets/__tests__/numeric-input-editor.test.tsx +0 -177
- package/src/widgets/__tests__/radio-editor.test.tsx +0 -118
- package/src/widgets/__tests__/sorter-editor.test.tsx +0 -55
- package/src/widgets/categorizer-editor.tsx +0 -104
- package/src/widgets/cs-program-editor.tsx +0 -256
- package/src/widgets/definition-editor.tsx +0 -77
- package/src/widgets/deprecated-standin-editor.tsx +0 -29
- package/src/widgets/dropdown-editor.tsx +0 -211
- package/src/widgets/example-graphie-widget-editor.tsx +0 -70
- package/src/widgets/example-graphie-widget.tsx +0 -172
- package/src/widgets/example-widget-editor.tsx +0 -62
- package/src/widgets/example-widget.tsx +0 -154
- package/src/widgets/explanation-editor.tsx +0 -92
- package/src/widgets/expression-editor.tsx +0 -557
- package/src/widgets/graded-group-editor.tsx +0 -161
- package/src/widgets/graded-group-set-editor.tsx +0 -104
- package/src/widgets/grapher-editor.tsx +0 -155
- package/src/widgets/group-editor.tsx +0 -83
- package/src/widgets/iframe-editor.tsx +0 -202
- package/src/widgets/image-editor.tsx +0 -367
- package/src/widgets/input-number-editor.tsx +0 -288
- package/src/widgets/interaction-editor/constraint-editor.tsx +0 -134
- package/src/widgets/interaction-editor/function-editor.tsx +0 -108
- package/src/widgets/interaction-editor/index.ts +0 -3
- package/src/widgets/interaction-editor/interaction-editor.tsx +0 -749
- package/src/widgets/interaction-editor/label-editor.tsx +0 -87
- package/src/widgets/interaction-editor/line-editor.tsx +0 -125
- package/src/widgets/interaction-editor/mathquill-input.tsx +0 -81
- package/src/widgets/interaction-editor/movable-line-editor.tsx +0 -121
- package/src/widgets/interaction-editor/movable-point-editor.tsx +0 -89
- package/src/widgets/interaction-editor/parametric-editor.tsx +0 -117
- package/src/widgets/interaction-editor/point-editor.tsx +0 -72
- package/src/widgets/interaction-editor/rectangle-editor.tsx +0 -96
- package/src/widgets/interactive-graph-editor.tsx +0 -571
- package/src/widgets/label-image/__stories__/answer-choices.stories.tsx +0 -82
- package/src/widgets/label-image/__stories__/behavior.stories.tsx +0 -31
- package/src/widgets/label-image/__stories__/marker.stories.tsx +0 -75
- package/src/widgets/label-image/__stories__/question-markers.stories.tsx +0 -107
- package/src/widgets/label-image/__stories__/select-image.stories.tsx +0 -59
- package/src/widgets/label-image/answer-choices.tsx +0 -231
- package/src/widgets/label-image/behavior.tsx +0 -122
- package/src/widgets/label-image/marker.tsx +0 -290
- package/src/widgets/label-image/question-markers.tsx +0 -176
- package/src/widgets/label-image/select-image.tsx +0 -81
- package/src/widgets/label-image-editor.tsx +0 -252
- package/src/widgets/lights-puzzle-editor.tsx +0 -278
- package/src/widgets/matcher-editor.tsx +0 -149
- package/src/widgets/matrix-editor.tsx +0 -156
- package/src/widgets/measurer-editor.tsx +0 -253
- package/src/widgets/molecule-editor.tsx +0 -64
- package/src/widgets/number-line-editor.tsx +0 -512
- package/src/widgets/numeric-input-editor.tsx +0 -536
- package/src/widgets/orderer-editor.tsx +0 -172
- package/src/widgets/passage-editor.tsx +0 -117
- package/src/widgets/passage-ref-editor.tsx +0 -80
- package/src/widgets/passage-ref-target-editor.tsx +0 -49
- package/src/widgets/plotter-editor.tsx +0 -542
- package/src/widgets/radio/editor.tsx +0 -398
- package/src/widgets/reaction-diagram-editor.tsx +0 -131
- package/src/widgets/sequence-editor.tsx +0 -205
- package/src/widgets/simple-markdown-tester-editor.tsx +0 -86
- package/src/widgets/simple-markdown-tester.tsx +0 -92
- package/src/widgets/simulator-editor.tsx +0 -146
- package/src/widgets/sorter-editor.tsx +0 -103
- package/src/widgets/table-editor.tsx +0 -164
- package/src/widgets/unit-editor.tsx +0 -299
- package/src/widgets/video-editor.tsx +0 -73
- package/tsconfig-build.json +0 -22
- package/tsconfig-build.tsbuildinfo +0 -1
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
/* eslint-disable react/no-unsafe */
|
|
2
|
-
/**
|
|
3
|
-
* Renders an ArticleEditor as a non-controlled component.
|
|
4
|
-
*
|
|
5
|
-
* Normally the parent of ArticleEditor must pass it an onChange callback and
|
|
6
|
-
* then respond to any changes by modifying the ArticleEditor props to reflect
|
|
7
|
-
* those changes. With StatefulArticleEditor changes are stored in state so you
|
|
8
|
-
* can query them with serialize.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import createReactClass from "create-react-class";
|
|
12
|
-
import * as React from "react";
|
|
13
|
-
import _ from "underscore";
|
|
14
|
-
|
|
15
|
-
import ArticleEditor from "./article-editor";
|
|
16
|
-
|
|
17
|
-
const StatefulArticleEditor = createReactClass({
|
|
18
|
-
displayName: "StatefulArticleEditor",
|
|
19
|
-
|
|
20
|
-
getInitialState: function () {
|
|
21
|
-
return _({}).extend(this.props, {
|
|
22
|
-
mode: "edit",
|
|
23
|
-
onChange: this.handleChange,
|
|
24
|
-
ref: "editor",
|
|
25
|
-
screen: "phone",
|
|
26
|
-
});
|
|
27
|
-
},
|
|
28
|
-
|
|
29
|
-
componentDidMount: function () {
|
|
30
|
-
// TODO(scottgrant): This is a hack to remove the deprecated call to
|
|
31
|
-
// this.isMounted() but is still considered an anti-pattern.
|
|
32
|
-
this._isMounted = true;
|
|
33
|
-
},
|
|
34
|
-
|
|
35
|
-
// getInitialState isn't called if the react component is re-rendered
|
|
36
|
-
// in-place on the dom, in which case this is called instead, so we
|
|
37
|
-
// need to update the state here.
|
|
38
|
-
// (This component is currently re-rendered by the "Add image" button.)
|
|
39
|
-
UNSAFE_componentWillReceiveProps: function (nextProps) {
|
|
40
|
-
// be careful not to overwrite our onChange and ref
|
|
41
|
-
this.setState(_(nextProps).omit("onChange", "ref"));
|
|
42
|
-
},
|
|
43
|
-
|
|
44
|
-
componentWillUnmount: function () {
|
|
45
|
-
this._isMounted = false;
|
|
46
|
-
},
|
|
47
|
-
|
|
48
|
-
getSaveWarnings: function () {
|
|
49
|
-
// eslint-disable-next-line react/no-string-refs
|
|
50
|
-
return this.refs.editor.getSaveWarnings();
|
|
51
|
-
},
|
|
52
|
-
|
|
53
|
-
serialize: function () {
|
|
54
|
-
// eslint-disable-next-line react/no-string-refs
|
|
55
|
-
return this.refs.editor.serialize();
|
|
56
|
-
},
|
|
57
|
-
|
|
58
|
-
handleChange: function (newState, cb) {
|
|
59
|
-
if (this._isMounted) {
|
|
60
|
-
this.setState(newState, cb);
|
|
61
|
-
}
|
|
62
|
-
},
|
|
63
|
-
|
|
64
|
-
scorePreview: function () {
|
|
65
|
-
// eslint-disable-next-line react/no-string-refs
|
|
66
|
-
return this.refs.editor.scorePreview();
|
|
67
|
-
},
|
|
68
|
-
|
|
69
|
-
render: function () {
|
|
70
|
-
const {mode, screen} = this.state;
|
|
71
|
-
return (
|
|
72
|
-
<div>
|
|
73
|
-
<div style={styles.controlBar}>
|
|
74
|
-
<span style={styles.controls}>
|
|
75
|
-
Mode:{" "}
|
|
76
|
-
<span
|
|
77
|
-
onClick={() => this.setState({mode: "edit"})}
|
|
78
|
-
style={
|
|
79
|
-
mode === "edit"
|
|
80
|
-
? styles.controlSelected
|
|
81
|
-
: styles.control
|
|
82
|
-
}
|
|
83
|
-
>
|
|
84
|
-
EDIT
|
|
85
|
-
</span>
|
|
86
|
-
{" | "}
|
|
87
|
-
<span
|
|
88
|
-
onClick={() => this.setState({mode: "preview"})}
|
|
89
|
-
style={
|
|
90
|
-
mode === "preview"
|
|
91
|
-
? styles.controlSelected
|
|
92
|
-
: styles.control
|
|
93
|
-
}
|
|
94
|
-
>
|
|
95
|
-
PREVIEW
|
|
96
|
-
</span>
|
|
97
|
-
{" | "}
|
|
98
|
-
<span
|
|
99
|
-
onClick={() => this.setState({mode: "json"})}
|
|
100
|
-
style={
|
|
101
|
-
mode === "json"
|
|
102
|
-
? styles.controlSelected
|
|
103
|
-
: styles.control
|
|
104
|
-
}
|
|
105
|
-
>
|
|
106
|
-
JSON
|
|
107
|
-
</span>
|
|
108
|
-
</span>
|
|
109
|
-
<span style={styles.controls}>
|
|
110
|
-
Screen:{" "}
|
|
111
|
-
<span
|
|
112
|
-
onClick={() => this.setState({screen: "phone"})}
|
|
113
|
-
style={
|
|
114
|
-
screen === "phone"
|
|
115
|
-
? styles.controlSelected
|
|
116
|
-
: styles.control
|
|
117
|
-
}
|
|
118
|
-
>
|
|
119
|
-
PHONE
|
|
120
|
-
</span>
|
|
121
|
-
{" | "}
|
|
122
|
-
<span
|
|
123
|
-
onClick={() => this.setState({screen: "tablet"})}
|
|
124
|
-
style={
|
|
125
|
-
screen === "tablet"
|
|
126
|
-
? styles.controlSelected
|
|
127
|
-
: styles.control
|
|
128
|
-
}
|
|
129
|
-
>
|
|
130
|
-
TABLET
|
|
131
|
-
</span>
|
|
132
|
-
{" | "}
|
|
133
|
-
<span
|
|
134
|
-
onClick={() => this.setState({screen: "desktop"})}
|
|
135
|
-
style={
|
|
136
|
-
screen === "desktop"
|
|
137
|
-
? styles.controlSelected
|
|
138
|
-
: styles.control
|
|
139
|
-
}
|
|
140
|
-
>
|
|
141
|
-
DESKTOP
|
|
142
|
-
</span>
|
|
143
|
-
</span>
|
|
144
|
-
</div>
|
|
145
|
-
<div style={styles.editor}>
|
|
146
|
-
<ArticleEditor {...this.state} />
|
|
147
|
-
</div>
|
|
148
|
-
</div>
|
|
149
|
-
);
|
|
150
|
-
},
|
|
151
|
-
});
|
|
152
|
-
|
|
153
|
-
const styles = {
|
|
154
|
-
controlBar: {
|
|
155
|
-
marginBottom: 25,
|
|
156
|
-
marginTop: 5,
|
|
157
|
-
},
|
|
158
|
-
controls: {
|
|
159
|
-
marginRight: 10,
|
|
160
|
-
},
|
|
161
|
-
controlSelected: {
|
|
162
|
-
cursor: "default",
|
|
163
|
-
fontWeight: 700,
|
|
164
|
-
},
|
|
165
|
-
control: {
|
|
166
|
-
cursor: "pointer",
|
|
167
|
-
},
|
|
168
|
-
editor: {
|
|
169
|
-
marginTop: -20,
|
|
170
|
-
},
|
|
171
|
-
} as const;
|
|
172
|
-
|
|
173
|
-
export default StatefulArticleEditor;
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
/* eslint-disable react/no-unsafe, react/sort-comp */
|
|
2
|
-
import createReactClass from "create-react-class";
|
|
3
|
-
import PropTypes from "prop-types";
|
|
4
|
-
import * as React from "react";
|
|
5
|
-
import _ from "underscore";
|
|
6
|
-
|
|
7
|
-
import EditorPage from "./editor-page";
|
|
8
|
-
|
|
9
|
-
/* Renders an EditorPage (or an ArticleEditor) as a non-controlled component.
|
|
10
|
-
*
|
|
11
|
-
* Normally the parent of EditorPage must pass it an onChange callback and then
|
|
12
|
-
* respond to any changes by modifying the EditorPage props to reflect those
|
|
13
|
-
* changes. With StatefulEditorPage changes are stored in state so you can
|
|
14
|
-
* query them with serialize.
|
|
15
|
-
*/
|
|
16
|
-
const StatefulEditorPage = createReactClass({
|
|
17
|
-
displayName: "StatefulEditorPage",
|
|
18
|
-
|
|
19
|
-
propTypes: {
|
|
20
|
-
componentClass: PropTypes.func,
|
|
21
|
-
},
|
|
22
|
-
|
|
23
|
-
getDefaultProps: function () {
|
|
24
|
-
return {
|
|
25
|
-
componentClass: EditorPage,
|
|
26
|
-
};
|
|
27
|
-
},
|
|
28
|
-
|
|
29
|
-
render: function () {
|
|
30
|
-
const Component = this.props.componentClass;
|
|
31
|
-
return <Component {...this.state} />;
|
|
32
|
-
},
|
|
33
|
-
|
|
34
|
-
getInitialState: function () {
|
|
35
|
-
return _({}).extend(_.omit(this.props, "componentClass"), {
|
|
36
|
-
onChange: this.handleChange,
|
|
37
|
-
ref: "editor",
|
|
38
|
-
});
|
|
39
|
-
},
|
|
40
|
-
|
|
41
|
-
componentDidMount: function () {
|
|
42
|
-
this._isMounted = true;
|
|
43
|
-
},
|
|
44
|
-
|
|
45
|
-
componentWillUnmount: function () {
|
|
46
|
-
this._isMounted = false;
|
|
47
|
-
},
|
|
48
|
-
|
|
49
|
-
// getInitialState isn't called if the react component is re-rendered
|
|
50
|
-
// in-place on the dom, in which case this is called instead, so we
|
|
51
|
-
// need to update the state here.
|
|
52
|
-
// (This component is currently re-rendered by the "Add image" button.)
|
|
53
|
-
UNSAFE_componentWillReceiveProps: function (nextProps) {
|
|
54
|
-
this.setState(
|
|
55
|
-
_(nextProps).pick(
|
|
56
|
-
"apiOptions",
|
|
57
|
-
"imageUploader",
|
|
58
|
-
"developerMode",
|
|
59
|
-
"problemNum",
|
|
60
|
-
"previewDevice",
|
|
61
|
-
"frameSource",
|
|
62
|
-
),
|
|
63
|
-
);
|
|
64
|
-
},
|
|
65
|
-
|
|
66
|
-
getSaveWarnings: function () {
|
|
67
|
-
// eslint-disable-next-line react/no-string-refs
|
|
68
|
-
return this.refs.editor.getSaveWarnings();
|
|
69
|
-
},
|
|
70
|
-
|
|
71
|
-
serialize: function () {
|
|
72
|
-
// eslint-disable-next-line react/no-string-refs
|
|
73
|
-
return this.refs.editor.serialize();
|
|
74
|
-
},
|
|
75
|
-
|
|
76
|
-
handleChange: function (newState, cb) {
|
|
77
|
-
if (this._isMounted) {
|
|
78
|
-
this.setState(newState, cb);
|
|
79
|
-
}
|
|
80
|
-
},
|
|
81
|
-
|
|
82
|
-
scorePreview: function () {
|
|
83
|
-
// eslint-disable-next-line react/no-string-refs
|
|
84
|
-
return this.refs.editor.scorePreview();
|
|
85
|
-
},
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
export default StatefulEditorPage;
|