@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
@@ -0,0 +1,137 @@
1
+ import asap from 'asap';
2
+ import once from 'lodash/once';
3
+ import * as Kefir from 'kefir';
4
+ import Logger from './logger';
5
+ export default class CommonPageCommunicator {
6
+ ajaxInterceptStream;
7
+ constructor() {
8
+ this.ajaxInterceptStream = Kefir.fromEvents(document, 'inboxSDKajaxIntercept').map((x) => x.detail);
9
+ }
10
+ getUserEmailAddress() {
11
+ const s = document.head.getAttribute('data-inboxsdk-user-email-address');
12
+ if (typeof s !== 'string')
13
+ throw new Error('should not happen');
14
+ return s;
15
+ }
16
+ getUserLanguage() {
17
+ const s = document.head.getAttribute('data-inboxsdk-user-language');
18
+ if (typeof s !== 'string')
19
+ throw new Error('should not happen');
20
+ return s;
21
+ }
22
+ getIkValue() {
23
+ const ownIk = document.head.getAttribute('data-inboxsdk-ik-value');
24
+ if (ownIk) {
25
+ return ownIk;
26
+ }
27
+ // For standalone windows.
28
+ if (window.opener) {
29
+ const openerIk = window.opener.document.head.getAttribute('data-inboxsdk-ik-value');
30
+ if (openerIk) {
31
+ return openerIk;
32
+ }
33
+ else {
34
+ throw new Error("Failed to look up parent window 'ik' value");
35
+ }
36
+ }
37
+ throw new Error("Failed to look up 'ik' value");
38
+ }
39
+ isUsingSyncAPI() {
40
+ return false;
41
+ }
42
+ async getXsrfToken() {
43
+ const existingHeader = document.head.getAttribute('data-inboxsdk-xsrf-token');
44
+ if (existingHeader) {
45
+ return existingHeader;
46
+ }
47
+ else {
48
+ await this.ajaxInterceptStream
49
+ .filter(({ type }) => type === 'xsrfTokenHeaderReceived')
50
+ .take(1)
51
+ .toPromise();
52
+ const newHeader = document.head.getAttribute('data-inboxsdk-xsrf-token');
53
+ if (!newHeader)
54
+ throw new Error('Failed to look up XSRF token');
55
+ return newHeader;
56
+ }
57
+ }
58
+ async getBtaiHeader() {
59
+ const existingHeader = document.head.getAttribute('data-inboxsdk-btai-header');
60
+ if (existingHeader) {
61
+ return existingHeader;
62
+ }
63
+ else {
64
+ await this.ajaxInterceptStream
65
+ .filter(({ type }) => type === 'btaiHeaderReceived')
66
+ .take(1)
67
+ .toPromise();
68
+ const newHeader = document.head.getAttribute('data-inboxsdk-btai-header');
69
+ if (!newHeader)
70
+ throw new Error('Failed to look up BTAI header');
71
+ return newHeader;
72
+ }
73
+ }
74
+ resolveUrlRedirects(url) {
75
+ return this.pageAjax({ url, method: 'HEAD' }).then((result) => result.responseURL);
76
+ }
77
+ pageAjax(opts) {
78
+ const id = `${Date.now()}-${Math.random()}`;
79
+ const promise = Kefir.fromEvents(document, 'inboxSDKpageAjaxDone')
80
+ .filter((event) => event.detail && event.detail.id === id)
81
+ .take(1)
82
+ .flatMap((event) => {
83
+ if (event.detail.error) {
84
+ const err = Object.assign(new Error(event.detail.message || 'Connection error'), { status: event.detail.status });
85
+ if (event.detail.stack) {
86
+ err.stack = event.detail.stack;
87
+ }
88
+ return Kefir.constantError(err);
89
+ }
90
+ else {
91
+ return Kefir.constant({
92
+ text: event.detail.text,
93
+ responseURL: event.detail.responseURL,
94
+ });
95
+ }
96
+ })
97
+ .toPromise();
98
+ document.dispatchEvent(new CustomEvent('inboxSDKpageAjax', {
99
+ bubbles: false,
100
+ cancelable: false,
101
+ detail: Object.assign({}, opts, { id }),
102
+ }));
103
+ return promise;
104
+ }
105
+ silenceGmailErrorsForAMoment() {
106
+ document.dispatchEvent(new CustomEvent('inboxSDKsilencePageErrors', {
107
+ bubbles: false,
108
+ cancelable: false,
109
+ detail: null,
110
+ }));
111
+ // create error here for stacktrace
112
+ const error = new Error('Forgot to unsilence page errors');
113
+ let unsilenced = false;
114
+ const unsilence = once(() => {
115
+ unsilenced = true;
116
+ document.dispatchEvent(new CustomEvent('inboxSDKunsilencePageErrors', {
117
+ bubbles: false,
118
+ cancelable: false,
119
+ detail: null,
120
+ }));
121
+ });
122
+ asap(() => {
123
+ if (!unsilenced) {
124
+ Logger.error(error);
125
+ unsilence();
126
+ }
127
+ });
128
+ return unsilence;
129
+ }
130
+ registerAllowedHashLinkStartTerm(term) {
131
+ document.dispatchEvent(new CustomEvent('inboxSDKregisterAllowedHashLinkStartTerm', {
132
+ bubbles: false,
133
+ cancelable: false,
134
+ detail: { term },
135
+ }));
136
+ }
137
+ }
@@ -1,55 +1,36 @@
1
- /* @flow */
1
+ "use strict";
2
2
 
