@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,12 +1,17 @@
1
- /* @flow */
1
+ "use strict";
2
2
 
3
- import constant from 'lodash/constant';
4
- import noop from 'lodash/noop';
5
- import * as logger from '../../injected-logger';
6
-
7
- const ignoreErrors = constant(true);
8
-
9
- function getIfOwn(object: Object, prop: string): any {
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = clickAndGetPopupUrl;
8
+ var _constant = _interopRequireDefault(require("lodash/constant"));
9
+ var _noop = _interopRequireDefault(require("lodash/noop"));
10
+ var logger = _interopRequireWildcard(require("../../injected-logger"));
11
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
12
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
13
+ const ignoreErrors = (0, _constant.default)(true);
14
+ function getIfOwn(object, prop) {
10
15
  if (Object.prototype.hasOwnProperty.call(object, prop)) {
11
16
  return object[prop];
12
17
  }
@@ -15,7 +20,7 @@ function getIfOwn(object: Object, prop: string): any {
15
20
 
16
21
  // Simulates a control+meta click on an element, intercepts the call to
17
22
  // window.open, and returns the attempted popup's URL.
18
- export default function clickAndGetPopupUrl(element: HTMLElement): ?string {
23
+ function clickAndGetPopupUrl(element) {
19
24
  const event = document.createEvent('MouseEvents');
20
25
  const options = {
21
26
  bubbles: true,
@@ -26,41 +31,24 @@ export default function clickAndGetPopupUrl(element: HTMLElement): ?string {
26
31
  ctrlKey: true,
27
32
  altKey: false,
28
33
  shiftKey: false,
29
- metaKey: true,
34
+ metaKey: true
30
35
  };
31
- (event: any).initMouseEvent(
32
- 'click',
33
- options.bubbles,
34
- options.cancelable,
35
- document.defaultView,
36
- options.button,
37
- options.pointerX,
38
- options.pointerY,
39
- options.pointerX,
40
- options.pointerY,
41
- options.ctrlKey,
42
- options.altKey,
43
- options.shiftKey,
44
- options.metaKey,
45
- options.button,
46
- null
47
- );
48
-
36
+ event.initMouseEvent('click', options.bubbles, options.cancelable, document.defaultView, options.button, options.pointerX, options.pointerY, options.pointerX, options.pointerY, options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, options.button, null);
49
37
  let url;
50
38
  const oldWindowOpen = window.open,
51
39
  oldWindowOnerror = window.onerror,
52
40
  oldFocus = getIfOwn(window.HTMLElement.prototype, 'focus'),
53
41
  oldBlur = getIfOwn(window.HTMLElement.prototype, 'blur');
54
42
  try {
55
- window.HTMLElement.prototype.focus = noop;
56
- window.HTMLElement.prototype.blur = noop;
43
+ window.HTMLElement.prototype.focus = _noop.default;
44
+ window.HTMLElement.prototype.blur = _noop.default;
57
45
  window.onerror = ignoreErrors;
58
46
  const newOpen = function (_url, _title, _options) {
59
47
  url = _url;
60
48
  // Gmail checks the returned object for these two values specifically.
61
49
  const newWin = {
62
50
  closed: false,
63
- focus: noop,
51
+ focus: _noop.default
64
52
  };
65
53
  setTimeout(function () {
66
54
  newWin.closed = true;
@@ -76,7 +64,6 @@ export default function clickAndGetPopupUrl(element: HTMLElement): ?string {
76
64
  logger.error(new Error('Failed to override window.open'));
77
65
  return null;
78
66
  }
79
-
80
67
  element.dispatchEvent(event);
81
68
  } finally {
82
69
  if (oldFocus) {
@@ -93,4 +80,4 @@ export default function clickAndGetPopupUrl(element: HTMLElement): ?string {
93
80
  window.open = oldWindowOpen;
94
81
  }
95
82
  return url;
96
- }
83
+ }
@@ -1,62 +1,58 @@
1
- /* @flow */
1
+ "use strict";
2
2
 
3
- import find from 'lodash/find';
4
- import * as GmailResponseProcessor from '../../../platform-implementation-js/dom-driver/gmail/gmail-response-processor';
5
- import { parse } from 'querystring';
6
- import * as logger from '../../injected-logger';
7
- import * as threadRowParser from './thread-row-parser';
8
- import clickAndGetPopupUrl from './click-and-get-popup-url';
9
- import findParent from '../../../common/find-parent';
10
-
11
- export function setup() {
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.processThreadListResponse = processThreadListResponse;
8
+ exports.setup = setup;
9
+ var _find = _interopRequireDefault(require("lodash/find"));
10
+ var GmailResponseProcessor = _interopRequireWildcard(require("../../../platform-implementation-js/dom-driver/gmail/gmail-response-processor"));
11
+ var _querystring = require("querystring");
12
+ var logger = _interopRequireWildcard(require("../../injected-logger"));
13
+ var threadRowParser = _interopRequireWildcard(require("./thread-row-parser"));
14
+ var _clickAndGetPopupUrl = _interopRequireDefault(require("./click-and-get-popup-url"));
15
+ var _findParent = _interopRequireDefault(require("../../../common/find-parent"));
16
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
17
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
18
+ function setup() {
12
19
  try {
13
20
  processPreloadedThreads();
14
21
  } catch (err) {
15
22
  logger.error(err, 'Failed to process preloaded thread identifiers');
16
23
  }
17
-
18
- document.addEventListener(
19
- 'inboxSDKtellMeThisThreadIdByDatabase',
20
- function (event: any) {
21
- try {
22
- const threadId = getGmailThreadIdForThreadRowByDatabase(event.target);
23
- if (threadId) {
24
- event.target.setAttribute('data-inboxsdk-threadid', threadId);
25
- }
26
- } catch (err) {
27
- logger.error(err, 'Error in inboxSDKtellMeThisThreadIdByDatabase');
24
+ document.addEventListener('inboxSDKtellMeThisThreadIdByDatabase', function (event) {
25
+ try {
26
+ const threadId = getGmailThreadIdForThreadRowByDatabase(event.target);
27
+ if (threadId) {
28
+ event.target.setAttribute('data-inboxsdk-threadid', threadId);
28
29
  }
30
+ } catch (err) {
31
+ logger.error(err, 'Error in inboxSDKtellMeThisThreadIdByDatabase');
29
32
  }
30
- );
31
-
32
- document.addEventListener(
33
- 'inboxSDKtellMeThisThreadIdByClick',
34
- function (event: any) {
35
- try {
36
- const threadId = getGmailThreadIdForThreadRowByClick(event.target);
37
- if (threadId) {
38
- event.target.setAttribute('data-inboxsdk-threadid', threadId);
39
- }
40
- } catch (err) {
41
- logger.error(err, 'Error in inboxSDKtellMeThisThreadIdByClick');
33
+ });
34
+ document.addEventListener('inboxSDKtellMeThisThreadIdByClick', function (event) {
35
+ try {
36
+ const threadId = getGmailThreadIdForThreadRowByClick(event.target);
37
+ if (threadId) {
38
+ event.target.setAttribute('data-inboxsdk-threadid', threadId);
42
39
  }
40
+ } catch (err) {
41
+ logger.error(err, 'Error in inboxSDKtellMeThisThreadIdByClick');
43
42
  }
44
- );
43
+ });
45
44
  }
46
-
47
- export function processThreadListResponse(threadListResponse: string) {
45
+ function processThreadListResponse(threadListResponse) {
48
46
  processThreads(GmailResponseProcessor.extractThreads(threadListResponse));
49
47
  }
50
-
51
- function processThreads(threads: GmailResponseProcessor.Thread[]) {
48
+ function processThreads(threads) {
52
49
  threads.forEach(storeThreadMetadata);
53
50
  }
54
-
55
- type AmbiguousMarker = { name: 'AMBIGUOUS' };
56
-
57
- const AMBIGUOUS: AmbiguousMarker = { name: 'AMBIGUOUS' };
58
- const threadIdsByKey: Map<string, string | AmbiguousMarker> = new Map();
59
- function storeThreadMetadata(threadMetadata: GmailResponseProcessor.Thread) {
51
+ const AMBIGUOUS = {
52
+ name: 'AMBIGUOUS'
53
+ };
54
+ const threadIdsByKey = new Map();
55
+ function storeThreadMetadata(threadMetadata) {
60
56
  var key = threadMetadataKey(threadMetadata);
61
57
  if (threadIdsByKey.has(key)) {
62
58
  if (threadIdsByKey.get(key) !== threadMetadata.gmailThreadId) {
@@ -66,45 +62,23 @@ function storeThreadMetadata(threadMetadata: GmailResponseProcessor.Thread) {
66
62
  threadIdsByKey.set(key, threadMetadata.gmailThreadId);
67
63
  }
68
64
  }
69
-
70
- function threadMetadataKey(
71
- threadRowMetadata: threadRowParser.ThreadRowMetadata
72
- ): string {
73
- return (
74
- threadRowMetadata.subject.trim() +
75
- ':' +
76
- threadRowMetadata.timeString.trim() +
77
- ':' +
78
- threadRowMetadata.peopleHtml.trim()
79
- );
65
+ function threadMetadataKey(threadRowMetadata) {
66
+ return threadRowMetadata.subject.trim() + ':' + threadRowMetadata.timeString.trim() + ':' + threadRowMetadata.peopleHtml.trim();
80
67
  }
81
-
82
68
  function processPreloadedThreads() {
83
- const preloadScript = find(
84
- document.querySelectorAll('script:not([src])'),
85
- (script) =>
86
- script.text && script.text.slice(0, 500).indexOf('var VIEW_DATA=[[') > -1
87
- );
69
+ const preloadScript = (0, _find.default)(document.querySelectorAll('script:not([src])'), script => script.text && script.text.slice(0, 500).indexOf('var VIEW_DATA=[[') > -1);
88
70
  if (!preloadScript) {
89
71
  // preloadScript is not available in gmail v2, so let's stop logging an error
90
72
  return;
91
73
  } else {
92
74
  const firstBracket = preloadScript.text.indexOf('[');
93
75
  const lastBracket = preloadScript.text.lastIndexOf(']');
94
- const viewDataString = preloadScript.text.slice(
95
- firstBracket,
96
- lastBracket + 1
97
- );
98
- processThreads(
99
- GmailResponseProcessor.extractThreadsFromDeserialized([
100
- GmailResponseProcessor.deserializeArray(viewDataString),
101
- ])
102
- );
76
+ const viewDataString = preloadScript.text.slice(firstBracket, lastBracket + 1);
77
+ processThreads(GmailResponseProcessor.extractThreadsFromDeserialized([GmailResponseProcessor.deserializeArray(viewDataString)]));
103
78
  }
104
79
  }
105
-
106
- function getThreadIdFromUrl(url: string): ?string {
107
- var tid = parse(url).th;
80
+ function getThreadIdFromUrl(url) {
81
+ var tid = (0, _querystring.parse)(url).th;
108
82
  if (!tid) {
109
83
  // drafts in sync world can have weird urls that kind of
110
84
  // look like old style urls, and get handled properly here
@@ -112,7 +86,7 @@ function getThreadIdFromUrl(url: string): ?string {
112
86
  if (urlHashMatch) {
113
87
  // drafts have the hash in them without the th=
114
88
  url = decodeURIComponent(decodeURIComponent(urlHashMatch[1]));
115
- tid = parse(url).th;
89
+ tid = (0, _querystring.parse)(url).th;
116
90
  }
117
91
  }
118
92
 
@@ -120,38 +94,28 @@ function getThreadIdFromUrl(url: string): ?string {
120
94
  // draft then a hash can come through in the beginning
121
95
  return tid.replace('#', '');
122
96
  }
123
-
124
- function getGmailThreadIdForThreadRowByDatabase(
125
- threadRow: HTMLElement
126
- ): ?string {
127
- const domRowMetadata =
128
- threadRowParser.extractMetadataFromThreadRow(threadRow);
97
+ function getGmailThreadIdForThreadRowByDatabase(threadRow) {
98
+ const domRowMetadata = threadRowParser.extractMetadataFromThreadRow(threadRow);
129
99
  const key = threadMetadataKey(domRowMetadata);
130
100
  const value = threadIdsByKey.get(key);
131
101
  if (typeof value === 'string') {
132
102
  return value;
133
103
  }
134
104
  }
135
-
136
- function getGmailThreadIdForThreadRowByClick(threadRow: HTMLElement): ?string {
105
+ function getGmailThreadIdForThreadRowByClick(threadRow) {
137
106
  // Simulate a ctrl-click on the thread row to get the thread id, then
138
107
  // simulate a ctrl-click on the previously selected thread row (or the
139
108
  // first thread row) to put the cursor back where it was.
140
- const domRowMetadata =
141
- threadRowParser.extractMetadataFromThreadRow(threadRow);
142
- const parent = findParent(
143
- threadRow,
144
- (el) => el.nodeName === 'DIV' && el.getAttribute('role') === 'main'
145
- );
109
+ const domRowMetadata = threadRowParser.extractMetadataFromThreadRow(threadRow);
110
+ const parent = (0, _findParent.default)(threadRow, el => el.nodeName === 'DIV' && el.getAttribute('role') === 'main');
146
111
  if (!parent) {
147
112
  throw new Error("Can't operate on disconnected thread row");
148
113
  }
149
- const currentRowSelection =
150
- parent.querySelector('td.PE') || parent.querySelector('tr');
151
- const url = clickAndGetPopupUrl(threadRow);
114
+ const currentRowSelection = parent.querySelector('td.PE') || parent.querySelector('tr');
115
+ const url = (0, _clickAndGetPopupUrl.default)(threadRow);
152
116
  const threadId = url && getThreadIdFromUrl(url);
153
117
  if (currentRowSelection) {
154
- clickAndGetPopupUrl(currentRowSelection);
118
+ (0, _clickAndGetPopupUrl.default)(currentRowSelection);
155
119
  }
156
120
  return threadId;
157
- }
121
+ }
@@ -1,26 +1,21 @@
1
- /* @flow */
2
-
3
- import intersection from 'lodash/intersection';
4
- import assert from 'assert';
5
- import * as logger from '../../injected-logger';
6
- import { cleanupPeopleLine } from '../../../platform-implementation-js/dom-driver/gmail/gmail-response-processor';
7
-
8
- export type ThreadRowMetadata = {
9
- timeString: string,
10
- subject: string,
11
- peopleHtml: string,
12
- };
13
-
14
- export function extractMetadataFromThreadRow(
15
- threadRow: HTMLElement
16
- ): ThreadRowMetadata {
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.extractMetadataFromThreadRow = extractMetadataFromThreadRow;
8
+ var _intersection = _interopRequireDefault(require("lodash/intersection"));
9
+ var _assert = _interopRequireDefault(require("assert"));
10
+ var logger = _interopRequireWildcard(require("../../injected-logger"));
11
+ var _gmailResponseProcessor = require("../../../platform-implementation-js/dom-driver/gmail/gmail-response-processor");
12
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
13
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
14
+ function extractMetadataFromThreadRow(threadRow) {
17
15
  var timeSpan, subjectSpan, peopleDiv;
18
-
19
- assert(threadRow.hasAttribute('id'), 'check element is main thread row');
20
-
16
+ (0, _assert.default)(threadRow.hasAttribute('id'), 'check element is main thread row');
21
17
  var errors = [];
22
- var threadRowIsVertical =
23
- intersection(Array.from(threadRow.classList), ['zA', 'apv']).length === 2;
18
+ var threadRowIsVertical = (0, _intersection.default)(Array.from(threadRow.classList), ['zA', 'apv']).length === 2;
24
19
  if (threadRowIsVertical) {
25
20
  var threadRow2 = threadRow.nextElementSibling;
26
21
  if (!threadRow2) {
@@ -30,17 +25,13 @@ export function extractMetadataFromThreadRow(
30
25
  if (!threadRow3 || !threadRow3.classList.contains('apw')) {
31
26
  threadRow3 = null;
32
27
  }
33
-
34
28
  timeSpan = threadRow.querySelector('td.apt > div.apm > span[title]');
35
29
  subjectSpan = threadRow2.querySelector('td div.xS div.xT div.y6 > span');
36
30
  peopleDiv = threadRow.querySelector('td.apy > div.yW, td.apx > div.yW');
37
31
  }
38
32
  } else {
39
33
  timeSpan = threadRow.querySelector('td.xW > span[title]');
40
-
41
- var subjectAreaDiv = threadRow.querySelector(
42
- 'td.a4W div[role=link] div.y6'
43
- );
34
+ var subjectAreaDiv = threadRow.querySelector('td.a4W div[role=link] div.y6');
44
35
  if (subjectAreaDiv && subjectAreaDiv.children.length >= 1) {
45
36
  subjectSpan = subjectAreaDiv.children[0];
46
37
 
@@ -50,7 +41,6 @@ export function extractMetadataFromThreadRow(
50
41
 
51
42
  peopleDiv = threadRow.querySelector('td.yX > div.yW');
52
43
  }
53
-
54
44
  if (!timeSpan) {
55
45
  errors.push('failed to find timeSpan');
56
46
  }
@@ -61,12 +51,13 @@ export function extractMetadataFromThreadRow(
61
51
  errors.push('failed to find peopleDiv');
62
52
  }
63
53
  if (errors.length) {
64
- logger.error(new Error('Errors in thread row parsing'), { errors });
54
+ logger.error(new Error('Errors in thread row parsing'), {
55
+ errors
56
+ });
65
57
  }
66
-
67
58
  return {
68
59
  timeString: timeSpan ? timeSpan.getAttribute('title') || '' : '',
69
60
  subject: subjectSpan ? subjectSpan.textContent : '',
70
- peopleHtml: peopleDiv ? cleanupPeopleLine(peopleDiv.innerHTML) : '',
61
+ peopleHtml: peopleDiv ? (0, _gmailResponseProcessor.cleanupPeopleLine)(peopleDiv.innerHTML) : ''
71
62
  };
72
- }
63
+ }
@@ -1,57 +1,41 @@
1
- /* @flow */
2
-
3
- import { extractMetadataFromThreadRow } from './thread-row-parser';
1
+ "use strict";
4
2
 
3
+ var _threadRowParser = require("./thread-row-parser");
5
4
  describe('extractMetadataFromThreadRow', () => {
6
5
  it('can read row', () => {
7
6
  const table = document.createElement('table');
8
- table.innerHTML =
9
- '<tbody>' +
10
- '<tr class="zA yO" id=":46" tabindex="-1" aria-labelledby=":47"><td class="PF xY"></td><td id=":48" class="oZ-x3 xY aid" style=""><div id=":49" class="oZ-jc T-Jo J-J5-Ji " role="checkbox" aria-labelledby=":47" dir="ltr" aria-checked="false" tabindex="-1"><div class="T-Jo-auh"></div></div></td><td class="apU xY"><span id=":4a" class="aXw T-KT" title="Not starred" aria-label="Not starred"><img class="T-KT-JX" src="images/cleardot.gif" alt="Not starred"></span></td><td class="WA xY"><div class="pG" data-tooltip-contained="true" data-tooltip-align="b,l" data-tooltip-delay="1500" aria-label="Not important" role="img" id=":4b"><div class="T-ays-a45"><span class="aol">Click to teach Streak Mail this conversation is important.</span></div><div class="pH-A7"></div><div class="UW "></div></div></td><td class="yX xY "><div id=":47" class="afn">me (15), test merge again, 2:02 pm, 4 On Thu, Dec 4, 2014 at 2:02 PM, Chris Cowan &lt;cowan@streak.com&gt; wrote: 3 On Thu, Dec 4, 2014.</div><div id=":4c" class="yW"><span class="yP" email="cowan@streak.com" name="me">me</span> (15)</div></td><td id=":4d" tabindex="-1" class="xY a4W"><div class="xS" role="link"><div class="xT"><div class="y6"><span id=":4f">test merge again</span><span class="y2">&nbsp;-&nbsp;4 On Thu, Dec 4, 2014 at 2:02 PM, Chris Cowan &lt;cowan@streak.com&gt; wrote: 3 On Thu, Dec 4, 2014</span></div></div></div></td><td class="yf xY ">&nbsp;</td><td class="xW xY "><span title="Thu, Dec 4, 2014 at 2:02 PM" id=":4g" aria-label="Thu, Dec 4, 2014 at 2:02 PM">2:02 pm</span></td></tr>' +
11
- '</tbody>';
7
+ table.innerHTML = '<tbody>' + '<tr class="zA yO" id=":46" tabindex="-1" aria-labelledby=":47"><td class="PF xY"></td><td id=":48" class="oZ-x3 xY aid" style=""><div id=":49" class="oZ-jc T-Jo J-J5-Ji " role="checkbox" aria-labelledby=":47" dir="ltr" aria-checked="false" tabindex="-1"><div class="T-Jo-auh"></div></div></td><td class="apU xY"><span id=":4a" class="aXw T-KT" title="Not starred" aria-label="Not starred"><img class="T-KT-JX" src="images/cleardot.gif" alt="Not starred"></span></td><td class="WA xY"><div class="pG" data-tooltip-contained="true" data-tooltip-align="b,l" data-tooltip-delay="1500" aria-label="Not important" role="img" id=":4b"><div class="T-ays-a45"><span class="aol">Click to teach Streak Mail this conversation is important.</span></div><div class="pH-A7"></div><div class="UW "></div></div></td><td class="yX xY "><div id=":47" class="afn">me (15), test merge again, 2:02 pm, 4 On Thu, Dec 4, 2014 at 2:02 PM, Chris Cowan &lt;cowan@streak.com&gt; wrote: 3 On Thu, Dec 4, 2014.</div><div id=":4c" class="yW"><span class="yP" email="cowan@streak.com" name="me">me</span> (15)</div></td><td id=":4d" tabindex="-1" class="xY a4W"><div class="xS" role="link"><div class="xT"><div class="y6"><span id=":4f">test merge again</span><span class="y2">&nbsp;-&nbsp;4 On Thu, Dec 4, 2014 at 2:02 PM, Chris Cowan &lt;cowan@streak.com&gt; wrote: 3 On Thu, Dec 4, 2014</span></div></div></div></td><td class="yf xY ">&nbsp;</td><td class="xW xY "><span title="Thu, Dec 4, 2014 at 2:02 PM" id=":4g" aria-label="Thu, Dec 4, 2014 at 2:02 PM">2:02 pm</span></td></tr>' + '</tbody>';
12
8
  const threadRow = table.querySelector('tr');
13
9
  if (!threadRow) throw new Error();
14
- const parsed = extractMetadataFromThreadRow(threadRow);
10
+ const parsed = (0, _threadRowParser.extractMetadataFromThreadRow)(threadRow);
15
11
  expect(parsed).toEqual({
16
12
  timeString: 'Thu, Dec 4, 2014 at 2:02 PM',
17
13
  subject: 'test merge again',
18
- peopleHtml: '<span email="cowan@streak.com" name="me">me</span> (15)',
14
+ peopleHtml: '<span email="cowan@streak.com" name="me">me</span> (15)'
19
15
  });
20
16
  });
21
-
22
17
  it('can read vertical preview pane row', () => {
23
18
  const table = document.createElement('table');
24
- table.innerHTML =
25
- '<tbody>' +
26
- '<tr class="zA yO apv" id=":151" tabindex="-1" aria-labelledby=":150"><td rowspan="3" class="PF xY"></td><td rowspan="3" id=":14z" class="apo-x3 xY aid" style=""><div id=":14y" class="apo-jc T-Jo J-J5-Ji " role="checkbox" aria-labelledby=":150" dir="ltr" aria-checked="false" tabindex="-1"><div class="T-Jo-auh"></div></div></td><td class="yX xY apy"><div id=":150" class="afn"><span class="yP" email="cowan@streak.com" name="me">me</span> (15), test merge again, 2:02 pm, 4 On Thu, Dec 4, 2014 at 2:02 PM, Chris Cowan &lt;cowan@streak.com&gt; wrote: 3 On Thu, Dec 4, 2014.</div><div id=":14x" class="yW"><span class="yP" email="cowan@streak.com" name="me">me</span> (15)</div></td><td class="yf xY apt"><div class="apm"><span title="Thu, Dec 4, 2014 at 2:02 PM" id=":14w" aria-label="Thu, Dec 4, 2014 at 2:02 PM">2:02 pm</span></div>&nbsp;</td><td rowspan="3" class="apU apC"><span id=":14v" class="aXw T-KT" title="Not starred" aria-label="Not starred"><img class="T-KT-JX" src="images/cleardot.gif" alt="Not starred"></span></td></tr>' +
27
- '<tr class="zA yO apv"><td colspan="2" tabindex="0" role="link" class="xY apD"><div class="apn apd"><div class="pG" data-tooltip-contained="true" data-tooltip-align="b,l" data-tooltip-delay="1500" aria-label="Not important" role="img" id=":14u"><div class="T-ays-a45"><span class="aol">Click to teach Streak Mail this conversation is important.</span></div><div class="pH-A7 aok"></div><div class="UW UW-yN-aa"></div></div></div><div class="xS" role="undefined"><div class="xT"><div class="y6"><span id=":14t">test merge again</span></div></div></div></td></tr>' +
28
- '<tr class="zA yO apv apw"><td colspan="2" class="xY apA"><div class="apB"><div class="apu"><div class="as">&nbsp;</div></div><div class="y2 apz">4 On Thu, Dec 4, 2014 at 2:02 PM, Chris Cowan &lt;cowan@streak.com&gt; wrote: 3 On Thu, Dec 4, 2014</div></div></td></tr>' +
29
- '</tbody>';
19
+ table.innerHTML = '<tbody>' + '<tr class="zA yO apv" id=":151" tabindex="-1" aria-labelledby=":150"><td rowspan="3" class="PF xY"></td><td rowspan="3" id=":14z" class="apo-x3 xY aid" style=""><div id=":14y" class="apo-jc T-Jo J-J5-Ji " role="checkbox" aria-labelledby=":150" dir="ltr" aria-checked="false" tabindex="-1"><div class="T-Jo-auh"></div></div></td><td class="yX xY apy"><div id=":150" class="afn"><span class="yP" email="cowan@streak.com" name="me">me</span> (15), test merge again, 2:02 pm, 4 On Thu, Dec 4, 2014 at 2:02 PM, Chris Cowan &lt;cowan@streak.com&gt; wrote: 3 On Thu, Dec 4, 2014.</div><div id=":14x" class="yW"><span class="yP" email="cowan@streak.com" name="me">me</span> (15)</div></td><td class="yf xY apt"><div class="apm"><span title="Thu, Dec 4, 2014 at 2:02 PM" id=":14w" aria-label="Thu, Dec 4, 2014 at 2:02 PM">2:02 pm</span></div>&nbsp;</td><td rowspan="3" class="apU apC"><span id=":14v" class="aXw T-KT" title="Not starred" aria-label="Not starred"><img class="T-KT-JX" src="images/cleardot.gif" alt="Not starred"></span></td></tr>' + '<tr class="zA yO apv"><td colspan="2" tabindex="0" role="link" class="xY apD"><div class="apn apd"><div class="pG" data-tooltip-contained="true" data-tooltip-align="b,l" data-tooltip-delay="1500" aria-label="Not important" role="img" id=":14u"><div class="T-ays-a45"><span class="aol">Click to teach Streak Mail this conversation is important.</span></div><div class="pH-A7 aok"></div><div class="UW UW-yN-aa"></div></div></div><div class="xS" role="undefined"><div class="xT"><div class="y6"><span id=":14t">test merge again</span></div></div></div></td></tr>' + '<tr class="zA yO apv apw"><td colspan="2" class="xY apA"><div class="apB"><div class="apu"><div class="as">&nbsp;</div></div><div class="y2 apz">4 On Thu, Dec 4, 2014 at 2:02 PM, Chris Cowan &lt;cowan@streak.com&gt; wrote: 3 On Thu, Dec 4, 2014</div></div></td></tr>' + '</tbody>';
30
20
  const threadRow = table.querySelector('tr');
31
21
  if (!threadRow) throw new Error();
32
- const parsed = extractMetadataFromThreadRow(threadRow);
22
+ const parsed = (0, _threadRowParser.extractMetadataFromThreadRow)(threadRow);
33
23
  expect(parsed).toEqual({
34
24
  timeString: 'Thu, Dec 4, 2014 at 2:02 PM',
35
25
  subject: 'test merge again',
36
- peopleHtml: '<span email="cowan@streak.com" name="me">me</span> (15)',
26
+ peopleHtml: '<span email="cowan@streak.com" name="me">me</span> (15)'
37
27
  });
38
28
  });
39
-
40
29
  it('can read snippet-less vertical preview pane row', () => {
41
30
  const table = document.createElement('table');
42
- table.innerHTML =
43
- '<tbody>' +
44
- '<tr class="zA yO apv" id=":3p" tabindex="-1" aria-labelledby=":3q"><td rowspan="2" class="PF xY"></td><td rowspan="2" id=":3r" class="apq-x3 xY aid" style=""><div id=":3s" class="apq-jc T-Jo J-J5-Ji " role="checkbox" aria-labelledby=":3q" dir="ltr" aria-checked="false" tabindex="-1"><div class="T-Jo-auh"></div></div></td><td class="xY apx"><div id=":3q" class="afn"><span class="yP" email="notifications@mailfoogae.appspotmail.com" name="Streak Bot">Streak Bot</span>, lordprogrammer finished a deploy (fed8a27), 11:02 am, .</div><div class="apu"><div class="as">&nbsp;</div></div><div class="yW NyC7Y"><span class="yP" email="notifications@mailfoogae.appspotmail.com" name="Streak Bot">Streak Bot</span></div></td><td class="yf xY apt"><div class="apm"><span title="Mon, Jan 5, 2015 at 11:02 AM" id=":3t" aria-label="Mon, Jan 5, 2015 at 11:02 AM">11:02 am</span></div>&nbsp;</td><td rowspan="2" class="apU apC"><span id=":3u" class="aXw T-KT" title="Not starred" aria-label="Not starred"><img class="T-KT-JX" src="images/cleardot.gif" alt="Not starred"></span></td></tr>' +
45
- '<tr class="zA yO apv"><td colspan="2" tabindex="0" role="link" class="xY apE"><div class="apn apd"><div class="pG" data-tooltip-contained="true" data-tooltip-align="b,l" data-tooltip-delay="1500" aria-label="Not important" role="img" id=":3v"><div class="T-ays-a45"><span class="aol">Click to teach Streak Mail this conversation is important.</span></div><div class="pH-A7"></div><div class="UW "></div></div></div><div class="xS" role="undefined"><div class="xT"><div class="y6"><span id=":3w">lordprogrammer finished a deploy (fed8a27)</span></div></div></div></td></tr>' +
46
- '</tbody>';
31
+ table.innerHTML = '<tbody>' + '<tr class="zA yO apv" id=":3p" tabindex="-1" aria-labelledby=":3q"><td rowspan="2" class="PF xY"></td><td rowspan="2" id=":3r" class="apq-x3 xY aid" style=""><div id=":3s" class="apq-jc T-Jo J-J5-Ji " role="checkbox" aria-labelledby=":3q" dir="ltr" aria-checked="false" tabindex="-1"><div class="T-Jo-auh"></div></div></td><td class="xY apx"><div id=":3q" class="afn"><span class="yP" email="notifications@mailfoogae.appspotmail.com" name="Streak Bot">Streak Bot</span>, lordprogrammer finished a deploy (fed8a27), 11:02 am, .</div><div class="apu"><div class="as">&nbsp;</div></div><div class="yW NyC7Y"><span class="yP" email="notifications@mailfoogae.appspotmail.com" name="Streak Bot">Streak Bot</span></div></td><td class="yf xY apt"><div class="apm"><span title="Mon, Jan 5, 2015 at 11:02 AM" id=":3t" aria-label="Mon, Jan 5, 2015 at 11:02 AM">11:02 am</span></div>&nbsp;</td><td rowspan="2" class="apU apC"><span id=":3u" class="aXw T-KT" title="Not starred" aria-label="Not starred"><img class="T-KT-JX" src="images/cleardot.gif" alt="Not starred"></span></td></tr>' + '<tr class="zA yO apv"><td colspan="2" tabindex="0" role="link" class="xY apE"><div class="apn apd"><div class="pG" data-tooltip-contained="true" data-tooltip-align="b,l" data-tooltip-delay="1500" aria-label="Not important" role="img" id=":3v"><div class="T-ays-a45"><span class="aol">Click to teach Streak Mail this conversation is important.</span></div><div class="pH-A7"></div><div class="UW "></div></div></div><div class="xS" role="undefined"><div class="xT"><div class="y6"><span id=":3w">lordprogrammer finished a deploy (fed8a27)</span></div></div></div></td></tr>' + '</tbody>';
47
32
  const threadRow = table.querySelector('tr');
48
33
  if (!threadRow) throw new Error();
49
- const parsed = extractMetadataFromThreadRow(threadRow);
34
+ const parsed = (0, _threadRowParser.extractMetadataFromThreadRow)(threadRow);
50
35
  expect(parsed).toEqual({
51
36
  timeString: 'Mon, Jan 5, 2015 at 11:02 AM',
52
37
  subject: 'lordprogrammer finished a deploy (fed8a27)',
53
- peopleHtml:
54
- '<span email="notifications@mailfoogae.appspotmail.com" name="Streak Bot">Streak Bot</span>',
38
+ peopleHtml: '<span email="notifications@mailfoogae.appspotmail.com" name="Streak Bot">Streak Bot</span>'
55
39
  });
56
40
  });
57
- });
41
+ });