@inboxsdk/core 0.2.28-alpha.3 → 0.2.28-alpha.5

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 (398) hide show
  1. package/inboxsdk.js +1 -1
  2. package/inboxsdk.js.map +1 -1
  3. package/package.json +5 -1
  4. package/src/build/exec.js +26 -0
  5. package/src/build/spawn.js +17 -0
  6. package/src/common/ajax.js +90 -0
  7. package/src/common/cachebust-url.js +10 -0
  8. package/src/common/censorHTMLstring.js +37 -0
  9. package/src/common/censorHTMLtree.js +28 -0
  10. package/src/common/censorJSONTree.js +15 -0
  11. package/src/common/connectivity-test.js +21 -0
  12. package/src/common/defer.js +11 -0
  13. package/src/common/find-parent.js +10 -0
  14. package/src/common/get-extension-id.js +7 -0
  15. package/src/common/get-or-fail.js +8 -0
  16. package/src/common/get-session-id.js +14 -0
  17. package/src/common/get-stack-trace.js +6 -0
  18. package/src/common/html-to-text.js +7 -0
  19. package/src/common/isElementVisible.js +6 -0
  20. package/src/common/load-script.js +127 -0
  21. package/src/common/log-error.js +191 -0
  22. package/src/common/quoted-split.js +18 -0
  23. package/src/common/rate-limit-queuer.js +57 -0
  24. package/src/common/rate-limit.js +14 -0
  25. package/src/common/version.js +6 -0
  26. package/src/inboxsdk-js/check-requirements.js +7 -3
  27. package/src/inboxsdk-js/header.js +1 -0
  28. package/src/inboxsdk-js/inboxsdk-NONREMOTE-INTEGRATED-PAGEWORLD.js +5 -6
  29. package/src/inboxsdk-js/inboxsdk-NONREMOTE.js +4 -3
  30. package/src/inboxsdk-js/inboxsdk-REMOTE.js +3 -1
  31. package/src/inboxsdk-js/inboxsdk-TEST.js +4 -3
  32. package/src/inboxsdk-js/inboxsdk.js +33 -39
  33. package/src/inboxsdk-js/loading/load-platform-implementation-DEV.js +15 -18
  34. package/src/inboxsdk-js/loading/platform-implementation-loader.js +27 -0
  35. package/src/injected-js/gmail/constants.js +2 -0
  36. package/src/injected-js/gmail/modify-suggestions.js +106 -0
  37. package/src/injected-js/gmail/modify-suggestions.test.js +8 -9
  38. package/src/injected-js/gmail/setup-gmail-interceptor.js +340 -579
  39. package/src/injected-js/gmail/setup-gmonkey-handler.js +49 -0
  40. package/src/injected-js/gmail/sync-compose-processor-20220909.js +298 -0
  41. package/src/injected-js/gmail/sync-compose-processor.js +55 -0
  42. package/src/injected-js/gmail/sync-compose-request-processor.js +110 -0
  43. package/src/injected-js/gmail/sync-compose-request-processor.test.js +39 -49
  44. package/src/injected-js/gmail/thread-identifier/click-and-get-popup-url.js +20 -33
  45. package/src/injected-js/gmail/thread-identifier/index.js +57 -93
  46. package/src/injected-js/gmail/thread-identifier/thread-row-parser.js +22 -31
  47. package/src/injected-js/gmail/thread-identifier/thread-row-parser.test.js +12 -28
  48. package/src/injected-js/inbox/setupAjaxInterceptor.js +64 -121
  49. package/src/injected-js/inbox/setupClickAndGetNewIframeSrc.js +53 -66
  50. package/src/injected-js/inbox/setupComposeViewDraftIDFinder.js +20 -36
  51. package/src/injected-js/inbox/setupInboxFakeWindowResizeListener.js +13 -13
  52. package/src/injected-js/injected-logger.js +50 -0
  53. package/src/injected-js/main.js +11 -24
  54. package/src/injected-js/message-metadata-holder.js +52 -82
  55. package/src/injected-js/setup-data-exposer.js +89 -148
  56. package/src/injected-js/setup-error-silencer.js +21 -21
  57. package/src/injected-js/setup-event-reemitter.js +30 -22
  58. package/src/injected-js/setupCustomViewEventAssassin.js +90 -0
  59. package/src/injected-js/setupInboxCustomViewLinkFixer.js +24 -29
  60. package/src/injected-js/setupPushStateListener.js +18 -11
  61. package/src/injected-js/xhr-helper.js +62 -65
  62. package/src/injected-js/xhr-proxy-factory.js +195 -445
  63. package/src/injected-js/xhr-proxy-factory.test.js +824 -991
  64. package/src/platform-implementation-js/constants/nav-item-types.js +19 -0
  65. package/src/platform-implementation-js/constants/router.js +14 -9
  66. package/src/platform-implementation-js/constants/toolbars.js +8 -3
  67. package/src/platform-implementation-js/dom-driver/gmail/custom-style.js +13 -13
  68. package/src/platform-implementation-js/dom-driver/gmail/gmail-butter-bar-driver.js +115 -136
  69. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-app-menu-item.js +21 -0
  70. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-collapsible-panel.js +28 -0
  71. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-nav-item.js +98 -0
  72. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-support-item.js +4 -0
  73. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-toolbar-button-for-app.js +13 -14
  74. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/create-link.js +27 -48
  75. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/encodeDraftUrlId.js +8 -0
  76. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-draft-id-for-message-id.js +31 -42
  77. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-native-nav-item.js +30 -40
  78. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-rfc-message-id-for-gmail-message-id.js +12 -0
  79. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-rfc-message-id-for-gmail-thread-id.js +33 -0
  80. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-url-object.js +10 -18
  81. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/getSyncThreadForOldGmailThreadId.js +21 -28
  82. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/getSyncThreadFromSyncThreadId.js +33 -45
  83. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/gmail-load-event.js +31 -49
  84. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/goto-view.js +58 -65
  85. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/isIntegratedViewGmail.js +4 -0
  86. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/keyboard-shortcut-help-modifier.js +40 -124
  87. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/open-compose-window.js +17 -22
  88. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/open-draft-by-message-id.js +44 -0
  89. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/open-draft-by-message-id.test.js +10 -11
  90. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/override-gmail-back-button.js +44 -80
  91. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/register-search-query-rewriter.js +19 -26
  92. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/register-search-suggestions-provider.js +71 -147
  93. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/setup-compose-view-driver-stream.js +91 -148
  94. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/setup-route-view-driver-stream.js +150 -166
  95. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/setup-route-view-driver-stream.test.js +70 -120
  96. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-app-id-warning.js +15 -15
  97. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-custom-route-view.js +44 -67
  98. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-custom-thread-list.js +230 -379
  99. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-custom-thread-list.test.js +121 -307
  100. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-native-route-view.js +17 -24
  101. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/suppressAddon.js +41 -49
  102. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/temporary-track-download-url-validity.js +30 -40
  103. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/thread-row-identifier.js +28 -60
  104. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/track-events.js +61 -133
  105. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/track-gmail-styles.js +95 -0
  106. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/user-info.js +30 -42
  107. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/user-info.test.js +52 -46
  108. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver.js +354 -694
  109. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter/get-main-content-element-changed-stream.js +38 -0
  110. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter/wait-for-gmail-mode-to-settle.js +12 -0
  111. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter.js +253 -0
  112. package/src/platform-implementation-js/dom-driver/gmail/gmail-page-communicator.js +200 -0
  113. package/src/platform-implementation-js/dom-driver/gmail/gmail-response-processor.js +533 -0
  114. package/src/platform-implementation-js/dom-driver/gmail/gmail-sync-response-processor.js +289 -0
  115. package/src/platform-implementation-js/dom-driver/gmail/is-compose-titlebar-light-color.js +21 -0
  116. package/src/platform-implementation-js/dom-driver/gmail/make-xhr-interceptor.js +77 -93
  117. package/src/platform-implementation-js/dom-driver/gmail/makePageParserTree.js +28 -0
  118. package/src/platform-implementation-js/dom-driver/gmail/pageParserOptions.js +19 -0
  119. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-menu-item-view.js +126 -0
  120. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/index.js +35 -82
  121. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/index.test.js +44 -94
  122. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-companion-global-icon-area.js +12 -19
  123. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-companion-thread-icon-area.js +17 -29
  124. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-to-icon-area.js +26 -26
  125. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/index.js +391 -797
  126. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-toolbar-button-view/monitor-top-banner-size-and-react.js +7 -9
  127. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-toolbar-button-view.js +60 -109
  128. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-area-view.js +95 -135
  129. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-card-view.js +103 -211
  130. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-card-view.test.js +61 -61
  131. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-backdrop.js +17 -17
  132. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-collapsible-section-view.js +188 -541
  133. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-button.js +67 -135
  134. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-compose-notice.js +27 -49
  135. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-inner-sidebar.js +7 -13
  136. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-outer-sidebar.js +9 -22
  137. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-recipient-row.js +36 -63
  138. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-status-bar.js +101 -0
  139. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-tooltip-to-button.js +38 -113
  140. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/detectClassicRecipientsArea.js +38 -0
  141. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/ensure-app-button-toolbars-are-closed.js +11 -16
  142. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/ensure-grouping-is-open.js +11 -17
  143. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/focus.js +8 -11
  144. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/from-manager.js +27 -47
  145. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-additional-action-toolbar.js +11 -24
  146. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-address-changes-stream.js +59 -111
  147. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-address-information-extractor.js +28 -0
  148. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-body-changes-stream.js +15 -14
  149. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-formatting-area-offset-left.js +11 -17
  150. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-minimized-stream.js +18 -24
  151. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-recipients.js +22 -0
  152. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-response-type-changes-stream.js +19 -23
  153. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/gmail-compose-button-view.js +233 -0
  154. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/insert-link-into-body.js +11 -19
  155. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/manage-button-grouping.js +141 -376
  156. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/monitor-selection-range.js +17 -28
  157. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/override-edit-subject.js +34 -70
  158. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/page-parser.js +223 -0
  159. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/position-formatting-toolbar.js +10 -17
  160. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/set-recipients.js +157 -0
  161. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/setupLinkPopovers.js +109 -0
  162. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/size-fixer.js +83 -137
  163. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/update-insert-more-area-left.js +10 -19
  164. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view.js +632 -1190
  165. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view/attachment-icon.js +5 -0
  166. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view/get-updated-contact.js +29 -38
  167. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view.js +327 -617
  168. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-nav-item-view.js +759 -0
  169. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-route-view/gmail-route-processor.js +26 -49
  170. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-route-view/gmail-route-view.js +188 -380
  171. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-row-list-view.js +104 -194
  172. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-support-item-view.js +84 -0
  173. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-row-view.js +382 -811
  174. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view/add-icon-area.js +34 -58
  175. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view.js +330 -581
  176. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view.test.js +123 -277
  177. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-view/width-manager.js +15 -35
  178. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-view.js +216 -571
  179. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-toolbar-view.js +152 -336
  180. package/src/platform-implementation-js/dom-driver/gmail/views/native-gmail-nav-item-view.js +87 -211
  181. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/button-color-classes.js +33 -0
  182. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/button-view.js +325 -0
  183. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/create-accessory-button-view.js +58 -0
  184. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/create-parent-accessory-button-view.js +55 -0
  185. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/inbox-dropdown-button-view.js +10 -11
  186. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/modal-button-view.js +96 -0
  187. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/more-dropdown-button-view.js +30 -0
  188. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/more-parent-accessory-button-view.js +10 -0
  189. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-action-button-view.js +20 -29
  190. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-dropdown-view.js +22 -0
  191. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-label-view.js +41 -76
  192. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-modal-view-driver.js +45 -99
  193. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-mole-view-driver.js +76 -128
  194. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-tooltip-view.js +128 -319
  195. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-top-message-bar-driver.js +45 -78
  196. package/src/platform-implementation-js/dom-driver/inbox/__mocks__/getSidebarClassnames.js +8 -4
  197. package/src/platform-implementation-js/dom-driver/inbox/addNavItem.js +36 -54
  198. package/src/platform-implementation-js/dom-driver/inbox/addRecipientRow.js +35 -53
  199. package/src/platform-implementation-js/dom-driver/inbox/createLink.js +13 -15
  200. package/src/platform-implementation-js/dom-driver/inbox/createLink.test.js +15 -18
  201. package/src/platform-implementation-js/dom-driver/inbox/custom-style.js +14 -13
  202. package/src/platform-implementation-js/dom-driver/inbox/detection/appToolbarLocation/parser.js +14 -20
  203. package/src/platform-implementation-js/dom-driver/inbox/detection/attachmentCard/parser.js +14 -13
  204. package/src/platform-implementation-js/dom-driver/inbox/detection/attachmentOverlay/parser.js +35 -67
  205. package/src/platform-implementation-js/dom-driver/inbox/detection/chatSidebar/parser.js +16 -18
  206. package/src/platform-implementation-js/dom-driver/inbox/detection/compose/parser.js +68 -185
  207. package/src/platform-implementation-js/dom-driver/inbox/detection/message/parser.js +28 -56
  208. package/src/platform-implementation-js/dom-driver/inbox/detection/nativeDrawer/parser.js +12 -10
  209. package/src/platform-implementation-js/dom-driver/inbox/detection/searchBar/parser.js +16 -16
  210. package/src/platform-implementation-js/dom-driver/inbox/detection/thread/parser.js +24 -35
  211. package/src/platform-implementation-js/dom-driver/inbox/detection/thread-row/parser.js +37 -89
  212. package/src/platform-implementation-js/dom-driver/inbox/getComposeViewDriverLiveSet.js +56 -78
  213. package/src/platform-implementation-js/dom-driver/inbox/getInboxMessageIdForInboxThreadId.js +26 -32
  214. package/src/platform-implementation-js/dom-driver/inbox/getSidebarClassnames.js +52 -109
  215. package/src/platform-implementation-js/dom-driver/inbox/getSidebarClassnames.test.js +7 -8
  216. package/src/platform-implementation-js/dom-driver/inbox/gotoView.js +16 -20
  217. package/src/platform-implementation-js/dom-driver/inbox/gotoView.test.js +15 -16
  218. package/src/platform-implementation-js/dom-driver/inbox/inbox-butter-bar-driver.js +75 -83
  219. package/src/platform-implementation-js/dom-driver/inbox/inbox-driver.js +530 -822
  220. package/src/platform-implementation-js/dom-driver/inbox/inbox-page-communicator.js +48 -61
  221. package/src/platform-implementation-js/dom-driver/inbox/inboxResponseProcessor.js +9 -12
  222. package/src/platform-implementation-js/dom-driver/inbox/inboxResponseProcessor.test.js +12 -19
  223. package/src/platform-implementation-js/dom-driver/inbox/makePageParserTree.js +24 -33
  224. package/src/platform-implementation-js/dom-driver/inbox/pageParserOptions.js +201 -388
  225. package/src/platform-implementation-js/dom-driver/inbox/registerSearchSuggestionsProvider.js +249 -265
  226. package/src/platform-implementation-js/dom-driver/inbox/setupCustomAutocompleteSelectionHandling.js +84 -152
  227. package/src/platform-implementation-js/dom-driver/inbox/setupRouteViewDriverStream.js +55 -67
  228. package/src/platform-implementation-js/dom-driver/inbox/setupRouteViewDriverStream.test.js +43 -65
  229. package/src/platform-implementation-js/dom-driver/inbox/views/InboxLabelView.js +31 -56
  230. package/src/platform-implementation-js/dom-driver/inbox/views/InboxMoleViewDriver.js +191 -294
  231. package/src/platform-implementation-js/dom-driver/inbox/views/InboxToolbarButtonView.js +32 -45
  232. package/src/platform-implementation-js/dom-driver/inbox/views/InboxToolbarView.js +21 -39
  233. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-app-sidebar-view.js +153 -240
  234. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-app-toolbar-button-view.js +75 -150
  235. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-app-toolbar-tooltip-view.js +20 -37
  236. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-attachment-card-view.js +60 -114
  237. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-attachment-overlay-view.js +47 -65
  238. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-backdrop.js +41 -52
  239. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-chat-sidebar-view.js +27 -36
  240. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-compose-button-view.js +52 -80
  241. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-compose-view.js +465 -649
  242. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-custom-route-view.js +37 -58
  243. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-custom-route-view.test.js +14 -26
  244. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-drawer-view.js +118 -235
  245. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-dropdown-view.js +10 -11
  246. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-dummy-route-view.js +28 -46
  247. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-message-view.js +131 -202
  248. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-modal-view.js +40 -80
  249. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-route-view.js +35 -61
  250. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-thread-row-view.js +124 -221
  251. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-thread-view.js +125 -213
  252. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-thread-view.test.js +104 -126
  253. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-tooltip-view.js +36 -51
  254. package/src/platform-implementation-js/dom-driver/inbox/views/inboxNavItemView.js +158 -297
  255. package/src/platform-implementation-js/dom-driver/inbox/waitForAnimationClickBlockerGone.js +21 -35
  256. package/src/platform-implementation-js/driver-common/compose/getDiscardStream.js +24 -43
  257. package/src/platform-implementation-js/driver-common/compose/getPresendingStream.js +39 -68
  258. package/src/platform-implementation-js/driver-common/getAccountUrlPart.js +17 -0
  259. package/src/platform-implementation-js/driver-common/getGmailMessageIdForSyncMessageId.js +14 -19
  260. package/src/platform-implementation-js/driver-common/getGmailThreadIdForRfcMessageId.js +27 -35
  261. package/src/platform-implementation-js/driver-common/getOriginalMessagePage.js +33 -0
  262. package/src/platform-implementation-js/driver-common/getRfcMessageIdForSyncMessageId.js +16 -22
  263. package/src/platform-implementation-js/driver-common/getSyncThreadsForSearch.js +49 -0
  264. package/src/platform-implementation-js/driver-common/getThreadIdFromMessageId.js +14 -14
  265. package/src/platform-implementation-js/driver-common/gmailAjax.js +65 -0
  266. package/src/platform-implementation-js/driver-common/inboxAjax.js +12 -7
  267. package/src/platform-implementation-js/driver-common/render-custom-icon.js +16 -0
  268. package/src/platform-implementation-js/driver-common/requestGmailThread.js +19 -20
  269. package/src/platform-implementation-js/driver-common/sidebar/AppSidebar.js +197 -306
  270. package/src/platform-implementation-js/driver-common/sidebar/ContentPanelViewDriver.js +113 -161
  271. package/src/platform-implementation-js/driver-common/update-icon.js +90 -0
  272. package/src/platform-implementation-js/driver-interfaces/compose-view-driver.js +1 -114
  273. package/src/platform-implementation-js/driver-interfaces/driver.js +1 -131
  274. package/src/platform-implementation-js/driver-interfaces/message-view-driver.js +4 -48
  275. package/src/platform-implementation-js/driver-interfaces/mole-view-driver.js +1 -29
  276. package/src/platform-implementation-js/driver-interfaces/route-view-driver.js +1 -32
  277. package/src/platform-implementation-js/driver-interfaces/thread-row-view-driver.js +1 -11
  278. package/src/platform-implementation-js/lib/ErrorCollector.js +47 -0
  279. package/src/platform-implementation-js/lib/Membrane.js +22 -0
  280. package/src/platform-implementation-js/lib/ScrollableContainByScreen.js +30 -0
  281. package/src/platform-implementation-js/lib/array-to-lifetimes.js +43 -41
  282. package/src/platform-implementation-js/lib/array-to-lifetimes.test.js +139 -155
  283. package/src/platform-implementation-js/lib/attemptWithRetries.js +16 -0
  284. package/src/platform-implementation-js/lib/common-page-communicator.js +137 -0
  285. package/src/platform-implementation-js/lib/copyAndValidateAutocompleteResults.js +19 -38
  286. package/src/platform-implementation-js/lib/css-selector-escape.js +7 -3
  287. package/src/platform-implementation-js/lib/delay-asap.js +12 -0
  288. package/src/platform-implementation-js/lib/delay-idle.js +16 -0
  289. package/src/platform-implementation-js/lib/dom/block-and-reemit-keyboard-events.js +36 -0
  290. package/src/platform-implementation-js/lib/dom/element-view-mapper.js +8 -11
  291. package/src/platform-implementation-js/lib/dom/generic-button-view.js +39 -0
  292. package/src/platform-implementation-js/lib/dom/get-insert-before-element.js +39 -0
  293. package/src/platform-implementation-js/lib/dom/get-selection.js +23 -52
  294. package/src/platform-implementation-js/lib/dom/insert-element-in-order.js +38 -0
  295. package/src/platform-implementation-js/lib/dom/insert-html-at-cursor.js +69 -101
  296. package/src/platform-implementation-js/lib/dom/is-node-in-range.js +8 -10
  297. package/src/platform-implementation-js/lib/dom/keyboard-shortcut-stream.js +12 -0
  298. package/src/platform-implementation-js/lib/dom/make-element-child-stream.js +79 -0
  299. package/src/platform-implementation-js/lib/dom/make-element-stream-merger.js +28 -0
  300. package/src/platform-implementation-js/lib/dom/make-element-view-stream.js +15 -0
  301. package/src/platform-implementation-js/lib/dom/make-mutation-observer-chunked-stream.js +15 -0
  302. package/src/platform-implementation-js/lib/dom/make-mutation-observer-stream.js +5 -0
  303. package/src/platform-implementation-js/lib/dom/on-mouse-down-and-up.js +15 -17
  304. package/src/platform-implementation-js/lib/dom/outsideClicksAndEscape.js +39 -0
  305. package/src/platform-implementation-js/lib/dom/parentNodes.js +8 -0
  306. package/src/platform-implementation-js/lib/dom/querySelectorOne.js +8 -11
  307. package/src/platform-implementation-js/lib/dom/querySelectorOrFail.js +6 -0
  308. package/src/platform-implementation-js/lib/dom/reemitClickEventForReact.js +22 -0
  309. package/src/platform-implementation-js/lib/dom/set-css.js +7 -3
  310. package/src/platform-implementation-js/lib/dom/set-value-and-dispatch-event.js +9 -11
  311. package/src/platform-implementation-js/lib/dom/simulate-drag-and-drop.js +32 -33
  312. package/src/platform-implementation-js/lib/dom/simulate-key.js +46 -0
  313. package/src/platform-implementation-js/lib/dom/simulate-mouse-event.js +16 -0
  314. package/src/platform-implementation-js/lib/dom/trigger-relay-event.js +7 -0
  315. package/src/platform-implementation-js/lib/extract-contact-from-email-contact-string.js +25 -0
  316. package/src/platform-implementation-js/lib/extract-contact-from-email-contact-string.test.js +23 -26
  317. package/src/platform-implementation-js/lib/fake-window-resize.js +5 -0
  318. package/src/platform-implementation-js/lib/from-event-target-capture.js +12 -0
  319. package/src/platform-implementation-js/lib/fromEventsWithOptions.js +10 -0
  320. package/src/platform-implementation-js/lib/handle-compose-link-chips.js +86 -149
  321. package/src/platform-implementation-js/lib/handler-registry.js +67 -0
  322. package/src/platform-implementation-js/lib/idMap.js +45 -0
  323. package/src/platform-implementation-js/lib/imageRequest.js +8 -0
  324. package/src/platform-implementation-js/lib/incrementName.js +7 -0
  325. package/src/platform-implementation-js/lib/inject-script-EMBEDDED.js +14 -0
  326. package/src/platform-implementation-js/lib/inject-script.js +33 -0
  327. package/src/platform-implementation-js/lib/insert-link-chip-into-body.js +42 -57
  328. package/src/platform-implementation-js/lib/is-valid-app-id.js +27 -0
  329. package/src/platform-implementation-js/lib/is-valid-email.js +14 -0
  330. package/src/platform-implementation-js/lib/isNotNil.js +5 -0
  331. package/src/platform-implementation-js/lib/isStreakAppId.js +11 -0
  332. package/src/platform-implementation-js/lib/logger.js +441 -0
  333. package/src/platform-implementation-js/lib/make-revocable-function.js +19 -21
  334. package/src/platform-implementation-js/lib/make-revocable-function.test.js +20 -22
  335. package/src/platform-implementation-js/lib/parseParamsFromRouteID.js +15 -17
  336. package/src/platform-implementation-js/lib/parseParamsFromRouteID.test.js +9 -18
  337. package/src/platform-implementation-js/lib/persistent-queue.js +107 -0
  338. package/src/platform-implementation-js/lib/populateRouteID.js +8 -9
  339. package/src/platform-implementation-js/lib/populateRouteID.test.js +20 -19
  340. package/src/platform-implementation-js/lib/react/ElementContainer.js +23 -20
  341. package/src/platform-implementation-js/lib/rewriteCssWithIdMap.js +10 -9
  342. package/src/platform-implementation-js/lib/rewriteCssWithIdMap.test.js +13 -20
  343. package/src/platform-implementation-js/lib/routeIDmatchesHash.js +13 -18
  344. package/src/platform-implementation-js/lib/routeIDmatchesHash.test.js +11 -17
  345. package/src/platform-implementation-js/lib/safe-event-emitter.js +17 -0
  346. package/src/platform-implementation-js/lib/shared-style.js +14 -13
  347. package/src/platform-implementation-js/lib/stopper-pool.js +41 -0
  348. package/src/platform-implementation-js/lib/stream-wait-for.js +30 -0
  349. package/src/platform-implementation-js/lib/toItemWithLifetimeStream.js +18 -17
  350. package/src/platform-implementation-js/lib/toLiveSet.js +17 -15
  351. package/src/platform-implementation-js/lib/wait-for.js +28 -0
  352. package/src/platform-implementation-js/lib/waitForAsync.js +19 -0
  353. package/src/platform-implementation-js/main-INTEGRATED-PAGEWORLD.js +6 -5
  354. package/src/platform-implementation-js/main.js +9 -24
  355. package/src/platform-implementation-js/namespaces/app-menu.d.ts.map +1 -1
  356. package/src/platform-implementation-js/namespaces/app-menu.js +31 -0
  357. package/src/platform-implementation-js/namespaces/butter-bar.js +163 -0
  358. package/src/platform-implementation-js/namespaces/compose.js +37 -60
  359. package/src/platform-implementation-js/namespaces/conversations.js +52 -124
  360. package/src/platform-implementation-js/namespaces/global.js +27 -39
  361. package/src/platform-implementation-js/namespaces/keyboard.js +29 -33
  362. package/src/platform-implementation-js/namespaces/lists.js +25 -31
  363. package/src/platform-implementation-js/namespaces/modal.js +34 -28
  364. package/src/platform-implementation-js/namespaces/nav-menu.js +30 -45
  365. package/src/platform-implementation-js/namespaces/router.js +70 -137
  366. package/src/platform-implementation-js/namespaces/search.js +19 -17
  367. package/src/platform-implementation-js/namespaces/toolbars.js +71 -117
  368. package/src/platform-implementation-js/namespaces/user.js +36 -37
  369. package/src/platform-implementation-js/namespaces/widgets.js +54 -61
  370. package/src/platform-implementation-js/platform-implementation.js +98 -229
  371. package/src/platform-implementation-js/views/SimpleElementView.js +16 -0
  372. package/src/platform-implementation-js/views/app-menu-item-view.js +257 -0
  373. package/src/platform-implementation-js/views/app-toolbar-button-view.js +26 -47
  374. package/src/platform-implementation-js/views/collapsible-panel-view.js +222 -0
  375. package/src/platform-implementation-js/views/collapsible-section-view.js +66 -63
  376. package/src/platform-implementation-js/views/compose-button-view.js +45 -0
  377. package/src/platform-implementation-js/views/compose-view.js +312 -0
  378. package/src/platform-implementation-js/views/content-panel-view.js +28 -30
  379. package/src/platform-implementation-js/views/conversations/attachment-card-view.js +21 -44
  380. package/src/platform-implementation-js/views/conversations/custom-message-view.js +44 -104
  381. package/src/platform-implementation-js/views/conversations/message-view.js +131 -202
  382. package/src/platform-implementation-js/views/conversations/thread-view.js +75 -127
  383. package/src/platform-implementation-js/views/keyboard-shortcut-handle.js +14 -0
  384. package/src/platform-implementation-js/views/native-nav-item-view.js +32 -65
  385. package/src/platform-implementation-js/views/nav-item-view.js +51 -115
  386. package/src/platform-implementation-js/views/route-view/custom-route-view.js +25 -20
  387. package/src/platform-implementation-js/views/route-view/dummy-route-view-driver.js +18 -18
  388. package/src/platform-implementation-js/views/route-view/list-route-view.js +30 -52
  389. package/src/platform-implementation-js/views/route-view/route-view.js +24 -35
  390. package/src/platform-implementation-js/views/section-view.js +60 -52
  391. package/src/platform-implementation-js/views/thread-row-view.js +49 -74
  392. package/src/platform-implementation-js/widgets/buttons/basic-button-view-controller.js +39 -0
  393. package/src/platform-implementation-js/widgets/buttons/dropdown-button-view-controller.js +98 -0
  394. package/src/platform-implementation-js/widgets/buttons/dropdown-view.js +122 -0
  395. package/src/platform-implementation-js/widgets/drawer-view.js +29 -36
  396. package/src/platform-implementation-js/widgets/modal-view.js +39 -68
  397. package/src/platform-implementation-js/widgets/mole-view.js +22 -22
  398. package/src/platform-implementation-js/widgets/top-message-bar-view.js +13 -10
