@instructure/canvas-rce 5.14.0 → 5.14.2

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 (484) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/DEVELOPMENT.md +1 -1
  3. package/README.md +0 -8
  4. package/__tests__/common/indicate.test.js +84 -0
  5. package/__tests__/common/mimeClass.test.js +85 -0
  6. package/__tests__/module/contentInsertionUtils.test.js +52 -0
  7. package/__tests__/module/indicatorRegion.test.js +75 -0
  8. package/__tests__/module/normalizeLocale.test.js +46 -0
  9. package/__tests__/module/normalizeProps.test.js +51 -0
  10. package/__tests__/module/sanitizePlugins.test.js +48 -0
  11. package/__tests__/module/wrapInitCb.test.js +56 -0
  12. package/__tests__/rcs/api.test.js +819 -0
  13. package/{mocha-reporter-config.js → __tests__/sidebar/actions/all_files.test.js} +10 -9
  14. package/__tests__/sidebar/actions/data.test.js +196 -0
  15. package/__tests__/sidebar/actions/utils.js +44 -0
  16. package/__tests__/sidebar/reducers/all_files.test.js +28 -0
  17. package/babel.config.js +3 -1
  18. package/build.sh +7 -7
  19. package/es/bridge/Bridge.js +8 -56
  20. package/es/bridge/index.js +1 -0
  21. package/es/canvasFileBrowser/FileBrowser.js +12 -59
  22. package/es/canvasFileBrowser/en-US.js +3 -6
  23. package/es/common/FlashAlert.js +7 -28
  24. package/es/common/browser.js +4 -2
  25. package/es/common/fileUrl.js +104 -59
  26. package/es/common/incremental-loading/LoadMoreButton.js +1 -0
  27. package/es/common/incremental-loading/LoadingIndicator.js +1 -2
  28. package/es/common/incremental-loading/LoadingStatus.js +1 -2
  29. package/es/common/incremental-loading/index.js +1 -0
  30. package/es/common/incremental-loading/useIncrementalLoading.js +1 -3
  31. package/es/common/indicate.js +15 -8
  32. package/es/common/mimeClass.js +3 -4
  33. package/es/common/natcompare.js +1 -4
  34. package/es/defaultTinymceConfig.js +5 -3
  35. package/es/elementDenylist.js +1 -0
  36. package/es/enhance-user-content/doc_previews.js +17 -28
  37. package/es/enhance-user-content/enhance_user_content.js +28 -60
  38. package/es/enhance-user-content/external_links.js +5 -8
  39. package/es/enhance-user-content/index.js +1 -0
  40. package/es/enhance-user-content/instructure_helper.js +25 -38
  41. package/es/enhance-user-content/jqueryish_funcs.js +8 -11
  42. package/es/enhance-user-content/mathml.js +35 -82
  43. package/es/enhance-user-content/media_comment_thumbnail.js +5 -17
  44. package/es/format-message.js +3 -4
  45. package/es/getThemeVars.js +8 -6
  46. package/es/getTranslations.js +1 -78
  47. package/es/index.js +3 -1
  48. package/es/rce/AlertMessageArea.js +1 -1
  49. package/es/rce/DraggingBlocker.js +4 -2
  50. package/es/rce/KeyboardShortcutModal.js +1 -0
  51. package/es/rce/RCE.js +12 -11
  52. package/es/rce/RCEGlobals.js +12 -10
  53. package/es/rce/RCEVariants.js +27 -10
  54. package/es/rce/RCEWrapper.js +167 -386
  55. package/es/rce/RCEWrapperProps.js +8 -3
  56. package/es/rce/RceHtmlEditor.js +5 -8
  57. package/es/rce/ResizeHandle.js +3 -8
  58. package/es/rce/RestoreAutoSaveModal.js +1 -2
  59. package/es/rce/ShowOnFocusButton/index.js +0 -6
  60. package/es/rce/StatusBar.js +8 -37
  61. package/es/rce/alertHandler.js +1 -4
  62. package/es/rce/contentInsertion.js +35 -57
  63. package/es/rce/contentInsertionUtils.js +6 -8
  64. package/es/rce/contentRendering.js +7 -12
  65. package/es/rce/customEvents.js +1 -0
  66. package/es/rce/editorLanguage.js +22 -10
  67. package/es/rce/indicatorRegion.js +6 -5
  68. package/es/rce/normalizeLocale.js +5 -3
  69. package/es/rce/normalizeProps.js +3 -1
  70. package/es/rce/plugins/instructure-ui-icons/plugin.js +21 -3
  71. package/es/rce/plugins/instructure_color/clickCallback.js +84 -0
  72. package/es/rce/plugins/instructure_color/components/ColorPicker.js +299 -0
  73. package/es/rce/plugins/instructure_color/components/ColorPopup.js +68 -0
  74. package/es/rce/plugins/instructure_color/components/colorUtils.js +60 -0
  75. package/es/rce/plugins/instructure_color/plugin.js +40 -0
  76. package/es/rce/plugins/instructure_condensed_buttons/core/ListUtils.js +10 -3
  77. package/es/rce/plugins/instructure_condensed_buttons/plugin.js +1 -0
  78. package/es/rce/plugins/instructure_condensed_buttons/ui/alignment-button.js +1 -2
  79. package/es/rce/plugins/instructure_condensed_buttons/ui/directionality-button.js +3 -2
  80. package/es/rce/plugins/instructure_condensed_buttons/ui/indent-outdent-button.js +1 -0
  81. package/es/rce/plugins/instructure_condensed_buttons/ui/list-button.js +22 -15
  82. package/es/rce/plugins/instructure_condensed_buttons/ui/subscript-superscript-button.js +1 -2
  83. package/es/rce/plugins/instructure_documents/clickCallback.js +1 -0
  84. package/es/rce/plugins/instructure_documents/components/DocumentsPanel.js +1 -9
  85. package/es/rce/plugins/instructure_documents/components/Link.js +3 -18
  86. package/es/rce/plugins/instructure_documents/plugin.js +7 -14
  87. package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedOnlySyntax.js +4 -2
  88. package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedPreference.js +1 -2
  89. package/es/rce/plugins/instructure_equation/EquationEditorModal/index.js +12 -29
  90. package/es/rce/plugins/instructure_equation/EquationEditorModal/latexTextareaUtil.js +11 -12
  91. package/es/rce/plugins/instructure_equation/EquationEditorModal/parseLatex.js +4 -3
  92. package/es/rce/plugins/instructure_equation/EquationEditorModal/styles.js +4 -2
  93. package/es/rce/plugins/instructure_equation/EquationEditorToolbar/buttons.js +13 -7
  94. package/es/rce/plugins/instructure_equation/EquationEditorToolbar/index.js +4 -7
  95. package/es/rce/plugins/instructure_equation/MathIcon/index.js +1 -1
  96. package/es/rce/plugins/instructure_equation/MathIcon/svgs.js +1 -1
  97. package/es/rce/plugins/instructure_equation/clickCallback.js +2 -5
  98. package/es/rce/plugins/instructure_equation/mathlive/index.js +1 -1
  99. package/es/rce/plugins/instructure_equation/plugin.js +7 -10
  100. package/es/rce/plugins/instructure_fullscreen/plugin.js +3 -6
  101. package/es/rce/plugins/instructure_html_view/clickCallback.js +1 -0
  102. package/es/rce/plugins/instructure_html_view/plugin.js +5 -4
  103. package/es/rce/plugins/instructure_icon_maker/clickCallback.js +2 -4
  104. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ColorSection.js +1 -2
  105. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/CreateIconMakerForm.js +1 -0
  106. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Footer.js +1 -0
  107. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Group.js +1 -0
  108. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Header.js +1 -2
  109. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Course.js +25 -22
  110. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageOptions.js +7 -11
  111. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageSection.js +27 -23
  112. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ModeSelect.js +5 -4
  113. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/index.js +11 -9
  114. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/svg.js +1 -0
  115. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGList.js +5 -4
  116. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGThumbnail.js +1 -3
  117. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/index.js +7 -7
  118. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/svg.js +1 -0
  119. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Upload.js +27 -20
  120. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/index.js +1 -0
  121. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/propTypes.js +1 -0
  122. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/utils.js +1 -0
  123. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Preview.js +4 -4
  124. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ShapeSection.js +1 -2
  125. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/TextSection.js +1 -5
  126. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/index.js +1 -0
  127. package/es/rce/plugins/instructure_icon_maker/components/IconMakerTray.js +18 -33
  128. package/es/rce/plugins/instructure_icon_maker/components/SavedIconMakerList.js +4 -4
  129. package/es/rce/plugins/instructure_icon_maker/plugin.js +10 -14
  130. package/es/rce/plugins/instructure_icon_maker/reducers/imageSection.js +37 -38
  131. package/es/rce/plugins/instructure_icon_maker/reducers/svgSettings.js +24 -24
  132. package/es/rce/plugins/instructure_icon_maker/registerEditToolbar.js +1 -3
  133. package/es/rce/plugins/instructure_icon_maker/svg/constants.js +4 -3
  134. package/es/rce/plugins/instructure_icon_maker/svg/font.js +3 -1
  135. package/es/rce/plugins/instructure_icon_maker/svg/image.js +69 -83
  136. package/es/rce/plugins/instructure_icon_maker/svg/index.js +11 -15
  137. package/es/rce/plugins/instructure_icon_maker/svg/metadata.js +1 -0
  138. package/es/rce/plugins/instructure_icon_maker/svg/settings.js +32 -39
  139. package/es/rce/plugins/instructure_icon_maker/svg/shape.js +1 -49
  140. package/es/rce/plugins/instructure_icon_maker/svg/text.js +7 -92
  141. package/es/rce/plugins/instructure_icon_maker/svg/utils.js +1 -7
  142. package/es/rce/plugins/instructure_icon_maker/utils/IconMakerClose.js +2 -6
  143. package/es/rce/plugins/instructure_icon_maker/utils/IconMakerFormHasChanges.js +1 -15
  144. package/es/rce/plugins/instructure_icon_maker/utils/addIconMakerAttributes.js +3 -4
  145. package/es/rce/plugins/instructure_icon_maker/utils/iconValidation.js +1 -1
  146. package/es/rce/plugins/instructure_icon_maker/utils/iconsLabels.js +1 -0
  147. package/es/rce/plugins/instructure_icon_maker/utils/useDebouncedValue.js +12 -13
  148. package/es/rce/plugins/instructure_image/ImageEmbedOptions.js +6 -24
  149. package/es/rce/plugins/instructure_image/ImageList/Image.js +1 -6
  150. package/es/rce/plugins/instructure_image/ImageList/index.js +1 -2
  151. package/es/rce/plugins/instructure_image/ImageOptionsTray/TrayController.js +7 -27
  152. package/es/rce/plugins/instructure_image/ImageOptionsTray/index.js +3 -16
  153. package/es/rce/plugins/instructure_image/Images/index.js +1 -3
  154. package/es/rce/plugins/instructure_image/clickCallback.js +1 -0
  155. package/es/rce/plugins/instructure_image/plugin.js +13 -18
  156. package/es/rce/plugins/instructure_links/clickCallback.js +1 -0
  157. package/es/rce/plugins/instructure_links/components/AccordionSection.js +1 -0
  158. package/es/rce/plugins/instructure_links/components/CollectionPanel.js +1 -3
  159. package/es/rce/plugins/instructure_links/components/Link.js +7 -19
  160. package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/LinkOptionsDialogController.js +1 -21
  161. package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/index.js +1 -4
  162. package/es/rce/plugins/instructure_links/components/LinkOptionsTray/LinkOptionsTrayController.js +3 -20
  163. package/es/rce/plugins/instructure_links/components/LinkOptionsTray/index.js +1 -12
  164. package/es/rce/plugins/instructure_links/components/LinkSet.js +4 -20
  165. package/es/rce/plugins/instructure_links/components/LinksPanel.js +1 -2
  166. package/es/rce/plugins/instructure_links/components/NavigationPanel.js +7 -9
  167. package/es/rce/plugins/instructure_links/components/NoResults.js +1 -7
  168. package/es/rce/plugins/instructure_links/plugin.js +17 -40
  169. package/es/rce/plugins/instructure_links/validateURL.js +81 -36
  170. package/es/rce/plugins/instructure_media_embed/clickCallback.js +2 -5
  171. package/es/rce/plugins/instructure_media_embed/components/Embed.js +1 -0
  172. package/es/rce/plugins/instructure_media_embed/plugin.js +7 -3
  173. package/es/rce/plugins/instructure_paste/pasteMenuCommand.js +1 -5
  174. package/es/rce/plugins/instructure_paste/plugin.js +27 -29
  175. package/es/rce/plugins/instructure_rce_external_tools/ExternalToolsEnv.js +14 -53
  176. package/es/rce/plugins/instructure_rce_external_tools/RceToolWrapper.js +21 -49
  177. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialog.js +11 -42
  178. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogModal.js +1 -2
  179. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogTray.js +1 -1
  180. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionDialog.js +2 -10
  181. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionItem.js +1 -2
  182. package/es/rce/plugins/instructure_rce_external_tools/components/util/ExpandoText.js +1 -0
  183. package/es/rce/plugins/instructure_rce_external_tools/components/util/ToolLaunchIframe.js +2 -1
  184. package/es/rce/plugins/instructure_rce_external_tools/constants.js +28 -0
  185. package/es/rce/plugins/instructure_rce_external_tools/dialog-helper.js +19 -4
  186. package/es/rce/plugins/instructure_rce_external_tools/helpers/tags.js +0 -2
  187. package/es/rce/plugins/instructure_rce_external_tools/jquery/jquery.dropdownList.js +130 -136
  188. package/es/rce/plugins/instructure_rce_external_tools/lti11-content-items/RceLti11ContentItem.js +100 -95
  189. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/Lti13ContentItemJson.js +1 -0
  190. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/RceLti13ContentItem.js +2 -19
  191. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/BaseLinkContentItem.js +1 -14
  192. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/HtmlFragmentContentItem.js +1 -6
  193. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ImageContentItem.js +1 -9
  194. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/LinkContentItem.js +1 -1
  195. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ResourceLinkContentItem.js +3 -5
  196. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/processEditorContentItems.js +18 -10
  197. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/rceLti13ContentItemFromJson.js +4 -4
  198. package/es/rce/plugins/instructure_rce_external_tools/plugin.js +7 -16
  199. package/es/rce/plugins/instructure_rce_external_tools/util/addParentFrameContextToUrl.js +1 -1
  200. package/es/rce/plugins/instructure_record/AudioOptionsTray/TrayController.js +1 -25
  201. package/es/rce/plugins/instructure_record/AudioOptionsTray/index.js +1 -4
  202. package/es/rce/plugins/instructure_record/MediaPanel/index.js +1 -9
  203. package/es/rce/plugins/instructure_record/VideoOptionsTray/TrayController.js +8 -51
  204. package/es/rce/plugins/instructure_record/VideoOptionsTray/index.js +4 -17
  205. package/es/rce/plugins/instructure_record/clickCallback.js +7 -15
  206. package/es/rce/plugins/instructure_record/mediaTranslations.js +1 -0
  207. package/es/rce/plugins/instructure_record/plugin.js +11 -18
  208. package/es/rce/plugins/instructure_search_and_replace/clickCallback.js +2 -5
  209. package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTray.js +20 -35
  210. package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTrayController.js +3 -18
  211. package/es/rce/plugins/instructure_search_and_replace/getSelectionContext.js +2 -9
  212. package/es/rce/plugins/instructure_search_and_replace/plugin.js +1 -3
  213. package/es/rce/plugins/instructure_studio_media_options/plugin.js +1 -1
  214. package/es/rce/plugins/instructure_wordcount/clickCallback.js +2 -5
  215. package/es/rce/plugins/instructure_wordcount/components/WordCountModal.js +1 -4
  216. package/es/rce/plugins/instructure_wordcount/plugin.js +1 -0
  217. package/es/rce/plugins/instructure_wordcount/utils/countContent.js +1 -8
  218. package/es/rce/plugins/instructure_wordcount/utils/tableContent.js +1 -0
  219. package/es/rce/plugins/shared/CanvasContentTray.js +43 -63
  220. package/es/rce/plugins/shared/CheckerboardStyling.js +1 -1
  221. package/es/rce/plugins/shared/ColorInput.js +5 -14
  222. package/es/rce/plugins/shared/ConditionalTooltip.js +1 -0
  223. package/es/rce/plugins/shared/ContentSelection.js +17 -58
  224. package/es/rce/plugins/shared/DimensionUtils.js +1 -8
  225. package/es/rce/plugins/shared/DimensionsInput/DimensionInput.js +6 -6
  226. package/es/rce/plugins/shared/DimensionsInput/index.js +37 -15
  227. package/es/rce/plugins/shared/DimensionsInput/useDimensionsState.js +5 -29
  228. package/es/rce/plugins/shared/ErrorBoundary.js +2 -5
  229. package/es/rce/plugins/shared/EventUtils.js +1 -3
  230. package/es/rce/plugins/shared/Filter.js +8 -38
  231. package/es/rce/plugins/shared/FixedContentTray.js +3 -3
  232. package/es/rce/plugins/shared/ImageCropper/DirectionRegion.js +1 -8
  233. package/es/rce/plugins/shared/ImageCropper/Modal.js +4 -7
  234. package/es/rce/plugins/shared/ImageCropper/Preview.js +7 -11
  235. package/es/rce/plugins/shared/ImageCropper/constants.js +1 -0
  236. package/es/rce/plugins/shared/ImageCropper/controls/CustomNumberInput.js +2 -5
  237. package/es/rce/plugins/shared/ImageCropper/controls/ResetControls.js +1 -0
  238. package/es/rce/plugins/shared/ImageCropper/controls/RotationControls.js +1 -10
  239. package/es/rce/plugins/shared/ImageCropper/controls/ShapeControls.js +1 -0
  240. package/es/rce/plugins/shared/ImageCropper/controls/ZoomControls.js +1 -11
  241. package/es/rce/plugins/shared/ImageCropper/controls/index.js +1 -0
  242. package/es/rce/plugins/shared/ImageCropper/controls/useDebouncedNumericValue.js +3 -16
  243. package/es/rce/plugins/shared/ImageCropper/controls/utils.js +1 -2
  244. package/es/rce/plugins/shared/ImageCropper/imageCropUtils.js +1 -10
  245. package/es/rce/plugins/shared/ImageCropper/index.js +1 -0
  246. package/es/rce/plugins/shared/ImageCropper/propTypes.js +1 -0
  247. package/es/rce/plugins/shared/ImageCropper/reducers/imageCropper.js +15 -14
  248. package/es/rce/plugins/shared/ImageCropper/shape.js +1 -0
  249. package/es/rce/plugins/shared/ImageCropper/svg/index.js +1 -2
  250. package/es/rce/plugins/shared/ImageCropper/svg/shape.js +1 -17
  251. package/es/rce/plugins/shared/ImageCropper/svg/utils.js +1 -0
  252. package/es/rce/plugins/shared/ImageCropper/useKeyMouseEvents.js +19 -46
  253. package/es/rce/plugins/shared/ImageCropper/useMouseWheel.js +8 -10
  254. package/es/rce/plugins/shared/ImageOptionsForm.js +1 -2
  255. package/es/rce/plugins/shared/LinkDisplay.js +1 -2
  256. package/es/rce/plugins/shared/PreviewIcon.js +1 -6
  257. package/es/rce/plugins/shared/Previewable.js +1 -0
  258. package/es/rce/plugins/shared/RceFileBrowser.js +5 -7
  259. package/es/rce/plugins/shared/StoreContext.js +1 -2
  260. package/es/rce/plugins/shared/StudioLtiSupportUtils.js +10 -6
  261. package/es/rce/plugins/shared/UnknownFileTypePanel.js +1 -0
  262. package/es/rce/plugins/shared/Upload/CanvasContentPanel.js +13 -18
  263. package/es/rce/plugins/shared/Upload/CategoryProcessor.js +1 -1
  264. package/es/rce/plugins/shared/Upload/ComputerPanel.js +8 -26
  265. package/es/rce/plugins/shared/Upload/PanelFilter.js +3 -12
  266. package/es/rce/plugins/shared/Upload/SvgCategoryProcessor.js +4 -3
  267. package/es/rce/plugins/shared/Upload/UploadFile.js +15 -18
  268. package/es/rce/plugins/shared/Upload/UploadFileModal.js +9 -25
  269. package/es/rce/plugins/shared/Upload/UrlPanel.js +1 -0
  270. package/es/rce/plugins/shared/Upload/UsageRightsSelectBox.js +7 -12
  271. package/es/rce/plugins/shared/Upload/doFileUpload.js +4 -6
  272. package/es/rce/plugins/shared/Upload/index.js +1 -0
  273. package/es/rce/plugins/shared/ai_tools/AIResponseModal.js +1 -3
  274. package/es/rce/plugins/shared/ai_tools/AIToolsTray.js +6 -24
  275. package/es/rce/plugins/shared/ai_tools/aiicons.js +1 -0
  276. package/es/rce/plugins/shared/ai_tools/index.js +1 -0
  277. package/es/rce/plugins/shared/buildDownloadUrl.js +0 -2
  278. package/es/rce/plugins/shared/canvasContentUtils.js +6 -9
  279. package/es/rce/plugins/shared/compressionUtils.js +1 -8
  280. package/es/rce/plugins/shared/dateUtils.js +1 -1
  281. package/es/rce/plugins/shared/do-fetch-api-effect/defaultFetchOptions.js +4 -2
  282. package/es/rce/plugins/shared/do-fetch-api-effect/doFetchApi.js +7 -10
  283. package/es/rce/plugins/shared/do-fetch-api-effect/index.js +1 -0
  284. package/es/rce/plugins/shared/do-fetch-api-effect/parse-link-header.js +6 -20
  285. package/es/rce/plugins/shared/do-fetch-api-effect/query-string-encoding.js +5 -3
  286. package/es/rce/plugins/shared/fileShape.js +4 -9
  287. package/es/rce/plugins/shared/fileTypeUtils.js +32 -42
  288. package/es/rce/plugins/shared/fileUtils.js +1 -2
  289. package/es/rce/plugins/shared/linkUtils.js +1 -16
  290. package/es/rce/plugins/shared/round.js +1 -0
  291. package/es/rce/plugins/shared/trayUtils.js +4 -3
  292. package/es/rce/plugins/shared/useDataUrl.js +9 -9
  293. package/es/rce/plugins/shared/useFilterSettings.js +3 -3
  294. package/es/rce/plugins/tinymce-a11y-checker/components/ColorField.js +2 -6
  295. package/es/rce/plugins/tinymce-a11y-checker/components/checker.js +5 -63
  296. package/es/rce/plugins/tinymce-a11y-checker/components/color-picker.js +1 -2
  297. package/es/rce/plugins/tinymce-a11y-checker/components/placeholder-svg.js +1 -0
  298. package/es/rce/plugins/tinymce-a11y-checker/components/pointer.js +1 -0
  299. package/es/rce/plugins/tinymce-a11y-checker/node-checker.js +1 -6
  300. package/es/rce/plugins/tinymce-a11y-checker/plugin.js +4 -7
  301. package/es/rce/plugins/tinymce-a11y-checker/rules/adjacent-links.js +3 -26
  302. package/es/rce/plugins/tinymce-a11y-checker/rules/headings-sequence.js +9 -38
  303. package/es/rce/plugins/tinymce-a11y-checker/rules/headings-start-at-h2.js +1 -5
  304. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-filename.js +1 -2
  305. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-length.js +1 -1
  306. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt.js +1 -2
  307. package/es/rce/plugins/tinymce-a11y-checker/rules/index.js +1 -0
  308. package/es/rce/plugins/tinymce-a11y-checker/rules/large-text-contrast.js +1 -4
  309. package/es/rce/plugins/tinymce-a11y-checker/rules/list-structure.js +5 -24
  310. package/es/rce/plugins/tinymce-a11y-checker/rules/paragraphs-for-headings.js +1 -3
  311. package/es/rce/plugins/tinymce-a11y-checker/rules/small-text-contrast.js +1 -6
  312. package/es/rce/plugins/tinymce-a11y-checker/rules/table-caption.js +1 -3
  313. package/es/rce/plugins/tinymce-a11y-checker/rules/table-header-scope.js +1 -2
  314. package/es/rce/plugins/tinymce-a11y-checker/rules/table-header.js +1 -9
  315. package/es/rce/plugins/tinymce-a11y-checker/utils/colors.js +1 -0
  316. package/es/rce/plugins/tinymce-a11y-checker/utils/describe.js +1 -7
  317. package/es/rce/plugins/tinymce-a11y-checker/utils/dom.js +1 -26
  318. package/es/rce/plugins/tinymce-a11y-checker/utils/indicate.js +16 -15
  319. package/es/rce/plugins/tinymce-a11y-checker/utils/rgb-hex.js +7 -10
  320. package/es/rce/plugins/tinymce-a11y-checker/utils/strings.js +1 -4
  321. package/es/rce/root.js +9 -8
  322. package/es/rce/sanitizePlugins.js +1 -3
  323. package/es/rce/style.js +1 -4
  324. package/es/rce/tinyRCE.js +13 -9
  325. package/es/rce/tinymce.oxide.content.min.css.js +1 -0
  326. package/es/rce/tinymce.oxide.skin.min.css.js +1 -0
  327. package/es/rce/transformContent.js +8 -10
  328. package/es/rce/types.js +1 -0
  329. package/es/rce/userOS.js +1 -1
  330. package/es/rce/wrapInitCb.js +50 -43
  331. package/es/rcs/api.js +61 -116
  332. package/es/rcs/buildError.js +5 -17
  333. package/es/rcs/fake.js +4 -13
  334. package/es/sidebar/actions/all_files.js +2 -0
  335. package/es/sidebar/actions/data.js +4 -7
  336. package/es/sidebar/actions/documents.js +9 -6
  337. package/es/sidebar/actions/files.js +3 -6
  338. package/es/sidebar/actions/filter.js +1 -0
  339. package/es/sidebar/actions/flickr.js +1 -1
  340. package/es/sidebar/actions/images.js +12 -11
  341. package/es/sidebar/actions/links.js +1 -0
  342. package/es/sidebar/actions/media.js +12 -10
  343. package/es/sidebar/actions/session.js +1 -3
  344. package/es/sidebar/actions/ui.js +1 -0
  345. package/es/sidebar/actions/upload.js +14 -39
  346. package/es/sidebar/containers/Sidebar.js +1 -2
  347. package/es/sidebar/containers/sidebarHandlers.js +3 -1
  348. package/es/sidebar/dragHtml.js +5 -3
  349. package/es/sidebar/reducers/all_files.js +4 -3
  350. package/es/sidebar/reducers/collection.js +12 -13
  351. package/es/sidebar/reducers/collections.js +5 -5
  352. package/es/sidebar/reducers/documents.js +6 -13
  353. package/es/sidebar/reducers/files.js +3 -3
  354. package/es/sidebar/reducers/filter.js +1 -8
  355. package/es/sidebar/reducers/flickr.js +9 -9
  356. package/es/sidebar/reducers/folder.js +15 -15
  357. package/es/sidebar/reducers/folders.js +3 -3
  358. package/es/sidebar/reducers/images.js +3 -13
  359. package/es/sidebar/reducers/index.js +3 -1
  360. package/es/sidebar/reducers/media.js +6 -13
  361. package/es/sidebar/reducers/newPageLinkExpanded.js +1 -2
  362. package/es/sidebar/reducers/noop.js +1 -0
  363. package/es/sidebar/reducers/rootFolderId.js +1 -2
  364. package/es/sidebar/reducers/session.js +3 -3
  365. package/es/sidebar/reducers/ui.js +3 -16
  366. package/es/sidebar/reducers/upload.js +8 -40
  367. package/es/sidebar/store/configureStore.js +1 -0
  368. package/es/sidebar/store/initialState.js +13 -24
  369. package/es/translations/locales/ab.js +1 -0
  370. package/es/translations/locales/ar.js +67 -9
  371. package/es/translations/locales/ca.js +67 -9
  372. package/es/translations/locales/cs.js +1 -0
  373. package/es/translations/locales/cs_CZ.js +1 -0
  374. package/es/translations/locales/cy.js +67 -9
  375. package/es/translations/locales/da-x-k12.js +67 -9
  376. package/es/translations/locales/da.js +67 -9
  377. package/es/translations/locales/da_DK.js +1 -0
  378. package/es/translations/locales/de.js +67 -9
  379. package/es/translations/locales/el.js +4 -0
  380. package/es/translations/locales/en-AU-x-unimelb.js +67 -9
  381. package/es/translations/locales/en-GB-x-ukhe.js +67 -9
  382. package/es/translations/locales/en.js +72 -8
  383. package/es/translations/locales/en_AU.js +67 -9
  384. package/es/translations/locales/en_CA.js +67 -9
  385. package/es/translations/locales/en_CY.js +67 -9
  386. package/es/translations/locales/en_GB.js +67 -9
  387. package/es/translations/locales/en_NZ.js +1 -0
  388. package/es/translations/locales/en_SE.js +1 -0
  389. package/es/translations/locales/en_US.js +1 -0
  390. package/es/translations/locales/es.js +67 -9
  391. package/es/translations/locales/es_ES.js +67 -9
  392. package/es/translations/locales/es_GT.js +1 -0
  393. package/es/translations/locales/fa_IR.js +7 -0
  394. package/es/translations/locales/fi.js +67 -9
  395. package/es/translations/locales/fr.js +67 -9
  396. package/es/translations/locales/fr_CA.js +68 -10
  397. package/es/translations/locales/ga.js +5 -13
  398. package/es/translations/locales/he.js +7 -0
  399. package/es/translations/locales/hi.js +67 -9
  400. package/es/translations/locales/ht.js +67 -9
  401. package/es/translations/locales/hu.js +7 -6
  402. package/es/translations/locales/hu_HU.js +1 -0
  403. package/es/translations/locales/hy.js +1 -0
  404. package/es/translations/locales/id.js +67 -9
  405. package/es/translations/locales/id_ID.js +1 -0
  406. package/es/translations/locales/is.js +67 -9
  407. package/es/translations/locales/it.js +67 -9
  408. package/es/translations/locales/ja.js +67 -9
  409. package/es/translations/locales/ko.js +1 -0
  410. package/es/translations/locales/ko_KR.js +1 -0
  411. package/es/translations/locales/lt.js +1 -0
  412. package/es/translations/locales/lt_LT.js +1 -0
  413. package/es/translations/locales/mi.js +67 -9
  414. package/es/translations/locales/mn_MN.js +1 -0
  415. package/es/translations/locales/ms.js +67 -9
  416. package/es/translations/locales/nb-x-k12.js +67 -9
  417. package/es/translations/locales/nb.js +67 -9
  418. package/es/translations/locales/nl.js +67 -9
  419. package/es/translations/locales/nl_NL.js +1 -0
  420. package/es/translations/locales/nn.js +7 -6
  421. package/es/translations/locales/pl.js +67 -9
  422. package/es/translations/locales/pt.js +67 -9
  423. package/es/translations/locales/pt_BR.js +67 -9
  424. package/es/translations/locales/ro.js +1 -0
  425. package/es/translations/locales/ru.js +67 -9
  426. package/es/translations/locales/se.js +1 -0
  427. package/es/translations/locales/sl.js +67 -9
  428. package/es/translations/locales/sv-x-k12.js +67 -9
  429. package/es/translations/locales/sv.js +67 -9
  430. package/es/translations/locales/sv_SE.js +1 -0
  431. package/es/translations/locales/tg.js +1 -0
  432. package/es/translations/locales/th.js +67 -9
  433. package/es/translations/locales/th_TH.js +1 -0
  434. package/es/translations/locales/tl_PH.js +1 -0
  435. package/es/translations/locales/tr.js +7 -0
  436. package/es/translations/locales/uk_UA.js +7 -0
  437. package/es/translations/locales/vi.js +67 -9
  438. package/es/translations/locales/vi_VN.js +1 -0
  439. package/es/translations/locales/zh-Hans.js +67 -9
  440. package/es/translations/locales/zh-Hant.js +67 -9
  441. package/es/translations/locales/zh.js +67 -9
  442. package/es/translations/locales/zh_HK.js +67 -9
  443. package/es/translations/locales/zh_TW.Big5.js +1 -0
  444. package/es/translations/locales/zh_TW.js +1 -0
  445. package/es/translations/tinymce/ar_SA.js +1 -0
  446. package/es/translations/tinymce/fi.js +1 -0
  447. package/es/translations/tinymce/ga.js +1 -0
  448. package/es/translations/tinymce/id.js +1 -0
  449. package/es/translations/tinymce/ru.js +1 -0
  450. package/es/translations/tinymce/ru_RU.js +1 -0
  451. package/es/translations/tinymce/sl.js +1 -0
  452. package/es/translations/tinymce/sr.js +1 -0
  453. package/es/translations/tinymce/th.js +1 -0
  454. package/es/translations/tinymce/uk_UA.js +1 -0
  455. package/es/translations/tinymce/vi_VN.js +1 -0
  456. package/es/util/TypedDict.js +4 -2
  457. package/es/util/encrypted-storage.js +3 -13
  458. package/es/util/file-url-util.js +1 -6
  459. package/es/util/fullscreenHelpers.js +4 -1
  460. package/es/util/instui-icon-helper.js +4 -3
  461. package/es/util/loadingPlaceholder.js +38 -39
  462. package/es/util/simpleCache.js +0 -3
  463. package/es/util/string-util.js +1 -1
  464. package/es/util/textarea-editing-util.js +3 -7
  465. package/es/util/tinymce-plugin-util.js +0 -5
  466. package/es/util/url-util.js +16 -25
  467. package/eslint.config.js +239 -0
  468. package/jest.config.js +1 -1
  469. package/package.json +77 -82
  470. package/scripts/build-canvas +2 -1
  471. package/scripts/build.js +4 -4
  472. package/scripts/publish_to_npm.sh +1 -1
  473. package/testcafe/RCEWrapper.test.js +0 -1
  474. package/testcafe/StatusBar.test.js +0 -1
  475. package/testcafe/axe.test.js +3 -4
  476. package/testcafe/enhanceUserContent.test.js +0 -1
  477. package/tsconfig.json +20 -15
  478. package/.eslintrc +0 -45
  479. package/.prettierignore +0 -6
  480. package/es/common/components/FileTree/File.js +0 -64
  481. package/es/common/components/FileTree/Folder.js +0 -110
  482. package/es/common/components/FileTree/index.js +0 -84
  483. package/es/common/components/FileTree/styles.js +0 -72
  484. package/es/common/components/Loading.js +0 -83
