@khanacademy/perseus 0.0.1 → 0.1.0

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.
Files changed (503) hide show
  1. package/.babelrc.js +1 -1
  2. package/CHANGELOG.md +7 -0
  3. package/dist/es/index.js +15 -1
  4. package/dist/es/index.js.map +1 -1
  5. package/dist/index.css +11934 -0
  6. package/dist/index.js +15 -1
  7. package/dist/index.js.map +1 -1
  8. package/dist/strings.js +148 -1
  9. package/package.json +40 -4
  10. package/src/README.md +7 -0
  11. package/src/__stories__/item-renderer.stories.jsx +27 -0
  12. package/src/__stories__/server-item-renderer.stories.jsx +27 -0
  13. package/src/__testdata__/item-renderer_testdata.js +161 -0
  14. package/src/__testdata__/renderer_testdata.js +123 -0
  15. package/src/__tests__/__snapshots__/item-renderer_test.jsx.snap +233 -0
  16. package/src/__tests__/__snapshots__/perseus-markdown_test.jsx.snap +516 -0
  17. package/src/__tests__/__snapshots__/pure-markdown_test.js.snap +113 -0
  18. package/src/__tests__/__snapshots__/renderer_test.jsx.snap +576 -0
  19. package/src/__tests__/__snapshots__/server-item-renderer_test.jsx.snap +306 -0
  20. package/src/__tests__/a11y_test.jsx +304 -0
  21. package/src/__tests__/item-renderer_test.jsx +892 -0
  22. package/src/__tests__/mock-asset-loading-widget.jsx +57 -0
  23. package/src/__tests__/mock-widget.jsx +35 -0
  24. package/src/__tests__/perseus-markdown_test.jsx +747 -0
  25. package/src/__tests__/pure-markdown_test.js +552 -0
  26. package/src/__tests__/renderability_test.jsx +481 -0
  27. package/src/__tests__/renderer-api_test.jsx +333 -0
  28. package/src/__tests__/renderer_test.jsx +1792 -0
  29. package/src/__tests__/server-item-renderer_test.jsx +516 -0
  30. package/src/__tests__/test-items/image-item.js +25 -0
  31. package/src/__tests__/test-items/input-number-1-item.js +27 -0
  32. package/src/__tests__/test-items/input-number-2-item.js +39 -0
  33. package/src/__tests__/test-items/table-item.js +30 -0
  34. package/src/__tests__/tex-wrangler_test.js +83 -0
  35. package/src/__tests__/util_test.js +41 -0
  36. package/src/a11y.js +46 -0
  37. package/src/all-widgets.js +9 -0
  38. package/src/article-renderer.jsx +215 -0
  39. package/src/asset-context.js +30 -0
  40. package/src/basic-widgets.js +13 -0
  41. package/src/components/__stories__/button-group.stories.jsx +61 -0
  42. package/src/components/__stories__/fixed-to-responsive.stories.jsx +132 -0
  43. package/src/components/__stories__/graph.stories.jsx +27 -0
  44. package/src/components/__stories__/graphie.stories.jsx +28 -0
  45. package/src/components/__stories__/hud.stories.jsx +36 -0
  46. package/src/components/__stories__/icon.stories.jsx +56 -0
  47. package/src/components/__stories__/image-loader.stories.jsx +60 -0
  48. package/src/components/__stories__/info-tip.stories.jsx +33 -0
  49. package/src/components/__stories__/inline-icon.stories.jsx +39 -0
  50. package/src/components/__stories__/input-with-examples.stories.jsx +51 -0
  51. package/src/components/__stories__/lint.stories.jsx +40 -0
  52. package/src/components/__stories__/math-input.stories.jsx +29 -0
  53. package/src/components/__stories__/math-output.stories.jsx +24 -0
  54. package/src/components/__stories__/multi-button-group.stories.jsx +69 -0
  55. package/src/components/__stories__/number-input.stories.jsx +42 -0
  56. package/src/components/__stories__/possible-answers.stories.jsx +22 -0
  57. package/src/components/__stories__/prop-check-box.stories.jsx +62 -0
  58. package/src/components/__stories__/range-input.stories.jsx +28 -0
  59. package/src/components/__stories__/simple-keypad-input.stories.jsx +28 -0
  60. package/src/components/__stories__/sortable.stories.jsx +73 -0
  61. package/src/components/__stories__/stub-tag-editor.stories.jsx +44 -0
  62. package/src/components/__stories__/svg-image.stories.jsx +60 -0
  63. package/src/components/__stories__/tex.stories.jsx +18 -0
  64. package/src/components/__stories__/text-buttons.stories.jsx +51 -0
  65. package/src/components/__stories__/text-input.stories.jsx +34 -0
  66. package/src/components/__stories__/text-list-editor.stories.jsx +33 -0
  67. package/src/components/__stories__/zoomable-tex.stories.jsx +39 -0
  68. package/src/components/__stories__/zoomable.stories.jsx +40 -0
  69. package/src/components/__testdata__/sorter_testdata.js +20 -0
  70. package/src/components/__tests__/__snapshots__/sortable_test.jsx.snap +79 -0
  71. package/src/components/__tests__/__snapshots__/sorter_test.jsx.snap +297 -0
  72. package/src/components/__tests__/number-input_test.jsx +112 -0
  73. package/src/components/__tests__/sortable_test.jsx +234 -0
  74. package/src/components/__tests__/sorter_test.jsx +111 -0
  75. package/src/components/__tests__/zoomable_test.jsx +388 -0
  76. package/src/components/button-group.jsx +131 -0
  77. package/src/components/constants.js +15 -0
  78. package/src/components/fixed-to-responsive.jsx +163 -0
  79. package/src/components/graph.jsx +414 -0
  80. package/src/components/graphie-classes.jsx +148 -0
  81. package/src/components/graphie-movables.jsx +342 -0
  82. package/src/components/graphie.jsx +353 -0
  83. package/src/components/highlighting/highlightable-content.jsx +245 -0
  84. package/src/components/highlighting/highlights.js +208 -0
  85. package/src/components/highlighting/ranges.js +299 -0
  86. package/src/components/highlighting/types.js +73 -0
  87. package/src/components/highlighting/ui/highlight-renderer.jsx +179 -0
  88. package/src/components/highlighting/ui/highlight-set-renderer.jsx +190 -0
  89. package/src/components/highlighting/ui/highlight-tooltip.jsx +153 -0
  90. package/src/components/highlighting/ui/highlighting-ui.jsx +163 -0
  91. package/src/components/highlighting/ui/selection-tracker.jsx +195 -0
  92. package/src/components/highlighting/ui/types.js +21 -0
  93. package/src/components/highlighting/ui/util.js +166 -0
  94. package/src/components/highlighting/word-indexer.jsx +155 -0
  95. package/src/components/hud.jsx +179 -0
  96. package/src/components/icon.jsx +149 -0
  97. package/src/components/image-loader.jsx +175 -0
  98. package/src/components/info-tip/info-tip.jsx +149 -0
  99. package/src/components/info-tip.jsx +38 -0
  100. package/src/components/inline-icon.jsx +81 -0
  101. package/src/components/input-with-examples.jsx +231 -0
  102. package/src/components/lint.jsx +456 -0
  103. package/src/components/math-input.jsx +282 -0
  104. package/src/components/math-output.jsx +128 -0
  105. package/src/components/multi-button-group.jsx +137 -0
  106. package/src/components/new-tooltip/README.md +110 -0
  107. package/src/components/new-tooltip/__stories__/flexible-position.stories.jsx +437 -0
  108. package/src/components/new-tooltip/__stories__/new-tooltip.stories.jsx +665 -0
  109. package/src/components/new-tooltip/__stories__/tooltip-arrow.stories.jsx +70 -0
  110. package/src/components/new-tooltip/__stories__/tooltip-bubble.stories.jsx +98 -0
  111. package/src/components/new-tooltip/__tests__/style-constants_test.js +8 -0
  112. package/src/components/new-tooltip/__tests__/util_test.js +47 -0
  113. package/src/components/new-tooltip/flexible-position.jsx +182 -0
  114. package/src/components/new-tooltip/new-tooltip.jsx +399 -0
  115. package/src/components/new-tooltip/style-constants.js +13 -0
  116. package/src/components/new-tooltip/tooltip-arrow.jsx +184 -0
  117. package/src/components/new-tooltip/tooltip-bubble.jsx +223 -0
  118. package/src/components/new-tooltip/tooltip-portal.jsx +101 -0
  119. package/src/components/new-tooltip/tooltip-positioner.jsx +529 -0
  120. package/src/components/new-tooltip/types.js +183 -0
  121. package/src/components/new-tooltip/util.js +27 -0
  122. package/src/components/number-input.jsx +253 -0
  123. package/src/components/possible-answers.jsx +36 -0
  124. package/src/components/prop-check-box.jsx +78 -0
  125. package/src/components/range-input.jsx +61 -0
  126. package/src/components/simple-keypad-input.jsx +91 -0
  127. package/src/components/sortable.jsx +872 -0
  128. package/src/components/stub-tag-editor.jsx +53 -0
  129. package/src/components/svg-image.jsx +762 -0
  130. package/src/components/tex-buttons.jsx +322 -0
  131. package/src/components/tex.jsx +70 -0
  132. package/src/components/text-input.jsx +82 -0
  133. package/src/components/text-list-editor.jsx +157 -0
  134. package/src/components/tooltip.jsx +395 -0
  135. package/src/components/visibility-observer/__stories__/visibility-observer.stories.jsx +140 -0
  136. package/src/components/visibility-observer/get-scroll-parent.js +45 -0
  137. package/src/components/visibility-observer/visibility-observer.js +109 -0
  138. package/src/components/visibility-observer/visibility-observer.jsx +123 -0
  139. package/src/components/zoomable-tex.jsx +70 -0
  140. package/src/components/zoomable.jsx +304 -0
  141. package/src/components.js +17 -0
  142. package/src/dependencies.js +22 -0
  143. package/src/error-boundary.jsx +48 -0
  144. package/src/extra-widgets.js +75 -0
  145. package/src/gorgon/README +40 -0
  146. package/src/gorgon/__tests__/matcher_test.js +497 -0
  147. package/src/gorgon/__tests__/rule_test.js +101 -0
  148. package/src/gorgon/__tests__/rules_test.js +487 -0
  149. package/src/gorgon/__tests__/selector-parser_test.js +52 -0
  150. package/src/gorgon/__tests__/tree-transformer_test.js +446 -0
  151. package/src/gorgon/gorgon.js +290 -0
  152. package/src/gorgon/proptypes.js +29 -0
  153. package/src/gorgon/rule.js +413 -0
  154. package/src/gorgon/rules/absolute-url.js +24 -0
  155. package/src/gorgon/rules/all-rules.js +72 -0
  156. package/src/gorgon/rules/blockquoted-math.js +10 -0
  157. package/src/gorgon/rules/blockquoted-widget.js +10 -0
  158. package/src/gorgon/rules/double-spacing-after-terminal.js +12 -0
  159. package/src/gorgon/rules/extra-content-spacing.js +12 -0
  160. package/src/gorgon/rules/heading-level-1.js +14 -0
  161. package/src/gorgon/rules/heading-level-skip.js +20 -0
  162. package/src/gorgon/rules/heading-sentence-case.js +11 -0
  163. package/src/gorgon/rules/heading-title-case.js +63 -0
  164. package/src/gorgon/rules/image-alt-text.js +21 -0
  165. package/src/gorgon/rules/image-in-table.js +10 -0
  166. package/src/gorgon/rules/image-spaces-around-urls.js +35 -0
  167. package/src/gorgon/rules/image-widget.js +50 -0
  168. package/src/gorgon/rules/link-click-here.js +11 -0
  169. package/src/gorgon/rules/lint-utils.js +48 -0
  170. package/src/gorgon/rules/long-paragraph.js +14 -0
  171. package/src/gorgon/rules/math-adjacent.js +10 -0
  172. package/src/gorgon/rules/math-align-extra-break.js +11 -0
  173. package/src/gorgon/rules/math-align-linebreaks.js +43 -0
  174. package/src/gorgon/rules/math-empty.js +10 -0
  175. package/src/gorgon/rules/math-font-size.js +12 -0
  176. package/src/gorgon/rules/math-frac.js +10 -0
  177. package/src/gorgon/rules/math-nested.js +11 -0
  178. package/src/gorgon/rules/math-starts-with-space.js +12 -0
  179. package/src/gorgon/rules/math-text-empty.js +10 -0
  180. package/src/gorgon/rules/math-without-dollars.js +14 -0
  181. package/src/gorgon/rules/nested-lists.js +11 -0
  182. package/src/gorgon/rules/profanity.js +10 -0
  183. package/src/gorgon/rules/table-missing-cells.js +20 -0
  184. package/src/gorgon/rules/unbalanced-code-delimiters.js +14 -0
  185. package/src/gorgon/rules/unescaped-dollar.js +10 -0
  186. package/src/gorgon/rules/widget-in-table.js +10 -0
  187. package/src/gorgon/selector.js +506 -0
  188. package/src/gorgon/tree-transformer.js +588 -0
  189. package/src/hint-renderer.jsx +159 -0
  190. package/src/hints-renderer.jsx +359 -0
  191. package/src/icon-paths.js +120 -0
  192. package/src/index.js +149 -2
  193. package/src/init.js +49 -0
  194. package/src/interaction-tracker.js +60 -0
  195. package/src/interactive2/__tests__/movable-mock.js +48 -0
  196. package/src/interactive2/__tests__/movable-point_test.js +146 -0
  197. package/src/interactive2/interactive-util.js +152 -0
  198. package/src/interactive2/movable-helper-methods.js +160 -0
  199. package/src/interactive2/movable-line-options.js +392 -0
  200. package/src/interactive2/movable-line.js +322 -0
  201. package/src/interactive2/movable-point-options.js +190 -0
  202. package/src/interactive2/movable-point.jsx +604 -0
  203. package/src/interactive2/movable-polygon-options.js +351 -0
  204. package/src/interactive2/movable-polygon.js +367 -0
  205. package/src/interactive2/movable.js +273 -0
  206. package/src/interactive2/objective_.js +79 -0
  207. package/src/interactive2/types.js +3 -0
  208. package/src/interactive2/wrapped-defaults.js +86 -0
  209. package/src/interactive2/wrapped-ellipse.js +87 -0
  210. package/src/interactive2/wrapped-line.js +109 -0
  211. package/src/interactive2/wrapped-path.js +47 -0
  212. package/src/interactive2.js +91 -0
  213. package/src/item-renderer.jsx +518 -0
  214. package/src/item-version.js +12 -0
  215. package/src/jipt-paragraphs.js +44 -0
  216. package/src/jquery.mobile.vmouse.js +545 -0
  217. package/src/keypad-context.js +33 -0
  218. package/src/loading-context.js +20 -0
  219. package/src/logging/log.js +107 -0
  220. package/src/logging/log_test.js +41 -0
  221. package/src/mixins/changeable.jsx +115 -0
  222. package/src/mixins/editor-jsonify.jsx +13 -0
  223. package/src/mixins/provide-keypad.jsx +131 -0
  224. package/src/mixins/widget-jsonify-deprecated.jsx +23 -0
  225. package/src/mixins/widget-prop-blacklist.js +36 -0
  226. package/src/multi-items/__stories__/multi-renderer.stories.js +88 -0
  227. package/src/multi-items/__testdata__/multi-renderer_testdata.js +174 -0
  228. package/src/multi-items/__tests__/__snapshots__/multi-renderer_test.js.snap +994 -0
  229. package/src/multi-items/__tests__/items_test.js +245 -0
  230. package/src/multi-items/__tests__/multi-renderer_test.js +903 -0
  231. package/src/multi-items/__tests__/prop-type-builders_test.js +134 -0
  232. package/src/multi-items/__tests__/shapes_test.js +44 -0
  233. package/src/multi-items/__tests__/trees_test.js +316 -0
  234. package/src/multi-items/item-types.js +55 -0
  235. package/src/multi-items/items.js +176 -0
  236. package/src/multi-items/multi-renderer.jsx +542 -0
  237. package/src/multi-items/prop-type-builders.js +105 -0
  238. package/src/multi-items/shape-types.js +47 -0
  239. package/src/multi-items/shapes.js +53 -0
  240. package/src/multi-items/tree-types.js +42 -0
  241. package/src/multi-items/trees.js +345 -0
  242. package/src/multi-items.js +76 -0
  243. package/src/not-gorgon.js +129 -0
  244. package/src/perseus-api.jsx +270 -0
  245. package/src/perseus-env.js +26 -0
  246. package/src/perseus-error.js +19 -0
  247. package/src/perseus-markdown.jsx +434 -0
  248. package/src/perseus-types.js +1597 -0
  249. package/src/pure-markdown.js +346 -0
  250. package/src/question-paragraph.jsx +30 -0
  251. package/src/renderability.jsx +108 -0
  252. package/src/renderer.jsx +1931 -0
  253. package/src/server-item-renderer.jsx +467 -0
  254. package/src/sigfigs.jsx +492 -0
  255. package/src/styles/articles.less +748 -0
  256. package/src/styles/constants.js +119 -0
  257. package/src/styles/global-constants.js +350 -0
  258. package/src/styles/global-styles.js +307 -0
  259. package/src/styles/khan-exercise.css +1304 -0
  260. package/src/styles/media-queries.js +48 -0
  261. package/src/styles/perseus-renderer.less +1008 -0
  262. package/src/styles/shared.js +132 -0
  263. package/src/styles/util.less +47 -0
  264. package/src/styles/variables.boostrap.less +301 -0
  265. package/src/styles/variables.less +68 -0
  266. package/src/styles/variables.shared.less +356 -0
  267. package/src/styles/widgets/categorizer.less +39 -0
  268. package/src/styles/widgets/definition.less +86 -0
  269. package/src/styles/widgets/dropdown.less +3 -0
  270. package/src/styles/widgets/expression.less +147 -0
  271. package/src/styles/widgets/graded-group.less +36 -0
  272. package/src/styles/widgets/grapher.less +11 -0
  273. package/src/styles/widgets/group.less +19 -0
  274. package/src/styles/widgets/image.less +29 -0
  275. package/src/styles/widgets/interactive-graph.less +61 -0
  276. package/src/styles/widgets/label-image.less +41 -0
  277. package/src/styles/widgets/matcher.less +8 -0
  278. package/src/styles/widgets/matrix.less +120 -0
  279. package/src/styles/widgets/measurer.less +20 -0
  280. package/src/styles/widgets/orderer.less +97 -0
  281. package/src/styles/widgets/passage.less +151 -0
  282. package/src/styles/widgets/plotter.less +33 -0
  283. package/src/styles/widgets/radio.less +52 -0
  284. package/src/styles/widgets/reaction-diagram.less +35 -0
  285. package/src/styles/widgets/sequence.less +5 -0
  286. package/src/styles/widgets/sortable.less +127 -0
  287. package/src/styles/widgets/table.less +56 -0
  288. package/src/styles/widgets/transformer.less +28 -0
  289. package/src/styles/widgets/unit.less +14 -0
  290. package/src/tex-wrangler.js +176 -0
  291. package/src/traversal.jsx +141 -0
  292. package/src/types.js +538 -0
  293. package/src/util/a11y.js +24 -0
  294. package/src/util/answer-types.js +862 -0
  295. package/src/util/answer-types_test.js +115 -0
  296. package/src/util/colors.js +94 -0
  297. package/src/util/fix-passage-refs.jsx +122 -0
  298. package/src/util/graph-utils.js +16 -0
  299. package/src/util/graphie.js +1585 -0
  300. package/src/util/interactive.js +4071 -0
  301. package/src/util/katex-preprocess.js +16 -0
  302. package/src/util/math.js +296 -0
  303. package/src/util/mobile-native-utils.js +14 -0
  304. package/src/util/mobile-native-utils_test.js +24 -0
  305. package/src/util/register-all-widgets-for-testing.js +12 -0
  306. package/src/util/scroll-utils.js +162 -0
  307. package/src/util/sizing-utils.js +46 -0
  308. package/src/util/tex.js +203 -0
  309. package/src/util/url-utils.js +36 -0
  310. package/src/util.js +990 -0
  311. package/src/version.js +11 -0
  312. package/src/widget-container.jsx +174 -0
  313. package/src/widgets/__stories__/categorizer.stories.jsx +15 -0
  314. package/src/widgets/__stories__/cs-program.stories.jsx +15 -0
  315. package/src/widgets/__stories__/definition.stories.jsx +38 -0
  316. package/src/widgets/__stories__/dropdown.stories.jsx +15 -0
  317. package/src/widgets/__stories__/explanation.stories.jsx +19 -0
  318. package/src/widgets/__stories__/expression.stories.jsx +26 -0
  319. package/src/widgets/__stories__/graded-group-set.stories.jsx +32 -0
  320. package/src/widgets/__stories__/graded-group.stories.jsx +32 -0
  321. package/src/widgets/__stories__/grapher.stories.jsx +47 -0
  322. package/src/widgets/__stories__/group.stories.jsx +15 -0
  323. package/src/widgets/__stories__/iframe.stories.jsx +15 -0
  324. package/src/widgets/__stories__/image.stories.jsx +62 -0
  325. package/src/widgets/__stories__/input-number.stories.jsx +90 -0
  326. package/src/widgets/__stories__/interaction.stories.jsx +15 -0
  327. package/src/widgets/__stories__/interactive-graph.stories.jsx +61 -0
  328. package/src/widgets/__stories__/matcher.stories.jsx +15 -0
  329. package/src/widgets/__stories__/matrix.stories.jsx +15 -0
  330. package/src/widgets/__stories__/number-line.stories.jsx +15 -0
  331. package/src/widgets/__stories__/numeric-input.stories.jsx +19 -0
  332. package/src/widgets/__stories__/orderer.stories.jsx +15 -0
  333. package/src/widgets/__stories__/passage-ref.stories.jsx +19 -0
  334. package/src/widgets/__stories__/passage.stories.jsx +19 -0
  335. package/src/widgets/__stories__/radio.stories.jsx +82 -0
  336. package/src/widgets/__stories__/sorter.stories.jsx +15 -0
  337. package/src/widgets/__stories__/transformer.stories.jsx +15 -0
  338. package/src/widgets/__stories__/video.stories.jsx +15 -0
  339. package/src/widgets/__testdata__/categorizer_testdata.js +50 -0
  340. package/src/widgets/__testdata__/cs-program_testdata.js +28 -0
  341. package/src/widgets/__testdata__/dropdown_testdata.js +34 -0
  342. package/src/widgets/__testdata__/explanation_testdata.js +56 -0
  343. package/src/widgets/__testdata__/expression_testdata.js +95 -0
  344. package/src/widgets/__testdata__/graded-group-set_testdata.js +358 -0
  345. package/src/widgets/__testdata__/graded-group_testdata.js +79 -0
  346. package/src/widgets/__testdata__/grapher_testdata.js +376 -0
  347. package/src/widgets/__testdata__/group_testdata.js +156 -0
  348. package/src/widgets/__testdata__/iframe_testdata.js +36 -0
  349. package/src/widgets/__testdata__/image_testdata.js +38 -0
  350. package/src/widgets/__testdata__/input-number_testdata.js +73 -0
  351. package/src/widgets/__testdata__/interaction_testdata.js +264 -0
  352. package/src/widgets/__testdata__/interactive-graph_testdata.js +646 -0
  353. package/src/widgets/__testdata__/matcher_testdata.js +34 -0
  354. package/src/widgets/__testdata__/matrix_testdata.js +29 -0
  355. package/src/widgets/__testdata__/number-line_testdata.js +31 -0
  356. package/src/widgets/__testdata__/numeric-input_testdata.js +266 -0
  357. package/src/widgets/__testdata__/orderer_testdata.js +58 -0
  358. package/src/widgets/__testdata__/passage-ref_testdata.js +41 -0
  359. package/src/widgets/__testdata__/passage_testdata.js +71 -0
  360. package/src/widgets/__testdata__/radio_testdata.js +210 -0
  361. package/src/widgets/__testdata__/sorter_testdata.js +20 -0
  362. package/src/widgets/__testdata__/transformer_testdata.js +109 -0
  363. package/src/widgets/__testdata__/video_testdata.js +22 -0
  364. package/src/widgets/__tests__/__snapshots__/categorizer_test.jsx.snap +928 -0
  365. package/src/widgets/__tests__/__snapshots__/cs-program_test.jsx.snap +75 -0
  366. package/src/widgets/__tests__/__snapshots__/definition_test.js.snap +99 -0
  367. package/src/widgets/__tests__/__snapshots__/dropdown_test.jsx.snap +143 -0
  368. package/src/widgets/__tests__/__snapshots__/explanation_test.js.snap +473 -0
  369. package/src/widgets/__tests__/__snapshots__/expression_test.jsx.snap +38 -0
  370. package/src/widgets/__tests__/__snapshots__/graded-group-set-jipt_test.jsx.snap +754 -0
  371. package/src/widgets/__tests__/__snapshots__/graded-group-set_test.jsx.snap +310 -0
  372. package/src/widgets/__tests__/__snapshots__/graded-group_test.jsx.snap +863 -0
  373. package/src/widgets/__tests__/__snapshots__/grapher_test.jsx.snap +2880 -0
  374. package/src/widgets/__tests__/__snapshots__/group_test.jsx.snap +1154 -0
  375. package/src/widgets/__tests__/__snapshots__/iframe_test.jsx.snap +69 -0
  376. package/src/widgets/__tests__/__snapshots__/image_test.jsx.snap +388 -0
  377. package/src/widgets/__tests__/__snapshots__/input-number_test.jsx.snap +978 -0
  378. package/src/widgets/__tests__/__snapshots__/interaction_test.jsx.snap +311 -0
  379. package/src/widgets/__tests__/__snapshots__/interactive-graph_test.jsx.snap +2915 -0
  380. package/src/widgets/__tests__/__snapshots__/matcher_test.jsx.snap +1039 -0
  381. package/src/widgets/__tests__/__snapshots__/matrix_test.jsx.snap +450 -0
  382. package/src/widgets/__tests__/__snapshots__/number-line_test.jsx.snap +888 -0
  383. package/src/widgets/__tests__/__snapshots__/numeric-input_test.jsx.snap +930 -0
  384. package/src/widgets/__tests__/__snapshots__/orderer_test.jsx.snap +275 -0
  385. package/src/widgets/__tests__/__snapshots__/passage-ref_test.jsx.snap +446 -0
  386. package/src/widgets/__tests__/__snapshots__/passage_test.jsx.snap +1988 -0
  387. package/src/widgets/__tests__/__snapshots__/radio_test.jsx.snap +7107 -0
  388. package/src/widgets/__tests__/__snapshots__/video_test.jsx.snap +163 -0
  389. package/src/widgets/__tests__/categorizer_test.jsx +205 -0
  390. package/src/widgets/__tests__/cs-program_test.jsx +45 -0
  391. package/src/widgets/__tests__/definition_test.js +152 -0
  392. package/src/widgets/__tests__/dropdown_test.jsx +106 -0
  393. package/src/widgets/__tests__/explanation_test.js +199 -0
  394. package/src/widgets/__tests__/expression_test.jsx +439 -0
  395. package/src/widgets/__tests__/graded-group-set-jipt_test.jsx +33 -0
  396. package/src/widgets/__tests__/graded-group-set_test.jsx +270 -0
  397. package/src/widgets/__tests__/graded-group_test.jsx +233 -0
  398. package/src/widgets/__tests__/grapher.cypress.jsx +486 -0
  399. package/src/widgets/__tests__/grapher_test.jsx +35 -0
  400. package/src/widgets/__tests__/group_test.jsx +512 -0
  401. package/src/widgets/__tests__/iframe_test.jsx +47 -0
  402. package/src/widgets/__tests__/image_test.jsx +65 -0
  403. package/src/widgets/__tests__/input-number_test.jsx +360 -0
  404. package/src/widgets/__tests__/interaction_test.jsx +33 -0
  405. package/src/widgets/__tests__/interactive-graph.cypress.jsx +697 -0
  406. package/src/widgets/__tests__/interactive-graph_test.jsx +105 -0
  407. package/src/widgets/__tests__/matcher_test.jsx +157 -0
  408. package/src/widgets/__tests__/matrix_test.jsx +84 -0
  409. package/src/widgets/__tests__/number-line_test.jsx +81 -0
  410. package/src/widgets/__tests__/numeric-input_test.jsx +574 -0
  411. package/src/widgets/__tests__/orderer_test.jsx +75 -0
  412. package/src/widgets/__tests__/passage-ref_test.jsx +166 -0
  413. package/src/widgets/__tests__/passage_test.jsx +133 -0
  414. package/src/widgets/__tests__/radio/base-radio_test.jsx +82 -0
  415. package/src/widgets/__tests__/radio_test.jsx +651 -0
  416. package/src/widgets/__tests__/renderQuestion.jsx +65 -0
  417. package/src/widgets/__tests__/unit_test.jsx +144 -0
  418. package/src/widgets/__tests__/video_test.jsx +55 -0
  419. package/src/widgets/categorizer.jsx +338 -0
  420. package/src/widgets/cs-program.jsx +228 -0
  421. package/src/widgets/definition.jsx +141 -0
  422. package/src/widgets/dropdown.jsx +143 -0
  423. package/src/widgets/explanation.jsx +315 -0
  424. package/src/widgets/expression.jsx +654 -0
  425. package/src/widgets/graded-group-answer-bar.jsx +152 -0
  426. package/src/widgets/graded-group-set.jsx +285 -0
  427. package/src/widgets/graded-group.jsx +448 -0
  428. package/src/widgets/grapher/util.jsx +819 -0
  429. package/src/widgets/grapher.jsx +658 -0
  430. package/src/widgets/group.jsx +213 -0
  431. package/src/widgets/iframe.jsx +199 -0
  432. package/src/widgets/image.jsx +309 -0
  433. package/src/widgets/input-number.jsx +410 -0
  434. package/src/widgets/interaction/arrow-picker.jsx +39 -0
  435. package/src/widgets/interaction/color-picker.jsx +69 -0
  436. package/src/widgets/interaction/dash-picker.jsx +46 -0
  437. package/src/widgets/interaction/element-container.jsx +97 -0
  438. package/src/widgets/interaction.jsx +742 -0
  439. package/src/widgets/interactive-graph.jsx +2821 -0
  440. package/src/widgets/label-image/__stories__/answer-choices.stories.jsx +93 -0
  441. package/src/widgets/label-image/__stories__/marker.stories.jsx +172 -0
  442. package/src/widgets/label-image/answer-choices.jsx +311 -0
  443. package/src/widgets/label-image/marker.jsx +365 -0
  444. package/src/widgets/label-image/types.js +33 -0
  445. package/src/widgets/label-image.jsx +841 -0
  446. package/src/widgets/label-image_test.js +840 -0
  447. package/src/widgets/lights-puzzle.jsx +356 -0
  448. package/src/widgets/matcher.jsx +271 -0
  449. package/src/widgets/matrix.jsx +615 -0
  450. package/src/widgets/measurer.jsx +215 -0
  451. package/src/widgets/molecule/__tests__/layout_test.jsx +159 -0
  452. package/src/widgets/molecule/__tests__/parser_test.jsx +142 -0
  453. package/src/widgets/molecule/molecule-drawing.jsx +175 -0
  454. package/src/widgets/molecule/molecule-layout.jsx +367 -0
  455. package/src/widgets/molecule/smiles-parser.jsx +300 -0
  456. package/src/widgets/molecule.jsx +172 -0
  457. package/src/widgets/number-line.jsx +858 -0
  458. package/src/widgets/numeric-input.jsx +622 -0
  459. package/src/widgets/orderer.jsx +753 -0
  460. package/src/widgets/passage/__tests__/passage-markdown_test.jsx +382 -0
  461. package/src/widgets/passage/get-line-height-for-node.js +10 -0
  462. package/src/widgets/passage/passage-markdown.jsx +416 -0
  463. package/src/widgets/passage-ref-target.jsx +70 -0
  464. package/src/widgets/passage-ref.jsx +198 -0
  465. package/src/widgets/passage.jsx +601 -0
  466. package/src/widgets/plotter.jsx +1198 -0
  467. package/src/widgets/radio/__stories__/base-radio.stories.jsx +40 -0
  468. package/src/widgets/radio/__stories__/choice-icon.stories.jsx +157 -0
  469. package/src/widgets/radio/__stories__/choice-none-above.stories.jsx +26 -0
  470. package/src/widgets/radio/__stories__/cross-out-button.stories.jsx +64 -0
  471. package/src/widgets/radio/__stories__/cross-out-menu.stories.jsx +59 -0
  472. package/src/widgets/radio/__stories__/cross-out-tooltip.stories.jsx +59 -0
  473. package/src/widgets/radio/__stories__/focus-ring.stories.jsx +38 -0
  474. package/src/widgets/radio/__stories__/option-status.stories.jsx +118 -0
  475. package/src/widgets/radio/__stories__/toggleable-radio-button.stories.jsx +28 -0
  476. package/src/widgets/radio/base-radio.jsx +642 -0
  477. package/src/widgets/radio/choice-icon.jsx +468 -0
  478. package/src/widgets/radio/choice-none-above.jsx +54 -0
  479. package/src/widgets/radio/choice.jsx +692 -0
  480. package/src/widgets/radio/choice.jsx.fixture.js +64 -0
  481. package/src/widgets/radio/cross-out-button.jsx +136 -0
  482. package/src/widgets/radio/cross-out-menu-wrapper.jsx +492 -0
  483. package/src/widgets/radio/cross-out-tooltip.jsx +129 -0
  484. package/src/widgets/radio/focus-ring.jsx +51 -0
  485. package/src/widgets/radio/option-status.jsx +89 -0
  486. package/src/widgets/radio/toggleable-radio-button.jsx +133 -0
  487. package/src/widgets/radio/util.js +32 -0
  488. package/src/widgets/radio/util_test.js +19 -0
  489. package/src/widgets/radio/widget.jsx +470 -0
  490. package/src/widgets/radio.jsx +156 -0
  491. package/src/widgets/reaction-diagram.jsx +136 -0
  492. package/src/widgets/sequence.jsx +140 -0
  493. package/src/widgets/simulator.jsx +808 -0
  494. package/src/widgets/sorter.jsx +146 -0
  495. package/src/widgets/table.jsx +395 -0
  496. package/src/widgets/transformer.jsx +2870 -0
  497. package/src/widgets/unit.jsx +371 -0
  498. package/src/widgets/video-transcript-link.jsx +84 -0
  499. package/src/widgets/video-transcript-link_test.js +211 -0
  500. package/src/widgets/video.jsx +131 -0
  501. package/src/widgets.js +431 -0
  502. package/src/zoom.js +539 -0
  503. package/src/__tests__/index.test.js +0 -14
