@inboxsdk/core 0.2.28-alpha.0 → 0.2.28-alpha.1

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 (552) hide show
  1. package/inboxsdk.d.ts +1 -0
  2. package/inboxsdk.js +299 -56
  3. package/inboxsdk.js.map +1 -1
  4. package/package.json +3 -1
  5. package/pageWorld.js +46 -12
  6. package/pageWorld.js.map +1 -1
  7. package/src/build/exec.d.ts +1 -0
  8. package/src/build/exec.d.ts.map +1 -0
  9. package/src/build/spawn.d.ts +1 -0
  10. package/src/build/spawn.d.ts.map +1 -0
  11. package/src/common/ajax.d.ts +1 -0
  12. package/src/common/ajax.d.ts.map +1 -0
  13. package/src/common/cachebust-url.d.ts +1 -0
  14. package/src/common/cachebust-url.d.ts.map +1 -0
  15. package/src/common/censorHTMLstring.d.ts +1 -0
  16. package/src/common/censorHTMLstring.d.ts.map +1 -0
  17. package/src/common/censorHTMLtree.d.ts +1 -0
  18. package/src/common/censorHTMLtree.d.ts.map +1 -0
  19. package/src/common/censorJSONTree.d.ts +1 -0
  20. package/src/common/censorJSONTree.d.ts.map +1 -0
  21. package/src/common/connectivity-test.d.ts +1 -0
  22. package/src/common/connectivity-test.d.ts.map +1 -0
  23. package/src/common/defer.d.ts +1 -0
  24. package/src/common/defer.d.ts.map +1 -0
  25. package/src/common/find-parent.d.ts +1 -0
  26. package/src/common/find-parent.d.ts.map +1 -0
  27. package/src/common/get-extension-id.d.ts +1 -0
  28. package/src/common/get-extension-id.d.ts.map +1 -0
  29. package/src/common/get-or-fail.d.ts +1 -0
  30. package/src/common/get-or-fail.d.ts.map +1 -0
  31. package/src/common/get-session-id.d.ts +1 -0
  32. package/src/common/get-session-id.d.ts.map +1 -0
  33. package/src/common/get-stack-trace.d.ts +1 -0
  34. package/src/common/get-stack-trace.d.ts.map +1 -0
  35. package/src/common/html-to-text.d.ts +1 -0
  36. package/src/common/html-to-text.d.ts.map +1 -0
  37. package/src/common/isElementVisible.d.ts +1 -0
  38. package/src/common/isElementVisible.d.ts.map +1 -0
  39. package/src/common/load-script.d.ts +1 -0
  40. package/src/common/load-script.d.ts.map +1 -0
  41. package/src/common/log-error.d.ts +1 -0
  42. package/src/common/log-error.d.ts.map +1 -0
  43. package/src/common/quoted-split.d.ts +1 -0
  44. package/src/common/quoted-split.d.ts.map +1 -0
  45. package/src/common/rate-limit-queuer.d.ts +1 -0
  46. package/src/common/rate-limit-queuer.d.ts.map +1 -0
  47. package/src/common/rate-limit.d.ts +1 -0
  48. package/src/common/rate-limit.d.ts.map +1 -0
  49. package/src/common/version.d.ts +1 -0
  50. package/src/common/version.d.ts.map +1 -0
  51. package/src/inboxsdk-js/check-requirements.js +7 -0
  52. package/src/inboxsdk-js/header.js +18 -0
  53. package/src/inboxsdk-js/inboxsdk-NONREMOTE-INTEGRATED-PAGEWORLD.js +10 -0
  54. package/src/inboxsdk-js/inboxsdk-NONREMOTE.js +5 -0
  55. package/src/inboxsdk-js/inboxsdk-REMOTE.js +3 -0
  56. package/src/inboxsdk-js/inboxsdk-TEST.js +5 -0
  57. package/src/inboxsdk-js/inboxsdk.js +41 -0
  58. package/src/inboxsdk-js/loading/load-platform-implementation-DEV.js +19 -0
  59. package/src/inboxsdk-js/loading/platform-implementation-loader.d.ts +1 -0
  60. package/src/inboxsdk-js/loading/platform-implementation-loader.d.ts.map +1 -0
  61. package/src/inboxsdk.d.ts +9 -28
  62. package/src/injected-js/gmail/constants.d.ts +1 -0
  63. package/src/injected-js/gmail/constants.d.ts.map +1 -0
  64. package/src/injected-js/gmail/modify-suggestions.d.ts +1 -0
  65. package/src/injected-js/gmail/modify-suggestions.d.ts.map +1 -0
  66. package/src/injected-js/gmail/modify-suggestions.test.js +21 -0
  67. package/src/injected-js/gmail/setup-gmail-interceptor.d.ts +4 -0
  68. package/src/injected-js/gmail/setup-gmail-interceptor.js +1185 -0
  69. package/src/injected-js/gmail/setup-gmonkey-handler.d.ts +1 -0
  70. package/src/injected-js/gmail/setup-gmonkey-handler.d.ts.map +1 -0
  71. package/src/injected-js/gmail/sync-compose-processor-20220909.d.ts +1 -0
  72. package/src/injected-js/gmail/sync-compose-processor-20220909.d.ts.map +1 -0
  73. package/src/injected-js/gmail/sync-compose-processor.d.ts +1 -0
  74. package/src/injected-js/gmail/sync-compose-processor.d.ts.map +1 -0
  75. package/src/injected-js/gmail/sync-compose-request-processor.d.ts +1 -0
  76. package/src/injected-js/gmail/sync-compose-request-processor.d.ts.map +1 -0
  77. package/src/injected-js/gmail/sync-compose-request-processor.test.js +90 -0
  78. package/src/injected-js/gmail/thread-identifier/click-and-get-popup-url.js +96 -0
  79. package/src/injected-js/gmail/thread-identifier/index.js +157 -0
  80. package/src/injected-js/gmail/thread-identifier/thread-row-parser.js +72 -0
  81. package/src/injected-js/gmail/thread-identifier/thread-row-parser.test.js +57 -0
  82. package/src/injected-js/inbox/setupAjaxInterceptor.js +268 -0
  83. package/src/injected-js/inbox/setupClickAndGetNewIframeSrc.js +80 -0
  84. package/src/injected-js/inbox/setupComposeViewDraftIDFinder.js +51 -0
  85. package/src/injected-js/inbox/setupInboxFakeWindowResizeListener.js +29 -0
  86. package/src/injected-js/injected-logger.d.ts +1 -0
  87. package/src/injected-js/injected-logger.d.ts.map +1 -0
  88. package/src/injected-js/main.js +70 -0
  89. package/src/injected-js/message-metadata-holder.js +141 -0
  90. package/src/injected-js/setup-data-exposer.js +187 -0
  91. package/src/injected-js/setup-error-silencer.js +25 -0
  92. package/src/injected-js/setup-event-reemitter.js +52 -0
  93. package/src/injected-js/setupCustomViewEventAssassin.d.ts +1 -0
  94. package/src/injected-js/setupCustomViewEventAssassin.d.ts.map +1 -0
  95. package/src/injected-js/setupInboxCustomViewLinkFixer.js +31 -0
  96. package/src/injected-js/setupPushStateListener.js +16 -0
  97. package/src/injected-js/xhr-helper.js +86 -0
  98. package/src/injected-js/xhr-proxy-factory.js +739 -0
  99. package/src/injected-js/xhr-proxy-factory.test.js +1219 -0
  100. package/src/platform-implementation-js/constants/nav-item-types.d.ts +1 -0
  101. package/src/platform-implementation-js/constants/nav-item-types.d.ts.map +1 -0
  102. package/src/platform-implementation-js/constants/router.js +53 -0
  103. package/src/platform-implementation-js/constants/toolbars.js +7 -0
  104. package/src/platform-implementation-js/dom-driver/gmail/custom-style.js +22 -0
  105. package/src/platform-implementation-js/dom-driver/gmail/gmail-butter-bar-driver.js +214 -0
  106. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-app-menu-item.d.ts +5 -0
  107. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-app-menu-item.d.ts.map +1 -0
  108. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-collapsible-panel.d.ts +5 -0
  109. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-collapsible-panel.d.ts.map +1 -0
  110. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-nav-item.d.ts +3 -2
  111. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-nav-item.d.ts.map +1 -0
  112. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-support-item.d.ts +1 -0
  113. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-support-item.d.ts.map +1 -0
  114. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-toolbar-button-for-app.js +21 -0
  115. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/create-link.js +78 -0
  116. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/encodeDraftUrlId.d.ts +1 -0
  117. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/encodeDraftUrlId.d.ts.map +1 -0
  118. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-draft-id-for-message-id.js +70 -0
  119. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-native-nav-item.js +43 -0
  120. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-rfc-message-id-for-gmail-message-id.d.ts +1 -0
  121. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-rfc-message-id-for-gmail-message-id.d.ts.map +1 -0
  122. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-rfc-message-id-for-gmail-thread-id.d.ts +1 -0
  123. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-rfc-message-id-for-gmail-thread-id.d.ts.map +1 -0
  124. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-url-object.js +33 -0
  125. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/getSyncThreadForOldGmailThreadId.js +38 -0
  126. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/getSyncThreadFromSyncThreadId.js +76 -0
  127. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/gmail-load-event.js +61 -0
  128. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/goto-view.js +72 -0
  129. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/isIntegratedViewGmail.d.ts +1 -0
  130. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/isIntegratedViewGmail.d.ts.map +1 -0
  131. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/keyboard-shortcut-help-modifier.js +226 -0
  132. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/open-compose-window.js +27 -0
  133. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/open-draft-by-message-id.d.ts +1 -0
  134. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/open-draft-by-message-id.d.ts.map +1 -0
  135. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/open-draft-by-message-id.test.js +23 -0
  136. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/override-gmail-back-button.js +92 -0
  137. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/register-search-query-rewriter.js +30 -0
  138. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/register-search-suggestions-provider.js +207 -0
  139. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/setup-compose-view-driver-stream.js +162 -0
  140. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/setup-route-view-driver-stream.js +194 -0
  141. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/setup-route-view-driver-stream.test.js +233 -0
  142. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-app-id-warning.js +30 -0
  143. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-custom-route-view.js +79 -0
  144. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-custom-thread-list.js +516 -0
  145. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-custom-thread-list.test.js +404 -0
  146. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-native-route-view.js +33 -0
  147. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/suppressAddon.js +50 -0
  148. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/temporary-track-download-url-validity.js +45 -0
  149. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/thread-row-identifier.js +123 -0
  150. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/track-events.js +171 -0
  151. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/track-gmail-styles.d.ts +2 -0
  152. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/track-gmail-styles.d.ts.map +1 -0
  153. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/user-info.js +69 -0
  154. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/user-info.test.js +79 -0
  155. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver.d.ts +108 -0
  156. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver.js +1001 -0
  157. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter/get-main-content-element-changed-stream.d.ts +1 -0
  158. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter/get-main-content-element-changed-stream.d.ts.map +1 -0
  159. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter/wait-for-gmail-mode-to-settle.d.ts +1 -0
  160. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter/wait-for-gmail-mode-to-settle.d.ts.map +1 -0
  161. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter.d.ts +4 -0
  162. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter.d.ts.map +1 -0
  163. package/src/platform-implementation-js/dom-driver/gmail/gmail-page-communicator.d.ts +1 -0
  164. package/src/platform-implementation-js/dom-driver/gmail/gmail-page-communicator.d.ts.map +1 -0
  165. package/src/platform-implementation-js/dom-driver/gmail/gmail-response-processor.d.ts +1 -0
  166. package/src/platform-implementation-js/dom-driver/gmail/gmail-response-processor.d.ts.map +1 -0
  167. package/src/platform-implementation-js/dom-driver/gmail/gmail-sync-response-processor.d.ts +1 -0
  168. package/src/platform-implementation-js/dom-driver/gmail/gmail-sync-response-processor.d.ts.map +1 -0
  169. package/src/platform-implementation-js/dom-driver/gmail/is-compose-titlebar-light-color.d.ts +1 -0
  170. package/src/platform-implementation-js/dom-driver/gmail/is-compose-titlebar-light-color.d.ts.map +1 -0
  171. package/src/platform-implementation-js/dom-driver/gmail/make-xhr-interceptor.js +98 -0
  172. package/src/platform-implementation-js/dom-driver/gmail/makePageParserTree.d.ts +1 -0
  173. package/src/platform-implementation-js/dom-driver/gmail/makePageParserTree.d.ts.map +1 -0
  174. package/src/platform-implementation-js/dom-driver/gmail/pageParserOptions.d.ts +1 -0
  175. package/src/platform-implementation-js/dom-driver/gmail/pageParserOptions.d.ts.map +1 -0
  176. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-menu-item-view.d.ts +43 -0
  177. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-menu-item-view.d.ts.map +1 -0
  178. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/index.js +133 -0
  179. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/index.test.js +162 -0
  180. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-companion-global-icon-area.js +39 -0
  181. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-companion-thread-icon-area.js +47 -0
  182. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-to-icon-area.js +33 -0
  183. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/index.js +1048 -0
  184. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-toolbar-button-view/monitor-top-banner-size-and-react.js +27 -0
  185. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-toolbar-button-view.js +215 -0
  186. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-area-view.js +141 -0
  187. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-card-view.js +422 -0
  188. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-card-view.test.js +141 -0
  189. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-backdrop.js +34 -0
  190. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-collapsible-section-view.js +909 -0
  191. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-button.js +197 -0
  192. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-compose-notice.js +76 -0
  193. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-inner-sidebar.js +34 -0
  194. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-outer-sidebar.js +46 -0
  195. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-recipient-row.js +97 -0
  196. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-status-bar.d.ts +1 -0
  197. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-status-bar.d.ts.map +1 -0
  198. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-tooltip-to-button.js +125 -0
  199. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/detectClassicRecipientsArea.d.ts +1 -0
  200. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/detectClassicRecipientsArea.d.ts.map +1 -0
  201. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/ensure-app-button-toolbars-are-closed.js +22 -0
  202. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/ensure-grouping-is-open.js +29 -0
  203. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/focus.js +19 -0
  204. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/from-manager.js +82 -0
  205. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-additional-action-toolbar.js +67 -0
  206. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-address-changes-stream.js +151 -0
  207. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-address-information-extractor.d.ts +1 -0
  208. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-address-information-extractor.d.ts.map +1 -0
  209. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-body-changes-stream.js +20 -0
  210. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-formatting-area-offset-left.js +31 -0
  211. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-minimized-stream.js +30 -0
  212. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-recipients.d.ts +1 -0
  213. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-recipients.d.ts.map +1 -0
  214. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-response-type-changes-stream.js +33 -0
  215. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/gmail-compose-button-view.d.ts +1 -0
  216. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/gmail-compose-button-view.d.ts.map +1 -0
  217. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/insert-link-into-body.js +35 -0
  218. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/manage-button-grouping.js +533 -0
  219. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/monitor-selection-range.js +29 -0
  220. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/override-edit-subject.js +92 -0
  221. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/page-parser.d.ts +1 -0
  222. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/page-parser.d.ts.map +1 -0
  223. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/position-formatting-toolbar.js +28 -0
  224. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/set-recipients.d.ts +1 -0
  225. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/set-recipients.d.ts.map +1 -0
  226. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/setupLinkPopovers.d.ts +1 -0
  227. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/setupLinkPopovers.d.ts.map +1 -0
  228. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/size-fixer.js +177 -0
  229. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/update-insert-more-area-left.js +28 -0
  230. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view.d.ts +119 -0
  231. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view.js +1938 -0
  232. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view/attachment-icon.d.ts +1 -0
  233. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view/attachment-icon.d.ts.map +1 -0
  234. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view/get-updated-contact.js +85 -0
  235. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view.js +950 -0
  236. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-nav-item-view.d.ts +38 -1
  237. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-nav-item-view.d.ts.map +1 -0
  238. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-route-view/gmail-route-processor.js +125 -0
  239. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-route-view/gmail-route-view.js +601 -0
  240. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-row-list-view.js +309 -0
  241. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-support-item-view.d.ts +1 -0
  242. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-support-item-view.d.ts.map +1 -0
  243. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-row-view.js +1287 -0
  244. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view/add-icon-area.js +127 -0
  245. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view.js +744 -0
  246. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view.test.js +349 -0
  247. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-view/width-manager.js +49 -0
  248. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-view.js +893 -0
  249. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-toolbar-view.js +591 -0
  250. package/src/platform-implementation-js/dom-driver/gmail/views/native-gmail-nav-item-view.js +360 -0
  251. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/button-color-classes.d.ts +1 -0
  252. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/button-color-classes.d.ts.map +1 -0
  253. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/button-view.d.ts +1 -0
  254. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/button-view.d.ts.map +1 -0
  255. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/create-accessory-button-view.d.ts +1 -0
  256. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/create-accessory-button-view.d.ts.map +1 -0
  257. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/create-parent-accessory-button-view.d.ts +1 -0
  258. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/create-parent-accessory-button-view.d.ts.map +1 -0
  259. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/inbox-dropdown-button-view.js +32 -0
  260. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/modal-button-view.d.ts +1 -0
  261. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/modal-button-view.d.ts.map +1 -0
  262. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/more-dropdown-button-view.d.ts +1 -0
  263. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/more-dropdown-button-view.d.ts.map +1 -0
  264. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/more-parent-accessory-button-view.d.ts +1 -0
  265. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/more-parent-accessory-button-view.d.ts.map +1 -0
  266. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-action-button-view.js +57 -0
  267. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-dropdown-view.d.ts +1 -0
  268. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-dropdown-view.d.ts.map +1 -0
  269. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-label-view.js +148 -0
  270. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-modal-view-driver.js +179 -0
  271. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-mole-view-driver.js +246 -0
  272. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-tooltip-view.js +504 -0
  273. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-top-message-bar-driver.js +109 -0
  274. package/src/platform-implementation-js/dom-driver/inbox/__mocks__/getSidebarClassnames.js +9 -0
  275. package/src/platform-implementation-js/dom-driver/inbox/addNavItem.js +56 -0
  276. package/src/platform-implementation-js/dom-driver/inbox/addRecipientRow.js +73 -0
  277. package/src/platform-implementation-js/dom-driver/inbox/createLink.js +21 -0
  278. package/src/platform-implementation-js/dom-driver/inbox/createLink.test.js +30 -0
  279. package/src/platform-implementation-js/dom-driver/inbox/custom-style.js +22 -0
  280. package/src/platform-implementation-js/dom-driver/inbox/detection/appToolbarLocation/parser.js +49 -0
  281. package/src/platform-implementation-js/dom-driver/inbox/detection/attachmentCard/parser.js +33 -0
  282. package/src/platform-implementation-js/dom-driver/inbox/detection/attachmentOverlay/parser.js +85 -0
  283. package/src/platform-implementation-js/dom-driver/inbox/detection/chatSidebar/parser.js +33 -0
  284. package/src/platform-implementation-js/dom-driver/inbox/detection/compose/parser.js +220 -0
  285. package/src/platform-implementation-js/dom-driver/inbox/detection/message/parser.js +97 -0
  286. package/src/platform-implementation-js/dom-driver/inbox/detection/nativeDrawer/parser.js +30 -0
  287. package/src/platform-implementation-js/dom-driver/inbox/detection/searchBar/parser.js +28 -0
  288. package/src/platform-implementation-js/dom-driver/inbox/detection/thread/parser.js +60 -0
  289. package/src/platform-implementation-js/dom-driver/inbox/detection/thread-row/parser.js +152 -0
  290. package/src/platform-implementation-js/dom-driver/inbox/getComposeViewDriverLiveSet.js +121 -0
  291. package/src/platform-implementation-js/dom-driver/inbox/getInboxMessageIdForInboxThreadId.js +42 -0
  292. package/src/platform-implementation-js/dom-driver/inbox/getSidebarClassnames.js +171 -0
  293. package/src/platform-implementation-js/dom-driver/inbox/getSidebarClassnames.test.js +74 -0
  294. package/src/platform-implementation-js/dom-driver/inbox/gotoView.js +43 -0
  295. package/src/platform-implementation-js/dom-driver/inbox/gotoView.test.js +29 -0
  296. package/src/platform-implementation-js/dom-driver/inbox/inbox-butter-bar-driver.js +156 -0
  297. package/src/platform-implementation-js/dom-driver/inbox/inbox-driver.js +1164 -0
  298. package/src/platform-implementation-js/dom-driver/inbox/inbox-page-communicator.js +75 -0
  299. package/src/platform-implementation-js/dom-driver/inbox/inboxResponseProcessor.js +15 -0
  300. package/src/platform-implementation-js/dom-driver/inbox/inboxResponseProcessor.test.js +25 -0
  301. package/src/platform-implementation-js/dom-driver/inbox/makePageParserTree.js +42 -0
  302. package/src/platform-implementation-js/dom-driver/inbox/pageParserOptions.js +452 -0
  303. package/src/platform-implementation-js/dom-driver/inbox/registerSearchSuggestionsProvider.js +317 -0
  304. package/src/platform-implementation-js/dom-driver/inbox/setupCustomAutocompleteSelectionHandling.js +251 -0
  305. package/src/platform-implementation-js/dom-driver/inbox/setupRouteViewDriverStream.js +76 -0
  306. package/src/platform-implementation-js/dom-driver/inbox/setupRouteViewDriverStream.test.js +94 -0
  307. package/src/platform-implementation-js/dom-driver/inbox/views/InboxLabelView.js +103 -0
  308. package/src/platform-implementation-js/dom-driver/inbox/views/InboxMoleViewDriver.js +400 -0
  309. package/src/platform-implementation-js/dom-driver/inbox/views/InboxToolbarButtonView.js +105 -0
  310. package/src/platform-implementation-js/dom-driver/inbox/views/InboxToolbarView.js +72 -0
  311. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-app-sidebar-view.js +362 -0
  312. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-app-toolbar-button-view.js +236 -0
  313. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-app-toolbar-tooltip-view.js +75 -0
  314. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-attachment-card-view.js +252 -0
  315. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-attachment-overlay-view.js +108 -0
  316. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-backdrop.js +74 -0
  317. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-chat-sidebar-view.js +55 -0
  318. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-compose-button-view.js +144 -0
  319. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-compose-view.js +1027 -0
  320. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-custom-route-view.js +97 -0
  321. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-custom-route-view.test.js +43 -0
  322. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-drawer-view.js +386 -0
  323. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-dropdown-view.js +26 -0
  324. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-dummy-route-view.js +82 -0
  325. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-message-view.js +348 -0
  326. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-modal-view.js +153 -0
  327. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-route-view.js +123 -0
  328. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-thread-row-view.js +413 -0
  329. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-thread-view.js +308 -0
  330. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-thread-view.test.js +193 -0
  331. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-tooltip-view.js +143 -0
  332. package/src/platform-implementation-js/dom-driver/inbox/views/inboxNavItemView.js +452 -0
  333. package/src/platform-implementation-js/dom-driver/inbox/waitForAnimationClickBlockerGone.js +40 -0
  334. package/src/platform-implementation-js/driver-common/compose/getDiscardStream.js +52 -0
  335. package/src/platform-implementation-js/driver-common/compose/getPresendingStream.js +73 -0
  336. package/src/platform-implementation-js/driver-common/getAccountUrlPart.d.ts +1 -0
  337. package/src/platform-implementation-js/driver-common/getAccountUrlPart.d.ts.map +1 -0
  338. package/src/platform-implementation-js/driver-common/getGmailMessageIdForSyncMessageId.js +30 -0
  339. package/src/platform-implementation-js/driver-common/getGmailThreadIdForRfcMessageId.js +61 -0
  340. package/src/platform-implementation-js/driver-common/getOriginalMessagePage.d.ts +1 -0
  341. package/src/platform-implementation-js/driver-common/getOriginalMessagePage.d.ts.map +1 -0
  342. package/src/platform-implementation-js/driver-common/getRfcMessageIdForSyncMessageId.js +32 -0
  343. package/src/platform-implementation-js/driver-common/getSyncThreadsForSearch.d.ts +1 -0
  344. package/src/platform-implementation-js/driver-common/getSyncThreadsForSearch.d.ts.map +1 -0
  345. package/src/platform-implementation-js/driver-common/getThreadIdFromMessageId.js +21 -0
  346. package/src/platform-implementation-js/driver-common/gmailAjax.d.ts +1 -0
  347. package/src/platform-implementation-js/driver-common/gmailAjax.d.ts.map +1 -0
  348. package/src/platform-implementation-js/driver-common/inboxAjax.js +8 -0
  349. package/src/platform-implementation-js/driver-common/render-custom-icon.d.ts +1 -0
  350. package/src/platform-implementation-js/driver-common/render-custom-icon.d.ts.map +1 -0
  351. package/src/platform-implementation-js/driver-common/requestGmailThread.js +35 -0
  352. package/src/platform-implementation-js/driver-common/sidebar/AppSidebar.js +408 -0
  353. package/src/platform-implementation-js/driver-common/sidebar/ContentPanelViewDriver.js +197 -0
  354. package/src/platform-implementation-js/driver-common/update-icon.d.ts +1 -0
  355. package/src/platform-implementation-js/driver-common/update-icon.d.ts.map +1 -0
  356. package/src/platform-implementation-js/driver-interfaces/compose-view-driver.d.ts +133 -0
  357. package/src/platform-implementation-js/driver-interfaces/compose-view-driver.js +114 -0
  358. package/src/platform-implementation-js/driver-interfaces/driver.d.ts +142 -0
  359. package/src/platform-implementation-js/driver-interfaces/driver.js +131 -0
  360. package/src/platform-implementation-js/driver-interfaces/message-view-driver.js +49 -0
  361. package/src/platform-implementation-js/driver-interfaces/mole-view-driver.js +29 -0
  362. package/src/platform-implementation-js/driver-interfaces/route-view-driver.js +32 -0
  363. package/src/platform-implementation-js/driver-interfaces/thread-row-view-driver.js +11 -0
  364. package/src/platform-implementation-js/lib/ErrorCollector.d.ts +1 -0
  365. package/src/platform-implementation-js/lib/ErrorCollector.d.ts.map +1 -0
  366. package/src/platform-implementation-js/lib/Membrane.d.ts +1 -0
  367. package/src/platform-implementation-js/lib/Membrane.d.ts.map +1 -0
  368. package/src/platform-implementation-js/lib/ScrollableContainByScreen.d.ts +1 -0
  369. package/src/platform-implementation-js/lib/ScrollableContainByScreen.d.ts.map +1 -0
  370. package/src/platform-implementation-js/lib/array-to-lifetimes.js +67 -0
  371. package/src/platform-implementation-js/lib/array-to-lifetimes.test.js +171 -0
  372. package/src/platform-implementation-js/lib/attemptWithRetries.d.ts +1 -0
  373. package/src/platform-implementation-js/lib/attemptWithRetries.d.ts.map +1 -0
  374. package/src/platform-implementation-js/lib/common-page-communicator.d.ts +1 -0
  375. package/src/platform-implementation-js/lib/common-page-communicator.d.ts.map +1 -0
  376. package/src/platform-implementation-js/lib/copyAndValidateAutocompleteResults.js +55 -0
  377. package/src/platform-implementation-js/lib/css-selector-escape.js +8 -0
  378. package/src/platform-implementation-js/lib/delay-asap.d.ts +1 -0
  379. package/src/platform-implementation-js/lib/delay-asap.d.ts.map +1 -0
  380. package/src/platform-implementation-js/lib/delay-idle.d.ts +1 -0
  381. package/src/platform-implementation-js/lib/delay-idle.d.ts.map +1 -0
  382. package/src/platform-implementation-js/lib/dom/block-and-reemit-keyboard-events.d.ts +1 -0
  383. package/src/platform-implementation-js/lib/dom/block-and-reemit-keyboard-events.d.ts.map +1 -0
  384. package/src/platform-implementation-js/lib/dom/element-view-mapper.js +20 -0
  385. package/src/platform-implementation-js/lib/dom/generic-button-view.d.ts +1 -0
  386. package/src/platform-implementation-js/lib/dom/generic-button-view.d.ts.map +1 -0
  387. package/src/platform-implementation-js/lib/dom/get-insert-before-element.d.ts +1 -0
  388. package/src/platform-implementation-js/lib/dom/get-insert-before-element.d.ts.map +1 -0
  389. package/src/platform-implementation-js/lib/dom/get-selection.js +61 -0
  390. package/src/platform-implementation-js/lib/dom/insert-element-in-order.d.ts +1 -0
  391. package/src/platform-implementation-js/lib/dom/insert-element-in-order.d.ts.map +1 -0
  392. package/src/platform-implementation-js/lib/dom/insert-html-at-cursor.js +113 -0
  393. package/src/platform-implementation-js/lib/dom/is-node-in-range.js +19 -0
  394. package/src/platform-implementation-js/lib/dom/keyboard-shortcut-stream.d.ts +1 -0
  395. package/src/platform-implementation-js/lib/dom/keyboard-shortcut-stream.d.ts.map +1 -0
  396. package/src/platform-implementation-js/lib/dom/make-element-child-stream.d.ts +1 -0
  397. package/src/platform-implementation-js/lib/dom/make-element-child-stream.d.ts.map +1 -0
  398. package/src/platform-implementation-js/lib/dom/make-element-stream-merger.d.ts +1 -0
  399. package/src/platform-implementation-js/lib/dom/make-element-stream-merger.d.ts.map +1 -0
  400. package/src/platform-implementation-js/lib/dom/make-element-view-stream.d.ts +1 -0
  401. package/src/platform-implementation-js/lib/dom/make-element-view-stream.d.ts.map +1 -0
  402. package/src/platform-implementation-js/lib/dom/make-mutation-observer-chunked-stream.d.ts +1 -0
  403. package/src/platform-implementation-js/lib/dom/make-mutation-observer-chunked-stream.d.ts.map +1 -0
  404. package/src/platform-implementation-js/lib/dom/make-mutation-observer-stream.d.ts +1 -0
  405. package/src/platform-implementation-js/lib/dom/make-mutation-observer-stream.d.ts.map +1 -0
  406. package/src/platform-implementation-js/lib/dom/on-mouse-down-and-up.js +19 -0
  407. package/src/platform-implementation-js/lib/dom/outsideClicksAndEscape.d.ts +1 -0
  408. package/src/platform-implementation-js/lib/dom/outsideClicksAndEscape.d.ts.map +1 -0
  409. package/src/platform-implementation-js/lib/dom/parentNodes.d.ts +1 -0
  410. package/src/platform-implementation-js/lib/dom/parentNodes.d.ts.map +1 -0
  411. package/src/platform-implementation-js/lib/dom/querySelectorOne.js +16 -0
  412. package/src/platform-implementation-js/lib/dom/querySelectorOrFail.d.ts +1 -0
  413. package/src/platform-implementation-js/lib/dom/querySelectorOrFail.d.ts.map +1 -0
  414. package/src/platform-implementation-js/lib/dom/reemitClickEventForReact.d.ts +1 -0
  415. package/src/platform-implementation-js/lib/dom/reemitClickEventForReact.d.ts.map +1 -0
  416. package/src/platform-implementation-js/lib/dom/set-css.js +21 -0
  417. package/src/platform-implementation-js/lib/dom/set-value-and-dispatch-event.js +14 -0
  418. package/src/platform-implementation-js/lib/dom/simulate-drag-and-drop.js +98 -0
  419. package/src/platform-implementation-js/lib/dom/simulate-key.d.ts +1 -0
  420. package/src/platform-implementation-js/lib/dom/simulate-key.d.ts.map +1 -0
  421. package/src/platform-implementation-js/lib/dom/simulate-mouse-event.d.ts +1 -0
  422. package/src/platform-implementation-js/lib/dom/simulate-mouse-event.d.ts.map +1 -0
  423. package/src/platform-implementation-js/lib/dom/trigger-relay-event.d.ts +1 -0
  424. package/src/platform-implementation-js/lib/dom/trigger-relay-event.d.ts.map +1 -0
  425. package/src/platform-implementation-js/lib/extract-contact-from-email-contact-string.d.ts +1 -0
  426. package/src/platform-implementation-js/lib/extract-contact-from-email-contact-string.d.ts.map +1 -0
  427. package/src/platform-implementation-js/lib/extract-contact-from-email-contact-string.test.js +42 -0
  428. package/src/platform-implementation-js/lib/fake-window-resize.d.ts +1 -0
  429. package/src/platform-implementation-js/lib/fake-window-resize.d.ts.map +1 -0
  430. package/src/platform-implementation-js/lib/from-event-target-capture.d.ts +1 -0
  431. package/src/platform-implementation-js/lib/from-event-target-capture.d.ts.map +1 -0
  432. package/src/platform-implementation-js/lib/fromEventsWithOptions.d.ts +1 -0
  433. package/src/platform-implementation-js/lib/fromEventsWithOptions.d.ts.map +1 -0
  434. package/src/platform-implementation-js/lib/handle-compose-link-chips.js +179 -0
  435. package/src/platform-implementation-js/lib/handler-registry.d.ts +1 -0
  436. package/src/platform-implementation-js/lib/handler-registry.d.ts.map +1 -0
  437. package/src/platform-implementation-js/lib/idMap.d.ts +1 -0
  438. package/src/platform-implementation-js/lib/idMap.d.ts.map +1 -0
  439. package/src/platform-implementation-js/lib/imageRequest.d.ts +1 -0
  440. package/src/platform-implementation-js/lib/imageRequest.d.ts.map +1 -0
  441. package/src/platform-implementation-js/lib/incrementName.d.ts +1 -0
  442. package/src/platform-implementation-js/lib/incrementName.d.ts.map +1 -0
  443. package/src/platform-implementation-js/lib/inject-script-EMBEDDED.d.ts +1 -0
  444. package/src/platform-implementation-js/lib/inject-script-EMBEDDED.d.ts.map +1 -0
  445. package/src/platform-implementation-js/lib/inject-script.d.ts +1 -0
  446. package/src/platform-implementation-js/lib/inject-script.d.ts.map +1 -0
  447. package/src/platform-implementation-js/lib/insert-link-chip-into-body.js +66 -0
  448. package/src/platform-implementation-js/lib/is-valid-app-id.d.ts +1 -0
  449. package/src/platform-implementation-js/lib/is-valid-app-id.d.ts.map +1 -0
  450. package/src/platform-implementation-js/lib/is-valid-email.d.ts +1 -0
  451. package/src/platform-implementation-js/lib/is-valid-email.d.ts.map +1 -0
  452. package/src/platform-implementation-js/lib/isNotNil.d.ts +1 -0
  453. package/src/platform-implementation-js/lib/isNotNil.d.ts.map +1 -0
  454. package/src/platform-implementation-js/lib/isStreakAppId.d.ts +1 -0
  455. package/src/platform-implementation-js/lib/isStreakAppId.d.ts.map +1 -0
  456. package/src/platform-implementation-js/lib/logger.d.ts +1 -0
  457. package/src/platform-implementation-js/lib/logger.d.ts.map +1 -0
  458. package/src/platform-implementation-js/lib/make-revocable-function.js +40 -0
  459. package/src/platform-implementation-js/lib/make-revocable-function.test.js +63 -0
  460. package/src/platform-implementation-js/lib/parseParamsFromRouteID.js +20 -0
  461. package/src/platform-implementation-js/lib/parseParamsFromRouteID.test.js +28 -0
  462. package/src/platform-implementation-js/lib/persistent-queue.d.ts +1 -0
  463. package/src/platform-implementation-js/lib/persistent-queue.d.ts.map +1 -0
  464. package/src/platform-implementation-js/lib/populateRouteID.js +23 -0
  465. package/src/platform-implementation-js/lib/populateRouteID.test.js +31 -0
  466. package/src/platform-implementation-js/lib/react/ElementContainer.js +35 -0
  467. package/src/platform-implementation-js/lib/rewriteCssWithIdMap.js +10 -0
  468. package/src/platform-implementation-js/lib/rewriteCssWithIdMap.test.js +50 -0
  469. package/src/platform-implementation-js/lib/routeIDmatchesHash.js +20 -0
  470. package/src/platform-implementation-js/lib/routeIDmatchesHash.test.js +23 -0
  471. package/src/platform-implementation-js/lib/safe-event-emitter.d.ts +1 -0
  472. package/src/platform-implementation-js/lib/safe-event-emitter.d.ts.map +1 -0
  473. package/src/platform-implementation-js/lib/shared-style.js +22 -0
  474. package/src/platform-implementation-js/lib/stopper-pool.d.ts +1 -0
  475. package/src/platform-implementation-js/lib/stopper-pool.d.ts.map +1 -0
  476. package/src/platform-implementation-js/lib/stream-wait-for.d.ts +1 -0
  477. package/src/platform-implementation-js/lib/stream-wait-for.d.ts.map +1 -0
  478. package/src/platform-implementation-js/lib/toItemWithLifetimeStream.d.ts +7 -0
  479. package/src/platform-implementation-js/lib/toItemWithLifetimeStream.js +18 -0
  480. package/src/platform-implementation-js/lib/toLiveSet.js +31 -0
  481. package/src/platform-implementation-js/lib/wait-for.d.ts +2 -1
  482. package/src/platform-implementation-js/lib/wait-for.d.ts.map +1 -0
  483. package/src/platform-implementation-js/lib/waitForAsync.d.ts +1 -0
  484. package/src/platform-implementation-js/lib/waitForAsync.d.ts.map +1 -0
  485. package/src/platform-implementation-js/main-INTEGRATED-PAGEWORLD.js +8 -0
  486. package/src/platform-implementation-js/main.js +83 -0
  487. package/src/platform-implementation-js/namespaces/app-menu.d.ts +38 -0
  488. package/src/platform-implementation-js/namespaces/app-menu.d.ts.map +1 -0
  489. package/src/platform-implementation-js/namespaces/butter-bar.d.ts +1 -0
  490. package/src/platform-implementation-js/namespaces/butter-bar.d.ts.map +1 -0
  491. package/src/platform-implementation-js/namespaces/compose.js +88 -0
  492. package/src/platform-implementation-js/namespaces/conversations.js +156 -0
  493. package/src/platform-implementation-js/namespaces/global.js +51 -0
  494. package/src/platform-implementation-js/namespaces/keyboard.js +48 -0
  495. package/src/platform-implementation-js/namespaces/lists.js +58 -0
  496. package/src/platform-implementation-js/namespaces/modal.js +45 -0
  497. package/src/platform-implementation-js/namespaces/nav-menu.js +55 -0
  498. package/src/platform-implementation-js/namespaces/router.js +217 -0
  499. package/src/platform-implementation-js/namespaces/search.js +36 -0
  500. package/src/platform-implementation-js/namespaces/toolbars.js +195 -0
  501. package/src/platform-implementation-js/namespaces/user.js +67 -0
  502. package/src/platform-implementation-js/namespaces/widgets.js +89 -0
  503. package/src/platform-implementation-js/platform-implementation.d.ts +133 -0
  504. package/src/platform-implementation-js/platform-implementation.js +309 -0
  505. package/src/platform-implementation-js/views/SimpleElementView.d.ts +1 -0
  506. package/src/platform-implementation-js/views/SimpleElementView.d.ts.map +1 -0
  507. package/src/platform-implementation-js/views/app-menu-item-view.d.ts +23 -0
  508. package/src/platform-implementation-js/views/app-menu-item-view.d.ts.map +1 -0
  509. package/src/platform-implementation-js/views/app-toolbar-button-view.js +73 -0
  510. package/src/platform-implementation-js/views/collapsible-panel-view.d.ts +50 -0
  511. package/src/platform-implementation-js/views/collapsible-panel-view.d.ts.map +1 -0
  512. package/src/platform-implementation-js/views/collapsible-section-view.js +88 -0
  513. package/src/platform-implementation-js/views/compose-button-view.d.ts +1 -0
  514. package/src/platform-implementation-js/views/compose-button-view.d.ts.map +1 -0
  515. package/src/platform-implementation-js/views/compose-view.d.ts +1 -0
  516. package/src/platform-implementation-js/views/compose-view.d.ts.map +1 -0
  517. package/src/platform-implementation-js/views/content-panel-view.js +53 -0
  518. package/src/platform-implementation-js/views/conversations/attachment-card-view.js +69 -0
  519. package/src/platform-implementation-js/views/conversations/custom-message-view.js +165 -0
  520. package/src/platform-implementation-js/views/conversations/message-view.js +288 -0
  521. package/src/platform-implementation-js/views/conversations/thread-view.js +156 -0
  522. package/src/platform-implementation-js/views/keyboard-shortcut-handle.d.ts +1 -0
  523. package/src/platform-implementation-js/views/keyboard-shortcut-handle.d.ts.map +1 -0
  524. package/src/platform-implementation-js/views/native-nav-item-view.js +98 -0
  525. package/src/platform-implementation-js/views/nav-item-view.d.ts +24 -0
  526. package/src/platform-implementation-js/views/nav-item-view.js +191 -0
  527. package/src/platform-implementation-js/views/route-view/custom-route-view.js +32 -0
  528. package/src/platform-implementation-js/views/route-view/dummy-route-view-driver.js +40 -0
  529. package/src/platform-implementation-js/views/route-view/list-route-view.js +78 -0
  530. package/src/platform-implementation-js/views/route-view/route-view.js +68 -0
  531. package/src/platform-implementation-js/views/section-view.js +77 -0
  532. package/src/platform-implementation-js/views/thread-row-view.js +117 -0
  533. package/src/platform-implementation-js/widgets/buttons/basic-button-view-controller.d.ts +1 -0
  534. package/src/platform-implementation-js/widgets/buttons/basic-button-view-controller.d.ts.map +1 -0
  535. package/src/platform-implementation-js/widgets/buttons/dropdown-button-view-controller.d.ts +1 -0
  536. package/src/platform-implementation-js/widgets/buttons/dropdown-button-view-controller.d.ts.map +1 -0
  537. package/src/platform-implementation-js/widgets/buttons/dropdown-view.d.ts +1 -0
  538. package/src/platform-implementation-js/widgets/buttons/dropdown-view.d.ts.map +1 -0
  539. package/src/platform-implementation-js/widgets/drawer-view.js +61 -0
  540. package/src/platform-implementation-js/widgets/modal-view.js +134 -0
  541. package/src/platform-implementation-js/widgets/mole-view.js +47 -0
  542. package/src/platform-implementation-js/widgets/top-message-bar-view.js +20 -0
  543. package/src/types/combokeys-capture.d.ts +1 -0
  544. package/src/types/gulp-add-src.d.ts +7 -0
  545. package/src/types/gulp-dest-atomic.d.ts +4 -0
  546. package/src/types/gulp-streamify.d.ts +1 -0
  547. package/src/types/gulp-terser.d.ts +4 -0
  548. package/src/types/jest-puppeteer.d.ts +11 -0
  549. package/src/types/notp.d.ts +8 -0
  550. package/src/types/sha.d.ts +36 -0
  551. package/src/types/stdio.d.ts +6 -0
  552. package/src/types/thirty-two.d.ts +6 -0
