@inboxsdk/core 1.1.6 → 1.1.8

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 (483) hide show
  1. package/background.js +1 -0
  2. package/inboxsdk.js +31 -36
  3. package/inboxsdk.js.map +1 -1
  4. package/package.json +1 -1
  5. package/pageWorld.js +1 -1
  6. package/pageWorld.js.map +1 -1
  7. package/src/inboxsdk-js/header.d.ts +19 -0
  8. package/src/inboxsdk-js/header.d.ts.map +1 -0
  9. package/src/inboxsdk-js/header.js +1 -1
  10. package/src/inboxsdk.d.ts +8 -3
  11. package/src/injected-js/gmail/constants.d.ts +1 -1
  12. package/src/injected-js/gmail/constants.d.ts.map +1 -1
  13. package/src/injected-js/gmail/setup-gmail-interceptor.d.ts +3 -4
  14. package/src/injected-js/gmail/setup-gmail-interceptor.d.ts.map +1 -0
  15. package/src/injected-js/gmail/setup-gmail-interceptor.js +896 -896
  16. package/src/injected-js/gmail/sync-compose-processor-20220909.d.ts +1 -1
  17. package/src/injected-js/gmail/sync-compose-processor-20220909.d.ts.map +1 -1
  18. package/src/injected-js/gmail/sync-compose-processor.d.ts +3 -3
  19. package/src/injected-js/gmail/sync-compose-request-processor.d.ts.map +1 -1
  20. package/src/injected-js/gmail/sync-compose-request-processor.js +0 -1
  21. package/src/injected-js/gmail/thread-identifier/click-and-get-popup-url.d.ts +2 -0
  22. package/src/injected-js/gmail/thread-identifier/click-and-get-popup-url.d.ts.map +1 -0
  23. package/src/injected-js/gmail/thread-identifier/click-and-get-popup-url.js +66 -78
  24. package/src/injected-js/gmail/thread-identifier/index.d.ts +3 -0
  25. package/src/injected-js/gmail/thread-identifier/index.d.ts.map +1 -0
  26. package/src/injected-js/gmail/thread-identifier/index.js +100 -98
  27. package/src/injected-js/gmail/thread-identifier/thread-row-parser.d.ts +7 -0
  28. package/src/injected-js/gmail/thread-identifier/thread-row-parser.d.ts.map +1 -0
  29. package/src/injected-js/gmail/thread-identifier/thread-row-parser.js +51 -61
  30. package/src/injected-js/main.d.ts +2 -0
  31. package/src/injected-js/main.d.ts.map +1 -0
  32. package/src/injected-js/main.js +44 -43
  33. package/src/injected-js/message-metadata-holder.d.ts +7 -0
  34. package/src/injected-js/message-metadata-holder.d.ts.map +1 -0
  35. package/src/injected-js/message-metadata-holder.js +89 -97
  36. package/src/injected-js/setup-data-exposer.d.ts +2 -0
  37. package/src/injected-js/setup-data-exposer.d.ts.map +1 -0
  38. package/src/injected-js/setup-data-exposer.js +126 -118
  39. package/src/injected-js/setup-error-silencer.d.ts +2 -0
  40. package/src/injected-js/setup-error-silencer.d.ts.map +1 -0
  41. package/src/injected-js/setup-error-silencer.js +16 -24
  42. package/src/injected-js/setup-event-reemitter.d.ts +2 -0
  43. package/src/injected-js/setup-event-reemitter.d.ts.map +1 -0
  44. package/src/injected-js/setup-event-reemitter.js +46 -59
  45. package/src/injected-js/setupInboxCustomViewLinkFixer.d.ts +2 -0
  46. package/src/injected-js/setupInboxCustomViewLinkFixer.d.ts.map +1 -0
  47. package/src/injected-js/setupInboxCustomViewLinkFixer.js +24 -26
  48. package/src/injected-js/setupPushStateListener.d.ts +2 -0
  49. package/src/injected-js/setupPushStateListener.d.ts.map +1 -0
  50. package/src/injected-js/setupPushStateListener.js +14 -23
  51. package/src/injected-js/xhr-helper.d.ts +2 -0
  52. package/src/injected-js/xhr-helper.d.ts.map +1 -0
  53. package/src/injected-js/xhr-helper.js +73 -83
  54. package/src/injected-js/xhr-proxy-factory.d.ts +97 -0
  55. package/src/injected-js/xhr-proxy-factory.d.ts.map +1 -0
  56. package/src/injected-js/xhr-proxy-factory.js +503 -451
  57. package/src/platform-implementation-js/constants/router.d.ts +37 -5
  58. package/src/platform-implementation-js/constants/router.d.ts.map +1 -0
  59. package/src/platform-implementation-js/constants/router.js +57 -60
  60. package/src/platform-implementation-js/constants/toolbars.d.ts +2 -0
  61. package/src/platform-implementation-js/constants/toolbars.d.ts.map +1 -0
  62. package/src/platform-implementation-js/constants/toolbars.js +4 -11
  63. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-toolbar-button-for-app.d.ts.map +1 -1
  64. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-toolbar-button-for-app.js +0 -1
  65. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-url-object.d.ts.map +1 -1
  66. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-url-object.js +0 -1
  67. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/getSyncThreadForOldGmailThreadId.d.ts.map +1 -1
  68. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/getSyncThreadForOldGmailThreadId.js +0 -1
  69. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/getSyncThreadFromSyncThreadId.d.ts +4 -6
  70. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/getSyncThreadFromSyncThreadId.d.ts.map +1 -0
  71. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/getSyncThreadFromSyncThreadId.js +55 -62
  72. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/gmail-load-event.d.ts.map +1 -1
  73. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/gmail-load-event.js +0 -1
  74. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/goto-view.d.ts.map +1 -1
  75. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/goto-view.js +0 -1
  76. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/setup-route-view-driver-stream.d.ts.map +1 -1
  77. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/setup-route-view-driver-stream.js +4 -5
  78. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/thread-row-identifier.d.ts.map +1 -1
  79. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/thread-row-identifier.js +4 -9
  80. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/track-events.d.ts.map +1 -1
  81. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/track-events.js +1 -0
  82. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/user-info.d.ts +2 -1
  83. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/user-info.d.ts.map +1 -1
  84. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/user-info.js +1 -1
  85. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver.d.ts +4 -3
  86. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver.d.ts.map +1 -1
  87. package/src/platform-implementation-js/dom-driver/gmail/make-xhr-interceptor.d.ts.map +1 -1
  88. package/src/platform-implementation-js/dom-driver/gmail/make-xhr-interceptor.js +0 -1
  89. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/index.d.ts +19 -6
  90. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/index.d.ts.map +1 -0
  91. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/index.js +75 -80
  92. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-companion-global-icon-area.d.ts +5 -0
  93. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-companion-global-icon-area.d.ts.map +1 -0
  94. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-companion-global-icon-area.js +13 -22
  95. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-companion-thread-icon-area.d.ts +5 -0
  96. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-companion-thread-icon-area.d.ts.map +1 -0
  97. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-companion-thread-icon-area.js +18 -26
  98. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-to-icon-area.d.ts +5 -0
  99. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-to-icon-area.d.ts.map +1 -0
  100. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-to-icon-area.js +13 -30
  101. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/index.d.ts +44 -0
  102. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/index.d.ts.map +1 -0
  103. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/index.js +681 -601
  104. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-toolbar-button-view/monitor-top-banner-size-and-react.d.ts +2 -0
  105. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-toolbar-button-view/monitor-top-banner-size-and-react.d.ts.map +1 -0
  106. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-toolbar-button-view/monitor-top-banner-size-and-react.js +23 -24
  107. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-toolbar-button-view.d.ts +19 -3
  108. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-toolbar-button-view.d.ts.map +1 -0
  109. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-toolbar-button-view.js +156 -150
  110. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-area-view.d.ts +20 -0
  111. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-area-view.d.ts.map +1 -0
  112. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-area-view.js +101 -96
  113. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-card-view.d.ts +40 -0
  114. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-card-view.d.ts.map +1 -0
  115. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-card-view.js +287 -265
  116. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-collapsible-section-view.d.ts +61 -0
  117. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-collapsible-section-view.d.ts.map +1 -0
  118. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-collapsible-section-view.js +689 -524
  119. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-button.d.ts +5 -0
  120. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-button.d.ts.map +1 -0
  121. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-button.js +124 -118
  122. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-compose-notice.d.ts +15 -0
  123. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-compose-notice.d.ts.map +1 -0
  124. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-compose-notice.js +47 -51
  125. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-inner-sidebar.d.ts +8 -0
  126. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-inner-sidebar.d.ts.map +1 -0
  127. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-inner-sidebar.js +8 -16
  128. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-outer-sidebar.d.ts +8 -0
  129. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-outer-sidebar.d.ts.map +1 -0
  130. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-outer-sidebar.js +23 -31
  131. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-recipient-row.d.ts +4 -0
  132. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-recipient-row.d.ts.map +1 -0
  133. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-recipient-row.js +61 -66
  134. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-tooltip-to-button.d.ts +6 -0
  135. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-tooltip-to-button.d.ts.map +1 -0
  136. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-tooltip-to-button.js +64 -48
  137. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/ensure-app-button-toolbars-are-closed.d.ts +2 -0
  138. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/ensure-app-button-toolbars-are-closed.d.ts.map +1 -0
  139. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/ensure-app-button-toolbars-are-closed.js +10 -17
  140. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/ensure-grouping-is-open.d.ts +2 -0
  141. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/ensure-grouping-is-open.d.ts.map +1 -0
  142. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/ensure-grouping-is-open.js +14 -23
  143. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/focus.d.ts +3 -0
  144. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/focus.d.ts.map +1 -0
  145. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/focus.js +13 -16
  146. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/from-manager.d.ts +7 -0
  147. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/from-manager.d.ts.map +1 -0
  148. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/from-manager.js +57 -59
  149. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-additional-action-toolbar.d.ts +3 -0
  150. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-additional-action-toolbar.d.ts.map +1 -0
  151. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-additional-action-toolbar.js +49 -49
  152. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-address-changes-stream.d.ts +4 -0
  153. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-address-changes-stream.d.ts.map +1 -0
  154. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-address-changes-stream.js +89 -89
  155. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-address-information-extractor.d.ts +1 -1
  156. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-address-information-extractor.d.ts.map +1 -1
  157. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-body-changes-stream.d.ts +4 -0
  158. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-body-changes-stream.d.ts.map +1 -0
  159. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-body-changes-stream.js +13 -21
  160. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-formatting-area-offset-left.d.ts +3 -0
  161. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-formatting-area-offset-left.d.ts.map +1 -0
  162. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-formatting-area-offset-left.js +16 -23
  163. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-minimized-stream.d.ts +4 -0
  164. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-minimized-stream.d.ts.map +1 -0
  165. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-minimized-stream.js +14 -22
  166. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-recipients.d.ts +1 -1
  167. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-recipients.d.ts.map +1 -1
  168. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-response-type-changes-stream.d.ts +4 -0
  169. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-response-type-changes-stream.d.ts.map +1 -0
  170. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-response-type-changes-stream.js +23 -29
  171. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/insert-link-into-body.d.ts +3 -0
  172. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/insert-link-into-body.d.ts.map +1 -0
  173. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/insert-link-into-body.js +17 -25
  174. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/manage-button-grouping.d.ts +4 -0
  175. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/manage-button-grouping.d.ts.map +1 -0
  176. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/manage-button-grouping.js +317 -252
  177. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/monitor-selection-range.d.ts +3 -0
  178. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/monitor-selection-range.d.ts.map +1 -0
  179. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/monitor-selection-range.js +22 -18
  180. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/override-edit-subject.d.ts +4 -0
  181. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/override-edit-subject.d.ts.map +1 -0
  182. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/override-edit-subject.js +57 -50
  183. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/position-formatting-toolbar.d.ts +3 -0
  184. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/position-formatting-toolbar.d.ts.map +1 -0
  185. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/position-formatting-toolbar.js +18 -20
  186. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/size-fixer.d.ts +3 -0
  187. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/size-fixer.d.ts.map +1 -0
  188. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/size-fixer.js +114 -113
  189. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/update-insert-more-area-left.d.ts +3 -0
  190. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/update-insert-more-area-left.d.ts.map +1 -0
  191. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/update-insert-more-area-left.js +15 -18
  192. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view.d.ts +189 -118
  193. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view.d.ts.map +1 -0
  194. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view.js +1480 -1333
  195. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view/attachment-icon.d.ts +1 -2
  196. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view/attachment-icon.d.ts.map +1 -1
  197. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view/attachment-icon.js +1 -2
  198. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view/get-updated-contact.d.ts +3 -0
  199. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view/get-updated-contact.d.ts.map +1 -0
  200. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view/get-updated-contact.js +69 -70
  201. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view.d.ts +67 -6
  202. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view.d.ts.map +1 -0
  203. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view.js +715 -637
  204. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-route-view/gmail-route-processor.d.ts +44 -6
  205. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-route-view/gmail-route-processor.d.ts.map +1 -0
  206. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-route-view/gmail-route-processor.js +100 -101
  207. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-route-view/gmail-route-view.d.ts +72 -3
  208. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-route-view/gmail-route-view.d.ts.map +1 -0
  209. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-route-view/gmail-route-view.js +502 -438
  210. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-row-list-view.d.ts +39 -8
  211. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-row-list-view.d.ts.map +1 -0
  212. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-row-list-view.js +229 -211
  213. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-row-view.d.ts +117 -5
  214. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-row-view.d.ts.map +1 -0
  215. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-row-view.js +938 -821
  216. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view/add-icon-area.d.ts +5 -0
  217. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view/add-icon-area.d.ts.map +1 -0
  218. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view/add-icon-area.js +66 -61
  219. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view.d.ts +18 -0
  220. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view.d.ts.map +1 -0
  221. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view.js +520 -457
  222. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-view/width-manager.d.ts +7 -0
  223. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-view/width-manager.d.ts.map +1 -0
  224. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-view/width-manager.js +24 -27
  225. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-view.d.ts +69 -7
  226. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-view.d.ts.map +1 -0
  227. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-view.js +646 -523
  228. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-toolbar-view.d.ts +58 -11
  229. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-toolbar-view.d.ts.map +1 -0
  230. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-toolbar-view.js +436 -383
  231. package/src/platform-implementation-js/dom-driver/gmail/views/native-gmail-nav-item-view.d.ts +35 -7
  232. package/src/platform-implementation-js/dom-driver/gmail/views/native-gmail-nav-item-view.d.ts.map +1 -0
  233. package/src/platform-implementation-js/dom-driver/gmail/views/native-gmail-nav-item-view.js +265 -235
  234. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/create-accessory-button-view.d.ts +2 -0
  235. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/create-accessory-button-view.d.ts.map +1 -1
  236. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/create-accessory-button-view.js +4 -0
  237. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/create-parent-accessory-button-view.d.ts +2 -0
  238. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/create-parent-accessory-button-view.d.ts.map +1 -1
  239. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/create-parent-accessory-button-view.js +4 -0
  240. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/inbox-dropdown-button-view.d.ts +7 -0
  241. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/inbox-dropdown-button-view.d.ts.map +1 -0
  242. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/inbox-dropdown-button-view.js +22 -30
  243. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/modal-button-view.d.ts +4 -0
  244. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/modal-button-view.d.ts.map +1 -1
  245. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/modal-button-view.js +6 -0
  246. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-action-button-view.d.ts +11 -0
  247. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-action-button-view.d.ts.map +1 -0
  248. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-action-button-view.js +35 -41
  249. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-label-view.d.ts +18 -0
  250. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-label-view.d.ts.map +1 -0
  251. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-label-view.js +96 -97
  252. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-mole-view-driver.d.ts +18 -15
  253. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-mole-view-driver.d.ts.map +1 -0
  254. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-mole-view-driver.js +170 -170
  255. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-tooltip-view.d.ts +47 -0
  256. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-tooltip-view.d.ts.map +1 -0
  257. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-tooltip-view.js +325 -279
  258. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-backdrop.d.ts +16 -0
  259. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-backdrop.d.ts.map +1 -0
  260. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-backdrop.js +56 -61
  261. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-drawer-view.d.ts +31 -3
  262. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-drawer-view.d.ts.map +1 -0
  263. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-drawer-view.js +275 -252
  264. package/src/platform-implementation-js/driver-common/compose/getDiscardStream.d.ts +6 -0
  265. package/src/platform-implementation-js/driver-common/compose/getDiscardStream.d.ts.map +1 -0
  266. package/src/platform-implementation-js/driver-common/compose/getDiscardStream.js +27 -32
  267. package/src/platform-implementation-js/driver-common/compose/getPresendingStream.d.ts +7 -0
  268. package/src/platform-implementation-js/driver-common/compose/getPresendingStream.d.ts.map +1 -0
  269. package/src/platform-implementation-js/driver-common/compose/getPresendingStream.js +45 -43
  270. package/src/platform-implementation-js/driver-common/getGmailMessageIdForSyncMessageId.d.ts +5 -6
  271. package/src/platform-implementation-js/driver-common/getGmailMessageIdForSyncMessageId.d.ts.map +1 -0
  272. package/src/platform-implementation-js/driver-common/getGmailMessageIdForSyncMessageId.js +11 -19
  273. package/src/platform-implementation-js/driver-common/getGmailThreadIdForRfcMessageId.d.ts +5 -6
  274. package/src/platform-implementation-js/driver-common/getGmailThreadIdForRfcMessageId.d.ts.map +1 -0
  275. package/src/platform-implementation-js/driver-common/getGmailThreadIdForRfcMessageId.js +39 -48
  276. package/src/platform-implementation-js/driver-common/getRfcMessageIdForSyncMessageId.d.ts +5 -0
  277. package/src/platform-implementation-js/driver-common/getRfcMessageIdForSyncMessageId.d.ts.map +1 -0
  278. package/src/platform-implementation-js/driver-common/getRfcMessageIdForSyncMessageId.js +12 -20
  279. package/src/platform-implementation-js/driver-common/getThreadIdFromMessageId.d.ts +5 -0
  280. package/src/platform-implementation-js/driver-common/getThreadIdFromMessageId.d.ts.map +1 -0
  281. package/src/platform-implementation-js/driver-common/getThreadIdFromMessageId.js +11 -19
  282. package/src/platform-implementation-js/driver-common/inboxAjax.d.ts +4 -0
  283. package/src/platform-implementation-js/driver-common/inboxAjax.d.ts.map +1 -0
  284. package/src/platform-implementation-js/driver-common/inboxAjax.js +5 -13
  285. package/src/platform-implementation-js/driver-common/requestGmailThread.d.ts +4 -0
  286. package/src/platform-implementation-js/driver-common/requestGmailThread.d.ts.map +1 -0
  287. package/src/platform-implementation-js/driver-common/requestGmailThread.js +22 -32
  288. package/src/platform-implementation-js/driver-common/sidebar/AppSidebar.d.ts +50 -0
  289. package/src/platform-implementation-js/driver-common/sidebar/AppSidebar.d.ts.map +1 -0
  290. package/src/platform-implementation-js/driver-common/sidebar/AppSidebar.js +228 -279
  291. package/src/platform-implementation-js/driver-common/sidebar/ContentPanelViewDriver.d.ts +25 -1
  292. package/src/platform-implementation-js/driver-common/sidebar/ContentPanelViewDriver.d.ts.map +1 -0
  293. package/src/platform-implementation-js/driver-common/sidebar/ContentPanelViewDriver.js +142 -147
  294. package/src/platform-implementation-js/driver-interfaces/compose-view-driver.d.ts +106 -133
  295. package/src/platform-implementation-js/driver-interfaces/compose-view-driver.d.ts.map +1 -0
  296. package/src/platform-implementation-js/driver-interfaces/compose-view-driver.js +1 -1
  297. package/src/platform-implementation-js/driver-interfaces/driver.d.ts +31 -139
  298. package/src/platform-implementation-js/driver-interfaces/driver.d.ts.map +1 -0
  299. package/src/platform-implementation-js/driver-interfaces/driver.js +1 -1
  300. package/src/platform-implementation-js/driver-interfaces/message-view-driver.d.ts +44 -0
  301. package/src/platform-implementation-js/driver-interfaces/message-view-driver.d.ts.map +1 -0
  302. package/src/platform-implementation-js/driver-interfaces/message-view-driver.js +1 -5
  303. package/src/platform-implementation-js/driver-interfaces/mole-view-driver.d.ts +18 -20
  304. package/src/platform-implementation-js/driver-interfaces/mole-view-driver.d.ts.map +1 -0
  305. package/src/platform-implementation-js/driver-interfaces/mole-view-driver.js +1 -1
  306. package/src/platform-implementation-js/driver-interfaces/route-view-driver.d.ts +19 -0
  307. package/src/platform-implementation-js/driver-interfaces/route-view-driver.d.ts.map +1 -0
  308. package/src/platform-implementation-js/driver-interfaces/route-view-driver.js +1 -1
  309. package/src/platform-implementation-js/driver-interfaces/thread-row-view-driver.d.ts +11 -0
  310. package/src/platform-implementation-js/driver-interfaces/thread-row-view-driver.d.ts.map +1 -0
  311. package/src/platform-implementation-js/driver-interfaces/thread-row-view-driver.js +1 -1
  312. package/src/platform-implementation-js/lib/css-selector-escape.d.ts +2 -0
  313. package/src/platform-implementation-js/lib/css-selector-escape.d.ts.map +1 -0
  314. package/src/platform-implementation-js/lib/css-selector-escape.js +6 -12
  315. package/src/platform-implementation-js/lib/delay-asap.d.ts +1 -1
  316. package/src/platform-implementation-js/lib/delay-asap.d.ts.map +1 -1
  317. package/src/platform-implementation-js/lib/delay-asap.js +0 -2
  318. package/src/platform-implementation-js/lib/dom/get-selection.d.ts +3 -0
  319. package/src/platform-implementation-js/lib/dom/get-selection.d.ts.map +1 -0
  320. package/src/platform-implementation-js/lib/dom/get-selection.js +22 -24
  321. package/src/platform-implementation-js/lib/dom/insert-html-at-cursor.d.ts +3 -0
  322. package/src/platform-implementation-js/lib/dom/insert-html-at-cursor.d.ts.map +1 -0
  323. package/src/platform-implementation-js/lib/dom/insert-html-at-cursor.js +78 -75
  324. package/src/platform-implementation-js/lib/dom/is-node-in-range.d.ts +2 -0
  325. package/src/platform-implementation-js/lib/dom/is-node-in-range.d.ts.map +1 -0
  326. package/src/platform-implementation-js/lib/dom/is-node-in-range.js +12 -17
  327. package/src/platform-implementation-js/lib/dom/make-element-stream-merger.d.ts.map +1 -1
  328. package/src/platform-implementation-js/lib/dom/set-css.d.ts +2 -0
  329. package/src/platform-implementation-js/lib/dom/set-css.d.ts.map +1 -0
  330. package/src/platform-implementation-js/lib/dom/set-css.js +18 -23
  331. package/src/platform-implementation-js/lib/dom/set-value-and-dispatch-event.d.ts +2 -0
  332. package/src/platform-implementation-js/lib/dom/set-value-and-dispatch-event.d.ts.map +1 -0
  333. package/src/platform-implementation-js/lib/dom/set-value-and-dispatch-event.js +6 -12
  334. package/src/platform-implementation-js/lib/dom/simulate-drag-and-drop.d.ts +4 -0
  335. package/src/platform-implementation-js/lib/dom/simulate-drag-and-drop.d.ts.map +1 -0
  336. package/src/platform-implementation-js/lib/dom/simulate-drag-and-drop.js +84 -93
  337. package/src/platform-implementation-js/lib/extract-contact-from-email-contact-string.d.ts +1 -1
  338. package/src/platform-implementation-js/lib/extract-contact-from-email-contact-string.d.ts.map +1 -1
  339. package/src/platform-implementation-js/lib/handle-compose-link-chips.d.ts +4 -0
  340. package/src/platform-implementation-js/lib/handle-compose-link-chips.d.ts.map +1 -0
  341. package/src/platform-implementation-js/lib/handle-compose-link-chips.js +106 -97
  342. package/src/platform-implementation-js/lib/inject-script-EMBEDDED.d.ts.map +1 -1
  343. package/src/platform-implementation-js/lib/inject-script-EMBEDDED.js +1 -1
  344. package/src/platform-implementation-js/lib/insert-link-chip-into-body.d.ts +4 -0
  345. package/src/platform-implementation-js/lib/insert-link-chip-into-body.d.ts.map +1 -0
  346. package/src/platform-implementation-js/lib/insert-link-chip-into-body.js +32 -39
  347. package/src/platform-implementation-js/lib/logger.d.ts +1 -0
  348. package/src/platform-implementation-js/lib/logger.d.ts.map +1 -1
  349. package/src/platform-implementation-js/lib/parseParamsFromRouteID.d.ts +2 -0
  350. package/src/platform-implementation-js/lib/parseParamsFromRouteID.d.ts.map +1 -0
  351. package/src/platform-implementation-js/lib/parseParamsFromRouteID.js +12 -18
  352. package/src/platform-implementation-js/lib/populateRouteID.d.ts +2 -5
  353. package/src/platform-implementation-js/lib/populateRouteID.d.ts.map +1 -0
  354. package/src/platform-implementation-js/lib/populateRouteID.js +16 -21
  355. package/src/platform-implementation-js/lib/react/ElementContainer.d.ts +15 -0
  356. package/src/platform-implementation-js/lib/react/ElementContainer.d.ts.map +1 -0
  357. package/src/platform-implementation-js/lib/react/ElementContainer.js +24 -36
  358. package/src/platform-implementation-js/lib/routeIDmatchesHash.d.ts +2 -4
  359. package/src/platform-implementation-js/lib/routeIDmatchesHash.d.ts.map +1 -0
  360. package/src/platform-implementation-js/lib/routeIDmatchesHash.js +8 -15
  361. package/src/platform-implementation-js/lib/toItemWithLifetimeStream.d.ts +2 -4
  362. package/src/platform-implementation-js/lib/toItemWithLifetimeStream.d.ts.map +1 -0
  363. package/src/platform-implementation-js/lib/toItemWithLifetimeStream.js +12 -19
  364. package/src/platform-implementation-js/main-INTEGRATED-PAGEWORLD.js +1 -1
  365. package/src/platform-implementation-js/main.d.ts.map +1 -1
  366. package/src/platform-implementation-js/main.js +1 -4
  367. package/src/platform-implementation-js/namespaces/compose.d.ts +13 -0
  368. package/src/platform-implementation-js/namespaces/compose.d.ts.map +1 -0
  369. package/src/platform-implementation-js/namespaces/compose.js +56 -61
  370. package/src/platform-implementation-js/namespaces/conversations.d.ts +24 -0
  371. package/src/platform-implementation-js/namespaces/conversations.d.ts.map +1 -0
  372. package/src/platform-implementation-js/namespaces/conversations.js +79 -78
  373. package/src/platform-implementation-js/namespaces/global.d.ts +11 -0
  374. package/src/platform-implementation-js/namespaces/global.d.ts.map +1 -0
  375. package/src/platform-implementation-js/namespaces/global.js +28 -36
  376. package/src/platform-implementation-js/namespaces/keyboard.d.ts +11 -0
  377. package/src/platform-implementation-js/namespaces/keyboard.d.ts.map +1 -0
  378. package/src/platform-implementation-js/namespaces/keyboard.js +27 -40
  379. package/src/platform-implementation-js/namespaces/lists.d.ts +14 -0
  380. package/src/platform-implementation-js/namespaces/lists.d.ts.map +1 -0
  381. package/src/platform-implementation-js/namespaces/lists.js +38 -50
  382. package/src/platform-implementation-js/namespaces/modal.d.ts +10 -0
  383. package/src/platform-implementation-js/namespaces/modal.d.ts.map +1 -0
  384. package/src/platform-implementation-js/namespaces/modal.js +40 -48
  385. package/src/platform-implementation-js/namespaces/nav-menu.d.ts +16 -0
  386. package/src/platform-implementation-js/namespaces/nav-menu.d.ts.map +1 -0
  387. package/src/platform-implementation-js/namespaces/nav-menu.js +29 -36
  388. package/src/platform-implementation-js/namespaces/router.d.ts +50 -1
  389. package/src/platform-implementation-js/namespaces/router.d.ts.map +1 -0
  390. package/src/platform-implementation-js/namespaces/router.js +126 -137
  391. package/src/platform-implementation-js/namespaces/search.d.ts +7 -0
  392. package/src/platform-implementation-js/namespaces/search.d.ts.map +1 -0
  393. package/src/platform-implementation-js/namespaces/search.js +25 -34
  394. package/src/platform-implementation-js/namespaces/toolbars.d.ts +15 -0
  395. package/src/platform-implementation-js/namespaces/toolbars.d.ts.map +1 -0
  396. package/src/platform-implementation-js/namespaces/toolbars.js +138 -140
  397. package/src/platform-implementation-js/namespaces/user.d.ts +13 -0
  398. package/src/platform-implementation-js/namespaces/user.d.ts.map +1 -0
  399. package/src/platform-implementation-js/namespaces/user.js +53 -62
  400. package/src/platform-implementation-js/namespaces/widgets.d.ts +16 -0
  401. package/src/platform-implementation-js/namespaces/widgets.d.ts.map +1 -0
  402. package/src/platform-implementation-js/namespaces/widgets.js +68 -77
  403. package/src/platform-implementation-js/platform-implementation.d.ts +54 -126
  404. package/src/platform-implementation-js/platform-implementation.d.ts.map +1 -0
  405. package/src/platform-implementation-js/platform-implementation.js +176 -147
  406. package/src/platform-implementation-js/views/app-toolbar-button-view.d.ts +11 -0
  407. package/src/platform-implementation-js/views/app-toolbar-button-view.d.ts.map +1 -0
  408. package/src/platform-implementation-js/views/app-toolbar-button-view.js +42 -51
  409. package/src/platform-implementation-js/views/collapsible-section-view.d.ts +12 -0
  410. package/src/platform-implementation-js/views/collapsible-section-view.d.ts.map +1 -0
  411. package/src/platform-implementation-js/views/collapsible-section-view.js +58 -86
  412. package/src/platform-implementation-js/views/compose-view.d.ts +2 -1
  413. package/src/platform-implementation-js/views/compose-view.d.ts.map +1 -1
  414. package/src/platform-implementation-js/views/content-panel-view.d.ts +12 -0
  415. package/src/platform-implementation-js/views/content-panel-view.d.ts.map +1 -0
  416. package/src/platform-implementation-js/views/content-panel-view.js +35 -50
  417. package/src/platform-implementation-js/views/conversations/attachment-card-view.d.ts +18 -0
  418. package/src/platform-implementation-js/views/conversations/attachment-card-view.d.ts.map +1 -0
  419. package/src/platform-implementation-js/views/conversations/attachment-card-view.js +39 -44
  420. package/src/platform-implementation-js/views/conversations/custom-message-view.d.ts +28 -0
  421. package/src/platform-implementation-js/views/conversations/custom-message-view.d.ts.map +1 -0
  422. package/src/platform-implementation-js/views/conversations/custom-message-view.js +115 -103
  423. package/src/platform-implementation-js/views/conversations/message-view.d.ts +34 -0
  424. package/src/platform-implementation-js/views/conversations/message-view.d.ts.map +1 -0
  425. package/src/platform-implementation-js/views/conversations/message-view.js +197 -209
  426. package/src/platform-implementation-js/views/conversations/thread-view.d.ts +23 -0
  427. package/src/platform-implementation-js/views/conversations/thread-view.d.ts.map +1 -0
  428. package/src/platform-implementation-js/views/conversations/thread-view.js +93 -100
  429. package/src/platform-implementation-js/views/native-nav-item-view.d.ts +11 -0
  430. package/src/platform-implementation-js/views/native-nav-item-view.d.ts.map +1 -0
  431. package/src/platform-implementation-js/views/native-nav-item-view.js +56 -62
  432. package/src/platform-implementation-js/views/nav-item-view.d.ts +12 -22
  433. package/src/platform-implementation-js/views/nav-item-view.d.ts.map +1 -0
  434. package/src/platform-implementation-js/views/nav-item-view.js +123 -124
  435. package/src/platform-implementation-js/views/route-view/custom-route-view.d.ts +9 -0
  436. package/src/platform-implementation-js/views/route-view/custom-route-view.d.ts.map +1 -0
  437. package/src/platform-implementation-js/views/route-view/custom-route-view.js +24 -36
  438. package/src/platform-implementation-js/views/route-view/dummy-route-view-driver.d.ts +14 -0
  439. package/src/platform-implementation-js/views/route-view/dummy-route-view-driver.d.ts.map +1 -0
  440. package/src/platform-implementation-js/views/route-view/dummy-route-view-driver.js +27 -38
  441. package/src/platform-implementation-js/views/route-view/list-route-view.d.ts +13 -0
  442. package/src/platform-implementation-js/views/route-view/list-route-view.d.ts.map +1 -0
  443. package/src/platform-implementation-js/views/route-view/list-route-view.js +41 -51
  444. package/src/platform-implementation-js/views/route-view/route-view.d.ts +11 -0
  445. package/src/platform-implementation-js/views/route-view/route-view.d.ts.map +1 -0
  446. package/src/platform-implementation-js/views/route-view/route-view.js +41 -51
  447. package/src/platform-implementation-js/views/section-view.d.ts +11 -0
  448. package/src/platform-implementation-js/views/section-view.d.ts.map +1 -0
  449. package/src/platform-implementation-js/views/section-view.js +56 -81
  450. package/src/platform-implementation-js/views/thread-row-view.d.ts +27 -0
  451. package/src/platform-implementation-js/views/thread-row-view.d.ts.map +1 -0
  452. package/src/platform-implementation-js/views/thread-row-view.js +87 -94
  453. package/src/platform-implementation-js/widgets/buttons/basic-button-view-controller.d.ts +4 -0
  454. package/src/platform-implementation-js/widgets/buttons/basic-button-view-controller.d.ts.map +1 -1
  455. package/src/platform-implementation-js/widgets/drawer-view.d.ts +13 -0
  456. package/src/platform-implementation-js/widgets/drawer-view.d.ts.map +1 -0
  457. package/src/platform-implementation-js/widgets/drawer-view.js +46 -53
  458. package/src/platform-implementation-js/widgets/modal-view.d.ts +18 -0
  459. package/src/platform-implementation-js/widgets/modal-view.d.ts.map +1 -0
  460. package/src/platform-implementation-js/widgets/modal-view.js +95 -91
  461. package/src/platform-implementation-js/widgets/mole-view.d.ts +12 -0
  462. package/src/platform-implementation-js/widgets/mole-view.d.ts.map +1 -0
  463. package/src/platform-implementation-js/widgets/mole-view.js +37 -46
  464. package/src/platform-implementation-js/widgets/top-message-bar-view.d.ts +8 -0
  465. package/src/platform-implementation-js/widgets/top-message-bar-view.d.ts.map +1 -0
  466. package/src/platform-implementation-js/widgets/top-message-bar-view.js +13 -21
  467. package/src/injected-js/gmail/modify-suggestions.test.js +0 -20
  468. package/src/injected-js/gmail/sync-compose-request-processor.test.js +0 -80
  469. package/src/injected-js/gmail/thread-identifier/thread-row-parser.test.js +0 -41
  470. package/src/injected-js/xhr-proxy-factory.test.js +0 -1052
  471. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/open-draft-by-message-id.test.js +0 -22
  472. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/index.test.js +0 -125
  473. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-card-view.test.js +0 -141
  474. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view.test.js +0 -209
  475. package/src/platform-implementation-js/lib/array-to-lifetimes.js +0 -69
  476. package/src/platform-implementation-js/lib/array-to-lifetimes.test.js +0 -155
  477. package/src/platform-implementation-js/lib/dom/querySelectorOne.js +0 -13
  478. package/src/platform-implementation-js/lib/extract-contact-from-email-contact-string.test.js +0 -39
  479. package/src/platform-implementation-js/lib/make-revocable-function.js +0 -38
  480. package/src/platform-implementation-js/lib/make-revocable-function.test.js +0 -61
  481. package/src/platform-implementation-js/lib/parseParamsFromRouteID.test.js +0 -19
  482. package/src/platform-implementation-js/lib/populateRouteID.test.js +0 -32
  483. package/src/platform-implementation-js/lib/routeIDmatchesHash.test.js +0 -17
