@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,86 +1,63 @@
1
- /* @flow */
2
-
3
- import Kefir from 'kefir';
4
- import fromEventTargetCapture from '../../lib/from-event-target-capture';
5
- import closest from 'closest-ng';
6
-
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = setupCustomAutocompleteSelectionHandling;
8
+ var _kefir = _interopRequireDefault(require("kefir"));
9
+ var _fromEventTargetCapture = _interopRequireDefault(require("../../lib/from-event-target-capture"));
10
+ var _closestNg = _interopRequireDefault(require("closest-ng"));
7
11
  const SELECTION_MASTER_ATTR = 'data-inboxsdk-selection-master-claimed';
8
-
9
- const hasNativeResults = (resultsEl: HTMLElement) =>
10
- resultsEl.querySelectorAll('li:not(.inboxsdk__search_suggestion)').length > 0;
11
-
12
- const hasCustomResults = (resultsEl: HTMLElement) =>
13
- resultsEl.querySelectorAll('.inboxsdk__search_suggestion').length > 0;
14
-
15
- const getSelectedNativeResult = (resultsEl: HTMLElement) => {
16
- const nativeResults = resultsEl.querySelectorAll(
17
- 'li:not(.inboxsdk__search_suggestion)'
18
- );
12
+ const hasNativeResults = resultsEl => resultsEl.querySelectorAll('li:not(.inboxsdk__search_suggestion)').length > 0;
13
+ const hasCustomResults = resultsEl => resultsEl.querySelectorAll('.inboxsdk__search_suggestion').length > 0;
14
+ const getSelectedNativeResult = resultsEl => {
15
+ const nativeResults = resultsEl.querySelectorAll('li:not(.inboxsdk__search_suggestion)');
19
16
 
20
17
  // Unfortunately there are no distinguishable features of a selected
21
18
  // native result besides its background color... (ಥ﹏ಥ)
22
- return Array.from(nativeResults).find((result) => {
23
- const { backgroundColor }: { backgroundColor: string } =
24
- getComputedStyle(result);
25
-
19
+ return Array.from(nativeResults).find(result => {
20
+ const {
21
+ backgroundColor
22
+ } = getComputedStyle(result);
26
23
  const colorValues = backgroundColor.match(/([\d.]+)/g);
27
-
28
24
  return colorValues && parseFloat(colorValues[3]) > 0;
29
25
  });
30
26
  };
31
-
32
- const selectFirstCustomResult = (resultsEl: HTMLElement) => {
33
- const firstCustomResult = resultsEl.querySelector(
34
- '.inboxsdk__search_suggestion_group:first-of-type > ' +
35
- '.inboxsdk__search_suggestion:first-child'
36
- );
37
-
27
+ const selectFirstCustomResult = resultsEl => {
28
+ const firstCustomResult = resultsEl.querySelector('.inboxsdk__search_suggestion_group:first-of-type > ' + '.inboxsdk__search_suggestion:first-child');
38
29
  firstCustomResult && firstCustomResult.classList.add('inboxsdk__selected');
39
30
  };
40
-
41
31
  const setupCustomResultHoverListeners = (resultsEl, resultsElRemovalStream) => {
42
- Kefir.fromEvents(resultsEl, 'mouseover')
43
- .takeUntilBy(resultsElRemovalStream)
44
- .map(({ target }: { target: HTMLElement }) =>
45
- closest(target, '.inboxsdk__search_suggestion:not(.inboxsdk__selected)')
46
- )
47
- .filter(Boolean)
48
- .onValue((el) => {
49
- const customResults = resultsEl.querySelectorAll(
50
- '.inboxsdk__search_suggestion.inboxsdk__selected'
51
- );
52
-
53
- // Needed to ensure custom results selected via keyboard events
54
- // have their selected state removed (since no mouseout event fires).
55
- Array.from(customResults).forEach((result) =>
56
- result.classList.remove('inboxsdk__selected')
57
- );
58
-
59
- el.classList.add('inboxsdk__selected');
60
- });
61
-
62
- Kefir.fromEvents(resultsEl, 'mouseout')
63
- .takeUntilBy(resultsElRemovalStream)
64
- .map(({ target }: { target: HTMLElement }) =>
65
- closest(target, '.inboxsdk__search_suggestion.inboxsdk__selected')
66
- )
67
- .filter(Boolean)
68
- .onValue((el) => el.classList.remove('inboxsdk__selected'));
32
+ _kefir.default.fromEvents(resultsEl, 'mouseover').takeUntilBy(resultsElRemovalStream).map(_ref => {
33
+ let {
34
+ target
35
+ } = _ref;
36
+ return (0, _closestNg.default)(target, '.inboxsdk__search_suggestion:not(.inboxsdk__selected)');
37
+ }).filter(Boolean).onValue(el => {
38
+ const customResults = resultsEl.querySelectorAll('.inboxsdk__search_suggestion.inboxsdk__selected');
39
+
40
+ // Needed to ensure custom results selected via keyboard events
41
+ // have their selected state removed (since no mouseout event fires).
42
+ Array.from(customResults).forEach(result => result.classList.remove('inboxsdk__selected'));
43
+ el.classList.add('inboxsdk__selected');
44
+ });
45
+ _kefir.default.fromEvents(resultsEl, 'mouseout').takeUntilBy(resultsElRemovalStream).map(_ref2 => {
46
+ let {
47
+ target
48
+ } = _ref2;
49
+ return (0, _closestNg.default)(target, '.inboxsdk__search_suggestion.inboxsdk__selected');
50
+ }).filter(Boolean).onValue(el => el.classList.remove('inboxsdk__selected'));
69
51
  };
70
-
71
- export default function setupCustomAutocompleteSelectionHandling({
72
- resultsEl,
73
- resultsElRemovalStream,
74
- searchInput,
75
- }: {
76
- resultsEl: HTMLElement,
77
- resultsElRemovalStream: Kefir.Observable<any>,
78
- searchInput: HTMLInputElement,
79
- }): void {
52
+ function setupCustomAutocompleteSelectionHandling(_ref3) {
53
+ let {
54
+ resultsEl,
55
+ resultsElRemovalStream,
56
+ searchInput
57
+ } = _ref3;
80
58
  if (resultsEl.hasAttribute(SELECTION_MASTER_ATTR)) {
81
59
  return;
82
60
  }
83
-
84
61
  resultsEl.setAttribute(SELECTION_MASTER_ATTR, 'true');
85
62
 
86
63
  // We need to be able to cancel up/down arrow events before Inbox gets them,
@@ -92,37 +69,33 @@ export default function setupCustomAutocompleteSelectionHandling({
92
69
  if (!searchInputParent) {
93
70
  throw new Error();
94
71
  }
95
-
96
- const keyboardEvents: Kefir.Observable<KeyboardEvent> =
97
- fromEventTargetCapture(searchInputParent, 'keydown').takeUntilBy(
98
- resultsElRemovalStream
99
- );
100
-
101
- const upArrowPresses = keyboardEvents.filter(({ keyCode }) => keyCode === 38);
102
- const downArrowPresses = keyboardEvents.filter(
103
- ({ keyCode }) => keyCode === 40
104
- );
105
- const enterPresses = keyboardEvents.filter(({ keyCode }) => keyCode === 13);
106
-
107
- upArrowPresses.onValue((event) => {
72
+ const keyboardEvents = (0, _fromEventTargetCapture.default)(searchInputParent, 'keydown').takeUntilBy(resultsElRemovalStream);
73
+ const upArrowPresses = keyboardEvents.filter(_ref4 => {
74
+ let {
75
+ keyCode
76
+ } = _ref4;
77
+ return keyCode === 38;
78
+ });
79
+ const downArrowPresses = keyboardEvents.filter(_ref5 => {
80
+ let {
81
+ keyCode
82
+ } = _ref5;
83
+ return keyCode === 40;
84
+ });
85
+ const enterPresses = keyboardEvents.filter(_ref6 => {
86
+ let {
87
+ keyCode
88
+ } = _ref6;
89
+ return keyCode === 13;
90
+ });
91
+ upArrowPresses.onValue(event => {
108
92
  const selectedNativeResult = getSelectedNativeResult(resultsEl);
109
- const selectedCustomResult = resultsEl.querySelector(
110
- '.inboxsdk__search_suggestion.inboxsdk__selected'
111
- );
112
- const customResultGroup =
113
- selectedCustomResult &&
114
- closest(selectedCustomResult, '.inboxsdk__search_suggestion_group');
115
-
93
+ const selectedCustomResult = resultsEl.querySelector('.inboxsdk__search_suggestion.inboxsdk__selected');
94
+ const customResultGroup = selectedCustomResult && (0, _closestNg.default)(selectedCustomResult, '.inboxsdk__search_suggestion_group');
116
95
  if (selectedNativeResult) {
117
96
  return;
118
97
  }
119
-
120
- if (
121
- selectedCustomResult &&
122
- customResultGroup &&
123
- selectedCustomResult.matches(':first-child') &&
124
- customResultGroup.matches(':first-of-type')
125
- ) {
98
+ if (selectedCustomResult && customResultGroup && selectedCustomResult.matches(':first-child') && customResultGroup.matches(':first-of-type')) {
126
99
  // If there are native results, Inbox will automatically select
127
100
  // the last one when it sees this up arrow press, so all we need to do
128
101
  // is remove the highlighting from our result. If there *aren't* any
@@ -132,12 +105,7 @@ export default function setupCustomAutocompleteSelectionHandling({
132
105
  selectedCustomResult.classList.remove('inboxsdk__selected');
133
106
  } else if (hasCustomResults(resultsEl) && !selectedCustomResult) {
134
107
  event.stopPropagation();
135
-
136
- const lastCustomResult = resultsEl.querySelector(
137
- '.inboxsdk__search_suggestion_group:last-of-type > ' +
138
- '.inboxsdk__search_suggestion:last-child'
139
- );
140
-
108
+ const lastCustomResult = resultsEl.querySelector('.inboxsdk__search_suggestion_group:last-of-type > ' + '.inboxsdk__search_suggestion:last-child');
141
109
  lastCustomResult && lastCustomResult.classList.add('inboxsdk__selected');
142
110
  } else if (selectedCustomResult && customResultGroup) {
143
111
  event.stopPropagation();
@@ -148,47 +116,24 @@ export default function setupCustomAutocompleteSelectionHandling({
148
116
  // the selected result is the first item in a non-first group.
149
117
  if (selectedCustomResult.matches(':first-child')) {
150
118
  const previousResultGroup = customResultGroup.previousElementSibling;
151
- const customResultToSelect =
152
- previousResultGroup &&
153
- previousResultGroup.querySelector(
154
- '.inboxsdk__search_suggestion:last-child'
155
- );
156
-
157
- customResultToSelect &&
158
- customResultToSelect.classList.add('inboxsdk__selected');
119
+ const customResultToSelect = previousResultGroup && previousResultGroup.querySelector('.inboxsdk__search_suggestion:last-child');
120
+ customResultToSelect && customResultToSelect.classList.add('inboxsdk__selected');
159
121
  } else {
160
- const previousCustomResult =
161
- selectedCustomResult.previousElementSibling;
162
- previousCustomResult &&
163
- previousCustomResult.classList.add('inboxsdk__selected');
122
+ const previousCustomResult = selectedCustomResult.previousElementSibling;
123
+ previousCustomResult && previousCustomResult.classList.add('inboxsdk__selected');
164
124
  }
165
125
  }
166
126
  });
167
-
168
- downArrowPresses.onValue((event) => {
127
+ downArrowPresses.onValue(event => {
169
128
  const selectedNativeResult = getSelectedNativeResult(resultsEl);
170
- const selectedCustomResult = resultsEl.querySelector(
171
- '.inboxsdk__search_suggestion.inboxsdk__selected'
172
- );
173
- const customResultGroup =
174
- selectedCustomResult &&
175
- closest(selectedCustomResult, '.inboxsdk__search_suggestion_group');
176
-
177
- if (
178
- selectedNativeResult &&
179
- !selectedNativeResult.matches(':last-of-type')
180
- ) {
129
+ const selectedCustomResult = resultsEl.querySelector('.inboxsdk__search_suggestion.inboxsdk__selected');
130
+ const customResultGroup = selectedCustomResult && (0, _closestNg.default)(selectedCustomResult, '.inboxsdk__search_suggestion_group');
131
+ if (selectedNativeResult && !selectedNativeResult.matches(':last-of-type')) {
181
132
  return;
182
133
  }
183
-
184
134
  if (selectedNativeResult) {
185
135
  selectFirstCustomResult(resultsEl);
186
- } else if (
187
- selectedCustomResult &&
188
- customResultGroup &&
189
- selectedCustomResult.matches(':last-child') &&
190
- customResultGroup.matches(':last-of-type')
191
- ) {
136
+ } else if (selectedCustomResult && customResultGroup && selectedCustomResult.matches(':last-child') && customResultGroup.matches(':last-of-type')) {
192
137
  // Inbox's native behavior is to leave nothing selected when you hit
193
138
  // the down arrow while the last item is selected, so we don't
194
139
  // try to select any other results if the last custom result is currently
@@ -214,38 +159,25 @@ export default function setupCustomAutocompleteSelectionHandling({
214
159
  // the selected result is the last item in a non-last group.
215
160
  if (selectedCustomResult.matches(':last-child')) {
216
161
  const nextResultGroup = customResultGroup.nextElementSibling;
217
- const customResultToSelect =
218
- nextResultGroup &&
219
- nextResultGroup.querySelector(
220
- '.inboxsdk__search_suggestion:first-child'
221
- );
222
-
223
- customResultToSelect &&
224
- customResultToSelect.classList.add('inboxsdk__selected');
162
+ const customResultToSelect = nextResultGroup && nextResultGroup.querySelector('.inboxsdk__search_suggestion:first-child');
163
+ customResultToSelect && customResultToSelect.classList.add('inboxsdk__selected');
225
164
  } else {
226
165
  const nextCustomResult = selectedCustomResult.nextElementSibling;
227
- nextCustomResult &&
228
- nextCustomResult.classList.add('inboxsdk__selected');
166
+ nextCustomResult && nextCustomResult.classList.add('inboxsdk__selected');
229
167
  }
230
168
  }
231
169
  });
232
-
233
- enterPresses.onValue((event) => {
234
- const selectedCustomResult = resultsEl.querySelector(
235
- '.inboxsdk__search_suggestion.inboxsdk__selected'
236
- );
170
+ enterPresses.onValue(event => {
171
+ const selectedCustomResult = resultsEl.querySelector('.inboxsdk__search_suggestion.inboxsdk__selected');
237
172
 
238
173
  // If the user hits enter and has a custom result selected, we want to
239
174
  // trigger the custom result's action *but* avoid letting the native
240
175
  // behavior (hiding `resultsEl`) happen.
241
176
  if (selectedCustomResult) {
242
177
  event.stopPropagation();
243
-
244
178
  selectedCustomResult.dispatchEvent(new MouseEvent('click'));
245
179
  }
246
180
  });
247
-
248
181
  keyboardEvents.onEnd(() => resultsEl.removeAttribute(SELECTION_MASTER_ATTR));
249
-
250
182
  setupCustomResultHoverListeners(resultsEl, resultsElRemovalStream);
251
- }
183
+ }
@@ -1,76 +1,64 @@
1
- /* @flow */
1
+ "use strict";
2
2
 
3
- import Kefir from 'kefir';
4
-
5
- import InboxDriver from './inbox-driver';
6
- import InboxRouteView from './views/inbox-route-view';
7
- import InboxCustomRouteView from './views/inbox-custom-route-view';
8
- import InboxDummyRouteView from './views/inbox-dummy-route-view';
9
-
10
- import routeIDmatchesHash from '../../lib/routeIDmatchesHash';
11
-
12
- export default function setupRouteViewDriverStream(
13
- driver: InboxDriver
14
- ): Kefir.Observable<
15
- InboxRouteView | InboxDummyRouteView | InboxCustomRouteView
16
- > {
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = setupRouteViewDriverStream;
8
+ var _kefir = _interopRequireDefault(require("kefir"));
9
+ var _inboxDriver = _interopRequireDefault(require("./inbox-driver"));
10
+ var _inboxRouteView = _interopRequireDefault(require("./views/inbox-route-view"));
11
+ var _inboxCustomRouteView = _interopRequireDefault(require("./views/inbox-custom-route-view"));
12
+ var _inboxDummyRouteView = _interopRequireDefault(require("./views/inbox-dummy-route-view"));
13
+ var _routeIDmatchesHash = _interopRequireDefault(require("../../lib/routeIDmatchesHash"));
14
+ function setupRouteViewDriverStream(driver) {
17
15
  const customRouteIDs = driver.getCustomRouteIDs();
18
-
19
16
  let lastRouteView = null;
20
-
21
17
  driver.getStopper().onValue(() => {
22
18
  if (lastRouteView) {
23
19
  lastRouteView.destroy();
24
20
  }
25
21
  });
26
-
27
- return Kefir.merge([
28
- Kefir.merge([
29
- Kefir.fromEvents(document, 'inboxSDKpushState'),
30
- Kefir.fromEvents(window, 'popstate'),
31
- ]).map(
32
- (e) =>
33
- (process.env.NODE_ENV === 'test' && e.detail && e.detail.__test_url) ||
34
- document.location.href
35
- ),
36
- Kefir.fromEvents(window, 'hashchange')
37
- .map((e) => e.newURL)
38
- // When the user hits back and leaves a hash URL, a hashchange *and*
39
- // popstate events are emitted. Let's just process the popstate event
40
- // alone.
41
- .filter((href) => /#/.test(href)),
42
- ])
43
- .toProperty(() => document.location.href)
44
- .map((href) => {
45
- const m = /#([^?]*)/.exec(href);
46
- if (!m) return { type: 'NATIVE' };
47
- const hash = m[1];
48
- for (let routeIDs of customRouteIDs) {
49
- let routeID = routeIDmatchesHash(routeIDs, hash);
50
- if (routeID) {
51
- return { hash, type: 'CUSTOM', routeID };
52
- }
53
- }
54
- return { type: 'OTHER_APP_CUSTOM' };
55
- })
56
- .map((detail) => {
57
- if (detail.type === 'CUSTOM') {
58
- return new InboxCustomRouteView(detail.routeID, detail.hash);
59
- } else if (detail.type === 'NATIVE') {
60
- driver.showNativeRouteView();
61
- return new InboxDummyRouteView('NATIVE');
62
- } else if (detail.type === 'OTHER_APP_CUSTOM') {
63
- return new InboxDummyRouteView('OTHER_APP_CUSTOM');
64
- } else {
65
- driver.getLogger().error(new Error('should not happen'));
66
- return new InboxDummyRouteView('UNKNOWN');
22
+ return _kefir.default.merge([_kefir.default.merge([_kefir.default.fromEvents(document, 'inboxSDKpushState'), _kefir.default.fromEvents(window, 'popstate')]).map(e => process.env.NODE_ENV === 'test' && e.detail && e.detail.__test_url || document.location.href), _kefir.default.fromEvents(window, 'hashchange').map(e => e.newURL)
23
+ // When the user hits back and leaves a hash URL, a hashchange *and*
24
+ // popstate events are emitted. Let's just process the popstate event
25
+ // alone.
26
+ .filter(href => /#/.test(href))]).toProperty(() => document.location.href).map(href => {
27
+ const m = /#([^?]*)/.exec(href);
28
+ if (!m) return {
29
+ type: 'NATIVE'
30
+ };
31
+ const hash = m[1];
32
+ for (let routeIDs of customRouteIDs) {
33
+ let routeID = (0, _routeIDmatchesHash.default)(routeIDs, hash);
34
+ if (routeID) {
35
+ return {
36
+ hash,
37
+ type: 'CUSTOM',
38
+ routeID
39
+ };
67
40
  }
68
- })
69
- .map((routeView) => {
70
- if (lastRouteView) {
71
- lastRouteView.destroy();
72
- }
73
- lastRouteView = routeView;
74
- return routeView;
75
- });
76
- }
41
+ }
42
+ return {
43
+ type: 'OTHER_APP_CUSTOM'
44
+ };
45
+ }).map(detail => {
46
+ if (detail.type === 'CUSTOM') {
47
+ return new _inboxCustomRouteView.default(detail.routeID, detail.hash);
48
+ } else if (detail.type === 'NATIVE') {
49
+ driver.showNativeRouteView();
50
+ return new _inboxDummyRouteView.default('NATIVE');
51
+ } else if (detail.type === 'OTHER_APP_CUSTOM') {
52
+ return new _inboxDummyRouteView.default('OTHER_APP_CUSTOM');
53
+ } else {
54
+ driver.getLogger().error(new Error('should not happen'));
55
+ return new _inboxDummyRouteView.default('UNKNOWN');
56
+ }
57
+ }).map(routeView => {
58
+ if (lastRouteView) {
59
+ lastRouteView.destroy();
60
+ }
61
+ lastRouteView = routeView;
62
+ return routeView;
63
+ });
64
+ }
@@ -1,65 +1,49 @@
1
- /* @flow */
1
+ "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _lodash = _interopRequireDefault(require("lodash"));
5
+ var _pdelay = _interopRequireDefault(require("pdelay"));
6
+ var _kefir = _interopRequireDefault(require("kefir"));
7
+ var _kefirBus = _interopRequireDefault(require("kefir-bus"));
8
+ var _inboxRouteView = _interopRequireDefault(require("./views/inbox-route-view"));
9
+ var _inboxCustomRouteView = _interopRequireDefault(require("./views/inbox-custom-route-view"));
10
+ var _inboxDummyRouteView = _interopRequireDefault(require("./views/inbox-dummy-route-view"));
11
+ var _setupRouteViewDriverStream = _interopRequireDefault(require("./setupRouteViewDriverStream"));
3
12
  jest.mock('./getSidebarClassnames');
4
-
5
- import _ from 'lodash';
6
- import delay from 'pdelay';
7
- import Kefir from 'kefir';
8
- import kefirBus from 'kefir-bus';
9
- import InboxRouteView from './views/inbox-route-view';
10
- import InboxCustomRouteView from './views/inbox-custom-route-view';
11
- import InboxDummyRouteView from './views/inbox-dummy-route-view';
12
-
13
- import setupRouteViewDriverStream from './setupRouteViewDriverStream';
14
-
15
- const stopper = kefirBus();
13
+ const stopper = (0, _kefirBus.default)();
16
14
  afterEach(() => {
17
15
  stopper.emit(null);
18
16
  });
19
-
20
- function makeMockDriver(): Object {
17
+ function makeMockDriver() {
21
18
  return {
22
- getStopper: _.constant(stopper),
23
- getCustomRouteIDs: _.constant(new Set()),
24
- showNativeRouteView: jest.fn(),
19
+ getStopper: _lodash.default.constant(stopper),
20
+ getCustomRouteIDs: _lodash.default.constant(new Set()),
21
+ showNativeRouteView: jest.fn()
25
22
  };
26
23
  }
27
-
28
24
  test('test', async () => {
29
25
  const items = [];
30
26
  const driver = makeMockDriver();
31
27
  driver.getCustomRouteIDs().add('foo/:id');
32
28
  driver.getCustomRouteIDs().add('bar/:id/blah');
33
- setupRouteViewDriverStream(driver)
34
- .takeUntilBy(stopper)
35
- .onValue((item) => {
36
- items.push(item);
37
- });
38
-
29
+ (0, _setupRouteViewDriverStream.default)(driver).takeUntilBy(stopper).onValue(item => {
30
+ items.push(item);
31
+ });
39
32
  expect(items.length).toBe(1);
40
- expect(items[0]).toBeInstanceOf(InboxDummyRouteView);
41
-
33
+ expect(items[0]).toBeInstanceOf(_inboxDummyRouteView.default);
42
34
  const firstStopper = jest.fn();
43
35
  items[0].getStopper().onValue(firstStopper);
44
36
  expect(firstStopper).toHaveBeenCalledTimes(0);
45
-
46
- document.dispatchEvent(
47
- new CustomEvent('inboxSDKpushState', {
48
- bubbles: false,
49
- cancelable: false,
50
- detail: {
51
- __test_url: 'https://inbox.google.com/u/0/snoozed',
52
- args: [
53
- '%5B1%2C%5B%5B11%2C0%2Cfalse%2Cnull%2Cnull%2C0%5D%5D%5D',
54
- '',
55
- '/u/0/snoozed',
56
- ],
57
- },
58
- })
59
- );
60
-
37
+ document.dispatchEvent(new CustomEvent('inboxSDKpushState', {
38
+ bubbles: false,
39
+ cancelable: false,
40
+ detail: {
41
+ __test_url: 'https://inbox.google.com/u/0/snoozed',
42
+ args: ['%5B1%2C%5B%5B11%2C0%2Cfalse%2Cnull%2Cnull%2C0%5D%5D%5D', '', '/u/0/snoozed']
43
+ }
44
+ }));
61
45
  expect(items.length).toBe(2);
62
- expect(items[1]).toBeInstanceOf(InboxDummyRouteView);
46
+ expect(items[1]).toBeInstanceOf(_inboxDummyRouteView.default);
63
47
  expect(firstStopper).toHaveBeenCalledTimes(1);
64
48
  expect(driver.showNativeRouteView).toHaveBeenCalledTimes(2);
65
49
 
@@ -67,28 +51,22 @@ test('test', async () => {
67
51
  // Might be real bug here.
68
52
  if (true) return; // eslint-disable-line
69
53
  document.location.hash = '#bar/123/blah';
70
- await delay(1);
54
+ await (0, _pdelay.default)(1);
71
55
  expect(items.length).toBe(3);
72
- expect(items[2]).toBeInstanceOf(InboxCustomRouteView);
56
+ expect(items[2]).toBeInstanceOf(_inboxCustomRouteView.default);
73
57
  expect(items[2].getRouteID()).toBe('bar/:id/blah');
74
- expect(items[2].getParams()).toEqual({ id: '123' });
58
+ expect(items[2].getParams()).toEqual({
59
+ id: '123'
60
+ });
75
61
  expect(driver.showNativeRouteView).toHaveBeenCalledTimes(2);
76
-
77
- document.dispatchEvent(
78
- new CustomEvent('inboxSDKpushState', {
79
- bubbles: false,
80
- cancelable: false,
81
- detail: {
82
- __test_url: 'https://inbox.google.com/u/0/done',
83
- args: [
84
- '%5B1%2C%5B%5B2%2C0%2Cfalse%2Cnull%2Cnull%2C0%5D%5D%5D',
85
- '',
86
- '/u/0/done',
87
- ],
88
- },
89
- })
90
- );
91
-
62
+ document.dispatchEvent(new CustomEvent('inboxSDKpushState', {
63
+ bubbles: false,
64
+ cancelable: false,
65
+ detail: {
66
+ __test_url: 'https://inbox.google.com/u/0/done',
67
+ args: ['%5B1%2C%5B%5B2%2C0%2Cfalse%2Cnull%2Cnull%2C0%5D%5D%5D', '', '/u/0/done']
68
+ }
69
+ }));
92
70
  expect(items.length).toBe(4);
93
- expect(items[3]).toBeInstanceOf(InboxDummyRouteView);
94
- });
71
+ expect(items[3]).toBeInstanceOf(_inboxDummyRouteView.default);
72
+ });