@inboxsdk/core 0.2.28-alpha.4 → 0.2.28-alpha.6
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.
- package/inboxsdk.js +1 -1
- package/package.json +5 -1
- package/src/inboxsdk-js/check-requirements.js +7 -3
- package/src/inboxsdk-js/header.js +1 -0
- package/src/inboxsdk-js/inboxsdk-NONREMOTE-INTEGRATED-PAGEWORLD.js +5 -6
- package/src/inboxsdk-js/inboxsdk-NONREMOTE.js +4 -3
- package/src/inboxsdk-js/inboxsdk-REMOTE.js +3 -1
- package/src/inboxsdk-js/inboxsdk-TEST.js +4 -3
- package/src/inboxsdk-js/inboxsdk.js +33 -39
- package/src/inboxsdk-js/loading/load-platform-implementation-DEV.js +15 -18
- package/src/inboxsdk.d.ts +2 -0
- package/src/injected-js/gmail/modify-suggestions.test.js +8 -9
- package/src/injected-js/gmail/setup-gmail-interceptor.js +340 -579
- package/src/injected-js/gmail/sync-compose-request-processor.test.js +39 -49
- package/src/injected-js/gmail/thread-identifier/click-and-get-popup-url.js +20 -33
- package/src/injected-js/gmail/thread-identifier/index.js +57 -93
- package/src/injected-js/gmail/thread-identifier/thread-row-parser.js +22 -31
- package/src/injected-js/gmail/thread-identifier/thread-row-parser.test.js +12 -28
- package/src/injected-js/inbox/setupAjaxInterceptor.js +64 -121
- package/src/injected-js/inbox/setupClickAndGetNewIframeSrc.js +53 -66
- package/src/injected-js/inbox/setupComposeViewDraftIDFinder.js +20 -36
- package/src/injected-js/inbox/setupInboxFakeWindowResizeListener.js +13 -13
- package/src/injected-js/main.js +11 -24
- package/src/injected-js/message-metadata-holder.js +52 -82
- package/src/injected-js/setup-data-exposer.js +89 -148
- package/src/injected-js/setup-error-silencer.js +21 -21
- package/src/injected-js/setup-event-reemitter.js +30 -22
- package/src/injected-js/setupInboxCustomViewLinkFixer.js +24 -29
- package/src/injected-js/setupPushStateListener.js +18 -11
- package/src/injected-js/xhr-helper.js +62 -65
- package/src/injected-js/xhr-proxy-factory.js +195 -445
- package/src/injected-js/xhr-proxy-factory.test.js +824 -991
- package/src/platform-implementation-js/constants/router.js +14 -9
- package/src/platform-implementation-js/constants/toolbars.js +8 -3
- package/src/platform-implementation-js/dom-driver/gmail/custom-style.js +13 -13
- package/src/platform-implementation-js/dom-driver/gmail/gmail-butter-bar-driver.js +115 -136
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-toolbar-button-for-app.js +13 -14
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/create-link.js +27 -48
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-draft-id-for-message-id.js +31 -42
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-native-nav-item.js +30 -40
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-url-object.js +10 -18
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/getSyncThreadForOldGmailThreadId.js +21 -28
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/getSyncThreadFromSyncThreadId.js +33 -45
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/gmail-load-event.js +31 -49
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/goto-view.js +58 -65
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/keyboard-shortcut-help-modifier.js +40 -124
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/open-compose-window.js +17 -22
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/open-draft-by-message-id.test.js +10 -11
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/override-gmail-back-button.js +44 -80
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/register-search-query-rewriter.js +19 -26
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/register-search-suggestions-provider.js +71 -147
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/setup-compose-view-driver-stream.js +91 -148
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/setup-route-view-driver-stream.js +150 -166
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/setup-route-view-driver-stream.test.js +70 -120
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-app-id-warning.js +15 -15
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-custom-route-view.js +44 -67
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-custom-thread-list.js +230 -379
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-custom-thread-list.test.js +121 -307
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-native-route-view.js +17 -24
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/suppressAddon.js +41 -49
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/temporary-track-download-url-validity.js +30 -40
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/thread-row-identifier.js +28 -60
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/track-events.js +61 -133
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/user-info.js +30 -42
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/user-info.test.js +52 -46
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver.js +354 -694
- package/src/platform-implementation-js/dom-driver/gmail/make-xhr-interceptor.js +77 -93
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/index.js +35 -82
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/index.test.js +44 -94
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-companion-global-icon-area.js +12 -19
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-companion-thread-icon-area.js +17 -29
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-to-icon-area.js +26 -26
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/index.js +391 -797
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-toolbar-button-view/monitor-top-banner-size-and-react.js +7 -9
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-toolbar-button-view.js +60 -109
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-area-view.js +95 -135
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-card-view.js +103 -211
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-card-view.test.js +61 -61
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-backdrop.js +17 -17
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-collapsible-section-view.js +188 -541
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-button.js +67 -135
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-compose-notice.js +27 -49
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-inner-sidebar.js +7 -13
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-outer-sidebar.js +9 -22
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-recipient-row.js +36 -63
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-tooltip-to-button.js +38 -113
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/ensure-app-button-toolbars-are-closed.js +11 -16
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/ensure-grouping-is-open.js +11 -17
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/focus.js +8 -11
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/from-manager.js +27 -47
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-additional-action-toolbar.js +11 -24
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-address-changes-stream.js +59 -111
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-body-changes-stream.js +15 -14
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-formatting-area-offset-left.js +11 -17
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-minimized-stream.js +18 -24
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-response-type-changes-stream.js +19 -23
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/insert-link-into-body.js +11 -19
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/manage-button-grouping.js +141 -376
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/monitor-selection-range.js +17 -28
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/override-edit-subject.js +34 -70
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/position-formatting-toolbar.js +10 -17
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/size-fixer.js +83 -137
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/update-insert-more-area-left.js +10 -19
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view.js +632 -1190
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view/get-updated-contact.js +29 -38
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view.js +327 -617
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-route-view/gmail-route-processor.js +26 -49
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-route-view/gmail-route-view.js +188 -380
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-row-list-view.js +104 -194
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-row-view.js +382 -811
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view/add-icon-area.js +34 -58
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view.js +330 -581
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view.test.js +123 -277
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-view/width-manager.js +15 -35
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-view.js +216 -571
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-toolbar-view.js +152 -336
- package/src/platform-implementation-js/dom-driver/gmail/views/native-gmail-nav-item-view.js +87 -211
- package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/inbox-dropdown-button-view.js +10 -11
- package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-action-button-view.js +20 -29
- package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-label-view.js +41 -76
- package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-modal-view-driver.js +45 -99
- package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-mole-view-driver.js +76 -128
- package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-tooltip-view.js +128 -319
- package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-top-message-bar-driver.js +45 -78
- package/src/platform-implementation-js/dom-driver/inbox/__mocks__/getSidebarClassnames.js +8 -4
- package/src/platform-implementation-js/dom-driver/inbox/addNavItem.js +36 -54
- package/src/platform-implementation-js/dom-driver/inbox/addRecipientRow.js +35 -53
- package/src/platform-implementation-js/dom-driver/inbox/createLink.js +13 -15
- package/src/platform-implementation-js/dom-driver/inbox/createLink.test.js +15 -18
- package/src/platform-implementation-js/dom-driver/inbox/custom-style.js +14 -13
- package/src/platform-implementation-js/dom-driver/inbox/detection/appToolbarLocation/parser.js +14 -20
- package/src/platform-implementation-js/dom-driver/inbox/detection/attachmentCard/parser.js +14 -13
- package/src/platform-implementation-js/dom-driver/inbox/detection/attachmentOverlay/parser.js +35 -67
- package/src/platform-implementation-js/dom-driver/inbox/detection/chatSidebar/parser.js +16 -18
- package/src/platform-implementation-js/dom-driver/inbox/detection/compose/parser.js +68 -185
- package/src/platform-implementation-js/dom-driver/inbox/detection/message/parser.js +28 -56
- package/src/platform-implementation-js/dom-driver/inbox/detection/nativeDrawer/parser.js +12 -10
- package/src/platform-implementation-js/dom-driver/inbox/detection/searchBar/parser.js +16 -16
- package/src/platform-implementation-js/dom-driver/inbox/detection/thread/parser.js +24 -35
- package/src/platform-implementation-js/dom-driver/inbox/detection/thread-row/parser.js +37 -89
- package/src/platform-implementation-js/dom-driver/inbox/getComposeViewDriverLiveSet.js +56 -78
- package/src/platform-implementation-js/dom-driver/inbox/getInboxMessageIdForInboxThreadId.js +26 -32
- package/src/platform-implementation-js/dom-driver/inbox/getSidebarClassnames.js +52 -109
- package/src/platform-implementation-js/dom-driver/inbox/getSidebarClassnames.test.js +7 -8
- package/src/platform-implementation-js/dom-driver/inbox/gotoView.js +16 -20
- package/src/platform-implementation-js/dom-driver/inbox/gotoView.test.js +15 -16
- package/src/platform-implementation-js/dom-driver/inbox/inbox-butter-bar-driver.js +75 -83
- package/src/platform-implementation-js/dom-driver/inbox/inbox-driver.js +530 -822
- package/src/platform-implementation-js/dom-driver/inbox/inbox-page-communicator.js +48 -61
- package/src/platform-implementation-js/dom-driver/inbox/inboxResponseProcessor.js +9 -12
- package/src/platform-implementation-js/dom-driver/inbox/inboxResponseProcessor.test.js +12 -19
- package/src/platform-implementation-js/dom-driver/inbox/makePageParserTree.js +24 -33
- package/src/platform-implementation-js/dom-driver/inbox/pageParserOptions.js +201 -388
- package/src/platform-implementation-js/dom-driver/inbox/registerSearchSuggestionsProvider.js +249 -265
- package/src/platform-implementation-js/dom-driver/inbox/setupCustomAutocompleteSelectionHandling.js +84 -152
- package/src/platform-implementation-js/dom-driver/inbox/setupRouteViewDriverStream.js +55 -67
- package/src/platform-implementation-js/dom-driver/inbox/setupRouteViewDriverStream.test.js +43 -65
- package/src/platform-implementation-js/dom-driver/inbox/views/InboxLabelView.js +31 -56
- package/src/platform-implementation-js/dom-driver/inbox/views/InboxMoleViewDriver.js +191 -294
- package/src/platform-implementation-js/dom-driver/inbox/views/InboxToolbarButtonView.js +32 -45
- package/src/platform-implementation-js/dom-driver/inbox/views/InboxToolbarView.js +21 -39
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-app-sidebar-view.js +153 -240
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-app-toolbar-button-view.js +75 -150
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-app-toolbar-tooltip-view.js +20 -37
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-attachment-card-view.js +60 -114
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-attachment-overlay-view.js +47 -65
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-backdrop.js +41 -52
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-chat-sidebar-view.js +27 -36
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-compose-button-view.js +52 -80
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-compose-view.js +465 -649
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-custom-route-view.js +37 -58
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-custom-route-view.test.js +14 -26
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-drawer-view.js +118 -235
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-dropdown-view.js +10 -11
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-dummy-route-view.js +28 -46
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-message-view.js +131 -202
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-modal-view.js +40 -80
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-route-view.js +35 -61
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-thread-row-view.js +124 -221
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-thread-view.js +125 -213
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-thread-view.test.js +104 -126
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-tooltip-view.js +36 -51
- package/src/platform-implementation-js/dom-driver/inbox/views/inboxNavItemView.js +158 -297
- package/src/platform-implementation-js/dom-driver/inbox/waitForAnimationClickBlockerGone.js +21 -35
- package/src/platform-implementation-js/driver-common/compose/getDiscardStream.js +24 -43
- package/src/platform-implementation-js/driver-common/compose/getPresendingStream.js +39 -68
- package/src/platform-implementation-js/driver-common/getGmailMessageIdForSyncMessageId.js +14 -19
- package/src/platform-implementation-js/driver-common/getGmailThreadIdForRfcMessageId.js +27 -35
- package/src/platform-implementation-js/driver-common/getRfcMessageIdForSyncMessageId.js +16 -22
- package/src/platform-implementation-js/driver-common/getThreadIdFromMessageId.js +14 -14
- package/src/platform-implementation-js/driver-common/inboxAjax.js +12 -7
- package/src/platform-implementation-js/driver-common/requestGmailThread.js +19 -20
- package/src/platform-implementation-js/driver-common/sidebar/AppSidebar.js +197 -306
- package/src/platform-implementation-js/driver-common/sidebar/ContentPanelViewDriver.js +113 -161
- package/src/platform-implementation-js/driver-interfaces/compose-view-driver.js +1 -114
- package/src/platform-implementation-js/driver-interfaces/driver.js +1 -131
- package/src/platform-implementation-js/driver-interfaces/message-view-driver.js +4 -48
- package/src/platform-implementation-js/driver-interfaces/mole-view-driver.js +1 -29
- package/src/platform-implementation-js/driver-interfaces/route-view-driver.js +1 -32
- package/src/platform-implementation-js/driver-interfaces/thread-row-view-driver.js +1 -11
- package/src/platform-implementation-js/lib/array-to-lifetimes.js +43 -41
- package/src/platform-implementation-js/lib/array-to-lifetimes.test.js +139 -155
- package/src/platform-implementation-js/lib/copyAndValidateAutocompleteResults.js +19 -38
- package/src/platform-implementation-js/lib/css-selector-escape.js +7 -3
- package/src/platform-implementation-js/lib/dom/element-view-mapper.js +8 -11
- package/src/platform-implementation-js/lib/dom/get-selection.js +23 -52
- package/src/platform-implementation-js/lib/dom/insert-html-at-cursor.js +69 -101
- package/src/platform-implementation-js/lib/dom/is-node-in-range.js +8 -10
- package/src/platform-implementation-js/lib/dom/on-mouse-down-and-up.js +15 -17
- package/src/platform-implementation-js/lib/dom/querySelectorOne.js +8 -11
- package/src/platform-implementation-js/lib/dom/set-css.js +7 -3
- package/src/platform-implementation-js/lib/dom/set-value-and-dispatch-event.js +9 -11
- package/src/platform-implementation-js/lib/dom/simulate-drag-and-drop.js +32 -33
- package/src/platform-implementation-js/lib/extract-contact-from-email-contact-string.test.js +23 -26
- package/src/platform-implementation-js/lib/handle-compose-link-chips.js +86 -149
- package/src/platform-implementation-js/lib/insert-link-chip-into-body.js +42 -57
- package/src/platform-implementation-js/lib/make-revocable-function.js +19 -21
- package/src/platform-implementation-js/lib/make-revocable-function.test.js +20 -22
- package/src/platform-implementation-js/lib/parseParamsFromRouteID.js +15 -17
- package/src/platform-implementation-js/lib/parseParamsFromRouteID.test.js +9 -18
- package/src/platform-implementation-js/lib/populateRouteID.js +8 -9
- package/src/platform-implementation-js/lib/populateRouteID.test.js +20 -19
- package/src/platform-implementation-js/lib/react/ElementContainer.js +23 -20
- package/src/platform-implementation-js/lib/rewriteCssWithIdMap.js +10 -9
- package/src/platform-implementation-js/lib/rewriteCssWithIdMap.test.js +13 -20
- package/src/platform-implementation-js/lib/routeIDmatchesHash.js +13 -18
- package/src/platform-implementation-js/lib/routeIDmatchesHash.test.js +11 -17
- package/src/platform-implementation-js/lib/shared-style.js +14 -13
- package/src/platform-implementation-js/lib/toItemWithLifetimeStream.js +18 -17
- package/src/platform-implementation-js/lib/toLiveSet.js +17 -15
- package/src/platform-implementation-js/main-INTEGRATED-PAGEWORLD.js +6 -5
- package/src/platform-implementation-js/main.js +9 -24
- package/src/platform-implementation-js/namespaces/compose.js +37 -60
- package/src/platform-implementation-js/namespaces/conversations.js +52 -124
- package/src/platform-implementation-js/namespaces/global.js +27 -39
- package/src/platform-implementation-js/namespaces/keyboard.js +29 -33
- package/src/platform-implementation-js/namespaces/lists.js +25 -31
- package/src/platform-implementation-js/namespaces/modal.js +34 -28
- package/src/platform-implementation-js/namespaces/nav-menu.js +30 -45
- package/src/platform-implementation-js/namespaces/router.js +70 -137
- package/src/platform-implementation-js/namespaces/search.js +19 -17
- package/src/platform-implementation-js/namespaces/toolbars.js +71 -117
- package/src/platform-implementation-js/namespaces/user.js +36 -37
- package/src/platform-implementation-js/namespaces/widgets.js +54 -61
- package/src/platform-implementation-js/platform-implementation.js +98 -229
- package/src/platform-implementation-js/views/app-toolbar-button-view.js +26 -47
- package/src/platform-implementation-js/views/collapsible-section-view.js +66 -63
- package/src/platform-implementation-js/views/content-panel-view.js +28 -30
- package/src/platform-implementation-js/views/conversations/attachment-card-view.js +21 -44
- package/src/platform-implementation-js/views/conversations/custom-message-view.js +44 -104
- package/src/platform-implementation-js/views/conversations/message-view.js +131 -202
- package/src/platform-implementation-js/views/conversations/thread-view.js +75 -127
- package/src/platform-implementation-js/views/native-nav-item-view.js +32 -65
- package/src/platform-implementation-js/views/nav-item-view.js +51 -115
- package/src/platform-implementation-js/views/route-view/custom-route-view.js +25 -20
- package/src/platform-implementation-js/views/route-view/dummy-route-view-driver.js +18 -18
- package/src/platform-implementation-js/views/route-view/list-route-view.js +30 -52
- package/src/platform-implementation-js/views/route-view/route-view.js +24 -35
- package/src/platform-implementation-js/views/section-view.js +60 -52
- package/src/platform-implementation-js/views/thread-row-view.js +49 -74
- package/src/platform-implementation-js/widgets/drawer-view.js +29 -36
- package/src/platform-implementation-js/widgets/modal-view.js +39 -68
- package/src/platform-implementation-js/widgets/mole-view.js +22 -22
- package/src/platform-implementation-js/widgets/top-message-bar-view.js +13 -10
|
@@ -1,121 +1,69 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
|
+
var _constant = _interopRequireDefault(require("lodash/constant"));
|
|
10
|
+
var _asap = _interopRequireDefault(require("asap"));
|
|
11
|
+
var _pdelay = _interopRequireDefault(require("pdelay"));
|
|
12
|
+
var _ud = require("ud");
|
|
13
|
+
var _util = _interopRequireDefault(require("util"));
|
|
14
|
+
var _kefir = _interopRequireDefault(require("kefir"));
|
|
15
|
+
var _querystring = require("querystring");
|
|
16
|
+
var _kefirBus = _interopRequireDefault(require("kefir-bus"));
|
|
17
|
+
var _kefirStopper = _interopRequireDefault(require("kefir-stopper"));
|
|
18
|
+
var _findParent = _interopRequireDefault(require("../../../../common/find-parent"));
|
|
19
|
+
var _makeMutationObserverChunkedStream = _interopRequireDefault(require("../../../lib/dom/make-mutation-observer-chunked-stream"));
|
|
20
|
+
var _querySelectorOrFail = _interopRequireDefault(require("../../../lib/dom/querySelectorOrFail"));
|
|
21
|
+
var _idMap = _interopRequireDefault(require("../../../lib/idMap"));
|
|
22
|
+
var _SimpleElementView = _interopRequireDefault(require("../../../views/SimpleElementView"));
|
|
23
|
+
var _customMessageView = _interopRequireDefault(require("../../../views/conversations/custom-message-view"));
|
|
24
|
+
var _delayAsap = _interopRequireDefault(require("../../../lib/delay-asap"));
|
|
25
|
+
var _gmailElementGetter = _interopRequireDefault(require("../gmail-element-getter"));
|
|
26
|
+
var _gmailMessageView = _interopRequireDefault(require("./gmail-message-view"));
|
|
27
|
+
var _gmailToolbarView = _interopRequireDefault(require("./gmail-toolbar-view"));
|
|
28
|
+
var _gmailThreadSidebarView = _interopRequireDefault(require("./gmail-thread-sidebar-view"));
|
|
29
|
+
var _widthManager = _interopRequireDefault(require("./gmail-thread-view/width-manager"));
|
|
31
30
|
let hasLoggedAddonInfo = false;
|
|
32
|
-
|
|
33
31
|
class GmailThreadView {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
_readyStream: Kefir.Observable<any>;
|
|
47
|
-
_threadID: ?string;
|
|
48
|
-
_syncThreadID: ?string;
|
|
49
|
-
_customMessageViews: Set<CustomMessageView> = new Set();
|
|
50
|
-
_hiddenCustomMessageViews: Set<CustomMessageView> = new Set();
|
|
51
|
-
_hiddenCustomMessageNoticeProvider: ?(
|
|
52
|
-
numberCustomMessagesHidden: number,
|
|
53
|
-
numberNativeMessagesHidden: ?number,
|
|
54
|
-
unmountPromise: Promise<void>
|
|
55
|
-
) => ?HTMLElement;
|
|
56
|
-
_hiddenCustomMessageNoticeElement: ?HTMLElement;
|
|
57
|
-
_resolveUnmountHiddenNoticePromise: ?() => void;
|
|
58
|
-
|
|
59
|
-
constructor(
|
|
60
|
-
element: HTMLElement,
|
|
61
|
-
routeViewDriver: any,
|
|
62
|
-
driver: GmailDriver,
|
|
63
|
-
isPreviewedThread: boolean = false
|
|
64
|
-
) {
|
|
32
|
+
constructor(element, routeViewDriver, driver) {
|
|
33
|
+
let isPreviewedThread = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
34
|
+
(0, _defineProperty2.default)(this, "_stopper", (0, _kefirStopper.default)());
|
|
35
|
+
(0, _defineProperty2.default)(this, "_threadSidebar", null);
|
|
36
|
+
(0, _defineProperty2.default)(this, "_widthManager", null);
|
|
37
|
+
(0, _defineProperty2.default)(this, "_customMessageViews", new Set());
|
|
38
|
+
(0, _defineProperty2.default)(this, "_hiddenCustomMessageViews", new Set());
|
|
39
|
+
(0, _defineProperty2.default)(this, "_subjectContainerSelectors", {
|
|
40
|
+
'2022_10_21': '.a98.iY > .nH',
|
|
41
|
+
'2022_10_12': '.PeIF1d > .nH',
|
|
42
|
+
[2018]: '.if > .nH'
|
|
43
|
+
});
|
|
65
44
|
this._element = element;
|
|
66
45
|
this._routeViewDriver = routeViewDriver;
|
|
67
46
|
this._driver = driver;
|
|
68
47
|
this._isPreviewedThread = isPreviewedThread;
|
|
69
|
-
|
|
70
|
-
this._eventStream = kefirBus();
|
|
48
|
+
this._eventStream = (0, _kefirBus.default)();
|
|
71
49
|
this._messageViewDrivers = [];
|
|
72
|
-
|
|
73
|
-
this.
|
|
74
|
-
this._driver.getLogger().error(err)
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
const waitForSidebarReady = this._driver
|
|
78
|
-
.waitForGlobalSidebarReady()
|
|
79
|
-
.merge(
|
|
80
|
-
this._driver
|
|
81
|
-
.delayToTimeAfterReady(15 * 1000)
|
|
82
|
-
.flatMap(() =>
|
|
83
|
-
Kefir.constantError(
|
|
84
|
-
new Error('15 second timeout while waiting for sidebar fired')
|
|
85
|
-
)
|
|
86
|
-
)
|
|
87
|
-
)
|
|
88
|
-
.take(1)
|
|
89
|
-
.takeErrors(1)
|
|
90
|
-
.flatMapErrors((err) => {
|
|
91
|
-
this._driver.getLogger().error(err);
|
|
92
|
-
return Kefir.constant(null);
|
|
93
|
-
})
|
|
94
|
-
.toProperty();
|
|
95
|
-
|
|
50
|
+
this._logAddonElementInfo().catch(err => this._driver.getLogger().error(err));
|
|
51
|
+
const waitForSidebarReady = this._driver.waitForGlobalSidebarReady().merge(this._driver.delayToTimeAfterReady(15 * 1000).flatMap(() => _kefir.default.constantError(new Error('15 second timeout while waiting for sidebar fired')))).take(1).takeErrors(1).flatMapErrors(err => {
|
|
52
|
+
this._driver.getLogger().error(err);
|
|
53
|
+
return _kefir.default.constant(null);
|
|
54
|
+
}).toProperty();
|
|
96
55
|
let combinedReadyStream;
|
|
97
|
-
if (
|
|
98
|
-
|
|
99
|
-
driver.isUsingSyncAPI()
|
|
100
|
-
) {
|
|
101
|
-
combinedReadyStream = Kefir.combine([
|
|
102
|
-
waitForSidebarReady,
|
|
103
|
-
Kefir.fromPromise(this.getThreadIDAsync()),
|
|
104
|
-
]);
|
|
56
|
+
if (driver.getOpts().REQUESTED_API_VERSION === 1 && driver.isUsingSyncAPI()) {
|
|
57
|
+
combinedReadyStream = _kefir.default.combine([waitForSidebarReady, _kefir.default.fromPromise(this.getThreadIDAsync())]);
|
|
105
58
|
} else {
|
|
106
59
|
combinedReadyStream = waitForSidebarReady;
|
|
107
60
|
}
|
|
108
|
-
this._readyStream = combinedReadyStream
|
|
109
|
-
.
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
})
|
|
114
|
-
.takeUntilBy(this._stopper)
|
|
115
|
-
.toProperty();
|
|
116
|
-
|
|
61
|
+
this._readyStream = combinedReadyStream.map(() => {
|
|
62
|
+
this._setupToolbarView();
|
|
63
|
+
this._setupMessageViewStream();
|
|
64
|
+
return null;
|
|
65
|
+
}).takeUntilBy(this._stopper).toProperty();
|
|
117
66
|
this._listenToExpandCollapseAll();
|
|
118
|
-
|
|
119
67
|
this._stopper.take(1).onValue(() => {
|
|
120
68
|
if (this._resolveUnmountHiddenNoticePromise) {
|
|
121
69
|
this._resolveUnmountHiddenNoticePromise();
|
|
@@ -124,396 +72,231 @@ class GmailThreadView {
|
|
|
124
72
|
}
|
|
125
73
|
|
|
126
74
|
// TODO use livesets eventually
|
|
127
|
-
getMessageViewDriverStream()
|
|
128
|
-
return
|
|
129
|
-
.flatten()
|
|
130
|
-
.merge(
|
|
131
|
-
this._eventStream
|
|
132
|
-
.filter(
|
|
133
|
-
(event) =>
|
|
134
|
-
event.type === 'internal' && event.eventName === 'messageCreated'
|
|
135
|
-
)
|
|
136
|
-
.map((event) => event.view)
|
|
137
|
-
);
|
|
75
|
+
getMessageViewDriverStream() {
|
|
76
|
+
return _kefir.default.constant(this._messageViewDrivers).flatten().merge(this._eventStream.filter(event => event.type === 'internal' && event.eventName === 'messageCreated').map(event => event.view));
|
|
138
77
|
}
|
|
139
|
-
|
|
140
78
|
isLoadingStub() {
|
|
141
79
|
return false;
|
|
142
80
|
}
|
|
143
81
|
getStopper() {
|
|
144
82
|
return this._stopper;
|
|
145
83
|
}
|
|
146
|
-
getEventStream()
|
|
84
|
+
getEventStream() {
|
|
147
85
|
return this._eventStream;
|
|
148
86
|
}
|
|
149
|
-
getElement()
|
|
87
|
+
getElement() {
|
|
150
88
|
return this._element;
|
|
151
89
|
}
|
|
152
|
-
getRouteViewDriver()
|
|
90
|
+
getRouteViewDriver() {
|
|
153
91
|
return this._routeViewDriver;
|
|
154
92
|
}
|
|
155
|
-
getIsPreviewedThread()
|
|
93
|
+
getIsPreviewedThread() {
|
|
156
94
|
return this._isPreviewedThread;
|
|
157
95
|
}
|
|
158
|
-
getToolbarView()
|
|
96
|
+
getToolbarView() {
|
|
159
97
|
return this._toolbarView;
|
|
160
98
|
}
|
|
161
|
-
getMessageViewDrivers()
|
|
99
|
+
getMessageViewDrivers() {
|
|
162
100
|
return this._messageViewDrivers;
|
|
163
101
|
}
|
|
164
|
-
|
|
165
102
|
destroy() {
|
|
166
103
|
this._eventStream.end();
|
|
167
104
|
this._stopper.destroy();
|
|
168
105
|
if (this._toolbarView) this._toolbarView.destroy();
|
|
169
106
|
if (this._threadSidebar) this._threadSidebar.destroy();
|
|
170
|
-
|
|
171
|
-
this._messageViewDrivers.forEach((messageView) => {
|
|
107
|
+
this._messageViewDrivers.forEach(messageView => {
|
|
172
108
|
messageView.destroy();
|
|
173
109
|
});
|
|
174
110
|
this._messageViewDrivers.length = 0;
|
|
175
111
|
if (this._newMessageMutationObserver) {
|
|
176
112
|
this._newMessageMutationObserver.disconnect();
|
|
177
113
|
}
|
|
178
|
-
|
|
179
114
|
for (let customMessageView of this._customMessageViews) {
|
|
180
115
|
customMessageView.destroy();
|
|
181
116
|
}
|
|
182
117
|
}
|
|
183
|
-
|
|
184
|
-
addSidebarContentPanel(descriptor: Kefir.Observable<Object>) {
|
|
118
|
+
addSidebarContentPanel(descriptor) {
|
|
185
119
|
const sidebar = this._driver.getGlobalSidebar();
|
|
186
120
|
return sidebar.addThreadSidebarContentPanel(descriptor, this);
|
|
187
121
|
}
|
|
188
|
-
|
|
189
|
-
_subjectContainerSelectors = {
|
|
190
|
-
'2022_10_21': '.a98.iY > .nH',
|
|
191
|
-
'2022_10_12': '.PeIF1d > .nH',
|
|
192
|
-
[2018]: '.if > .nH',
|
|
193
|
-
};
|
|
194
|
-
|
|
195
|
-
addNoticeBar(): SimpleElementView {
|
|
122
|
+
addNoticeBar() {
|
|
196
123
|
const el = document.createElement('div');
|
|
197
|
-
el.className =
|
|
124
|
+
el.className = (0, _idMap.default)('thread_noticeBar');
|
|
198
125
|
let version;
|
|
199
126
|
let subjectContainer;
|
|
200
|
-
|
|
201
|
-
for (const [currentVersion, selector] of Object.entries(
|
|
202
|
-
this._subjectContainerSelectors
|
|
203
|
-
)) {
|
|
127
|
+
for (const [currentVersion, selector] of Object.entries(this._subjectContainerSelectors)) {
|
|
204
128
|
// Flow should be able to infer selector to be a string,
|
|
205
129
|
// Typescript can. Remove this when ported.
|
|
206
|
-
const el = this._element.querySelector(
|
|
130
|
+
const el = this._element.querySelector(selector);
|
|
207
131
|
if (!el) {
|
|
208
132
|
continue;
|
|
209
133
|
}
|
|
210
|
-
|
|
211
134
|
version = currentVersion;
|
|
212
135
|
subjectContainer = el;
|
|
213
136
|
break;
|
|
214
137
|
}
|
|
215
|
-
|
|
216
138
|
if (!subjectContainer) throw new Error('Failed to find subject container');
|
|
217
139
|
this._driver.getLogger().eventSdkPassive('addNoticeBar subjectContainer', {
|
|
218
|
-
version
|
|
140
|
+
version
|
|
219
141
|
});
|
|
220
142
|
subjectContainer.insertAdjacentElement('afterend', el);
|
|
221
|
-
const view = new
|
|
222
|
-
|
|
223
|
-
this._stopper
|
|
224
|
-
.takeUntilBy(Kefir.fromEvents(view, 'destroy'))
|
|
225
|
-
.onValue(() => view.destroy());
|
|
226
|
-
|
|
143
|
+
const view = new _SimpleElementView.default(el);
|
|
144
|
+
this._stopper.takeUntilBy(_kefir.default.fromEvents(view, 'destroy')).onValue(() => view.destroy());
|
|
227
145
|
return view;
|
|
228
146
|
}
|
|
229
|
-
|
|
230
|
-
registerHiddenCustomMessageNoticeProvider(
|
|
231
|
-
provider: (
|
|
232
|
-
numberCustomMessagesHidden: number,
|
|
233
|
-
numberNativeMessagesHidden: ?number,
|
|
234
|
-
unmountPromise: Promise<void>
|
|
235
|
-
) => HTMLElement
|
|
236
|
-
) {
|
|
147
|
+
registerHiddenCustomMessageNoticeProvider(provider) {
|
|
237
148
|
this._hiddenCustomMessageNoticeProvider = provider;
|
|
238
149
|
}
|
|
239
|
-
|
|
240
|
-
addCustomMessage(
|
|
241
|
-
descriptorStream: Kefir.Observable<CustomMessageDescriptor>
|
|
242
|
-
): CustomMessageView {
|
|
150
|
+
addCustomMessage(descriptorStream) {
|
|
243
151
|
const parentElement = this._element.parentElement;
|
|
244
152
|
if (!parentElement) throw new Error('missing parent element');
|
|
245
|
-
const customMessageView = new
|
|
246
|
-
this._readyStream.onValue(async ()
|
|
153
|
+
const customMessageView = new _customMessageView.default(descriptorStream, () => {
|
|
154
|
+
this._readyStream.onValue(async () => {
|
|
247
155
|
const messageContainer = this._element.querySelector('[role=list]');
|
|
248
156
|
if (!messageContainer) return;
|
|
249
|
-
|
|
250
157
|
let mostRecentDate = Number.MIN_SAFE_INTEGER;
|
|
251
158
|
let insertBeforeMessage;
|
|
252
|
-
|
|
253
159
|
let isInHidden = false;
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
.
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
cmv.getElement()
|
|
268
|
-
.parentElement /* it has been inserted into dom */
|
|
269
|
-
)
|
|
270
|
-
.map((cmv) => {
|
|
271
|
-
const date = cmv.getSortDate();
|
|
272
|
-
const datetime = date ? date.getTime() : null;
|
|
273
|
-
|
|
274
|
-
return {
|
|
275
|
-
sortDatetime: datetime || 0,
|
|
276
|
-
isHidden: cmv
|
|
277
|
-
.getElement()
|
|
278
|
-
.classList.contains('inboxsdk__custom_message_view_hidden'),
|
|
279
|
-
element: cmv.getElement(),
|
|
280
|
-
};
|
|
281
|
-
}),
|
|
282
|
-
].sort((a, b) => a.sortDatetime - b.sortDatetime);
|
|
283
|
-
|
|
160
|
+
const messages = [...(await Promise.all(this._messageViewDrivers.map(async messageView => ({
|
|
161
|
+
sortDatetime: (await messageView.getDate()) || 0,
|
|
162
|
+
isHidden: messageView.getViewState() === 'HIDDEN',
|
|
163
|
+
element: messageView.getElement()
|
|
164
|
+
})))), ...Array.from(this._customMessageViews).filter(cmv => cmv !== customMessageView && cmv.getElement().parentElement /* it has been inserted into dom */).map(cmv => {
|
|
165
|
+
const date = cmv.getSortDate();
|
|
166
|
+
const datetime = date ? date.getTime() : null;
|
|
167
|
+
return {
|
|
168
|
+
sortDatetime: datetime || 0,
|
|
169
|
+
isHidden: cmv.getElement().classList.contains('inboxsdk__custom_message_view_hidden'),
|
|
170
|
+
element: cmv.getElement()
|
|
171
|
+
};
|
|
172
|
+
})].sort((a, b) => a.sortDatetime - b.sortDatetime);
|
|
284
173
|
const messageDate = customMessageView.getSortDate();
|
|
285
174
|
if (!messageDate) return;
|
|
286
|
-
|
|
287
175
|
for (let message of messages) {
|
|
288
176
|
isInHidden = message.isHidden;
|
|
289
|
-
|
|
290
|
-
if (
|
|
291
|
-
messageDate.getTime() >= mostRecentDate &&
|
|
292
|
-
messageDate.getTime() <= message.sortDatetime
|
|
293
|
-
) {
|
|
177
|
+
if (messageDate.getTime() >= mostRecentDate && messageDate.getTime() <= message.sortDatetime) {
|
|
294
178
|
insertBeforeMessage = message.element;
|
|
295
179
|
break;
|
|
296
180
|
}
|
|
297
|
-
|
|
298
181
|
mostRecentDate = message.sortDatetime;
|
|
299
182
|
}
|
|
300
|
-
|
|
301
|
-
if (insertBeforeMessage)
|
|
302
|
-
insertBeforeMessage.insertAdjacentElement(
|
|
303
|
-
'beforebegin',
|
|
304
|
-
customMessageView.getElement()
|
|
305
|
-
);
|
|
306
|
-
else
|
|
307
|
-
messageContainer.insertAdjacentElement(
|
|
308
|
-
'beforeend',
|
|
309
|
-
customMessageView.getElement()
|
|
310
|
-
);
|
|
311
|
-
|
|
183
|
+
if (insertBeforeMessage) insertBeforeMessage.insertAdjacentElement('beforebegin', customMessageView.getElement());else messageContainer.insertAdjacentElement('beforeend', customMessageView.getElement());
|
|
312
184
|
if (isInHidden) {
|
|
313
185
|
this._setupHiddenCustomMessage(customMessageView);
|
|
314
186
|
}
|
|
315
|
-
|
|
316
187
|
parentElement.classList.add('inboxsdk__thread_view_with_custom_view');
|
|
317
188
|
});
|
|
318
189
|
});
|
|
319
|
-
|
|
320
190
|
this._customMessageViews.add(customMessageView);
|
|
321
191
|
customMessageView.on('destroy', () => {
|
|
322
192
|
this._customMessageViews.delete(customMessageView);
|
|
323
|
-
if (this._customMessageViews.size > 0)
|
|
324
|
-
parentElement.classList.add('inboxsdk__thread_view_with_custom_view');
|
|
325
|
-
else
|
|
326
|
-
parentElement.classList.remove(
|
|
327
|
-
'inboxsdk__thread_view_with_custom_view'
|
|
328
|
-
);
|
|
193
|
+
if (this._customMessageViews.size > 0) parentElement.classList.add('inboxsdk__thread_view_with_custom_view');else parentElement.classList.remove('inboxsdk__thread_view_with_custom_view');
|
|
329
194
|
});
|
|
330
|
-
|
|
331
195
|
return customMessageView;
|
|
332
196
|
}
|
|
333
|
-
|
|
334
|
-
_setupHiddenCustomMessage(customMessageView: CustomMessageView) {
|
|
197
|
+
_setupHiddenCustomMessage(customMessageView) {
|
|
335
198
|
this._hiddenCustomMessageViews.add(customMessageView);
|
|
336
199
|
|
|
337
200
|
// hide the element
|
|
338
|
-
customMessageView
|
|
339
|
-
.getElement()
|
|
340
|
-
.classList.add('inboxsdk__custom_message_view_hidden');
|
|
201
|
+
customMessageView.getElement().classList.add('inboxsdk__custom_message_view_hidden');
|
|
341
202
|
|
|
342
203
|
// get the message element that contains the hidden messages notice
|
|
343
204
|
let hiddenNoticeMessageElement = this._element.querySelector('.adv');
|
|
344
205
|
let nativeHiddenNoticePresent = true;
|
|
345
206
|
if (!hiddenNoticeMessageElement) {
|
|
346
207
|
nativeHiddenNoticePresent = false;
|
|
347
|
-
const superCollapsedMessageElements = Array.from(
|
|
348
|
-
this._element.querySelectorAll('.kQ')
|
|
349
|
-
);
|
|
208
|
+
const superCollapsedMessageElements = Array.from(this._element.querySelectorAll('.kQ'));
|
|
350
209
|
if (superCollapsedMessageElements.length < 2) return;
|
|
351
|
-
|
|
352
210
|
hiddenNoticeMessageElement = superCollapsedMessageElements[1];
|
|
353
211
|
}
|
|
354
212
|
|
|
355
213
|
// listen for a class change on that message which occurs when it becomes visible
|
|
356
|
-
|
|
214
|
+
(0, _makeMutationObserverChunkedStream.default)(hiddenNoticeMessageElement, {
|
|
357
215
|
attributes: true,
|
|
358
|
-
attributeFilter: ['class']
|
|
359
|
-
})
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
) //when kQ is gone, message is visible
|
|
371
|
-
.onValue(() => {
|
|
372
|
-
customMessageView
|
|
373
|
-
.getElement()
|
|
374
|
-
.classList.remove('inboxsdk__custom_message_view_hidden');
|
|
375
|
-
if (this._hiddenCustomMessageNoticeElement)
|
|
376
|
-
this._hiddenCustomMessageNoticeElement.remove();
|
|
377
|
-
this._hiddenCustomMessageNoticeElement = null;
|
|
378
|
-
});
|
|
379
|
-
|
|
380
|
-
this._updateHiddenNotice(
|
|
381
|
-
hiddenNoticeMessageElement,
|
|
382
|
-
nativeHiddenNoticePresent
|
|
383
|
-
);
|
|
384
|
-
|
|
385
|
-
Kefir.fromEvents(customMessageView, 'destroy')
|
|
386
|
-
.takeUntilBy(this._stopper)
|
|
387
|
-
.take(1)
|
|
388
|
-
.onValue(() => {
|
|
389
|
-
this._hiddenCustomMessageViews.delete(customMessageView);
|
|
390
|
-
if (hiddenNoticeMessageElement)
|
|
391
|
-
this._updateHiddenNotice(
|
|
392
|
-
hiddenNoticeMessageElement,
|
|
393
|
-
nativeHiddenNoticePresent
|
|
394
|
-
);
|
|
395
|
-
});
|
|
216
|
+
attributeFilter: ['class']
|
|
217
|
+
}).takeUntilBy(_kefir.default.merge([this._stopper, _kefir.default.fromEvents(customMessageView, 'destroy')])).filter(() => hiddenNoticeMessageElement && !hiddenNoticeMessageElement.classList.contains('kQ')) //when kQ is gone, message is visible
|
|
218
|
+
.onValue(() => {
|
|
219
|
+
customMessageView.getElement().classList.remove('inboxsdk__custom_message_view_hidden');
|
|
220
|
+
if (this._hiddenCustomMessageNoticeElement) this._hiddenCustomMessageNoticeElement.remove();
|
|
221
|
+
this._hiddenCustomMessageNoticeElement = null;
|
|
222
|
+
});
|
|
223
|
+
this._updateHiddenNotice(hiddenNoticeMessageElement, nativeHiddenNoticePresent);
|
|
224
|
+
_kefir.default.fromEvents(customMessageView, 'destroy').takeUntilBy(this._stopper).take(1).onValue(() => {
|
|
225
|
+
this._hiddenCustomMessageViews.delete(customMessageView);
|
|
226
|
+
if (hiddenNoticeMessageElement) this._updateHiddenNotice(hiddenNoticeMessageElement, nativeHiddenNoticePresent);
|
|
227
|
+
});
|
|
396
228
|
}
|
|
397
|
-
|
|
398
|
-
_updateHiddenNotice(
|
|
399
|
-
hiddenNoticeMessageElement: HTMLElement,
|
|
400
|
-
nativeHiddenNoticePresent: boolean
|
|
401
|
-
) {
|
|
229
|
+
_updateHiddenNotice(hiddenNoticeMessageElement, nativeHiddenNoticePresent) {
|
|
402
230
|
const existingAppNoticeElement = this._hiddenCustomMessageNoticeElement;
|
|
403
231
|
if (existingAppNoticeElement) {
|
|
404
232
|
existingAppNoticeElement.remove();
|
|
405
233
|
this._hiddenCustomMessageNoticeElement = null;
|
|
406
|
-
|
|
407
|
-
if (this._resolveUnmountHiddenNoticePromise)
|
|
408
|
-
this._resolveUnmountHiddenNoticePromise();
|
|
234
|
+
if (this._resolveUnmountHiddenNoticePromise) this._resolveUnmountHiddenNoticePromise();
|
|
409
235
|
}
|
|
410
|
-
|
|
411
236
|
const noticeProvider = this._hiddenCustomMessageNoticeProvider;
|
|
412
237
|
if (!noticeProvider) return;
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
document.createElement('span'));
|
|
416
|
-
appNoticeContainerElement.classList.add(
|
|
417
|
-
'inboxsdk__custom_message_view_app_notice_content'
|
|
418
|
-
);
|
|
419
|
-
|
|
238
|
+
const appNoticeContainerElement = this._hiddenCustomMessageNoticeElement = document.createElement('span');
|
|
239
|
+
appNoticeContainerElement.classList.add('inboxsdk__custom_message_view_app_notice_content');
|
|
420
240
|
const numberCustomHiddenMessages = this._hiddenCustomMessageViews.size;
|
|
421
|
-
|
|
422
241
|
let numberNativeHiddenMessages = null;
|
|
423
242
|
if (nativeHiddenNoticePresent) {
|
|
424
|
-
const nativeHiddenNoticeCountSpan =
|
|
425
|
-
|
|
426
|
-
'.adx span'
|
|
427
|
-
);
|
|
428
|
-
numberNativeHiddenMessages = Number(
|
|
429
|
-
nativeHiddenNoticeCountSpan.innerHTML
|
|
430
|
-
);
|
|
243
|
+
const nativeHiddenNoticeCountSpan = (0, _querySelectorOrFail.default)(hiddenNoticeMessageElement, '.adx span');
|
|
244
|
+
numberNativeHiddenMessages = Number(nativeHiddenNoticeCountSpan.innerHTML);
|
|
431
245
|
if (isNaN(numberNativeHiddenMessages)) {
|
|
432
|
-
throw new Error(
|
|
433
|
-
"Couldn't find number of native hidden messages in dom structure"
|
|
434
|
-
);
|
|
246
|
+
throw new Error("Couldn't find number of native hidden messages in dom structure");
|
|
435
247
|
}
|
|
436
248
|
}
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
numberNativeHiddenMessages,
|
|
441
|
-
new Promise((resolve) => {
|
|
442
|
-
this._resolveUnmountHiddenNoticePromise = resolve;
|
|
443
|
-
})
|
|
444
|
-
);
|
|
249
|
+
const appNoticeElement = noticeProvider(numberCustomHiddenMessages, numberNativeHiddenMessages, new Promise(resolve => {
|
|
250
|
+
this._resolveUnmountHiddenNoticePromise = resolve;
|
|
251
|
+
}));
|
|
445
252
|
if (!appNoticeElement) {
|
|
446
253
|
return;
|
|
447
254
|
}
|
|
448
255
|
appNoticeContainerElement.appendChild(appNoticeElement);
|
|
449
|
-
|
|
450
256
|
if (!nativeHiddenNoticePresent) {
|
|
451
257
|
const fakeAppNoticeElement = document.createElement('span');
|
|
452
258
|
fakeAppNoticeElement.classList.add('adx');
|
|
453
|
-
|
|
454
|
-
const insertionPoint = querySelector(hiddenNoticeMessageElement, '.G3');
|
|
259
|
+
const insertionPoint = (0, _querySelectorOrFail.default)(hiddenNoticeMessageElement, '.G3');
|
|
455
260
|
insertionPoint.appendChild(fakeAppNoticeElement);
|
|
456
261
|
}
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
hiddenNoticeMessageElement,
|
|
460
|
-
'.adx'
|
|
461
|
-
);
|
|
462
|
-
hiddenNoticeElement.classList.add(
|
|
463
|
-
'inboxsdk__custom_message_view_app_notice_container'
|
|
464
|
-
);
|
|
262
|
+
const hiddenNoticeElement = (0, _querySelectorOrFail.default)(hiddenNoticeMessageElement, '.adx');
|
|
263
|
+
hiddenNoticeElement.classList.add('inboxsdk__custom_message_view_app_notice_container');
|
|
465
264
|
hiddenNoticeElement.appendChild(appNoticeContainerElement);
|
|
466
265
|
}
|
|
467
|
-
|
|
468
|
-
getSubject(): string {
|
|
266
|
+
getSubject() {
|
|
469
267
|
var subjectElement = this._element.querySelector('.ha h2');
|
|
470
268
|
if (!subjectElement) {
|
|
471
269
|
return '';
|
|
472
270
|
}
|
|
473
|
-
|
|
474
271
|
if (subjectElement.querySelector('img[data-emoji]')) {
|
|
475
|
-
return Array.from(subjectElement.childNodes)
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
}
|
|
485
|
-
})
|
|
486
|
-
.filter((x) => x != null)
|
|
487
|
-
.join('');
|
|
272
|
+
return Array.from(subjectElement.childNodes).map(c => {
|
|
273
|
+
if (c instanceof HTMLElement && c.nodeName === 'IMG') {
|
|
274
|
+
const maybeEmoji = c.getAttribute('data-emoji');
|
|
275
|
+
return maybeEmoji;
|
|
276
|
+
}
|
|
277
|
+
if (c.nodeName === '#text') {
|
|
278
|
+
return c.wholeText;
|
|
279
|
+
}
|
|
280
|
+
}).filter(x => x != null).join('');
|
|
488
281
|
}
|
|
489
|
-
|
|
490
282
|
return subjectElement.textContent;
|
|
491
283
|
}
|
|
492
|
-
|
|
493
|
-
getInternalID(): string {
|
|
284
|
+
getInternalID() {
|
|
494
285
|
return this._syncThreadID || this.getThreadID();
|
|
495
286
|
}
|
|
496
287
|
|
|
497
288
|
// Follows a similar structure to getThreadIDAsync, but gives up if async work is needed
|
|
498
|
-
getThreadID()
|
|
289
|
+
getThreadID() {
|
|
499
290
|
if (this._threadID) return this._threadID;
|
|
500
|
-
|
|
501
291
|
let threadID;
|
|
502
292
|
if (this._driver.isUsingSyncAPI()) {
|
|
503
293
|
const idElement = this._element.querySelector('[data-thread-perm-id]');
|
|
504
294
|
if (!idElement) throw new Error('threadID element not found');
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
'data-thread-perm-id'
|
|
508
|
-
));
|
|
509
|
-
if (!syncThreadID)
|
|
510
|
-
throw new Error('syncThreadID attribute with no value');
|
|
511
|
-
|
|
295
|
+
const syncThreadID = this._syncThreadID = idElement.getAttribute('data-thread-perm-id');
|
|
296
|
+
if (!syncThreadID) throw new Error('syncThreadID attribute with no value');
|
|
512
297
|
threadID = idElement.getAttribute('data-legacy-thread-id');
|
|
513
298
|
if (!threadID) {
|
|
514
|
-
const err = new Error(
|
|
515
|
-
'Failed to get id for thread: data-legacy-thread-id attribute missing'
|
|
516
|
-
);
|
|
299
|
+
const err = new Error('Failed to get id for thread: data-legacy-thread-id attribute missing');
|
|
517
300
|
this._driver.getLogger().error(err);
|
|
518
301
|
// throw err;
|
|
519
302
|
// Fall back to old behavior instead of throwing. Probably not super sensible, but
|
|
@@ -521,16 +304,12 @@ class GmailThreadView {
|
|
|
521
304
|
// probably an okay choice.
|
|
522
305
|
}
|
|
523
306
|
}
|
|
307
|
+
|
|
524
308
|
if (!threadID) {
|
|
525
309
|
if (this._isPreviewedThread) {
|
|
526
|
-
threadID = this._driver
|
|
527
|
-
.getPageCommunicator()
|
|
528
|
-
.getCurrentThreadID(this._element, true);
|
|
310
|
+
threadID = this._driver.getPageCommunicator().getCurrentThreadID(this._element, true);
|
|
529
311
|
} else {
|
|
530
|
-
const params = this._routeViewDriver
|
|
531
|
-
? this._routeViewDriver.getParams()
|
|
532
|
-
: null;
|
|
533
|
-
|
|
312
|
+
const params = this._routeViewDriver ? this._routeViewDriver.getParams() : null;
|
|
534
313
|
if (params && params.threadID) {
|
|
535
314
|
threadID = params.threadID;
|
|
536
315
|
} else {
|
|
@@ -540,40 +319,25 @@ class GmailThreadView {
|
|
|
540
319
|
}
|
|
541
320
|
}
|
|
542
321
|
}
|
|
543
|
-
|
|
544
322
|
this._threadID = threadID;
|
|
545
323
|
return threadID;
|
|
546
324
|
}
|
|
547
|
-
|
|
548
|
-
async getThreadIDAsync(): Promise<string> {
|
|
325
|
+
async getThreadIDAsync() {
|
|
549
326
|
let threadID;
|
|
550
327
|
if (this._driver.isUsingSyncAPI()) {
|
|
551
328
|
const idElement = this._element.querySelector('[data-thread-perm-id]');
|
|
552
329
|
if (!idElement) throw new Error('threadID element not found');
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
));
|
|
557
|
-
if (!syncThreadID)
|
|
558
|
-
throw new Error('syncThreadID attribute with no value');
|
|
559
|
-
|
|
560
|
-
this._threadID = threadID = idElement.getAttribute(
|
|
561
|
-
'data-legacy-thread-id'
|
|
562
|
-
);
|
|
330
|
+
const syncThreadID = this._syncThreadID = idElement.getAttribute('data-thread-perm-id');
|
|
331
|
+
if (!syncThreadID) throw new Error('syncThreadID attribute with no value');
|
|
332
|
+
this._threadID = threadID = idElement.getAttribute('data-legacy-thread-id');
|
|
563
333
|
if (!threadID) {
|
|
564
|
-
this._threadID = threadID =
|
|
565
|
-
await this._driver.getOldGmailThreadIdFromSyncThreadId(syncThreadID);
|
|
334
|
+
this._threadID = threadID = await this._driver.getOldGmailThreadIdFromSyncThreadId(syncThreadID);
|
|
566
335
|
}
|
|
567
336
|
} else {
|
|
568
337
|
if (this._isPreviewedThread) {
|
|
569
|
-
threadID = this._driver
|
|
570
|
-
.getPageCommunicator()
|
|
571
|
-
.getCurrentThreadID(this._element, true);
|
|
338
|
+
threadID = this._driver.getPageCommunicator().getCurrentThreadID(this._element, true);
|
|
572
339
|
} else {
|
|
573
|
-
const params = this._routeViewDriver
|
|
574
|
-
? this._routeViewDriver.getParams()
|
|
575
|
-
: null;
|
|
576
|
-
|
|
340
|
+
const params = this._routeViewDriver ? this._routeViewDriver.getParams() : null;
|
|
577
341
|
if (params && params.threadID) {
|
|
578
342
|
threadID = params.threadID;
|
|
579
343
|
} else {
|
|
@@ -582,133 +346,73 @@ class GmailThreadView {
|
|
|
582
346
|
throw err;
|
|
583
347
|
}
|
|
584
348
|
}
|
|
585
|
-
|
|
586
349
|
this._threadID = threadID;
|
|
587
350
|
}
|
|
588
|
-
|
|
589
|
-
if (this._threadID) return this._threadID;
|
|
590
|
-
else throw new Error('Failed to get id for thread');
|
|
351
|
+
if (this._threadID) return this._threadID;else throw new Error('Failed to get id for thread');
|
|
591
352
|
}
|
|
592
|
-
|
|
593
|
-
addLabel(): SimpleElementView {
|
|
353
|
+
addLabel() {
|
|
594
354
|
const labelContainer = this._element.querySelector('.ha .J-J5-Ji');
|
|
595
355
|
if (!labelContainer) {
|
|
596
356
|
throw new Error('Thread view label container not found');
|
|
597
357
|
}
|
|
598
358
|
const el = document.createElement('span');
|
|
599
|
-
|
|
600
359
|
labelContainer.appendChild(el);
|
|
601
|
-
const view = new
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
if (
|
|
605
|
-
mutationsList.some(
|
|
606
|
-
(mutation) =>
|
|
607
|
-
mutation.type === 'childList' &&
|
|
608
|
-
mutation.removedNodes &&
|
|
609
|
-
mutation.removedNodes.length &&
|
|
610
|
-
mutation.removedNodes.length > 0
|
|
611
|
-
)
|
|
612
|
-
) {
|
|
360
|
+
const view = new _SimpleElementView.default(el);
|
|
361
|
+
const observer = new MutationObserver(mutationsList => {
|
|
362
|
+
if (mutationsList.some(mutation => mutation.type === 'childList' && mutation.removedNodes && mutation.removedNodes.length && mutation.removedNodes.length > 0)) {
|
|
613
363
|
if (!labelContainer.contains(el)) {
|
|
614
364
|
labelContainer.appendChild(el);
|
|
615
365
|
}
|
|
616
366
|
}
|
|
617
367
|
});
|
|
618
|
-
observer.observe(labelContainer, {
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
.take(1)
|
|
626
|
-
.onValue(() => {
|
|
627
|
-
observer.disconnect();
|
|
628
|
-
});
|
|
629
|
-
|
|
368
|
+
observer.observe(labelContainer, {
|
|
369
|
+
childList: true
|
|
370
|
+
});
|
|
371
|
+
this._stopper.takeUntilBy(_kefir.default.fromEvents(view, 'destroy')).onValue(() => view.destroy());
|
|
372
|
+
_kefir.default.fromEvents(view, 'destroy').take(1).onValue(() => {
|
|
373
|
+
observer.disconnect();
|
|
374
|
+
});
|
|
630
375
|
return view;
|
|
631
376
|
}
|
|
632
|
-
|
|
633
377
|
_setupToolbarView() {
|
|
634
378
|
const toolbarElement = this._findToolbarElement();
|
|
635
379
|
if (!toolbarElement) throw new Error('No toolbar element found');
|
|
636
380
|
const toolbarParent = toolbarElement.parentElement;
|
|
637
|
-
if (toolbarParent)
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
this._toolbarView = new GmailToolbarView(
|
|
641
|
-
toolbarElement,
|
|
642
|
-
this._driver,
|
|
643
|
-
this._routeViewDriver,
|
|
644
|
-
this
|
|
645
|
-
);
|
|
381
|
+
if (toolbarParent) toolbarParent.classList.add('inboxsdk__thread_toolbar_parent');
|
|
382
|
+
this._toolbarView = new _gmailToolbarView.default(toolbarElement, this._driver, this._routeViewDriver, this);
|
|
646
383
|
}
|
|
647
|
-
|
|
648
|
-
_findToolbarElement(): ?HTMLElement {
|
|
384
|
+
_findToolbarElement() {
|
|
649
385
|
var toolbarContainerElements = document.querySelectorAll('[gh=tm]');
|
|
650
386
|
for (var ii = 0; ii < toolbarContainerElements.length; ii++) {
|
|
651
387
|
if (this._isToolbarContainerRelevant(toolbarContainerElements[ii])) {
|
|
652
388
|
return toolbarContainerElements[ii].querySelector('[gh=mtb]');
|
|
653
389
|
}
|
|
654
390
|
}
|
|
655
|
-
|
|
656
391
|
return null;
|
|
657
392
|
}
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
if (
|
|
661
|
-
(toolbarContainerElement: any).parentElement.parentElement ===
|
|
662
|
-
(this._element: any).parentElement.parentElement
|
|
663
|
-
) {
|
|
393
|
+
_isToolbarContainerRelevant(toolbarContainerElement) {
|
|
394
|
+
if (toolbarContainerElement.parentElement.parentElement === this._element.parentElement.parentElement) {
|
|
664
395
|
return true;
|
|
665
396
|
}
|
|
666
|
-
|
|
667
|
-
if (
|
|
668
|
-
(toolbarContainerElement: any).parentElement.getAttribute('role') !==
|
|
669
|
-
'main' &&
|
|
670
|
-
(this._element: any).parentElement.getAttribute('role') !== 'main'
|
|
671
|
-
) {
|
|
397
|
+
if (toolbarContainerElement.parentElement.getAttribute('role') !== 'main' && this._element.parentElement.getAttribute('role') !== 'main') {
|
|
672
398
|
return true;
|
|
673
399
|
}
|
|
674
|
-
|
|
675
|
-
if (
|
|
676
|
-
(toolbarContainerElement: any).parentElement.getAttribute('role') ===
|
|
677
|
-
'main' &&
|
|
678
|
-
(toolbarContainerElement: any).parentElement.querySelector(
|
|
679
|
-
'.if, .PeIF1d, .a98.iY'
|
|
680
|
-
) &&
|
|
681
|
-
(toolbarContainerElement: any).parentElement.querySelector(
|
|
682
|
-
'.if, .PeIF1d, .a98.iY'
|
|
683
|
-
).parentElement === this._element
|
|
684
|
-
) {
|
|
400
|
+
if (toolbarContainerElement.parentElement.getAttribute('role') === 'main' && toolbarContainerElement.parentElement.querySelector('.if, .PeIF1d, .a98.iY') && toolbarContainerElement.parentElement.querySelector('.if, .PeIF1d, .a98.iY').parentElement === this._element) {
|
|
685
401
|
let version = '2018';
|
|
686
|
-
|
|
687
|
-
if (
|
|
688
|
-
(toolbarContainerElement: any).parentElement.querySelector('.a98.iY')
|
|
689
|
-
) {
|
|
402
|
+
if (toolbarContainerElement.parentElement.querySelector('.a98.iY')) {
|
|
690
403
|
version = '2022-10-20';
|
|
691
|
-
} else if (
|
|
692
|
-
(toolbarContainerElement: any).parentElement.querySelector('.PeIF1d')
|
|
693
|
-
) {
|
|
404
|
+
} else if (toolbarContainerElement.parentElement.querySelector('.PeIF1d')) {
|
|
694
405
|
version = '2022-10-12';
|
|
695
406
|
}
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
.eventSdkPassive('gmailThreadView_isToolbarContainerRelevant', {
|
|
700
|
-
version,
|
|
701
|
-
});
|
|
702
|
-
|
|
407
|
+
this._driver.getLogger().eventSdkPassive('gmailThreadView_isToolbarContainerRelevant', {
|
|
408
|
+
version
|
|
409
|
+
});
|
|
703
410
|
return true;
|
|
704
411
|
}
|
|
705
|
-
|
|
706
412
|
return false;
|
|
707
413
|
}
|
|
708
|
-
|
|
709
414
|
_setupMessageViewStream() {
|
|
710
415
|
var openMessage = this._element.querySelector('.h7');
|
|
711
|
-
|
|
712
416
|
if (!openMessage) {
|
|
713
417
|
var self = this;
|
|
714
418
|
setTimeout(function () {
|
|
@@ -718,176 +422,117 @@ class GmailThreadView {
|
|
|
718
422
|
}, 500);
|
|
719
423
|
return;
|
|
720
424
|
}
|
|
721
|
-
|
|
722
|
-
var messageContainer: HTMLElement = (openMessage.parentElement: any);
|
|
723
|
-
|
|
425
|
+
var messageContainer = openMessage.parentElement;
|
|
724
426
|
this._initializeExistingMessages(messageContainer);
|
|
725
427
|
this._observeNewMessages(messageContainer);
|
|
726
428
|
}
|
|
727
|
-
|
|
728
|
-
_initializeExistingMessages(messageContainer: any) {
|
|
429
|
+
_initializeExistingMessages(messageContainer) {
|
|
729
430
|
var self = this;
|
|
730
431
|
var children = messageContainer.children;
|
|
731
432
|
Array.prototype.forEach.call(children, function (childElement) {
|
|
732
433
|
self._createMessageView(childElement);
|
|
733
434
|
});
|
|
734
435
|
}
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
this._newMessageMutationObserver = (new MutationObserver(
|
|
738
|
-
this._handleNewMessageMutations.bind(this)
|
|
739
|
-
): any);
|
|
436
|
+
_observeNewMessages(messageContainer) {
|
|
437
|
+
this._newMessageMutationObserver = new MutationObserver(this._handleNewMessageMutations.bind(this));
|
|
740
438
|
this._newMessageMutationObserver.observe(messageContainer, {
|
|
741
|
-
childList: true
|
|
439
|
+
childList: true
|
|
742
440
|
});
|
|
743
441
|
}
|
|
744
|
-
|
|
745
|
-
_handleNewMessageMutations(mutations: MutationRecord[]) {
|
|
442
|
+
_handleNewMessageMutations(mutations) {
|
|
746
443
|
var self = this;
|
|
747
444
|
mutations.forEach(function (mutation) {
|
|
748
445
|
Array.prototype.forEach.call(mutation.addedNodes, function (addedNode) {
|
|
749
|
-
if (!addedNode.classList.contains('inboxsdk__custom_message_view'))
|
|
750
|
-
self._createMessageView(addedNode);
|
|
446
|
+
if (!addedNode.classList.contains('inboxsdk__custom_message_view')) self._createMessageView(addedNode);
|
|
751
447
|
});
|
|
752
448
|
});
|
|
753
449
|
}
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
var messageView = new GmailMessageView(messageElement, this, this._driver);
|
|
757
|
-
|
|
450
|
+
_createMessageView(messageElement) {
|
|
451
|
+
var messageView = new _gmailMessageView.default(messageElement, this, this._driver);
|
|
758
452
|
this._eventStream.plug(messageView.getEventStream());
|
|
759
|
-
|
|
760
453
|
this._messageViewDrivers.push(messageView);
|
|
761
454
|
this._eventStream.emit({
|
|
762
455
|
type: 'internal',
|
|
763
456
|
eventName: 'messageCreated',
|
|
764
|
-
view: messageView
|
|
457
|
+
view: messageView
|
|
765
458
|
});
|
|
766
459
|
}
|
|
767
|
-
|
|
768
460
|
_setupWidthManager() {
|
|
769
461
|
let widthManager = this._widthManager;
|
|
770
462
|
if (!widthManager) {
|
|
771
|
-
const addonSidebarElement =
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
const mainContentBodyContainerElement =
|
|
777
|
-
GmailElementGetter.getMainContentBodyContainerElement();
|
|
778
|
-
if (!mainContentBodyContainerElement)
|
|
779
|
-
throw new Error('mainContentBodyContainerElement not found');
|
|
463
|
+
const addonSidebarElement = _gmailElementGetter.default.getAddonSidebarContainerElement();
|
|
464
|
+
if (!addonSidebarElement) throw new Error('addonSidebarElement not found');
|
|
465
|
+
const mainContentBodyContainerElement = _gmailElementGetter.default.getMainContentBodyContainerElement();
|
|
466
|
+
if (!mainContentBodyContainerElement) throw new Error('mainContentBodyContainerElement not found');
|
|
780
467
|
const contentContainer = mainContentBodyContainerElement.parentElement;
|
|
781
|
-
if (!contentContainer)
|
|
782
|
-
|
|
783
|
-
'mainContentBodyContainerElement has no parent element'
|
|
784
|
-
);
|
|
785
|
-
|
|
786
|
-
this._widthManager = widthManager = new WidthManager(
|
|
787
|
-
(contentContainer: any),
|
|
788
|
-
addonSidebarElement
|
|
789
|
-
);
|
|
468
|
+
if (!contentContainer) throw new Error('mainContentBodyContainerElement has no parent element');
|
|
469
|
+
this._widthManager = widthManager = new _widthManager.default(contentContainer, addonSidebarElement);
|
|
790
470
|
}
|
|
791
|
-
|
|
792
471
|
return widthManager;
|
|
793
472
|
}
|
|
794
|
-
|
|
795
473
|
getReadyStream() {
|
|
796
474
|
return this._readyStream;
|
|
797
475
|
}
|
|
798
|
-
|
|
799
476
|
async _logAddonElementInfo() {
|
|
800
477
|
if (hasLoggedAddonInfo) return;
|
|
801
|
-
|
|
802
478
|
function readInfo() {
|
|
803
|
-
const container =
|
|
479
|
+
const container = _gmailElementGetter.default.getAddonSidebarContainerElement();
|
|
804
480
|
if (!container) return null;
|
|
805
|
-
|
|
806
481
|
const isDisplayNone = {
|
|
807
|
-
parent: container.parentElement
|
|
808
|
-
? (container.parentElement: any).style.display === 'none'
|
|
809
|
-
: null,
|
|
482
|
+
parent: container.parentElement ? container.parentElement.style.display === 'none' : null,
|
|
810
483
|
self: container.style.display === 'none',
|
|
811
|
-
children: Array.from(container.children).map(
|
|
812
|
-
el.style ? el.style.display === 'none' : null
|
|
813
|
-
),
|
|
484
|
+
children: Array.from(container.children).map(el => el.style ? el.style.display === 'none' : null)
|
|
814
485
|
};
|
|
815
|
-
|
|
816
486
|
const rect = container.getBoundingClientRect();
|
|
817
487
|
const size = {
|
|
818
488
|
width: rect.width,
|
|
819
|
-
height: rect.height
|
|
489
|
+
height: rect.height
|
|
490
|
+
};
|
|
491
|
+
return {
|
|
492
|
+
isDisplayNone,
|
|
493
|
+
size
|
|
820
494
|
};
|
|
821
|
-
return { isDisplayNone, size };
|
|
822
495
|
}
|
|
823
|
-
|
|
824
|
-
|
|
496
|
+
const eventData = {
|
|
497
|
+
time: {}
|
|
498
|
+
};
|
|
825
499
|
eventData.time[0] = readInfo();
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
eventData.time[time] = readInfo();
|
|
832
|
-
})
|
|
833
|
-
);
|
|
500
|
+
await Promise.all([30, 5000].map(async time => {
|
|
501
|
+
await (0, _pdelay.default)(time);
|
|
502
|
+
if (this._stopper.stopped) return;
|
|
503
|
+
eventData.time[time] = readInfo();
|
|
504
|
+
}));
|
|
834
505
|
if (this._stopper.stopped) return;
|
|
835
|
-
|
|
836
|
-
this._driver
|
|
837
|
-
.getLogger()
|
|
838
|
-
.eventSdkPassive('gmailSidebarElementInfo', eventData);
|
|
839
|
-
|
|
506
|
+
this._driver.getLogger().eventSdkPassive('gmailSidebarElementInfo', eventData);
|
|
840
507
|
hasLoggedAddonInfo = true;
|
|
841
508
|
}
|
|
842
|
-
|
|
843
509
|
_listenToExpandCollapseAll() {
|
|
844
510
|
//expand all
|
|
845
511
|
const expandAllElementImg = this._element.querySelector('img.gx');
|
|
846
512
|
if (expandAllElementImg) {
|
|
847
|
-
const expandAllElement =
|
|
848
|
-
expandAllElementImg,
|
|
849
|
-
(el) => el.getAttribute('role') === 'button'
|
|
850
|
-
);
|
|
851
|
-
|
|
513
|
+
const expandAllElement = (0, _findParent.default)(expandAllElementImg, el => el.getAttribute('role') === 'button');
|
|
852
514
|
if (expandAllElement) {
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
])
|
|
859
|
-
.takeUntilBy(this._stopper)
|
|
860
|
-
.onValue(() => {
|
|
861
|
-
for (let customMessageView of this._customMessageViews) {
|
|
862
|
-
customMessageView.expand();
|
|
863
|
-
}
|
|
864
|
-
});
|
|
515
|
+
_kefir.default.merge([_kefir.default.fromEvents(expandAllElement, 'click'), _kefir.default.fromEvents(expandAllElement, 'keydown').filter(e => e.which === 13 /* enter */)]).takeUntilBy(this._stopper).onValue(() => {
|
|
516
|
+
for (let customMessageView of this._customMessageViews) {
|
|
517
|
+
customMessageView.expand();
|
|
518
|
+
}
|
|
519
|
+
});
|
|
865
520
|
}
|
|
866
521
|
}
|
|
867
522
|
|
|
868
523
|
//collapse all
|
|
869
524
|
const collapseAllElementImg = this._element.querySelector('img.gq');
|
|
870
525
|
if (collapseAllElementImg) {
|
|
871
|
-
const collapseAllElement =
|
|
872
|
-
collapseAllElementImg,
|
|
873
|
-
(el) => el.getAttribute('role') === 'button'
|
|
874
|
-
);
|
|
526
|
+
const collapseAllElement = (0, _findParent.default)(collapseAllElementImg, el => el.getAttribute('role') === 'button');
|
|
875
527
|
if (collapseAllElement) {
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
])
|
|
882
|
-
.takeUntilBy(this._stopper)
|
|
883
|
-
.onValue(() => {
|
|
884
|
-
for (let customMessageView of this._customMessageViews) {
|
|
885
|
-
customMessageView.collapse();
|
|
886
|
-
}
|
|
887
|
-
});
|
|
528
|
+
_kefir.default.merge([_kefir.default.fromEvents(collapseAllElement, 'click'), _kefir.default.fromEvents(collapseAllElement, 'keydown').filter(e => e.which === 13 /* enter */)]).takeUntilBy(this._stopper).onValue(() => {
|
|
529
|
+
for (let customMessageView of this._customMessageViews) {
|
|
530
|
+
customMessageView.collapse();
|
|
531
|
+
}
|
|
532
|
+
});
|
|
888
533
|
}
|
|
889
534
|
}
|
|
890
535
|
}
|
|
891
536
|
}
|
|
892
|
-
|
|
893
|
-
|
|
537
|
+
var _default = (0, _ud.defn)(module, GmailThreadView);
|
|
538
|
+
exports.default = _default;
|