@@ -1,660 +1,738 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.default = void 0;
8
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
- var _sortBy = _interopRequireDefault(require("lodash/sortBy"));
10
- var _once = _interopRequireDefault(require("lodash/once"));
11
- var _autoHtml = _interopRequireDefault(require("auto-html"));
12
- var _asap = _interopRequireDefault(require("asap"));
13
- var _ud = require("ud");
14
- var _kefir = _interopRequireDefault(require("kefir"));
15
- var _kefirBus = _interopRequireDefault(require("kefir-bus"));
16
- var _kefirStopper = _interopRequireDefault(require("kefir-stopper"));
17
- var _kefirCast = _interopRequireDefault(require("kefir-cast"));
18
- var _gmailAttachmentAreaView = _interopRequireDefault(require("./gmail-attachment-area-view"));
19
- var _gmailAttachmentCardView = _interopRequireDefault(require("./gmail-attachment-card-view"));
20
- var _getUpdatedContact = _interopRequireDefault(require("./gmail-message-view/get-updated-contact"));
21
- var _attachmentIcon = _interopRequireDefault(require("./gmail-message-view/attachment-icon"));
22
- var _delayAsap = _interopRequireDefault(require("../../../lib/delay-asap"));
23
- var _waitFor = _interopRequireDefault(require("../../../lib/wait-for"));
24
- var _makeMutationObserverStream = _interopRequireDefault(require("../../../lib/dom/make-mutation-observer-stream"));
25
- var _querySelectorOrFail = _interopRequireDefault(require("../../../lib/dom/querySelectorOrFail"));
26
- var _makeMutationObserverChunkedStream = _interopRequireDefault(require("../../../lib/dom/make-mutation-observer-chunked-stream"));
27
- var _simulateMouseEvent = require("../../../lib/dom/simulate-mouse-event");
28
- var _censorHTMLtree = _interopRequireDefault(require("../../../../common/censorHTMLtree"));
29
- var _findParent = _interopRequireDefault(require("../../../../common/find-parent"));
30
- var _reemitClickEventForReact = _interopRequireDefault(require("../../../lib/dom/reemitClickEventForReact"));
1
+ /* eslint-disable @typescript-eslint/no-unused-vars */
2
+ import sortBy from 'lodash/sortBy';
3
+ import once from 'lodash/once';
4
+ import autoHtml from 'auto-html';
5
+ import * as Kefir from 'kefir';
6
+ import kefirBus from 'kefir-bus';
7
+ import kefirStopper from 'kefir-stopper';
8
+ import kefirCast from 'kefir-cast';
9
+ import GmailAttachmentAreaView from './gmail-attachment-area-view';
10
+ import GmailAttachmentCardView from './gmail-attachment-card-view';
11
+ import getUpdatedContact from './gmail-message-view/get-updated-contact';
12
+ import AttachmentIcon from './gmail-message-view/attachment-icon';
13
+ import makeMutationObserverStream from '../../../lib/dom/make-mutation-observer-stream';
14
+ import querySelector from '../../../lib/dom/querySelectorOrFail';
15
+ import makeMutationObserverChunkedStream from '../../../lib/dom/make-mutation-observer-chunked-stream';
16
+ import { simulateClick } from '../../../lib/dom/simulate-mouse-event';
17
+ import censorHTMLtree from '../../../../common/censorHTMLtree';
18
+ import findParent from '../../../../common/find-parent';
19
+ import reemitClickEvent from '../../../lib/dom/reemitClickEventForReact';
31
20
  let hasSeenOldElement = false;
