@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
package/src/zoom.ts
DELETED
|
@@ -1,555 +0,0 @@
|
|
|
1
|
-
// Derived from the MIT-licensed:
|
|
2
|
-
// https://github.com/fat/zoom.js/blob/fd4f3e43153da7596da0bade198e99f98b47791e/js/zoom.js
|
|
3
|
-
|
|
4
|
-
// NOTE(kevindangoor)
|
|
5
|
-
// This version zooms a new, absolutely positioned image element rather than
|
|
6
|
-
// scaling the original image element within a new container. The problem that
|
|
7
|
-
// I ran into was that we had a grandparent node with a z-index
|
|
8
|
-
// which caused the zoomed image to end up behind the overlay. We sidestep all
|
|
9
|
-
// of that by simplifying to just use a new image element.
|
|
10
|
-
|
|
11
|
-
import $ from "jquery";
|
|
12
|
-
|
|
13
|
-
/*jshint browser:true, node:true */
|
|
14
|
-
|
|
15
|
-
/* ========================================================================
|
|
16
|
-
* Bootstrap: transition.js v3.3.4
|
|
17
|
-
* http://getbootstrap.com/javascript/#transitions
|
|
18
|
-
* ========================================================================
|
|
19
|
-
* Copyright 2011-2015 Twitter, Inc.
|
|
20
|
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
|
21
|
-
* ======================================================================== */
|
|
22
|
-
|
|
23
|
-
// CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
|
|
24
|
-
// ============================================================
|
|
25
|
-
|
|
26
|
-
function transitionEnd() {
|
|
27
|
-
const el = document.createElement("bootstrap");
|
|
28
|
-
|
|
29
|
-
const transEndEventNames = {
|
|
30
|
-
WebkitTransition: "webkitTransitionEnd",
|
|
31
|
-
MozTransition: "transitionend",
|
|
32
|
-
OTransition: "oTransitionEnd otransitionend",
|
|
33
|
-
transition: "transitionend",
|
|
34
|
-
} as const;
|
|
35
|
-
|
|
36
|
-
for (const name in transEndEventNames) {
|
|
37
|
-
if (el.style[name] !== undefined) {
|
|
38
|
-
return {
|
|
39
|
-
end: transEndEventNames[name],
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
return false; // explicit for ie8 ( ._.)
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// http://blog.alexmaccaw.com/css-transitions
|
|
48
|
-
// @ts-expect-error - TS2339 - Property 'emulateTransitionEnd' does not exist on type 'JQuery<HTMLElement>'.
|
|
49
|
-
$.fn.emulateTransitionEnd = function (duration: any) {
|
|
50
|
-
let called = false;
|
|
51
|
-
const $el = this;
|
|
52
|
-
$(this).one("bsTransitionEnd", function () {
|
|
53
|
-
called = true;
|
|
54
|
-
});
|
|
55
|
-
const callback = function () {
|
|
56
|
-
if (!called) {
|
|
57
|
-
$($el).trigger($.support.transition.end);
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
// TODO(jeff, CP-3128): Use Wonder Blocks Timing API.
|
|
62
|
-
// eslint-disable-next-line no-restricted-syntax
|
|
63
|
-
setTimeout(callback, duration);
|
|
64
|
-
return this;
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
$(function () {
|
|
68
|
-
$.support.transition = transitionEnd();
|
|
69
|
-
|
|
70
|
-
if (!$.support.transition) {
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
$.event.special.bsTransitionEnd = {
|
|
75
|
-
bindType: $.support.transition.end,
|
|
76
|
-
delegateType: $.support.transition.end,
|
|
77
|
-
handle: function (e) {
|
|
78
|
-
// @ts-expect-error - TS2769 - No overload matches this call.
|
|
79
|
-
if ($(e.target).is(this)) {
|
|
80
|
-
// @ts-expect-error - TS2345 - Argument of type 'IArguments' is not assignable to parameter of type '[t: TriggeredEvent<EventTarget, any, any, any>, ...args: any[]]'.
|
|
81
|
-
// eslint-disable-next-line prefer-rest-params
|
|
82
|
-
return e.handleObj.handler.apply(this, arguments);
|
|
83
|
-
}
|
|
84
|
-
},
|
|
85
|
-
};
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Changes the viewport meta tag to the given contentString. Invokes callback
|
|
90
|
-
* after viewport meta tag changes have taken effect.
|
|
91
|
-
*
|
|
92
|
-
* TODO(david): Return a promise instead of invoking a callback.
|
|
93
|
-
*/
|
|
94
|
-
function changeViewportTag(
|
|
95
|
-
contentString,
|
|
96
|
-
callback: (() => void) | (() => never),
|
|
97
|
-
) {
|
|
98
|
-
const scrollX = window.scrollX;
|
|
99
|
-
const scrollY = window.scrollY;
|
|
100
|
-
|
|
101
|
-
const viewport = document.querySelector("meta[name=viewport]");
|
|
102
|
-
if (viewport) {
|
|
103
|
-
viewport.setAttribute("content", contentString);
|
|
104
|
-
} else {
|
|
105
|
-
$("head").append(`<meta name="viewport" content="${contentString}">`);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// Hacky way to get the page to take the changes
|
|
109
|
-
// From http://stackoverflow.com/a/36894653
|
|
110
|
-
// @ts-expect-error - TS2322 - Type 'number' is not assignable to type 'string'.
|
|
111
|
-
document.body.style.opacity = 0.9999;
|
|
112
|
-
|
|
113
|
-
// ... and undo the temporary change.
|
|
114
|
-
// TODO(jeff, CP-3128): Use Wonder Blocks Timing API.
|
|
115
|
-
// eslint-disable-next-line no-restricted-syntax
|
|
116
|
-
setTimeout(() => {
|
|
117
|
-
// @ts-expect-error - TS2322 - Type 'number' is not assignable to type 'string'.
|
|
118
|
-
document.body.style.opacity = 1;
|
|
119
|
-
|
|
120
|
-
// ... which involves restoring the scroll position, which may have
|
|
121
|
-
// changed.
|
|
122
|
-
window.scrollTo(scrollX, scrollY);
|
|
123
|
-
|
|
124
|
-
// Invoke callback on the next tick to wait for scroll position to have
|
|
125
|
-
// finished resetting.
|
|
126
|
-
// TODO(jeff, CP-3128): Use Wonder Blocks Timing API.
|
|
127
|
-
// eslint-disable-next-line no-restricted-syntax
|
|
128
|
-
callback && setTimeout(callback, 0);
|
|
129
|
-
}, 0);
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
/**
|
|
133
|
-
* The zoom service
|
|
134
|
-
*/
|
|
135
|
-
function ZoomServiceClass() {}
|
|
136
|
-
|
|
137
|
-
ZoomServiceClass.prototype._initialize = function (enableMobilePinch: any) {
|
|
138
|
-
// Check to see if the service is already initialized
|
|
139
|
-
if (this._$document) {
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
this._activeZoom =
|
|
143
|
-
this._initialScrollPosition =
|
|
144
|
-
this._initialTouchPosition =
|
|
145
|
-
this._touchMoveListener =
|
|
146
|
-
null;
|
|
147
|
-
|
|
148
|
-
this._$document = $(document);
|
|
149
|
-
this._$window = $(window);
|
|
150
|
-
this._$body = $(document.body);
|
|
151
|
-
|
|
152
|
-
this._boundClick = $.proxy(this._clickHandler, this);
|
|
153
|
-
|
|
154
|
-
this._enableMobilePinch = enableMobilePinch;
|
|
155
|
-
};
|
|
156
|
-
|
|
157
|
-
ZoomServiceClass.prototype.handleZoomClick = function (
|
|
158
|
-
e: any,
|
|
159
|
-
enableMobilePinch: any,
|
|
160
|
-
) {
|
|
161
|
-
this._initialize(enableMobilePinch);
|
|
162
|
-
const target = e.target;
|
|
163
|
-
|
|
164
|
-
if (!target || target.tagName !== "IMG") {
|
|
165
|
-
return;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
if (this._$body.hasClass("zoom-overlay-open")) {
|
|
169
|
-
return;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
if (e.metaKey || e.ctrlKey) {
|
|
173
|
-
return window.open(e.target.src, "_blank");
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
if (
|
|
177
|
-
!enableMobilePinch &&
|
|
178
|
-
// @ts-expect-error - TS2554 - Expected 1 arguments, but got 0.
|
|
179
|
-
target.width >= window.innerWidth - Zoom.getOffset()
|
|
180
|
-
) {
|
|
181
|
-
return;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
this._activeZoomClose(true);
|
|
185
|
-
|
|
186
|
-
// Enable page zooming in (i.e. make sure there's no maximum-scale). Also,
|
|
187
|
-
// disable page zoom out on mobile devices, because the container that the
|
|
188
|
-
// image is placed in becomes bigger than the viewport if the page can be
|
|
189
|
-
// zoomed out. We explored other fixes like fixing the overlay and page
|
|
190
|
-
// size to be the viewport, but thought that might be even worse of a hack.
|
|
191
|
-
// See for more info:
|
|
192
|
-
// http://dbushell.com/2013/09/10/css-fixed-positioning-and-mobile-zoom/
|
|
193
|
-
if (enableMobilePinch) {
|
|
194
|
-
// Disable zoom out by setting minimum scale of 1 on the viewport tag.
|
|
195
|
-
changeViewportTag(
|
|
196
|
-
"width=device-width, initial-scale=1, minimum-scale=1",
|
|
197
|
-
() => this._zoom(target),
|
|
198
|
-
);
|
|
199
|
-
} else {
|
|
200
|
-
this._zoom(target);
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
if (!enableMobilePinch) {
|
|
204
|
-
// todo(fat): probably worth throttling this
|
|
205
|
-
this._$window.on("scroll.zoom", $.proxy(this._scrollHandler, this));
|
|
206
|
-
|
|
207
|
-
this._$document.on("keyup.zoom", $.proxy(this._keyHandler, this));
|
|
208
|
-
this._$document.on("touchstart.zoom", $.proxy(this._touchStart, this));
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
// we use a capturing phase here to prevent unintended js events
|
|
212
|
-
// sadly no useCapture in jquery api (http://bugs.jquery.com/ticket/14953)
|
|
213
|
-
document.addEventListener("click", this._boundClick, true);
|
|
214
|
-
|
|
215
|
-
e.stopPropagation();
|
|
216
|
-
};
|
|
217
|
-
|
|
218
|
-
ZoomServiceClass.prototype._zoom = function (target: any) {
|
|
219
|
-
this._activeZoom = new Zoom(target, this._enableMobilePinch);
|
|
220
|
-
this._activeZoom.zoomImage();
|
|
221
|
-
};
|
|
222
|
-
|
|
223
|
-
ZoomServiceClass.prototype._activeZoomClose = function (forceDispose) {
|
|
224
|
-
if (!this._activeZoom) {
|
|
225
|
-
return;
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
if (forceDispose) {
|
|
229
|
-
this._activeZoom.dispose();
|
|
230
|
-
this._disposeActiveZoom();
|
|
231
|
-
} else {
|
|
232
|
-
// Reset any underlying page zoom in case the user had pinched to zoom.
|
|
233
|
-
changeViewportTag(
|
|
234
|
-
`width=device-width, initial-scale=1, minimum-scale=1,
|
|
235
|
-
maximum-scale=1`,
|
|
236
|
-
() => {
|
|
237
|
-
if (this._activeZoom) {
|
|
238
|
-
this._activeZoom.close();
|
|
239
|
-
this._disposeActiveZoom();
|
|
240
|
-
}
|
|
241
|
-
},
|
|
242
|
-
);
|
|
243
|
-
}
|
|
244
|
-
};
|
|
245
|
-
|
|
246
|
-
ZoomServiceClass.prototype._disposeActiveZoom = function () {
|
|
247
|
-
this._$window.off(".zoom");
|
|
248
|
-
this._$document.off(".zoom");
|
|
249
|
-
|
|
250
|
-
document.removeEventListener("click", this._boundClick, true);
|
|
251
|
-
|
|
252
|
-
this._activeZoom = null;
|
|
253
|
-
};
|
|
254
|
-
|
|
255
|
-
ZoomServiceClass.prototype._scrollHandler = function (e: any) {
|
|
256
|
-
if (this._initialScrollPosition === null) {
|
|
257
|
-
this._initialScrollPosition = window.scrollY;
|
|
258
|
-
}
|
|
259
|
-
const deltaY = this._initialScrollPosition - window.scrollY;
|
|
260
|
-
if (Math.abs(deltaY) >= 40) {
|
|
261
|
-
this._activeZoomClose();
|
|
262
|
-
}
|
|
263
|
-
};
|
|
264
|
-
|
|
265
|
-
ZoomServiceClass.prototype._keyHandler = function (e: any) {
|
|
266
|
-
if (e.keyCode === 27) {
|
|
267
|
-
this._activeZoomClose();
|
|
268
|
-
}
|
|
269
|
-
};
|
|
270
|
-
|
|
271
|
-
ZoomServiceClass.prototype._clickHandler = function (e: any) {
|
|
272
|
-
e.stopPropagation();
|
|
273
|
-
e.preventDefault();
|
|
274
|
-
this._activeZoomClose();
|
|
275
|
-
};
|
|
276
|
-
|
|
277
|
-
ZoomServiceClass.prototype._touchStart = function (e: any) {
|
|
278
|
-
// Our jQuery doesn't include `touches` in its event
|
|
279
|
-
// TODO(kevindangoor) Remove `originalEvent` once jQuery is updated
|
|
280
|
-
this._initialTouchPosition = e.originalEvent.touches[0].pageY;
|
|
281
|
-
$(e.target).on("touchmove.zoom", $.proxy(this._touchMove, this));
|
|
282
|
-
};
|
|
283
|
-
|
|
284
|
-
ZoomServiceClass.prototype._touchMove = function (e) {
|
|
285
|
-
// Our jQuery doesn't include `touches` in its event
|
|
286
|
-
// TODO(kevindangoor) Remove `originalEvent` once jQuery is updated
|
|
287
|
-
if (
|
|
288
|
-
Math.abs(
|
|
289
|
-
e.originalEvent.touches[0].pageY - this._initialTouchPosition,
|
|
290
|
-
) > 10
|
|
291
|
-
) {
|
|
292
|
-
this._activeZoomClose();
|
|
293
|
-
$(e.target).off("touchmove.zoom");
|
|
294
|
-
}
|
|
295
|
-
};
|
|
296
|
-
|
|
297
|
-
/**
|
|
298
|
-
* The zoom object
|
|
299
|
-
*/
|
|
300
|
-
function Zoom(img: any, enableMobilePinch: any) {
|
|
301
|
-
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation. | TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation. | TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
|
|
302
|
-
this._fullHeight = this._fullWidth = this._overlay = null;
|
|
303
|
-
|
|
304
|
-
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
|
|
305
|
-
this._targetImage = img;
|
|
306
|
-
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
|
|
307
|
-
this._enableMobilePinch = enableMobilePinch;
|
|
308
|
-
|
|
309
|
-
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
|
|
310
|
-
this._$body = $(document.body);
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
/** Margin around the image when in the "zoomed"/lightbox state. */
|
|
314
|
-
Zoom._OFFSET = 80;
|
|
315
|
-
Zoom._MAX_WIDTH = 2560;
|
|
316
|
-
Zoom._MAX_HEIGHT = 4096;
|
|
317
|
-
|
|
318
|
-
Zoom.getOffset = function (zoomToFitOnMobile: undefined) {
|
|
319
|
-
return zoomToFitOnMobile ? 0 : Zoom._OFFSET;
|
|
320
|
-
};
|
|
321
|
-
|
|
322
|
-
Zoom.prototype.getOffset = function () {
|
|
323
|
-
return Zoom.getOffset(this._enableMobilePinch);
|
|
324
|
-
};
|
|
325
|
-
|
|
326
|
-
Zoom.prototype.zoomImage = function () {
|
|
327
|
-
const img = document.createElement("img");
|
|
328
|
-
const $zoomedImage = $(img);
|
|
329
|
-
|
|
330
|
-
img.onload = function () {
|
|
331
|
-
// Load the image without specifying height and width so that we can find
|
|
332
|
-
// the true height and width.
|
|
333
|
-
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
|
|
334
|
-
this._fullHeight = Number(img.height);
|
|
335
|
-
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
|
|
336
|
-
this._fullWidth = Number(img.width);
|
|
337
|
-
|
|
338
|
-
// Set up our image to mirror the current image on the document.
|
|
339
|
-
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation. | TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
|
|
340
|
-
const imageOffset = (this._imageOffset = $(this._targetImage).offset());
|
|
341
|
-
|
|
342
|
-
// Position the image using viewport-fixed coordinates so that it is
|
|
343
|
-
// exactly over the image on the document.
|
|
344
|
-
//
|
|
345
|
-
// Said another way ... get the coordinates of the image relative to
|
|
346
|
-
// the viewport, and use those to position our new image (which is
|
|
347
|
-
// absolutely positioned within a full-bleed fixed-position container).
|
|
348
|
-
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation. | TS2532 - Object is possibly 'undefined'. | TS2532 - Object is possibly 'undefined'.
|
|
349
|
-
const left = (this._left = imageOffset.left - $(window).scrollLeft());
|
|
350
|
-
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation. | TS2532 - Object is possibly 'undefined'. | TS2532 - Object is possibly 'undefined'.
|
|
351
|
-
const top = (this._top = imageOffset.top - $(window).scrollTop());
|
|
352
|
-
|
|
353
|
-
$zoomedImage.css({
|
|
354
|
-
left: left,
|
|
355
|
-
top: top,
|
|
356
|
-
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
|
|
357
|
-
width: this._targetImage.width,
|
|
358
|
-
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
|
|
359
|
-
height: this._targetImage.height,
|
|
360
|
-
});
|
|
361
|
-
|
|
362
|
-
// @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.
|
|
363
|
-
this._zoomOriginal();
|
|
364
|
-
}.bind(this);
|
|
365
|
-
|
|
366
|
-
img.src = this._targetImage.src;
|
|
367
|
-
|
|
368
|
-
this.$zoomedImage = $zoomedImage;
|
|
369
|
-
};
|
|
370
|
-
|
|
371
|
-
Zoom.prototype._zoomOriginal = function () {
|
|
372
|
-
this.$zoomedImage.addClass("zoom-img").attr("data-action", "zoom-out");
|
|
373
|
-
$(this._targetImage).css("visibility", "hidden");
|
|
374
|
-
|
|
375
|
-
this._backdrop = document.createElement("div");
|
|
376
|
-
this._backdrop.className = "zoom-backdrop";
|
|
377
|
-
document.body?.appendChild(this._backdrop);
|
|
378
|
-
|
|
379
|
-
this._overlay = document.createElement("div");
|
|
380
|
-
this._overlay.className = "zoom-overlay";
|
|
381
|
-
|
|
382
|
-
document.body?.appendChild(this._overlay);
|
|
383
|
-
this._overlay?.appendChild(this.$zoomedImage[0]);
|
|
384
|
-
|
|
385
|
-
this._calculateZoom();
|
|
386
|
-
this._triggerAnimation();
|
|
387
|
-
};
|
|
388
|
-
|
|
389
|
-
Zoom.prototype._calculateZoom = function () {
|
|
390
|
-
const originalFullImageWidth = this._fullWidth;
|
|
391
|
-
const originalFullImageHeight = this._fullHeight;
|
|
392
|
-
const viewportHeight = window.innerHeight - this.getOffset();
|
|
393
|
-
const viewportWidth = window.innerWidth - this.getOffset();
|
|
394
|
-
|
|
395
|
-
const maxScaleFactor = originalFullImageWidth / this._targetImage.width;
|
|
396
|
-
|
|
397
|
-
// Zoom to fit the viewport.
|
|
398
|
-
const imageAspectRatio = originalFullImageWidth / originalFullImageHeight;
|
|
399
|
-
const viewportAspectRatio = viewportWidth / viewportHeight;
|
|
400
|
-
|
|
401
|
-
if (
|
|
402
|
-
originalFullImageWidth < viewportWidth &&
|
|
403
|
-
originalFullImageHeight < viewportHeight
|
|
404
|
-
) {
|
|
405
|
-
this._imgScaleFactor = maxScaleFactor;
|
|
406
|
-
} else if (imageAspectRatio < viewportAspectRatio) {
|
|
407
|
-
this._imgScaleFactor =
|
|
408
|
-
(viewportHeight / originalFullImageHeight) * maxScaleFactor;
|
|
409
|
-
} else {
|
|
410
|
-
this._imgScaleFactor =
|
|
411
|
-
(viewportWidth / (originalFullImageWidth ?? 0)) * maxScaleFactor;
|
|
412
|
-
}
|
|
413
|
-
};
|
|
414
|
-
|
|
415
|
-
Zoom.prototype._triggerAnimation = function () {
|
|
416
|
-
// @ts-expect-error - TS2532 - Object is possibly 'undefined'.
|
|
417
|
-
const viewportY = $(window).scrollTop() + window.innerHeight / 2;
|
|
418
|
-
// @ts-expect-error - TS2532 - Object is possibly 'undefined'.
|
|
419
|
-
const viewportX = $(window).scrollLeft() + window.innerWidth / 2;
|
|
420
|
-
|
|
421
|
-
const scaleFactor = this._imgScaleFactor;
|
|
422
|
-
|
|
423
|
-
const imageCenterY = this._imageOffset.top + this._targetImage.height / 2;
|
|
424
|
-
const imageCenterX = this._imageOffset.left + this._targetImage.width / 2;
|
|
425
|
-
|
|
426
|
-
this._translateY = (viewportY - imageCenterY) / scaleFactor;
|
|
427
|
-
this._translateX = (viewportX - imageCenterX) / scaleFactor;
|
|
428
|
-
|
|
429
|
-
// NOTE: This is re-used below.
|
|
430
|
-
this._zoomedInTransformString = `
|
|
431
|
-
scale(${scaleFactor})
|
|
432
|
-
translate3d(${this._translateX}px, ${this._translateY}px, 0)
|
|
433
|
-
`;
|
|
434
|
-
|
|
435
|
-
this.$zoomedImage
|
|
436
|
-
.css({
|
|
437
|
-
transform: this._zoomedInTransformString,
|
|
438
|
-
})
|
|
439
|
-
.addClass("zoom-transition")
|
|
440
|
-
.one($.support.transition.end, $.proxy(this._onZoomInFinish, this))
|
|
441
|
-
.emulateTransitionEnd(300);
|
|
442
|
-
|
|
443
|
-
this._$body.addClass("zoom-overlay-open");
|
|
444
|
-
};
|
|
445
|
-
|
|
446
|
-
Zoom.prototype._onZoomInFinish = function () {
|
|
447
|
-
// Remove the transform on the image, but make it look exactly the same as
|
|
448
|
-
// the image with the transform -- full-size and centered in the viewport
|
|
449
|
-
// -- using margins + left/top + scroll
|
|
450
|
-
//
|
|
451
|
-
// We need to remove the transform for scrolling to work -- the browser
|
|
452
|
-
// would still calculate the element position/sizing by its pre-transform
|
|
453
|
-
// dimensions.
|
|
454
|
-
|
|
455
|
-
const height = this._targetImage.height * this._imgScaleFactor;
|
|
456
|
-
const width = this._targetImage.width * this._imgScaleFactor;
|
|
457
|
-
let left = 0;
|
|
458
|
-
let top = 0;
|
|
459
|
-
let marginLeft = 0;
|
|
460
|
-
let marginTop = 0;
|
|
461
|
-
let scrollLeft = 0;
|
|
462
|
-
let scrollTop = 0;
|
|
463
|
-
|
|
464
|
-
// Horizontally center the image within the viewport, either by positioning
|
|
465
|
-
// with CSS or scrolling the viewport.
|
|
466
|
-
if (width < window.innerWidth) {
|
|
467
|
-
// @ts-expect-error - TS2322 - Type 'string' is not assignable to type 'number'.
|
|
468
|
-
left = "50%";
|
|
469
|
-
marginLeft = -width / 2;
|
|
470
|
-
} else {
|
|
471
|
-
scrollLeft = (width - window.innerWidth) / 2;
|
|
472
|
-
}
|
|
473
|
-
|
|
474
|
-
// ... and similarly, vertically center the image within the viewport.
|
|
475
|
-
if (height < window.innerHeight) {
|
|
476
|
-
// @ts-expect-error - TS2322 - Type 'string' is not assignable to type 'number'.
|
|
477
|
-
top = "50%";
|
|
478
|
-
marginTop = -height / 2;
|
|
479
|
-
} else {
|
|
480
|
-
scrollTop = (height - window.innerHeight) / 2;
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
this.$zoomedImage
|
|
484
|
-
.css({
|
|
485
|
-
height: height,
|
|
486
|
-
left: left,
|
|
487
|
-
marginLeft: marginLeft,
|
|
488
|
-
marginTop: marginTop,
|
|
489
|
-
top: top,
|
|
490
|
-
transform: "",
|
|
491
|
-
width: width,
|
|
492
|
-
})
|
|
493
|
-
.removeClass("zoom-transition");
|
|
494
|
-
|
|
495
|
-
$(this._overlay).scrollLeft(scrollLeft).scrollTop(scrollTop);
|
|
496
|
-
};
|
|
497
|
-
|
|
498
|
-
Zoom.prototype.close = function () {
|
|
499
|
-
this._$body
|
|
500
|
-
.removeClass("zoom-overlay-open")
|
|
501
|
-
.addClass("zoom-overlay-transitioning");
|
|
502
|
-
|
|
503
|
-
// Upon closing the image, zoom it back out. Do this by first re-applying the
|
|
504
|
-
// zoomed-in transform and resetting the CSS top/left + margins to what it
|
|
505
|
-
// was right after zooming in -- basically undoing what we did in
|
|
506
|
-
// _onZoomInFinish.
|
|
507
|
-
// TODO(david): Adjust this translation of the transform to take into
|
|
508
|
-
// account the current scroll position of the image (if the user
|
|
509
|
-
// scrolled the image after it was zoomed).
|
|
510
|
-
this.$zoomedImage
|
|
511
|
-
.css({
|
|
512
|
-
height: this._targetImage.height,
|
|
513
|
-
left: this._left,
|
|
514
|
-
marginLeft: 0,
|
|
515
|
-
marginTop: 0,
|
|
516
|
-
top: this._top,
|
|
517
|
-
transform: this._zoomedInTransformString,
|
|
518
|
-
width: this._targetImage.width,
|
|
519
|
-
})
|
|
520
|
-
.removeClass("zoom-transition");
|
|
521
|
-
|
|
522
|
-
$(this._overlay).scrollLeft(0).scrollTop(0);
|
|
523
|
-
|
|
524
|
-
// ... now that the image and its container have been set up to be in the
|
|
525
|
-
// same state as right at the end of the zoom-in animation, reset the
|
|
526
|
-
// transform to scale(1) to achieve the zoom-out-into-image-on-document
|
|
527
|
-
// animation.
|
|
528
|
-
// TODO(jeff, CP-3128): Use Wonder Blocks Timing API.
|
|
529
|
-
// eslint-disable-next-line no-restricted-syntax
|
|
530
|
-
setTimeout(() => {
|
|
531
|
-
this.$zoomedImage
|
|
532
|
-
.css({
|
|
533
|
-
transform: "scale(1)",
|
|
534
|
-
})
|
|
535
|
-
.addClass("zoom-transition")
|
|
536
|
-
.one($.support.transition.end, $.proxy(this.dispose, this))
|
|
537
|
-
.emulateTransitionEnd(300);
|
|
538
|
-
}, 10);
|
|
539
|
-
};
|
|
540
|
-
|
|
541
|
-
Zoom.prototype.dispose = function () {
|
|
542
|
-
if (this.$zoomedImage && this.$zoomedImage[0].parentNode) {
|
|
543
|
-
this.$zoomedImage.remove();
|
|
544
|
-
this.$zoomedImage = null;
|
|
545
|
-
|
|
546
|
-
this._overlay.parentNode.removeChild(this._overlay);
|
|
547
|
-
this._backdrop.parentNode.removeChild(this._backdrop);
|
|
548
|
-
|
|
549
|
-
this._$body.removeClass("zoom-overlay-transitioning");
|
|
550
|
-
}
|
|
551
|
-
$(this._targetImage).css("visibility", "visible");
|
|
552
|
-
this._targetImage.focus();
|
|
553
|
-
};
|
|
554
|
-
|
|
555
|
-
export const ZoomService: any = new ZoomServiceClass();
|
package/tsconfig-build.json
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "../tsconfig-shared.json",
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"outDir": "./dist",
|
|
5
|
-
"rootDir": "src",
|
|
6
|
-
"paths": {
|
|
7
|
-
"hubble": ["../../vendor/hubble/hubble.js"],
|
|
8
|
-
"raphael": ["../../vendor/raphael/raphael.js"],
|
|
9
|
-
// NOTE(kevinb): We have to repeat this here because TS doesn't do
|
|
10
|
-
// intelligent merge of tsconfig.json files when using `extends`.
|
|
11
|
-
"@khanacademy/*": [
|
|
12
|
-
"../*/src"
|
|
13
|
-
]
|
|
14
|
-
}
|
|
15
|
-
},
|
|
16
|
-
"references": [
|
|
17
|
-
{"path": "../kas/tsconfig-build.json"},
|
|
18
|
-
{"path": "../kmath/tsconfig-build.json"},
|
|
19
|
-
{"path": "../math-input/tsconfig-build.json"},
|
|
20
|
-
{"path": "../perseus-core/tsconfig-build.json"},
|
|
21
|
-
{"path": "../perseus-core/tsconfig-build.json"},
|
|
22
|
-
{"path": "../perseus-linter/tsconfig-build.json"},
|
|
23
|
-
{"path": "../pure-markdown/tsconfig-build.json"},
|
|
24
|
-
{"path": "../simple-markdown/tsconfig-build.json"},
|
|
25
|
-
]
|
|
26
|
-
}
|