@khanacademy/perseus 0.0.1 → 0.2.1
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/.babelrc.js +1 -1
- package/CHANGELOG.md +29 -0
- package/dist/es/index.css +4361 -0
- package/dist/es/index.js +7 -1
- package/dist/es/index.js.map +1 -1
- package/dist/index.css +4361 -0
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/strings.js +148 -46
- package/package.json +50 -4
- package/src/README.md +35 -0
- package/src/__stories__/item-renderer.stories.jsx +27 -0
- package/src/__stories__/server-item-renderer.stories.jsx +27 -0
- package/src/__testdata__/item-renderer_testdata.js +161 -0
- package/src/__testdata__/renderer_testdata.js +123 -0
- package/src/__tests__/__snapshots__/item-renderer_test.jsx.snap +233 -0
- package/src/__tests__/__snapshots__/perseus-markdown_test.jsx.snap +516 -0
- package/src/__tests__/__snapshots__/pure-markdown_test.js.snap +113 -0
- package/src/__tests__/__snapshots__/renderer_test.jsx.snap +576 -0
- package/src/__tests__/__snapshots__/server-item-renderer_test.jsx.snap +306 -0
- package/src/__tests__/a11y_test.jsx +304 -0
- package/src/__tests__/item-renderer_test.jsx +892 -0
- package/src/__tests__/mock-asset-loading-widget.jsx +57 -0
- package/src/__tests__/mock-widget.jsx +35 -0
- package/src/__tests__/perseus-markdown_test.jsx +747 -0
- package/src/__tests__/pure-markdown_test.js +552 -0
- package/src/__tests__/renderability_test.jsx +481 -0
- package/src/__tests__/renderer-api_test.jsx +333 -0
- package/src/__tests__/renderer_test.jsx +1792 -0
- package/src/__tests__/server-item-renderer_test.jsx +516 -0
- package/src/__tests__/test-items/image-item.js +25 -0
- package/src/__tests__/test-items/input-number-1-item.js +27 -0
- package/src/__tests__/test-items/input-number-2-item.js +39 -0
- package/src/__tests__/test-items/table-item.js +30 -0
- package/src/__tests__/tex-wrangler_test.js +83 -0
- package/src/__tests__/util_test.js +41 -0
- package/src/a11y.js +46 -0
- package/src/all-widgets.js +9 -0
- package/src/article-renderer.jsx +215 -0
- package/src/asset-context.js +30 -0
- package/src/basic-widgets.js +13 -0
- package/src/components/__stories__/button-group.stories.jsx +61 -0
- package/src/components/__stories__/fixed-to-responsive.stories.jsx +132 -0
- package/src/components/__stories__/graph.stories.jsx +27 -0
- package/src/components/__stories__/graphie.stories.jsx +28 -0
- package/src/components/__stories__/hud.stories.jsx +36 -0
- package/src/components/__stories__/icon.stories.jsx +56 -0
- package/src/components/__stories__/image-loader.stories.jsx +60 -0
- package/src/components/__stories__/info-tip.stories.jsx +33 -0
- package/src/components/__stories__/inline-icon.stories.jsx +39 -0
- package/src/components/__stories__/input-with-examples.stories.jsx +51 -0
- package/src/components/__stories__/lint.stories.jsx +40 -0
- package/src/components/__stories__/math-input.stories.jsx +29 -0
- package/src/components/__stories__/math-output.stories.jsx +24 -0
- package/src/components/__stories__/multi-button-group.stories.jsx +69 -0
- package/src/components/__stories__/number-input.stories.jsx +42 -0
- package/src/components/__stories__/possible-answers.stories.jsx +22 -0
- package/src/components/__stories__/prop-check-box.stories.jsx +62 -0
- package/src/components/__stories__/range-input.stories.jsx +28 -0
- package/src/components/__stories__/simple-keypad-input.stories.jsx +28 -0
- package/src/components/__stories__/sortable.stories.jsx +73 -0
- package/src/components/__stories__/stub-tag-editor.stories.jsx +44 -0
- package/src/components/__stories__/svg-image.stories.jsx +60 -0
- package/src/components/__stories__/tex.stories.jsx +18 -0
- package/src/components/__stories__/text-buttons.stories.jsx +51 -0
- package/src/components/__stories__/text-input.stories.jsx +34 -0
- package/src/components/__stories__/text-list-editor.stories.jsx +33 -0
- package/src/components/__stories__/zoomable-tex.stories.jsx +39 -0
- package/src/components/__stories__/zoomable.stories.jsx +40 -0
- package/src/components/__testdata__/sorter_testdata.js +20 -0
- package/src/components/__tests__/__snapshots__/sortable_test.jsx.snap +79 -0
- package/src/components/__tests__/__snapshots__/sorter_test.jsx.snap +297 -0
- package/src/components/__tests__/number-input_test.jsx +112 -0
- package/src/components/__tests__/sortable_test.jsx +234 -0
- package/src/components/__tests__/sorter_test.jsx +111 -0
- package/src/components/__tests__/zoomable_test.jsx +388 -0
- package/src/components/button-group.jsx +131 -0
- package/src/components/constants.js +15 -0
- package/src/components/fixed-to-responsive.jsx +164 -0
- package/src/components/graph.jsx +415 -0
- package/src/components/graphie-classes.jsx +148 -0
- package/src/components/graphie-movables.jsx +342 -0
- package/src/components/graphie.jsx +353 -0
- package/src/components/highlighting/highlightable-content.jsx +245 -0
- package/src/components/highlighting/highlights.js +208 -0
- package/src/components/highlighting/ranges.js +299 -0
- package/src/components/highlighting/types.js +73 -0
- package/src/components/highlighting/ui/highlight-renderer.jsx +179 -0
- package/src/components/highlighting/ui/highlight-set-renderer.jsx +190 -0
- package/src/components/highlighting/ui/highlight-tooltip.jsx +153 -0
- package/src/components/highlighting/ui/highlighting-ui.jsx +163 -0
- package/src/components/highlighting/ui/selection-tracker.jsx +195 -0
- package/src/components/highlighting/ui/types.js +21 -0
- package/src/components/highlighting/ui/util.js +166 -0
- package/src/components/highlighting/word-indexer.jsx +155 -0
- package/src/components/hud.jsx +179 -0
- package/src/components/icon.jsx +149 -0
- package/src/components/image-loader.jsx +175 -0
- package/src/components/info-tip/info-tip.jsx +146 -0
- package/src/components/info-tip.jsx +38 -0
- package/src/components/inline-icon.jsx +81 -0
- package/src/components/input-with-examples.jsx +231 -0
- package/src/components/lint.jsx +454 -0
- package/src/components/math-input.jsx +282 -0
- package/src/components/math-output.jsx +128 -0
- package/src/components/multi-button-group.jsx +137 -0
- package/src/components/new-tooltip/README.md +110 -0
- package/src/components/new-tooltip/__stories__/flexible-position.stories.jsx +437 -0
- package/src/components/new-tooltip/__stories__/new-tooltip.stories.jsx +665 -0
- package/src/components/new-tooltip/__stories__/tooltip-arrow.stories.jsx +70 -0
- package/src/components/new-tooltip/__stories__/tooltip-bubble.stories.jsx +98 -0
- package/src/components/new-tooltip/__tests__/style-constants_test.js +8 -0
- package/src/components/new-tooltip/__tests__/util_test.js +47 -0
- package/src/components/new-tooltip/flexible-position.jsx +182 -0
- package/src/components/new-tooltip/new-tooltip.jsx +399 -0
- package/src/components/new-tooltip/style-constants.js +13 -0
- package/src/components/new-tooltip/tooltip-arrow.jsx +184 -0
- package/src/components/new-tooltip/tooltip-bubble.jsx +223 -0
- package/src/components/new-tooltip/tooltip-portal.jsx +101 -0
- package/src/components/new-tooltip/tooltip-positioner.jsx +529 -0
- package/src/components/new-tooltip/types.js +183 -0
- package/src/components/new-tooltip/util.js +27 -0
- package/src/components/number-input.jsx +253 -0
- package/src/components/possible-answers.jsx +36 -0
- package/src/components/prop-check-box.jsx +80 -0
- package/src/components/range-input.jsx +61 -0
- package/src/components/simple-keypad-input.jsx +91 -0
- package/src/components/sortable.jsx +873 -0
- package/src/components/stub-tag-editor.jsx +54 -0
- package/src/components/svg-image.jsx +762 -0
- package/src/components/tex-buttons.jsx +322 -0
- package/src/components/tex.jsx +70 -0
- package/src/components/text-input.jsx +82 -0
- package/src/components/text-list-editor.jsx +157 -0
- package/src/components/tooltip.jsx +395 -0
- package/src/components/visibility-observer/__stories__/visibility-observer.stories.jsx +140 -0
- package/src/components/visibility-observer/get-scroll-parent.js +45 -0
- package/src/components/visibility-observer/visibility-observer.js +109 -0
- package/src/components/visibility-observer/visibility-observer.jsx +123 -0
- package/src/components/zoomable-tex.jsx +70 -0
- package/src/components/zoomable.jsx +304 -0
- package/src/components.js +17 -0
- package/src/dependencies.js +22 -0
- package/src/error-boundary.jsx +48 -0
- package/src/extra-widgets.js +75 -0
- package/src/gorgon/README +40 -0
- package/src/gorgon/__tests__/matcher_test.js +497 -0
- package/src/gorgon/__tests__/rule_test.js +101 -0
- package/src/gorgon/__tests__/rules_test.js +487 -0
- package/src/gorgon/__tests__/selector-parser_test.js +52 -0
- package/src/gorgon/__tests__/tree-transformer_test.js +446 -0
- package/src/gorgon/gorgon.js +290 -0
- package/src/gorgon/proptypes.js +29 -0
- package/src/gorgon/rule.js +413 -0
- package/src/gorgon/rules/absolute-url.js +24 -0
- package/src/gorgon/rules/all-rules.js +72 -0
- package/src/gorgon/rules/blockquoted-math.js +10 -0
- package/src/gorgon/rules/blockquoted-widget.js +10 -0
- package/src/gorgon/rules/double-spacing-after-terminal.js +12 -0
- package/src/gorgon/rules/extra-content-spacing.js +12 -0
- package/src/gorgon/rules/heading-level-1.js +14 -0
- package/src/gorgon/rules/heading-level-skip.js +20 -0
- package/src/gorgon/rules/heading-sentence-case.js +11 -0
- package/src/gorgon/rules/heading-title-case.js +63 -0
- package/src/gorgon/rules/image-alt-text.js +21 -0
- package/src/gorgon/rules/image-in-table.js +10 -0
- package/src/gorgon/rules/image-spaces-around-urls.js +35 -0
- package/src/gorgon/rules/image-widget.js +50 -0
- package/src/gorgon/rules/link-click-here.js +11 -0
- package/src/gorgon/rules/lint-utils.js +48 -0
- package/src/gorgon/rules/long-paragraph.js +14 -0
- package/src/gorgon/rules/math-adjacent.js +10 -0
- package/src/gorgon/rules/math-align-extra-break.js +11 -0
- package/src/gorgon/rules/math-align-linebreaks.js +43 -0
- package/src/gorgon/rules/math-empty.js +10 -0
- package/src/gorgon/rules/math-font-size.js +12 -0
- package/src/gorgon/rules/math-frac.js +10 -0
- package/src/gorgon/rules/math-nested.js +11 -0
- package/src/gorgon/rules/math-starts-with-space.js +12 -0
- package/src/gorgon/rules/math-text-empty.js +10 -0
- package/src/gorgon/rules/math-without-dollars.js +14 -0
- package/src/gorgon/rules/nested-lists.js +11 -0
- package/src/gorgon/rules/profanity.js +10 -0
- package/src/gorgon/rules/table-missing-cells.js +20 -0
- package/src/gorgon/rules/unbalanced-code-delimiters.js +14 -0
- package/src/gorgon/rules/unescaped-dollar.js +10 -0
- package/src/gorgon/rules/widget-in-table.js +10 -0
- package/src/gorgon/selector.js +506 -0
- package/src/gorgon/tree-transformer.js +588 -0
- package/src/hint-renderer.jsx +159 -0
- package/src/hints-renderer.jsx +359 -0
- package/src/icon-paths.js +120 -0
- package/src/index.js +149 -2
- package/src/init.js +49 -0
- package/src/interaction-tracker.js +60 -0
- package/src/interactive2/__tests__/movable-mock.js +48 -0
- package/src/interactive2/__tests__/movable-point_test.js +146 -0
- package/src/interactive2/interactive-util.js +152 -0
- package/src/interactive2/movable-helper-methods.js +160 -0
- package/src/interactive2/movable-line-options.js +392 -0
- package/src/interactive2/movable-line.js +322 -0
- package/src/interactive2/movable-point-options.js +190 -0
- package/src/interactive2/movable-point.jsx +603 -0
- package/src/interactive2/movable-polygon-options.js +351 -0
- package/src/interactive2/movable-polygon.js +368 -0
- package/src/interactive2/movable.js +273 -0
- package/src/interactive2/objective_.js +79 -0
- package/src/interactive2/types.js +3 -0
- package/src/interactive2/wrapped-defaults.js +86 -0
- package/src/interactive2/wrapped-ellipse.js +87 -0
- package/src/interactive2/wrapped-line.js +109 -0
- package/src/interactive2/wrapped-path.js +47 -0
- package/src/interactive2.js +91 -0
- package/src/item-renderer.jsx +518 -0
- package/src/item-version.js +12 -0
- package/src/jipt-paragraphs.js +44 -0
- package/src/jquery.mobile.vmouse.js +545 -0
- package/src/keypad-context.js +33 -0
- package/src/loading-context.js +20 -0
- package/src/logging/log.js +107 -0
- package/src/logging/log_test.js +41 -0
- package/src/mixins/changeable.jsx +115 -0
- package/src/mixins/editor-jsonify.jsx +13 -0
- package/src/mixins/provide-keypad.jsx +129 -0
- package/src/mixins/widget-jsonify-deprecated.jsx +23 -0
- package/src/mixins/widget-prop-blacklist.js +36 -0
- package/src/multi-items/__stories__/multi-renderer.stories.js +88 -0
- package/src/multi-items/__testdata__/multi-renderer_testdata.js +174 -0
- package/src/multi-items/__tests__/__snapshots__/multi-renderer_test.js.snap +994 -0
- package/src/multi-items/__tests__/items_test.js +245 -0
- package/src/multi-items/__tests__/multi-renderer_test.js +903 -0
- package/src/multi-items/__tests__/prop-type-builders_test.js +134 -0
- package/src/multi-items/__tests__/shapes_test.js +44 -0
- package/src/multi-items/__tests__/trees_test.js +316 -0
- package/src/multi-items/item-types.js +55 -0
- package/src/multi-items/items.js +176 -0
- package/src/multi-items/multi-renderer.jsx +543 -0
- package/src/multi-items/prop-type-builders.js +105 -0
- package/src/multi-items/shape-types.js +47 -0
- package/src/multi-items/shapes.js +53 -0
- package/src/multi-items/tree-types.js +42 -0
- package/src/multi-items/trees.js +345 -0
- package/src/multi-items.js +76 -0
- package/src/not-gorgon.js +129 -0
- package/src/perseus-api.jsx +270 -0
- package/src/perseus-env.js +26 -0
- package/src/perseus-error.js +19 -0
- package/src/perseus-markdown.jsx +433 -0
- package/src/perseus-types.js +1597 -0
- package/src/pure-markdown.js +347 -0
- package/src/question-paragraph.jsx +30 -0
- package/src/renderability.jsx +108 -0
- package/src/renderer.jsx +1932 -0
- package/src/server-item-renderer.jsx +467 -0
- package/src/sigfigs.jsx +492 -0
- package/src/styles/articles.less +748 -0
- package/src/styles/constants.js +119 -0
- package/src/styles/global-constants.js +350 -0
- package/src/styles/global-styles.js +307 -0
- package/src/styles/khan-exercise.css +1304 -0
- package/src/styles/media-queries.js +48 -0
- package/src/styles/perseus-renderer.less +1007 -0
- package/src/styles/shared.js +132 -0
- package/src/styles/util.less +47 -0
- package/src/styles/variables.boostrap.less +301 -0
- package/src/styles/variables.less +68 -0
- package/src/styles/variables.shared.less +356 -0
- package/src/styles/widgets/categorizer.less +39 -0
- package/src/styles/widgets/definition.less +86 -0
- package/src/styles/widgets/dropdown.less +3 -0
- package/src/styles/widgets/expression.less +147 -0
- package/src/styles/widgets/graded-group.less +36 -0
- package/src/styles/widgets/grapher.less +11 -0
- package/src/styles/widgets/group.less +19 -0
- package/src/styles/widgets/image.less +29 -0
- package/src/styles/widgets/interactive-graph.less +61 -0
- package/src/styles/widgets/label-image.less +41 -0
- package/src/styles/widgets/matcher.less +8 -0
- package/src/styles/widgets/matrix.less +120 -0
- package/src/styles/widgets/measurer.less +20 -0
- package/src/styles/widgets/orderer.less +97 -0
- package/src/styles/widgets/passage.less +151 -0
- package/src/styles/widgets/plotter.less +33 -0
- package/src/styles/widgets/radio.less +52 -0
- package/src/styles/widgets/reaction-diagram.less +35 -0
- package/src/styles/widgets/sequence.less +5 -0
- package/src/styles/widgets/sortable.less +127 -0
- package/src/styles/widgets/table.less +56 -0
- package/src/styles/widgets/transformer.less +28 -0
- package/src/styles/widgets/unit.less +14 -0
- package/src/tex-wrangler.js +176 -0
- package/src/traversal.jsx +141 -0
- package/src/types.js +538 -0
- package/src/util/a11y.js +24 -0
- package/src/util/answer-types.js +862 -0
- package/src/util/answer-types_test.js +115 -0
- package/src/util/colors.js +94 -0
- package/src/util/fix-passage-refs.jsx +122 -0
- package/src/util/graph-utils.js +16 -0
- package/src/util/graphie.js +1586 -0
- package/src/util/interactive.js +4078 -0
- package/src/util/katex-preprocess.js +16 -0
- package/src/util/math.js +296 -0
- package/src/util/mobile-native-utils.js +14 -0
- package/src/util/mobile-native-utils_test.js +24 -0
- package/src/util/register-all-widgets-for-testing.js +12 -0
- package/src/util/scroll-utils.js +162 -0
- package/src/util/sizing-utils.js +46 -0
- package/src/util/tex.js +203 -0
- package/src/util/url-utils.js +36 -0
- package/src/util.js +990 -0
- package/src/version.js +11 -0
- package/src/widget-container.jsx +174 -0
- package/src/widgets/__stories__/categorizer.stories.jsx +15 -0
- package/src/widgets/__stories__/cs-program.stories.jsx +15 -0
- package/src/widgets/__stories__/definition.stories.jsx +38 -0
- package/src/widgets/__stories__/dropdown.stories.jsx +15 -0
- package/src/widgets/__stories__/explanation.stories.jsx +19 -0
- package/src/widgets/__stories__/expression.stories.jsx +26 -0
- package/src/widgets/__stories__/graded-group-set.stories.jsx +32 -0
- package/src/widgets/__stories__/graded-group.stories.jsx +32 -0
- package/src/widgets/__stories__/grapher.stories.jsx +47 -0
- package/src/widgets/__stories__/group.stories.jsx +15 -0
- package/src/widgets/__stories__/iframe.stories.jsx +15 -0
- package/src/widgets/__stories__/image.stories.jsx +62 -0
- package/src/widgets/__stories__/input-number.stories.jsx +90 -0
- package/src/widgets/__stories__/interaction.stories.jsx +15 -0
- package/src/widgets/__stories__/interactive-graph.stories.jsx +61 -0
- package/src/widgets/__stories__/matcher.stories.jsx +15 -0
- package/src/widgets/__stories__/matrix.stories.jsx +15 -0
- package/src/widgets/__stories__/number-line.stories.jsx +15 -0
- package/src/widgets/__stories__/numeric-input.stories.jsx +19 -0
- package/src/widgets/__stories__/orderer.stories.jsx +15 -0
- package/src/widgets/__stories__/passage-ref.stories.jsx +19 -0
- package/src/widgets/__stories__/passage.stories.jsx +19 -0
- package/src/widgets/__stories__/radio.stories.jsx +82 -0
- package/src/widgets/__stories__/sorter.stories.jsx +15 -0
- package/src/widgets/__stories__/transformer.stories.jsx +15 -0
- package/src/widgets/__stories__/unit.stories.jsx +45 -0
- package/src/widgets/__stories__/video-transcript-link.stories.jsx +24 -0
- package/src/widgets/__stories__/video.stories.jsx +15 -0
- package/src/widgets/__testdata__/categorizer_testdata.js +50 -0
- package/src/widgets/__testdata__/cs-program_testdata.js +28 -0
- package/src/widgets/__testdata__/dropdown_testdata.js +34 -0
- package/src/widgets/__testdata__/explanation_testdata.js +56 -0
- package/src/widgets/__testdata__/expression_testdata.js +95 -0
- package/src/widgets/__testdata__/graded-group-set_testdata.js +358 -0
- package/src/widgets/__testdata__/graded-group_testdata.js +79 -0
- package/src/widgets/__testdata__/grapher_testdata.js +376 -0
- package/src/widgets/__testdata__/group_testdata.js +156 -0
- package/src/widgets/__testdata__/iframe_testdata.js +36 -0
- package/src/widgets/__testdata__/image_testdata.js +38 -0
- package/src/widgets/__testdata__/input-number_testdata.js +73 -0
- package/src/widgets/__testdata__/interaction_testdata.js +264 -0
- package/src/widgets/__testdata__/interactive-graph_testdata.js +646 -0
- package/src/widgets/__testdata__/matcher_testdata.js +34 -0
- package/src/widgets/__testdata__/matrix_testdata.js +29 -0
- package/src/widgets/__testdata__/number-line_testdata.js +31 -0
- package/src/widgets/__testdata__/numeric-input_testdata.js +266 -0
- package/src/widgets/__testdata__/orderer_testdata.js +58 -0
- package/src/widgets/__testdata__/passage-ref_testdata.js +41 -0
- package/src/widgets/__testdata__/passage_testdata.js +71 -0
- package/src/widgets/__testdata__/radio_testdata.js +210 -0
- package/src/widgets/__testdata__/sorter_testdata.js +20 -0
- package/src/widgets/__testdata__/transformer_testdata.js +109 -0
- package/src/widgets/__testdata__/video_testdata.js +22 -0
- package/src/widgets/__tests__/__snapshots__/categorizer_test.jsx.snap +928 -0
- package/src/widgets/__tests__/__snapshots__/cs-program_test.jsx.snap +75 -0
- package/src/widgets/__tests__/__snapshots__/definition_test.js.snap +99 -0
- package/src/widgets/__tests__/__snapshots__/dropdown_test.jsx.snap +143 -0
- package/src/widgets/__tests__/__snapshots__/explanation_test.js.snap +473 -0
- package/src/widgets/__tests__/__snapshots__/expression_test.jsx.snap +38 -0
- package/src/widgets/__tests__/__snapshots__/graded-group-set-jipt_test.jsx.snap +754 -0
- package/src/widgets/__tests__/__snapshots__/graded-group-set_test.jsx.snap +310 -0
- package/src/widgets/__tests__/__snapshots__/graded-group_test.jsx.snap +863 -0
- package/src/widgets/__tests__/__snapshots__/grapher_test.jsx.snap +2880 -0
- package/src/widgets/__tests__/__snapshots__/group_test.jsx.snap +1154 -0
- package/src/widgets/__tests__/__snapshots__/iframe_test.jsx.snap +69 -0
- package/src/widgets/__tests__/__snapshots__/image_test.jsx.snap +388 -0
- package/src/widgets/__tests__/__snapshots__/input-number_test.jsx.snap +978 -0
- package/src/widgets/__tests__/__snapshots__/interaction_test.jsx.snap +311 -0
- package/src/widgets/__tests__/__snapshots__/interactive-graph_test.jsx.snap +2915 -0
- package/src/widgets/__tests__/__snapshots__/matcher_test.jsx.snap +1039 -0
- package/src/widgets/__tests__/__snapshots__/matrix_test.jsx.snap +450 -0
- package/src/widgets/__tests__/__snapshots__/number-line_test.jsx.snap +888 -0
- package/src/widgets/__tests__/__snapshots__/numeric-input_test.jsx.snap +930 -0
- package/src/widgets/__tests__/__snapshots__/orderer_test.jsx.snap +275 -0
- package/src/widgets/__tests__/__snapshots__/passage-ref_test.jsx.snap +446 -0
- package/src/widgets/__tests__/__snapshots__/passage_test.jsx.snap +1988 -0
- package/src/widgets/__tests__/__snapshots__/radio_test.jsx.snap +7107 -0
- package/src/widgets/__tests__/__snapshots__/video_test.jsx.snap +163 -0
- package/src/widgets/__tests__/categorizer_test.jsx +205 -0
- package/src/widgets/__tests__/cs-program_test.jsx +45 -0
- package/src/widgets/__tests__/definition_test.js +152 -0
- package/src/widgets/__tests__/dropdown_test.jsx +106 -0
- package/src/widgets/__tests__/explanation_test.js +199 -0
- package/src/widgets/__tests__/expression_test.jsx +439 -0
- package/src/widgets/__tests__/graded-group-set-jipt_test.jsx +33 -0
- package/src/widgets/__tests__/graded-group-set_test.jsx +270 -0
- package/src/widgets/__tests__/graded-group_test.jsx +233 -0
- package/src/widgets/__tests__/grapher.cypress.jsx +486 -0
- package/src/widgets/__tests__/grapher_test.jsx +35 -0
- package/src/widgets/__tests__/group_test.jsx +512 -0
- package/src/widgets/__tests__/iframe_test.jsx +47 -0
- package/src/widgets/__tests__/image_test.jsx +65 -0
- package/src/widgets/__tests__/input-number_test.jsx +360 -0
- package/src/widgets/__tests__/interaction_test.jsx +33 -0
- package/src/widgets/__tests__/interactive-graph.cypress.jsx +697 -0
- package/src/widgets/__tests__/interactive-graph_test.jsx +105 -0
- package/src/widgets/__tests__/matcher_test.jsx +157 -0
- package/src/widgets/__tests__/matrix_test.jsx +84 -0
- package/src/widgets/__tests__/number-line_test.jsx +81 -0
- package/src/widgets/__tests__/numeric-input_test.jsx +574 -0
- package/src/widgets/__tests__/orderer_test.jsx +75 -0
- package/src/widgets/__tests__/passage-ref_test.jsx +166 -0
- package/src/widgets/__tests__/passage_test.jsx +133 -0
- package/src/widgets/__tests__/radio/base-radio_test.jsx +82 -0
- package/src/widgets/__tests__/radio_test.jsx +651 -0
- package/src/widgets/__tests__/renderQuestion.jsx +66 -0
- package/src/widgets/__tests__/unit_test.jsx +144 -0
- package/src/widgets/__tests__/video_test.jsx +55 -0
- package/src/widgets/categorizer.jsx +338 -0
- package/src/widgets/cs-program.jsx +227 -0
- package/src/widgets/definition.jsx +141 -0
- package/src/widgets/dropdown.jsx +143 -0
- package/src/widgets/explanation.jsx +315 -0
- package/src/widgets/expression.jsx +652 -0
- package/src/widgets/graded-group-answer-bar.jsx +152 -0
- package/src/widgets/graded-group-set.jsx +285 -0
- package/src/widgets/graded-group.jsx +448 -0
- package/src/widgets/grapher/util.jsx +806 -0
- package/src/widgets/grapher.jsx +663 -0
- package/src/widgets/group.jsx +213 -0
- package/src/widgets/iframe.jsx +198 -0
- package/src/widgets/image.jsx +310 -0
- package/src/widgets/input-number.jsx +411 -0
- package/src/widgets/interaction/arrow-picker.jsx +39 -0
- package/src/widgets/interaction/color-picker.jsx +69 -0
- package/src/widgets/interaction/dash-picker.jsx +46 -0
- package/src/widgets/interaction/element-container.jsx +97 -0
- package/src/widgets/interaction.jsx +742 -0
- package/src/widgets/interactive-graph.jsx +2820 -0
- package/src/widgets/label-image/__stories__/answer-choices.stories.jsx +93 -0
- package/src/widgets/label-image/__stories__/marker.stories.jsx +172 -0
- package/src/widgets/label-image/answer-choices.jsx +311 -0
- package/src/widgets/label-image/marker.jsx +365 -0
- package/src/widgets/label-image/types.js +33 -0
- package/src/widgets/label-image.jsx +841 -0
- package/src/widgets/label-image_test.js +840 -0
- package/src/widgets/lights-puzzle.jsx +356 -0
- package/src/widgets/matcher.jsx +271 -0
- package/src/widgets/matrix.jsx +616 -0
- package/src/widgets/measurer.jsx +215 -0
- package/src/widgets/molecule/__tests__/layout_test.jsx +159 -0
- package/src/widgets/molecule/__tests__/parser_test.jsx +142 -0
- package/src/widgets/molecule/molecule-drawing.jsx +175 -0
- package/src/widgets/molecule/molecule-layout.jsx +367 -0
- package/src/widgets/molecule/smiles-parser.jsx +300 -0
- package/src/widgets/molecule.jsx +172 -0
- package/src/widgets/number-line.jsx +858 -0
- package/src/widgets/numeric-input.jsx +622 -0
- package/src/widgets/orderer.jsx +753 -0
- package/src/widgets/passage/__tests__/passage-markdown_test.jsx +382 -0
- package/src/widgets/passage/get-line-height-for-node.js +10 -0
- package/src/widgets/passage/passage-markdown.jsx +416 -0
- package/src/widgets/passage-ref-target.jsx +70 -0
- package/src/widgets/passage-ref.jsx +198 -0
- package/src/widgets/passage.jsx +601 -0
- package/src/widgets/plotter.jsx +1198 -0
- package/src/widgets/radio/__stories__/base-radio.stories.jsx +40 -0
- package/src/widgets/radio/__stories__/choice-icon.stories.jsx +157 -0
- package/src/widgets/radio/__stories__/choice-none-above.stories.jsx +26 -0
- package/src/widgets/radio/__stories__/cross-out-button.stories.jsx +64 -0
- package/src/widgets/radio/__stories__/cross-out-menu.stories.jsx +59 -0
- package/src/widgets/radio/__stories__/cross-out-tooltip.stories.jsx +59 -0
- package/src/widgets/radio/__stories__/focus-ring.stories.jsx +38 -0
- package/src/widgets/radio/__stories__/option-status.stories.jsx +118 -0
- package/src/widgets/radio/__stories__/toggleable-radio-button.stories.jsx +28 -0
- package/src/widgets/radio/base-radio.jsx +642 -0
- package/src/widgets/radio/choice-icon.jsx +468 -0
- package/src/widgets/radio/choice-none-above.jsx +54 -0
- package/src/widgets/radio/choice.jsx +692 -0
- package/src/widgets/radio/choice.jsx.fixture.js +64 -0
- package/src/widgets/radio/cross-out-button.jsx +136 -0
- package/src/widgets/radio/cross-out-menu-wrapper.jsx +492 -0
- package/src/widgets/radio/cross-out-tooltip.jsx +129 -0
- package/src/widgets/radio/focus-ring.jsx +51 -0
- package/src/widgets/radio/option-status.jsx +89 -0
- package/src/widgets/radio/toggleable-radio-button.jsx +133 -0
- package/src/widgets/radio/util.js +32 -0
- package/src/widgets/radio/util_test.js +19 -0
- package/src/widgets/radio/widget.jsx +470 -0
- package/src/widgets/radio.jsx +156 -0
- package/src/widgets/reaction-diagram.jsx +137 -0
- package/src/widgets/sequence.jsx +140 -0
- package/src/widgets/simulator.jsx +808 -0
- package/src/widgets/sorter.jsx +146 -0
- package/src/widgets/table.jsx +394 -0
- package/src/widgets/transformer.jsx +2876 -0
- package/src/widgets/unit.jsx +372 -0
- package/src/widgets/video-transcript-link.jsx +84 -0
- package/src/widgets/video-transcript-link_test.js +211 -0
- package/src/widgets/video.jsx +126 -0
- package/src/widgets.js +431 -0
- package/src/zoom.js +539 -0
- package/README.md +0 -3
- package/src/__tests__/index.test.js +0 -14
|
@@ -0,0 +1,1007 @@
|
|
|
1
|
+
@import (inline) "./khan-exercise.css";
|
|
2
|
+
|
|
3
|
+
//
|
|
4
|
+
// Edit this file in the *perseus* repo!
|
|
5
|
+
// (All changes outside the perseus repo will be overwritten)
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
@import "./variables.less";
|
|
9
|
+
@import "./util.less";
|
|
10
|
+
|
|
11
|
+
// Article Renderer
|
|
12
|
+
@import "./articles.less";
|
|
13
|
+
|
|
14
|
+
#perseus {
|
|
15
|
+
position: relative;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.framework-perseus.perseus-mobile {
|
|
19
|
+
margin-top: 48px;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// .no-select is used to prevent selection of certain widgets.
|
|
23
|
+
// often, allowing selection makes for an awkward mobile experience
|
|
24
|
+
// where you constantly highlight elements unintentionally.
|
|
25
|
+
.no-select {
|
|
26
|
+
-moz-user-select: -moz-none;
|
|
27
|
+
-khtml-user-select: none;
|
|
28
|
+
-webkit-user-select: none;
|
|
29
|
+
-o-user-select: none;
|
|
30
|
+
user-select: none;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// .blank-background is used to prevent drawing under transparent widgets.
|
|
34
|
+
// drawing under transparent widgets is particularly annoying because if
|
|
35
|
+
// you lift up your pen and put it down again, you can't continue drawing,
|
|
36
|
+
// because you're now clicking on the widget. This is very
|
|
37
|
+
// counterintuitive, so we simply don't let you see anything you draw under
|
|
38
|
+
// a widget.
|
|
39
|
+
.blank-background {
|
|
40
|
+
background-color: #FDFDFD; // Keep in sync with KhanUtil._BACKGROUND
|
|
41
|
+
}
|
|
42
|
+
// There is no scratchpad in the answer_area, and it has a different color
|
|
43
|
+
// background, so just make it transparent
|
|
44
|
+
#answer_area .blank-background {
|
|
45
|
+
background-color: transparent;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.above-scratchpad {
|
|
49
|
+
position: relative;
|
|
50
|
+
z-index: @zIndexAboveScratchpad;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// All graphie components placed above the scratchpad should have their
|
|
54
|
+
// background wiped out.
|
|
55
|
+
.graphie.above-scratchpad,
|
|
56
|
+
.graphie-container.above-scratchpad {
|
|
57
|
+
.blank-background;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.perseus-mobile .graphie-container.above-scratchpad {
|
|
61
|
+
background: #ffffff;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Selectable graphie components make for awkward touch experiences
|
|
65
|
+
.graphie {
|
|
66
|
+
.no-select;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.perseus-interactive,
|
|
70
|
+
.perseus-interactive.above-scratchpad {
|
|
71
|
+
position: relative;
|
|
72
|
+
z-index: @zIndexInteractiveComponent;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
&, // and moar specificity...
|
|
76
|
+
#answercontent input[type=text],
|
|
77
|
+
#answercontent input[type=number],
|
|
78
|
+
.framework-perseus input[type=text],
|
|
79
|
+
.framework-perseus input[type=number] {
|
|
80
|
+
&.perseus-input-size-normal
|
|
81
|
+
{
|
|
82
|
+
border: 1px solid #ccc;
|
|
83
|
+
width: 80px;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
&.perseus-input-size-small {
|
|
87
|
+
border: 1px solid #ccc;
|
|
88
|
+
width: 40px;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
&.perseus-input-right-align {
|
|
92
|
+
text-align: right;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.framework-perseus.perseus-mobile {
|
|
97
|
+
.perseus-input-right-align .keypad-input {
|
|
98
|
+
text-align: right;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.framework-perseus {
|
|
103
|
+
#problemarea {
|
|
104
|
+
input, button {
|
|
105
|
+
.perseus-interactive;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
div.paragraph {
|
|
110
|
+
.legacy-typography;
|
|
111
|
+
margin: 22px 0px;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// HACK(yejia): Override the font size and line height for blurbs
|
|
115
|
+
//
|
|
116
|
+
// NOTE(yejia): Minion Pro is only loaded on GTP pages, because those
|
|
117
|
+
// are the main call sites for blurbs and the passage widget. We
|
|
118
|
+
// considered inserting the relevant stylesheet whenever the passage
|
|
119
|
+
// widget loads, but this approach produced a "flash of unstyled
|
|
120
|
+
// text", so we decided to embed the stylesheet into the relevant
|
|
121
|
+
// page templates instead.
|
|
122
|
+
//
|
|
123
|
+
// NOTE(yejia): Minion Pro will not be available on ZNDs, due to
|
|
124
|
+
// restrictions in our Adobe TypeKit configuration.
|
|
125
|
+
//
|
|
126
|
+
// TODO(TP-3315): Remove once Perseus uses Wonder Blocks BodySerif
|
|
127
|
+
.test-prep-blurb div.paragraph {
|
|
128
|
+
font-size: 16px;
|
|
129
|
+
line-height: 20px;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
div.instructions {
|
|
133
|
+
display: block;
|
|
134
|
+
font-style: italic;
|
|
135
|
+
font-weight: bold;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.perseus-renderer > .paragraph > ul:not(.perseus-widget-radio),
|
|
139
|
+
.perseus-renderer > .paragraph > ol {
|
|
140
|
+
margin: -11px 0px 22px 0px; // first-level lists need padding
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.paragraph ul:not(.perseus-widget-radio) {
|
|
144
|
+
.legacy-typography;
|
|
145
|
+
padding-left: 35px;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
.paragraph ul:not(.perseus-widget-radio) li {
|
|
149
|
+
list-style-type: disc;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.paragraph ol {
|
|
153
|
+
list-style: decimal;
|
|
154
|
+
padding-left: 2em;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
blockquote {
|
|
158
|
+
padding: 0 2.5em;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.zoomable {
|
|
162
|
+
-webkit-tap-highlight-color: rgba(0,0,0,0);
|
|
163
|
+
-webkit-touch-callout: none;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// We do not apply this styling to MathQuill elements because the
|
|
167
|
+
// styles interfere with calculation of the size of the container
|
|
168
|
+
// surrounding the math.
|
|
169
|
+
sup:not(.mq-non-leaf) {
|
|
170
|
+
font-size: smaller;
|
|
171
|
+
vertical-align: super;
|
|
172
|
+
|
|
173
|
+
// by default, vertical-align: super changes the line height of
|
|
174
|
+
// the line this text is in, which repositions surrounding text
|
|
175
|
+
// and is sad. This is especially important for the passage
|
|
176
|
+
// widget, as changes to line-height there make the line numbers
|
|
177
|
+
// incorrect. This hack fixes that, and seems to not cause problems
|
|
178
|
+
// even if there is no other text on the line (it still gets the
|
|
179
|
+
// standard line-height of what non `vertical-align: super` text
|
|
180
|
+
// would be.
|
|
181
|
+
line-height: 0;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// place on a div above the inputs
|
|
185
|
+
.range-input {
|
|
186
|
+
border: 1px solid #ccc;
|
|
187
|
+
border-radius: 5px;
|
|
188
|
+
display: inline-block;
|
|
189
|
+
padding: 0px 5px;
|
|
190
|
+
|
|
191
|
+
& > input {
|
|
192
|
+
border: 0;
|
|
193
|
+
display: inline;
|
|
194
|
+
text-align: center;
|
|
195
|
+
width: 30px;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
& > span {
|
|
199
|
+
color: #999;
|
|
200
|
+
font-size: 14px;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
.number-input {
|
|
205
|
+
border: 1px solid #ccc;
|
|
206
|
+
border-radius: 5px;
|
|
207
|
+
margin: 0; // override
|
|
208
|
+
padding: 5px 0; // override
|
|
209
|
+
text-align: center;
|
|
210
|
+
width: 40px;
|
|
211
|
+
|
|
212
|
+
&.invalid-input {
|
|
213
|
+
background-color: @red;
|
|
214
|
+
outline-color: red;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
&.mini {
|
|
218
|
+
width: 40px;
|
|
219
|
+
}
|
|
220
|
+
&.small {
|
|
221
|
+
width: 60px;
|
|
222
|
+
}
|
|
223
|
+
&.normal {
|
|
224
|
+
width: 80px;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
.math-output {
|
|
229
|
+
display: inline-block;
|
|
230
|
+
min-width: 80px;
|
|
231
|
+
min-height: 36px;
|
|
232
|
+
border-radius: 5px;
|
|
233
|
+
padding: 0;
|
|
234
|
+
margin-top: 4px;
|
|
235
|
+
margin-bottom: 4px;
|
|
236
|
+
background: white;
|
|
237
|
+
border: 1px solid #a4a4a4;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
.graph-settings {
|
|
241
|
+
.graph-settings-axis-label {
|
|
242
|
+
border: 1px solid #ccc;
|
|
243
|
+
border-radius: 5px;
|
|
244
|
+
display: inline-block;
|
|
245
|
+
padding: 5px 5px;
|
|
246
|
+
width: 70px;
|
|
247
|
+
float: right;
|
|
248
|
+
margin: 0 5px;
|
|
249
|
+
}
|
|
250
|
+
.graph-settings-background-url {
|
|
251
|
+
width: 250px;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
.graphie-container {
|
|
256
|
+
// TODO(alex): Is this still used?
|
|
257
|
+
position: relative;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
.graph-settings, .image-settings, .misc-settings {
|
|
261
|
+
padding-bottom: 5px;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
.misc-settings, .type-settings {
|
|
265
|
+
border-top: 1px solid black;
|
|
266
|
+
padding-top: 5px;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
.svg-image {
|
|
270
|
+
display: inline-block;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
.unresponsive-svg-image, .perseus-rendered-radio .unresponsive-svg-image {
|
|
274
|
+
display: inline-block;
|
|
275
|
+
position: relative;
|
|
276
|
+
|
|
277
|
+
> .graphie-container {
|
|
278
|
+
position: absolute;
|
|
279
|
+
top: 0;
|
|
280
|
+
left: 0;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
.fixed-to-responsive {
|
|
285
|
+
position: relative;
|
|
286
|
+
width: 100%;
|
|
287
|
+
|
|
288
|
+
// The first child is different than the rest - it's a div
|
|
289
|
+
// with vertical padding that reserves space for the rest
|
|
290
|
+
// of the children (which are absolutely positioned and
|
|
291
|
+
// thus can't claim space for themselves).
|
|
292
|
+
> :not(:first-child) {
|
|
293
|
+
position: absolute;
|
|
294
|
+
top: 0;
|
|
295
|
+
left: 0;
|
|
296
|
+
width: 100%;
|
|
297
|
+
height: 100%;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/* Legacy table styles. Remove when XOM is rolled out (see below for
|
|
303
|
+
updated XOM styles). */
|
|
304
|
+
.framework-perseus:not(.perseus-mobile) {
|
|
305
|
+
table {
|
|
306
|
+
.legacy-typography;
|
|
307
|
+
|
|
308
|
+
th, td {
|
|
309
|
+
padding: 5px 10px;
|
|
310
|
+
text-align: left;
|
|
311
|
+
|
|
312
|
+
&[align=center] {
|
|
313
|
+
text-align: center;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
&[align=right] {
|
|
317
|
+
text-align: right;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
th {
|
|
322
|
+
border-bottom: 2px solid #ccc;
|
|
323
|
+
font-weight: bold;
|
|
324
|
+
padding-bottom: 2px;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
tr:nth-child(odd) {
|
|
328
|
+
// Doesn't work in IE8 :(
|
|
329
|
+
td {
|
|
330
|
+
background-color: #ededed;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
.perseus-titled-table {
|
|
336
|
+
display: inline-block;
|
|
337
|
+
|
|
338
|
+
// Center the table in a titled table
|
|
339
|
+
table {
|
|
340
|
+
margin-left: auto;
|
|
341
|
+
margin-right: auto;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
// Center the title in a titled table
|
|
346
|
+
.perseus-table-title {
|
|
347
|
+
text-align: center;
|
|
348
|
+
font-size: larger;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
table.non-markdown {
|
|
352
|
+
tr:nth-child(odd) {
|
|
353
|
+
td {
|
|
354
|
+
background-color: transparent;
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
th, td {
|
|
359
|
+
border-width: 0;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
/* New XOM styles for tables. */
|
|
365
|
+
.framework-perseus.perseus-mobile {
|
|
366
|
+
/* There are three kinds of tables:
|
|
367
|
+
1) normal "tables" - emitted by markdown (src/perseus-markdown.jsx)
|
|
368
|
+
2) "titled tables" - emitted by markdown as well (these are just
|
|
369
|
+
tables with a title, and encased in one more element)
|
|
370
|
+
3) "table widget" - where a user is expected to enter answers in a
|
|
371
|
+
table form (src/widgets/table.jsx).
|
|
372
|
+
Moreover, there the Categorizer widget uses <table> tags, so these
|
|
373
|
+
stylings will apply there as well. */
|
|
374
|
+
// TODO(benkomalo): be more explicit by adding className values to all
|
|
375
|
+
// widgets and stop relying on tag names when using CSS. or use aphrodite
|
|
376
|
+
// evurrwhere
|
|
377
|
+
table {
|
|
378
|
+
border-collapse: collapse;
|
|
379
|
+
margin: 0 auto;
|
|
380
|
+
|
|
381
|
+
tbody > tr {
|
|
382
|
+
border: 1px solid #e5e5e5;
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
th,
|
|
386
|
+
td {
|
|
387
|
+
padding: 16px;
|
|
388
|
+
text-align: left;
|
|
389
|
+
|
|
390
|
+
&[align=center] {
|
|
391
|
+
text-align: center;
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
&[align=right] {
|
|
395
|
+
text-align: right;
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
td {
|
|
400
|
+
background: #fff;
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
th {
|
|
404
|
+
font-weight: bold;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
@media (max-width: @pure-sm-max) {
|
|
409
|
+
table {
|
|
410
|
+
// Make tables "full-bleed" on phones.
|
|
411
|
+
width: 100%;
|
|
412
|
+
min-width: 480px;
|
|
413
|
+
|
|
414
|
+
tbody > tr {
|
|
415
|
+
border-left: 0;
|
|
416
|
+
border-right: 0;
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
.perseus-titled-table {
|
|
422
|
+
display: inline-block;
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
// Center the title in a titled table
|
|
426
|
+
.perseus-table-title {
|
|
427
|
+
text-align: center;
|
|
428
|
+
font-size: larger;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
table.non-markdown {
|
|
432
|
+
// No customizations for table widgets for now.
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
/* Widget CSS */
|
|
437
|
+
|
|
438
|
+
.perseus-graph-padding {
|
|
439
|
+
padding: 25px 25px 0 0;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
@import "./widgets/categorizer.less";
|
|
443
|
+
@import "./widgets/definition.less";
|
|
444
|
+
@import "./widgets/dropdown.less";
|
|
445
|
+
@import "./widgets/expression.less";
|
|
446
|
+
@import "./widgets/grapher.less";
|
|
447
|
+
@import "./widgets/graded-group.less";
|
|
448
|
+
@import "./widgets/group.less";
|
|
449
|
+
@import "./widgets/image.less";
|
|
450
|
+
@import "./widgets/interactive-graph.less";
|
|
451
|
+
@import "./widgets/label-image.less";
|
|
452
|
+
@import "./widgets/matcher.less";
|
|
453
|
+
@import "./widgets/matrix.less";
|
|
454
|
+
@import "./widgets/measurer.less";
|
|
455
|
+
@import "./widgets/orderer.less";
|
|
456
|
+
@import "./widgets/passage.less";
|
|
457
|
+
@import "./widgets/plotter.less";
|
|
458
|
+
@import "./widgets/radio.less";
|
|
459
|
+
@import "./widgets/reaction-diagram.less";
|
|
460
|
+
@import "./widgets/sequence.less";
|
|
461
|
+
@import "./widgets/sortable.less";
|
|
462
|
+
@import "./widgets/table.less";
|
|
463
|
+
@import "./widgets/transformer.less";
|
|
464
|
+
@import "./widgets/unit.less";
|
|
465
|
+
|
|
466
|
+
.perseus-widget-container {
|
|
467
|
+
&.widget-nohighlight {
|
|
468
|
+
transition: all 0.15s;
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
&.widget-highlight {
|
|
472
|
+
@highlight: 0px 0px 0px 2px rgba(255, 165, 0, 1);
|
|
473
|
+
-webkit-box-shadow: @highlight;
|
|
474
|
+
-moz-box-shadow: @highlight;
|
|
475
|
+
box-shadow: @highlight;
|
|
476
|
+
transition: all 0.15s;
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
&.widget-inline {
|
|
480
|
+
display: inline;
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
&.widget-inline-block {
|
|
484
|
+
display: inline-block;
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
|
|
489
|
+
// Hide new hints styling everywhere except Bibliotron. Note that the Bibliotron
|
|
490
|
+
// styles are used both in webapp and in the mobile native apps.
|
|
491
|
+
.bibliotron-exercise .perseus-hint-renderer {
|
|
492
|
+
border-left: 4px solid #f6f7f7;
|
|
493
|
+
padding-left: 16px;
|
|
494
|
+
position: relative;
|
|
495
|
+
&:focus {
|
|
496
|
+
border-left-color: #d6d8da;
|
|
497
|
+
outline: none;
|
|
498
|
+
}
|
|
499
|
+
&:before,
|
|
500
|
+
&:after {
|
|
501
|
+
content: "";
|
|
502
|
+
display: table;
|
|
503
|
+
clear: both;
|
|
504
|
+
}
|
|
505
|
+
// NOTE(charlie): In XOM, these margins get overridden with the paragraph
|
|
506
|
+
// defaults. Instead, we apply similar margins through inline styles in
|
|
507
|
+
// `hints-renderer.jsx`.
|
|
508
|
+
div.paragraph {
|
|
509
|
+
margin-top: 0px;
|
|
510
|
+
margin-bottom: 16px;
|
|
511
|
+
}
|
|
512
|
+
&.last-hint {
|
|
513
|
+
margin-bottom: 32px;
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
@media (max-width: @pure-sm-max) {
|
|
518
|
+
.bibliotron-exercise .perseus-hint-renderer {
|
|
519
|
+
&.last-hint {
|
|
520
|
+
margin-bottom: 0;
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
@default3: #00457c;
|
|
526
|
+
@science3: #9e034e;
|
|
527
|
+
@math3: #007d96;
|
|
528
|
+
@economics3: #a75a05;
|
|
529
|
+
@partner3: #208170;
|
|
530
|
+
@humanities3: #be2612;
|
|
531
|
+
@testPrep3: #543b78;
|
|
532
|
+
@cs3: #0d923f;
|
|
533
|
+
.perseus-hint-label {
|
|
534
|
+
color: @default3;
|
|
535
|
+
display: none;
|
|
536
|
+
font-weight: 600;
|
|
537
|
+
margin-right: 13px;
|
|
538
|
+
position: absolute;
|
|
539
|
+
right: 100%;
|
|
540
|
+
white-space: nowrap;
|
|
541
|
+
}
|
|
542
|
+
.perseus-domain-science .perseus-hint-label {
|
|
543
|
+
color: @science3;
|
|
544
|
+
}
|
|
545
|
+
.perseus-domain-math .perseus-hint-label {
|
|
546
|
+
color: @math3;
|
|
547
|
+
}
|
|
548
|
+
.perseus-domain-economics .perseus-hint-label {
|
|
549
|
+
color: @economics3;
|
|
550
|
+
}
|
|
551
|
+
.perseus-domain-partner .perseus-hint-label {
|
|
552
|
+
color: @partner3;
|
|
553
|
+
}
|
|
554
|
+
.perseus-domain-humanities .perseus-hint-label {
|
|
555
|
+
color: @humanities3;
|
|
556
|
+
}
|
|
557
|
+
.perseus-domain-test-prep .perseus-hint-label {
|
|
558
|
+
color: @testPrep3;
|
|
559
|
+
}
|
|
560
|
+
.perseus-domain-cs .perseus-hint-label {
|
|
561
|
+
color: @cs3;
|
|
562
|
+
}
|
|
563
|
+
.bibliotron-exercise .perseus-hint-renderer.last-rendered .perseus-hint-label {
|
|
564
|
+
display: block;
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
@media (max-width: @pure-sm-max) {
|
|
568
|
+
.bibliotron-exercise .perseus-hint-renderer.last-rendered .perseus-hint-label {
|
|
569
|
+
display: none;
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
// TODO(joel) - remove?
|
|
574
|
+
.perseus-tooltip {
|
|
575
|
+
background: #fff;
|
|
576
|
+
padding: 5px 10px;
|
|
577
|
+
width: 240px;
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
// CSS is evil; let's overwrite some styles. T_T
|
|
581
|
+
.perseus-formats-tooltip {
|
|
582
|
+
.perseus-tooltip;
|
|
583
|
+
color: #777;
|
|
584
|
+
}
|
|
585
|
+
.framework-perseus .perseus-formats-tooltip .paragraph > ul {
|
|
586
|
+
padding: 0;
|
|
587
|
+
margin: -20px 0 -16px 0;
|
|
588
|
+
> li {
|
|
589
|
+
list-style-type: none;
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
.box-shadow(@shadow: 0 1px 3px rgba(0,0,0,.25)) {
|
|
594
|
+
box-shadow: @shadow;
|
|
595
|
+
-o-box-shadow: @shadow;
|
|
596
|
+
-ms-box-shadow: @shadow;
|
|
597
|
+
-moz-box-shadow: @shadow;
|
|
598
|
+
-webkit-box-shadow: @shadow;
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
.perseus-math-input.mq-editable-field.mq-math-mode {
|
|
602
|
+
// Mimic native text input
|
|
603
|
+
background: #fff;
|
|
604
|
+
|
|
605
|
+
// If the font-size is too small, super/subscripts become hard to input
|
|
606
|
+
font-size: 18px;
|
|
607
|
+
|
|
608
|
+
// Make the click target easier to hit
|
|
609
|
+
min-width: 100px;
|
|
610
|
+
|
|
611
|
+
// Mimic native text input w/o using -moz/-webkit-apperance: textfield
|
|
612
|
+
// border-color: rgb(78, 187, 212);
|
|
613
|
+
border-color: #a4a4a4;
|
|
614
|
+
|
|
615
|
+
border-radius: 5px;
|
|
616
|
+
|
|
617
|
+
& > .mq-root-block {
|
|
618
|
+
// A bit of extra whitespace here greatly improves legibility
|
|
619
|
+
padding: 4px;
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
// Fixes for strange default MathQuill styles:
|
|
623
|
+
|
|
624
|
+
// Cursor shouldn't actually be touching left border
|
|
625
|
+
.mq-cursor {
|
|
626
|
+
padding-left: 0;
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
// Don't gray out implicitly created closing parens
|
|
630
|
+
.mq-paren.mq-ghost {
|
|
631
|
+
color: inherit;
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
// Don't put vertical margins on an expression wrapped in parens
|
|
635
|
+
// because it messes up baseline alignment, e.g. h(x)
|
|
636
|
+
.mq-paren + span {
|
|
637
|
+
margin: 0;
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
.mq-binary-operator {
|
|
641
|
+
// MathQuill uses Symbola to render binary operators. Unfortunately,
|
|
642
|
+
// Firefox 47 on Windows doesn't render the +/- signs correctly when
|
|
643
|
+
// using Symbola so we override it and use KaTeX_Main instead.
|
|
644
|
+
font-family: KaTeX_Main !important;
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
sup {
|
|
648
|
+
// This is set to 0 across Perseus normally, but we need to override it
|
|
649
|
+
// here so nth-roots are rendered correctly.
|
|
650
|
+
line-height: normal;
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
// override normal 5px border radius for the editor only
|
|
655
|
+
.perseus-widget-editor .perseus-math-input.mq-editable-field.mq-math-mode > .mq-root-block {
|
|
656
|
+
border-radius: 0;
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
// This style looks a little off in the expression editor. Luckily users don't
|
|
660
|
+
// use the expression editor.
|
|
661
|
+
.math-input-buttons {
|
|
662
|
+
background-color: rgba(255, 255, 255, 0.7);
|
|
663
|
+
border-radius: 5px;
|
|
664
|
+
border: 1px solid #ddd;
|
|
665
|
+
box-sizing: border-box;
|
|
666
|
+
margin-top: 5px;
|
|
667
|
+
padding: 2px;
|
|
668
|
+
// each button is 35 + 4 px, plus 4 padding, plus 2 border
|
|
669
|
+
width: 39px*5 + 4px + 2px; // (201)
|
|
670
|
+
|
|
671
|
+
&.absolute {
|
|
672
|
+
left: -2px;
|
|
673
|
+
position: absolute;
|
|
674
|
+
top: -3px;
|
|
675
|
+
z-index: @zIndexCalculator;
|
|
676
|
+
}
|
|
677
|
+
};
|
|
678
|
+
|
|
679
|
+
// Math domain color
|
|
680
|
+
@borderColor: #1c758a;
|
|
681
|
+
|
|
682
|
+
.tex-button {
|
|
683
|
+
display: block;
|
|
684
|
+
float: left;
|
|
685
|
+
width: 35px;
|
|
686
|
+
height: 35px;
|
|
687
|
+
margin: 2px;
|
|
688
|
+
border: 1px solid @borderColor;
|
|
689
|
+
background-color: white;
|
|
690
|
+
border-radius: 5px;
|
|
691
|
+
|
|
692
|
+
&:hover {
|
|
693
|
+
cursor: pointer;
|
|
694
|
+
background-color: #f0f0f0;
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
&:focus {
|
|
698
|
+
border: 2px solid @borderColor;
|
|
699
|
+
outline: none;
|
|
700
|
+
}
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
.tex-button-row {
|
|
704
|
+
margin: 5px 0;
|
|
705
|
+
|
|
706
|
+
&:first-child {
|
|
707
|
+
margin-top: 0;
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
&:last-child {
|
|
711
|
+
margin-bottom: 0;
|
|
712
|
+
}
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
.renderer-widget-error {
|
|
716
|
+
background-color: #fcc;
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
@satTopSpacingForTwoColumnLayout: 48px;
|
|
720
|
+
@satTwoColumnLayoutSideMargin: 32px;
|
|
721
|
+
|
|
722
|
+
// #sat-mission (below) matches when we're inside the SAT MVP product,
|
|
723
|
+
// basically internal-only and in flux.
|
|
724
|
+
#sat-mission {
|
|
725
|
+
@satContentWidth: 592px;
|
|
726
|
+
|
|
727
|
+
.content-area > div {
|
|
728
|
+
margin-left: auto;
|
|
729
|
+
margin-right: auto;
|
|
730
|
+
width: @satContentWidth;
|
|
731
|
+
.perseus-input-with-label {
|
|
732
|
+
display: flex;
|
|
733
|
+
align-items: center;
|
|
734
|
+
.perseus-input-label {
|
|
735
|
+
font-weight: 600;
|
|
736
|
+
padding-right: 10px;
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
.perseus-input-with-answer-blurb {
|
|
740
|
+
// numeric-inputs widgets use labels whereas input-number widgets
|
|
741
|
+
// use spans.
|
|
742
|
+
> span, > label {
|
|
743
|
+
display: inline-block;
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
.perseus-possible-answers {
|
|
747
|
+
color: rgb(0, 153, 0);
|
|
748
|
+
display: inline-block;
|
|
749
|
+
padding-right: 4px;
|
|
750
|
+
|
|
751
|
+
dt, dd {
|
|
752
|
+
// If you just use inline, then screen readers (or at least
|
|
753
|
+
// ChromeVox) won't read the answers as distinct items;
|
|
754
|
+
// if 2 and 4 were both correct, then it would read them
|
|
755
|
+
// concatenated as "twenty-four".
|
|
756
|
+
display: inline-block;
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
dt {
|
|
760
|
+
padding: 0 5px 0 13px;
|
|
761
|
+
color: rgb(18, 18, 18);
|
|
762
|
+
text-transform: uppercase;
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
dt::after {
|
|
766
|
+
content: ":";
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
dd:not(:last-child)::after {
|
|
770
|
+
// TODO(johnsullivan): Figure out a better way to do this list
|
|
771
|
+
// joining.
|
|
772
|
+
// TODO(mattdr): Joining in CSS makes semantic sense here
|
|
773
|
+
// (they're definition list entries that we happen to be
|
|
774
|
+
// rendering as a line of text joined by "or"), but CSS is
|
|
775
|
+
// more difficult to internationalize. SAT is English-only
|
|
776
|
+
// for now, though.
|
|
777
|
+
content: "or";
|
|
778
|
+
padding: 0 5px;
|
|
779
|
+
color: rgb(18, 18, 18);
|
|
780
|
+
}
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
input.perseus-incorrect {
|
|
785
|
+
color: @satIncorrectColor;
|
|
786
|
+
background-color: @satIncorrectBackgroundColor;
|
|
787
|
+
border: solid 1px @satIncorrectBorderColor;
|
|
788
|
+
}
|
|
789
|
+
|
|
790
|
+
input.perseus-correct {
|
|
791
|
+
color: @satCorrectColor;
|
|
792
|
+
background-color: @satCorrectBackgroundColor;
|
|
793
|
+
border: solid 1px @satCorrectBorderColor;
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
input.perseus-unanswered {
|
|
797
|
+
background-color: #eee;
|
|
798
|
+
border: solid 1px #999;
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
&.perseus-renderer-two-columns {
|
|
802
|
+
width: 1024px;
|
|
803
|
+
|
|
804
|
+
// This prevents a strange blank space from appearing above
|
|
805
|
+
// passages.
|
|
806
|
+
// TODO(johnsullivan): Try and get rid of the wrapping div that's
|
|
807
|
+
// causing this instead of modifying its margin like this.
|
|
808
|
+
& > .paragraph {
|
|
809
|
+
margin: 0;
|
|
810
|
+
}
|
|
811
|
+
|
|
812
|
+
.perseus-two-columns {
|
|
813
|
+
display: flex;
|
|
814
|
+
justify-content: center;
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
.perseus-column {
|
|
818
|
+
// NOTE(emily): For some reason, these prefixes aren't being
|
|
819
|
+
// added by our auto-prefixer, and we need these prefixes to
|
|
820
|
+
// work in Safari <= 8.
|
|
821
|
+
display: -webkit-flex;
|
|
822
|
+
-webkit-flex-direction: column;
|
|
823
|
+
|
|
824
|
+
display: flex;
|
|
825
|
+
flex-direction: column;
|
|
826
|
+
// Should this be @articleMaxWidthTablet? or is this
|
|
827
|
+
// conceptually a different value?
|
|
828
|
+
width: 512px;
|
|
829
|
+
|
|
830
|
+
&:nth-child(1) {
|
|
831
|
+
background: #eee;
|
|
832
|
+
border-right: 1px solid #ddd;
|
|
833
|
+
box-sizing: border-box;
|
|
834
|
+
|
|
835
|
+
.perseus-column-content {
|
|
836
|
+
padding-top: @satTopSpacingForTwoColumnLayout;
|
|
837
|
+
padding-bottom: 22px;
|
|
838
|
+
padding-left: 46px;
|
|
839
|
+
padding-right: @satTwoColumnLayoutSideMargin;
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
.perseus-widget-passage-container {
|
|
843
|
+
position: relative;
|
|
844
|
+
.perseus-widget-passage-instructions div.paragraph {
|
|
845
|
+
margin-top: 0;
|
|
846
|
+
}
|
|
847
|
+
}
|
|
848
|
+
.perseus-widget-passage {
|
|
849
|
+
// We've replaced the margin here with padding in the
|
|
850
|
+
// parent element to stay consistent with non-passage
|
|
851
|
+
// two-column mode.
|
|
852
|
+
margin: 0;
|
|
853
|
+
}
|
|
854
|
+
|
|
855
|
+
& > .paragraph {
|
|
856
|
+
margin-right: 40px;
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
blockquote {
|
|
860
|
+
padding: 0;
|
|
861
|
+
margin-right: 22px;
|
|
862
|
+
|
|
863
|
+
& > .paragraph:nth-child(1) {
|
|
864
|
+
margin-top: 0;
|
|
865
|
+
}
|
|
866
|
+
}
|
|
867
|
+
}
|
|
868
|
+
|
|
869
|
+
&:nth-child(2) {
|
|
870
|
+
.perseus-column-content {
|
|
871
|
+
padding-left: @satTwoColumnLayoutSideMargin;
|
|
872
|
+
padding-right: @satTwoColumnLayoutSideMargin;
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
.perseus-group {
|
|
876
|
+
margin-bottom: 20px;
|
|
877
|
+
}
|
|
878
|
+
}
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
.perseus-column-content {
|
|
882
|
+
flex: 1 1 auto;
|
|
883
|
+
overflow-y: auto;
|
|
884
|
+
|
|
885
|
+
& > .paragraph {
|
|
886
|
+
margin-top: 0;
|
|
887
|
+
}
|
|
888
|
+
}
|
|
889
|
+
|
|
890
|
+
}
|
|
891
|
+
}
|
|
892
|
+
|
|
893
|
+
input[type=text],
|
|
894
|
+
input[type=number] {
|
|
895
|
+
border: 1px solid #aaa;
|
|
896
|
+
font-family: @boldFontFamily;
|
|
897
|
+
font-size: 14px;
|
|
898
|
+
margin: 10px 0;
|
|
899
|
+
padding: 5px;
|
|
900
|
+
|
|
901
|
+
&:focus {
|
|
902
|
+
border-color: @satBlue;
|
|
903
|
+
box-shadow: 0 0 10px fade(@satBlue, 80%);
|
|
904
|
+
outline: none;
|
|
905
|
+
}
|
|
906
|
+
}
|
|
907
|
+
|
|
908
|
+
.valid-answer-mixin() {
|
|
909
|
+
input[type=text]:valid, input[type=number]:valid {
|
|
910
|
+
border: 1px solid @satBlue;
|
|
911
|
+
background: @satSelectedBackgroundColor;
|
|
912
|
+
color: initial;
|
|
913
|
+
|
|
914
|
+
&:focus {
|
|
915
|
+
box-shadow: 0 0 10px fade(@satBlue, 80%);
|
|
916
|
+
}
|
|
917
|
+
}
|
|
918
|
+
}
|
|
919
|
+
|
|
920
|
+
.invalid-answer-mixin() {
|
|
921
|
+
input[type=text]:valid, input[type=number]:valid {
|
|
922
|
+
color: @satIncorrectColor;
|
|
923
|
+
background-color: @satIncorrectBackgroundColor;
|
|
924
|
+
border: solid 1px @satIncorrectBorderColor;
|
|
925
|
+
|
|
926
|
+
&:focus {
|
|
927
|
+
box-shadow: 0 0 10px fade(@satIncorrectBorderColor, 80%);
|
|
928
|
+
}
|
|
929
|
+
}
|
|
930
|
+
}
|
|
931
|
+
|
|
932
|
+
// If a textbox appears inside a Perseus group widget, then the group
|
|
933
|
+
// widget's validity should override the item's validity when styling that
|
|
934
|
+
// item.
|
|
935
|
+
//
|
|
936
|
+
// That is, if a group widget is valid, but the item as a whole is
|
|
937
|
+
// invalid, inputs inside the valid group widget should still render as
|
|
938
|
+
// valid.
|
|
939
|
+
//
|
|
940
|
+
// This is implemented as a mixin and mixed into .valid-answer and
|
|
941
|
+
// .invalid-answer, in order to ensure that there's no ambiguity as to
|
|
942
|
+
// which selector takes precedence. Additionally, this ensures that these
|
|
943
|
+
// styles will only be applied when validity is relevant to the user (i.e.
|
|
944
|
+
// not in review mode).
|
|
945
|
+
.perseus-group-validity-override() {
|
|
946
|
+
.perseus-group-valid-answer {
|
|
947
|
+
.valid-answer-mixin();
|
|
948
|
+
}
|
|
949
|
+
.perseus-group-invalid-answer {
|
|
950
|
+
.invalid-answer-mixin();
|
|
951
|
+
}
|
|
952
|
+
}
|
|
953
|
+
|
|
954
|
+
.valid-answer {
|
|
955
|
+
.valid-answer-mixin();
|
|
956
|
+
.perseus-group-validity-override();
|
|
957
|
+
}
|
|
958
|
+
.invalid-answer {
|
|
959
|
+
.invalid-answer-mixin();
|
|
960
|
+
.perseus-group-validity-override();
|
|
961
|
+
}
|
|
962
|
+
|
|
963
|
+
#sat-route-task, #sat-route-section {
|
|
964
|
+
.content-area > .perseus-renderer-two-columns {
|
|
965
|
+
// Override column top margin to 0 (the first column will get
|
|
966
|
+
// the desired spacing by adding padding - to preserve the
|
|
967
|
+
// gray background)
|
|
968
|
+
margin-top: 0;
|
|
969
|
+
|
|
970
|
+
// Add spacing to the second column, by way of its first child.
|
|
971
|
+
// We want the margins to auto collapse, and so we can't add
|
|
972
|
+
// it to perseus-column because it's floated.
|
|
973
|
+
.perseus-column:nth-child(2) > .perseus-column-content > :first-child {
|
|
974
|
+
margin-top: @satTopSpacingForTwoColumnLayout;
|
|
975
|
+
}
|
|
976
|
+
}
|
|
977
|
+
}
|
|
978
|
+
}
|
|
979
|
+
|
|
980
|
+
.perseus-error {
|
|
981
|
+
background: @red;
|
|
982
|
+
border: 2px solid red;
|
|
983
|
+
border-radius: 5px;
|
|
984
|
+
padding: 20px;
|
|
985
|
+
margin: 15px 0 10px;
|
|
986
|
+
}
|
|
987
|
+
|
|
988
|
+
@media (max-width: @pure-sm-max) {
|
|
989
|
+
.perseus-renderer-responsive {
|
|
990
|
+
margin: 0 @phoneMargin;
|
|
991
|
+
|
|
992
|
+
// Horizontal margins should only be applied to top-level Renderers.
|
|
993
|
+
.perseus-renderer-responsive {
|
|
994
|
+
margin: 0;
|
|
995
|
+
}
|
|
996
|
+
}
|
|
997
|
+
}
|
|
998
|
+
|
|
999
|
+
.perseus-mobile {
|
|
1000
|
+
@media (max-width: 767px) {
|
|
1001
|
+
.perseus-block-math {
|
|
1002
|
+
font-size: 18px;
|
|
1003
|
+
}
|
|
1004
|
+
}
|
|
1005
|
+
}
|
|
1006
|
+
|
|
1007
|
+
@import (inline) "../../../math-input/dist/index.css";
|