@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
package/src/platform-implementation-js/dom-driver/inbox/detection/attachmentOverlay/parser.js
CHANGED
|
@@ -1,85 +1,53 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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 _transducers = _interopRequireDefault(require("transducers.js"));
|
|
9
|
+
var _ErrorCollector = _interopRequireDefault(require("../../../../lib/ErrorCollector"));
|
|
10
|
+
var _querySelectorOne = _interopRequireDefault(require("../../../../lib/dom/querySelectorOne"));
|
|
11
|
+
var _ud = require("ud");
|
|
12
|
+
function parser(el) {
|
|
13
|
+
const ec = new _ErrorCollector.default('attachmentOverlay');
|
|
12
14
|
ec.run('tabindex', () => {
|
|
13
15
|
if (!el.hasAttribute('tabindex')) throw new Error('expected tabindex');
|
|
14
16
|
});
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
const rect = el.getBoundingClientRect();
|
|
32
|
-
if (rect.top > 100) return false;
|
|
33
|
-
return true;
|
|
34
|
-
} else {
|
|
35
|
-
// Can't use screen position logic in unit tests so we're cheating a
|
|
36
|
-
// little and depending on an exact class name.
|
|
37
|
-
return el.parentElement.classList.contains(
|
|
38
|
-
'ndfHFb-c4YZDc-Wrql6b-C7uZwb-b0t70b'
|
|
39
|
-
);
|
|
40
|
-
}
|
|
41
|
-
}),
|
|
42
|
-
t.filter((el) => {
|
|
43
|
-
const elIx = Array.prototype.indexOf.call(
|
|
44
|
-
el.parentElement.children,
|
|
45
|
-
el
|
|
46
|
-
);
|
|
47
|
-
const nextDivSibling = Array.prototype.filter.call(
|
|
48
|
-
el.parentElement.children,
|
|
49
|
-
(el, i) => i > elIx && el.nodeName === 'DIV'
|
|
50
|
-
)[0];
|
|
51
|
-
return (
|
|
52
|
-
nextDivSibling &&
|
|
53
|
-
nextDivSibling.getAttribute('aria-haspopup') === 'true'
|
|
54
|
-
);
|
|
55
|
-
}),
|
|
56
|
-
t.take(1)
|
|
57
|
-
)
|
|
58
|
-
)[0];
|
|
17
|
+
const downloadButton = ec.run('downloadButton', () => {
|
|
18
|
+
const candidate = _transducers.default.toArray(Array.prototype.slice.call(el.querySelectorAll('div[role=button][tabindex][data-tooltip]:not([aria-disabled=true]):not([aria-pressed]):not([aria-expanded])')), _transducers.default.compose(_transducers.default.filter(el => el.childElementCount === 1 && el.firstElementChild.childElementCount === 0), _transducers.default.filter(el => {
|
|
19
|
+
if (global.document) {
|
|
20
|
+
const rect = el.getBoundingClientRect();
|
|
21
|
+
if (rect.top > 100) return false;
|
|
22
|
+
return true;
|
|
23
|
+
} else {
|
|
24
|
+
// Can't use screen position logic in unit tests so we're cheating a
|
|
25
|
+
// little and depending on an exact class name.
|
|
26
|
+
return el.parentElement.classList.contains('ndfHFb-c4YZDc-Wrql6b-C7uZwb-b0t70b');
|
|
27
|
+
}
|
|
28
|
+
}), _transducers.default.filter(el => {
|
|
29
|
+
const elIx = Array.prototype.indexOf.call(el.parentElement.children, el);
|
|
30
|
+
const nextDivSibling = Array.prototype.filter.call(el.parentElement.children, (el, i) => i > elIx && el.nodeName === 'DIV')[0];
|
|
31
|
+
return nextDivSibling && nextDivSibling.getAttribute('aria-haspopup') === 'true';
|
|
32
|
+
}), _transducers.default.take(1)))[0];
|
|
59
33
|
if (!candidate) throw new Error('Failed to find element');
|
|
60
|
-
if (candidate.getAttribute('aria-label') === 'Print')
|
|
61
|
-
throw new Error('Found print button instead');
|
|
34
|
+
if (candidate.getAttribute('aria-label') === 'Print') throw new Error('Found print button instead');
|
|
62
35
|
return candidate;
|
|
63
36
|
});
|
|
64
|
-
|
|
65
|
-
const buttonContainer: ?HTMLElement = downloadButton
|
|
66
|
-
? (downloadButton: any).parentElement
|
|
67
|
-
: null;
|
|
68
|
-
|
|
37
|
+
const buttonContainer = downloadButton ? downloadButton.parentElement : null;
|
|
69
38
|
const elements = {
|
|
70
39
|
downloadButton,
|
|
71
|
-
buttonContainer
|
|
40
|
+
buttonContainer
|
|
72
41
|
};
|
|
73
42
|
const score = 1 - ec.errorCount() / ec.runCount();
|
|
74
43
|
return {
|
|
75
44
|
elements,
|
|
76
45
|
attributes: {},
|
|
77
46
|
score,
|
|
78
|
-
errors: ec.getErrorLogs()
|
|
47
|
+
errors: ec.getErrorLogs()
|
|
79
48
|
};
|
|
80
49
|
}
|
|
81
50
|
|
|
82
51
|
/*:: const x = parser(({}:any)); */
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
export default defn(module, parser);
|
|
52
|
+
var _default = (0, _ud.defn)(module, parser);
|
|
53
|
+
exports.default = _default;
|
|
@@ -1,33 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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 _ErrorCollector = _interopRequireDefault(require("../../../../lib/ErrorCollector"));
|
|
9
|
+
var _querySelectorOne = _interopRequireDefault(require("../../../../lib/dom/querySelectorOne"));
|
|
10
|
+
var _ud = require("ud");
|
|
11
|
+
function parser(el) {
|
|
12
|
+
const ec = new _ErrorCollector.default('chatSidebar');
|
|
11
13
|
ec.run('position:fixed', () => {
|
|
12
|
-
if (getComputedStyle(
|
|
13
|
-
throw new Error('expected position:fixed in parent');
|
|
14
|
+
if (getComputedStyle(el.parentElement).position !== 'fixed') throw new Error('expected position:fixed in parent');
|
|
14
15
|
});
|
|
15
|
-
|
|
16
16
|
ec.run('id', () => {
|
|
17
17
|
if (!el.id) throw new Error('expected id');
|
|
18
18
|
});
|
|
19
|
-
|
|
20
19
|
const elements = {};
|
|
21
20
|
const score = 1 - ec.errorCount() / ec.runCount();
|
|
22
21
|
return {
|
|
23
22
|
elements,
|
|
24
23
|
attributes: {},
|
|
25
24
|
score,
|
|
26
|
-
errors: ec.getErrorLogs()
|
|
25
|
+
errors: ec.getErrorLogs()
|
|
27
26
|
};
|
|
28
27
|
}
|
|
29
28
|
|
|
30
29
|
/*:: const x = parser(({}:any)); */
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
export default defn(module, parser);
|
|
30
|
+
var _default = (0, _ud.defn)(module, parser);
|
|
31
|
+
exports.default = _default;
|
|
@@ -1,184 +1,68 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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 _ErrorCollector = _interopRequireDefault(require("../../../../lib/ErrorCollector"));
|
|
9
|
+
var _querySelectorOne = _interopRequireDefault(require("../../../../lib/dom/querySelectorOne"));
|
|
10
|
+
var _closestNg = _interopRequireDefault(require("closest-ng"));
|
|
11
|
+
var _ud = require("ud");
|
|
12
|
+
function parser(el) {
|
|
13
|
+
const ec = new _ErrorCollector.default('compose');
|
|
12
14
|
const isInline = el.getAttribute('role') !== 'dialog';
|
|
13
|
-
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
);
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
);
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
)
|
|
30
|
-
|
|
31
|
-
?
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
const popOutBtn = isInline
|
|
42
|
-
? ec.run('pop-out button', () =>
|
|
43
|
-
querySelectorOne(el, 'button[jsaction$=".quick_compose_popout_mole"]')
|
|
44
|
-
)
|
|
45
|
-
: null;
|
|
46
|
-
|
|
47
|
-
const discardBtn = ec.run('discard button', () =>
|
|
48
|
-
querySelectorOne(el, 'button[jsaction$=".discard_draft"]')
|
|
49
|
-
);
|
|
50
|
-
|
|
51
|
-
const titleBar = isInline
|
|
52
|
-
? null
|
|
53
|
-
: ec.run('title bar', () =>
|
|
54
|
-
querySelectorOne(el, 'div[jsaction$=".focus_mole"]')
|
|
55
|
-
);
|
|
56
|
-
|
|
57
|
-
const toggleFullscreenButton = isInline
|
|
58
|
-
? null
|
|
59
|
-
: ec.run('fullscreen button', () =>
|
|
60
|
-
querySelectorOne(el, 'button[jsaction$=".toggle_full_screen"]')
|
|
61
|
-
);
|
|
62
|
-
const toggleFullscreenButtonImage = isInline
|
|
63
|
-
? null
|
|
64
|
-
: ec.run(
|
|
65
|
-
'fullscreen button image',
|
|
66
|
-
() =>
|
|
67
|
-
((querySelectorOne(
|
|
68
|
-
el,
|
|
69
|
-
'button[jsaction$=".toggle_full_screen"] img'
|
|
70
|
-
): any): HTMLImageElement)
|
|
71
|
-
);
|
|
72
|
-
const closeBtn = isInline
|
|
73
|
-
? null
|
|
74
|
-
: ec.run('close button', () =>
|
|
75
|
-
querySelectorOne(
|
|
76
|
-
el,
|
|
77
|
-
'div[jstcache][jsan][jsaction] > button[jsaction$=".close_mole"]'
|
|
78
|
-
)
|
|
79
|
-
);
|
|
80
|
-
const minimizeBtn = isInline
|
|
81
|
-
? null
|
|
82
|
-
: ec.run('minimize button', () =>
|
|
83
|
-
querySelectorOne(
|
|
84
|
-
el,
|
|
85
|
-
'div[jstcache][jsan][jsaction] > button[jsaction$=".minimize_mole"]'
|
|
86
|
-
)
|
|
87
|
-
);
|
|
88
|
-
const minimizeBtnImage = isInline
|
|
89
|
-
? null
|
|
90
|
-
: ec.run(
|
|
91
|
-
'minimize button image',
|
|
92
|
-
() =>
|
|
93
|
-
((querySelectorOne(
|
|
94
|
-
el,
|
|
95
|
-
'div[jstcache][jsan][jsaction] > button[jsaction$=".minimize_mole"] img'
|
|
96
|
-
): any): HTMLImageElement)
|
|
97
|
-
);
|
|
98
|
-
const bodyPlaceholder = isInline
|
|
99
|
-
? null
|
|
100
|
-
: ec.run('body placeholder', () => {
|
|
101
|
-
const el = body && body.previousElementSibling;
|
|
102
|
-
if (!(el instanceof HTMLElement) || el.nodeName !== 'LABEL')
|
|
103
|
-
throw new Error(
|
|
104
|
-
`compose body placeholder wrong type ${
|
|
105
|
-
el ? el.nodeName : 'undefined'
|
|
106
|
-
}`
|
|
107
|
-
);
|
|
108
|
-
return el;
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
const fromPicker: ?HTMLElement = el.querySelector(
|
|
112
|
-
'div[role=button][jsaction*=toggle_custom_from_menu]'
|
|
113
|
-
);
|
|
114
|
-
const fromPickerEmailSpan = fromPicker
|
|
115
|
-
? ec.run('from picker email span', () =>
|
|
116
|
-
querySelectorOne(fromPicker, 'span')
|
|
117
|
-
)
|
|
118
|
-
: null;
|
|
119
|
-
|
|
120
|
-
const recipientFields = isInline
|
|
121
|
-
? null
|
|
122
|
-
: ec.run('recipient fields', () => {
|
|
123
|
-
const recipientFields: HTMLInputElement[] = (el.querySelectorAll(
|
|
124
|
-
'input[type=text][role=combobox]'
|
|
125
|
-
): any);
|
|
126
|
-
if (recipientFields.length != 3)
|
|
127
|
-
throw new Error(
|
|
128
|
-
`Found ${recipientFields.length} recipient fields, expected 3`
|
|
129
|
-
);
|
|
130
|
-
return recipientFields;
|
|
131
|
-
});
|
|
15
|
+
const sendBtn = ec.run('send button', () => (0, _querySelectorOne.default)(el, 'div[jstcache] > div[role=button][jsaction$=".send"], ' + 'div[jstcache] > div[role=button][disabled]:not([title]):not([data-tooltip])'));
|
|
16
|
+
const attachBtn = ec.run('attach button', () => (0, _querySelectorOne.default)(el, 'div[role=button][jsaction$=".attach"]'));
|
|
17
|
+
const body = ec.run('body', () => (0, _querySelectorOne.default)(el, 'div[contenteditable][g_editable], div[id][tabindex][aria-label][jsaction*=".quick_compose_handle_input"]'));
|
|
18
|
+
const subject = isInline ? null : ec.run('subject', () => {
|
|
19
|
+
const subject = (0, _querySelectorOne.default)(el, 'div[jstcache][jsan] > div > input[type=text][title][placeholder][jsaction*="input:"]');
|
|
20
|
+
if (!(subject instanceof HTMLInputElement)) throw new Error('Wrong type');
|
|
21
|
+
return subject;
|
|
22
|
+
});
|
|
23
|
+
const popOutBtn = isInline ? ec.run('pop-out button', () => (0, _querySelectorOne.default)(el, 'button[jsaction$=".quick_compose_popout_mole"]')) : null;
|
|
24
|
+
const discardBtn = ec.run('discard button', () => (0, _querySelectorOne.default)(el, 'button[jsaction$=".discard_draft"]'));
|
|
25
|
+
const titleBar = isInline ? null : ec.run('title bar', () => (0, _querySelectorOne.default)(el, 'div[jsaction$=".focus_mole"]'));
|
|
26
|
+
const toggleFullscreenButton = isInline ? null : ec.run('fullscreen button', () => (0, _querySelectorOne.default)(el, 'button[jsaction$=".toggle_full_screen"]'));
|
|
27
|
+
const toggleFullscreenButtonImage = isInline ? null : ec.run('fullscreen button image', () => (0, _querySelectorOne.default)(el, 'button[jsaction$=".toggle_full_screen"] img'));
|
|
28
|
+
const closeBtn = isInline ? null : ec.run('close button', () => (0, _querySelectorOne.default)(el, 'div[jstcache][jsan][jsaction] > button[jsaction$=".close_mole"]'));
|
|
29
|
+
const minimizeBtn = isInline ? null : ec.run('minimize button', () => (0, _querySelectorOne.default)(el, 'div[jstcache][jsan][jsaction] > button[jsaction$=".minimize_mole"]'));
|
|
30
|
+
const minimizeBtnImage = isInline ? null : ec.run('minimize button image', () => (0, _querySelectorOne.default)(el, 'div[jstcache][jsan][jsaction] > button[jsaction$=".minimize_mole"] img'));
|
|
31
|
+
const bodyPlaceholder = isInline ? null : ec.run('body placeholder', () => {
|
|
32
|
+
const el = body && body.previousElementSibling;
|
|
33
|
+
if (!(el instanceof HTMLElement) || el.nodeName !== 'LABEL') throw new Error(`compose body placeholder wrong type ${el ? el.nodeName : 'undefined'}`);
|
|
34
|
+
return el;
|
|
35
|
+
});
|
|
36
|
+
const fromPicker = el.querySelector('div[role=button][jsaction*=toggle_custom_from_menu]');
|
|
37
|
+
const fromPickerEmailSpan = fromPicker ? ec.run('from picker email span', () => (0, _querySelectorOne.default)(fromPicker, 'span')) : null;
|
|
38
|
+
const recipientFields = isInline ? null : ec.run('recipient fields', () => {
|
|
39
|
+
const recipientFields = el.querySelectorAll('input[type=text][role=combobox]');
|
|
40
|
+
if (recipientFields.length != 3) throw new Error(`Found ${recipientFields.length} recipient fields, expected 3`);
|
|
41
|
+
return recipientFields;
|
|
42
|
+
});
|
|
132
43
|
const [toInput, ccInput, bccInput] = recipientFields || [];
|
|
133
|
-
|
|
134
|
-
const
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
const ccRow = isInline
|
|
157
|
-
? null
|
|
158
|
-
: ec.run('cc row', () => {
|
|
159
|
-
if (!ccInput) throw new Error('Could not locate CC input');
|
|
160
|
-
|
|
161
|
-
const ccInputAncestor = closest(ccInput, 'div[class] > label + div');
|
|
162
|
-
const ccRow = ccInputAncestor && ccInputAncestor.parentElement;
|
|
163
|
-
if (!(ccRow instanceof HTMLElement))
|
|
164
|
-
throw new Error('Could not locate CC row');
|
|
165
|
-
|
|
166
|
-
return ccRow;
|
|
167
|
-
});
|
|
168
|
-
|
|
169
|
-
const bccRow = isInline
|
|
170
|
-
? null
|
|
171
|
-
: ec.run('bcc row', () => {
|
|
172
|
-
if (!bccInput) throw new Error('Could not locate BCC input');
|
|
173
|
-
|
|
174
|
-
const bccInputAncestor = closest(bccInput, 'div[class] > label + div');
|
|
175
|
-
const bccRow = bccInputAncestor && bccInputAncestor.parentElement;
|
|
176
|
-
if (!(bccRow instanceof HTMLElement))
|
|
177
|
-
throw new Error('Could not locate BCC row');
|
|
178
|
-
|
|
179
|
-
return bccRow;
|
|
180
|
-
});
|
|
181
|
-
|
|
44
|
+
const toggleCcBccButton = isInline ? null : ec.run('toggle cc/bcc button', () => (0, _querySelectorOne.default)(el, 'button[jsaction*=".toggle_cc_bcc"]'));
|
|
45
|
+
const toRow = isInline ? null : ec.run('to row', () => {
|
|
46
|
+
if (!toInput) throw new Error('Could not locate To input');
|
|
47
|
+
const toInputAncestor = (0, _closestNg.default)(toInput, 'div > button[jsaction$=".toggle_cc_bcc"] + div');
|
|
48
|
+
const toRow = toInputAncestor && toInputAncestor.parentElement;
|
|
49
|
+
if (!(toRow instanceof HTMLElement)) throw new Error('Could not locate To row');
|
|
50
|
+
return toRow;
|
|
51
|
+
});
|
|
52
|
+
const ccRow = isInline ? null : ec.run('cc row', () => {
|
|
53
|
+
if (!ccInput) throw new Error('Could not locate CC input');
|
|
54
|
+
const ccInputAncestor = (0, _closestNg.default)(ccInput, 'div[class] > label + div');
|
|
55
|
+
const ccRow = ccInputAncestor && ccInputAncestor.parentElement;
|
|
56
|
+
if (!(ccRow instanceof HTMLElement)) throw new Error('Could not locate CC row');
|
|
57
|
+
return ccRow;
|
|
58
|
+
});
|
|
59
|
+
const bccRow = isInline ? null : ec.run('bcc row', () => {
|
|
60
|
+
if (!bccInput) throw new Error('Could not locate BCC input');
|
|
61
|
+
const bccInputAncestor = (0, _closestNg.default)(bccInput, 'div[class] > label + div');
|
|
62
|
+
const bccRow = bccInputAncestor && bccInputAncestor.parentElement;
|
|
63
|
+
if (!(bccRow instanceof HTMLElement)) throw new Error('Could not locate BCC row');
|
|
64
|
+
return bccRow;
|
|
65
|
+
});
|
|
182
66
|
const elements = {
|
|
183
67
|
sendBtn,
|
|
184
68
|
attachBtn,
|
|
@@ -201,20 +85,19 @@ function parser(el: HTMLElement) {
|
|
|
201
85
|
toRow,
|
|
202
86
|
ccRow,
|
|
203
87
|
bccRow,
|
|
204
|
-
toggleCcBccButton
|
|
88
|
+
toggleCcBccButton
|
|
205
89
|
};
|
|
206
90
|
const score = 1 - ec.errorCount() / ec.runCount();
|
|
207
91
|
return {
|
|
208
92
|
elements,
|
|
209
93
|
attributes: {
|
|
210
|
-
isInline
|
|
94
|
+
isInline
|
|
211
95
|
},
|
|
212
96
|
score,
|
|
213
|
-
errors: ec.getErrorLogs()
|
|
97
|
+
errors: ec.getErrorLogs()
|
|
214
98
|
};
|
|
215
99
|
}
|
|
216
100
|
|
|
217
101
|
/*:: const x = parser(({}:any)); */
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
export default defn(module, parser);
|
|
102
|
+
var _default = (0, _ud.defn)(module, parser);
|
|
103
|
+
exports.default = _default;
|
|
@@ -1,24 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import last from 'lodash/last';
|
|
4
|
-
import ErrorCollector from '../../../../lib/ErrorCollector';
|
|
5
|
-
import querySelectorOne from '../../../../lib/dom/querySelectorOne';
|
|
6
|
-
|
|
7
|
-
export default function parser(el: HTMLElement) {
|
|
8
|
-
const ec = new ErrorCollector('compose');
|
|
1
|
+
"use strict";
|
|
9
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = parser;
|
|
8
|
+
var _last = _interopRequireDefault(require("lodash/last"));
|
|
9
|
+
var _ErrorCollector = _interopRequireDefault(require("../../../../lib/ErrorCollector"));
|
|
10
|
+
var _querySelectorOne = _interopRequireDefault(require("../../../../lib/dom/querySelectorOne"));
|
|
11
|
+
function parser(el) {
|
|
12
|
+
const ec = new _ErrorCollector.default('compose');
|
|
10
13
|
ec.run('tabindex', () => {
|
|
11
14
|
if (!el.hasAttribute('tabindex')) throw new Error('expected tabindex');
|
|
12
15
|
});
|
|
13
|
-
|
|
14
|
-
const inboxMessageId: ?string = ec.run('message id', () => {
|
|
16
|
+
const inboxMessageId = ec.run('message id', () => {
|
|
15
17
|
const m = /msg-[^:]+:[^:\d]*\d+/.exec(el.getAttribute('data-msg-id') || '');
|
|
16
18
|
if (!m) {
|
|
17
19
|
throw new Error('message id regex failed');
|
|
18
20
|
}
|
|
19
21
|
return m[0];
|
|
20
22
|
});
|
|
21
|
-
|
|
22
23
|
const heading = ec.run('heading', () => {
|
|
23
24
|
const heading = el.querySelector('div[role=heading]');
|
|
24
25
|
if (!heading) throw new Error('failed to find heading');
|
|
@@ -26,57 +27,29 @@ export default function parser(el: HTMLElement) {
|
|
|
26
27
|
});
|
|
27
28
|
|
|
28
29
|
// Super-collapsed/HIDDEN messages don't have a body.
|
|
29
|
-
const body
|
|
30
|
-
'div[role=heading] ~ div:not(:empty)'
|
|
31
|
-
);
|
|
30
|
+
const body = el.querySelector('div[role=heading] ~ div:not(:empty)');
|
|
32
31
|
|
|
33
32
|
// The last message in a thread is always loaded and doesn't have the toggle
|
|
34
33
|
// collapse button.
|
|
35
|
-
const toggleCollapse
|
|
36
|
-
|
|
37
|
-
);
|
|
38
|
-
|
|
39
|
-
const loaded =
|
|
40
|
-
body != null &&
|
|
41
|
-
(toggleCollapse == null ||
|
|
42
|
-
toggleCollapse.getAttribute('role') === 'heading');
|
|
43
|
-
|
|
34
|
+
const toggleCollapse = el.querySelector('div[jsaction$=".message_toggle_collapse"]');
|
|
35
|
+
const loaded = body != null && (toggleCollapse == null || toggleCollapse.getAttribute('role') === 'heading');
|
|
44
36
|
const viewState = loaded ? 'EXPANDED' : body != null ? 'COLLAPSED' : 'HIDDEN';
|
|
45
|
-
|
|
46
37
|
const isDraft = loaded && heading && !heading.querySelector('span[email]');
|
|
47
|
-
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
? null
|
|
57
|
-
: el.querySelectorAll(
|
|
58
|
-
'[role=heading] [email]:not(:first-child), [role=heading] + div [email]'
|
|
59
|
-
);
|
|
60
|
-
|
|
61
|
-
const attachmentsArea: ?HTMLElement =
|
|
62
|
-
isDraft || !body || viewState !== 'EXPANDED'
|
|
63
|
-
? null
|
|
64
|
-
: ec.run('attachments area', () => {
|
|
65
|
-
const lastSection = last(
|
|
66
|
-
(body.parentElement: any).querySelectorAll('section:last-child')
|
|
67
|
-
);
|
|
68
|
-
if (!lastSection) {
|
|
69
|
-
throw new Error('element not found');
|
|
70
|
-
}
|
|
71
|
-
return lastSection;
|
|
72
|
-
});
|
|
73
|
-
|
|
38
|
+
const sender = isDraft || !heading || !body ? null : ec.run('sender', () => (0, _querySelectorOne.default)(heading, '[email]:first-child'));
|
|
39
|
+
const recipientElements = isDraft ? null : el.querySelectorAll('[role=heading] [email]:not(:first-child), [role=heading] + div [email]');
|
|
40
|
+
const attachmentsArea = isDraft || !body || viewState !== 'EXPANDED' ? null : ec.run('attachments area', () => {
|
|
41
|
+
const lastSection = (0, _last.default)(body.parentElement.querySelectorAll('section:last-child'));
|
|
42
|
+
if (!lastSection) {
|
|
43
|
+
throw new Error('element not found');
|
|
44
|
+
}
|
|
45
|
+
return lastSection;
|
|
46
|
+
});
|
|
74
47
|
const elements = {
|
|
75
48
|
heading,
|
|
76
49
|
body,
|
|
77
50
|
sender,
|
|
78
51
|
toggleCollapse,
|
|
79
|
-
attachmentsArea
|
|
52
|
+
attachmentsArea
|
|
80
53
|
};
|
|
81
54
|
const score = 1 - ec.errorCount() / ec.runCount();
|
|
82
55
|
return {
|
|
@@ -86,12 +59,11 @@ export default function parser(el: HTMLElement) {
|
|
|
86
59
|
viewState,
|
|
87
60
|
inboxMessageId,
|
|
88
61
|
recipientElements,
|
|
89
|
-
isDraft
|
|
62
|
+
isDraft
|
|
90
63
|
},
|
|
91
64
|
score,
|
|
92
|
-
errors: ec.getErrorLogs()
|
|
65
|
+
errors: ec.getErrorLogs()
|
|
93
66
|
};
|
|
94
67
|
}
|
|
95
68
|
|
|
96
|
-
/*:: const x = parser(({}:any)); */
|
|
97
|
-
export type Parsed = typeof x;
|
|
69
|
+
/*:: const x = parser(({}:any)); */
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = parser;
|
|
8
|
+
var _ErrorCollector = _interopRequireDefault(require("../../../../lib/ErrorCollector"));
|
|
9
|
+
var _querySelectorOne = _interopRequireDefault(require("../../../../lib/dom/querySelectorOne"));
|
|
10
|
+
function parser(el) {
|
|
11
|
+
const errors = [];
|
|
8
12
|
if (el.childElementCount < 2) {
|
|
9
13
|
errors.push('expected more children');
|
|
10
14
|
}
|
|
@@ -18,13 +22,11 @@ export default function parser(el: HTMLElement) {
|
|
|
18
22
|
if (window.innerHeight - rect.bottom > 100) {
|
|
19
23
|
errors.push('expected element to border bottom side of screen');
|
|
20
24
|
}
|
|
21
|
-
|
|
22
25
|
return {
|
|
23
26
|
elements: {},
|
|
24
27
|
score: errors.length === 0 ? 1 : 0,
|
|
25
|
-
errors
|
|
28
|
+
errors
|
|
26
29
|
};
|
|
27
30
|
}
|
|
28
31
|
|
|
29
|
-
/*:: const x = parser(({}:any)); */
|
|
30
|
-
export type Parsed = typeof x;
|
|
32
|
+
/*:: const x = parser(({}:any)); */
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = parser;
|
|
8
|
+
var _ErrorCollector = _interopRequireDefault(require("../../../../lib/ErrorCollector"));
|
|
9
|
+
var _querySelectorOne = _interopRequireDefault(require("../../../../lib/dom/querySelectorOne"));
|
|
10
|
+
function parser(el) {
|
|
11
|
+
const collector = new _ErrorCollector.default('searchBar');
|
|
8
12
|
const rect = el.getBoundingClientRect();
|
|
9
|
-
|
|
10
13
|
collector.run('position check', () => {
|
|
11
14
|
if (rect.top > 100) {
|
|
12
15
|
throw new Error('expected element to border top of screen');
|
|
13
16
|
}
|
|
14
17
|
});
|
|
15
|
-
|
|
16
|
-
const searchInput = collector.run('searchInput', () =>
|
|
17
|
-
querySelectorOne(el, 'div[role=search] input[role=combobox]')
|
|
18
|
-
);
|
|
19
|
-
|
|
18
|
+
const searchInput = collector.run('searchInput', () => (0, _querySelectorOne.default)(el, 'div[role=search] input[role=combobox]'));
|
|
20
19
|
return {
|
|
21
|
-
elements: {
|
|
20
|
+
elements: {
|
|
21
|
+
searchInput
|
|
22
|
+
},
|
|
22
23
|
score: 1 - collector.errorCount() / collector.runCount(),
|
|
23
|
-
errors: collector.getErrorLogs()
|
|
24
|
+
errors: collector.getErrorLogs()
|
|
24
25
|
};
|
|
25
26
|
}
|
|
26
27
|
|
|
27
|
-
/*:: const x = parser(({}:any)); */
|
|
28
|
-
export type Parsed = typeof x;
|
|
28
|
+
/*:: const x = parser(({}:any)); */
|