32
21
  class GmailMessageView {
33
- constructor(element, gmailThreadView, driver) {
34
- (0, _defineProperty2.default)(this, "_eventStream", (0, _kefirBus.default)());
35
- (0, _defineProperty2.default)(this, "_stopper", (0, _kefirStopper.default)());
36
- (0, _defineProperty2.default)(this, "_messageLoaded", false);
37
- (0, _defineProperty2.default)(this, "_sender", null);
38
- (0, _defineProperty2.default)(this, "_recipients", null);
39
- (0, _defineProperty2.default)(this, "_recipientEmailAddresses", null);
40
- (0, _defineProperty2.default)(this, "_recipientsFull", null);
41
- this._element = element;
42
- this._threadViewDriver = gmailThreadView;
43
- this._driver = driver;
44
- this._moreMenuItemDescriptors = [];
45
- this._moreMenuAddedElements = [];
46
- this._replyElement = null;
47
-
48
- // Outputs the same type of stream as makeElementChildStream does.
49
- this._replyElementStream = this._eventStream.filter(function (event) {
50
- return event.eventName === 'replyElement';
51
- }).map(event => event.change);
52
- this._setupMessageStateStream();
53
- this._monitorEmailAddressHovering();
54
- this._setupMoreMenuWatching();
55
- let partialReadyStream;
56
- if (driver.isUsingSyncAPI()) {
57
- // handle the case that the data-message-id is available, but the data-legacy-message-id is not
58
- // this happens when you're looking at a thread, and then you reply to a message, the message id is generated
59
- // client side, so the new message added (from your reply) shows up in the UI right away and has a data-message-id but
60
- // because it hasn't been synced to the server it does not have a data-legacy-messag-id
61
- // so we wait until the message has been synced to the server before saying this is ready
62
- const messageIdElement = this._element.querySelector('[data-message-id]');
63
- if (messageIdElement) {
64
- const syncMessageId = messageIdElement.getAttribute('data-message-id');
65
- if (!syncMessageId) throw new Error('data-message-id attribute has no value');
66
-
67
- // Only respect data-legacy-message-id if data-message-id is not the id
68
- // of a draft we've seen recently, in order to work around a Gmail bug.
69
- // https://github.com/StreakYC/GmailSDK/issues/515#issuecomment-457420619
70
- if (messageIdElement.hasAttribute('data-legacy-message-id') && !this._driver.isRecentSyncDraftId(syncMessageId.replace('#', ''))) {
71
- partialReadyStream = _kefir.default.constant(null);
72
- } else {
73
- // we have a data message id, but not the legacy message id. So now we have to poll for the gmail message id
74
- partialReadyStream = _kefir.default.fromPromise((async () => {
75
- for (let ii = 0; ii < 10; ii++) {
76
- try {
77
- const gmailMessageId = await this._driver.getGmailMessageIdForSyncMessageId(syncMessageId.replace('#', ''));
78
- // set the legacy message id attribute so subsequent calls to getMessageId find the legacy message id in the dom
79
- messageIdElement.setAttribute('data-legacy-message-id', gmailMessageId);
80
- return null;
81
- } catch (e) {
82
- await new Promise(resolve => setTimeout(resolve, ii * 200));
83
- }
22
+ _element;
23
+ _driver;
24
+ _eventStream = kefirBus();
25
+ _stopper = kefirStopper();
26
+ _threadViewDriver;
27
+ _moreMenuItemDescriptors;
28
+ _moreMenuAddedElements;
29
+ _replyElementStream;
30
+ _readyStream;
31
+ _replyElement;
32
+ _gmailAttachmentAreaView;
33
+ _messageLoaded = false;
34
+ _openMoreMenu;
35
+ _sender = null;
36
+ _recipients = null;
37
+ _recipientEmailAddresses = null;
38
+ _recipientsFull = null;
39
+ constructor(element, gmailThreadView, driver) {
40
+ this._element = element;
41
+ this._threadViewDriver = gmailThreadView;
42
+ this._driver = driver;
43
+ this._moreMenuItemDescriptors = [];
44
+ this._moreMenuAddedElements = [];
45
+ this._replyElement = null;
46
+ // Outputs the same type of stream as makeElementChildStream does.
47
+ this._replyElementStream = this._eventStream
48
+ .filter(function (event) {
49
+ return event.eventName === 'replyElement';
50
+ })
51
+ .map((event) => event.change);
52
+ this._setupMessageStateStream();
53
+ this._monitorEmailAddressHovering();
54
+ this._setupMoreMenuWatching();
55
+ let partialReadyStream;
56
+ if (driver.isUsingSyncAPI()) {
57
+ // handle the case that the data-message-id is available, but the data-legacy-message-id is not
58
+ // this happens when you're looking at a thread, and then you reply to a message, the message id is generated
59
+ // client side, so the new message added (from your reply) shows up in the UI right away and has a data-message-id but
60
+ // because it hasn't been synced to the server it does not have a data-legacy-messag-id
61
+ // so we wait until the message has been synced to the server before saying this is ready
62
+ const messageIdElement = this._element.querySelector('[data-message-id]');
63
+ if (messageIdElement) {
64
+ const syncMessageId = messageIdElement.getAttribute('data-message-id');
65
+ if (!syncMessageId)
66
+ throw new Error('data-message-id attribute has no value');
67
+ // Only respect data-legacy-message-id if data-message-id is not the id
68
+ // of a draft we've seen recently, in order to work around a Gmail bug.
69
+ // https://github.com/StreakYC/GmailSDK/issues/515#issuecomment-457420619
70
+ if (messageIdElement.hasAttribute('data-legacy-message-id') &&
71
+ !this._driver.isRecentSyncDraftId(syncMessageId.replace('#', ''))) {
72
+ partialReadyStream = Kefir.constant(null);
73
+ }
74
+ else {
75
+ // we have a data message id, but not the legacy message id. So now we have to poll for the gmail message id
76
+ partialReadyStream = Kefir.fromPromise((async () => {
77
+ for (let ii = 0; ii < 10; ii++) {
78
+ try {
79
+ const gmailMessageId = await this._driver.getGmailMessageIdForSyncMessageId(syncMessageId.replace('#', ''));
80
+ // set the legacy message id attribute so subsequent calls to getMessageId find the legacy message id in the dom
81
+ messageIdElement.setAttribute('data-legacy-message-id', gmailMessageId);
82
+ return null;
83
+ }
84
+ catch (e) {
85
+ await new Promise((resolve) => setTimeout(resolve, ii * 200));
86
+ }
87
+ }
88
+ throw new Error('gmail message id never became available');
89
+ })());
90
+ }
91
+ }
92
+ else {
93
+ partialReadyStream = Kefir.constant(null);
84
94
  }
85
- throw new Error('gmail message id never became available');
86
- })());
87
95
  }
88
- } else {
89
- partialReadyStream = _kefir.default.constant(null);
90
- }
91
- } else {
92
- partialReadyStream = _kefir.default.constant(null);
93
- }
94
- this._readyStream = partialReadyStream.takeUntilBy(this._stopper).onValue(() => this._processInitialState());
95
- }
96
- destroy() {
97
- this._stopper.destroy();
98
- this._eventStream.end();
99
- if (this._gmailAttachmentAreaView) this._gmailAttachmentAreaView.destroy();
100
- this._moreMenuAddedElements.forEach(el => {
101
- el.remove();
102
- });
103
- }
104
- getEventStream() {
105
- return this._eventStream;
106
- }
107
- getReplyElementStream() {
108
- return this._replyElementStream;
109
- }
110
- getElement() {
111
- return this._element;
112
- }
113
- getThreadViewDriver() {
114
- return this._threadViewDriver;
115
- }
116
- isLoaded() {
117
- return this._messageLoaded;
118
- }
119
- getContentsElement() {
120
- if (!this._messageLoaded) {
121
- throw new Error('tried to get message contents before message is loaded');
122
- }
123
- try {
124
- return (0, _querySelectorOrFail.default)(this._element, 'div.ii.gt');
125
- } catch (err) {
126
- // Keep old fallback selector until we're confident of the new one.
127
- this._driver.getLogger().error(err);
128
- return (0, _querySelectorOrFail.default)(this._element, '.adP');
129
- }
130
- }
131
- isElementInQuotedArea(element) {
132
- return (0, _findParent.default)(element, el => el.nodeName === 'BLOCKQUOTE') != null;
133
- }
134
- getSender() {
135
- let sender = this._sender;
136
- if (sender) return sender;
137
- const senderSpan = (0, _querySelectorOrFail.default)(this._element, 'td.gF span[email]');
138
- const emailAddress = senderSpan.getAttribute('email');
139
- if (!emailAddress) throw new Error('Could not find email address');
140
- sender = this._sender = {
141
- name: senderSpan.getAttribute('name'),
142
- emailAddress
143
- };
144
- return sender;
145
- }
146
- getRecipients() {
147
- let recipients = this._recipients;
148
- if (recipients) return recipients;
149
- const receipientSpans = Array.from(this._element.querySelectorAll('.hb span[email]'));
150
- recipients = this._recipients = receipientSpans.map(span => {
151
- return this._getUpdatedContact({
152
- name: span.getAttribute('name'),
153
- emailAddress: span.getAttribute('email') || ''
154
- });
155
- });
156
- return recipients;
157
- }
158
- getRecipientEmailAddresses() {
159
- let recipients = this._recipientEmailAddresses;
160
- if (recipients) return recipients;
161
- const receipientSpans = Array.from(this._element.querySelectorAll('.hb span[email]'));
162
- recipients = this._recipientEmailAddresses = receipientSpans.map(span => span.getAttribute('email') || '');
163
- return recipients;
164
- }
165
- async getRecipientsFull() {
166
- let recipients = this._recipientsFull;
167
- if (recipients) return recipients;
168
- if (this._driver.isUsingSyncAPI()) {
169
- const threadID = this._threadViewDriver.getInternalID();
170
- recipients = this._recipientsFull = await this._driver.getPageCommunicator().getMessageRecipients(threadID, this._element);
171
- if (!recipients) {
172
- this._driver.getLogger().error(new Error('Failed to find message recipients from response'), {
173
- threadID
96
+ else {
97
+ partialReadyStream = Kefir.constant(null);
98
+ }
99
+ this._readyStream = partialReadyStream
100
+ .takeUntilBy(this._stopper)
101
+ .onValue(() => this._processInitialState());
102
+ }
103
+ destroy() {
104
+ this._stopper.destroy();
105
+ this._eventStream.end();
106
+ if (this._gmailAttachmentAreaView)
107
+ this._gmailAttachmentAreaView.destroy();
108
+ this._moreMenuAddedElements.forEach((el) => {
109
+ el.remove();
174
110
  });
175
- recipients = this._recipientsFull = this.getRecipients();
176
- }
177
- } else {
178
- const receipientSpans = Array.from(this._element.querySelectorAll('.hb span[email]'));
179
- recipients = this._recipientsFull = receipientSpans.map(span => {
180
- return this._getUpdatedContact({
181
- name: span.getAttribute('name'),
182
- emailAddress: span.getAttribute('email') || ''
111
+ }
112
+ getEventStream() {
113
+ return this._eventStream;
114
+ }
115
+ getReplyElementStream() {
116
+ return this._replyElementStream;
117
+ }
118
+ getElement() {
119
+ return this._element;
120
+ }
121
+ getThreadViewDriver() {
122
+ return this._threadViewDriver;
123
+ }
124
+ isLoaded() {
125
+ return this._messageLoaded;
126
+ }
127
+ getContentsElement() {
128
+ if (!this._messageLoaded) {
129
+ throw new Error('tried to get message contents before message is loaded');
130
+ }
131
+ try {
132
+ return querySelector(this._element, 'div.ii.gt');
133
+ }
134
+ catch (err) {
135
+ // Keep old fallback selector until we're confident of the new one.
136
+ this._driver.getLogger().error(err);
137
+ return querySelector(this._element, '.adP');
138
+ }
139
+ }
140
+ isElementInQuotedArea(element) {
141
+ return findParent(element, (el) => el.nodeName === 'BLOCKQUOTE') != null;
142
+ }
143
+ getSender() {
144
+ let sender = this._sender;
145
+ if (sender)
146
+ return sender;
147
+ const senderSpan = querySelector(this._element, 'td.gF span[email]');
148
+ const emailAddress = senderSpan.getAttribute('email');
149
+ if (!emailAddress)
150
+ throw new Error('Could not find email address');
151
+ sender = this._sender = {
152
+ name: senderSpan.getAttribute('name'),
153
+ emailAddress,
154
+ };
155
+ return sender;
156
+ }
157
+ getRecipients() {
158
+ let recipients = this._recipients;
159
+ if (recipients)
160
+ return recipients;
161
+ const receipientSpans = Array.from(this._element.querySelectorAll('.hb span[email]'));
162
+ recipients = this._recipients = receipientSpans.map((span) => {
163
+ return this._getUpdatedContact({
164
+ name: span.getAttribute('name'),
165
+ emailAddress: span.getAttribute('email') || '',
166
+ });
183
167
  });
184
- });
185
- }
186
- return recipients;
187
- }
188
- getDateString() {
189
- return (0, _querySelectorOrFail.default)(this._element, '.ads .gK .g3').title;
190
- }
191
- async getDate() {
192
- const threadID = this._threadViewDriver.getInternalID();
193
- return await this._driver.getPageCommunicator().getMessageDate(threadID, this._element);
194
- }
195
- getAttachmentCardViewDrivers() {
196
- if (!this._gmailAttachmentAreaView) {
197
- return [];
198
- }
199
- return this._gmailAttachmentAreaView.getAttachmentCardViews();
200
- }
201
- addButtonToDownloadAllArea(options) {
202
- var gmailAttachmentAreaView = this._getAttachmentArea();
203
- if (!gmailAttachmentAreaView) {
204
- return;
205
- }
206
- gmailAttachmentAreaView.addButtonToDownloadAllArea(options);
207
- }
208
- addMoreMenuItem(options) {
209
- this._moreMenuItemDescriptors = (0, _sortBy.default)(this._moreMenuItemDescriptors.concat([options]), o => o.orderHint);
210
- this._updateMoreMenu();
211
- }
212
- _setupMoreMenuWatching() {
213
- // At the start, and whenever the view state changes, watch the
214
- // 'aria-expanded' property of the more button, and when that changes,
215
- // update the _openMoreMenu property.
216
- this._openMoreMenu = null;
217
- this._eventStream.filter(e => e.eventName === 'viewStateChange').toProperty(() => null).flatMapLatest(() => {
218
- const moreButton = this._getMoreButton();
219
- if (!moreButton) {
220
- return _kefir.default.constant(null);
221
- }
222
- return (0, _makeMutationObserverChunkedStream.default)(moreButton, {
223
- attributes: true,
224
- attributeFilter: ['aria-expanded']
225
- }).map(() => moreButton.getAttribute('aria-expanded') === 'true' ? this._getOpenMoreMenu() : null);
226
- }).takeUntilBy(this._stopper).onValue(openMoreMenu => {
227
- this._openMoreMenu = openMoreMenu;
228
- this._updateMoreMenu();
229
- });
230
- }
231
- _getMoreButton() {
232
- if (this.getViewState() !== 'EXPANDED') {
233
- return null;
234
- }
235
- return this._element.querySelector('tr.acZ div.T-I.J-J5-Ji.aap.L3[role=button][aria-haspopup]');
236
- }
237
- _getOpenMoreMenu() {
238
- const selector_2022_11_23 = 'td > div.nH.a98.iY > div.nH.aHU .b7.J-M[aria-haspopup=true]';
239
- const maybeMoreMenu = document.body.querySelector(selector_2022_11_23);
240
-
241
- // This will find any message's open more menu! The caller needs to make
242
- // sure it belongs to this message!
243
- return maybeMoreMenu || document.body.querySelector('td > div.nH.if > div.nH.aHU div.b7.J-M[aria-haspopup=true]');
244
- }
245
- _closeActiveEmailMenu() {
246
- const moreButton = this._getMoreButton();
247
- if (moreButton) {
248
- (0, _simulateMouseEvent.simulateClick)(moreButton);
249
- }
250
- }
251
- _updateMoreMenu() {
252
- this._moreMenuAddedElements.forEach(el => {
253
- el.remove();
254
- });
255
- this._moreMenuAddedElements.length = 0;
256
- const openMoreMenu = this._openMoreMenu;
257
- if (openMoreMenu && this._moreMenuItemDescriptors.length) {
258
- const originalHeight = openMoreMenu.offsetHeight;
259
- const originalWidth = openMoreMenu.offsetWidth;
260
- const dividerEl = document.createElement('div');
261
- dividerEl.className = 'J-Kh';
262
- this._moreMenuAddedElements.push(dividerEl);
263
- openMoreMenu.appendChild(dividerEl);
264
- this._moreMenuItemDescriptors.forEach(options => {
265
- const itemEl = document.createElement('div');
266
- itemEl.className = 'J-N';
267
- itemEl.setAttribute('role', 'menuitem');
268
- itemEl.innerHTML = (0, _autoHtml.default)`<div class="J-N-Jz">${options.title}</div>`;
269
- itemEl.addEventListener('mouseenter', event => itemEl.classList.add('J-N-JT'));
270
- itemEl.addEventListener('mouseleave', event => itemEl.classList.remove('J-N-JT'));
271
- itemEl.addEventListener('click', event => {
272
- this._closeActiveEmailMenu();
273
- options.onClick();
168
+ return recipients;
169
+ }
170
+ getRecipientEmailAddresses() {
171
+ let recipients = this._recipientEmailAddresses;
172
+ if (recipients)
173
+ return recipients;
174
+ const receipientSpans = Array.from(this._element.querySelectorAll('.hb span[email]'));
175
+ recipients = this._recipientEmailAddresses = receipientSpans.map((span) => span.getAttribute('email') || '');
176
+ return recipients;
177
+ }
178
+ async getRecipientsFull() {
179
+ let recipients = this._recipientsFull;
180
+ if (recipients)
181
+ return recipients;
182
+ if (this._driver.isUsingSyncAPI()) {
183
+ const threadID = this._threadViewDriver.getInternalID();
184
+ recipients = this._recipientsFull = (await this._driver
185
+ .getPageCommunicator()
186
+ .getMessageRecipients(threadID, this._element));
187
+ if (!recipients) {
188
+ this._driver
189
+ .getLogger()
190
+ .error(new Error('Failed to find message recipients from response'), {
191
+ threadID,
192
+ });
193
+ recipients = this._recipientsFull = this.getRecipients();
194
+ }
195
+ }
196
+ else {
197
+ const receipientSpans = Array.from(this._element.querySelectorAll('.hb span[email]'));
198
+ recipients = this._recipientsFull = receipientSpans.map((span) => {
199
+ return this._getUpdatedContact({
200
+ name: span.getAttribute('name'),
201
+ emailAddress: span.getAttribute('email') || '',
202
+ });
203
+ });
204
+ }
205
+ return recipients;
206
+ }
207
+ getDateString() {
208
+ return querySelector(this._element, '.ads .gK .g3').title;
209
+ }
210
+ async getDate() {
211
+ const threadID = this._threadViewDriver.getInternalID();
212
+ return await this._driver
213
+ .getPageCommunicator()
214
+ .getMessageDate(threadID, this._element);
215
+ }
216
+ getAttachmentCardViewDrivers() {
217
+ if (!this._gmailAttachmentAreaView) {
218
+ return [];
219
+ }
220
+ return this._gmailAttachmentAreaView.getAttachmentCardViews();
221
+ }
222
+ addButtonToDownloadAllArea(options) {
223
+ var gmailAttachmentAreaView = this._getAttachmentArea();
224
+ if (!gmailAttachmentAreaView) {
225
+ return;
226
+ }
227
+ gmailAttachmentAreaView.addButtonToDownloadAllArea(options);
228
+ }
229
+ addMoreMenuItem(options) {
230
+ this._moreMenuItemDescriptors = sortBy(this._moreMenuItemDescriptors.concat([options]), (o) => o.orderHint);
231
+ this._updateMoreMenu();
232
+ }
233
+ _setupMoreMenuWatching() {
234
+ // At the start, and whenever the view state changes, watch the
235
+ // 'aria-expanded' property of the more button, and when that changes,
236
+ // update the _openMoreMenu property.
237
+ this._openMoreMenu = null;
238
+ this._eventStream
239
+ .filter((e) => e.eventName === 'viewStateChange')
240
+ .toProperty(() => null)
241
+ .flatMapLatest(() => {
242
+ const moreButton = this._getMoreButton();
243
+ if (!moreButton) {
244
+ return Kefir.constant(null);
245
+ }
246
+ return makeMutationObserverChunkedStream(moreButton, {
247
+ attributes: true,
248
+ attributeFilter: ['aria-expanded'],
249
+ }).map(() => moreButton.getAttribute('aria-expanded') === 'true'
250
+ ? this._getOpenMoreMenu()
251
+ : null);
252
+ })
253
+ .takeUntilBy(this._stopper)
254
+ .onValue((openMoreMenu) => {
255
+ this._openMoreMenu = openMoreMenu;
256
+ this._updateMoreMenu();
274
257
  });
275
- if (options.iconUrl || options.iconClass) {
276
- const iconEl = document.createElement('img');
277
- iconEl.className = `f4 J-N-JX inboxsdk__message_more_icon ${options.iconClass || ''}`;
278
- iconEl.src = options.iconUrl || 'images/cleardot.gif';
279
- const insertionPoint = itemEl.firstElementChild;
280
- if (insertionPoint) insertionPoint.appendChild(iconEl);
258
+ }
259
+ _getMoreButton() {
260
+ if (this.getViewState() !== 'EXPANDED') {
261
+ return null;
262
+ }
263
+ return this._element.querySelector('tr.acZ div.T-I.J-J5-Ji.aap.L3[role=button][aria-haspopup]');
264
+ }
265
+ _getOpenMoreMenu() {
266
+ const selector_2022_11_23 = 'td > div.nH.a98.iY > div.nH.aHU .b7.J-M[aria-haspopup=true]';
267
+ const maybeMoreMenu = document.body.querySelector(selector_2022_11_23);
268
+ // This will find any message's open more menu! The caller needs to make
269
+ // sure it belongs to this message!
270
+ return (maybeMoreMenu ||
271
+ document.body.querySelector('td > div.nH.if > div.nH.aHU div.b7.J-M[aria-haspopup=true]'));
272
+ }
273
+ _closeActiveEmailMenu() {
274
+ const moreButton = this._getMoreButton();
275
+ if (moreButton) {
276
+ simulateClick(moreButton);
277
+ }
278
+ }
279
+ _updateMoreMenu() {
280
+ this._moreMenuAddedElements.forEach((el) => {
281
+ el.remove();
282
+ });
283
+ this._moreMenuAddedElements.length = 0;
284
+ const openMoreMenu = this._openMoreMenu;
285
+ if (openMoreMenu && this._moreMenuItemDescriptors.length) {
286
+ const originalHeight = openMoreMenu.offsetHeight;
287
+ const originalWidth = openMoreMenu.offsetWidth;
288
+ const dividerEl = document.createElement('div');
289
+ dividerEl.className = 'J-Kh';
290
+ this._moreMenuAddedElements.push(dividerEl);
291
+ openMoreMenu.appendChild(dividerEl);
292
+ this._moreMenuItemDescriptors.forEach((options) => {
293
+ const itemEl = document.createElement('div');
294
+ itemEl.className = 'J-N';
295
+ itemEl.setAttribute('role', 'menuitem');
296
+ itemEl.innerHTML = autoHtml `<div class="J-N-Jz">${options.title}</div>`;
297
+ itemEl.addEventListener('mouseenter', (event) => itemEl.classList.add('J-N-JT'));
298
+ itemEl.addEventListener('mouseleave', (event) => itemEl.classList.remove('J-N-JT'));
299
+ itemEl.addEventListener('click', (event) => {
300
+ this._closeActiveEmailMenu();
301
+ options.onClick();
302
+ });
303
+ if (options.iconUrl || options.iconClass) {
304
+ const iconEl = document.createElement('img');
305
+ iconEl.className = `f4 J-N-JX inboxsdk__message_more_icon ${options.iconClass || ''}`;
306
+ iconEl.src = options.iconUrl || 'images/cleardot.gif';
307
+ const insertionPoint = itemEl.firstElementChild;
308
+ if (insertionPoint)
309
+ insertionPoint.appendChild(iconEl);
310
+ }
311
+ this._moreMenuAddedElements.push(itemEl);
312
+ openMoreMenu.appendChild(itemEl);
313
+ });
314
+ const menuRect = openMoreMenu.getBoundingClientRect();
315
+ const addedWidth = menuRect.width - originalWidth;
316
+ if (addedWidth > 0) {
317
+ openMoreMenu.style.left =
318
+ Math.max(0, parseInt(openMoreMenu.style.left) - addedWidth) + 'px';
319
+ }
320
+ const moreButton = this._getMoreButton();
321
+ if (moreButton) {
322
+ const moreButtonRect = moreButton.getBoundingClientRect();
323
+ // If the menu is positioned above the button, then adjust the menu
324
+ // upwards to compensate for the buttons we added.
325
+ if (menuRect.top < moreButtonRect.top) {
326
+ const addedHeight = menuRect.height - originalHeight;
327
+ openMoreMenu.style.top =
328
+ Math.max(0, parseInt(openMoreMenu.style.top) - addedHeight) + 'px';
329
+ }
330
+ }
331
+ }
332
+ }
333
+ getMessageID(ignoreLoadStatus = false) {
334
+ if (!ignoreLoadStatus && !this._messageLoaded) {
335
+ throw new Error('tried to get message id before message is loaded');
336
+ }
337
+ const messageIdElement = this._element.querySelector('[data-legacy-message-id]');
338
+ if (messageIdElement) {
339
+ const messageId = messageIdElement.getAttribute('data-legacy-message-id');
340
+ if (!messageId)
341
+ throw new Error('message id attribute with no value, wtf?');
342
+ return messageId;
343
+ }
344
+ const messageEl = this._element.querySelector('div.ii.gt');
345
+ if (!messageEl) {
346
+ const err = new Error('Could not find message id element');
347
+ this._driver.getLogger().error(err, {
348
+ elementHtml: censorHTMLtree(this._element),
349
+ });
350
+ throw err;
351
+ }
352
+ const m = messageEl.className.match(/\bm([0-9a-f]+)\b/);
353
+ if (m) {
354
+ if (!hasSeenOldElement) {
355
+ hasSeenOldElement = true;
356
+ this._driver.getLogger().eventSite('old messageid location');
357
+ }
358
+ return m[1];
359
+ }
360
+ else {
361
+ const messageElChild = messageEl.firstElementChild;
362
+ if (!messageElChild) {
363
+ const err = new Error('Could not find message id value');
364
+ this._driver.getLogger().error(err, {
365
+ reason: 'Could not find element',
366
+ messageHtml: censorHTMLtree(messageEl),
367
+ });
368
+ throw err;
369
+ }
370
+ const m = messageElChild.className.match(/\bm([0-9a-f]+)\b/);
371
+ if (!m) {
372
+ const err = new Error('Could not find message id value');
373
+ this._driver.getLogger().error(err, {
374
+ reason: 'Element was missing message className',
375
+ messageHtml: censorHTMLtree(messageEl),
376
+ });
377
+ throw err;
378
+ }
379
+ return m[1];
281
380
  }
282
- this._moreMenuAddedElements.push(itemEl);
283
- openMoreMenu.appendChild(itemEl);
284
- });
285
- const menuRect = openMoreMenu.getBoundingClientRect();
286
- const addedWidth = menuRect.width - originalWidth;
287
- if (addedWidth > 0) {
288
- openMoreMenu.style.left = Math.max(0, parseInt(openMoreMenu.style.left) - addedWidth) + 'px';
289
- }
290
- const moreButton = this._getMoreButton();
291
- if (moreButton) {
292
- const moreButtonRect = moreButton.getBoundingClientRect();
293
-
294
- // If the menu is positioned above the button, then adjust the menu
295
- // upwards to compensate for the buttons we added.
296
- if (menuRect.top < moreButtonRect.top) {
297
- const addedHeight = menuRect.height - originalHeight;
298
- openMoreMenu.style.top = Math.max(0, parseInt(openMoreMenu.style.top) - addedHeight) + 'px';
381
+ }
382
+ async getMessageIDAsync() {
383
+ return this.getMessageID();
384
+ }
385
+ addAttachmentIcon(iconDescriptor) {
386
+ const attachmentIcon = new AttachmentIcon();
387
+ if (!this._element) {
388
+ console.warn('addDateIcon called on destroyed message');
389
+ return attachmentIcon;
299
390
  }
300
- }
301
- }
302
- }
303
- getMessageID() {
304
- let ignoreLoadStatus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
305
- if (!ignoreLoadStatus && !this._messageLoaded) {
306
- throw new Error('tried to get message id before message is loaded');
307
- }
308
- const messageIdElement = this._element.querySelector('[data-legacy-message-id]');
309
- if (messageIdElement) {
310
- const messageId = messageIdElement.getAttribute('data-legacy-message-id');
311
- if (!messageId) throw new Error('message id attribute with no value, wtf?');
312
- return messageId;
313
- }
314
- const messageEl = this._element.querySelector('div.ii.gt');
315
- if (!messageEl) {
316
- const err = new Error('Could not find message id element');
317
- this._driver.getLogger().error(err, {
318
- elementHtml: (0, _censorHTMLtree.default)(this._element)
319
- });
320
- throw err;
321
- }
322
- let m = messageEl.className.match(/\bm([0-9a-f]+)\b/);
323
- if (m) {
324
- if (!hasSeenOldElement) {
325
- hasSeenOldElement = true;
326
- this._driver.getLogger().eventSite('old messageid location');
327
- }
328
- return m[1];
329
- } else {
330
- const messageElChild = messageEl.firstElementChild;
331
- if (!messageElChild) {
332
- const err = new Error('Could not find message id value');
333
- this._driver.getLogger().error(err, {
334
- reason: 'Could not find element',
335
- messageHtml: (0, _censorHTMLtree.default)(messageEl)
391
+ this._element.setAttribute('inboxsdk__message_added_attachment_icon', 'true');
392
+ const getImgElement = once(() => {
393
+ const img = document.createElement('img');
394
+ img.src = 'images/cleardot.gif';
395
+ return img;
396
+ });
397
+ const getCustomIconWrapper = once(() => {
398
+ const div = document.createElement('div');
399
+ return div;
400
+ });
401
+ const getTooltipNodeWrapper = once(() => {
402
+ const div = document.createElement('div');
403
+ return div;
404
+ });
405
+ let added = false;
406
+ let currentIconUrl = null;
407
+ this._stopper.onValue(() => {
408
+ if (added) {
409
+ getCustomIconWrapper().remove();
410
+ getTooltipNodeWrapper().remove();
411
+ getImgElement().remove();
412
+ added = false;
413
+ }
336
414
  });
337
- throw err;
338
- }
339
- const m = messageElChild.className.match(/\bm([0-9a-f]+)\b/);
340
- if (!m) {
341
- const err = new Error('Could not find message id value');
342
- this._driver.getLogger().error(err, {
343
- reason: 'Element was missing message className',
344
- messageHtml: (0, _censorHTMLtree.default)(messageEl)
415
+ kefirCast(Kefir, iconDescriptor)
416
+ .combine(this._eventStream
417
+ .filter((event) => event.eventName === 'viewStateChange')
418
+ .toProperty(() => null), (opts) => opts)
419
+ .takeUntilBy(this._stopper)
420
+ .onValue((opts) => {
421
+ if (!opts) {
422
+ if (added) {
423
+ getCustomIconWrapper().remove();
424
+ getImgElement().remove();
425
+ getTooltipNodeWrapper().remove();
426
+ added = false;
427
+ }
428
+ }
429
+ else {
430
+ let attachmentDiv;
431
+ if (this.getViewState() === 'COLLAPSED') {
432
+ attachmentDiv = querySelector(this._element, '.adf.ads td.gH span');
433
+ }
434
+ else {
435
+ attachmentDiv = querySelector(this._element, 'td.gH div.gK span');
436
+ }
437
+ const img = opts.iconHtml != null ? getCustomIconWrapper() : getImgElement();
438
+ const onClick = opts.onClick;
439
+ if (onClick) {
440
+ img.onclick = function (event) {
441
+ event.preventDefault();
442
+ event.stopPropagation();
443
+ onClick();
444
+ };
445
+ img.style.cursor = 'pointer';
446
+ }
447
+ else {
448
+ img.onclick = null;
449
+ img.style.cursor = '';
450
+ }
451
+ if (opts.tooltip &&
452
+ typeof opts.tooltip == 'object' &&
453
+ opts.tooltip instanceof HTMLElement) {
454
+ const tooltipWrapper = getTooltipNodeWrapper();
455
+ tooltipWrapper.className =
456
+ 'inboxsdk__message_attachment_tooltipWrapper';
457
+ tooltipWrapper.onclick = function (event) {
458
+ event.stopPropagation();
459
+ reemitClickEvent(event);
460
+ };
461
+ tooltipWrapper.appendChild(opts.tooltip);
462
+ img.onmouseenter = function (event) {
463
+ event.preventDefault();
464
+ event.stopPropagation();
465
+ img.appendChild(tooltipWrapper);
466
+ attachmentIcon.emit('tooltipShown');
467
+ };
468
+ img.onmouseleave = function (event) {
469
+ event.preventDefault();
470
+ event.stopPropagation();
471
+ img.removeChild(tooltipWrapper);
472
+ attachmentIcon.emit('tooltipHidden');
473
+ };
474
+ img.removeAttribute('data-tooltip');
475
+ }
476
+ else if (opts.tooltip && typeof opts.tooltip == 'string') {
477
+ img.setAttribute('data-tooltip', opts.tooltip);
478
+ }
479
+ else {
480
+ img.removeAttribute('data-tooltip');
481
+ }
482
+ img.className =
483
+ opts.iconHtml != null
484
+ ? `inboxsdk__message_attachment_iconWrapper ${opts.iconClass || ''}`
485
+ : 'inboxsdk__message_attachment_icon ' + (opts.iconClass || '');
486
+ if (opts.iconHtml != null) {
487
+ if (attachmentDiv.contains(getImgElement())) {
488
+ getImgElement().remove();
489
+ }
490
+ img.innerHTML = opts.iconHtml;
491
+ }
492
+ else if (currentIconUrl != opts.iconUrl) {
493
+ if (attachmentDiv.contains(getCustomIconWrapper())) {
494
+ getCustomIconWrapper().remove();
495
+ }
496
+ img.style.background = opts.iconUrl
497
+ ? 'url(' + opts.iconUrl + ') no-repeat 0 0'
498
+ : '';
499
+ currentIconUrl = opts.iconUrl;
500
+ }
501
+ if (!attachmentDiv.contains(img)) {
502
+ attachmentDiv.appendChild(img);
503
+ added = true;
504
+ }
505
+ }
345
506
  });
346
- throw err;
347
- }
348
- return m[1];
349
- }
350
- }
351
- async getMessageIDAsync() {
352
- return this.getMessageID();
353
- }
354
- addAttachmentIcon(iconDescriptor) {
355
- const attachmentIcon = new _attachmentIcon.default();
356
- if (!this._element) {
357
- console.warn('addDateIcon called on destroyed message');
358
- return attachmentIcon;
359
- }
360
- this._element.setAttribute('inboxsdk__message_added_attachment_icon', 'true');
361
- const getImgElement = (0, _once.default)(() => {
362
- const img = document.createElement('img');
363
- img.src = 'images/cleardot.gif';
364
- return img;
365
- });
366
- const getCustomIconWrapper = (0, _once.default)(() => {
367
- const div = document.createElement('div');
368
- return div;
369
- });
370
- const getTooltipNodeWrapper = (0, _once.default)(() => {
371
- const div = document.createElement('div');
372
- return div;
373
- });
374
- let added = false;
375
- let currentIconUrl = null;
376
- this._stopper.onValue(() => {
377
- if (added) {
378
- getCustomIconWrapper().remove();
379
- getTooltipNodeWrapper().remove();
380
- getImgElement().remove();
381
- added = false;
382
- }
383
- });
384
- (0, _kefirCast.default)(_kefir.default, iconDescriptor).combine(this._eventStream.filter(event => event.eventName === 'viewStateChange').toProperty(() => null), opts => opts).takeUntilBy(this._stopper).onValue(opts => {
385
- if (!opts) {
386
- if (added) {
387
- getCustomIconWrapper().remove();
388
- getImgElement().remove();
389
- getTooltipNodeWrapper().remove();
390
- added = false;
507
+ return attachmentIcon;
508
+ }
509
+ getViewState() {
510
+ if (this._element.classList.contains('kQ') ||
511
+ this._element.classList.contains('kx')) {
512
+ return 'HIDDEN';
391
513
  }
392
- } else {
393
- let attachmentDiv;
394
- if (this.getViewState() === 'COLLAPSED') {
395
- attachmentDiv = (0, _querySelectorOrFail.default)(this._element, '.adf.ads td.gH span');
396
- } else {
397
- attachmentDiv = (0, _querySelectorOrFail.default)(this._element, 'td.gH div.gK span');
514
+ else if (this._element.classList.contains('kv')) {
515
+ return 'COLLAPSED';
398
516
  }
399
- const img = opts.iconHtml != null ? getCustomIconWrapper() : getImgElement();
400
- const onClick = opts.onClick;
401
- if (onClick) {
402
- img.onclick = function (event) {
403
- event.preventDefault();
404
- event.stopPropagation();
405
- onClick();
406
- };
407
- img.style.cursor = 'pointer';
408
- } else {
409
- img.onclick = null;
410
- img.style.cursor = '';
517
+ else {
518
+ return 'EXPANDED';
411
519
  }
412
- if (opts.tooltip && typeof opts.tooltip == 'object' && opts.tooltip instanceof HTMLElement) {
413
- const tooltipWrapper = getTooltipNodeWrapper();
414
- tooltipWrapper.className = 'inboxsdk__message_attachment_tooltipWrapper';
415
- tooltipWrapper.onclick = function (event) {
416
- event.stopPropagation();
417
- (0, _reemitClickEventForReact.default)(event);
418
- };
419
- tooltipWrapper.appendChild(opts.tooltip);
420
- img.onmouseenter = function (event) {
421
- event.preventDefault();
422
- event.stopPropagation();
423
- img.appendChild(tooltipWrapper);
424
- attachmentIcon.emit('tooltipShown');
425
- };
426
- img.onmouseleave = function (event) {
427
- event.preventDefault();
428
- event.stopPropagation();
429
- img.removeChild(tooltipWrapper);
430
- attachmentIcon.emit('tooltipHidden');
431
- };
432
- img.removeAttribute('data-tooltip');
433
- } else if (opts.tooltip && typeof opts.tooltip == 'string') {
434
- img.setAttribute('data-tooltip', opts.tooltip);
435
- } else {
436
- img.removeAttribute('data-tooltip');
520
+ }
521
+ hasOpenReply() {
522
+ return Boolean(this._replyElement);
523
+ }
524
+ addAttachmentCard(options) {
525
+ var gmailAttachmentCardView = new GmailAttachmentCardView(options, this._driver, this);
526
+ if (!this._gmailAttachmentAreaView) {
527
+ this._gmailAttachmentAreaView = this._getAttachmentArea();
437
528
  }
438
- img.className = opts.iconHtml != null ? `inboxsdk__message_attachment_iconWrapper ${opts.iconClass || ''}` : 'inboxsdk__message_attachment_icon ' + (opts.iconClass || '');
439
- if (opts.iconHtml != null) {
440
- if (attachmentDiv.contains(getImgElement())) {
441
- getImgElement().remove();
442
- }
443
- img.innerHTML = opts.iconHtml;
444
- } else if (currentIconUrl != opts.iconUrl) {
445
- if (attachmentDiv.contains(getCustomIconWrapper())) {
446
- getCustomIconWrapper().remove();
447
- }
448
- img.style.background = opts.iconUrl ? 'url(' + opts.iconUrl + ') no-repeat 0 0' : '';
449
- currentIconUrl = opts.iconUrl;
529
+ if (!this._gmailAttachmentAreaView) {
530
+ this._gmailAttachmentAreaView = this._createAttachmentArea();
450
531
  }
451
- if (!attachmentDiv.contains(img)) {
452
- attachmentDiv.appendChild(img);
453
- added = true;
532
+ this._gmailAttachmentAreaView.addGmailAttachmentCardView(gmailAttachmentCardView);
533
+ return gmailAttachmentCardView;
534
+ }
535
+ _setupMessageStateStream() {
536
+ var self = this;
537
+ this._eventStream.plug(makeMutationObserverStream(this._element, {
538
+ attributes: true,
539
+ attributeFilter: ['class'],
540
+ attributeOldValue: true,
541
+ })
542
+ .takeUntilBy(this._stopper)
543
+ .map(function (mutation) {
544
+ const currentClassList = mutation.target.classList;
545
+ const mutationOldValue = mutation.oldValue;
546
+ let oldValue;
547
+ let newValue;
548
+ if (mutationOldValue.indexOf('kQ') > -1 ||
549
+ mutationOldValue.indexOf('kx') > -1) {
550
+ oldValue = 'HIDDEN';
551
+ }
552
+ else if (mutationOldValue.indexOf('kv') > -1 ||
553
+ mutationOldValue.indexOf('ky') > -1) {
554
+ oldValue = 'COLLAPSED';
555
+ }
556
+ else if (mutationOldValue.indexOf('h7') > -1) {
557
+ oldValue = 'EXPANDED';
558
+ }
559
+ if (currentClassList.contains('kQ') ||
560
+ currentClassList.contains('kx')) {
561
+ newValue = 'HIDDEN';
562
+ }
563
+ else if (currentClassList.contains('kv') ||
564
+ currentClassList.contains('ky')) {
565
+ newValue = 'COLLAPSED';
566
+ }
567
+ else if (currentClassList.contains('h7')) {
568
+ newValue = 'EXPANDED';
569
+ }
570
+ return {
571
+ oldValue,
572
+ newValue,
573
+ currentClassList,
574
+ };
575
+ })
576
+ .map(function (event) {
577
+ if (event.newValue === 'EXPANDED' && event.oldValue !== 'EXPANDED') {
578
+ self._checkMessageOpenState(event.currentClassList);
579
+ }
580
+ return event;
581
+ })
582
+ .filter(function (event) {
583
+ return (event.newValue !== event.oldValue &&
584
+ !!event.oldValue &&
585
+ !!event.newValue);
586
+ })
587
+ .map(function (event) {
588
+ return {
589
+ eventName: 'viewStateChange',
590
+ oldValue: event.oldValue,
591
+ newValue: event.newValue,
592
+ };
593
+ }));
594
+ }
595
+ _processInitialState() {
596
+ this._checkMessageOpenState(this._element.classList);
597
+ }
598
+ _checkMessageOpenState(classList) {
599
+ if (!classList.contains('h7')) {
600
+ return;
454
601
  }
455
- }
456
- });
457
- return attachmentIcon;
458
- }
459
- getViewState() {
460
- if (this._element.classList.contains('kQ') || this._element.classList.contains('kx')) {
461
- return 'HIDDEN';
462
- } else if (this._element.classList.contains('kv')) {
463
- return 'COLLAPSED';
464
- } else {
465
- return 'EXPANDED';
466
- }
467
- }
468
- hasOpenReply() {
469
- return Boolean(this._replyElement);
470
- }
471
- addAttachmentCard(options) {
472
- var gmailAttachmentCardView = new _gmailAttachmentCardView.default(options, this._driver, this);
473
- if (!this._gmailAttachmentAreaView) {
474
- this._gmailAttachmentAreaView = this._getAttachmentArea();
475
- }
476
- if (!this._gmailAttachmentAreaView) {
477
- this._gmailAttachmentAreaView = this._createAttachmentArea();
478
- }
479
- this._gmailAttachmentAreaView.addGmailAttachmentCardView(gmailAttachmentCardView);
480
- return gmailAttachmentCardView;
481
- }
482
- _setupMessageStateStream() {
483
- var self = this;
484
- this._eventStream.plug((0, _makeMutationObserverStream.default)(this._element, {
485
- attributes: true,
486
- attributeFilter: ['class'],
487
- attributeOldValue: true
488
- }).takeUntilBy(this._stopper).map(function (mutation) {
489
- const currentClassList = mutation.target.classList;
490
- const mutationOldValue = mutation.oldValue;
491
- let oldValue;
492
- let newValue;
493
- if (mutationOldValue.indexOf('kQ') > -1 || mutationOldValue.indexOf('kx') > -1) {
494
- oldValue = 'HIDDEN';
495
- } else if (mutationOldValue.indexOf('kv') > -1 || mutationOldValue.indexOf('ky') > -1) {
496
- oldValue = 'COLLAPSED';
497
- } else if (mutationOldValue.indexOf('h7') > -1) {
498
- oldValue = 'EXPANDED';
499
- }
500
- if (currentClassList.contains('kQ') || currentClassList.contains('kx')) {
501
- newValue = 'HIDDEN';
502
- } else if (currentClassList.contains('kv') || currentClassList.contains('ky')) {
503
- newValue = 'COLLAPSED';
504
- } else if (currentClassList.contains('h7')) {
505
- newValue = 'EXPANDED';
506
- }
507
- return {
508
- oldValue,
509
- newValue,
510
- currentClassList
511
- };
512
- }).map(function (event) {
513
- if (event.newValue === 'EXPANDED' && event.oldValue !== 'EXPANDED') {
514
- self._checkMessageOpenState(event.currentClassList);
515
- }
516
- return event;
517
- }).filter(function (event) {
518
- return event.newValue !== event.oldValue && !!event.oldValue && !!event.newValue;
519
- }).map(function (event) {
520
- return {
521
- eventName: 'viewStateChange',
522
- oldValue: event.oldValue,
523
- newValue: event.newValue
524
- };
525
- }));
526
- }
527
- _processInitialState() {
528
- this._checkMessageOpenState(this._element.classList);
529
- }
530
- _checkMessageOpenState(classList) {
531
- if (!classList.contains('h7')) {
532
- return;
533
- }
534
- if (this._messageLoaded) {
535
- return;
536
- }
537
- let messageId;
538
- try {
539
- messageId = this.getMessageID(true);
540
- } catch (err) {
541
- this._driver.getLogger().error(err);
542
- return;
543
- }
544
- this._messageLoaded = true;
545
- try {
546
- this._driver.associateThreadAndMessageIDs(this._threadViewDriver.getThreadID(), messageId);
547
- } catch (err) {
548
- this._driver.getLogger().error(err);
549
- }
550
- this._gmailAttachmentAreaView = this._getAttachmentArea();
551
- this._eventStream.emit({
552
- type: 'internal',
553
- eventName: 'messageLoad'
554
- });
555
- this._setupReplyStream();
556
- }
557
- _setupReplyStream() {
558
- const replyContainer = this._element.querySelector('.ip');
559
- if (!replyContainer) {
560
- return;
561
- }
562
- var self = this;
563
- var currentReplyElementRemovalStream = null;
564
-
565
- // hold off on emitting the mutation for a millisecond so
566
- // that compose-view-driver-stream is listening to reply stream
567
- _kefir.default.combine([(0, _makeMutationObserverChunkedStream.default)(replyContainer, {
568
- attributes: true,
569
- attributeFilter: ['class']
570
- }), _kefir.default.later(1, null)]).merge(_kefir.default.later(1)).takeUntilBy(this._stopper).beforeEnd(() => 'END').onValue(mutation => {
571
- if (mutation !== 'END' && replyContainer.classList.contains('adB')) {
572
- if (!currentReplyElementRemovalStream) {
573
- const replyElement = replyContainer.firstElementChild;
574
- self._replyElement = replyElement;
575
- if (replyElement) {
576
- currentReplyElementRemovalStream = (0, _kefirBus.default)();
577
- self._eventStream.emit({
578
- type: 'internal',
579
- eventName: 'replyElement',
580
- change: {
581
- el: replyElement,
582
- removalStream: currentReplyElementRemovalStream
583
- }
584
- });
585
- }
602
+ if (this._messageLoaded) {
603
+ return;
604
+ }
605
+ let messageId;
606
+ try {
607
+ messageId = this.getMessageID(true);
608
+ }
609
+ catch (err) {
610
+ this._driver.getLogger().error(err);
611
+ return;
586
612
  }
587
- } else {
588
- if (currentReplyElementRemovalStream) {
589
- // Ending the currentReplyElementRemovalStream can trigger something
590
- // that triggers the mutation observer stream which will call back into
591
- // this function before we've unset currentReplyElementRemovalStream,
592
- // so we need to copy the bus to a temporary variable and unset
593
- // currentReplyElementRemovalStream first.
594
- var temp = currentReplyElementRemovalStream;
595
- currentReplyElementRemovalStream = null;
596
- temp.emit(null);
597
- temp.end();
598
- self._replyElement = null;
613
+ this._messageLoaded = true;
614
+ try {
615
+ this._driver.associateThreadAndMessageIDs(this._threadViewDriver.getThreadID(), messageId);
599
616
  }
600
- }
601
- });
602
- }
603
- _monitorEmailAddressHovering() {
604
- var self = this;
605
- this._eventStream.plug(_kefir.default.fromEvents(this._element, 'mouseover').map(e => e.target).filter(function (element) {
606
- return element && element.getAttribute('email');
607
- }).map(function (element) {
608
- let contactType = null;
609
- if (!self._element.classList.contains('h7')) {
610
- contactType = 'sender';
611
- } else {
612
- if (self._element.querySelector('h3.iw').contains(element)) {
613
- contactType = 'sender';
614
- } else {
615
- contactType = 'recipient';
617
+ catch (err) {
618
+ this._driver.getLogger().error(err);
616
619
  }
617
- }
618
- return {
619
- get contact() {
620
- return self._getUpdatedContact(_extractContactInformation(element));
621
- },
622
- contactType: contactType,
623
- eventName: 'contactHover',
624
- messageViewDriver: self
625
- };
626
- }));
627
- }
628
- _getAttachmentArea() {
629
- if (this._element.querySelector('.hq')) {
630
- return new _gmailAttachmentAreaView.default(this._element.querySelector('.hq'), this._driver, this);
631
- }
632
- return null;
633
- }
634
- _createAttachmentArea() {
635
- const gmailAttachmentAreaView = new _gmailAttachmentAreaView.default(null, this._driver, this);
636
- const beforeElement = (0, _querySelectorOrFail.default)(this._element, '.hi');
637
- const parentNode = beforeElement.parentNode;
638
- if (!parentNode) throw new Error('parentNode not found');
639
- parentNode.insertBefore(gmailAttachmentAreaView.getElement(), beforeElement);
640
- return gmailAttachmentAreaView;
641
- }
642
- _getUpdatedContact(inContact) {
643
- return (0, _getUpdatedContact.default)(inContact, this._element);
644
- }
645
- getReadyStream() {
646
- return this._readyStream;
647
- }
620
+ this._gmailAttachmentAreaView = this._getAttachmentArea();
621
+ this._eventStream.emit({
622
+ type: 'internal',
623
+ eventName: 'messageLoad',
624
+ });
625
+ this._setupReplyStream();
626
+ }
627
+ _setupReplyStream() {
628
+ const replyContainer = this._element.querySelector('.ip');
629
+ if (!replyContainer) {
630
+ return;
631
+ }
632
+ var self = this;
633
+ var currentReplyElementRemovalStream = null;
634
+ // hold off on emitting the mutation for a millisecond so
635
+ // that compose-view-driver-stream is listening to reply stream
636
+ Kefir.combine([
637
+ makeMutationObserverChunkedStream(replyContainer, {
638
+ attributes: true,
639
+ attributeFilter: ['class'],
640
+ }),
641
+ Kefir.later(1, null),
642
+ ])
643
+ .merge(Kefir.later(1, undefined))
644
+ .takeUntilBy(this._stopper)
645
+ .beforeEnd(() => 'END')
646
+ .onValue((mutation) => {
647
+ if (mutation !== 'END' && replyContainer.classList.contains('adB')) {
648
+ if (!currentReplyElementRemovalStream) {
649
+ const replyElement = replyContainer.firstElementChild;
650
+ self._replyElement = replyElement;
651
+ if (replyElement) {
652
+ currentReplyElementRemovalStream = kefirBus();
653
+ self._eventStream.emit({
654
+ type: 'internal',
655
+ eventName: 'replyElement',
656
+ change: {
657
+ el: replyElement,
658
+ removalStream: currentReplyElementRemovalStream,
659
+ },
660
+ });
661
+ }
662
+ }
663
+ }
664
+ else {
665
+ if (currentReplyElementRemovalStream) {
666
+ // Ending the currentReplyElementRemovalStream can trigger something
667
+ // that triggers the mutation observer stream which will call back into
668
+ // this function before we've unset currentReplyElementRemovalStream,
669
+ // so we need to copy the bus to a temporary variable and unset
670
+ // currentReplyElementRemovalStream first.
671
+ var temp = currentReplyElementRemovalStream;
672
+ currentReplyElementRemovalStream = null;
673
+ temp.emit(null);
674
+ temp.end();
675
+ self._replyElement = null;
676
+ }
677
+ }
678
+ });
679
+ }
680
+ _monitorEmailAddressHovering() {
681
+ var self = this;
682
+ this._eventStream.plug(Kefir.fromEvents(this._element, 'mouseover')
683
+ .map((e) => e.target)
684
+ .filter(function (element) {
685
+ return element && element.getAttribute('email');
686
+ })
687
+ .map(function (element) {
688
+ let contactType = null;
689
+ if (!self._element.classList.contains('h7')) {
690
+ contactType = 'sender';
691
+ }
692
+ else {
693
+ if (self._element.querySelector('h3.iw').contains(element)) {
694
+ contactType = 'sender';
695
+ }
696
+ else {
697
+ contactType = 'recipient';
698
+ }
699
+ }
700
+ return {
701
+ get contact() {
702
+ return self._getUpdatedContact(_extractContactInformation(element));
703
+ },
704
+ contactType: contactType,
705
+ eventName: 'contactHover',
706
+ messageViewDriver: self,
707
+ };
708
+ }));
709
+ }
710
+ _getAttachmentArea() {
711
+ if (this._element.querySelector('.hq')) {
712
+ return new GmailAttachmentAreaView(this._element.querySelector('.hq'), this._driver, this);
713
+ }
714
+ return null;
715
+ }
716
+ _createAttachmentArea() {
717
+ const gmailAttachmentAreaView = new GmailAttachmentAreaView(null, this._driver, this);
718
+ const beforeElement = querySelector(this._element, '.hi');
719
+ const parentNode = beforeElement.parentNode;
720
+ if (!parentNode)
721
+ throw new Error('parentNode not found');
722
+ parentNode.insertBefore(gmailAttachmentAreaView.getElement(), beforeElement);
723
+ return gmailAttachmentAreaView;
724
+ }
725
+ _getUpdatedContact(inContact) {
726
+ return getUpdatedContact(inContact, this._element);
727
+ }
728
+ getReadyStream() {
729
+ return this._readyStream;
730
+ }
648
731
  }
649
732
  function _extractContactInformation(span) {
650
- return {
651
- name: span.getAttribute('name'),
652
- emailAddress: span.getAttribute('email')
653
- };
733
+ return {
734
+ name: span.getAttribute('name'),
735
+ emailAddress: span.getAttribute('email'),
736
+ };
654
737
  }
655
- var _default = (0, _ud.defn)(module, GmailMessageView); // This function does not get executed. It's only checked by Flow to make sure
656
- // this class successfully implements the type interface.
657
- exports.default = _default;
658
- function __interfaceCheck() {
659
- const test = new GmailMessageView({}, {}, {});
660
- }
738
+ export default GmailMessageView;