@@ -15,6 +15,7 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  import formatMessage from '../format-message';
19
20
  import { showFlashAlert } from '../common/FlashAlert';
20
21
  import { isPreviewable, loadDocPreview, removeLoadingImage, showLoadingImage } from './doc_previews';
@@ -23,45 +24,40 @@ import { parseUrlOrNull } from '../util/url-util';
23
24
  const youTubeRegEx = /^https?:\/\/(www\.youtube\.com\/watch.*v(=|\/)|youtu\.be\/)([^&#]*)/;
24
25
  export function youTubeID(path) {
25
26
  const match = path.match(youTubeRegEx);
26
-
27
27
  if (match && match[match.length - 1]) {
28
28
  return match[match.length - 1];
29
29
  }
30
-
31
30
  return null;
32
31
  }
33
32
  export function getTld(hostname) {
34
33
  hostname = (hostname || '').split(':')[0];
35
34
  const parts = hostname.split('.'),
36
- length = parts.length;
35
+ length = parts.length;
37
36
  return (length > 1 ? [parts[length - 2], parts[length - 1]] : parts).join('.');
38
37
  }
39
38
  export function isExternalLink(element) {
40
39
  let canvasOrigin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window.location.origin;
41
40
  let canvasHost;
42
-
43
41
  try {
44
42
  canvasHost = new URL(canvasOrigin).hostname;
45
43
  } catch (_ex) {
46
44
  canvasHost = window.location.hostname;
47
45
  }
48
-
49
- const href = element.getAttribute('href'); // if a browser doesnt support <a>.hostname then just dont mark anything as external, better to not get false positives.
50
-
46
+ const href = element.getAttribute('href');
47
+ // if a browser doesnt support <a>.hostname then just dont mark anything as external, better to not get false positives.
51
48
  return !!(href && href.length && !href.match(/^(mailto\:|javascript\:)/) && element.hostname && getTld(element.hostname) !== getTld(canvasHost));
52
49
  }
53
50
  export function showFilePreview(event) {
54
51
  var _event$target, _event$currentTarget;
55
-
56
52
  let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
57
53
  event.stopPropagation();
58
54
  const {
59
55
  canvasOrigin,
60
56
  disableGooglePreviews
61
- } = { ...opts
57
+ } = {
58
+ ...opts
62
59
  };
63
60
  let target = null;
64
-
65
61
  if ((_event$target = event.target) !== null && _event$target !== void 0 && _event$target.href) {
66
62
  target = event.target;
67
63
  } else if ((_event$currentTarget = event.currentTarget) !== null && _event$currentTarget !== void 0 && _event$currentTarget.href) {
@@ -69,11 +65,9 @@ export function showFilePreview(event) {
69
65
  } else {
70
66
  return;
71
67
  }
72
-
73
68
  if (target.classList.contains('no_preview')) {
74
69
  return;
75
70
  }
76
-
77
71
  if (target.classList.contains('inline_disabled') || target.classList.contains('preview_in_overlay')) {
78
72
  showFilePreviewInOverlay(event, canvasOrigin);
79
73
  } else {
@@ -82,36 +76,38 @@ export function showFilePreview(event) {
82
76
  }
83
77
  export function showFilePreviewInOverlay(event, canvasOrigin) {
84
78
  var _event$target2, _event$currentTarget2, _target;
85
-
86
79
  let target = null;
87
-
88
80
  if ((_event$target2 = event.target) !== null && _event$target2 !== void 0 && _event$target2.href) {
89
81
  target = event.target;
90
82
  } else if ((_event$currentTarget2 = event.currentTarget) !== null && _event$currentTarget2 !== void 0 && _event$currentTarget2.href) {
91
83
  target = event.currentTarget;
92
84
  }
93
-
94
85
  const matches = (_target = target) === null || _target === void 0 ? void 0 : _target.href.match(/\/files\/(\d+~\d+|\d+)/);
95
-
96
86
  if (matches) {
97
87
  if (event.ctrlKey || event.altKey || event.metaKey || event.shiftKey) {
98
88
  // if any modifier keys are pressed, do the browser default thing
99
89
  return;
100
90
  }
101
-
102
91
  event.preventDefault();
103
92
  const url = new URL(target.href);
104
93
  const verifier = url === null || url === void 0 ? void 0 : url.searchParams.get('verifier');
105
- const file_id = matches[1]; // TODO:
106
- // 1. what window should be be using
94
+ const access_token = url === null || url === void 0 ? void 0 : url.searchParams.get('access_token');
95
+ const instfs_id = url === null || url === void 0 ? void 0 : url.searchParams.get('instfs_id');
96
+ const file_id = matches[1];
97
+ const params = {
98
+ subject: 'preview_file',
99
+ file_id
100
+ };
101
+ if (verifier) params.verifier = verifier;
102
+ if (access_token && instfs_id) {
103
+ params.access_token = access_token;
104
+ params.instfs_id = instfs_id;
105
+ }
106
+ // TODO:
107
+ // 1. what window should we be using
107
108
  // 2. is that the right origin?
108
109
  // 3. this is temporary until we can decouple the file previewer from canvas
109
-
110
- window.top.postMessage({
111
- subject: 'preview_file',
112
- file_id,
113
- verifier
114
- }, canvasOrigin);
110
+ window.top.postMessage(params, canvasOrigin);
115
111
  }
116
112
  }
117
113
  export function showFilePreviewInline(event, canvasOrigin, disableGooglePreviews) {
@@ -119,21 +115,19 @@ export function showFilePreviewInline(event, canvasOrigin, disableGooglePreviews
119
115
  // if any modifier keys are pressed, do the browser default thing
120
116
  return;
121
117
  }
122
-
123
118
  event.preventDefault();
124
119
  const $link = event.currentTarget || event.target;
125
-
126
120
  if ($link.getAttribute('aria-expanded') === 'true') {
127
121
  // close the preview by clicking the "Minimize File Preview" link
128
122
  const $preview = document.getElementById($link.getAttribute('aria-controls'));
129
123
  $preview.querySelector('.hide_file_preview_link').click();
130
124
  return;
131
125
  }
132
-
133
126
  showLoadingImage($link);
134
127
  fetch($link.getAttribute('href').replace(/\/(download|preview)/, '') // download as part of the path
135
128
  .replace(/wrap=1&?/, '') // wrap=1 as part of the query_string
136
- .replace(/[?&]$/, ''), // any trailing chars if wrap=1 was at the end
129
+ .replace(/[?&]$/, ''),
130
+ // any trailing chars if wrap=1 was at the end
137
131
  {
138
132
  method: 'GET',
139
133
  headers: {
@@ -147,16 +141,12 @@ export function showFilePreviewInline(event, canvasOrigin, disableGooglePreviews
147
141
  const attachment = data && data.attachment;
148
142
  removeLoadingImage($link);
149
143
  let canvadoc_session_url = attachment.canvadoc_session_url;
150
-
151
144
  if (attachment && (!disableGooglePreviews && isPreviewable(attachment.content_type) || canvadoc_session_url)) {
152
145
  $link.setAttribute('aria-expanded', 'true');
153
-
154
146
  if (canvasOrigin && canvadoc_session_url !== null) {
155
147
  var _parseUrlOrNull;
156
-
157
148
  canvadoc_session_url = (_parseUrlOrNull = parseUrlOrNull(canvadoc_session_url, canvasOrigin)) === null || _parseUrlOrNull === void 0 ? void 0 : _parseUrlOrNull.toString();
158
149
  }
159
-
160
150
  const $div = document.querySelector(`[id="${$link.getAttribute('aria-controls')}"]`);
161
151
  $div.style.display = 'block';
162
152
  loadDocPreview($div, {
@@ -176,7 +166,6 @@ export function showFilePreviewInline(event, canvasOrigin, disableGooglePreviews
176
166
  resetInlinePreview($link, $div);
177
167
  });
178
168
  $div.prepend($minimizeLink);
179
-
180
169
  if (Object.prototype.hasOwnProperty.call(event, 'originalEvent')) {
181
170
  // Only focus this link if the open preview link was initiated by a real browser event
182
171
  // If it was triggered by our auto_open stuff it shouldn't focus here.
@@ -187,19 +176,17 @@ export function showFilePreviewInline(event, canvasOrigin, disableGooglePreviews
187
176
  showFlashAlert({
188
177
  message: formatMessage('Failed getting file contents'),
189
178
  type: 'error'
190
- }); // eslint-disable-next-line no-console
191
-
179
+ });
180
+ // eslint-disable-next-line no-console
192
181
  console.error(ex);
193
182
  resetInlinePreview($link);
194
183
  removeLoadingImage($link);
195
184
  });
196
185
  }
197
-
198
186
  function resetInlinePreview($link, $previewContainer) {
199
187
  $link.setAttribute('aria-expanded', 'false');
200
188
  show($link);
201
189
  $link.focus();
202
-
203
190
  if ($previewContainer) {
204
191
  $previewContainer.innerHTML = '';
205
192
  $previewContainer.style.display = 'none';
@@ -15,30 +15,29 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  export function hidden(elem) {
19
20
  const width = elem.offsetWidth,
20
- height = elem.offsetHeight;
21
+ height = elem.offsetHeight;
21
22
  return width === 0 && height === 0;
22
23
  }
23
24
  export function visible(elem) {
24
25
  return !hidden(elem);
25
- } // start: the element where we start
26
+ }
27
+
28
+ // start: the element where we start
26
29
  // selector: find an ancestor to elem that matches this
27
30
  // context: optional DOM element within which the matching element may be found
28
-
29
31
  export function closest(start, selector, context) {
30
32
  const upperbound = context || document.body;
31
33
  let elem = start;
32
-
33
34
  while (elem) {
34
35
  if (elem.matches(selector)) {
35
36
  return elem;
36
37
  }
37
-
38
38
  if (elem === upperbound) {
39
39
  return null;
40
40
  }
41
-
42
41
  elem = elem.parentElement;
43
42
  }
44
43
  }
@@ -51,7 +50,9 @@ export function show(elem) {
51
50
  }
52
51
  export function capitalize(word) {
53
52
  return word.replace(/^./, letter => letter.toUpperCase());
54
- } // this implementation of get|setData does not
53
+ }
54
+
55
+ // this implementation of get|setData does not
55
56
  // deal with elements being recreated in the dom
56
57
  // but that seems to be OK
57
58
  //
@@ -59,9 +60,7 @@ export function capitalize(word) {
59
60
  // from canvas, there is other code that expects to use
60
61
  // jquery data saved in enhanceUserContent, but if not
61
62
  // so something useful anyway.
62
-
63
63
  /* eslint-disable no-undef */
64
-
65
64
  export function setData(elem, key, value) {
66
65
  if (typeof $ !== 'undefined') {
67
66
  $(elem).data(key, value);
@@ -74,11 +73,9 @@ export function getData(elem, key) {
74
73
  if (typeof $ !== 'undefined') {
75
74
  return $(elem).data(key);
76
75
  }
77
-
78
76
  if (elem.data && key in elem.data) {
79
77
  return elem.data[key];
80
78
  }
81
-
82
79
  return elem.getAttribute(`data-${key}`);
83
80
  }
84
81
  /* eslint-enable no-undef */
@@ -15,11 +15,13 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  const MathJaxDirective = Object.freeze({
19
20
  Ignore: 'mathjax_ignore',
20
21
  Process: 'mathjax_process'
21
- }); // configure MathJax to use 'color' extension fo LaTeX coding
22
+ });
22
23
 
24
+ // configure MathJax to use 'color' extension fo LaTeX coding
23
25
  const localConfig = {
24
26
  TeX: {
25
27
  extensions: ['autoload-all.js']
@@ -47,7 +49,6 @@ const localConfig = {
47
49
  showMathMenu: true,
48
50
  messageStyle: 'none'
49
51
  };
50
-
51
52
  class Mathml {
52
53
  constructor() {
53
54
  let features = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
@@ -55,26 +56,21 @@ class Mathml {
55
56
  this._features = features;
56
57
  this._config = config;
57
58
  }
58
-
59
59
  loadMathJax() {
60
60
  let configFile = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'TeX-MML-AM_SVG';
61
61
  let cb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
62
-
63
62
  if (this.preventMathJax()) {
64
63
  return;
65
64
  }
66
-
67
65
  if (!this.isMathJaxLoaded()) {
68
66
  var _this$_features, _this$_config;
69
-
70
67
  // Statically declare this in the localConfig above as part of MAT-1219
71
68
  if ((_this$_features = this._features) !== null && _this$_features !== void 0 && _this$_features.explicit_latex_typesetting) {
72
69
  localConfig.elements = document.getElementsByClassName(MathJaxDirective.Process);
73
70
  localConfig.tex2jax.processClass = MathJaxDirective.Process;
74
71
  }
75
-
76
- const locale = ((_this$_config = this._config) === null || _this$_config === void 0 ? void 0 : _this$_config.locale) || 'en'; // signal local config to mathjax as it loads
77
-
72
+ const locale = ((_this$_config = this._config) === null || _this$_config === void 0 ? void 0 : _this$_config.locale) || 'en';
73
+ // signal local config to mathjax as it loads
78
74
  window.MathJax = localConfig;
79
75
  if (window.MathJaxIsLoading) return;
80
76
  window.MathJaxIsLoading = true;
@@ -85,11 +81,10 @@ class Mathml {
85
81
  script.onerror = reject;
86
82
  script.async = true;
87
83
  script.src = `//cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.js?config=${configFile}&locale=${locale}`;
88
- }); // eslint-disable-next-line promise/catch-or-return
89
-
84
+ });
85
+ // eslint-disable-next-line promise/catch-or-return
90
86
  scriptPromise.then(() => {
91
87
  var _this$_features2;
92
-
93
88
  window.MathJax.Hub.Register.StartupHook('MathMenu Ready', function () {
94
89
  // get the mathjax context menu above the rce's equation editor
95
90
  window.MathJax.Menu.BGSTYLE['z-index'] = 2000;
@@ -98,27 +93,23 @@ class Mathml {
98
93
  // wait until MathJAx is configured before calling the callback
99
94
  cb === null || cb === void 0 ? void 0 : cb();
100
95
  });
101
-
102
96
  if ((_this$_features2 = this._features) !== null && _this$_features2 !== void 0 && _this$_features2.new_math_equation_handling) {
103
97
  window.MathJax.Hub.Register.MessageHook('Begin PreProcess', function (message) {
104
98
  mathImageHelper.catchEquationImages(message[1]);
105
99
  });
106
100
  window.MathJax.Hub.Register.MessageHook('Math Processing Error', function (message) {
107
101
  var _elem$parentElement;
108
-
109
- const elem = Array.isArray(message[1]) ? message[1][0] : message[1]; // ".math_equation_latex" is the elem we added for MathJax to typeset the image equation
110
-
102
+ const elem = Array.isArray(message[1]) ? message[1][0] : message[1];
103
+ // ".math_equation_latex" is the elem we added for MathJax to typeset the image equation
111
104
  if ((_elem$parentElement = elem.parentElement) !== null && _elem$parentElement !== void 0 && _elem$parentElement.classList.contains('math_equation_latex')) {
112
105
  var _elem$parentElement$p;
113
-
114
106
  // The equation we image we were trying to replace and failed is up 1 and back 1.
115
107
  // If we remove its "mathjaxified" attribute, the "End Math" handler
116
108
  // won't remove it from the DOM.
117
109
  if ((_elem$parentElement$p = elem.parentElement.previousElementSibling) !== null && _elem$parentElement$p !== void 0 && _elem$parentElement$p.hasAttribute('mathjaxified')) {
118
110
  elem.parentElement.previousElementSibling.removeAttribute('mathjaxified');
119
- } // remove the "math processing error" mathjax output.
120
-
121
-
111
+ }
112
+ // remove the "math processing error" mathjax output.
122
113
  elem.parentElement.remove();
123
114
  }
124
115
  });
@@ -144,15 +135,15 @@ class Mathml {
144
135
  element.remove();
145
136
  });
146
137
  });
147
- } // leaving this here so I don't have to keep looking up how to see all messages
138
+ }
139
+
140
+ // leaving this here so I don't have to keep looking up how to see all messages
148
141
  // window.MathJax.Hub.Startup.signal.Interest(function (message) {
149
142
  // console.log('>>> MathJax startup:', message)
150
143
  // })
151
144
  // window.MathJax.Hub.signal.Interest(function(message) {
152
145
  // console.log('>>> MathJax signal', message)
153
146
  // })
154
-
155
-
156
147
  delete window.MathJaxIsLoading;
157
148
  });
158
149
  } else {
@@ -164,113 +155,95 @@ class Mathml {
164
155
  cb === null || cb === void 0 ? void 0 : cb();
165
156
  }
166
157
  }
167
-
168
158
  preventMathJax() {
169
159
  return /(?:rubrics|\/files)/.test(window.location.pathname);
170
160
  }
171
-
172
161
  isMathOnPage() {
173
162
  return this.isMathInElement(document.body);
174
163
  }
175
-
176
164
  isMathInElement(elem) {
177
165
  var _this$_features3;
178
-
179
166
  if ((elem === null || elem === void 0 ? void 0 : elem.getAttribute('data-testid')) === 'mathml-preview-element') {
180
167
  return true;
181
168
  }
182
-
183
169
  if ((_this$_features3 = this._features) !== null && _this$_features3 !== void 0 && _this$_features3.new_math_equation_handling) {
184
170
  // handle the change from image + hidden mathml to mathjax formatted latex
185
171
  if (elem.querySelector('.math_equation_latex,.math_equation_mml')) {
186
172
  return true;
187
173
  }
188
-
189
174
  if (elem.querySelector('img.equation_image')) {
190
175
  return true;
191
- } // look for latex the user may have entered w/o the equation editor by
192
- // looking for mathjax's opening delimiters
193
-
176
+ }
194
177
 
178
+ // look for latex the user may have entered w/o the equation editor by
179
+ // looking for mathjax's opening delimiters
195
180
  if (/(?:\$\$|\\\()/.test(elem.textContent)) {
196
181
  return true;
197
182
  }
198
183
  }
199
-
200
184
  const mathElements = elem.getElementsByTagName('math');
201
-
202
185
  for (let i = 0; i < mathElements.length; i++) {
203
186
  const el = mathElements[i];
204
-
205
187
  if (el.offsetParent !== null && !el.closest('.hidden-readable') && !el.closest('.MJX_Assistive_MathML') // already mathjax'd
206
188
  ) {
207
189
  return true;
208
190
  }
209
191
  }
210
-
211
192
  return false;
212
193
  }
213
-
214
194
  get mathJaxGenerated() {
215
195
  return /^MathJax|MJX/;
216
- } // elements to ignore selector
217
-
196
+ }
218
197
 
198
+ // elements to ignore selector
219
199
  get ignore_list() {
220
200
  return '#header,#mobile-header,#left-side,#quiz-elapsed-time,.ui-menu-carat';
221
201
  }
222
-
223
202
  isMathJaxIgnored(elem) {
224
203
  var _this$_features4, _elem$parentElement2;
225
-
226
204
  if (!elem) return true;
227
-
228
205
  if ((_this$_features4 = this._features) !== null && _this$_features4 !== void 0 && _this$_features4.explicit_latex_typesetting && !elem.classList.contains(MathJaxDirective.Process)) {
229
206
  return true;
230
- } // ignore disconnected elements
231
-
207
+ }
232
208
 
233
- if (!document.body.contains(elem)) return true; // check if elem is in the ignore list
209
+ // ignore disconnected elements
210
+ if (!document.body.contains(elem)) return true;
234
211
 
212
+ // check if elem is in the ignore list
235
213
  if (((_elem$parentElement2 = elem.parentElement) === null || _elem$parentElement2 === void 0 ? void 0 : _elem$parentElement2.querySelector(this.ignore_list)) === elem) {
236
214
  return true;
237
- } // check if elem is a child of something we're ignoring
238
-
215
+ }
239
216
 
217
+ // check if elem is a child of something we're ignoring
240
218
  while (elem !== document.body) {
241
219
  // child of ignored element?
242
220
  if (elem.classList.contains(MathJaxDirective.Ignore)) {
243
221
  return true;
244
- } // // child of MathJax generated element?
222
+ }
223
+
224
+ // // child of MathJax generated element?
245
225
  // if (
246
226
  // this.mathJaxGenerated.test(elem.id) ||
247
227
  // this.mathJaxGenerated.test(elem.getAttribute('class'))
248
228
  // ) {
249
229
  // return true
250
230
  // }
251
-
252
-
253
231
  elem = elem.parentElement;
254
232
  }
255
-
256
233
  return false;
257
- } // legacy api
258
-
234
+ }
259
235
 
236
+ // legacy api
260
237
  isMathMLOnPage() {
261
238
  return this.isMathOnPage();
262
239
  }
263
-
264
240
  isMathJaxLoaded() {
265
241
  var _window$MathJax;
266
-
267
242
  return !!((_window$MathJax = window.MathJax) !== null && _window$MathJax !== void 0 && _window$MathJax.Hub);
268
243
  }
269
-
270
244
  shouldProcess(elem) {
271
245
  return this.isMathInElement(elem) && !this.isMathJaxIgnored(elem);
272
246
  }
273
-
274
247
  processNewMathInElem(elem) {
275
248
  if (this.shouldProcess(elem)) {
276
249
  if (this.isMathJaxLoaded()) {
@@ -280,53 +253,43 @@ class Mathml {
280
253
  }
281
254
  }
282
255
  }
256
+
283
257
  /*
284
258
  * elem: string with elementId or en elem object
285
259
  */
286
-
287
-
288
260
  reloadElement(elem) {
289
261
  if (this.isMathJaxLoaded()) {
290
262
  window.MathJax.Hub.Queue(['Typeset', window.MathJax.Hub, elem]);
291
263
  }
292
264
  }
293
-
294
265
  static get processNewMathEventName() {
295
266
  return 'process-new-math';
296
267
  }
297
-
298
268
  }
299
-
300
269
  const mathImageHelper = {
301
270
  getImageEquationText(img) {
302
271
  let equation_text;
303
272
  const src = img.getAttribute('src');
304
-
305
273
  if (src) {
306
274
  try {
307
275
  const url = new URL(src, 'http://localhost'); // we don't care about the host
308
-
309
276
  const srceq = url.pathname.split('/equation_images/')[1];
310
-
311
277
  if (srceq) {
312
278
  equation_text = decodeURIComponent(decodeURIComponent(srceq));
313
279
  }
314
- } catch (_ex) {// If we failed to parse the src URL, something is wrong.
280
+ } catch (_ex) {
281
+ // If we failed to parse the src URL, something is wrong.
315
282
  }
316
283
  }
317
-
318
284
  return equation_text;
319
285
  },
320
-
321
286
  catchEquationImages(refnode) {
322
- refnode = Array.isArray(refnode) ? refnode[0] : refnode; // find equation images and replace with inline LaTeX
323
-
287
+ refnode = Array.isArray(refnode) ? refnode[0] : refnode;
288
+ // find equation images and replace with inline LaTeX
324
289
  const eqimgs = refnode.querySelectorAll('img.equation_image');
325
-
326
290
  if (eqimgs.length > 0) {
327
291
  eqimgs.forEach(img => {
328
292
  const equation_text = this.getImageEquationText(img);
329
-
330
293
  if (equation_text) {
331
294
  img.setAttribute('mathjaxified', '');
332
295
  const mathtex = document.createElement('span');
@@ -334,7 +297,6 @@ const mathImageHelper = {
334
297
  mathtex.setAttribute('style', img.getAttribute('style'));
335
298
  mathtex.textContent = `\\(${equation_text}\\)`;
336
299
  mathtex.style.maxWidth = '';
337
-
338
300
  if (img.nextSibling) {
339
301
  img.parentElement.insertBefore(mathtex, img.nextSibling);
340
302
  } else {
@@ -345,7 +307,6 @@ const mathImageHelper = {
345
307
  return true;
346
308
  }
347
309
  },
348
-
349
310
  removeStrayEquationImages(refnode) {
350
311
  const eqimgs = refnode.querySelectorAll('img.equation_image');
351
312
  eqimgs.forEach(img => {
@@ -354,35 +315,28 @@ const mathImageHelper = {
354
315
  }
355
316
  });
356
317
  },
357
-
358
318
  nearlyInfiniteStyleFix(elem) {
359
319
  elem.querySelectorAll('[style*=clip], [style*=vertical-align]').forEach(e => {
360
320
  let changed = false;
361
321
  let s = e.getAttribute('style');
362
322
  const r = e.style.clip;
363
-
364
323
  if (/[\d.]+e\+?\d/.test(r)) {
365
324
  // e.g. "rect(1e+07em, -9.999e+06em, -1e+07em, -999.997em)"
366
325
  s = s.replace(/clip: rect[^;]+;/, '');
367
326
  changed = true;
368
327
  }
369
-
370
328
  const v = e.style.verticalAlign;
371
-
372
329
  if (Math.abs(parseFloat(v)) > 10000) {
373
330
  // 10000 is a ridiculously large number
374
331
  s = s.replace(/vertical-align[^;]+;/, '');
375
332
  changed = true;
376
333
  }
377
-
378
334
  if (changed) {
379
335
  e.setAttribute('style', s);
380
336
  }
381
337
  });
382
338
  }
383
-
384
339
  };
385
-
386
340
  function handleNewMath(event) {
387
341
  if (event !== null && event !== void 0 && event.detail) {
388
342
  const {
@@ -394,6 +348,5 @@ function handleNewMath(event) {
394
348
  mathml.processNewMathInElem(target);
395
349
  }
396
350
  }
397
-
398
351
  window.addEventListener(Mathml.processNewMathEventName, handleNewMath);
399
352
  export { Mathml, mathImageHelper, MathJaxDirective };