@khanacademy/perseus 19.1.5 → 19.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/components/graph.d.ts +0 -1
- package/dist/components/graphie.d.ts +0 -1
- package/dist/es/index.js +319 -212
- package/dist/es/index.js.map +1 -1
- package/dist/index.js +338 -222
- package/dist/index.js.map +1 -1
- package/dist/interactive2/movable-point.d.ts +195 -1
- package/dist/interactive2/movable.d.ts +1 -1
- package/dist/interactive2/types.d.ts +4 -2
- package/dist/interactive2.d.ts +2 -1
- package/dist/server-item-renderer.d.ts +2 -2
- package/dist/util/graphie.d.ts +12 -2
- package/dist/widgets/expression.d.ts +6 -6
- package/package.json +11 -8
- package/.babelrc.js +0 -8
- package/.eslintrc.js +0 -12
- package/CHANGELOG.md +0 -1432
- package/src/__stories__/article-renderer.stories.tsx +0 -100
- package/src/__stories__/hints-renderer.stories.tsx +0 -55
- package/src/__stories__/server-item-renderer.stories.tsx +0 -44
- package/src/__testdata__/article-renderer.testdata.ts +0 -212
- package/src/__testdata__/graphie.testdata.ts +0 -51
- package/src/__testdata__/renderer.testdata.ts +0 -274
- package/src/__testdata__/server-item-renderer.testdata.ts +0 -171
- package/src/__tests__/__snapshots__/perseus-markdown.test.ts.snap +0 -507
- package/src/__tests__/__snapshots__/renderer.test.tsx.snap +0 -525
- package/src/__tests__/__snapshots__/server-item-renderer.test.tsx.snap +0 -285
- package/src/__tests__/a11y.test.ts +0 -303
- package/src/__tests__/article-renderer.test.tsx +0 -130
- package/src/__tests__/error-boundary.test.tsx +0 -76
- package/src/__tests__/extract-perseus-data.test.ts +0 -1027
- package/src/__tests__/init.test.ts +0 -10
- package/src/__tests__/jipt-paragraphs.test.ts +0 -32
- package/src/__tests__/mock-asset-loading-widget.tsx +0 -53
- package/src/__tests__/mock-widget.tsx +0 -33
- package/src/__tests__/perseus-markdown.test.ts +0 -764
- package/src/__tests__/renderability.test.ts +0 -480
- package/src/__tests__/renderer-api.test.tsx +0 -302
- package/src/__tests__/renderer.test.tsx +0 -1816
- package/src/__tests__/server-item-renderer.test.tsx +0 -582
- package/src/__tests__/test-items/image-item.ts +0 -24
- package/src/__tests__/test-items/input-number-1-item.ts +0 -26
- package/src/__tests__/test-items/input-number-2-item.ts +0 -38
- package/src/__tests__/test-items/table-item.ts +0 -29
- package/src/__tests__/tex-wrangler.test.ts +0 -82
- package/src/__tests__/util.test.ts +0 -40
- package/src/__tests__/widget-container.test.tsx +0 -126
- package/src/__tests__/widgets.test.ts +0 -91
- package/src/a11y.ts +0 -45
- package/src/all-widgets.ts +0 -9
- package/src/article-renderer.tsx +0 -237
- package/src/asset-context.ts +0 -30
- package/src/basic-widgets.ts +0 -16
- package/src/components/__stories__/button-group.stories.tsx +0 -55
- package/src/components/__stories__/fixed-to-responsive.stories.tsx +0 -141
- package/src/components/__stories__/graph.stories.tsx +0 -28
- package/src/components/__stories__/graphie.stories.tsx +0 -33
- package/src/components/__stories__/hud.stories.tsx +0 -35
- package/src/components/__stories__/icon.stories.tsx +0 -63
- package/src/components/__stories__/image-loader.stories.tsx +0 -63
- package/src/components/__stories__/info-tip.stories.tsx +0 -31
- package/src/components/__stories__/inline-icon.stories.tsx +0 -40
- package/src/components/__stories__/input-with-examples.stories.tsx +0 -53
- package/src/components/__stories__/lint.stories.tsx +0 -86
- package/src/components/__stories__/math-input.stories.tsx +0 -43
- package/src/components/__stories__/math-output.stories.tsx +0 -23
- package/src/components/__stories__/multi-button-group.stories.tsx +0 -66
- package/src/components/__stories__/number-input.stories.tsx +0 -41
- package/src/components/__stories__/prop-check-box.stories.tsx +0 -65
- package/src/components/__stories__/range-input.stories.tsx +0 -29
- package/src/components/__stories__/simple-keypad-input.stories.tsx +0 -27
- package/src/components/__stories__/sortable.stories.tsx +0 -77
- package/src/components/__stories__/stub-tag-editor.stories.tsx +0 -45
- package/src/components/__stories__/svg-image.stories.tsx +0 -74
- package/src/components/__stories__/tex.stories.tsx +0 -23
- package/src/components/__stories__/text-input.stories.tsx +0 -33
- package/src/components/__stories__/text-list-editor.stories.tsx +0 -32
- package/src/components/__stories__/tooltip.stories.tsx +0 -52
- package/src/components/__stories__/zoomable-tex.stories.tsx +0 -41
- package/src/components/__stories__/zoomable.stories.tsx +0 -49
- package/src/components/__testdata__/sorter.testdata.ts +0 -19
- package/src/components/__tests__/__snapshots__/sortable.test.tsx.snap +0 -163
- package/src/components/__tests__/__snapshots__/sorter.test.tsx.snap +0 -265
- package/src/components/__tests__/math-input.test.tsx +0 -147
- package/src/components/__tests__/number-input.test.tsx +0 -128
- package/src/components/__tests__/sortable.test.tsx +0 -269
- package/src/components/__tests__/sorter.test.tsx +0 -114
- package/src/components/__tests__/zoomable.test.tsx +0 -399
- package/src/components/button-group.tsx +0 -130
- package/src/components/constants.ts +0 -14
- package/src/components/fixed-to-responsive.tsx +0 -169
- package/src/components/graph.tsx +0 -444
- package/src/components/graphie-classes.ts +0 -153
- package/src/components/graphie-movables.ts +0 -338
- package/src/components/graphie.tsx +0 -400
- package/src/components/highlighting/highlightable-content.tsx +0 -240
- package/src/components/highlighting/highlights.ts +0 -207
- package/src/components/highlighting/ranges.ts +0 -304
- package/src/components/highlighting/types.ts +0 -73
- package/src/components/highlighting/ui/highlight-renderer.tsx +0 -172
- package/src/components/highlighting/ui/highlight-set-renderer.tsx +0 -185
- package/src/components/highlighting/ui/highlight-tooltip.tsx +0 -141
- package/src/components/highlighting/ui/highlighting-ui.tsx +0 -143
- package/src/components/highlighting/ui/selection-tracker.tsx +0 -186
- package/src/components/highlighting/ui/types.ts +0 -21
- package/src/components/highlighting/ui/util.ts +0 -165
- package/src/components/highlighting/word-indexer.tsx +0 -152
- package/src/components/hud.tsx +0 -167
- package/src/components/icon.tsx +0 -141
- package/src/components/image-loader.tsx +0 -177
- package/src/components/info-tip/info-tip.tsx +0 -144
- package/src/components/info-tip.tsx +0 -39
- package/src/components/inline-icon.tsx +0 -60
- package/src/components/input-with-examples.tsx +0 -249
- package/src/components/lint.tsx +0 -459
- package/src/components/math-input.tsx +0 -474
- package/src/components/math-output.tsx +0 -134
- package/src/components/multi-button-group.tsx +0 -135
- package/src/components/number-input.tsx +0 -249
- package/src/components/prop-check-box.tsx +0 -79
- package/src/components/range-input.tsx +0 -60
- package/src/components/simple-keypad-input.tsx +0 -88
- package/src/components/sortable.tsx +0 -958
- package/src/components/stub-tag-editor.tsx +0 -53
- package/src/components/svg-image.tsx +0 -779
- package/src/components/tex.tsx +0 -67
- package/src/components/text-input.tsx +0 -129
- package/src/components/text-list-editor.tsx +0 -166
- package/src/components/tooltip.tsx +0 -410
- package/src/components/visibility-observer/__stories__/visibility-observer.stories.tsx +0 -141
- package/src/components/visibility-observer/create-visibility-observer.ts +0 -108
- package/src/components/visibility-observer/get-scroll-parent.ts +0 -46
- package/src/components/visibility-observer/visibility-observer.tsx +0 -124
- package/src/components/zoomable-tex.tsx +0 -78
- package/src/components/zoomable.tsx +0 -304
- package/src/components.ts +0 -15
- package/src/definition-context.tsx +0 -59
- package/src/dependencies.ts +0 -40
- package/src/error-boundary.tsx +0 -70
- package/src/extra-widgets.ts +0 -75
- package/src/hint-renderer.tsx +0 -151
- package/src/hints-renderer.tsx +0 -372
- package/src/icon-paths.ts +0 -119
- package/src/index.ts +0 -171
- package/src/init.ts +0 -56
- package/src/interaction-tracker.ts +0 -62
- package/src/interactive2/__tests__/movable-mock.ts +0 -55
- package/src/interactive2/__tests__/movable-point.test.ts +0 -144
- package/src/interactive2/interactive-util.test.ts +0 -93
- package/src/interactive2/interactive-util.ts +0 -159
- package/src/interactive2/movable-helper-methods.ts +0 -166
- package/src/interactive2/movable-line-options.ts +0 -419
- package/src/interactive2/movable-line.ts +0 -307
- package/src/interactive2/movable-point-options.ts +0 -224
- package/src/interactive2/movable-point.tsx +0 -585
- package/src/interactive2/movable-polygon-options.ts +0 -389
- package/src/interactive2/movable-polygon.ts +0 -360
- package/src/interactive2/movable.test.ts +0 -249
- package/src/interactive2/movable.ts +0 -437
- package/src/interactive2/objective_.ts +0 -79
- package/src/interactive2/types.ts +0 -17
- package/src/interactive2/wrapped-defaults.ts +0 -87
- package/src/interactive2/wrapped-ellipse.ts +0 -94
- package/src/interactive2/wrapped-line.ts +0 -116
- package/src/interactive2/wrapped-path.ts +0 -51
- package/src/interactive2.ts +0 -70
- package/src/item-version.ts +0 -10
- package/src/jipt-paragraphs.ts +0 -49
- package/src/jquery.mobile.vmouse.js +0 -545
- package/src/loading-context.ts +0 -21
- package/src/logging/log.test.ts +0 -39
- package/src/logging/log.ts +0 -97
- package/src/mixins/__tests__/widget-prop-denylist.test.ts +0 -21
- package/src/mixins/changeable.ts +0 -133
- package/src/mixins/editor-jsonify.ts +0 -13
- package/src/mixins/widget-jsonify-deprecated.ts +0 -23
- package/src/mixins/widget-prop-denylist.ts +0 -48
- package/src/multi-items/__stories__/multi-renderer.stories.tsx +0 -83
- package/src/multi-items/__testdata__/multi-renderer.testdata.ts +0 -172
- package/src/multi-items/__tests__/__snapshots__/multi-renderer.test.tsx.snap +0 -1164
- package/src/multi-items/__tests__/items.test.ts +0 -240
- package/src/multi-items/__tests__/multi-renderer.test.tsx +0 -914
- package/src/multi-items/__tests__/prop-type-builders.test.ts +0 -133
- package/src/multi-items/__tests__/shapes.test.ts +0 -43
- package/src/multi-items/__tests__/trees.test.ts +0 -317
- package/src/multi-items/item-types.ts +0 -56
- package/src/multi-items/items.ts +0 -176
- package/src/multi-items/multi-renderer.tsx +0 -569
- package/src/multi-items/prop-type-builders.ts +0 -106
- package/src/multi-items/shape-types.ts +0 -52
- package/src/multi-items/shapes.ts +0 -52
- package/src/multi-items/tree-types.ts +0 -47
- package/src/multi-items/trees.ts +0 -360
- package/src/multi-items.ts +0 -75
- package/src/perseus-api.tsx +0 -188
- package/src/perseus-env.ts +0 -27
- package/src/perseus-error.ts +0 -17
- package/src/perseus-markdown.tsx +0 -405
- package/src/perseus-types.ts +0 -1366
- package/src/perseus-version.ts +0 -9
- package/src/question-paragraph.tsx +0 -34
- package/src/renderability.ts +0 -109
- package/src/renderer.tsx +0 -2000
- package/src/server-item-renderer.tsx +0 -495
- package/src/sigfigs.ts +0 -490
- package/src/styles/articles.less +0 -749
- package/src/styles/constants.ts +0 -94
- package/src/styles/global-constants.ts +0 -343
- package/src/styles/global-styles.ts +0 -306
- package/src/styles/khan-exercise.css +0 -1468
- package/src/styles/media-queries.ts +0 -47
- package/src/styles/perseus-renderer.less +0 -732
- package/src/styles/shared.ts +0 -130
- package/src/styles/util.less +0 -47
- package/src/styles/variables.boostrap.less +0 -277
- package/src/styles/variables.less +0 -56
- package/src/styles/variables.shared.less +0 -340
- package/src/styles/widgets/categorizer.less +0 -38
- package/src/styles/widgets/dropdown.less +0 -3
- package/src/styles/widgets/expression.less +0 -65
- package/src/styles/widgets/graded-group.less +0 -36
- package/src/styles/widgets/grapher.less +0 -12
- package/src/styles/widgets/group.less +0 -19
- package/src/styles/widgets/image.less +0 -54
- package/src/styles/widgets/interactive-graph.less +0 -64
- package/src/styles/widgets/label-image.less +0 -57
- package/src/styles/widgets/matcher.less +0 -8
- package/src/styles/widgets/matrix.less +0 -126
- package/src/styles/widgets/measurer.less +0 -20
- package/src/styles/widgets/orderer.less +0 -98
- package/src/styles/widgets/passage.less +0 -154
- package/src/styles/widgets/plotter.less +0 -31
- package/src/styles/widgets/radio.less +0 -58
- package/src/styles/widgets/reaction-diagram.less +0 -35
- package/src/styles/widgets/sequence.less +0 -5
- package/src/styles/widgets/sortable.less +0 -113
- package/src/styles/widgets/table.less +0 -57
- package/src/styles/widgets/unit.less +0 -15
- package/src/tex-wrangler.ts +0 -182
- package/src/translation-linter.ts +0 -126
- package/src/traversal.ts +0 -138
- package/src/types.ts +0 -513
- package/src/util/a11y.ts +0 -23
- package/src/util/answer-types.test.ts +0 -114
- package/src/util/answer-types.ts +0 -876
- package/src/util/colors.ts +0 -93
- package/src/util/drawing-transform.test.ts +0 -67
- package/src/util/drawing-transform.ts +0 -102
- package/src/util/extract-perseus-data.ts +0 -539
- package/src/util/fix-passage-refs.ts +0 -121
- package/src/util/geometry.test.ts +0 -75
- package/src/util/geometry.ts +0 -312
- package/src/util/graph-bounds.ts +0 -23
- package/src/util/graph-utils.ts +0 -15
- package/src/util/graphie.test.ts +0 -1277
- package/src/util/graphie.ts +0 -1576
- package/src/util/interactive.ts +0 -4174
- package/src/util/interval.ts +0 -4
- package/src/util/katex-preprocess.ts +0 -14
- package/src/util/math.test.ts +0 -11
- package/src/util/math.ts +0 -294
- package/src/util/mobile-native-utils.test.ts +0 -22
- package/src/util/mobile-native-utils.ts +0 -12
- package/src/util/parse-perseus-json.test.ts +0 -10
- package/src/util/parse-perseus-json.ts +0 -13
- package/src/util/react-render.tsx +0 -27
- package/src/util/register-all-widgets-for-testing.ts +0 -13
- package/src/util/scroll-utils.ts +0 -155
- package/src/util/sizing-utils.ts +0 -46
- package/src/util/tex.ts +0 -73
- package/src/util/url-utils.ts +0 -34
- package/src/util.graphie.test.ts +0 -45
- package/src/util.graphie.ts +0 -59
- package/src/util.ts +0 -966
- package/src/version.ts +0 -10
- package/src/widget-container.tsx +0 -199
- package/src/widgets/__stories__/categorizer.stories.tsx +0 -14
- package/src/widgets/__stories__/cs-program.stories.tsx +0 -14
- package/src/widgets/__stories__/definition.stories.tsx +0 -114
- package/src/widgets/__stories__/dropdown.stories.tsx +0 -14
- package/src/widgets/__stories__/explanation.stories.tsx +0 -18
- package/src/widgets/__stories__/expression.stories.tsx +0 -145
- package/src/widgets/__stories__/graded-group-set.stories.tsx +0 -31
- package/src/widgets/__stories__/graded-group.stories.tsx +0 -31
- package/src/widgets/__stories__/grapher.stories.tsx +0 -46
- package/src/widgets/__stories__/group.stories.tsx +0 -14
- package/src/widgets/__stories__/iframe.stories.tsx +0 -14
- package/src/widgets/__stories__/image.stories.tsx +0 -85
- package/src/widgets/__stories__/input-number.stories.tsx +0 -101
- package/src/widgets/__stories__/interaction.stories.tsx +0 -14
- package/src/widgets/__stories__/interactive-graph.stories.tsx +0 -60
- package/src/widgets/__stories__/label-image.stories.tsx +0 -130
- package/src/widgets/__stories__/matcher.stories.tsx +0 -14
- package/src/widgets/__stories__/matrix.stories.tsx +0 -14
- package/src/widgets/__stories__/number-line.stories.tsx +0 -14
- package/src/widgets/__stories__/numeric-input.stories.tsx +0 -105
- package/src/widgets/__stories__/orderer.stories.tsx +0 -18
- package/src/widgets/__stories__/passage-ref.stories.tsx +0 -33
- package/src/widgets/__stories__/passage.stories.tsx +0 -39
- package/src/widgets/__stories__/plotter.stories.tsx +0 -27
- package/src/widgets/__stories__/radio.stories.tsx +0 -86
- package/src/widgets/__stories__/random-widgets.stories.tsx +0 -59
- package/src/widgets/__stories__/sorter.stories.tsx +0 -14
- package/src/widgets/__stories__/test-keypad-context-wrapper.tsx +0 -66
- package/src/widgets/__stories__/unit.stories.tsx +0 -28
- package/src/widgets/__stories__/video-transcript-link.stories.tsx +0 -23
- package/src/widgets/__stories__/video.stories.tsx +0 -22
- package/src/widgets/__testdata__/base-radio.testdata.ts +0 -21
- package/src/widgets/__testdata__/categorizer.testdata.ts +0 -89
- package/src/widgets/__testdata__/cs-program.testdata.ts +0 -27
- package/src/widgets/__testdata__/dropdown.testdata.ts +0 -71
- package/src/widgets/__testdata__/explanation.testdata.ts +0 -85
- package/src/widgets/__testdata__/expression.testdata.ts +0 -198
- package/src/widgets/__testdata__/graded-group-set.testdata.ts +0 -356
- package/src/widgets/__testdata__/graded-group.testdata.ts +0 -77
- package/src/widgets/__testdata__/grapher.testdata.ts +0 -374
- package/src/widgets/__testdata__/group.testdata.ts +0 -153
- package/src/widgets/__testdata__/iframe.testdata.ts +0 -35
- package/src/widgets/__testdata__/image.testdata.ts +0 -36
- package/src/widgets/__testdata__/input-number.testdata.ts +0 -72
- package/src/widgets/__testdata__/interaction.testdata.ts +0 -262
- package/src/widgets/__testdata__/interactive-graph-random.testdata.ts +0 -269
- package/src/widgets/__testdata__/interactive-graph.testdata.ts +0 -644
- package/src/widgets/__testdata__/label-image.testdata.ts +0 -308
- package/src/widgets/__testdata__/matcher.testdata.ts +0 -33
- package/src/widgets/__testdata__/matrix.testdata.ts +0 -28
- package/src/widgets/__testdata__/number-line.testdata.ts +0 -30
- package/src/widgets/__testdata__/numeric-input.testdata.ts +0 -265
- package/src/widgets/__testdata__/orderer.testdata.ts +0 -123
- package/src/widgets/__testdata__/passage-ref.testdata.ts +0 -101
- package/src/widgets/__testdata__/passage.testdata.ts +0 -95
- package/src/widgets/__testdata__/plotter.testdata.ts +0 -36
- package/src/widgets/__testdata__/radio.testdata.ts +0 -324
- package/src/widgets/__testdata__/randomizers.ts +0 -51
- package/src/widgets/__testdata__/sorter.testdata.ts +0 -19
- package/src/widgets/__testdata__/video.testdata.ts +0 -61
- package/src/widgets/__tests__/__snapshots__/categorizer.test.ts.snap +0 -940
- package/src/widgets/__tests__/__snapshots__/cs-program.test.ts.snap +0 -67
- package/src/widgets/__tests__/__snapshots__/definition.test.ts.snap +0 -97
- package/src/widgets/__tests__/__snapshots__/dropdown.test.ts.snap +0 -133
- package/src/widgets/__tests__/__snapshots__/explanation.test.ts.snap +0 -425
- package/src/widgets/__tests__/__snapshots__/graded-group-set-jipt.test.ts.snap +0 -729
- package/src/widgets/__tests__/__snapshots__/graded-group-set.test.ts.snap +0 -339
- package/src/widgets/__tests__/__snapshots__/graded-group.test.ts.snap +0 -801
- package/src/widgets/__tests__/__snapshots__/grapher.test.ts.snap +0 -2673
- package/src/widgets/__tests__/__snapshots__/group.test.tsx.snap +0 -1211
- package/src/widgets/__tests__/__snapshots__/iframe.test.ts.snap +0 -61
- package/src/widgets/__tests__/__snapshots__/image.test.ts.snap +0 -378
- package/src/widgets/__tests__/__snapshots__/input-number.test.ts.snap +0 -495
- package/src/widgets/__tests__/__snapshots__/interaction.test.ts.snap +0 -292
- package/src/widgets/__tests__/__snapshots__/interactive-graph.test.ts.snap +0 -2889
- package/src/widgets/__tests__/__snapshots__/matcher.test.tsx.snap +0 -883
- package/src/widgets/__tests__/__snapshots__/matrix.test.ts.snap +0 -514
- package/src/widgets/__tests__/__snapshots__/number-line.test.ts.snap +0 -814
- package/src/widgets/__tests__/__snapshots__/numeric-input.test.ts.snap +0 -470
- package/src/widgets/__tests__/__snapshots__/orderer.test.ts.snap +0 -243
- package/src/widgets/__tests__/__snapshots__/passage-ref.test.ts.snap +0 -434
- package/src/widgets/__tests__/__snapshots__/passage.test.tsx.snap +0 -1956
- package/src/widgets/__tests__/__snapshots__/plotter.test.tsx.snap +0 -827
- package/src/widgets/__tests__/__snapshots__/radio.test.ts.snap +0 -4237
- package/src/widgets/__tests__/__snapshots__/unit.test.tsx.snap +0 -20
- package/src/widgets/__tests__/__snapshots__/video.test.ts.snap +0 -153
- package/src/widgets/__tests__/categorizer.test.ts +0 -203
- package/src/widgets/__tests__/cs-program.test.ts +0 -43
- package/src/widgets/__tests__/definition.test.ts +0 -136
- package/src/widgets/__tests__/dropdown.test.ts +0 -105
- package/src/widgets/__tests__/explanation.test.ts +0 -198
- package/src/widgets/__tests__/expression-mobile.test.tsx +0 -363
- package/src/widgets/__tests__/expression.test.tsx +0 -484
- package/src/widgets/__tests__/graded-group-set-jipt.test.ts +0 -30
- package/src/widgets/__tests__/graded-group-set.test.ts +0 -288
- package/src/widgets/__tests__/graded-group.test.ts +0 -232
- package/src/widgets/__tests__/grapher.cypress.ts +0 -576
- package/src/widgets/__tests__/grapher.test.ts +0 -33
- package/src/widgets/__tests__/group.test.tsx +0 -510
- package/src/widgets/__tests__/iframe.test.ts +0 -45
- package/src/widgets/__tests__/image.test.ts +0 -62
- package/src/widgets/__tests__/input-number.test.ts +0 -354
- package/src/widgets/__tests__/interaction.test.ts +0 -31
- package/src/widgets/__tests__/interactive-graph.cypress.ts +0 -815
- package/src/widgets/__tests__/interactive-graph.test.ts +0 -106
- package/src/widgets/__tests__/matcher.test.tsx +0 -176
- package/src/widgets/__tests__/matrix.test.ts +0 -82
- package/src/widgets/__tests__/number-line.test.ts +0 -79
- package/src/widgets/__tests__/numeric-input.test.ts +0 -575
- package/src/widgets/__tests__/orderer.test.ts +0 -73
- package/src/widgets/__tests__/passage-ref.test.ts +0 -168
- package/src/widgets/__tests__/passage.test.tsx +0 -224
- package/src/widgets/__tests__/plotter.test.tsx +0 -69
- package/src/widgets/__tests__/radio/base-radio.test.tsx +0 -470
- package/src/widgets/__tests__/radio/choice-icon.test.tsx +0 -90
- package/src/widgets/__tests__/radio/choice.test.tsx +0 -310
- package/src/widgets/__tests__/radio/focus-ring.test.tsx +0 -22
- package/src/widgets/__tests__/radio/option-status.test.tsx +0 -77
- package/src/widgets/__tests__/radio.test.ts +0 -807
- package/src/widgets/__tests__/randomizers.test.ts +0 -53
- package/src/widgets/__tests__/renderQuestion.tsx +0 -101
- package/src/widgets/__tests__/unit.test.tsx +0 -168
- package/src/widgets/__tests__/video.test.ts +0 -69
- package/src/widgets/categorizer.tsx +0 -344
- package/src/widgets/cs-program.tsx +0 -227
- package/src/widgets/definition.tsx +0 -121
- package/src/widgets/deprecated-standin/__stories__/deprecated-standin.stories.tsx +0 -30
- package/src/widgets/deprecated-standin/__tests__/__snapshots__/deprecated-standin.test.ts.snap +0 -70
- package/src/widgets/deprecated-standin/__tests__/deprecated-standin.test.ts +0 -93
- package/src/widgets/deprecated-standin/index.tsx +0 -58
- package/src/widgets/dropdown.tsx +0 -142
- package/src/widgets/explanation.tsx +0 -317
- package/src/widgets/expression.tsx +0 -707
- package/src/widgets/graded-group-answer-bar.tsx +0 -142
- package/src/widgets/graded-group-set.tsx +0 -338
- package/src/widgets/graded-group.tsx +0 -471
- package/src/widgets/grapher/util.tsx +0 -799
- package/src/widgets/grapher.tsx +0 -660
- package/src/widgets/group.tsx +0 -195
- package/src/widgets/iframe.tsx +0 -195
- package/src/widgets/image.tsx +0 -312
- package/src/widgets/input-number.tsx +0 -412
- package/src/widgets/interaction/arrow-picker.tsx +0 -38
- package/src/widgets/interaction/color-picker.tsx +0 -69
- package/src/widgets/interaction/dash-picker.tsx +0 -45
- package/src/widgets/interaction/element-container.tsx +0 -100
- package/src/widgets/interaction.tsx +0 -826
- package/src/widgets/interactive-graph.tsx +0 -2597
- package/src/widgets/label-image/__stories__/answer-choices.stories.tsx +0 -91
- package/src/widgets/label-image/__stories__/answer-pill.stories.tsx +0 -62
- package/src/widgets/label-image/__stories__/marker.stories.tsx +0 -171
- package/src/widgets/label-image/__tests__/answer-pill.test.tsx +0 -75
- package/src/widgets/label-image/__tests__/hide-answers-toggle.test.tsx +0 -39
- package/src/widgets/label-image/answer-choices.tsx +0 -88
- package/src/widgets/label-image/answer-pill.tsx +0 -103
- package/src/widgets/label-image/hide-answers-toggle.tsx +0 -40
- package/src/widgets/label-image/marker.tsx +0 -268
- package/src/widgets/label-image/strings.ts +0 -5
- package/src/widgets/label-image/types.ts +0 -27
- package/src/widgets/label-image.test.ts +0 -928
- package/src/widgets/label-image.tsx +0 -819
- package/src/widgets/lights-puzzle.tsx +0 -359
- package/src/widgets/matcher.tsx +0 -298
- package/src/widgets/matrix.tsx +0 -634
- package/src/widgets/measurer.tsx +0 -222
- package/src/widgets/molecule/__tests__/layout.test.ts +0 -162
- package/src/widgets/molecule/__tests__/parser.test.ts +0 -155
- package/src/widgets/molecule/molecule-drawing.ts +0 -173
- package/src/widgets/molecule/molecule-layout.ts +0 -362
- package/src/widgets/molecule/smiles-parser.ts +0 -296
- package/src/widgets/molecule.tsx +0 -172
- package/src/widgets/number-line.tsx +0 -862
- package/src/widgets/numeric-input.tsx +0 -576
- package/src/widgets/orderer.tsx +0 -786
- package/src/widgets/passage/__tests__/passage-markdown.test.ts +0 -376
- package/src/widgets/passage/passage-markdown.tsx +0 -475
- package/src/widgets/passage-ref-target.tsx +0 -76
- package/src/widgets/passage-ref.tsx +0 -213
- package/src/widgets/passage.tsx +0 -582
- package/src/widgets/plotter.tsx +0 -1194
- package/src/widgets/radio/__stories__/base-radio.stories.tsx +0 -196
- package/src/widgets/radio/__stories__/choice-icon.stories.tsx +0 -166
- package/src/widgets/radio/__stories__/choice-none-above.stories.tsx +0 -40
- package/src/widgets/radio/__stories__/choice.stories.tsx +0 -137
- package/src/widgets/radio/__stories__/focus-ring.stories.tsx +0 -43
- package/src/widgets/radio/__stories__/option-status.stories.tsx +0 -103
- package/src/widgets/radio/base-radio.tsx +0 -511
- package/src/widgets/radio/choice-a11y-text.ts +0 -61
- package/src/widgets/radio/choice-icon/choice-icon.tsx +0 -218
- package/src/widgets/radio/choice-icon/cross-out-line.tsx +0 -51
- package/src/widgets/radio/choice-icon/shared-styles.ts +0 -15
- package/src/widgets/radio/choice-none-above.tsx +0 -56
- package/src/widgets/radio/choice.jsx.fixture.ts +0 -45
- package/src/widgets/radio/choice.tsx +0 -359
- package/src/widgets/radio/focus-ring.tsx +0 -57
- package/src/widgets/radio/option-status.tsx +0 -98
- package/src/widgets/radio/util.test.ts +0 -18
- package/src/widgets/radio/util.ts +0 -31
- package/src/widgets/radio/widget.tsx +0 -520
- package/src/widgets/radio.ts +0 -157
- package/src/widgets/reaction-diagram.tsx +0 -144
- package/src/widgets/sequence.tsx +0 -142
- package/src/widgets/simulator.tsx +0 -829
- package/src/widgets/sorter.tsx +0 -155
- package/src/widgets/table.tsx +0 -393
- package/src/widgets/unit.tsx +0 -374
- package/src/widgets/video-transcript-link.test.tsx +0 -213
- package/src/widgets/video-transcript-link.tsx +0 -84
- package/src/widgets/video.tsx +0 -135
- package/src/widgets.ts +0 -489
- package/src/zoom.ts +0 -555
- package/tsconfig-build.json +0 -26
- package/tsconfig-build.tsbuildinfo +0 -1
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
.old-unit-input input,
|
|
2
|
-
.unit-editor-canonical {
|
|
3
|
-
border: 1px solid #a4a4a4;
|
|
4
|
-
border-radius: 5px;
|
|
5
|
-
// box-sizing: border-box;
|
|
6
|
-
font-size: 14px;
|
|
7
|
-
// margin-bottom: 5px;
|
|
8
|
-
// max-width: 240px;
|
|
9
|
-
padding: 6px;
|
|
10
|
-
// width: 100%;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
.unit-editor > div {
|
|
14
|
-
margin: 5px 0;
|
|
15
|
-
}
|
package/src/tex-wrangler.ts
DELETED
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* In this file, an `expression` is some portion of valid TeX enclosed in
|
|
3
|
-
* curly brackets.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
/*
|
|
7
|
-
* Find the index at which an expression ends, i.e., has an unmatched
|
|
8
|
-
* closing curly bracket. This method assumes that we start with a non-open
|
|
9
|
-
* bracket character and end when we've seen more left than right brackets
|
|
10
|
-
* (rather than assuming that we start with a bracket character and wait for
|
|
11
|
-
* bracket equality).
|
|
12
|
-
*/
|
|
13
|
-
function findEndpoint(tex, currentIndex: number) {
|
|
14
|
-
let bracketDepth = 0;
|
|
15
|
-
|
|
16
|
-
for (let i = currentIndex, len = tex.length; i < len; i++) {
|
|
17
|
-
const c = tex[i];
|
|
18
|
-
|
|
19
|
-
if (c === "{") {
|
|
20
|
-
bracketDepth++;
|
|
21
|
-
} else if (c === "}") {
|
|
22
|
-
bracketDepth--;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
if (bracketDepth < 0) {
|
|
26
|
-
return i;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
// If we never see unbalanced curly brackets, default to the
|
|
30
|
-
// entire string
|
|
31
|
-
return tex.length;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/*
|
|
35
|
-
* Parses an individual set of curly brackets into TeX.
|
|
36
|
-
*/
|
|
37
|
-
function parseNextExpression(
|
|
38
|
-
tex: string,
|
|
39
|
-
currentIndex: number,
|
|
40
|
-
handler: (exp1: string, exp2: string) => string,
|
|
41
|
-
) {
|
|
42
|
-
// Find the first '{' and grab subsequent TeX
|
|
43
|
-
// Ex) tex: '{3}{7}', and we want the '3'
|
|
44
|
-
const openBracketIndex = tex.indexOf("{", currentIndex);
|
|
45
|
-
const nextExpIndex = openBracketIndex + 1;
|
|
46
|
-
|
|
47
|
-
// Truncate to only contain remaining TeX
|
|
48
|
-
const endpoint = findEndpoint(tex, nextExpIndex);
|
|
49
|
-
const expressionTeX = tex.substring(nextExpIndex, endpoint);
|
|
50
|
-
const parsedExp = walkTex(expressionTeX, handler);
|
|
51
|
-
|
|
52
|
-
return {
|
|
53
|
-
endpoint: endpoint,
|
|
54
|
-
expression: parsedExp,
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
function getNextFracIndex(tex: string, currentIndex: number) {
|
|
59
|
-
const dfrac = "\\dfrac";
|
|
60
|
-
const frac = "\\frac";
|
|
61
|
-
|
|
62
|
-
const nextFrac = tex.indexOf(frac, currentIndex);
|
|
63
|
-
const nextDFrac = tex.indexOf(dfrac, currentIndex);
|
|
64
|
-
|
|
65
|
-
if (nextFrac > -1 && nextDFrac > -1) {
|
|
66
|
-
return Math.min(nextFrac, nextDFrac);
|
|
67
|
-
}
|
|
68
|
-
if (nextFrac > -1) {
|
|
69
|
-
return nextFrac;
|
|
70
|
-
}
|
|
71
|
-
if (nextDFrac > -1) {
|
|
72
|
-
return nextDFrac;
|
|
73
|
-
}
|
|
74
|
-
return -1;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
function walkTex(
|
|
78
|
-
tex: string,
|
|
79
|
-
handler: (exp1: string, exp2: string) => string,
|
|
80
|
-
): string {
|
|
81
|
-
if (!tex) {
|
|
82
|
-
return "";
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
// Ex) tex: '2 \dfrac {3}{7}'
|
|
86
|
-
let parsedString = "";
|
|
87
|
-
let currentIndex = 0;
|
|
88
|
-
let nextFrac = getNextFracIndex(tex, currentIndex);
|
|
89
|
-
|
|
90
|
-
// For each \dfrac, find the two expressions (wrapped in {}) and recur
|
|
91
|
-
while (nextFrac > -1) {
|
|
92
|
-
// Gather first fragment, preceding \dfrac
|
|
93
|
-
// Ex) parsedString: '2 '
|
|
94
|
-
parsedString += tex.substring(currentIndex, nextFrac);
|
|
95
|
-
|
|
96
|
-
// Remove everything preceding \dfrac, which has been parsed
|
|
97
|
-
currentIndex = nextFrac;
|
|
98
|
-
|
|
99
|
-
// Parse first expression and move index past it
|
|
100
|
-
// Ex) firstParsedExpression.expression: '3'
|
|
101
|
-
const firstParsedExpression = parseNextExpression(
|
|
102
|
-
tex,
|
|
103
|
-
currentIndex,
|
|
104
|
-
handler,
|
|
105
|
-
);
|
|
106
|
-
currentIndex = firstParsedExpression.endpoint + 1;
|
|
107
|
-
|
|
108
|
-
// Parse second expression
|
|
109
|
-
// Ex) secondParsedExpression.expression: '7'
|
|
110
|
-
const secondParsedExpression = parseNextExpression(
|
|
111
|
-
tex,
|
|
112
|
-
currentIndex,
|
|
113
|
-
handler,
|
|
114
|
-
);
|
|
115
|
-
currentIndex = secondParsedExpression.endpoint + 1;
|
|
116
|
-
|
|
117
|
-
// Add expressions to running total of parsed expressions
|
|
118
|
-
if (parsedString.length) {
|
|
119
|
-
parsedString += " ";
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
// Apply a custom handler based on the parsed subexpressions
|
|
123
|
-
parsedString += handler(
|
|
124
|
-
firstParsedExpression.expression,
|
|
125
|
-
secondParsedExpression.expression,
|
|
126
|
-
);
|
|
127
|
-
|
|
128
|
-
// Find next DFrac, relative to currentIndex
|
|
129
|
-
nextFrac = getNextFracIndex(tex, currentIndex);
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
// Add remaining TeX, which is \dfrac-free
|
|
133
|
-
parsedString += tex.slice(currentIndex);
|
|
134
|
-
|
|
135
|
-
return parsedString;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/*
|
|
139
|
-
* Modify a TeX expression, returning another TeX expression. The resulting
|
|
140
|
-
* expression will have its innermost fractions stubbed out with \fracs
|
|
141
|
-
* (as opposed to \dfracs). All other content will remain untouched.
|
|
142
|
-
*/
|
|
143
|
-
function modifyTex(tex: string): string {
|
|
144
|
-
function isNestedFraction(tex: string) {
|
|
145
|
-
return tex.indexOf("\\frac") > -1 || tex.indexOf("\\dfrac") > -1;
|
|
146
|
-
}
|
|
147
|
-
const handler = function (exp1: string, exp2: string) {
|
|
148
|
-
let prefix;
|
|
149
|
-
if (isNestedFraction(exp1) || isNestedFraction(exp2)) {
|
|
150
|
-
prefix = "\\dfrac";
|
|
151
|
-
} else {
|
|
152
|
-
prefix = "\\frac";
|
|
153
|
-
}
|
|
154
|
-
return prefix + " {" + exp1 + "}{" + exp2 + "}";
|
|
155
|
-
};
|
|
156
|
-
return walkTex(tex, handler);
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
/*
|
|
160
|
-
* Parse a TeX expression into something interpretable by input-number.
|
|
161
|
-
* The process is concerned with: (1) parsing fractions, i.e., \dfracs; and
|
|
162
|
-
* (2) removing backslash-escaping from certain characters (right now, only
|
|
163
|
-
* percent signs).
|
|
164
|
-
*
|
|
165
|
-
* The basic algorithm for handling \dfracs splits on \dfracs and then recurs
|
|
166
|
-
* on the subsequent "expressions", i.e., the {} pairs that follow \dfrac. The
|
|
167
|
-
* recursion is to allow for nested \dfrac elements.
|
|
168
|
-
*
|
|
169
|
-
* Backslash-escapes are removed with a simple search-and-replace.
|
|
170
|
-
*/
|
|
171
|
-
function parseTex(tex: string): string {
|
|
172
|
-
const handler = function (exp1: string, exp2: string) {
|
|
173
|
-
return exp1 + "/" + exp2;
|
|
174
|
-
};
|
|
175
|
-
const texWithoutFracs = walkTex(tex, handler);
|
|
176
|
-
return texWithoutFracs.replace("\\%", "%");
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
export default {
|
|
180
|
-
parseTex,
|
|
181
|
-
modifyTex,
|
|
182
|
-
};
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
import {Rule} from "@khanacademy/perseus-linter";
|
|
2
|
-
import {debounce} from "underscore";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* TranslationLinter asynchronously calls Khan Academy's poentry linter.
|
|
6
|
-
*
|
|
7
|
-
* The poentry linter checks for issues that prevent content from being
|
|
8
|
-
* translated. This linter is KA-specific and so TranslationLinter does not do
|
|
9
|
-
* anything in non-KA environments.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
declare const KA: any;
|
|
13
|
-
|
|
14
|
-
// A LintCB is called once the linter has been run.
|
|
15
|
-
type LintCB = (errors: ReadonlyArray<string>) => void;
|
|
16
|
-
|
|
17
|
-
// msec to wait before we actually call the linter after receiving the
|
|
18
|
-
// last call. The timer is reset if the lint is called during the wait.
|
|
19
|
-
const DEBOUNCE_TIMEOUT = 1000;
|
|
20
|
-
|
|
21
|
-
export default class TranslationLinter {
|
|
22
|
-
// To avoid linting when nothing has changed.
|
|
23
|
-
previousContent: string | null | undefined = null;
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Runs the poentry linter on the given perseus string asynchronously.
|
|
27
|
-
*
|
|
28
|
-
* It doesn't do anything unless we're in a KA environment.
|
|
29
|
-
*
|
|
30
|
-
* onLintErrorsGenerated is called even if there are no errors. It is not
|
|
31
|
-
* called if perseusStr is unchanged from the last call.
|
|
32
|
-
*
|
|
33
|
-
* Linting is relatively expensive -- so we debounce linting each instance
|
|
34
|
-
* for some amount of time.
|
|
35
|
-
*/
|
|
36
|
-
runLinter: any = debounce(
|
|
37
|
-
(perseusStr: string, onLintErrorsGenerated: LintCB) => {
|
|
38
|
-
// TODO(FEI-5003): Do we still need to check for 'KA'?
|
|
39
|
-
if (typeof KA === "undefined") {
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
if (perseusStr === this.previousContent) {
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
this.previousContent = perseusStr;
|
|
48
|
-
|
|
49
|
-
if (perseusStr === "") {
|
|
50
|
-
onLintErrorsGenerated([]);
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
fetch("/api/internal/translations/lint_poentry?preview=1&lang=en", {
|
|
55
|
-
headers: {"Content-Type": "application/json"},
|
|
56
|
-
body: JSON.stringify({
|
|
57
|
-
// The poentry linter verifies that the translation from
|
|
58
|
-
// the original text to the translated text is sane. We
|
|
59
|
-
// want to ensure that the translation from English to
|
|
60
|
-
// English is sane, so msgid === mstr.
|
|
61
|
-
msgid: perseusStr, // msgid is the original text
|
|
62
|
-
msgstr: perseusStr, // msgstr is the translated text
|
|
63
|
-
format: "perseus_text",
|
|
64
|
-
filename: "",
|
|
65
|
-
}),
|
|
66
|
-
method: "POST",
|
|
67
|
-
})
|
|
68
|
-
.then(
|
|
69
|
-
(response) => {
|
|
70
|
-
if (response.status >= 400) {
|
|
71
|
-
return {
|
|
72
|
-
status: "error",
|
|
73
|
-
message: "Could not run i18n linter.",
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
return response.json();
|
|
77
|
-
},
|
|
78
|
-
(rejection) => {
|
|
79
|
-
return {
|
|
80
|
-
status: "error",
|
|
81
|
-
message: "Could not run i18n linter.",
|
|
82
|
-
};
|
|
83
|
-
},
|
|
84
|
-
)
|
|
85
|
-
.then((json) => {
|
|
86
|
-
if (json.status === "error") {
|
|
87
|
-
onLintErrorsGenerated([
|
|
88
|
-
"Some part of this text makes it untranslatable. " +
|
|
89
|
-
"The specific message from the i18n linter was: " +
|
|
90
|
-
json.message.replace(/\n/g, " "),
|
|
91
|
-
]);
|
|
92
|
-
} else {
|
|
93
|
-
onLintErrorsGenerated([]);
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
},
|
|
97
|
-
DEBOUNCE_TIMEOUT,
|
|
98
|
-
);
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* Applies an array of errors generated by linters without position
|
|
102
|
-
* information (TranslationLinter and the legacy getSaveWarnings()) to the
|
|
103
|
-
* top of a Perseus tree.
|
|
104
|
-
*/
|
|
105
|
-
applyLintErrors(
|
|
106
|
-
parsedMarkdown: any,
|
|
107
|
-
translationLintErrors: ReadonlyArray<string>,
|
|
108
|
-
) {
|
|
109
|
-
// These lint errors do not have position data associated with
|
|
110
|
-
// them, so we just plop them at the top.
|
|
111
|
-
if (translationLintErrors.length) {
|
|
112
|
-
const errorText = translationLintErrors.join("\n\n");
|
|
113
|
-
parsedMarkdown.unshift({
|
|
114
|
-
content: {
|
|
115
|
-
type: "text",
|
|
116
|
-
content: "",
|
|
117
|
-
},
|
|
118
|
-
insideTable: false,
|
|
119
|
-
message: errorText,
|
|
120
|
-
ruleName: "legacy-error",
|
|
121
|
-
severity: Rule.Severity.ERROR,
|
|
122
|
-
type: "lint",
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
package/src/traversal.ts
DELETED
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Traverses a {content, widgets, images} renderer props object,
|
|
3
|
-
* such as `itemData.question`
|
|
4
|
-
*
|
|
5
|
-
* This traversal is deep and handles some widget prop upgrades
|
|
6
|
-
* (TODO(aria): Handle minor prop upgrades :) )
|
|
7
|
-
*
|
|
8
|
-
* This is the right way to traverse itemData.
|
|
9
|
-
*
|
|
10
|
-
* NOTE: We should not expose this on the perseus API yet. Instead,
|
|
11
|
-
* build the traversal method you want inside perseus, and use this
|
|
12
|
-
* from that. We might eventually expose this, but I'd like to be
|
|
13
|
-
* more confident in the interface provided first.
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
import _ from "underscore";
|
|
17
|
-
|
|
18
|
-
// TODO(aria): Pull this out of interactive2 / replace with new _.mapObject
|
|
19
|
-
import objective_ from "./interactive2/objective_";
|
|
20
|
-
import * as Widgets from "./widgets";
|
|
21
|
-
|
|
22
|
-
const noop = function () {};
|
|
23
|
-
|
|
24
|
-
const deepCallbackFor = function (
|
|
25
|
-
contentCallback: (arg1: any) => void,
|
|
26
|
-
widgetCallback: (widgetInfo: any, widgetId: string) => any,
|
|
27
|
-
optionsCallback: (arg1: any) => void,
|
|
28
|
-
) {
|
|
29
|
-
const deepCallback = function (widgetInfo: any, widgetId: string) {
|
|
30
|
-
// This doesn't modify the widget info if the widget info
|
|
31
|
-
// is at a later version than is supported, which is important
|
|
32
|
-
// for our latestVersion test below.
|
|
33
|
-
const upgradedWidgetInfo =
|
|
34
|
-
Widgets.upgradeWidgetInfoToLatestVersion(widgetInfo);
|
|
35
|
-
const latestVersion = Widgets.getVersion(upgradedWidgetInfo.type);
|
|
36
|
-
|
|
37
|
-
// Only traverse our children if we can understand this version
|
|
38
|
-
// of the widget props.
|
|
39
|
-
// TODO(aria): This will break if the traversal code assumes that
|
|
40
|
-
// any props that usually get defaulted in are present. That is,
|
|
41
|
-
// it can fail on minor version upgrades.
|
|
42
|
-
// For this reason, and because the upgrade code doesn't handle
|
|
43
|
-
// minor versions correctly (it doesn't report anything useful
|
|
44
|
-
// about what minor version a widget is actually at, since it
|
|
45
|
-
// doesn't have meaning in the context of upgrades), we
|
|
46
|
-
// just check the major version here.
|
|
47
|
-
// TODO(aria): This is seriously quirky and would be unpleasant
|
|
48
|
-
// to think about while writing traverseChildWidgets code. Please
|
|
49
|
-
// make all of this a little tighter.
|
|
50
|
-
// I think once we use react class defaultProps instead of relying
|
|
51
|
-
// on getDefaultProps, this will become easier.
|
|
52
|
-
let newWidgetInfo;
|
|
53
|
-
if (
|
|
54
|
-
latestVersion &&
|
|
55
|
-
upgradedWidgetInfo.version?.major === latestVersion.major
|
|
56
|
-
) {
|
|
57
|
-
newWidgetInfo = Widgets.traverseChildWidgets(
|
|
58
|
-
upgradedWidgetInfo,
|
|
59
|
-
(rendererOptions) => {
|
|
60
|
-
return traverseRenderer(
|
|
61
|
-
rendererOptions,
|
|
62
|
-
contentCallback,
|
|
63
|
-
// so that we traverse grandchildren, too:
|
|
64
|
-
deepCallback,
|
|
65
|
-
optionsCallback,
|
|
66
|
-
);
|
|
67
|
-
},
|
|
68
|
-
);
|
|
69
|
-
} else {
|
|
70
|
-
newWidgetInfo = upgradedWidgetInfo;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
const userWidgetInfo = widgetCallback(newWidgetInfo, widgetId);
|
|
74
|
-
if (userWidgetInfo !== undefined) {
|
|
75
|
-
return userWidgetInfo;
|
|
76
|
-
}
|
|
77
|
-
return newWidgetInfo;
|
|
78
|
-
};
|
|
79
|
-
return deepCallback;
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
const traverseRenderer = function (
|
|
83
|
-
rendererOptions,
|
|
84
|
-
contentCallback: (arg1: any) => void,
|
|
85
|
-
deepWidgetCallback: (widgetInfo: any, widgetId: string) => any,
|
|
86
|
-
optionsCallback: (arg1: any) => void,
|
|
87
|
-
) {
|
|
88
|
-
let newContent = rendererOptions.content;
|
|
89
|
-
if (rendererOptions.content != null) {
|
|
90
|
-
const modifiedContent = contentCallback(rendererOptions.content);
|
|
91
|
-
if (modifiedContent !== undefined) {
|
|
92
|
-
newContent = modifiedContent;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
const newWidgets = objective_.mapObject(
|
|
97
|
-
rendererOptions.widgets || {},
|
|
98
|
-
function (widgetInfo, widgetId) {
|
|
99
|
-
// Widgets without info or a type are empty widgets, and
|
|
100
|
-
// should always be renderable. It's also annoying to write
|
|
101
|
-
// checks for this everywhere, so we just filter them out once and
|
|
102
|
-
// for all!
|
|
103
|
-
// @ts-expect-error - TS2571 - Object is of type 'unknown'.
|
|
104
|
-
if (widgetInfo == null || widgetInfo.type == null) {
|
|
105
|
-
return widgetInfo;
|
|
106
|
-
}
|
|
107
|
-
return deepWidgetCallback(widgetInfo, widgetId);
|
|
108
|
-
},
|
|
109
|
-
);
|
|
110
|
-
|
|
111
|
-
const newOptions = _.extend({}, rendererOptions, {
|
|
112
|
-
content: newContent,
|
|
113
|
-
widgets: newWidgets,
|
|
114
|
-
});
|
|
115
|
-
const userOptions = optionsCallback(newOptions);
|
|
116
|
-
if (userOptions !== undefined) {
|
|
117
|
-
return userOptions;
|
|
118
|
-
}
|
|
119
|
-
return newOptions;
|
|
120
|
-
};
|
|
121
|
-
|
|
122
|
-
export const traverse = function (
|
|
123
|
-
rendererOptions: any,
|
|
124
|
-
contentCallback?: ((arg1: any) => any) | null,
|
|
125
|
-
widgetCallback?: ((widgetInfo: any, widgetId: string) => any) | null,
|
|
126
|
-
optionsCallback?: (arg1: any) => void,
|
|
127
|
-
): any {
|
|
128
|
-
contentCallback = contentCallback || noop;
|
|
129
|
-
widgetCallback = widgetCallback || noop;
|
|
130
|
-
optionsCallback = optionsCallback || noop;
|
|
131
|
-
|
|
132
|
-
return traverseRenderer(
|
|
133
|
-
rendererOptions,
|
|
134
|
-
contentCallback,
|
|
135
|
-
deepCallbackFor(contentCallback, widgetCallback, optionsCallback),
|
|
136
|
-
optionsCallback,
|
|
137
|
-
);
|
|
138
|
-
};
|