3
- import type { Driver } from '../driver-interfaces/driver';
4
- import type { AutocompleteSearchResult } from '../../injected-js/gmail/modify-suggestions';
5
-
6
- export default function copyAndValidateAutocompleteResults(
7
- driver: Driver,
8
- results: Array<AutocompleteSearchResult>
9
- ): Array<AutocompleteSearchResult> {
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = copyAndValidateAutocompleteResults;
7
+ function copyAndValidateAutocompleteResults(driver, results) {
10
8
  if (!Array.isArray(results)) {
11
9
  throw new Error('suggestions must be an array');
12
10
  }
13
-
14
- return results.map((result) => {
15
- const resultCopy = { ...result };
16
- if (
17
- typeof resultCopy.name !== 'string' &&
18
- typeof resultCopy.nameHTML !== 'string'
19
- ) {
11
+ return results.map(result => {
12
+ const resultCopy = {
13
+ ...result
14
+ };
15
+ if (typeof resultCopy.name !== 'string' && typeof resultCopy.nameHTML !== 'string') {
20
16
  throw new Error('suggestion must have name or nameHTML property');
21
17
  }
22
- if (
23
- typeof resultCopy.routeName !== 'string' &&
24
- typeof resultCopy.externalURL !== 'string' &&
25
- typeof resultCopy.searchTerm !== 'string' &&
26
- typeof resultCopy.onClick !== 'function'
27
- ) {
28
- throw new Error(
29
- 'suggestion must have routeName, externalURL, ' +
30
- 'searchTerm, or onClick property'
31
- );
18
+ if (typeof resultCopy.routeName !== 'string' && typeof resultCopy.externalURL !== 'string' && typeof resultCopy.searchTerm !== 'string' && typeof resultCopy.onClick !== 'function') {
19
+ throw new Error('suggestion must have routeName, externalURL, ' + 'searchTerm, or onClick property');
32
20
  }
33
- if (typeof (resultCopy: any).iconURL === 'string') {
34
- const iconURL = (resultCopy: any).iconURL;
35
- driver
36
- .getLogger()
37
- .deprecationWarning(
38
- 'AutocompleteSearchResult "iconURL" property',
39
- 'AutocompleteSearchResult.iconUrl'
40
- );
21
+ if (typeof resultCopy.iconURL === 'string') {
22
+ const iconURL = resultCopy.iconURL;
23
+ driver.getLogger().deprecationWarning('AutocompleteSearchResult "iconURL" property', 'AutocompleteSearchResult.iconUrl');
41
24
  if (!resultCopy.iconUrl) {
42
25
  if (driver.getOpts().REQUESTED_API_VERSION === 1) {
43
26
  resultCopy.iconUrl = iconURL;
44
27
  } else {
45
28
  // eslint-disable-next-line no-console
46
- console.error(
47
- 'Support for iconURL property was dropped after API version 1'
48
- );
29
+ console.error('Support for iconURL property was dropped after API version 1');
49
30
  }
50
31
  }
51
- delete (resultCopy: any).iconURL;
32
+ delete resultCopy.iconURL;
52
33
  }
53
34
  return resultCopy;
54
35
  });
55
- }
36
+ }
@@ -1,8 +1,12 @@
1
- /* @flow */
1
+ "use strict";
2
2
 
3
- export default function cssSelectorEscape(text: string): string {
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = cssSelectorEscape;
7
+ function cssSelectorEscape(text) {
4
8
  if (text.length === 0 || /^-?[0-9]/.test(text)) {
5
9
  throw new Error('Invalid CSS selector');
6
10
  }
7
11
  return text.replace(/[^a-z0-9]/g, '\\$&');
8
- }
12
+ }
@@ -0,0 +1,12 @@
1
+ import asap from 'asap';
2
+ import * as Kefir from 'kefir';
3
+ // Returns a stream that emits a value in the next event loop run. Works well
4
+ // with flatmap.
5
+ export default function delayAsap(value) {
6
+ return Kefir.stream((emitter) => {
7
+ asap(() => {
8
+ emitter.emit(value);
9
+ emitter.end();
10
+ });
11
+ });
12
+ }
@@ -0,0 +1,16 @@
1
+ import * as Kefir from 'kefir';
2
+ const requestIdleCallback = global.requestIdleCallback || ((cb) => setTimeout(cb, 0));
3
+ const cancelIdleCallback = global.cancelIdleCallback || clearTimeout;
4
+ // Returns a stream that emits a value using requestIdleCallback. Works well
5
+ // with flatmap.
6
+ export default function delayIdle(timeout, value) {
7
+ return Kefir.stream((emitter) => {
8
+ const t = requestIdleCallback(() => {
9
+ emitter.emit(value);
10
+ emitter.end();
11
+ }, timeout == null ? null : { timeout });
12
+ return () => {
13
+ cancelIdleCallback(t);
14
+ };
15
+ });
16
+ }
@@ -0,0 +1,36 @@
1
+ import Kefir from 'kefir';
2
+ export default function blockAndReemiteKeyboardEvents(element) {
3
+ // Gmail stops propagation of keyboard events from escaping
4
+ // a specific compose window, which prevents any React components rendered
5
+ // in the compose window's subtree from getting them (since React adds
6
+ // a single event listener on the document). By stopping propagation of
7
+ // the original event and reemiting it on the document, we preserve
8
+ // exisitng behavior while giving React a chance to hear it.
9
+ Kefir.merge([
10
+ Kefir.fromEvents(element, 'keypress'),
11
+ Kefir.fromEvents(element, 'keydown'),
12
+ Kefir.fromEvents(element, 'keyup'),
13
+ ]).onValue((event) => {
14
+ event.stopPropagation();
15
+ const fakeEvent = new KeyboardEvent(event.type, { bubbles: true });
16
+ Object.defineProperties(fakeEvent, {
17
+ cancelable: { value: event.cancelable },
18
+ bubbles: { value: event.bubbles },
19
+ target: { value: event.target },
20
+ detail: { value: event.detail },
21
+ key: { value: event.key },
22
+ code: { value: event.code },
23
+ location: { value: event.location },
24
+ ctrlKey: { value: event.ctrlKey },
25
+ shiftKey: { value: event.shiftKey },
26
+ altKey: { value: event.altKey },
27
+ metaKey: { value: event.metaKey },
28
+ repeat: { value: event.repeat },
29
+ isComposing: { value: event.isComposing },
30
+ charCode: { value: event.charCode },
31
+ keyCode: { value: event.keyCode },
32
+ which: { value: event.which },
33
+ });
34
+ document.dispatchEvent(fakeEvent);
35
+ });
36
+ }
@@ -1,20 +1,17 @@
1
- /* @flow */
2
-
3
- import type Kefir from 'kefir';
1
+ "use strict";
4
2
 
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = elementViewMapper;
5
7
  // Returns a function suitable for mapping over a stream returned from
6
8
  // makeElementChildStream or kefirMakeElementChildStream.
7
- type View = { destroy(): void };
8
- import type { ElementWithLifetime } from './make-element-child-stream';
9
-
10
- export default function elementViewMapper<T: View>(
11
- viewFn: (el: HTMLElement) => T
12
- ): (event: ElementWithLifetime) => T {
13
- return (event) => {
9
+ function elementViewMapper(viewFn) {
10
+ return event => {
14
11
  const view = viewFn(event.el);
15
12
  event.removalStream.take(1).onValue(() => {
16
13
  view.destroy();
17
14
  });
18
15
  return view;
19
16
  };
20
- }
17
+ }
@@ -0,0 +1,39 @@
1
+ import * as Kefir from 'kefir';
2
+ import kefirBus from 'kefir-bus';
3
+ export default class GenericButtonView {
4
+ _eventStream = kefirBus();
5
+ _element;
6
+ constructor(element) {
7
+ this._element = element;
8
+ this._setupEventStream();
9
+ }
10
+ destroy() {
11
+ this._element.remove();
12
+ this._eventStream.end();
13
+ }
14
+ getElement() {
15
+ return this._element;
16
+ }
17
+ getEventStream() {
18
+ return this._eventStream;
19
+ }
20
+ activate() {
21
+ /* do nothing */
22
+ }
23
+ deactivate() {
24
+ /* do nothing */
25
+ }
26
+ _setupEventStream() {
27
+ const clickEventStream = Kefir.fromEvents(this._element, 'click');
28
+ clickEventStream.onValue((event) => {
29
+ event.stopPropagation();
30
+ event.preventDefault();
31
+ });
32
+ this._eventStream.plug(clickEventStream.map((event) => {
33
+ return {
34
+ eventName: 'click',
35
+ domEvent: event,
36
+ };
37
+ }));
38
+ }
39
+ }
@@ -0,0 +1,39 @@
1
+ // Use insert-element-in-order instead of this!
2
+ export default function getInsertBeforeElement(checkElement, childElements, dataAttributes) {
3
+ const checkValues = {};
4
+ dataAttributes.forEach(function (attribute) {
5
+ const stringValue = checkElement.getAttribute(attribute);
6
+ checkValues[attribute] =
7
+ stringValue == null ? null : parseIfNumber(stringValue) ?? stringValue;
8
+ });
9
+ for (let ii = 0; ii < childElements.length; ii++) {
10
+ const child = childElements[ii];
11
+ if (_isChildAfter(checkValues, child, dataAttributes)) {
12
+ return child;
13
+ }
14
+ }
15
+ return null;
16
+ }
17
+ function _isChildAfter(checkValues, child, dataAttributes) {
18
+ for (let ii = 0; ii < dataAttributes.length; ii++) {
19
+ const attribute = dataAttributes[ii];
20
+ const stringValue = child.getAttribute(attribute);
21
+ const value = stringValue == null ? null : parseIfNumber(stringValue) ?? stringValue;
22
+ if (value > checkValues[attribute]) {
23
+ return true;
24
+ }
25
+ else if (value < checkValues[attribute]) {
26
+ return false;
27
+ }
28
+ }
29
+ return false;
30
+ }
31
+ function parseIfNumber(value) {
32
+ const n = parseFloat(value);
33
+ if (!isNaN(n) && isFinite(n)) {
34
+ return n;
35
+ }
36
+ else {
37
+ return null;
38
+ }
39
+ }
@@ -1,61 +1,32 @@
1
- /* @flow */
1
+ "use strict";
2
2
 
3
- import t from 'transducers.js';
4
-
5
- function isRangeEmpty(range: Range): boolean {
6
- return (
7
- range.startContainer === range.endContainer &&
8
- range.startOffset === range.endOffset
9
- );
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.getSelectedHTMLInElement = getSelectedHTMLInElement;
8
+ exports.getSelectedTextInElement = getSelectedTextInElement;
9
+ var _transducers = _interopRequireDefault(require("transducers.js"));
10
+ function isRangeEmpty(range) {
11
+ return range.startContainer === range.endContainer && range.startOffset === range.endOffset;
10
12
  }
11
13
 
12
14
  // returns true if either end appears to be inside the element
13
- function isRangeInElement(range: Range, el: HTMLElement): boolean {
15
+ function isRangeInElement(range, el) {
14
16
  return el.contains(range.startContainer) || el.contains(range.endContainer);
15
17
  }
16
-
17
- function isRangeSuitable(range: Range, el: HTMLElement): boolean {
18
+ function isRangeSuitable(range, el) {
18
19
  return !isRangeEmpty(range) && isRangeInElement(range, el);
19
20
  }
20
-
21
- export function getSelectedTextInElement(
22
- element: HTMLElement,
23
- lastRange?: ?Range
24
- ): ?string {
25
- const selection = (document: any).getSelection();
26
- return t.toArray(
27
- [
28
- selection && selection.rangeCount ? selection.getRangeAt(0) : null,
29
- lastRange,
30
- ],
31
- t.compose(
32
- t.keep(),
33
- t.filter((range: Range) => isRangeSuitable(range, element)),
34
- t.map((range: Range) => range.toString()),
35
- t.take(1)
36
- )
37
- )[0];
38
- }
39
-
40
- export function getSelectedHTMLInElement(
41
- element: HTMLElement,
42
- lastRange?: ?Range
43
- ): ?string {
44
- const selection = (document: any).getSelection();
45
- return t.toArray(
46
- [
47
- selection && selection.rangeCount ? selection.getRangeAt(0) : null,
48
- lastRange,
49
- ],
50
- t.compose(
51
- t.keep(),
52
- t.filter((range: Range) => isRangeSuitable(range, element)),
53
- t.map((range: Range) => {
54
- const div = document.createElement('div');
55
- div.appendChild(range.cloneContents());
56
- return div.innerHTML;
57
- }),
58
- t.take(1)
59
- )
60
- )[0];
21
+ function getSelectedTextInElement(element, lastRange) {
22
+ const selection = document.getSelection();
23
+ return _transducers.default.toArray([selection && selection.rangeCount ? selection.getRangeAt(0) : null, lastRange], _transducers.default.compose(_transducers.default.keep(), _transducers.default.filter(range => isRangeSuitable(range, element)), _transducers.default.map(range => range.toString()), _transducers.default.take(1)))[0];
61
24
  }
25
+ function getSelectedHTMLInElement(element, lastRange) {
26
+ const selection = document.getSelection();
27
+ return _transducers.default.toArray([selection && selection.rangeCount ? selection.getRangeAt(0) : null, lastRange], _transducers.default.compose(_transducers.default.keep(), _transducers.default.filter(range => isRangeSuitable(range, element)), _transducers.default.map(range => {
28
+ const div = document.createElement('div');
29
+ div.appendChild(range.cloneContents());
30
+ return div.innerHTML;
31
+ }), _transducers.default.take(1)))[0];
32
+ }
@@ -0,0 +1,38 @@
1
+ import t from 'transducers.js';
2
+ const DEFAULT_ORDER_ATTRS = [
3
+ 'data-group-order-hint',
4
+ 'data-order-hint',
5
+ 'data-insertion-order-hint',
6
+ ];
7
+ export default function insertElementInOrder(container, el, orderAttrs = DEFAULT_ORDER_ATTRS, insertBeforeNonSdk = false) {
8
+ // get the first element with higher order hints
9
+ const insertBeforeElement = t.toArray(Array.prototype.slice.call(container.children), t.compose(t.filter((cel) => {
10
+ let hadAnyOrderAttrs = false;
11
+ for (const name of orderAttrs) {
12
+ const attr = el.getAttribute(name);
13
+ const cattr = cel.getAttribute(name);
14
+ if (attr == null || cattr == null)
15
+ continue;
16
+ hadAnyOrderAttrs = true;
17
+ let comparison;
18
+ if (!isNaN(parseFloat(attr)) && !isNaN(parseFloat(cattr))) {
19
+ comparison = parseFloat(cattr) - parseFloat(attr);
20
+ }
21
+ else {
22
+ comparison = cattr.localeCompare(attr);
23
+ }
24
+ if (comparison > 0)
25
+ return true;
26
+ if (comparison < 0)
27
+ return false;
28
+ // If the elements had equal hint values, then check the next hint.
29
+ }
30
+ if (insertBeforeNonSdk) {
31
+ return !hadAnyOrderAttrs;
32
+ }
33
+ else {
34
+ return false;
35
+ }
36
+ }), t.take(1)))[0];
37
+ container.insertBefore(el, insertBeforeElement);
38
+ }