@@ -1,113 +1,81 @@
1
- /* @flow */
1
+ "use strict";
2
2
 
3
- import * as ud from 'ud';
4
- import Kefir from 'kefir';
5
-
6
- var insertHTMLatCursor = ud.defn(
7
- module,
8
- function insertHTMLatCursor(
9
- element: HTMLElement,
10
- html: string,
11
- oldRange: ?Object
12
- ): ?HTMLElement {
13
- element.focus();
14
-
15
- if (element instanceof HTMLTextAreaElement) {
16
- var oldStart = (element: any).selectionStart;
17
- // first delete selected range
18
- if ((element: any).selectionStart < (element: any).selectionEnd) {
19
- element.value =
20
- element.value.substring(0, (element: any).selectionStart) +
21
- element.value.substring((element: any).selectionEnd);
22
- }
23
- // insert into position
24
- element.value =
25
- element.value.substring(0, oldStart) +
26
- html +
27
- element.value.substring(oldStart);
28
- // set caret
29
- (element: any).selectionStart = oldStart + html.length;
30
- (element: any).selectionEnd = oldStart + html.length;
31
- } else {
32
- var editable = null;
33
- if ((element: any).getSelection) {
34
- editable = element;
35
- } else if (element.ownerDocument && element.ownerDocument.getSelection) {
36
- editable = element.ownerDocument;
37
- }
38
-
39
- if (editable) {
40
- var sel = (editable: any).getSelection();
41
- if (sel.getRangeAt && sel.rangeCount) {
42
- var range = oldRange || sel.getRangeAt(0);
43
- range.deleteContents();
44
-
45
- var frag;
46
- if (html instanceof DocumentFragment) {
47
- frag = html;
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var ud = _interopRequireWildcard(require("ud"));
9
+ var _kefir = _interopRequireDefault(require("kefir"));
10
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
11
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
12
+ var insertHTMLatCursor = ud.defn(module, function insertHTMLatCursor(element, html, oldRange) {
13
+ element.focus();
14
+ if (element instanceof HTMLTextAreaElement) {
15
+ var oldStart = element.selectionStart;
16
+ // first delete selected range
17
+ if (element.selectionStart < element.selectionEnd) {
18
+ element.value = element.value.substring(0, element.selectionStart) + element.value.substring(element.selectionEnd);
19
+ }
20
+ // insert into position
21
+ element.value = element.value.substring(0, oldStart) + html + element.value.substring(oldStart);
22
+ // set caret
23
+ element.selectionStart = oldStart + html.length;
24
+ element.selectionEnd = oldStart + html.length;
25
+ } else {
26
+ var editable = null;
27
+ if (element.getSelection) {
28
+ editable = element;
29
+ } else if (element.ownerDocument && element.ownerDocument.getSelection) {
30
+ editable = element.ownerDocument;
31
+ }
32
+ if (editable) {
33
+ var sel = editable.getSelection();
34
+ if (sel.getRangeAt && sel.rangeCount) {
35
+ var range = oldRange || sel.getRangeAt(0);
36
+ range.deleteContents();
37
+ var frag;
38
+ if (html instanceof DocumentFragment) {
39
+ frag = html;
40
+ } else {
41
+ frag = document.createDocumentFragment();
42
+ if (html instanceof HTMLElement) {
43
+ frag.appendChild(html);
48
44
  } else {
49
- frag = document.createDocumentFragment();
50
- if (html instanceof HTMLElement) {
51
- frag.appendChild(html);
52
- } else {
53
- var el = document.createElement('div');
54
- el.innerHTML = html;
55
- var node;
56
- while ((node = el.firstChild)) {
57
- frag.appendChild(node);
58
- }
45
+ var el = document.createElement('div');
46
+ el.innerHTML = html;
47
+ var node;
48
+ while (node = el.firstChild) {
49
+ frag.appendChild(node);
59
50
  }
60
51
  }
52
+ }
53
+ var firstChild = frag.firstElementChild;
54
+ range.insertNode(frag);
61
55
 
62
- var firstChild: HTMLElement = (frag: any).firstElementChild;
63
- range.insertNode(frag);
56
+ // Simulate a mousedown event to kill any existing focus-fixers.
57
+ var event = document.createEvent('MouseEvents');
58
+ event.initMouseEvent('mousedown', false, true, window, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
59
+ event.preventDefault();
60
+ element.dispatchEvent(event);
64
61
 
65
- // Simulate a mousedown event to kill any existing focus-fixers.
66
- var event = document.createEvent('MouseEvents');
67
- (event: any).initMouseEvent(
68
- 'mousedown',
69
- false,
70
- true,
71
- window,
72
- 1,
73
- 0,
74
- 0,
75
- 0,
76
- 0,
77
- false,
78
- false,
79
- false,
80
- false,
81
- 0,
82
- null
83
- );
84
- event.preventDefault();
85
- element.dispatchEvent(event);
62
+ // Preserve the cursor position
63
+ range.collapse(false);
64
+ sel.removeAllRanges();
65
+ sel.addRange(range);
66
+ var nextUserCursorMove = _kefir.default.merge([_kefir.default.fromEvents(element, 'mousedown'), _kefir.default.fromEvents(element, 'keypress')]);
86
67
 
87
- // Preserve the cursor position
88
- range.collapse(false);
68
+ // Whenever the body element gets focus, manually make sure the cursor
69
+ // is in the right position, because Chrome likes to put it in the
70
+ // previous location instead because it hates us.
71
+ var focus = _kefir.default.fromEvents(element, 'focus').takeUntilBy(nextUserCursorMove).onValue(function () {
89
72
  sel.removeAllRanges();
90
73
  sel.addRange(range);
91
-
92
- var nextUserCursorMove = Kefir.merge([
93
- Kefir.fromEvents(element, 'mousedown'),
94
- Kefir.fromEvents(element, 'keypress'),
95
- ]);
96
-
97
- // Whenever the body element gets focus, manually make sure the cursor
98
- // is in the right position, because Chrome likes to put it in the
99
- // previous location instead because it hates us.
100
- var focus = Kefir.fromEvents(element, 'focus')
101
- .takeUntilBy(nextUserCursorMove)
102
- .onValue(function () {
103
- sel.removeAllRanges();
104
- sel.addRange(range);
105
- });
106
-
107
- return firstChild;
108
- }
74
+ });
75
+ return firstChild;
109
76
  }
110
77
  }
111
78
  }
112
- );
113
- export default insertHTMLatCursor;
79
+ });
80
+ var _default = insertHTMLatCursor;
81
+ exports.default = _default;
@@ -1,19 +1,17 @@
1
- /* @flow */
1
+ "use strict";
2
2
 
3
- export default function isNodeInRange(node: ?Node, range: ?Range): boolean {
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = isNodeInRange;
7
+ function isNodeInRange(node, range) {
4
8
  if (!range) {
5
9
  return false;
6
10
  }
7
-
8
11
  if (!node) {
9
12
  return false;
10
13
  }
11
-
12
14
  const newRange = document.createRange();
13
15
  newRange.selectNode(node);
14
-
15
- return (
16
- newRange.compareBoundaryPoints(Range.START_TO_END, range) < 1 &&
17
- range.compareBoundaryPoints(Range.START_TO_END, newRange) < 1
18
- );
19
- }
16
+ return newRange.compareBoundaryPoints(Range.START_TO_END, range) < 1 && range.compareBoundaryPoints(Range.START_TO_END, newRange) < 1;
17
+ }
@@ -0,0 +1,12 @@
1
+ import * as Kefir from 'kefir';
2
+ import Combokeys from 'combokeys-capture';
3
+ const combokeys = typeof document !== 'undefined' && new Combokeys(document.body, true);
4
+ export default function keyboardShortcutStream(chord) {
5
+ return Kefir.stream((emitter) => {
6
+ return (combokeys &&
7
+ combokeys.bind(chord, function (domEvent) {
8
+ emitter.emit(domEvent);
9
+ return false;
10
+ }, 'keydown'));
11
+ });
12
+ }
@@ -0,0 +1,79 @@
1
+ import asap from 'asap';
2
+ import * as Kefir from 'kefir';
3
+ import kefirStopper from 'kefir-stopper';
4
+ // Emits events whenever the given element has any children added or removed.
5
+ // Also when first listened to, it emits events for existing children.
6
+ export default function makeElementChildStream(element) {
7
+ if (!element || !element.nodeType) {
8
+ throw new Error('Expected element, got ' + String(element));
9
+ }
10
+ return Kefir.stream((emitter) => {
11
+ const removalStreams = new Map();
12
+ let ended = false;
13
+ function newEl(el) {
14
+ if (el.nodeType !== 1)
15
+ return;
16
+ if (removalStreams.has(el)) {
17
+ throwLater(new Error('Already had removalStream for element with class ' + el.className));
18
+ }
19
+ const removalStream = kefirStopper();
20
+ removalStreams.set(el, removalStream);
21
+ try {
22
+ emitter.emit({ el, removalStream });
23
+ }
24
+ catch (err) {
25
+ throwLater(err);
26
+ }
27
+ }
28
+ function removedEl(el) {
29
+ if (el.nodeType !== 1)
30
+ return;
31
+ const removalStream = removalStreams.get(el);
32
+ removalStreams.delete(el);
33
+ if (removalStream) {
34
+ try {
35
+ removalStream.destroy();
36
+ }
37
+ catch (err) {
38
+ throwLater(err);
39
+ }
40
+ }
41
+ else {
42
+ throwLater(new Error('Could not find removalStream for element with class ' +
43
+ el.className));
44
+ }
45
+ }
46
+ const observer = new MutationObserver(function (mutations) {
47
+ mutations.forEach((mutation) => {
48
+ Array.prototype.forEach.call(mutation.addedNodes, newEl);
49
+ Array.prototype.forEach.call(mutation.removedNodes, removedEl);
50
+ });
51
+ });
52
+ // We don't want to emit the start children synchronously before all
53
+ // stream listeners are subscribed.
54
+ asap(() => {
55
+ if (!ended) {
56
+ observer.observe(element, { childList: true });
57
+ // Clone child list first because it can change
58
+ Array.prototype.slice.call(element.children).forEach(newEl);
59
+ }
60
+ });
61
+ return function () {
62
+ ended = true;
63
+ observer.disconnect();
64
+ asap(() => {
65
+ removalStreams.forEach((removalStream) => {
66
+ removalStream.destroy();
67
+ });
68
+ });
69
+ };
70
+ });
71
+ }
72
+ // Throw error at a later time where our error-logger can pick it up. This
73
+ // avoids having this module depend on logger.js which we can't import because
74
+ // this module is used in the injected script too.
75
+ function throwLater(err) {
76
+ setTimeout(() => {
77
+ throw err;
78
+ }, 1);
79
+ }
@@ -0,0 +1,28 @@
1
+ import * as Kefir from 'kefir';
2
+ import StopperPool from '../stopper-pool';
3
+ import delayAsap from '../delay-asap';
4
+ export default function makeElementStreamMerger() {
5
+ const knownElementStopperPools = new Map();
6
+ return (event) => {
7
+ let stopperPool = knownElementStopperPools.get(event.el);
8
+ if (stopperPool) {
9
+ if (stopperPool.getSize() > 1) {
10
+ // eslint-disable-next-line no-console
11
+ console.warn('element is part of multiple element streams', stopperPool.getSize(), event.el);
12
+ }
13
+ stopperPool.add(event.removalStream.flatMap(delayAsap));
14
+ return Kefir.never();
15
+ }
16
+ else {
17
+ stopperPool = new StopperPool(event.removalStream.flatMap(delayAsap));
18
+ stopperPool.stream.onValue(function () {
19
+ knownElementStopperPools.delete(event.el);
20
+ });
21
+ knownElementStopperPools.set(event.el, stopperPool);
22
+ return Kefir.constant({
23
+ el: event.el,
24
+ removalStream: stopperPool.stream,
25
+ });
26
+ }
27
+ };
28
+ }
@@ -0,0 +1,15 @@
1
+ import * as Kefir from 'kefir';
2
+ export default function makeElementViewStream(viewFn) {
3
+ return (event) => {
4
+ const view = viewFn(event.el);
5
+ if (view) {
6
+ event.removalStream.take(1).onValue(() => {
7
+ view.destroy();
8
+ });
9
+ return Kefir.constant(view);
10
+ }
11
+ else {
12
+ return Kefir.never();
13
+ }
14
+ };
15
+ }
@@ -0,0 +1,15 @@
1
+ import * as Kefir from 'kefir';
2
+ // Creates a mutation observer watching the given element and emits the events in a stream.
3
+ export default function makeMutationObserverChunkedStream(element, options) {
4
+ return Kefir.stream((emitter) => {
5
+ const observer = new MutationObserver((mutations) => {
6
+ // Work around Safari bug where sometimes mutations is an instance of a
7
+ // different context's Array.
8
+ emitter.emit(mutations instanceof Array ? mutations : Array.from(mutations));
9
+ });
10
+ observer.observe(element, options);
11
+ return () => {
12
+ observer.disconnect();
13
+ };
14
+ });
15
+ }
@@ -0,0 +1,5 @@
1
+ import makeMutationObserverChunkedStream from './make-mutation-observer-chunked-stream';
2
+ // Creates a mutation observer watching the given element and emits the events in a stream.
3
+ export default function makeMutationObserverStream(element, options) {
4
+ return makeMutationObserverChunkedStream(element, options).flatten();
5
+ }
@@ -1,19 +1,17 @@
1
- /* @flow */
1
+ "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _fromEventTargetCapture = _interopRequireDefault(require("../from-event-target-capture"));
9
+ var _ud = require("ud");
3
10
  const Kefir = require('kefir');
4
- import fromEventTargetCapture from '../from-event-target-capture';
5
- import { defn } from 'ud';
6
-
7
- const pageMouseUps = fromEventTargetCapture((document.body: any), 'mouseup');
8
-
9
- const onMouseDownAndUp = defn(
10
- module,
11
- function onMouseDownAndUp(el: HTMLElement): Kefir.Observable<Event> {
12
- const elMouseDowns = fromEventTargetCapture(el, 'mousedown');
13
- return elMouseDowns.flatMapLatest(() =>
14
- pageMouseUps.take(1).filter((event) => el.contains(event.target))
15
- );
16
- }
17
- );
18
-
19
- export default onMouseDownAndUp;
11
+ const pageMouseUps = (0, _fromEventTargetCapture.default)(document.body, 'mouseup');
12
+ const onMouseDownAndUp = (0, _ud.defn)(module, function onMouseDownAndUp(el) {
13
+ const elMouseDowns = (0, _fromEventTargetCapture.default)(el, 'mousedown');
14
+ return elMouseDowns.flatMapLatest(() => pageMouseUps.take(1).filter(event => el.contains(event.target)));
15
+ });
16
+ var _default = onMouseDownAndUp;
17
+ exports.default = _default;
@@ -0,0 +1,39 @@
1
+ import * as Kefir from 'kefir';
2
+ import fromEventTargetCapture from '../from-event-target-capture';
3
+ import parentNodes from './parentNodes';
4
+ export default function outsideClicksAndEscape(elements) {
5
+ return Kefir.merge([
6
+ fromEventTargetCapture(document, 'click'),
7
+ // We modify the focus event on document sometimes, so we listen for
8
+ // it on body so our modifications can happen first.
9
+ fromEventTargetCapture(document.body, 'focus'),
10
+ ])
11
+ .filter((event) => !event.shouldIgnore &&
12
+ (event.isTrusted ||
13
+ (process.env.NODE_ENV === 'test' && event.__testAllow)) &&
14
+ elements.every((el) => {
15
+ for (const node of parentNodes(event.target)) {
16
+ if (node === el)
17
+ return false;
18
+ }
19
+ return true;
20
+ }))
21
+ .map((event) => ({ type: 'outsideInteraction', cause: event }))
22
+ .merge(Kefir.fromEvents(document, 'keydown')
23
+ .filter((e) => (e.key ? e.key === 'Escape' : e.which === 27))
24
+ .map((event) => {
25
+ event.preventDefault();
26
+ event.stopPropagation();
27
+ return { type: 'escape', cause: event };
28
+ }))
29
+ .map((e) => {
30
+ if (process.env.NODE_ENV !== 'production') {
31
+ const allElsStillInPage = elements.every((el) => document.contains(el));
32
+ if (!allElsStillInPage) {
33
+ // eslint-disable-next-line no-console
34
+ console.error('outsideClicksAndEscape not unsubscribed from when elements were removed from the page');
35
+ }
36
+ }
37
+ return e;
38
+ });
39
+ }
@@ -0,0 +1,8 @@
1
+ export default function* parentNodes(node) {
2
+ do {
3
+ yield node;
4
+ } while ((node =
5
+ node.rfaAnchor ||
6
+ node._logicalParent ||
7
+ node.parentNode));
8
+ }
@@ -1,16 +1,13 @@
1
- /* @flow */
1
+ "use strict";
2
2
 
3
- export default function querySelectorOne(
4
- root: Element,
5
- selector: string
6
- ): HTMLElement {
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = querySelectorOne;
7
+ function querySelectorOne(root, selector) {
7
8
  const els = root.querySelectorAll(selector);
8
9
  if (els.length !== 1) {
9
- throw new Error(
10
- `Found ${
11
- els.length
12
- } elements when expecting 1 using selector ${JSON.stringify(selector)}`
13
- );
10
+ throw new Error(`Found ${els.length} elements when expecting 1 using selector ${JSON.stringify(selector)}`);
14
11
  }
15
12
  return els[0];
16
- }
13
+ }
@@ -0,0 +1,6 @@
1
+ export default function querySelector(el, selector) {
2
+ const r = el.querySelector(selector);
3
+ if (!r)
4
+ throw new Error(`Failed to find element with selector: ${selector}`);
5
+ return r;
6
+ }
@@ -0,0 +1,22 @@
1
+ export default function reemitClickEvent(event) {
2
+ // Inbox is going to block this event from bubbling to the body. We
3
+ // want to manually dispatch an event that looks like it so that if
4
+ // the extension is using React (which listens to events on the body)
5
+ // then React will see it.
6
+ const fakeEvent = new MouseEvent('click');
7
+ Object.defineProperties(fakeEvent, {
8
+ target: { value: event.target },
9
+ detail: { value: event.detail },
10
+ screenX: { value: event.screenX },
11
+ screenY: { value: event.screenY },
12
+ clientX: { value: event.clientX },
13
+ clientY: { value: event.clientY },
14
+ button: { value: event.button },
15
+ buttons: { value: event.buttons },
16
+ ctrlKey: { value: event.ctrlKey },
17
+ shiftKey: { value: event.shiftKey },
18
+ altKey: { value: event.altKey },
19
+ metaKey: { value: event.metaKey },
20
+ });
21
+ document.dispatchEvent(fakeEvent);
22
+ }
@@ -1,7 +1,11 @@
1
- /* @flow */
1
+ "use strict";
2
2
 
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = setCss;
3
7
  // For quick temporary CSS changes
4
- export default function setCss(key: string, css: ?string) {
8
+ function setCss(key, css) {
5
9
  const id = `inboxsdk__${key}`;
6
10
  let style = document.getElementById(id);
7
11
  if (!css) {
@@ -18,4 +22,4 @@ export default function setCss(key: string, css: ?string) {
18
22
  document.head.appendChild(style);
19
23
  }
20
24
  style.textContent = css;
21
- }
25
+ }
@@ -1,14 +1,12 @@
1
- /* @flow */
2
-
3
- export default function setValueAndDispatchInputEvent(
4
- element: HTMLElement,
5
- value: string,
6
- eventName: string
7
- ) {
8
- (element: any).value = value;
1
+ "use strict";
9
2
 
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = setValueAndDispatchInputEvent;
7
+ function setValueAndDispatchInputEvent(element, value, eventName) {
8
+ element.value = value;
10
9
  const event = document.createEvent('Event');
11
- (event: any).initEvent(eventName);
12
-
10
+ event.initEvent(eventName);
13
11
  element.dispatchEvent(event);
14
- }
12
+ }