@@ -0,0 +1,1988 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`passage widget should be able to return a valid reference 1`] = `
4
+ Object {
5
+ "content": Array [
6
+ <div
7
+ className="paragraph"
8
+ >
9
+ <span>
10
+ (“When the dodo
11
+ </span>
12
+ <span>
13
+ 's ancestor
14
+ </span>
15
+ <span>
16
+ (thought to be a migratory pigeon
17
+ </span>
18
+ <span>
19
+ ) settled on this island with abundant food
20
+ </span>
21
+ <span>
22
+ , no competition from terrestrial mammals
23
+ </span>
24
+ <span>
25
+ , and no predators
26
+ </span>
27
+ <span>
28
+ , it could survive without flying
29
+ </span>
30
+ <span>
31
+ , and thus was freed from the energetic and size constraints of flight
32
+ </span>
33
+ <span>
34
+ .”
35
+ </span>
36
+ <span>
37
+ )
38
+ </span>
39
+ </div>,
40
+ ],
41
+ "endLine": 1,
42
+ "startLine": 1,
43
+ }
44
+ `;
45
+
46
+ exports[`passage widget should snapshot multiple passages (mobile: false) 1`] = `
47
+ <div>
48
+ <span
49
+ class="mock-KatexProvider"
50
+ >
51
+ <div
52
+ class="perseus-renderer perseus-renderer-responsive"
53
+ >
54
+ <div
55
+ class="paragraph"
56
+ data-perseus-paragraph-index="0"
57
+ >
58
+ <blockquote>
59
+ <div
60
+ class="paragraph"
61
+ >
62
+ Select text to highlight it.
63
+ <em>
64
+ (Laptop/desktop only)
65
+ </em>
66
+ </div>
67
+ </blockquote>
68
+ </div>
69
+ <div
70
+ class="paragraph"
71
+ data-perseus-paragraph-index="1"
72
+ >
73
+ <blockquote>
74
+ <div
75
+ class="paragraph"
76
+ >
77
+ <strong>
78
+ Passage 1 is adapted from
79
+ <em>
80
+ "Ancient DNA Tells Story of Giant Eagle Evolution,"
81
+ </em>
82
+ © 2005 by Public Library of Science. Passage 2 is adapted from Tim Heupink, et al.
83
+ <em>
84
+ "Dodos and Spotted Green Pigeons are Descendants of an Island Hopping Bird,"
85
+ </em>
86
+ © 2014 by BioMed Central.
87
+ </strong>
88
+ </div>
89
+ </blockquote>
90
+ </div>
91
+ <div
92
+ class="paragraph"
93
+ data-perseus-paragraph-index="2"
94
+ >
95
+ <div
96
+ class="paragraph"
97
+ >
98
+ <div
99
+ class="perseus-widget-container widget-nohighlight widget-block"
100
+ >
101
+ <div>
102
+ <div
103
+ class="perseus-widget-passage-container"
104
+ >
105
+ <div
106
+ class="perseus-widget-passage-instructions"
107
+ >
108
+ <div
109
+ class="paragraph"
110
+ >
111
+ <span>
112
+ The symbol
113
+ </span>
114
+ <span
115
+ aria-hidden="true"
116
+ class="perseus-passage-square-label"
117
+ style="display: inline; white-space: nowrap;"
118
+ >
119
+ <span
120
+ style="display: inline-block; color: rgb(255, 255, 255); background-color: rgb(90, 90, 90); padding-left: 10px; padding-right: 10px; user-select: none;"
121
+ >
122
+ 1
123
+ </span>
124
+ </span>
125
+ <span
126
+ class="perseus-sr-only"
127
+ >
128
+ [Marker for question
129
+ 1
130
+ ]
131
+ </span>
132
+  
133
+ <span>
134
+ indicates that question 1 references this portion of the passage
135
+ </span>
136
+ <span>
137
+ .
138
+ </span>
139
+ </div>
140
+ </div>
141
+ <div
142
+ class="perseus-widget-passage"
143
+ >
144
+ <h3
145
+ class="passage-title"
146
+ >
147
+ <span
148
+ class="mock-KatexProvider"
149
+ >
150
+ <div
151
+ class="perseus-renderer perseus-renderer-responsive"
152
+ >
153
+ <div
154
+ class="paragraph"
155
+ data-perseus-paragraph-index="0"
156
+ >
157
+ <div
158
+ class="paragraph"
159
+ >
160
+ Passage 1
161
+ </div>
162
+ </div>
163
+ </div>
164
+ </span>
165
+ </h3>
166
+ <div
167
+ aria-hidden="true"
168
+ class="line-numbers"
169
+ >
170
+ <span>
171
+ 1
172
+ </span>
173
+ <span>
174
+ 2
175
+ </span>
176
+ <span>
177
+ 3
178
+ </span>
179
+ <span
180
+ class="line-marker"
181
+ >
182
+ Line
183
+ </span>
184
+ <span>
185
+ 5
186
+ </span>
187
+ <span>
188
+ 6
189
+ </span>
190
+ <span>
191
+ 7
192
+ </span>
193
+ <span>
194
+ 8
195
+ </span>
196
+ <span>
197
+ 9
198
+ </span>
199
+ <span>
200
+ 10
201
+ </span>
202
+ </div>
203
+ <div
204
+ class="passage-text"
205
+ >
206
+ <div
207
+ class="container_6htn2u"
208
+ >
209
+ <div>
210
+ <div>
211
+ <div>
212
+ <div />
213
+ </div>
214
+ </div>
215
+ </div>
216
+ <div
217
+ class="content_gor68n"
218
+ >
219
+ <div>
220
+ <div>
221
+ <div
222
+ class="measurer_1ugaxv"
223
+ >
224
+ <div>
225
+ <div
226
+ class="paragraph"
227
+ />
228
+ <div />
229
+ </div>
230
+ </div>
231
+ <div
232
+ class="paragraph"
233
+ >
234
+ <span
235
+ style="display: inline-block; width: 0px; visibility: hidden;"
236
+ >
237
+ _
238
+ </span>
239
+ <span>
240
+ For reasons that are not entirely clear
241
+ </span>
242
+ <span>
243
+ , when animals make their way to isolated islands
244
+ </span>
245
+ <span
246
+ aria-hidden="true"
247
+ class="perseus-passage-square-label"
248
+ style="display: inline; white-space: nowrap;"
249
+ >
250
+ <span
251
+ style="display: inline-block; color: rgb(255, 255, 255); background-color: rgb(90, 90, 90); padding-left: 10px; padding-right: 10px; user-select: none;"
252
+ >
253
+ 1
254
+ </span>
255
+ </span>
256
+ <span
257
+ class="perseus-sr-only"
258
+ >
259
+ [Marker for question
260
+ 1
261
+ ]
262
+ </span>
263
+ <span>
264
+ , they tend to evolve relatively quickly toward an outsized or pint
265
+ </span>
266
+ <span>
267
+ -sized version of their mainland counterpart
268
+ </span>
269
+ <span>
270
+ .
271
+ </span>
272
+ <span
273
+ style="display: inline-block; width: 0px; visibility: hidden;"
274
+ >
275
+ _
276
+ </span>
277
+ <span>
278
+
279
+ </span>
280
+ </div>
281
+ <div
282
+ class="paragraph"
283
+ >
284
+ <span
285
+ style="display: inline-block; width: 0px; visibility: hidden;"
286
+ >
287
+ _
288
+ </span>
289
+ <span>
290
+ Perhaps the most famous example of an island giant—and
291
+ </span>
292
+ <span>
293
+ , sadly
294
+ </span>
295
+ <span>
296
+ , of species extinction—is the dodo
297
+ </span>
298
+ <span>
299
+ , once found on the Indian Ocean island of Mauritius
300
+ </span>
301
+ <span>
302
+ .
303
+ </span>
304
+ <span
305
+ style="display: inline-block; width: 0px; visibility: hidden;"
306
+ >
307
+ _
308
+ </span>
309
+ <span>
310
+
311
+ </span>
312
+ <span
313
+ style="display: inline-block; width: 0px; visibility: hidden;"
314
+ >
315
+ _
316
+ </span>
317
+ <span>
318
+ When the dodo
319
+ </span>
320
+ <span>
321
+ 's ancestor
322
+ </span>
323
+ <span>
324
+ (thought to be a migratory pigeon
325
+ </span>
326
+ <span>
327
+ ) settled on this island with abundant food
328
+ </span>
329
+ <span>
330
+ , no competition from terrestrial mammals
331
+ </span>
332
+ <span>
333
+ , and no predators
334
+ </span>
335
+ <span>
336
+ , it could survive without flying
337
+ </span>
338
+ <span>
339
+ , and thus was freed from the energetic and size constraints of flight
340
+ </span>
341
+ <span>
342
+ .
343
+ </span>
344
+ <span
345
+ style="display: inline-block; width: 0px; visibility: hidden;"
346
+ >
347
+ _
348
+ </span>
349
+ <span>
350
+
351
+ </span>
352
+ <span
353
+ style="display: inline-block; width: 0px; visibility: hidden;"
354
+ >
355
+ _
356
+ </span>
357
+ <span>
358
+ New Zealand also had avian giants
359
+ </span>
360
+ <span>
361
+ , now extinct
362
+ </span>
363
+ <span>
364
+ , including the flightless moa
365
+ </span>
366
+ <span>
367
+ , an ostrich
368
+ </span>
369
+ <span>
370
+ -like bird
371
+ </span>
372
+ <span>
373
+ , and Haast
374
+ </span>
375
+ <span>
376
+ 's eagle
377
+ </span>
378
+ <span>
379
+ (
380
+ </span>
381
+ <em>
382
+ <span>
383
+ Harpagornis moorei
384
+ </span>
385
+ </em>
386
+ <span>
387
+ )
388
+ </span>
389
+ <span>
390
+ , which had a wingspan up to 3 meters
391
+ </span>
392
+ <span>
393
+ .
394
+ </span>
395
+ <span
396
+ style="display: inline-block; width: 0px; visibility: hidden;"
397
+ >
398
+ _
399
+ </span>
400
+ <span>
401
+
402
+ </span>
403
+ <span
404
+ style="display: inline-block; width: 0px; visibility: hidden;"
405
+ >
406
+ _
407
+ </span>
408
+ <span>
409
+ Though Haast
410
+ </span>
411
+ <span>
412
+ 's eagle could fly—and presumably used its wings to
413
+ </span>
414
+ <span
415
+ style="display: inline-block; width: 0px; visibility: hidden;"
416
+ >
417
+ _
418
+ </span>
419
+ <span>
420
+ launch
421
+ </span>
422
+ <span
423
+ style="display: inline-block; width: 0px; visibility: hidden;"
424
+ >
425
+ _
426
+ </span>
427
+ <span>
428
+ brutal attacks on the hapless moa—its body mass
429
+ </span>
430
+ <span>
431
+ (10–14 kilograms
432
+ </span>
433
+ <span>
434
+ ) pushed the limits for self
435
+ </span>
436
+ <span>
437
+ -propelled flight
438
+ </span>
439
+ <span>
440
+ .
441
+ </span>
442
+ <span
443
+ style="display: inline-block; width: 0px; visibility: hidden;"
444
+ >
445
+ _
446
+ </span>
447
+ </div>
448
+ <div
449
+ class="paragraph"
450
+ >
451
+ <span
452
+ style="display: inline-block; width: 0px; visibility: hidden;"
453
+ >
454
+ _
455
+ </span>
456
+ <span>
457
+ As extreme evolutionary examples
458
+ </span>
459
+ <span>
460
+ , these island birds can offer insights into the forces and events shaping evolutionary change
461
+ </span>
462
+ <span>
463
+ .
464
+ </span>
465
+ <span
466
+ style="display: inline-block; width: 0px; visibility: hidden;"
467
+ >
468
+ _
469
+ </span>
470
+ <span>
471
+ In a new study
472
+ </span>
473
+ <span>
474
+ , Michael Bunce et al
475
+ </span>
476
+ <span>
477
+ . compared ancient mitochondrial DNA extracted from Haast
478
+ </span>
479
+ <span>
480
+ 's eagle bones with DNA sequences of 16 living eagle species to better characterize the evolutionary history of the extinct giant raptor
481
+ </span>
482
+ <span>
483
+ .
484
+ </span>
485
+ <span
486
+ style="display: inline-block; width: 0px; visibility: hidden;"
487
+ >
488
+ _
489
+ </span>
490
+ <span>
491
+ Their results suggest the extinct raptor underwent a rapid evolutionary transformation that belies its kinship to some of the world
492
+ </span>
493
+ <span>
494
+ 's smallest eagle species
495
+ </span>
496
+ <span>
497
+ .
498
+ </span>
499
+ <span
500
+ style="display: inline-block; width: 0px; visibility: hidden;"
501
+ >
502
+ _
503
+ </span>
504
+ </div>
505
+ <div
506
+ class="paragraph"
507
+ >
508
+ <span>
509
+ The authors characterized the rates of sequence evolution within mitochondrial DNA to establish the evolutionary relationships between the different eagle species
510
+ </span>
511
+ <span>
512
+ . Their analysis places Haast
513
+ </span>
514
+ <span>
515
+ 's eagle in the same evolutionary lineage as a group of small eagle species in the genus
516
+ </span>
517
+ <em>
518
+ <span>
519
+ Hieraaetus
520
+ </span>
521
+ </em>
522
+ <span>
523
+ . Surprisingly
524
+ </span>
525
+ <span>
526
+ , the genetic distance separating the giant eagle and its more diminutive
527
+ </span>
528
+ <em>
529
+ <span>
530
+ Hieraaetus
531
+ </span>
532
+ </em>
533
+ <span>
534
+ cousins from their last
535
+ </span>
536
+ <span
537
+ style="display: inline-block; width: 0px; visibility: hidden;"
538
+ >
539
+ _
540
+ </span>
541
+ <span>
542
+ common
543
+ </span>
544
+ <span
545
+ style="display: inline-block; width: 0px; visibility: hidden;"
546
+ >
547
+ _
548
+ </span>
549
+ <span>
550
+ ancestor is relatively small
551
+ </span>
552
+ <span>
553
+ .
554
+ </span>
555
+ </div>
556
+ </div>
557
+ </div>
558
+ </div>
559
+ </div>
560
+ </div>
561
+ <h4
562
+ class="perseus-sr-only"
563
+ >
564
+ Beginning of reading passage footnotes.
565
+ </h4>
566
+ <div
567
+ class="footnotes"
568
+ >
569
+ <div
570
+ class="paragraph"
571
+ >
572
+ <span>
573
+ An example footnote
574
+ </span>
575
+ </div>
576
+ </div>
577
+ <div
578
+ class="perseus-sr-only"
579
+ >
580
+ End of reading passage.
581
+ </div>
582
+ </div>
583
+ </div>
584
+ </div>
585
+ </div>
586
+ </div>
587
+ </div>
588
+ <div
589
+ class="paragraph"
590
+ data-perseus-paragraph-index="3"
591
+ >
592
+ <div
593
+ class="paragraph"
594
+ >
595
+ <div
596
+ class="perseus-widget-container widget-nohighlight widget-block"
597
+ >
598
+ <div>
599
+ <div
600
+ class="perseus-widget-passage-container"
601
+ >
602
+ <div
603
+ class="perseus-widget-passage-instructions"
604
+ >
605
+ <div
606
+ class="paragraph"
607
+ >
608
+ <span>
609
+ The symbol
610
+ </span>
611
+ <span
612
+ aria-hidden="true"
613
+ class="perseus-passage-bracket-label"
614
+ >
615
+ [
616
+ 1
617
+ ]
618
+ </span>
619
+ <span
620
+ class="perseus-sr-only"
621
+ >
622
+ [Sentence
623
+ 1
624
+ ]
625
+ </span>
626
+  
627
+ <span>
628
+ indicates that the following sentence is referenced in a question
629
+ </span>
630
+ <span>
631
+ .
632
+ </span>
633
+ </div>
634
+ </div>
635
+ <div
636
+ class="perseus-widget-passage"
637
+ >
638
+ <h3
639
+ class="passage-title"
640
+ >
641
+ <span
642
+ class="mock-KatexProvider"
643
+ >
644
+ <div
645
+ class="perseus-renderer perseus-renderer-responsive"
646
+ >
647
+ <div
648
+ class="paragraph"
649
+ data-perseus-paragraph-index="0"
650
+ >
651
+ <div
652
+ class="paragraph"
653
+ >
654
+ Passage 2
655
+ </div>
656
+ </div>
657
+ </div>
658
+ </span>
659
+ </h3>
660
+ <div
661
+ aria-hidden="true"
662
+ class="line-numbers"
663
+ >
664
+ <span>
665
+ 11
666
+ </span>
667
+ <span>
668
+ 12
669
+ </span>
670
+ <span>
671
+ 13
672
+ </span>
673
+ <span>
674
+ 14
675
+ </span>
676
+ <span>
677
+ 15
678
+ </span>
679
+ <span>
680
+ 16
681
+ </span>
682
+ <span>
683
+ 17
684
+ </span>
685
+ <span>
686
+ 18
687
+ </span>
688
+ <span>
689
+ 19
690
+ </span>
691
+ <span>
692
+ 20
693
+ </span>
694
+ </div>
695
+ <div
696
+ class="passage-text"
697
+ >
698
+ <div
699
+ class="container_6htn2u"
700
+ >
701
+ <div>
702
+ <div>
703
+ <div>
704
+ <div />
705
+ </div>
706
+ </div>
707
+ </div>
708
+ <div
709
+ class="content_gor68n"
710
+ >
711
+ <div>
712
+ <div>
713
+ <div
714
+ class="measurer_1ugaxv"
715
+ >
716
+ <div>
717
+ <div
718
+ class="paragraph"
719
+ />
720
+ <div />
721
+ </div>
722
+ </div>
723
+ <div
724
+ class="paragraph"
725
+ >
726
+ <span>
727
+ The mysterious spotted green pigeon
728
+ </span>
729
+ <span>
730
+ (
731
+ </span>
732
+ <em>
733
+ <span>
734
+ Caloenas maculata
735
+ </span>
736
+ </em>
737
+ <span>
738
+ ) was a relative of the dodo
739
+ </span>
740
+ <span>
741
+ , according to scientists who have examined its genetic make
742
+ </span>
743
+ <span>
744
+ -up
745
+ </span>
746
+ <span
747
+ aria-hidden="true"
748
+ class="perseus-passage-bracket-label"
749
+ >
750
+ [
751
+ 1
752
+ ]
753
+ </span>
754
+ <span
755
+ class="perseus-sr-only"
756
+ >
757
+ [Sentence
758
+ 1
759
+ ]
760
+ </span>
761
+ <span>
762
+ . The authors say their results
763
+ </span>
764
+ <span>
765
+ , published in the open access journal BMC Evolutionary Biology
766
+ </span>
767
+ <span>
768
+ , support a theory that both birds are descended from “island hopping” ancestors
769
+ </span>
770
+ <span>
771
+ .
772
+ </span>
773
+ </div>
774
+ <div
775
+ class="paragraph"
776
+ >
777
+ <span>
778
+ The scientists took DNA from two feathers of the spotted green pigeon
779
+ </span>
780
+ <span>
781
+ . Because of its age
782
+ </span>
783
+ <span>
784
+ , the DNA was highly fragmented
785
+ </span>
786
+ <span>
787
+ , so they focused in on three DNA “mini barcodes” – small sections of DNA which are unique for most bird species
788
+ </span>
789
+ <span>
790
+ . They looked at these sections of the pigeon
791
+ </span>
792
+ <span>
793
+ 's DNA
794
+ </span>
795
+ <span>
796
+ , and compared it to other species
797
+ </span>
798
+ <span>
799
+ .
800
+ </span>
801
+ </div>
802
+ <div
803
+ class="paragraph"
804
+ >
805
+ <span>
806
+ This showed that the spotted green pigeon is indeed a separate species
807
+ </span>
808
+ <span>
809
+ , showing a unique DNA barcode compared to other pigeons
810
+ </span>
811
+ <span>
812
+ . The pigeon is genetically most closely related to the Nicobar pigeon and the dodo and Rodrigues solitaire
813
+ </span>
814
+ <span>
815
+ , both extinct birds from islands near Madagascar
816
+ </span>
817
+ <span>
818
+ . The spotted green pigeon shows signs of a semi
819
+ </span>
820
+ <span>
821
+ -terrestrial island lifestyle and the ability to fly
822
+ </span>
823
+ <span>
824
+ . The closely related Nicobar pigeon shows similar habits and has a preference for travelling between small islands
825
+ </span>
826
+ <span>
827
+ .
828
+ </span>
829
+ </div>
830
+ <div
831
+ class="paragraph"
832
+ >
833
+ <span>
834
+ The scientists say this lifestyle
835
+ </span>
836
+ <span>
837
+ , together with the relationship of both pigeons to the dodo and Rodrigues solitaire
838
+ </span>
839
+ <span>
840
+ , supports an evolutionary theory that the ancestors of these birds were “island hoppers
841
+ </span>
842
+ <span>
843
+ ,” moving between islands around India and Southeast Asia
844
+ </span>
845
+ <span>
846
+ . The birds that settled on particular islands then evolved into the individual species
847
+ </span>
848
+ <span>
849
+ . The dodo
850
+ </span>
851
+ <span>
852
+ 's ancestor managed to hop as far as the island of Mauritius near Madagascar where it then lost the ability to fly
853
+ </span>
854
+ <span>
855
+ .
856
+ </span>
857
+ </div>
858
+ <div
859
+ class="paragraph"
860
+ >
861
+ <span>
862
+ Dr
863
+ </span>
864
+ <span>
865
+ . Tim Heupink
866
+ </span>
867
+ <span>
868
+ , Griffith University Australia says
869
+ </span>
870
+ <span>
871
+ :
872
+ </span>
873
+ <span
874
+ style="display: inline-block; width: 0px; visibility: hidden;"
875
+ >
876
+ _
877
+ </span>
878
+ <span>
879
+ “This study improves our ability to identify novel species from historic remains
880
+ </span>
881
+ <span>
882
+ , and also those that are not novel after all
883
+ </span>
884
+ <span>
885
+ . Ultimately this will help us to measure and understand the extinction of local populations and entire species
886
+ </span>
887
+ <span>
888
+ .”
889
+ </span>
890
+ <span
891
+ style="display: inline-block; width: 0px; visibility: hidden;"
892
+ >
893
+ _
894
+ </span>
895
+ </div>
896
+ </div>
897
+ </div>
898
+ </div>
899
+ </div>
900
+ </div>
901
+ <div
902
+ class="perseus-sr-only"
903
+ >
904
+ End of reading passage.
905
+ </div>
906
+ </div>
907
+ </div>
908
+ </div>
909
+ </div>
910
+ </div>
911
+ </div>
912
+ </div>
913
+ </span>
914
+ </div>
915
+ `;
916
+
917
+ exports[`passage widget should snapshot multiple passages (mobile: true) 1`] = `
918
+ <div>
919
+ <span
920
+ class="mock-KatexProvider"
921
+ >
922
+ <div
923
+ class="perseus-renderer perseus-renderer-responsive"
924
+ >
925
+ <div
926
+ class="paragraph"
927
+ data-perseus-paragraph-index="0"
928
+ >
929
+ <blockquote>
930
+ <div
931
+ class="paragraph"
932
+ >
933
+ Select text to highlight it.
934
+ <em>
935
+ (Laptop/desktop only)
936
+ </em>
937
+ </div>
938
+ </blockquote>
939
+ </div>
940
+ <div
941
+ class="paragraph"
942
+ data-perseus-paragraph-index="1"
943
+ >
944
+ <blockquote>
945
+ <div
946
+ class="paragraph"
947
+ >
948
+ <strong>
949
+ Passage 1 is adapted from
950
+ <em>
951
+ "Ancient DNA Tells Story of Giant Eagle Evolution,"
952
+ </em>
953
+ © 2005 by Public Library of Science. Passage 2 is adapted from Tim Heupink, et al.
954
+ <em>
955
+ "Dodos and Spotted Green Pigeons are Descendants of an Island Hopping Bird,"
956
+ </em>
957
+ © 2014 by BioMed Central.
958
+ </strong>
959
+ </div>
960
+ </blockquote>
961
+ </div>
962
+ <div
963
+ class="paragraph"
964
+ data-perseus-paragraph-index="2"
965
+ >
966
+ <div
967
+ class="paragraph"
968
+ >
969
+ <div
970
+ class="perseus-widget-container widget-nohighlight widget-block"
971
+ >
972
+ <div>
973
+ <div
974
+ class="perseus-widget-passage-container"
975
+ >
976
+ <div
977
+ class="perseus-widget-passage-instructions"
978
+ >
979
+ <div
980
+ class="paragraph"
981
+ >
982
+ <span>
983
+ The symbol
984
+ </span>
985
+ <span
986
+ aria-hidden="true"
987
+ class="perseus-passage-square-label"
988
+ style="display: inline; white-space: nowrap;"
989
+ >
990
+ <span
991
+ style="display: inline-block; color: rgb(255, 255, 255); background-color: rgb(90, 90, 90); padding-left: 10px; padding-right: 10px; user-select: none;"
992
+ >
993
+ 1
994
+ </span>
995
+ </span>
996
+ <span
997
+ class="perseus-sr-only"
998
+ >
999
+ [Marker for question
1000
+ 1
1001
+ ]
1002
+ </span>
1003
+  
1004
+ <span>
1005
+ indicates that question 1 references this portion of the passage
1006
+ </span>
1007
+ <span>
1008
+ .
1009
+ </span>
1010
+ </div>
1011
+ </div>
1012
+ <div
1013
+ class="perseus-widget-passage"
1014
+ >
1015
+ <h3
1016
+ class="passage-title"
1017
+ >
1018
+ <span
1019
+ class="mock-KatexProvider"
1020
+ >
1021
+ <div
1022
+ class="perseus-renderer perseus-renderer-responsive"
1023
+ >
1024
+ <div
1025
+ class="paragraph"
1026
+ data-perseus-paragraph-index="0"
1027
+ >
1028
+ <div
1029
+ class="paragraph"
1030
+ >
1031
+ Passage 1
1032
+ </div>
1033
+ </div>
1034
+ </div>
1035
+ </span>
1036
+ </h3>
1037
+ <div
1038
+ aria-hidden="true"
1039
+ class="line-numbers"
1040
+ >
1041
+ <span>
1042
+ 1
1043
+ </span>
1044
+ <span>
1045
+ 2
1046
+ </span>
1047
+ <span>
1048
+ 3
1049
+ </span>
1050
+ <span
1051
+ class="line-marker"
1052
+ >
1053
+ Line
1054
+ </span>
1055
+ <span>
1056
+ 5
1057
+ </span>
1058
+ <span>
1059
+ 6
1060
+ </span>
1061
+ <span>
1062
+ 7
1063
+ </span>
1064
+ <span>
1065
+ 8
1066
+ </span>
1067
+ <span>
1068
+ 9
1069
+ </span>
1070
+ <span>
1071
+ 10
1072
+ </span>
1073
+ </div>
1074
+ <div
1075
+ class="passage-text"
1076
+ >
1077
+ <div
1078
+ class="container_6htn2u"
1079
+ >
1080
+ <div>
1081
+ <div>
1082
+ <div>
1083
+ <div />
1084
+ </div>
1085
+ </div>
1086
+ </div>
1087
+ <div
1088
+ class="content_gor68n"
1089
+ >
1090
+ <div>
1091
+ <div>
1092
+ <div
1093
+ class="measurer_1ugaxv"
1094
+ >
1095
+ <div>
1096
+ <div
1097
+ class="paragraph"
1098
+ />
1099
+ <div />
1100
+ </div>
1101
+ </div>
1102
+ <div
1103
+ class="paragraph"
1104
+ >
1105
+ <span
1106
+ style="display: inline-block; width: 0px; visibility: hidden;"
1107
+ >
1108
+ _
1109
+ </span>
1110
+ <span>
1111
+ For reasons that are not entirely clear
1112
+ </span>
1113
+ <span>
1114
+ , when animals make their way to isolated islands
1115
+ </span>
1116
+ <span
1117
+ aria-hidden="true"
1118
+ class="perseus-passage-square-label"
1119
+ style="display: inline; white-space: nowrap;"
1120
+ >
1121
+ <span
1122
+ style="display: inline-block; color: rgb(255, 255, 255); background-color: rgb(90, 90, 90); padding-left: 10px; padding-right: 10px; user-select: none;"
1123
+ >
1124
+ 1
1125
+ </span>
1126
+ </span>
1127
+ <span
1128
+ class="perseus-sr-only"
1129
+ >
1130
+ [Marker for question
1131
+ 1
1132
+ ]
1133
+ </span>
1134
+ <span>
1135
+ , they tend to evolve relatively quickly toward an outsized or pint
1136
+ </span>
1137
+ <span>
1138
+ -sized version of their mainland counterpart
1139
+ </span>
1140
+ <span>
1141
+ .
1142
+ </span>
1143
+ <span
1144
+ style="display: inline-block; width: 0px; visibility: hidden;"
1145
+ >
1146
+ _
1147
+ </span>
1148
+ <span>
1149
+
1150
+ </span>
1151
+ </div>
1152
+ <div
1153
+ class="paragraph"
1154
+ >
1155
+ <span
1156
+ style="display: inline-block; width: 0px; visibility: hidden;"
1157
+ >
1158
+ _
1159
+ </span>
1160
+ <span>
1161
+ Perhaps the most famous example of an island giant—and
1162
+ </span>
1163
+ <span>
1164
+ , sadly
1165
+ </span>
1166
+ <span>
1167
+ , of species extinction—is the dodo
1168
+ </span>
1169
+ <span>
1170
+ , once found on the Indian Ocean island of Mauritius
1171
+ </span>
1172
+ <span>
1173
+ .
1174
+ </span>
1175
+ <span
1176
+ style="display: inline-block; width: 0px; visibility: hidden;"
1177
+ >
1178
+ _
1179
+ </span>
1180
+ <span>
1181
+
1182
+ </span>
1183
+ <span
1184
+ style="display: inline-block; width: 0px; visibility: hidden;"
1185
+ >
1186
+ _
1187
+ </span>
1188
+ <span>
1189
+ When the dodo
1190
+ </span>
1191
+ <span>
1192
+ 's ancestor
1193
+ </span>
1194
+ <span>
1195
+ (thought to be a migratory pigeon
1196
+ </span>
1197
+ <span>
1198
+ ) settled on this island with abundant food
1199
+ </span>
1200
+ <span>
1201
+ , no competition from terrestrial mammals
1202
+ </span>
1203
+ <span>
1204
+ , and no predators
1205
+ </span>
1206
+ <span>
1207
+ , it could survive without flying
1208
+ </span>
1209
+ <span>
1210
+ , and thus was freed from the energetic and size constraints of flight
1211
+ </span>
1212
+ <span>
1213
+ .
1214
+ </span>
1215
+ <span
1216
+ style="display: inline-block; width: 0px; visibility: hidden;"
1217
+ >
1218
+ _
1219
+ </span>
1220
+ <span>
1221
+
1222
+ </span>
1223
+ <span
1224
+ style="display: inline-block; width: 0px; visibility: hidden;"
1225
+ >
1226
+ _
1227
+ </span>
1228
+ <span>
1229
+ New Zealand also had avian giants
1230
+ </span>
1231
+ <span>
1232
+ , now extinct
1233
+ </span>
1234
+ <span>
1235
+ , including the flightless moa
1236
+ </span>
1237
+ <span>
1238
+ , an ostrich
1239
+ </span>
1240
+ <span>
1241
+ -like bird
1242
+ </span>
1243
+ <span>
1244
+ , and Haast
1245
+ </span>
1246
+ <span>
1247
+ 's eagle
1248
+ </span>
1249
+ <span>
1250
+ (
1251
+ </span>
1252
+ <em>
1253
+ <span>
1254
+ Harpagornis moorei
1255
+ </span>
1256
+ </em>
1257
+ <span>
1258
+ )
1259
+ </span>
1260
+ <span>
1261
+ , which had a wingspan up to 3 meters
1262
+ </span>
1263
+ <span>
1264
+ .
1265
+ </span>
1266
+ <span
1267
+ style="display: inline-block; width: 0px; visibility: hidden;"
1268
+ >
1269
+ _
1270
+ </span>
1271
+ <span>
1272
+
1273
+ </span>
1274
+ <span
1275
+ style="display: inline-block; width: 0px; visibility: hidden;"
1276
+ >
1277
+ _
1278
+ </span>
1279
+ <span>
1280
+ Though Haast
1281
+ </span>
1282
+ <span>
1283
+ 's eagle could fly—and presumably used its wings to
1284
+ </span>
1285
+ <span
1286
+ style="display: inline-block; width: 0px; visibility: hidden;"
1287
+ >
1288
+ _
1289
+ </span>
1290
+ <span>
1291
+ launch
1292
+ </span>
1293
+ <span
1294
+ style="display: inline-block; width: 0px; visibility: hidden;"
1295
+ >
1296
+ _
1297
+ </span>
1298
+ <span>
1299
+ brutal attacks on the hapless moa—its body mass
1300
+ </span>
1301
+ <span>
1302
+ (10–14 kilograms
1303
+ </span>
1304
+ <span>
1305
+ ) pushed the limits for self
1306
+ </span>
1307
+ <span>
1308
+ -propelled flight
1309
+ </span>
1310
+ <span>
1311
+ .
1312
+ </span>
1313
+ <span
1314
+ style="display: inline-block; width: 0px; visibility: hidden;"
1315
+ >
1316
+ _
1317
+ </span>
1318
+ </div>
1319
+ <div
1320
+ class="paragraph"
1321
+ >
1322
+ <span
1323
+ style="display: inline-block; width: 0px; visibility: hidden;"
1324
+ >
1325
+ _
1326
+ </span>
1327
+ <span>
1328
+ As extreme evolutionary examples
1329
+ </span>
1330
+ <span>
1331
+ , these island birds can offer insights into the forces and events shaping evolutionary change
1332
+ </span>
1333
+ <span>
1334
+ .
1335
+ </span>
1336
+ <span
1337
+ style="display: inline-block; width: 0px; visibility: hidden;"
1338
+ >
1339
+ _
1340
+ </span>
1341
+ <span>
1342
+ In a new study
1343
+ </span>
1344
+ <span>
1345
+ , Michael Bunce et al
1346
+ </span>
1347
+ <span>
1348
+ . compared ancient mitochondrial DNA extracted from Haast
1349
+ </span>
1350
+ <span>
1351
+ 's eagle bones with DNA sequences of 16 living eagle species to better characterize the evolutionary history of the extinct giant raptor
1352
+ </span>
1353
+ <span>
1354
+ .
1355
+ </span>
1356
+ <span
1357
+ style="display: inline-block; width: 0px; visibility: hidden;"
1358
+ >
1359
+ _
1360
+ </span>
1361
+ <span>
1362
+ Their results suggest the extinct raptor underwent a rapid evolutionary transformation that belies its kinship to some of the world
1363
+ </span>
1364
+ <span>
1365
+ 's smallest eagle species
1366
+ </span>
1367
+ <span>
1368
+ .
1369
+ </span>
1370
+ <span
1371
+ style="display: inline-block; width: 0px; visibility: hidden;"
1372
+ >
1373
+ _
1374
+ </span>
1375
+ </div>
1376
+ <div
1377
+ class="paragraph"
1378
+ >
1379
+ <span>
1380
+ The authors characterized the rates of sequence evolution within mitochondrial DNA to establish the evolutionary relationships between the different eagle species
1381
+ </span>
1382
+ <span>
1383
+ . Their analysis places Haast
1384
+ </span>
1385
+ <span>
1386
+ 's eagle in the same evolutionary lineage as a group of small eagle species in the genus
1387
+ </span>
1388
+ <em>
1389
+ <span>
1390
+ Hieraaetus
1391
+ </span>
1392
+ </em>
1393
+ <span>
1394
+ . Surprisingly
1395
+ </span>
1396
+ <span>
1397
+ , the genetic distance separating the giant eagle and its more diminutive
1398
+ </span>
1399
+ <em>
1400
+ <span>
1401
+ Hieraaetus
1402
+ </span>
1403
+ </em>
1404
+ <span>
1405
+ cousins from their last
1406
+ </span>
1407
+ <span
1408
+ style="display: inline-block; width: 0px; visibility: hidden;"
1409
+ >
1410
+ _
1411
+ </span>
1412
+ <span>
1413
+ common
1414
+ </span>
1415
+ <span
1416
+ style="display: inline-block; width: 0px; visibility: hidden;"
1417
+ >
1418
+ _
1419
+ </span>
1420
+ <span>
1421
+ ancestor is relatively small
1422
+ </span>
1423
+ <span>
1424
+ .
1425
+ </span>
1426
+ </div>
1427
+ </div>
1428
+ </div>
1429
+ </div>
1430
+ </div>
1431
+ </div>
1432
+ <h4
1433
+ class="perseus-sr-only"
1434
+ >
1435
+ Beginning of reading passage footnotes.
1436
+ </h4>
1437
+ <div
1438
+ class="footnotes"
1439
+ >
1440
+ <div
1441
+ class="paragraph"
1442
+ >
1443
+ <span>
1444
+ An example footnote
1445
+ </span>
1446
+ </div>
1447
+ </div>
1448
+ <div
1449
+ class="perseus-sr-only"
1450
+ >
1451
+ End of reading passage.
1452
+ </div>
1453
+ </div>
1454
+ </div>
1455
+ </div>
1456
+ </div>
1457
+ </div>
1458
+ </div>
1459
+ <div
1460
+ class="paragraph"
1461
+ data-perseus-paragraph-index="3"
1462
+ >
1463
+ <div
1464
+ class="paragraph"
1465
+ >
1466
+ <div
1467
+ class="perseus-widget-container widget-nohighlight widget-block"
1468
+ >
1469
+ <div>
1470
+ <div
1471
+ class="perseus-widget-passage-container"
1472
+ >
1473
+ <div
1474
+ class="perseus-widget-passage-instructions"
1475
+ >
1476
+ <div
1477
+ class="paragraph"
1478
+ >
1479
+ <span>
1480
+ The symbol
1481
+ </span>
1482
+ <span
1483
+ aria-hidden="true"
1484
+ class="perseus-passage-bracket-label"
1485
+ >
1486
+ [
1487
+ 1
1488
+ ]
1489
+ </span>
1490
+ <span
1491
+ class="perseus-sr-only"
1492
+ >
1493
+ [Sentence
1494
+ 1
1495
+ ]
1496
+ </span>
1497
+  
1498
+ <span>
1499
+ indicates that the following sentence is referenced in a question
1500
+ </span>
1501
+ <span>
1502
+ .
1503
+ </span>
1504
+ </div>
1505
+ </div>
1506
+ <div
1507
+ class="perseus-widget-passage"
1508
+ >
1509
+ <h3
1510
+ class="passage-title"
1511
+ >
1512
+ <span
1513
+ class="mock-KatexProvider"
1514
+ >
1515
+ <div
1516
+ class="perseus-renderer perseus-renderer-responsive"
1517
+ >
1518
+ <div
1519
+ class="paragraph"
1520
+ data-perseus-paragraph-index="0"
1521
+ >
1522
+ <div
1523
+ class="paragraph"
1524
+ >
1525
+ Passage 2
1526
+ </div>
1527
+ </div>
1528
+ </div>
1529
+ </span>
1530
+ </h3>
1531
+ <div
1532
+ aria-hidden="true"
1533
+ class="line-numbers"
1534
+ >
1535
+ <span>
1536
+ 11
1537
+ </span>
1538
+ <span>
1539
+ 12
1540
+ </span>
1541
+ <span>
1542
+ 13
1543
+ </span>
1544
+ <span>
1545
+ 14
1546
+ </span>
1547
+ <span>
1548
+ 15
1549
+ </span>
1550
+ <span>
1551
+ 16
1552
+ </span>
1553
+ <span>
1554
+ 17
1555
+ </span>
1556
+ <span>
1557
+ 18
1558
+ </span>
1559
+ <span>
1560
+ 19
1561
+ </span>
1562
+ <span>
1563
+ 20
1564
+ </span>
1565
+ </div>
1566
+ <div
1567
+ class="passage-text"
1568
+ >
1569
+ <div
1570
+ class="container_6htn2u"
1571
+ >
1572
+ <div>
1573
+ <div>
1574
+ <div>
1575
+ <div />
1576
+ </div>
1577
+ </div>
1578
+ </div>
1579
+ <div
1580
+ class="content_gor68n"
1581
+ >
1582
+ <div>
1583
+ <div>
1584
+ <div
1585
+ class="measurer_1ugaxv"
1586
+ >
1587
+ <div>
1588
+ <div
1589
+ class="paragraph"
1590
+ />
1591
+ <div />
1592
+ </div>
1593
+ </div>
1594
+ <div
1595
+ class="paragraph"
1596
+ >
1597
+ <span>
1598
+ The mysterious spotted green pigeon
1599
+ </span>
1600
+ <span>
1601
+ (
1602
+ </span>
1603
+ <em>
1604
+ <span>
1605
+ Caloenas maculata
1606
+ </span>
1607
+ </em>
1608
+ <span>
1609
+ ) was a relative of the dodo
1610
+ </span>
1611
+ <span>
1612
+ , according to scientists who have examined its genetic make
1613
+ </span>
1614
+ <span>
1615
+ -up
1616
+ </span>
1617
+ <span
1618
+ aria-hidden="true"
1619
+ class="perseus-passage-bracket-label"
1620
+ >
1621
+ [
1622
+ 1
1623
+ ]
1624
+ </span>
1625
+ <span
1626
+ class="perseus-sr-only"
1627
+ >
1628
+ [Sentence
1629
+ 1
1630
+ ]
1631
+ </span>
1632
+ <span>
1633
+ . The authors say their results
1634
+ </span>
1635
+ <span>
1636
+ , published in the open access journal BMC Evolutionary Biology
1637
+ </span>
1638
+ <span>
1639
+ , support a theory that both birds are descended from “island hopping” ancestors
1640
+ </span>
1641
+ <span>
1642
+ .
1643
+ </span>
1644
+ </div>
1645
+ <div
1646
+ class="paragraph"
1647
+ >
1648
+ <span>
1649
+ The scientists took DNA from two feathers of the spotted green pigeon
1650
+ </span>
1651
+ <span>
1652
+ . Because of its age
1653
+ </span>
1654
+ <span>
1655
+ , the DNA was highly fragmented
1656
+ </span>
1657
+ <span>
1658
+ , so they focused in on three DNA “mini barcodes” – small sections of DNA which are unique for most bird species
1659
+ </span>
1660
+ <span>
1661
+ . They looked at these sections of the pigeon
1662
+ </span>
1663
+ <span>
1664
+ 's DNA
1665
+ </span>
1666
+ <span>
1667
+ , and compared it to other species
1668
+ </span>
1669
+ <span>
1670
+ .
1671
+ </span>
1672
+ </div>
1673
+ <div
1674
+ class="paragraph"
1675
+ >
1676
+ <span>
1677
+ This showed that the spotted green pigeon is indeed a separate species
1678
+ </span>
1679
+ <span>
1680
+ , showing a unique DNA barcode compared to other pigeons
1681
+ </span>
1682
+ <span>
1683
+ . The pigeon is genetically most closely related to the Nicobar pigeon and the dodo and Rodrigues solitaire
1684
+ </span>
1685
+ <span>
1686
+ , both extinct birds from islands near Madagascar
1687
+ </span>
1688
+ <span>
1689
+ . The spotted green pigeon shows signs of a semi
1690
+ </span>
1691
+ <span>
1692
+ -terrestrial island lifestyle and the ability to fly
1693
+ </span>
1694
+ <span>
1695
+ . The closely related Nicobar pigeon shows similar habits and has a preference for travelling between small islands
1696
+ </span>
1697
+ <span>
1698
+ .
1699
+ </span>
1700
+ </div>
1701
+ <div
1702
+ class="paragraph"
1703
+ >
1704
+ <span>
1705
+ The scientists say this lifestyle
1706
+ </span>
1707
+ <span>
1708
+ , together with the relationship of both pigeons to the dodo and Rodrigues solitaire
1709
+ </span>
1710
+ <span>
1711
+ , supports an evolutionary theory that the ancestors of these birds were “island hoppers
1712
+ </span>
1713
+ <span>
1714
+ ,” moving between islands around India and Southeast Asia
1715
+ </span>
1716
+ <span>
1717
+ . The birds that settled on particular islands then evolved into the individual species
1718
+ </span>
1719
+ <span>
1720
+ . The dodo
1721
+ </span>
1722
+ <span>
1723
+ 's ancestor managed to hop as far as the island of Mauritius near Madagascar where it then lost the ability to fly
1724
+ </span>
1725
+ <span>
1726
+ .
1727
+ </span>
1728
+ </div>
1729
+ <div
1730
+ class="paragraph"
1731
+ >
1732
+ <span>
1733
+ Dr
1734
+ </span>
1735
+ <span>
1736
+ . Tim Heupink
1737
+ </span>
1738
+ <span>
1739
+ , Griffith University Australia says
1740
+ </span>
1741
+ <span>
1742
+ :
1743
+ </span>
1744
+ <span
1745
+ style="display: inline-block; width: 0px; visibility: hidden;"
1746
+ >
1747
+ _
1748
+ </span>
1749
+ <span>
1750
+ “This study improves our ability to identify novel species from historic remains
1751
+ </span>
1752
+ <span>
1753
+ , and also those that are not novel after all
1754
+ </span>
1755
+ <span>
1756
+ . Ultimately this will help us to measure and understand the extinction of local populations and entire species
1757
+ </span>
1758
+ <span>
1759
+ .”
1760
+ </span>
1761
+ <span
1762
+ style="display: inline-block; width: 0px; visibility: hidden;"
1763
+ >
1764
+ _
1765
+ </span>
1766
+ </div>
1767
+ </div>
1768
+ </div>
1769
+ </div>
1770
+ </div>
1771
+ </div>
1772
+ <div
1773
+ class="perseus-sr-only"
1774
+ >
1775
+ End of reading passage.
1776
+ </div>
1777
+ </div>
1778
+ </div>
1779
+ </div>
1780
+ </div>
1781
+ </div>
1782
+ </div>
1783
+ </div>
1784
+ </span>
1785
+ </div>
1786
+ `;
1787
+
1788
+ exports[`passage widget should snapshot simple passage (mobile: false) 1`] = `
1789
+ <div>
1790
+ <span
1791
+ class="mock-KatexProvider"
1792
+ >
1793
+ <div
1794
+ class="perseus-renderer perseus-renderer-responsive"
1795
+ >
1796
+ <div
1797
+ class="paragraph"
1798
+ data-perseus-paragraph-index="0"
1799
+ >
1800
+ <div
1801
+ class="paragraph"
1802
+ >
1803
+ <div
1804
+ class="perseus-widget-container widget-nohighlight widget-block"
1805
+ >
1806
+ <div>
1807
+ <div
1808
+ class="perseus-widget-passage-container"
1809
+ >
1810
+ <div
1811
+ class="perseus-widget-passage-instructions"
1812
+ >
1813
+
1814
+
1815
+ </div>
1816
+ <div
1817
+ class="perseus-widget-passage"
1818
+ >
1819
+ <h3
1820
+ class="perseus-sr-only"
1821
+ >
1822
+ Beginning of reading passage.
1823
+ </h3>
1824
+ <div
1825
+ class="passage-text"
1826
+ >
1827
+ <div
1828
+ class="container_6htn2u"
1829
+ >
1830
+ <div>
1831
+ <div>
1832
+ <div>
1833
+ <div />
1834
+ </div>
1835
+ </div>
1836
+ </div>
1837
+ <div
1838
+ class="content_gor68n"
1839
+ >
1840
+ <div>
1841
+ <div>
1842
+ <div
1843
+ class="measurer_1ugaxv"
1844
+ >
1845
+ <div>
1846
+ <div
1847
+ class="paragraph"
1848
+ />
1849
+ <div />
1850
+ </div>
1851
+ </div>
1852
+ <div
1853
+ class="paragraph"
1854
+ >
1855
+ <span>
1856
+ Sociologists study folktales because they provide a means of understanding the distinctive values of a culture
1857
+ </span>
1858
+ <span>
1859
+ . However
1860
+ </span>
1861
+ <span>
1862
+ , the folktales in almost all cultures are adaptations of the same ancient narratives to the local milieu
1863
+ </span>
1864
+ <span>
1865
+ .
1866
+ </span>
1867
+ </div>
1868
+ </div>
1869
+ </div>
1870
+ </div>
1871
+ </div>
1872
+ </div>
1873
+ <div
1874
+ class="perseus-sr-only"
1875
+ >
1876
+ End of reading passage.
1877
+ </div>
1878
+ </div>
1879
+ </div>
1880
+ </div>
1881
+ </div>
1882
+ </div>
1883
+ </div>
1884
+ </div>
1885
+ </span>
1886
+ </div>
1887
+ `;
1888
+
1889
+ exports[`passage widget should snapshot simple passage (mobile: true) 1`] = `
1890
+ <div>
1891
+ <span
1892
+ class="mock-KatexProvider"
1893
+ >
1894
+ <div
1895
+ class="perseus-renderer perseus-renderer-responsive"
1896
+ >
1897
+ <div
1898
+ class="paragraph"
1899
+ data-perseus-paragraph-index="0"
1900
+ >
1901
+ <div
1902
+ class="paragraph"
1903
+ >
1904
+ <div
1905
+ class="perseus-widget-container widget-nohighlight widget-block"
1906
+ >
1907
+ <div>
1908
+ <div
1909
+ class="perseus-widget-passage-container"
1910
+ >
1911
+ <div
1912
+ class="perseus-widget-passage-instructions"
1913
+ >
1914
+
1915
+
1916
+ </div>
1917
+ <div
1918
+ class="perseus-widget-passage"
1919
+ >
1920
+ <h3
1921
+ class="perseus-sr-only"
1922
+ >
1923
+ Beginning of reading passage.
1924
+ </h3>
1925
+ <div
1926
+ class="passage-text"
1927
+ >
1928
+ <div
1929
+ class="container_6htn2u"
1930
+ >
1931
+ <div>
1932
+ <div>
1933
+ <div>
1934
+ <div />
1935
+ </div>
1936
+ </div>
1937
+ </div>
1938
+ <div
1939
+ class="content_gor68n"
1940
+ >
1941
+ <div>
1942
+ <div>
1943
+ <div
1944
+ class="measurer_1ugaxv"
1945
+ >
1946
+ <div>
1947
+ <div
1948
+ class="paragraph"
1949
+ />
1950
+ <div />
1951
+ </div>
1952
+ </div>
1953
+ <div
1954
+ class="paragraph"
1955
+ >
1956
+ <span>
1957
+ Sociologists study folktales because they provide a means of understanding the distinctive values of a culture
1958
+ </span>
1959
+ <span>
1960
+ . However
1961
+ </span>
1962
+ <span>
1963
+ , the folktales in almost all cultures are adaptations of the same ancient narratives to the local milieu
1964
+ </span>
1965
+ <span>
1966
+ .
1967
+ </span>
1968
+ </div>
1969
+ </div>
1970
+ </div>
1971
+ </div>
1972
+ </div>
1973
+ </div>
1974
+ <div
1975
+ class="perseus-sr-only"
1976
+ >
1977
+ End of reading passage.
1978
+ </div>
1979
+ </div>
1980
+ </div>
1981
+ </div>
1982
+ </div>
1983
+ </div>
1984
+ </div>
1985
+ </div>
1986
+ </span>
1987
+ </div>
1988
+ `;