@@ -0,0 +1,422 @@
1
+ /* @flow */
2
+
3
+ import find from 'lodash/find';
4
+ import Kefir from 'kefir';
5
+ import kefirStopper from 'kefir-stopper';
6
+ import util from 'util';
7
+ import autoHtml from 'auto-html';
8
+ import { defn } from 'ud';
9
+ import type GmailDriver from '../gmail-driver';
10
+
11
+ import type GmailMessageView from './gmail-message-view';
12
+ import fromEventTargetCapture from '../../../lib/from-event-target-capture';
13
+ import querySelector from '../../../lib/dom/querySelectorOrFail';
14
+ import ButtonView from '../widgets/buttons/button-view';
15
+ import BasicButtonViewController from '../../../widgets/buttons/basic-button-view-controller';
16
+
17
+ import { simulateClick } from '../../../lib/dom/simulate-mouse-event';
18
+ import waitFor from '../../../lib/wait-for';
19
+ import streamWaitFor from '../../../lib/stream-wait-for';
20
+
21
+ class GmailAttachmentCardView {
22
+ _element: HTMLElement;
23
+ _driver: GmailDriver;
24
+ _messageViewDriver: ?GmailMessageView;
25
+ _cachedType: any;
26
+ _stopper: Kefir.Observable<null> & { destroy(): void } = kefirStopper();
27
+ _previewClicks = Kefir.pool();
28
+
29
+ constructor(
30
+ options: Object,
31
+ driver: GmailDriver,
32
+ messageViewDriver: ?GmailMessageView
33
+ ) {
34
+ this._driver = driver;
35
+ this._messageViewDriver = messageViewDriver;
36
+
37
+ if (options.element) {
38
+ this._element = options.element;
39
+ } else {
40
+ this._createNewElement(options);
41
+ }
42
+ }
43
+
44
+ destroy() {
45
+ this._stopper.destroy();
46
+ }
47
+
48
+ getElement(): HTMLElement {
49
+ return this._element;
50
+ }
51
+
52
+ getMessageViewDriver() {
53
+ return this._messageViewDriver;
54
+ }
55
+
56
+ getStopper(): Kefir.Observable<null> {
57
+ return this._stopper;
58
+ }
59
+
60
+ getPreviewClicks(): Kefir.Observable<Event> {
61
+ return this._previewClicks.takeUntilBy(this._stopper);
62
+ }
63
+
64
+ _isStandardAttachment(): boolean {
65
+ return this.getAttachmentType() === 'FILE';
66
+ }
67
+
68
+ getAttachmentType(): string {
69
+ if (this._cachedType) {
70
+ return this._cachedType;
71
+ }
72
+ const type = this._readAttachmentType();
73
+ if (type !== 'UNLOADED') {
74
+ this._cachedType = type;
75
+ }
76
+ return type;
77
+ }
78
+
79
+ _readAttachmentType(): string {
80
+ if (this._element.classList.contains('inboxsdk__attachmentCard')) {
81
+ return 'CUSTOM';
82
+ }
83
+ // FILE attachment cards are never in unloaded state.
84
+ if (
85
+ this._element.children.length === 1 &&
86
+ this._element.children[0].children.length === 0
87
+ ) {
88
+ return 'UNLOADED';
89
+ }
90
+ const link = this._getDownloadLink();
91
+ if (!link || link.match(/^https?:\/\/mail\.google\.com\//)) {
92
+ // Only files and unloaded ever lack a link.
93
+ return 'FILE';
94
+ }
95
+ if (link.match(/^https?:\/\/([^/]*\.)?google(usercontent)?\.com\//)) {
96
+ return 'DRIVE';
97
+ }
98
+ return 'UNKNOWN';
99
+ }
100
+
101
+ addButton(options: Object) {
102
+ var buttonView = new ButtonView({
103
+ iconUrl: options.iconUrl,
104
+ tooltip: options.tooltip,
105
+ });
106
+
107
+ var basicButtonViewController = new BasicButtonViewController({
108
+ activateFunction: () => {
109
+ if (options.onClick) {
110
+ options.onClick({
111
+ getDownloadURL: () => this.getDownloadURL(),
112
+ });
113
+ }
114
+ },
115
+ buttonView: buttonView,
116
+ });
117
+
118
+ this._addButton(buttonView);
119
+ }
120
+
121
+ getTitle(): string {
122
+ const title = this._element.querySelector('span .aV3');
123
+ return title ? title.textContent : '';
124
+ }
125
+
126
+ _getDownloadLink(): ?string {
127
+ const firstChild: ?HTMLAnchorElement = (this._element
128
+ .firstElementChild: any);
129
+ if (!firstChild) throw new Error('Failed to find link');
130
+ if (firstChild.tagName !== 'A' || !firstChild.href) {
131
+ const download_url = this._element.getAttribute('download_url');
132
+ if (download_url) {
133
+ const m = /:(https:\/\/[^:]+)/.exec(download_url);
134
+ return m ? m[1] : null;
135
+ }
136
+ } else {
137
+ const firstChildHref = firstChild.href;
138
+ if (firstChildHref) {
139
+ return firstChildHref.replace(
140
+ /([?&])disp=inline(?=&|$)/,
141
+ '$1disp=safe'
142
+ );
143
+ }
144
+ return firstChildHref;
145
+ }
146
+ }
147
+
148
+ // Resolves the short-lived cookie-less download URL
149
+ async getDownloadURL(): Promise<?string> {
150
+ try {
151
+ if (this._isStandardAttachment()) {
152
+ const downloadUrl = await waitFor(() => this._getDownloadLink());
153
+ if (!downloadUrl) return null;
154
+ const finalUrl: string = await this._driver.resolveUrlRedirects(
155
+ downloadUrl
156
+ );
157
+ if (
158
+ !/^https:\/\/mail-attachment\.googleusercontent\.com\/attachment\//.test(
159
+ finalUrl
160
+ )
161
+ ) {
162
+ console.error('getDownloadURL returned unexpected url', finalUrl); //eslint-disable-line
163
+ const err = new Error('getDownloadURL returned unexpected url');
164
+ this._driver.getLogger().error(err, {
165
+ finalUrlCensored: finalUrl.replace(/\?[^/]+$/, '?[...]'),
166
+ });
167
+ if (/^https:\/\/mail\.google\.com\//.test(finalUrl)) {
168
+ // This URL definitely isn't right: these URLs generally require
169
+ // authentication and shouldn't be returned by getDownloadURL.
170
+ throw err;
171
+ }
172
+ // Otherwise, don't throw; only log. Maybe Gmail has changed the URL
173
+ // structure and things will just work.
174
+ }
175
+ return finalUrl;
176
+ } else {
177
+ const downloadButton = this._element.querySelector(
178
+ '[data-inboxsdk-download-url]'
179
+ );
180
+ return downloadButton
181
+ ? downloadButton.getAttribute('data-inboxsdk-download-url')
182
+ : null;
183
+ }
184
+ } catch (err) {
185
+ this._driver.getLogger().error(err);
186
+ throw err;
187
+ }
188
+ }
189
+
190
+ _extractFileNameFromElement(): string {
191
+ return querySelector(this._element, '.aQA > span').textContent;
192
+ }
193
+
194
+ _createNewElement(options: Object) {
195
+ this._element = document.createElement('span');
196
+ this._element.classList.add('aZo');
197
+ this._element.classList.add('inboxsdk__attachmentCard');
198
+
199
+ var htmlArray = [
200
+ autoHtml`
201
+ <a target="_blank" role="link" class="aQy e" href="">
202
+ <div aria-hidden="true">
203
+ <div class="aSG"></div>
204
+ <div class="aVY aZn">
205
+ <div class="aZm"></div>
206
+ </div>
207
+ <div class="aSH">`,
208
+ ];
209
+
210
+ if (options.iconThumbnailUrl) {
211
+ htmlArray = htmlArray.concat([
212
+ autoHtml`
213
+ <div class="aYv">
214
+ <img class="aZG aYw" src="${options.iconThumbnailUrl}">
215
+ </div>`,
216
+ ]);
217
+ } else {
218
+ htmlArray = htmlArray.concat([
219
+ autoHtml`
220
+ <img class="aQG aYB inboxsdk__attachmentCard_previewThumbnailUrl"
221
+ src="${options.previewThumbnailUrl}">`,
222
+ ]);
223
+ }
224
+
225
+ htmlArray = htmlArray.concat([
226
+ autoHtml`
227
+ <div class="aYy">
228
+ <div class="aYA">
229
+ <img class="aSM" src="${options.fileIconImageUrl}">
230
+ </div>
231
+ <div class="aYz">
232
+ <div class="a12">
233
+ <div class="aQA">
234
+ <span class="aV3 a6U"></span>
235
+ </div>
236
+ <div class="aYp">
237
+ <span class="SaH2Ve"></span>
238
+ </div>
239
+ </div>
240
+ </div>
241
+ </div>
242
+ </div>
243
+ <div class="aSI">
244
+ <div class="aSJ"></div>
245
+ </div>
246
+ </div>
247
+ </a>
248
+ <div class="aQw"></div>`,
249
+ ]);
250
+
251
+ this._element.innerHTML = htmlArray.join('');
252
+
253
+ (this._element.children[0]: any).href = options.previewUrl;
254
+
255
+ if (options.mimeType && options.mimeType.split('/')[0] === 'image') {
256
+ this._element.children[0].classList.add('aZI');
257
+ }
258
+
259
+ querySelector(this._element, 'span .aV3').textContent = options.title;
260
+ querySelector(this._element, 'div.aYp > span').textContent =
261
+ options.description || '';
262
+ querySelector(this._element, 'div.aSJ').style.borderColor =
263
+ options.foldColor;
264
+
265
+ this._addHoverEvents();
266
+
267
+ if (options.buttons) {
268
+ const downloadButton = find(options.buttons, function (button) {
269
+ return button.downloadUrl;
270
+ });
271
+
272
+ if (downloadButton) {
273
+ this._addDownloadButton(downloadButton);
274
+ }
275
+
276
+ this._addMoreButtons(options.buttons);
277
+ }
278
+
279
+ var self = this;
280
+ // :any to work around https://github.com/facebook/flow/issues/1155
281
+ this._previewClicks.plug(
282
+ Kefir.fromEvents(this._element, 'click').map((event) => ({
283
+ preventDefault: () => event.preventDefault(),
284
+ }))
285
+ );
286
+
287
+ if (options.previewThumbnailUrl && options.failoverPreviewIconUrl) {
288
+ const previewThumbnailUrlImage = querySelector(
289
+ this._element,
290
+ '.inboxsdk__attachmentCard_previewThumbnailUrl'
291
+ );
292
+ previewThumbnailUrlImage.onerror = (e) => {
293
+ var iconDiv = document.createElement('div');
294
+ iconDiv.classList.add('aYv');
295
+ iconDiv.innerHTML =
296
+ '<img class="aZG aYw" src="' + options.failoverPreviewIconUrl + '">';
297
+ const parent = previewThumbnailUrlImage.parentElement;
298
+ if (!parent) throw new Error('Could not find parent element');
299
+ parent.insertBefore(
300
+ iconDiv,
301
+ previewThumbnailUrlImage.nextElementSibling
302
+ );
303
+
304
+ previewThumbnailUrlImage.remove();
305
+ };
306
+ }
307
+ }
308
+
309
+ _addHoverEvents() {
310
+ Kefir.merge([
311
+ Kefir.fromEvents(this._element, 'mouseenter'),
312
+ fromEventTargetCapture(this._element, 'focus'),
313
+ ]).onValue(() => {
314
+ this._element.classList.add('aZp');
315
+ });
316
+
317
+ Kefir.merge([
318
+ Kefir.fromEvents(this._element, 'mouseleave'),
319
+ fromEventTargetCapture(this._element, 'blur'),
320
+ ]).onValue(() => {
321
+ this._element.classList.remove('aZp');
322
+ });
323
+
324
+ const anchor = querySelector(this._element, 'a');
325
+ Kefir.fromEvents(anchor, 'focus').onValue(() => {
326
+ anchor.classList.add('a1U');
327
+ });
328
+ Kefir.fromEvents(anchor, 'blur').onValue(() => {
329
+ anchor.classList.remove('a1U');
330
+ });
331
+ }
332
+
333
+ _addDownloadButton(options: Object) {
334
+ const buttonView = new ButtonView({
335
+ tooltip: 'Download',
336
+ iconClass: 'aSK J-J5-Ji aYr',
337
+ });
338
+
339
+ buttonView
340
+ .getElement()
341
+ .setAttribute('data-inboxsdk-download-url', options.downloadUrl);
342
+
343
+ const basicButtonViewController = new BasicButtonViewController({
344
+ activateFunction: function () {
345
+ let prevented = false;
346
+
347
+ if (options.onClick) {
348
+ options.onClick({
349
+ preventDefault: function () {
350
+ prevented = true;
351
+ },
352
+ });
353
+ }
354
+
355
+ if (prevented) {
356
+ return;
357
+ }
358
+
359
+ const downloadLink = document.createElement('a');
360
+ downloadLink.href = options.downloadUrl;
361
+ if (options.downloadFilename) {
362
+ downloadLink.download = options.downloadFilename;
363
+ }
364
+
365
+ downloadLink.addEventListener(
366
+ 'click',
367
+ function (e: MouseEvent) {
368
+ e.stopPropagation();
369
+ },
370
+ true
371
+ );
372
+
373
+ if (options.openInNewTab) {
374
+ downloadLink.setAttribute('target', '_blank');
375
+ }
376
+
377
+ ((document.body: any): HTMLElement).appendChild(downloadLink);
378
+
379
+ simulateClick(downloadLink);
380
+ downloadLink.remove();
381
+ },
382
+ buttonView: buttonView,
383
+ });
384
+
385
+ this._addButton(buttonView);
386
+ }
387
+
388
+ _addMoreButtons(buttonDescriptors: ?(Object[])) {
389
+ (buttonDescriptors || [])
390
+ .filter(function (buttonDescriptor) {
391
+ return !buttonDescriptor.downloadUrl;
392
+ })
393
+ .forEach((desc) => {
394
+ this.addButton(desc);
395
+ });
396
+ }
397
+
398
+ _addButton(buttonView: ButtonView) {
399
+ buttonView.addClass('aQv');
400
+
401
+ this._getButtonContainerElement().appendChild(buttonView.getElement());
402
+ }
403
+
404
+ _getPreviewImageUrl(): ?string {
405
+ var previewImage = this._getPreviewImage();
406
+ if (!previewImage) {
407
+ return null;
408
+ }
409
+
410
+ return previewImage.src;
411
+ }
412
+
413
+ _getPreviewImage(): HTMLImageElement {
414
+ return (this._element.querySelector('img.aQG'): any);
415
+ }
416
+
417
+ _getButtonContainerElement(): HTMLElement {
418
+ return querySelector(this._element, '.aQw');
419
+ }
420
+ }
421
+
422
+ export default defn(module, GmailAttachmentCardView);
@@ -0,0 +1,141 @@
1
+ /* @flow */
2
+
3
+ import GmailAttachmentCardView from './gmail-attachment-card-view';
4
+
5
+ const driver: Object = {};
6
+
7
+ describe('getAttachmentType', () => {
8
+ describe('UNLOADED', () => {
9
+ it('not loaded', () => {
10
+ const parent = document.createElement('div');
11
+ parent.innerHTML =
12
+ '<span class="aZo"><div id=":3e" class="aQy aUQ"></div></span>';
13
+ const item = parent.firstElementChild;
14
+ const card = new GmailAttachmentCardView({ element: item }, driver);
15
+ expect(card.getAttachmentType()).toBe('UNLOADED');
16
+ });
17
+ });
18
+
19
+ describe('DRIVE', () => {
20
+ it('Spreadsheet/Doc', () => {
21
+ const parent = document.createElement('div');
22
+ parent.innerHTML =
23
+ '<span class="aZo"><a id=":yx" target="_blank" role="link" class="aQy e aZr" href="https://docs.google.com/spreadsheets/d/1U8kXbtaQ8nV9O77itRojOI4hwz4AKwPAQ3kYFH5Di3M/pubchart?oid=1072376301&amp;format=interactive&amp;usp=gmail" data-tooltip-align="t,c" data-tooltip-class="a1V" tabindex="0"><span class="a3I" id=":z5">Preview attachment Support Numbers</span><div aria-hidden="true"><div class="aSG"></div><div class="aVY aZn"><div class="aZm"></div></div><div class="aSH"><img class="aQG" id=":yy" src="https://lh6.google.com/IK2P9aFJfvmo8jV2iUyRTuH3F7VCQ9gpYS0qafp-CeAdwUCc8Cf1hzHU34emBrSf64sjFeF8AIkfNfUU3LibBvMK7ZUw8cKk=w180-h120-p"><div id=":z0" class="aYv" style="display: none;"><img class="aYw aZF" src="//ssl.gstatic.com/ui/v1/icons/mail/images/cleardot.gif"></div><div id=":z4" class="aYy"><div class="aYA"><img id=":z2" class="aSM" src="//ssl.gstatic.com/docs/doclist/images/mediatype/icon_1_spreadsheet_x16.png" title="Google Sheets"></div><div class="aYz"><div class="a12"><div class="aQA"><span class="aV3 a6U" id=":z1">Support Numbers</span></div><div class="aYp"><span id=":z3" class="SaH2Ve">Shared in Drive</span></div></div></div></div></div><div class="aSI"><div id=":yz" class="aSJ" style="border-color: rgb(15, 157, 88);"></div></div></div></a><div class="aQw"><div id=":ud" class="T-I J-J5-Ji aQv T-I-ax7 L3 T-I-JE aVZ" role="button" aria-label="Download attachment Support Numbers" data-tooltip-class="a1V" aria-hidden="true" aria-disabled="true" data-tooltip="Download" style="-webkit-user-select: none; display: none;"><div class="aSK J-J5-Ji aYr"></div></div><div id=":uo" class="T-I J-J5-Ji aQv T-I-ax7 L3" role="button" tabindex="0" aria-label="Save attachment to Drive Support Numbers" data-tooltip-class="a1V" data-tooltip="Save to Drive" style="-webkit-user-select: none;"><div class="wtScjd J-J5-Ji aYr aQu"><div class="T-aT4" style="display: none;"><div></div><div class="T-aT4-JX"></div></div></div></div></div></span>';
24
+ const item = parent.firstElementChild;
25
+ const card = new GmailAttachmentCardView({ element: item }, driver);
26
+ expect(card.getAttachmentType()).toBe('DRIVE');
27
+ });
28
+
29
+ it('Image', () => {
30
+ const parent = document.createElement('div');
31
+ parent.innerHTML =
32
+ '<span class="aZo a5r N5jrZb" download_url="image/png:mixpanel.png:https://doc-0g-6g-docs.googleusercontent.com/docs/securesc/g7b6blm5q562d5kkm7hp3qjc197l3udo/rc9g7rutikab2k4o0grt0gojn77rhmre/1430503200000/12319357422283078493/14790627230404242429/0B9JouKBNdHWDeFpkM2QyWnFSdEU?h=07421357558349907965&amp;e=download" draggable="true"><a id=":vl" target="_blank" role="link" class="aQy aZr e aZI" href="https://doc-0g-6g-docs.googleusercontent.com/docs/securesc/g7b6blm5q562d5kkm7hp3qjc197l3udo/rc9g7rutikab2k4o0grt0gojn77rhmre/1430503200000/12319357422283078493/14790627230404242429/0B9JouKBNdHWDeFpkM2QyWnFSdEU?h=07421357558349907965&amp;e=download" data-tooltip-align="t,c" data-tooltip-class="a1V" tabindex="0"><span class="a3I" id=":2g">Preview attachment mixpanel.png</span><div aria-hidden="true"><div class="aSG"></div><div class="aVY aZn"><div class="aZm"></div></div><div class="aSH"><img class="aQG aYB" id=":vk" src="https://lh5.googleusercontent.com/2jWGyM4qIQPeyzEwnImuERZOVS53VACIv6znF6nKfJvM8_MEZvubnxicxUV4NXZtJ3Jxhw=w180-h120-p" style="margin: auto; position: absolute; top: 0px; right: 0px; bottom: 0px; left: 0px; max-width: 100%; max-height: 100%;"><div id=":vi" class="aYv" style="display: none;"><img class="aYw aZy" src="//ssl.gstatic.com/ui/v1/icons/mail/images/cleardot.gif"></div><div id=":2f" class="aYy"><div class="aYA"><img id=":6p" class="aSM" src="//ssl.gstatic.com/docs/doclist/images/mediatype/icon_1_image_x16.png" title="Image"></div><div class="aYz"><div class="a12"><div class="aQA"><span class="aV3 a6U" id=":71">mixpanel.png</span></div><div class="aYp"><span id=":2e" class="SaH2Ve">Shared in Drive</span></div></div></div></div></div><div class="aSI"><div id=":vj" class="aSJ" style="border-color: rgb(255, 255, 255);"></div></div></div></a><div class="aQw"><div id=":2j" class="T-I J-J5-Ji aQv T-I-ax7 L3" role="button" aria-label="Download attachment mixpanel.png" data-tooltip-class="a1V" aria-hidden="false" aria-disabled="false" tabindex="0" data-tooltip="Download" style="-webkit-user-select: none;"><div class="aSK J-J5-Ji aYr"></div></div><div id=":2k" class="T-I J-J5-Ji aQv T-I-ax7 L3" role="button" tabindex="0" aria-label="Locate attachment in Drive mixpanel.png" data-tooltip-class="a1V" data-tooltip="Show in Drive" style="-webkit-user-select: none;"><div class="wtScjd J-J5-Ji aYr aUR"><div class="T-aT4" style="display: none;"><div></div><div class="T-aT4-JX"></div></div></div></div></div></span>';
33
+ const item = parent.firstElementChild;
34
+ const card = new GmailAttachmentCardView({ element: item }, driver);
35
+ expect(card.getAttachmentType()).toBe('DRIVE');
36
+ });
37
+
38
+ it('Video', () => {
39
+ const parent = document.createElement('div');
40
+ parent.innerHTML =
41
+ '<span class="aZo a5r N5jrZb" download_url="video/quicktime:Cannot%20Uncheck%20%22Restrict%20Sharing%22.mov:https://doc-0g-c4-docs.googleusercontent.com/docs/securesc/g7b6blm5q562d5kkm7hp3qjc197l3udo/l2883n65nr5vlmps3fkqqggs7prht2fo/1430503200000/14790627230404242429/14790627230404242429/0B8oWVm_LzypkWTBJN3BkRjNsdlVFVzNOeEk2U3AxN0hiOVYw?h=07421357558349907965&amp;e=download" draggable="true"><a id=":3e" target="_blank" role="link" class="aQy aZL aZr e aZI" href="https://doc-0g-c4-docs.googleusercontent.com/docs/securesc/g7b6blm5q562d5kkm7hp3qjc197l3udo/l2883n65nr5vlmps3fkqqggs7prht2fo/1430503200000/14790627230404242429/14790627230404242429/0B8oWVm_LzypkWTBJN3BkRjNsdlVFVzNOeEk2U3AxN0hiOVYw?h=07421357558349907965&amp;e=download" data-tooltip-align="t,c" data-tooltip-class="a1V" tabindex="0"><span class="a3I" id=":3m">Preview attachment Cannot Uncheck "Restrict Sharing".mov</span><div aria-hidden="true"><div class="aSG"></div><div class="aVY aZn"><div class="aZm"></div></div><div class="aSH"><img class="aQG aYB" id=":3f" src="https://lh4.googleusercontent.com/FMC3IHFmtQMWK4Hc-5ue5865HR7tvqTsX4yBwPdBd4mC5M9CCeZ_HE_bqnaPFPXpHlFO6rm3GdnXX2OLQITRdZ3CXMM=w180-h120-p" style="margin: auto; position: absolute; top: 0px; right: 0px; bottom: 0px; left: 0px; max-width: 100%; max-height: 100%;"><div id=":3h" class="aYv" style="display: none;"><img class="aYw aZA" src="//ssl.gstatic.com/ui/v1/icons/mail/images/cleardot.gif"></div><div id=":3l" class="aYy"><div class="aYA"><img id=":3j" class="aSM" src="//ssl.gstatic.com/docs/doclist/images/mediatype/icon_1_video_x16.png" title="Video"></div><div class="aYz"><div class="a12"><div class="aQA"><span class="aV3 a6U" id=":3i">Cannot Uncheck "Restrict Sharing".mov</span></div><div class="aYp"><span id=":3k" class="SaH2Ve">Shared in Drive</span></div></div></div></div></div><div class="aSI"><div id=":3g" class="aSJ" style="border-color: rgb(219, 58, 55);"></div></div></div></a><div class="aQw"><div id=":3p" class="T-I J-J5-Ji aQv T-I-ax7 L3" role="button" aria-label="Download attachment Cannot Uncheck &quot;Restrict Sharing&quot;.mov" data-tooltip-class="a1V" aria-hidden="false" aria-disabled="false" tabindex="0" data-tooltip="Download" style="-webkit-user-select: none;"><div class="aSK J-J5-Ji aYr"></div></div><div id=":3q" class="T-I J-J5-Ji aQv T-I-ax7 L3" role="button" tabindex="0" aria-label="Locate attachment in Drive Cannot Uncheck &quot;Restrict Sharing&quot;.mov" data-tooltip-class="a1V" data-tooltip="Show in Drive" style="-webkit-user-select: none;"><div class="wtScjd J-J5-Ji aYr aUR"><div class="T-aT4" style="display: none;"><div></div><div class="T-aT4-JX"></div></div></div></div></div></span>';
42
+ const item = parent.firstElementChild;
43
+ const card = new GmailAttachmentCardView({ element: item }, driver);
44
+ expect(card.getAttachmentType()).toBe('DRIVE');
45
+ });
46
+ });
47
+
48
+ describe('UNKNOWN', () => {
49
+ it('YouTube', () => {
50
+ const parent = document.createElement('div');
51
+ parent.innerHTML =
52
+ '<span class="aZo"><a id=":1vm" target="_blank" role="link" class="aQy aZR e aZr" href="https://www.youtube.com/watch?v=XRYN2xt11Ek&amp;authuser=0" data-tooltip-align="t,c" data-tooltip-class="a1V" tabindex="0" data-tooltip="Netflix JavaScript Talks - Async JavaScript with Reactive Extensions"><span class="a3I" id=":1te">Preview YouTube video Netflix JavaScript Talks - Async JavaScript with Reactive Extensions</span><div aria-hidden="true"><div class="aSG"></div><div class="aVY aZn"><div class="aZm"></div></div><div class="aSH"><img class="aQG aYB" id=":1t7" src="https://i.ytimg.com/vi/XRYN2xt11Ek/mqdefault.jpg" style="position: absolute; margin: auto; top: -10%; right: -10%; bottom: -10%; left: -10%; max-width: 120%; min-width: 100%;"><div id=":1t9" class="aYv" style="display: none;"><img class="aYw" src="//ssl.gstatic.com/ui/v1/icons/mail/images/cleardot.gif"></div><div id=":1td" class="aYy"><div class="aYA"><img id=":1tb" class="aSM" src="//ssl.gstatic.com/docs/doclist/images/mediatype/icon_2_youtube_x16.png"></div><div class="aYz"><div class="a12"><div class="aQA"><span class="aV3 a6U" id=":1ta">Netflix JavaScript Talks - Async JavaScript with Reactive Extensions</span></div><div class="aYp"><span id=":1tc" class="SaH2Ve"></span></div></div><div class="a11"><img class="aZS" src="//ssl.gstatic.com/ui/v1/icons/mail/images/cleardot.gif"></div></div></div></div><div class="aSI"><div id=":1t8" class="aSJ" style="border-color: rgb(119, 119, 119);"></div></div></div></a></span>';
53
+ const item = parent.firstElementChild;
54
+ const card = new GmailAttachmentCardView({ element: item }, driver);
55
+ expect(card.getAttachmentType()).toBe('UNKNOWN');
56
+ });
57
+ });
58
+
59
+ describe('FILE', () => {
60
+ it('Image partial load', () => {
61
+ const parent = document.createElement('div');
62
+ parent.innerHTML =
63
+ '<span class="aZo"><a id=":x1" target="_blank" role="link" class="aQy e aZI" href="https://mail.google.com/mail/u/0/?ui=2&amp;ik=1f119f7bbb&amp;view=fimg&amp;…yTm3Jys8&amp;sz=w1600&amp;ats=1430504364643&amp;rm=14d0c75c6145c8d4&amp;zw" data-tooltip-align="t,c" data-tooltip-class="a1V"><span class="a3I" id=":x9">Preview attachment shortcuts available.png</span><div aria-hidden="true"><div class="aSG"></div><div class="aVY aZn"><div class="aZm"></div></div><div class="aSH"><img class="aQG" id=":x2" src="?ui=2&amp;ik=1f119f7bbb&amp;view=fimg&amp;th=14d0c75c6145c8d4&amp;attid=0.1&amp;disp=thd&amp;realattid=f_i94qwb490&amp;attbid=ANGjdJ_jUb4hyszH7BYwFZCYh0dyb3mT--y5OlZLPHEnUJEz83h5iHUHr6JGjb57I8ckhCnGqk8az2YlDc_TLM3rivIfqzqmeEpCJtPc-c9DQuAclsN5JUb_Dww64Ck&amp;sz=w180-h120-p-nu&amp;ats=1430504364643&amp;rm=14d0c75c6145c8d4&amp;zw"><div id=":x4" class="aYv"><img class="aYw aZy" src="//ssl.gstatic.com/ui/v1/icons/mail/images/cleardot.gif"></div><div id=":x8" class="aYy"><div class="aYA"><img id=":x6" class="aSM" src="//ssl.gstatic.com/docs/doclist/images/mediatype/icon_1_image_x16.png" title="Image"></div><div class="aYz"><div class="a12"><div class="aQA"><span class="aV3 a6U" id=":x5">shortcuts available.png</span></div><div class="aYp"><span id=":x7" class="SaH2Ve">160 KB</span></div></div></div></div></div><div class="aSI"><div id=":x3" class="aSJ" style="border-color: #fff"></div></div></div></a><div class="aQw"><div id=":xc" class="T-I J-J5-Ji aQv T-I-ax7 L3 T-I-JE aVZ" role="button" aria-label="Download attachment shortcuts available.png" data-tooltip-class="a1V" aria-disabled="true" data-tooltip="Scanning for viruses..." style="-webkit-user-select: none;"><div class="aSK J-J5-Ji aYr"></div></div><div id=":xd" class="T-I J-J5-Ji aQv T-I-ax7 L3" title="Save to Drive" role="button" aria-label="Save attachment to Drive shortcuts available.png" data-tooltip-class="a1V" aria-hidden="true" style="-webkit-user-select: none; display: none;"><div class="wtScjd aQu J-J5-Ji aYr"><div class="T-aT4"><div></div><div class="T-aT4-JX"></div></div></div></div><div id=":xe" class="T-I J-J5-Ji aQv T-I-ax7 L3 T-I-JE aVZ" role="button" aria-label="Add to contacts" data-tooltip-class="a1V" aria-disabled="true" aria-hidden="true" data-tooltip="Add to contacts" style="-webkit-user-select: none; display: none;"><div class="aVX J-J5-Ji aYr"></div></div></div></span>';
64
+ const item = parent.firstElementChild;
65
+ const card = new GmailAttachmentCardView({ element: item }, driver);
66
+ expect(card.getAttachmentType()).toBe('FILE');
67
+ });
68
+
69
+ it('Image', () => {
70
+ const parent = document.createElement('div');
71
+ parent.innerHTML =
72
+ '<span class="aZo N5jrZb" download_url="image/png:shortcuts%20available.png:https://mail.google.com/mail/u/0/?ui=2&amp;ik=1f119f7bbb&amp;view=att&amp;th=14d0c75c6145c8d4&amp;attid=0.1&amp;disp=safe&amp;realattid=f_i94qwb490&amp;zw" draggable="true"><a id=":v2" target="_blank" role="link" class="aQy e aZI" href="https://mail.google.com/mail/u/0/?ui=2&amp;ik=1f119f7bbb&amp;view=fimg&amp;th=14d0c75c6145c8d4&amp;attid=0.1&amp;disp=inline&amp;realattid=f_i94qwb490&amp;safe=1&amp;attbid=ANGjdJ-ttSt_OR-q9LAkPanrUKU8Mv3yKZYPdcZ0NNywe1NE-bvNZ3L759WF6EIaRanB7Kj663CFt7PdiRCQ0Py2X45zpH9NcuuzbqZET0tAepRJYN6U6YkK5yIFdRA&amp;sz=w1600&amp;ats=1430504486875&amp;rm=14d0c75c6145c8d4&amp;zw" data-tooltip-align="t,c" data-tooltip-class="a1V"><span class="a3I" id=":va">Preview attachment shortcuts available.png</span><div aria-hidden="true"><div class="aSG"></div><div class="aVY aZn"><div class="aZm"></div></div><div class="aSH"><img class="aQG" id=":v3" src="?ui=2&amp;ik=1f119f7bbb&amp;view=fimg&amp;th=14d0c75c6145c8d4&amp;attid=0.1&amp;disp=thd&amp;realattid=f_i94qwb490&amp;attbid=ANGjdJ9UbCYIYp1Tj3tWYlhwkVV4Vj4ddGIaiNqQL9Dmvhtxr1Yiu7-xX9xMdYzQY4upkHklIipUnO_7H3Y561Plkj1pHnw5L-J-2B__YULYHGfYrt7Vu7m5EmSN2YE&amp;sz=w180-h120-p-nu&amp;ats=1430504486875&amp;rm=14d0c75c6145c8d4&amp;zw"><div id=":v5" class="aYv"><img class="aYw aZy" src="//ssl.gstatic.com/ui/v1/icons/mail/images/cleardot.gif"></div><div id=":v9" class="aYy"><div class="aYA"><img id=":v7" class="aSM" src="//ssl.gstatic.com/docs/doclist/images/mediatype/icon_1_image_x16.png" title="Image"></div><div class="aYz"><div class="a12"><div class="aQA"><span class="aV3 a6U" id=":v6">shortcuts available.png</span></div><div class="aYp"><span id=":v8" class="SaH2Ve">160 KB</span></div></div></div></div></div><div class="aSI"><div id=":v4" class="aSJ" style="border-color: #fff"></div></div></div></a><div class="aQw"><div id=":vd" class="T-I J-J5-Ji aQv T-I-ax7 L3" role="button" tabindex="0" aria-label="Download attachment shortcuts available.png" data-tooltip-class="a1V" data-tooltip="Download" style="-webkit-user-select: none;"><div class="aSK J-J5-Ji aYr"></div></div><div id=":ve" class="T-I J-J5-Ji aQv T-I-ax7 L3" role="button" tabindex="0" aria-label="Save attachment to Drive shortcuts available.png" data-tooltip-class="a1V" data-tooltip="Save to Drive" style="-webkit-user-select: none;"><div class="wtScjd J-J5-Ji aYr aQu"><div class="T-aT4" style="display: none;"><div></div><div class="T-aT4-JX"></div></div></div></div><div id=":vf" class="T-I J-J5-Ji aQv T-I-ax7 L3 T-I-JE aVZ" role="button" aria-label="Add to contacts" data-tooltip-class="a1V" aria-disabled="true" aria-hidden="true" data-tooltip="Add to contacts" style="-webkit-user-select: none; display: none;"><div class="aVX J-J5-Ji aYr"></div></div></div></span>';
73
+ const item = parent.firstElementChild;
74
+ const card = new GmailAttachmentCardView({ element: item }, driver);
75
+ expect(card.getAttachmentType()).toBe('FILE');
76
+ });
77
+
78
+ it('Image 2', () => {
79
+ const parent = document.createElement('div');
80
+ parent.innerHTML =
81
+ '<span class="aZo N5jrZb a5r" download_url="image/png:glyphicons_154_more_windows%402x.png:https://mail.google.com/mail/u/0/?ui=2&amp;ik=1f119f7bbb&amp;view=att&amp;th=14d10d2d2cac40be&amp;attid=0.1&amp;disp=safe&amp;realattid=f_i95yjsrs0&amp;zw" draggable="true"><a id=":1ub" target="_blank" role="link" class="aQy aZr e aZI" href="https://mail.google.com/mail/u/0/?ui=2&amp;ik=1f119f7bbb&amp;view=att&amp;th=14d10d2d2cac40be&amp;attid=0.1&amp;disp=safe&amp;realattid=f_i95yjsrs0&amp;zw" data-tooltip-align="t,c" data-tooltip-class="a1V" tabindex="0"><span class="a3I" id=":1uj">Preview attachment glyphicons_154_more_windows@2x.png</span><div aria-hidden="true"><div class="aSG"></div><div class="aVY aZn"><div class="aZm"></div></div><div class="aSH"><img class="aQG aYB" id=":1uc" src="?ui=2&amp;ik=1f119f7bbb&amp;view=fimg&amp;th=14d10d2d2cac40be&amp;attid=0.1&amp;disp=thd&amp;realattid=f_i95yjsrs0&amp;attbid=ANGjdJ81k5MBG_KC-NgOU0uB2nPdvsE8TB5xXoMRjUW4rxM6p0GcrkGwC7dHUdCimgqqR4Ab0K98UYfXLTZg6VjqeKGKFWiWlzJ3BBW9Cvytlcc0jO1fK5OqkHY6n2o&amp;sz=w180-h120-p-nu&amp;ats=1430510538939&amp;rm=14d10d2d2cac40be&amp;zw" style="margin: auto; position: absolute; top: 0px; right: 0px; bottom: 0px; left: 0px; max-width: 100%; max-height: 100%;"><div id=":1ue" class="aYv" style="display: none;"><img class="aYw aZy" src="//ssl.gstatic.com/ui/v1/icons/mail/images/cleardot.gif"></div><div id=":1ui" class="aYy"><div class="aYA"><img id=":1ug" class="aSM" src="//ssl.gstatic.com/docs/doclist/images/mediatype/icon_1_image_x16.png" title="Image"></div><div class="aYz"><div class="a12"><div class="aQA"><span class="aV3 a6U" id=":1uf">glyphicons_154_more_windows@2x.png</span></div><div class="aYp"><span id=":1uh" class="SaH2Ve">1.5 KB</span></div></div></div></div></div><div class="aSI"><div id=":1ud" class="aSJ" style="border-color: rgb(255, 255, 255);"></div></div></div></a><div class="aQw"><div id=":1um" class="T-I J-J5-Ji aQv T-I-ax7 L3" role="button" aria-label="Download attachment glyphicons_154_more_windows@2x.png" data-tooltip-class="a1V" aria-disabled="false" style="-webkit-user-select: none;" tabindex="0" data-tooltip="Download"><div class="aSK J-J5-Ji aYr"></div></div><div id=":1un" class="T-I J-J5-Ji aQv T-I-ax7 L3" role="button" aria-label="Save attachment to Drive glyphicons_154_more_windows@2x.png" data-tooltip-class="a1V" aria-hidden="false" style="-webkit-user-select: none;" tabindex="0" data-tooltip="Save to Drive"><div class="wtScjd J-J5-Ji aYr aQu"><div class="T-aT4" style="display: none;"><div></div><div class="T-aT4-JX"></div></div></div></div><div id=":1uo" class="T-I J-J5-Ji aQv T-I-ax7 L3 T-I-JE aVZ" role="button" aria-label="Add to contacts" data-tooltip-class="a1V" aria-disabled="true" aria-hidden="true" style="-webkit-user-select: none; display: none;" data-tooltip="Add to contacts"><div class="aVX J-J5-Ji aYr"></div></div></div></span>';
82
+ const item = parent.firstElementChild;
83
+ const card = new GmailAttachmentCardView({ element: item }, driver);
84
+ expect(card.getAttachmentType()).toBe('FILE');
85
+ });
86
+
87
+ it('Doc partial load', () => {
88
+ const parent = document.createElement('div');
89
+ parent.innerHTML =
90
+ '<span class="aZo"><a id=":yc" target="_blank" role="link" class="aQy e" href="https://mail.google.com/mail/u/0/?ui=2&amp;ik=1f119f7bbb&amp;view=att&amp;th=14d10d6c7456d1bf&amp;attid=0.1&amp;disp=inline&amp;realattid=f_i95ypbc10&amp;safe=1&amp;zw" data-tooltip-align="t,c" data-tooltip-class="a1V"><span class="a3I" id=":2v">Preview attachment NOTES.txt</span><div aria-hidden="true"><div class="aSG"></div><div class="aVY aZn"><div class="aZm"></div></div><div class="aSH"><img class="aQG" id=":yb" style="display:none;"><div id=":10m" class="aYv"><img class="aYw aZG" src="//ssl.gstatic.com/ui/v1/icons/mail/images/cleardot.gif"></div><div id=":3r" class="aYy"><div class="aYA"><img id=":10o" class="aSM" src="//ssl.gstatic.com/docs/doclist/images/mediatype/icon_1_text_x16.png" title="Text"></div><div class="aYz"><div class="a12"><div class="aQA"><span class="aV3 a6U" id=":10n">NOTES.txt</span></div><div class="aYp"><span id=":33" class="SaH2Ve">1 KB</span></div></div></div></div></div><div class="aSI"><div id=":ya" class="aSJ" style="border-color: #4986e7"></div></div></div></a><div class="aQw"><div id=":3f" class="T-I J-J5-Ji aQv T-I-ax7 L3 T-I-JE aVZ" role="button" aria-label="Download attachment NOTES.txt" data-tooltip-class="a1V" aria-disabled="true" data-tooltip="Scanning for viruses..." style="-webkit-user-select: none;"><div class="aSK J-J5-Ji aYr"></div></div><div id=":3e" class="T-I J-J5-Ji aQv T-I-ax7 L3" title="Save to Drive" role="button" aria-label="Save attachment to Drive NOTES.txt" data-tooltip-class="a1V" aria-hidden="true" style="-webkit-user-select: none; display: none;"><div class="wtScjd aQu J-J5-Ji aYr"><div class="T-aT4"><div></div><div class="T-aT4-JX"></div></div></div></div><div id=":2d" class="T-I J-J5-Ji aQv T-I-ax7 L3 T-I-JE aVZ" role="button" aria-label="Add to contacts" data-tooltip-class="a1V" aria-disabled="true" aria-hidden="true" data-tooltip="Add to contacts" style="-webkit-user-select: none; display: none;"><div class="aVX J-J5-Ji aYr"></div></div></div></span>';
91
+ const item = parent.firstElementChild;
92
+ const card = new GmailAttachmentCardView({ element: item }, driver);
93
+ expect(card.getAttachmentType()).toBe('FILE');
94
+ });
95
+
96
+ it('Doc', () => {
97
+ const parent = document.createElement('div');
98
+ parent.innerHTML =
99
+ '<span class="aZo N5jrZb" download_url="text/plain:NOTES.txt:https://mail.google.com/mail/u/0/?ui=2&amp;ik=1f119f7bbb&amp;view=att&amp;th=14d10d6c7456d1bf&amp;attid=0.1&amp;disp=safe&amp;realattid=f_i95ypbc10&amp;zw" draggable="true"><a id=":yc" target="_blank" role="link" class="aQy e" href="https://mail.google.com/mail/u/0/?ui=2&amp;ik=1f119f7bbb&amp;view=att&amp;th=14d10d6c7456d1bf&amp;attid=0.1&amp;disp=safe&amp;realattid=f_i95ypbc10&amp;zw" data-tooltip-align="t,c" data-tooltip-class="a1V" tabindex="0"><span class="a3I" id=":2v">Preview attachment NOTES.txt</span><div aria-hidden="true"><div class="aSG"></div><div class="aVY aZn"><div class="aZm"></div></div><div class="aSH"><img class="aQG" id=":yb" style="display: none;"><div id=":10m" class="aYv"><img class="aYw aZG" src="//ssl.gstatic.com/ui/v1/icons/mail/images/cleardot.gif"></div><div id=":3r" class="aYy"><div class="aYA"><img id=":10o" class="aSM" src="//ssl.gstatic.com/docs/doclist/images/mediatype/icon_1_text_x16.png" title="Text"></div><div class="aYz"><div class="a12"><div class="aQA"><span class="aV3 a6U" id=":10n">NOTES.txt</span></div><div class="aYp"><span id=":33" class="SaH2Ve">1 KB</span></div></div></div></div></div><div class="aSI"><div id=":ya" class="aSJ" style="border-color: rgb(73, 134, 231);"></div></div></div></a><div class="aQw"><div id=":3f" class="T-I J-J5-Ji aQv T-I-ax7 L3" role="button" aria-label="Download attachment NOTES.txt" data-tooltip-class="a1V" aria-disabled="false" style="-webkit-user-select: none;" tabindex="0" data-tooltip="Download"><div class="aSK J-J5-Ji aYr"></div></div><div id=":3e" class="T-I J-J5-Ji aQv T-I-ax7 L3" role="button" aria-label="Save attachment to Drive NOTES.txt" data-tooltip-class="a1V" aria-hidden="false" style="-webkit-user-select: none;" tabindex="0" data-tooltip="Save to Drive"><div class="wtScjd J-J5-Ji aYr aQu"><div class="T-aT4" style="display: none;"><div></div><div class="T-aT4-JX"></div></div></div></div><div id=":2d" class="T-I J-J5-Ji aQv T-I-ax7 L3 T-I-JE aVZ" role="button" aria-label="Add to contacts" data-tooltip-class="a1V" aria-disabled="true" aria-hidden="true" style="-webkit-user-select: none; display: none;" data-tooltip="Add to contacts"><div class="aVX J-J5-Ji aYr"></div></div></div></span>';
100
+ const item = parent.firstElementChild;
101
+ const card = new GmailAttachmentCardView({ element: item }, driver);
102
+ expect(card.getAttachmentType()).toBe('FILE');
103
+ });
104
+
105
+ it('Generic partial load', () => {
106
+ const parent = document.createElement('div');
107
+ parent.innerHTML =
108
+ '<span class="aZo"><a id=":38" target="_blank" role="link" class="aQy e" data-tooltip-align="t,c" data-tooltip-class="a1V"><span class="a3I" id=":ug">Preview attachment package.json</span><div aria-hidden="true"><div class="aSG"></div><div class="aVY aZn"><div class="aZm"></div></div><div class="aSH"><img class="aQG" id=":37" style="display:none;"><div id=":30" class="aYv"><img class="aYw" src="//ssl.gstatic.com/ui/v1/icons/mail/images/cleardot.gif"></div><div id=":v0" class="aYy"><div class="aYA"><img id=":2y" class="aSM" src="https://drive-thirdparty.googleusercontent.com/16/type/application/json"></div><div class="aYz"><div class="a12"><div class="aQA"><span class="aV3 a6U" id=":2z">package.json</span></div><div class="aYp"><span id=":v2" class="SaH2Ve">1.7 KB</span></div></div></div></div></div><div class="aSI"><div id=":36" class="aSJ" style="border-color: #777"></div></div></div></a><div class="aQw"><div id=":ud" class="T-I J-J5-Ji aQv T-I-ax7 L3 T-I-JE aVZ" role="button" aria-label="Download attachment package.json" data-tooltip-class="a1V" aria-disabled="true" data-tooltip="Scanning for viruses..." style="-webkit-user-select: none;"><div class="aSK J-J5-Ji aYr"></div></div><div id=":uc" class="T-I J-J5-Ji aQv T-I-ax7 L3" title="Save to Drive" role="button" aria-label="Save attachment to Drive package.json" data-tooltip-class="a1V" aria-hidden="true" style="-webkit-user-select: none; display: none;"><div class="wtScjd aQu J-J5-Ji aYr"><div class="T-aT4"><div></div><div class="T-aT4-JX"></div></div></div></div><div id=":ub" class="T-I J-J5-Ji aQv T-I-ax7 L3 T-I-JE aVZ" role="button" aria-label="Add to contacts" data-tooltip-class="a1V" aria-disabled="true" aria-hidden="true" data-tooltip="Add to contacts" style="-webkit-user-select: none; display: none;"><div class="aVX J-J5-Ji aYr"></div></div></div></span>';
109
+ const item = parent.firstElementChild;
110
+ const card = new GmailAttachmentCardView({ element: item }, driver);
111
+ expect(card.getAttachmentType()).toBe('FILE');
112
+ });
113
+
114
+ it('Generic', () => {
115
+ const parent = document.createElement('div');
116
+ parent.innerHTML =
117
+ '<span class="aZo N5jrZb" download_url="application/json:package.json:https://mail.google.com/mail/u/0/?ui=2&amp;ik=1f119f7bbb&amp;view=att&amp;th=14d10ce8187dd269&amp;attid=0.1&amp;disp=safe&amp;realattid=f_i95ydr8x0&amp;zw" draggable="true"><a id=":35" target="_blank" role="link" class="aQy e" data-tooltip-align="t,c" data-tooltip-class="a1V" tabindex="0"><span class="a3I" id=":wf">Preview attachment package.json</span><div aria-hidden="true"><div class="aSG"></div><div class="aVY aZn"><div class="aZm"></div></div><div class="aSH"><img class="aQG" id=":3t" style="display: none;"><div id=":wk" class="aYv"><img class="aYw" src="//ssl.gstatic.com/ui/v1/icons/mail/images/cleardot.gif"></div><div id=":wg" class="aYy"><div class="aYA"><img id=":wi" class="aSM" src="https://drive-thirdparty.googleusercontent.com/16/type/application/json"></div><div class="aYz"><div class="a12"><div class="aQA"><span class="aV3 a6U" id=":wj">package.json</span></div><div class="aYp"><span id=":wh" class="SaH2Ve">1.7 KB</span></div></div></div></div></div><div class="aSI"><div id=":wl" class="aSJ" style="border-color: rgb(119, 119, 119);"></div></div></div></a><div class="aQw"><div id=":wc" class="T-I J-J5-Ji aQv T-I-ax7 L3" role="button" aria-label="Download attachment package.json" data-tooltip-class="a1V" aria-disabled="false" style="-webkit-user-select: none;" tabindex="0" data-tooltip="Download"><div class="aSK J-J5-Ji aYr"></div></div><div id=":wb" class="T-I J-J5-Ji aQv T-I-ax7 L3" role="button" aria-label="Save attachment to Drive package.json" data-tooltip-class="a1V" aria-hidden="false" style="-webkit-user-select: none;" tabindex="0" data-tooltip="Save to Drive"><div class="wtScjd J-J5-Ji aYr aQu"><div class="T-aT4" style="display: none;"><div></div><div class="T-aT4-JX"></div></div></div></div><div id=":wa" class="T-I J-J5-Ji aQv T-I-ax7 L3 T-I-JE aVZ" role="button" aria-label="Add to contacts" data-tooltip-class="a1V" aria-disabled="true" aria-hidden="true" style="-webkit-user-select: none; display: none;" data-tooltip="Add to contacts"><div class="aVX J-J5-Ji aYr"></div></div></div></span>';
118
+ const item = parent.firstElementChild;
119
+ const card = new GmailAttachmentCardView({ element: item }, driver);
120
+ expect(card.getAttachmentType()).toBe('FILE');
121
+ });
122
+
123
+ it('Video partial load', () => {
124
+ const parent = document.createElement('div');
125
+ parent.innerHTML =
126
+ '<span class="aZo"><a id=":wt" target="_blank" role="link" class="aQy e aZI aZL" data-tooltip-align="t,c" data-tooltip-class="a1V"><span class="a3I" id=":2s">Preview attachment assigned to indicators.mov</span><div aria-hidden="true"><div class="aSG"></div><div class="aVY aZn"><div class="aZm"></div></div><div class="aSH"><img class="aQG" id=":ws" style="display:none;"><div id=":wq" class="aYv"><img class="aYw aZA" src="//ssl.gstatic.com/ui/v1/icons/mail/images/cleardot.gif"></div><div id=":12v" class="aYy"><div class="aYA"><img id=":12u" class="aSM" src="//ssl.gstatic.com/docs/doclist/images/mediatype/icon_1_video_x16.png" title="Video"></div><div class="aYz"><div class="a12"><div class="aQA"><span class="aV3 a6U" id=":3g">assigned to indicators.mov</span></div><div class="aYp"><span id=":zc" class="SaH2Ve">2.9 MB</span></div></div></div></div></div><div class="aSI"><div id=":wr" class="aSJ" style="border-color: #db3a37"></div></div></div></a><div class="aQw"><div id=":ym" class="T-I J-J5-Ji aQv T-I-ax7 L3 T-I-JE aVZ" role="button" aria-label="Download attachment assigned to indicators.mov" data-tooltip-class="a1V" aria-disabled="true" data-tooltip="Scanning for viruses..." style="-webkit-user-select: none;"><div class="aSK J-J5-Ji aYr"></div></div><div id=":6k" class="T-I J-J5-Ji aQv T-I-ax7 L3" title="Save to Drive" role="button" aria-label="Save attachment to Drive assigned to indicators.mov" data-tooltip-class="a1V" aria-hidden="true" style="-webkit-user-select: none; display: none;"><div class="wtScjd aQu J-J5-Ji aYr"><div class="T-aT4"><div></div><div class="T-aT4-JX"></div></div></div></div><div id=":w0" class="T-I J-J5-Ji aQv T-I-ax7 L3 T-I-JE aVZ" role="button" aria-label="Add to contacts" data-tooltip-class="a1V" aria-disabled="true" aria-hidden="true" data-tooltip="Add to contacts" style="-webkit-user-select: none; display: none;"><div class="aVX J-J5-Ji aYr"></div></div></div></span>';
127
+ const item = parent.firstElementChild;
128
+ const card = new GmailAttachmentCardView({ element: item }, driver);
129
+ expect(card.getAttachmentType()).toBe('FILE');
130
+ });
131
+
132
+ it('Video', () => {
133
+ const parent = document.createElement('div');
134
+ parent.innerHTML =
135
+ '<span class="aZo N5jrZb a5r" download_url="video/quicktime:assigned%20to%20indicators.mov:https://mail.google.com/mail/u/0/?ui=2&amp;ik=1f119f7bbb&amp;view=att&amp;th=14d11050c673e1b5&amp;attid=0.1&amp;disp=safe&amp;realattid=f_i960ian10&amp;zw" draggable="true"><a id=":3i" target="_blank" role="link" class="aQy aZL e" data-tooltip-align="t,c" data-tooltip-class="a1V" tabindex="0"><span class="a3I" id=":3q">Preview attachment assigned to indicators.mov</span><div aria-hidden="true"><div class="aSG"></div><div class="aVY aZn"><div class="aZm"></div></div><div class="aSH"><img class="aQG" id=":3j" style="display: none;"><div id=":3l" class="aYv"><img class="aYw aZA" src="//ssl.gstatic.com/ui/v1/icons/mail/images/cleardot.gif"></div><div id=":3p" class="aYy"><div class="aYA"><img id=":3n" class="aSM" src="//ssl.gstatic.com/docs/doclist/images/mediatype/icon_1_video_x16.png" title="Video"></div><div class="aYz"><div class="a12"><div class="aQA"><span class="aV3 a6U" id=":3m">assigned to indicators.mov</span></div><div class="aYp"><span id=":3o" class="SaH2Ve">2.9 MB</span></div></div></div></div></div><div class="aSI"><div id=":3k" class="aSJ" style="border-color: rgb(219, 58, 55);"></div></div></div></a><div class="aQw"><div id=":3t" class="T-I J-J5-Ji aQv T-I-ax7 L3" role="button" tabindex="0" aria-label="Download attachment assigned to indicators.mov" data-tooltip-class="a1V" style="-webkit-user-select: none;" data-tooltip="Download"><div class="aSK J-J5-Ji aYr"></div></div><div id=":3u" class="T-I J-J5-Ji aQv T-I-ax7 L3" role="button" tabindex="0" aria-label="Save attachment to Drive assigned to indicators.mov" data-tooltip-class="a1V" style="-webkit-user-select: none;" data-tooltip="Save to Drive"><div class="wtScjd J-J5-Ji aYr aQu"><div class="T-aT4" style="display: none;"><div></div><div class="T-aT4-JX"></div></div></div></div><div id=":3v" class="T-I J-J5-Ji aQv T-I-ax7 L3 T-I-JE aVZ" role="button" aria-label="Add to contacts" data-tooltip-class="a1V" aria-disabled="true" aria-hidden="true" style="-webkit-user-select: none; display: none;" data-tooltip="Add to contacts"><div class="aVX J-J5-Ji aYr"></div></div></div></span>';
136
+ const item = parent.firstElementChild;
137
+ const card = new GmailAttachmentCardView({ element: item }, driver);
138
+ expect(card.getAttachmentType()).toBe('FILE');
139
+ });
140
+ });
141
+ });