@inboxsdk/core 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/inboxsdk.js +5 -5
  2. package/inboxsdk.js.map +1 -1
  3. package/package.json +1 -1
  4. package/pageWorld.js.map +1 -1
  5. package/src/inboxsdk.d.ts +16 -1
  6. package/src/injected-js/gmail/modify-suggestions.d.ts +2 -0
  7. package/src/injected-js/gmail/modify-suggestions.d.ts.map +1 -1
  8. package/src/platform-implementation-js/constants/router.d.ts +5 -0
  9. package/src/platform-implementation-js/dom-driver/gmail/custom-style.d.ts +2 -0
  10. package/src/platform-implementation-js/dom-driver/gmail/custom-style.d.ts.map +1 -0
  11. package/src/platform-implementation-js/dom-driver/gmail/custom-style.js +16 -21
  12. package/src/platform-implementation-js/dom-driver/gmail/gmail-butter-bar-driver.d.ts +12 -0
  13. package/src/platform-implementation-js/dom-driver/gmail/gmail-butter-bar-driver.d.ts.map +1 -0
  14. package/src/platform-implementation-js/dom-driver/gmail/gmail-butter-bar-driver.js +152 -187
  15. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-app-menu-item.d.ts +1 -1
  16. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-app-menu-item.d.ts.map +1 -1
  17. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-app-menu-item.js +1 -1
  18. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-toolbar-button-for-app.d.ts +5 -0
  19. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-toolbar-button-for-app.d.ts.map +1 -0
  20. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-toolbar-button-for-app.js +15 -20
  21. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/create-link.d.ts +4 -0
  22. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/create-link.d.ts.map +1 -0
  23. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/create-link.js +59 -56
  24. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-draft-id-for-message-id.d.ts +9 -0
  25. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-draft-id-for-message-id.d.ts.map +1 -0
  26. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-draft-id-for-message-id.js +42 -54
  27. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-native-nav-item.d.ts +4 -0
  28. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-native-nav-item.d.ts.map +1 -0
  29. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-native-nav-item.js +31 -33
  30. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-url-object.d.ts +8 -0
  31. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-url-object.d.ts.map +1 -0
  32. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-url-object.js +21 -23
  33. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/getSyncThreadForOldGmailThreadId.d.ts +4 -0
  34. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/getSyncThreadForOldGmailThreadId.d.ts.map +1 -0
  35. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/getSyncThreadForOldGmailThreadId.js +19 -31
  36. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/getSyncThreadFromSyncThreadId.d.ts +7 -0
  37. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/goto-view.d.ts +5 -0
  38. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/goto-view.d.ts.map +1 -0
  39. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/goto-view.js +51 -60
  40. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/keyboard-shortcut-help-modifier.d.ts +20 -0
  41. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/keyboard-shortcut-help-modifier.d.ts.map +1 -0
  42. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/keyboard-shortcut-help-modifier.js +166 -130
  43. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/open-compose-window.d.ts +3 -0
  44. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/open-compose-window.d.ts.map +1 -0
  45. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/open-compose-window.js +17 -22
  46. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/override-gmail-back-button.d.ts +4 -0
  47. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/override-gmail-back-button.d.ts.map +1 -0
  48. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/override-gmail-back-button.js +44 -51
  49. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/register-search-query-rewriter.d.ts +3 -0
  50. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/register-search-query-rewriter.d.ts.map +1 -0
  51. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/register-search-query-rewriter.js +17 -22
  52. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/register-search-suggestions-provider.d.ts +3 -0
  53. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/register-search-suggestions-provider.d.ts.map +1 -0
  54. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/register-search-suggestions-provider.js +136 -129
  55. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/setup-compose-view-driver-stream.d.ts +6 -0
  56. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/setup-compose-view-driver-stream.d.ts.map +1 -0
  57. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/setup-compose-view-driver-stream.js +102 -95
  58. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/setup-route-view-driver-stream.d.ts +6 -0
  59. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/setup-route-view-driver-stream.d.ts.map +1 -0
  60. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/setup-route-view-driver-stream.js +144 -169
  61. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-app-id-warning.d.ts +3 -0
  62. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-app-id-warning.d.ts.map +1 -0
  63. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-app-id-warning.js +14 -23
  64. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-custom-route-view.d.ts +3 -0
  65. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-custom-route-view.d.ts.map +1 -0
  66. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-custom-route-view.js +41 -49
  67. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-custom-thread-list.d.ts +5 -0
  68. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-custom-thread-list.d.ts.map +1 -0
  69. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-custom-thread-list.js +286 -294
  70. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-native-route-view.d.ts +3 -0
  71. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-native-route-view.d.ts.map +1 -0
  72. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-native-route-view.js +19 -26
  73. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/suppressAddon.d.ts +3 -0
  74. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/suppressAddon.d.ts.map +1 -0
  75. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/suppressAddon.js +36 -42
  76. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/temporary-track-download-url-validity.d.ts +3 -0
  77. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/temporary-track-download-url-validity.d.ts.map +1 -0
  78. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/temporary-track-download-url-validity.js +34 -33
  79. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/thread-row-identifier.d.ts +13 -0
  80. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/thread-row-identifier.d.ts.map +1 -0
  81. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/thread-row-identifier.js +80 -81
  82. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/track-events.d.ts +3 -0
  83. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/track-events.d.ts.map +1 -0
  84. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/track-events.js +124 -81
  85. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/user-info.d.ts +10 -0
  86. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/user-info.d.ts.map +1 -0
  87. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/user-info.js +47 -54
  88. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver.d.ts +183 -106
  89. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver.d.ts.map +1 -0
  90. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver.js +712 -647
  91. package/src/platform-implementation-js/dom-driver/gmail/make-xhr-interceptor.d.ts +7 -0
  92. package/src/platform-implementation-js/dom-driver/gmail/make-xhr-interceptor.d.ts.map +1 -0
  93. package/src/platform-implementation-js/dom-driver/gmail/make-xhr-interceptor.js +93 -82
  94. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/index.d.ts +7 -0
  95. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-toolbar-button-view.d.ts +5 -0
  96. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-backdrop.d.ts +11 -0
  97. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-backdrop.d.ts.map +1 -0
  98. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-backdrop.js +20 -32
  99. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view.d.ts +1 -0
  100. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view.d.ts +8 -0
  101. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-nav-item-view.d.ts +2 -0
  102. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-nav-item-view.d.ts.map +1 -1
  103. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-nav-item-view.js +1 -1
  104. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-route-view/gmail-route-processor.d.ts +8 -0
  105. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-route-view/gmail-route-view.d.ts +3 -0
  106. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-route-view/gmail-route-view.js +3 -1
  107. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-row-list-view.d.ts +10 -0
  108. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-row-view.d.ts +5 -0
  109. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-view.d.ts +9 -0
  110. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-toolbar-view.d.ts +12 -0
  111. package/src/platform-implementation-js/dom-driver/gmail/views/native-gmail-nav-item-view.d.ts +9 -0
  112. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-modal-view-driver.d.ts +20 -0
  113. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-modal-view-driver.d.ts.map +1 -0
  114. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-modal-view-driver.js +107 -108
  115. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-mole-view-driver.d.ts +16 -0
  116. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-mole-view-driver.js +1 -1
  117. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-top-message-bar-driver.d.ts +13 -0
  118. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-top-message-bar-driver.d.ts.map +1 -0
  119. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-top-message-bar-driver.js +66 -66
  120. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-drawer-view.d.ts +5 -0
  121. package/src/platform-implementation-js/driver-common/getGmailMessageIdForSyncMessageId.d.ts +6 -0
  122. package/src/platform-implementation-js/driver-common/getGmailThreadIdForRfcMessageId.d.ts +6 -0
  123. package/src/platform-implementation-js/driver-common/sidebar/ContentPanelViewDriver.d.ts +1 -0
  124. package/src/platform-implementation-js/driver-interfaces/driver.d.ts +3 -6
  125. package/src/platform-implementation-js/driver-interfaces/mole-view-driver.d.ts +27 -0
  126. package/src/platform-implementation-js/lib/copyAndValidateAutocompleteResults.d.ts +4 -0
  127. package/src/platform-implementation-js/lib/copyAndValidateAutocompleteResults.d.ts.map +1 -0
  128. package/src/platform-implementation-js/lib/copyAndValidateAutocompleteResults.js +34 -34
  129. package/src/platform-implementation-js/lib/dom/element-view-mapper.d.ts +10 -0
  130. package/src/platform-implementation-js/lib/dom/element-view-mapper.d.ts.map +1 -0
  131. package/src/platform-implementation-js/lib/dom/element-view-mapper.js +9 -17
  132. package/src/platform-implementation-js/lib/dom/on-mouse-down-and-up.d.ts +4 -0
  133. package/src/platform-implementation-js/lib/dom/on-mouse-down-and-up.d.ts.map +1 -0
  134. package/src/platform-implementation-js/lib/dom/on-mouse-down-and-up.js +7 -16
  135. package/src/platform-implementation-js/lib/populateRouteID.d.ts +6 -0
  136. package/src/platform-implementation-js/lib/rewriteCssWithIdMap.d.ts +2 -0
  137. package/src/platform-implementation-js/lib/rewriteCssWithIdMap.d.ts.map +1 -0
  138. package/src/platform-implementation-js/lib/rewriteCssWithIdMap.js +4 -11
  139. package/src/platform-implementation-js/lib/routeIDmatchesHash.d.ts +4 -0
  140. package/src/platform-implementation-js/lib/toLiveSet.d.ts +5 -0
  141. package/src/platform-implementation-js/lib/toLiveSet.d.ts.map +1 -0
  142. package/src/platform-implementation-js/lib/toLiveSet.js +22 -33
  143. package/src/platform-implementation-js/namespaces/router.d.ts +1 -0
  144. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/setup-route-view-driver-stream.test.js +0 -183
  145. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-custom-thread-list.test.js +0 -218
  146. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/user-info.test.js +0 -85
  147. package/src/platform-implementation-js/lib/rewriteCssWithIdMap.test.js +0 -43
@@ -1,131 +1,138 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.default = registerSearchSuggestionsProvider;
8
- var _once = _interopRequireDefault(require("lodash/once"));
9
- var _find = _interopRequireDefault(require("lodash/find"));
10
- var _kefir = _interopRequireDefault(require("kefir"));
11
- var _fromEventTargetCapture = _interopRequireDefault(require("../../../lib/from-event-target-capture"));
12
- var _simulateMouseEvent = require("../../../lib/dom/simulate-mouse-event");
13
- var _makeElementChildStream = _interopRequireDefault(require("../../../lib/dom/make-element-child-stream"));
14
- var _makeMutationObserverChunkedStream = _interopRequireDefault(require("../../../lib/dom/make-mutation-observer-chunked-stream"));
15
- var _gmailElementGetter = _interopRequireDefault(require("../gmail-element-getter"));
16
- var _copyAndValidateAutocompleteResults = _interopRequireDefault(require("../../../lib/copyAndValidateAutocompleteResults"));
17
- function registerSearchSuggestionsProvider(driver, handler) {
18
- // We inject the app-provided suggestions into Gmail's AJAX response. Then we
19
- // watch the DOM for our injected suggestions to show up and attach click and
20
- // enter handlers to them to let them do custom actions.
21
-
22
- const providerId = 'inboxsdk__suggestions_' + ('' + Date.now() + Math.random()).replace(/\D+/g, '');
23
- const pageCommunicator = driver.getPageCommunicator();
24
- pageCommunicator.registerSuggestionsModifier(providerId);
25
-
26
- // Listen for the AJAX requests, call the application's handler function, and
27
- // give the application's suggestions back to the pageCommunicator for it to
28
- // inject into the AJAX responses.
29
- const suggestionsStream = pageCommunicator.ajaxInterceptStream.filter(event => event.type === 'suggestionsRequest').flatMapLatest(_ref => {
30
- let {
31
- query
32
- } = _ref;
33
- return _kefir.default.fromPromise(Promise.resolve(handler(query))).flatMap(results => {
34
- try {
35
- const validatedResults = (0, _copyAndValidateAutocompleteResults.default)(driver, results);
36
- const validatedResultsWithIds = validatedResults.map(result => ({
37
- ...result,
38
- providerId,
39
- id: `${Date.now()}-${Math.random()}`
40
- }));
41
- return _kefir.default.constant(validatedResultsWithIds);
42
- } catch (e) {
43
- return _kefir.default.constantError(e);
44
- }
45
- }).mapErrors(err => {
46
- driver.getLogger().error(err);
47
- return [];
48
- }).map(suggestions => {
49
- return {
50
- query,
51
- suggestions
52
- };
1
+ import once from 'lodash/once';
2
+ import find from 'lodash/find';
3
+ import * as Kefir from 'kefir';
4
+ import fromEventTargetCapture from '../../../lib/from-event-target-capture';
5
+ import makeElementChildStream from '../../../lib/dom/make-element-child-stream';
6
+ import makeMutationObserverChunkedStream from '../../../lib/dom/make-mutation-observer-chunked-stream';
7
+ import gmailElementGetter from '../gmail-element-getter';
8
+ import copyAndValidateAutocompleteResults from '../../../lib/copyAndValidateAutocompleteResults';
9
+ export default function registerSearchSuggestionsProvider(driver, handler) {
10
+ // We inject the app-provided suggestions into Gmail's AJAX response. Then we
11
+ // watch the DOM for our injected suggestions to show up and attach click and
12
+ // enter handlers to them to let them do custom actions.
13
+ const providerId = 'inboxsdk__suggestions_' +
14
+ ('' + Date.now() + Math.random()).replace(/\D+/g, '');
15
+ const pageCommunicator = driver.getPageCommunicator();
16
+ pageCommunicator.registerSuggestionsModifier(providerId);
17
+ // Listen for the AJAX requests, call the application's handler function, and
18
+ // give the application's suggestions back to the pageCommunicator for it to
19
+ // inject into the AJAX responses.
20
+ const suggestionsStream = pageCommunicator.ajaxInterceptStream
21
+ .filter((event) => event.type === 'suggestionsRequest')
22
+ .flatMapLatest(({ query }) => Kefir.fromPromise(Promise.resolve(handler(query)))
23
+ .flatMap((results) => {
24
+ try {
25
+ const validatedResults = copyAndValidateAutocompleteResults(driver, results);
26
+ const validatedResultsWithIds = validatedResults.map((result) => ({
27
+ ...result,
28
+ providerId,
29
+ id: `${Date.now()}-${Math.random()}`,
30
+ }));
31
+ return Kefir.constant(validatedResultsWithIds);
32
+ }
33
+ catch (e) {
34
+ return Kefir.constantError(e);
35
+ }
36
+ })
37
+ .mapErrors((err) => {
38
+ driver.getLogger().error(err);
39
+ return [];
40
+ })
41
+ .map((suggestions) => {
42
+ return { query, suggestions };
43
+ }))
44
+ .onValue((event) => {
45
+ pageCommunicator.provideAutocompleteSuggestions(providerId, event.query, event.suggestions);
46
+ })
47
+ .map((event) => event.suggestions);
48
+ // Wait for the first routeViewDriver to happen before looking for the search box.
49
+ const searchBoxStream = driver
50
+ .getRouteViewDriverStream()
51
+ .toProperty(() => null)
52
+ .map(() => gmailElementGetter.getSearchInput())
53
+ .filter(Boolean)
54
+ .take(1);
55
+ // Wait for the search box to be focused before looking for the suggestions box.
56
+ const suggestionsBoxTbodyStream = searchBoxStream
57
+ .flatMapLatest((searchBox) => Kefir.fromEvents(searchBox, 'focus'))
58
+ .map(() => gmailElementGetter.getSearchSuggestionsBoxParent())
59
+ .filter(Boolean)
60
+ .flatMapLatest(makeElementChildStream)
61
+ .map((x) => x.el.firstElementChild)
62
+ .take(1)
63
+ .toProperty();
64
+ // This stream emits an event after every time Gmail changes the suggestions
65
+ // list.
66
+ const suggestionsBoxGmailChanges = suggestionsBoxTbodyStream
67
+ .flatMap((suggestionsBoxTbody) => makeMutationObserverChunkedStream(suggestionsBoxTbody, {
68
+ childList: true,
69
+ }).toProperty(() => null))
70
+ .map(() => null);
71
+ // We listen to the event on the document node so that the event can be
72
+ // canceled before Gmail receives it.
73
+ const suggestionsBoxEnterPresses = searchBoxStream.flatMap((searchBox) => fromEventTargetCapture(document, 'keydown').filter((event) => event.keyCode == 13 && event.target === searchBox));
74
+ // Stream of arrays of row elements belonging to this provider.
75
+ const providedRows = suggestionsBoxTbodyStream
76
+ .sampledBy(suggestionsBoxGmailChanges)
77
+ .map((suggestionsBoxTbody) => Array.from(suggestionsBoxTbody.children).filter((row) => row.getElementsByClassName(providerId).length > 0));
78
+ providedRows.onValue((rows) => {
79
+ if (rows[0] && rows[0].previousElementSibling) {
80
+ const prevFirstChild = rows[0].previousElementSibling.firstElementChild;
81
+ if (prevFirstChild) {
82
+ prevFirstChild.classList.add('inboxsdk__suggestions_separator_before');
83
+ }
84
+ const firstChild = rows[0].firstElementChild;
85
+ if (firstChild) {
86
+ firstChild.classList.add('inboxsdk__suggestions_separator_after');
87
+ }
88
+ }
53
89
  });
54
- }).onValue(event => {
55
- pageCommunicator.provideAutocompleteSuggestions(providerId, event.query, event.suggestions);
56
- }).map(event => event.suggestions);
57
-
58
- // Wait for the first routeViewDriver to happen before looking for the search box.
59
- const searchBoxStream = driver.getRouteViewDriverStream().toProperty(() => null).map(() => _gmailElementGetter.default.getSearchInput()).filter(Boolean).take(1);
60
-
61
- // Wait for the search box to be focused before looking for the suggestions box.
62
- const suggestionsBoxTbodyStream = searchBoxStream.flatMapLatest(searchBox => _kefir.default.fromEvents(searchBox, 'focus')).map(() => _gmailElementGetter.default.getSearchSuggestionsBoxParent()).filter(Boolean).flatMapLatest(_makeElementChildStream.default).map(x => x.el.firstElementChild).take(1).toProperty();
63
-
64
- // This stream emits an event after every time Gmail changes the suggestions
65
- // list.
66
- const suggestionsBoxGmailChanges = suggestionsBoxTbodyStream.flatMap(suggestionsBoxTbody => (0, _makeMutationObserverChunkedStream.default)(suggestionsBoxTbody, {
67
- childList: true
68
- }).toProperty(() => null)).map(() => null);
69
-
70
- // We listen to the event on the document node so that the event can be
71
- // canceled before Gmail receives it.
72
- const suggestionsBoxEnterPresses = searchBoxStream.flatMap(searchBox => (0, _fromEventTargetCapture.default)(document, 'keydown').filter(event => event.keyCode == 13 && event.target === searchBox));
73
-
74
- // Stream of arrays of row elements belonging to this provider.
75
- const providedRows = suggestionsBoxTbodyStream.sampledBy(suggestionsBoxGmailChanges).map(suggestionsBoxTbody => Array.from(suggestionsBoxTbody.children).filter(row => row.getElementsByClassName(providerId).length > 0));
76
- providedRows.onValue(rows => {
77
- if (rows[0] && rows[0].previousElementSibling) {
78
- const prevFirstChild = rows[0].previousElementSibling.firstElementChild;
79
- if (prevFirstChild) {
80
- prevFirstChild.classList.add('inboxsdk__suggestions_separator_before');
81
- }
82
- const firstChild = rows[0].firstElementChild;
83
- if (firstChild) {
84
- firstChild.classList.add('inboxsdk__suggestions_separator_after');
85
- }
86
- }
87
- });
88
- const rowSelectionEvents = providedRows.flatMapLatest(rows => _kefir.default.merge(rows.map(row => _kefir.default.merge([(0, _fromEventTargetCapture.default)(row, 'click'), suggestionsBoxEnterPresses.filter(() => row.classList.contains('gssb_i'))]).map(event => ({
89
- event,
90
- row
91
- })))));
92
- const activeSuggestionsStream = _kefir.default.merge([suggestionsStream, searchBoxStream.flatMapLatest(searchBox => _kefir.default.fromEvents(searchBox, 'blur')).map(() => [])]).toProperty();
93
- _kefir.default.combine([rowSelectionEvents, searchBoxStream], [activeSuggestionsStream]).onValue(tuple => {
94
- const [{
95
- event,
96
- row
97
- }, searchBox, suggestions] = tuple;
98
- const itemDataSpan = row.querySelector('span[data-inboxsdk-suggestion]');
99
- const itemData = itemDataSpan ? JSON.parse(itemDataSpan.getAttribute('data-inboxsdk-suggestion') || 'null') : null;
100
- const clearSearch = (0, _once.default)(() => {
101
- event.stopImmediatePropagation();
102
- event.preventDefault();
103
- searchBox.blur();
104
- searchBox.value = '';
90
+ const rowSelectionEvents = providedRows.flatMapLatest((rows) => Kefir.merge(rows.map((row) => Kefir.merge([
91
+ fromEventTargetCapture(row, 'click'),
92
+ suggestionsBoxEnterPresses.filter(() => row.classList.contains('gssb_i')),
93
+ ]).map((event) => ({ event, row })))));
94
+ const activeSuggestionsStream = Kefir.merge([
95
+ suggestionsStream,
96
+ searchBoxStream
97
+ .flatMapLatest((searchBox) => Kefir.fromEvents(searchBox, 'blur'))
98
+ .map(() => []),
99
+ ]).toProperty();
100
+ Kefir.combine([rowSelectionEvents, searchBoxStream], [
101
+ activeSuggestionsStream,
102
+ ]).onValue((tuple) => {
103
+ const [{ event, row }, searchBox, suggestions] = tuple;
104
+ const itemDataSpan = row.querySelector('span[data-inboxsdk-suggestion]');
105
+ const itemData = itemDataSpan
106
+ ? JSON.parse(itemDataSpan.getAttribute('data-inboxsdk-suggestion') || 'null')
107
+ : null;
108
+ const clearSearch = once(() => {
109
+ event.stopImmediatePropagation();
110
+ event.preventDefault();
111
+ searchBox.blur();
112
+ searchBox.value = '';
113
+ });
114
+ if (itemData) {
115
+ const { id } = itemData;
116
+ const suggestion = find(suggestions, (s) => s.id === id);
117
+ if (!suggestion) {
118
+ // I can imagine this happening if Gmail caches old suggestions
119
+ // results. Unknown if it does that so let's log. If it does, then
120
+ // activeSuggestionsStream should be changed to have more than just
121
+ // the most recent suggestions.
122
+ driver.getLogger().error(new Error('Failed to find suggestion by id'));
123
+ }
124
+ if (suggestion && suggestion.onClick) {
125
+ clearSearch();
126
+ suggestion.onClick.call(null);
127
+ }
128
+ }
129
+ if (itemData && itemData.routeName) {
130
+ clearSearch();
131
+ driver.goto(itemData.routeName, itemData.routeParams);
132
+ }
133
+ else if (itemData && itemData.externalURL) {
134
+ clearSearch();
135
+ window.open(itemData.externalURL);
136
+ }
105
137
  });
106
- if (itemData) {
107
- const {
108
- id
109
- } = itemData;
110
- const suggestion = (0, _find.default)(suggestions, s => s.id === id);
111
- if (!suggestion) {
112
- // I can imagine this happening if Gmail caches old suggestions
113
- // results. Unknown if it does that so let's log. If it does, then
114
- // activeSuggestionsStream should be changed to have more than just
115
- // the most recent suggestions.
116
- driver.getLogger().error(new Error('Failed to find suggestion by id'));
117
- }
118
- if (suggestion && suggestion.onClick) {
119
- clearSearch();
120
- suggestion.onClick.call(null);
121
- }
122
- }
123
- if (itemData && itemData.routeName) {
124
- clearSearch();
125
- driver.goto(itemData.routeName, itemData.routeParams);
126
- } else if (itemData && itemData.externalURL) {
127
- clearSearch();
128
- window.open(itemData.externalURL);
129
- }
130
- });
131
- }
138
+ }
@@ -0,0 +1,6 @@
1
+ import * as Kefir from 'kefir';
2
+ import GmailComposeView from '../views/gmail-compose-view';
3
+ import type GmailMessageView from '../views/gmail-message-view';
4
+ import type GmailDriver from '../gmail-driver';
5
+ export default function setupComposeViewDriverStream(gmailDriver: GmailDriver, messageViewDriverStream: Kefir.Observable<GmailMessageView, unknown>, xhrInterceptorStream: Kefir.Observable<any, unknown>): Kefir.Observable<GmailComposeView, unknown>;
6
+ //# sourceMappingURL=setup-compose-view-driver-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-compose-view-driver-stream.d.ts","sourceRoot":"","sources":["../../../../../../../src/platform-implementation-js/dom-driver/gmail/gmail-driver/setup-compose-view-driver-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,gBAAgB,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,gBAAgB,MAAM,6BAA6B,CAAC;AAEhE,OAAO,KAAK,WAAW,MAAM,iBAAiB,CAAC;AAI/C,MAAM,CAAC,OAAO,UAAU,4BAA4B,CAClD,WAAW,EAAE,WAAW,EACxB,uBAAuB,EAAE,KAAK,CAAC,UAAU,CAAC,gBAAgB,EAAE,OAAO,CAAC,EACpE,oBAAoB,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,GACnD,KAAK,CAAC,UAAU,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAI7C"}
@@ -1,105 +1,112 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.default = setupComposeViewDriverStream;
8
- var _kefir = _interopRequireDefault(require("kefir"));
9
- var _udKefir = _interopRequireDefault(require("ud-kefir"));
10
- var _streamWaitFor = _interopRequireDefault(require("../../../lib/stream-wait-for"));
11
- var _makeMutationObserverChunkedStream = _interopRequireDefault(require("../../../lib/dom/make-mutation-observer-chunked-stream"));
12
- var _makeElementChildStream = _interopRequireDefault(require("../../../lib/dom/make-element-child-stream"));
13
- var _elementViewMapper = _interopRequireDefault(require("../../../lib/dom/element-view-mapper"));
14
- var _makeElementStreamMerger = _interopRequireDefault(require("../../../lib/dom/make-element-stream-merger"));
15
- var _gmailElementGetter = _interopRequireDefault(require("../gmail-element-getter"));
16
- var _gmailComposeView = _interopRequireDefault(require("../views/gmail-compose-view"));
17
- var _logger = _interopRequireDefault(require("../../../lib/logger"));
18
- var impStream = (0, _udKefir.default)(module, imp);
19
- function setupComposeViewDriverStream(gmailDriver, messageViewDriverStream, xhrInterceptorStream) {
20
- return impStream.flatMapLatest(imp => imp(gmailDriver, messageViewDriverStream, xhrInterceptorStream));
1
+ import * as Kefir from 'kefir';
2
+ import udKefir from 'ud-kefir';
3
+ import kefirMakeMutationObserverChunkedStream from '../../../lib/dom/make-mutation-observer-chunked-stream';
4
+ import makeElementChildStream from '../../../lib/dom/make-element-child-stream';
5
+ import elementViewMapper from '../../../lib/dom/element-view-mapper';
6
+ import makeElementStreamMerger from '../../../lib/dom/make-element-stream-merger';
7
+ import GmailElementGetter from '../gmail-element-getter';
8
+ import GmailComposeView from '../views/gmail-compose-view';
9
+ var impStream = udKefir(module, imp);
10
+ export default function setupComposeViewDriverStream(gmailDriver, messageViewDriverStream, xhrInterceptorStream) {
11
+ return impStream.flatMapLatest((imp) => imp(gmailDriver, messageViewDriverStream, xhrInterceptorStream));
21
12
  }
22
13
  function imp(gmailDriver, messageViewDriverStream, xhrInterceptorStream) {
23
- return _kefir.default.fromPromise(_gmailElementGetter.default.waitForGmailModeToSettle()).flatMap(() => {
24
- var elementStream;
25
- var isStandalone = false;
26
- if (_gmailElementGetter.default.isStandaloneComposeWindow()) {
27
- elementStream = _setupStandaloneComposeElementStream();
28
- isStandalone = true;
29
- } else if (_gmailElementGetter.default.isStandaloneThreadWindow()) {
30
- elementStream = _kefir.default.never();
31
- } else {
32
- elementStream = _setupStandardComposeElementStream();
33
- }
34
- return elementStream.map((0, _elementViewMapper.default)(el => new _gmailComposeView.default(el, xhrInterceptorStream, gmailDriver, {
35
- isStandalone,
36
- isInlineReplyForm: false
37
- })));
38
- }).merge(messageViewDriverStream.flatMap(gmailMessageView => gmailMessageView.getReplyElementStream().map((0, _elementViewMapper.default)(el => new _gmailComposeView.default(el, xhrInterceptorStream, gmailDriver, {
39
- isStandalone: false,
40
- isInlineReplyForm: true
41
- }))))).flatMap(composeViewDriver => composeViewDriver.ready());
14
+ return Kefir.fromPromise(GmailElementGetter.waitForGmailModeToSettle())
15
+ .flatMap(() => {
16
+ var elementStream;
17
+ var isStandalone = false;
18
+ if (GmailElementGetter.isStandaloneComposeWindow()) {
19
+ elementStream = _setupStandaloneComposeElementStream();
20
+ isStandalone = true;
21
+ }
22
+ else if (GmailElementGetter.isStandaloneThreadWindow()) {
23
+ elementStream = Kefir.never();
24
+ }
25
+ else {
26
+ elementStream = _setupStandardComposeElementStream();
27
+ }
28
+ return elementStream.map(elementViewMapper((el) => new GmailComposeView(el, xhrInterceptorStream, gmailDriver, {
29
+ isStandalone,
30
+ isInlineReplyForm: false,
31
+ })));
32
+ })
33
+ .merge(messageViewDriverStream.flatMap((gmailMessageView) => gmailMessageView.getReplyElementStream().map(elementViewMapper((el) => new GmailComposeView(el, xhrInterceptorStream, gmailDriver, {
34
+ isStandalone: false,
35
+ isInlineReplyForm: true,
36
+ })))))
37
+ .flatMap((composeViewDriver) => composeViewDriver.ready());
42
38
  }
43
39
  function _setupStandardComposeElementStream() {
44
- return _waitForContainerAndMonitorChildrenStream(() => _gmailElementGetter.default.getComposeWindowContainer()).flatMap(composeGrandParent => {
45
- var composeParentEl = composeGrandParent.el.querySelector('div.AD');
46
- if (composeParentEl) {
47
- return (0, _makeElementChildStream.default)(composeParentEl).takeUntilBy(composeGrandParent.removalStream).map(_informElement('composeFullscreenStateChanged'));
48
- } else {
49
- return _kefir.default.never();
50
- }
51
- }).merge(_gmailElementGetter.default.getFullscreenComposeWindowContainerStream().flatMap(_ref => {
52
- let {
53
- el,
54
- removalStream
55
- } = _ref;
56
- return (0, _makeElementChildStream.default)(el).takeUntilBy(removalStream);
57
- }).map(_informElement('composeFullscreenStateChanged')).map(_ref2 => {
58
- let {
59
- el,
60
- removalStream
61
- } = _ref2;
62
- // If you close a fullscreen compose while it's still saving, Gmail never
63
- // removes it from the DOM, and instead only removes a specific child
64
- // element. Ugh. Watch for its removal too.
65
- const targetEl = el.querySelector('[role=dialog] div.aaZ');
66
- if (!targetEl) return null;
67
- var hiddenStream = (0, _makeMutationObserverChunkedStream.default)(targetEl, {
68
- childList: true
69
- }).filter(() => targetEl.childElementCount === 0).map(() => null);
70
- return {
71
- el,
72
- removalStream: removalStream.merge(hiddenStream).take(1)
73
- };
74
- }).filter(Boolean)).flatMap(event => {
75
- if (!event) throw new Error('Should not happen');
76
- const el = event.el.querySelector('[role=dialog]');
77
- if (!el || !el.querySelector('form')) {
78
- return _kefir.default.never();
79
- }
80
- return _kefir.default.constant({
81
- el,
82
- removalStream: event.removalStream
83
- });
84
- }).flatMap((0, _makeElementStreamMerger.default)());
40
+ return _waitForContainerAndMonitorChildrenStream(() => GmailElementGetter.getComposeWindowContainer())
41
+ .flatMap((composeGrandParent) => {
42
+ var composeParentEl = composeGrandParent.el.querySelector('div.AD');
43
+ if (composeParentEl) {
44
+ return makeElementChildStream(composeParentEl)
45
+ .takeUntilBy(composeGrandParent.removalStream)
46
+ .map(_informElement('composeFullscreenStateChanged'));
47
+ }
48
+ else {
49
+ return Kefir.never();
50
+ }
51
+ })
52
+ .merge(GmailElementGetter.getFullscreenComposeWindowContainerStream()
53
+ .flatMap(({ el, removalStream }) => makeElementChildStream(el).takeUntilBy(removalStream))
54
+ .map(_informElement('composeFullscreenStateChanged'))
55
+ .map(({ el, removalStream }) => {
56
+ // If you close a fullscreen compose while it's still saving, Gmail never
57
+ // removes it from the DOM, and instead only removes a specific child
58
+ // element. Ugh. Watch for its removal too.
59
+ const targetEl = el.querySelector('[role=dialog] div.aaZ');
60
+ if (!targetEl)
61
+ return null;
62
+ var hiddenStream = kefirMakeMutationObserverChunkedStream(targetEl, {
63
+ childList: true,
64
+ })
65
+ .filter(() => targetEl.childElementCount === 0)
66
+ .map(() => null);
67
+ return {
68
+ el,
69
+ removalStream: removalStream.merge(hiddenStream).take(1),
70
+ };
71
+ })
72
+ .filter(Boolean))
73
+ .flatMap((event) => {
74
+ if (!event)
75
+ throw new Error('Should not happen');
76
+ const el = event.el.querySelector('[role=dialog]');
77
+ if (!el || !el.querySelector('form')) {
78
+ return Kefir.never();
79
+ }
80
+ return Kefir.constant({
81
+ el,
82
+ removalStream: event.removalStream,
83
+ });
84
+ })
85
+ .flatMap(makeElementStreamMerger());
85
86
  }
86
87
  function _setupStandaloneComposeElementStream() {
87
- return _waitForContainerAndMonitorChildrenStream(() => _gmailElementGetter.default.StandaloneCompose.getComposeWindowContainer());
88
+ return _waitForContainerAndMonitorChildrenStream(() => GmailElementGetter.StandaloneCompose.getComposeWindowContainer());
88
89
  }
89
90
  function _waitForContainerAndMonitorChildrenStream(containerFn) {
90
- return _kefir.default.interval(2000) // TODO replace this with page-parser-tree
91
- .map(containerFn).filter().take(1).flatMap(containerEl => (0, _makeElementChildStream.default)(containerEl));
91
+ return Kefir.interval(2000, undefined) // TODO replace this with page-parser-tree
92
+ .map(containerFn)
93
+ .filter()
94
+ .take(1)
95
+ .flatMap((containerEl) => makeElementChildStream(containerEl));
92
96
  }
93
97
  function _informElement(eventName) {
94
- return function (event) {
95
- const composeEl = event && event.el && event.el.querySelector && event.el.querySelector('[role=dialog]');
96
- if (composeEl) {
97
- composeEl.dispatchEvent(new CustomEvent(eventName, {
98
- bubbles: false,
99
- cancelable: false,
100
- detail: null
101
- }));
102
- }
103
- return event;
104
- };
105
- }
98
+ return function (event) {
99
+ const composeEl = event &&
100
+ event.el &&
101
+ event.el.querySelector &&
102
+ event.el.querySelector('[role=dialog]');
103
+ if (composeEl) {
104
+ composeEl.dispatchEvent(new CustomEvent(eventName, {
105
+ bubbles: false,
106
+ cancelable: false,
107
+ detail: null,
108
+ }));
109
+ }
110
+ return event;
111
+ };
112
+ }
@@ -0,0 +1,6 @@
1
+ import { Observable } from 'kefir';
2
+ import type GmailDriver from '../gmail-driver';
3
+ import type GmailRouteProcessor from '../views/gmail-route-view/gmail-route-processor';
4
+ import GmailRouteView from '../views/gmail-route-view/gmail-route-view';
5
+ export default function setupRouteViewDriverStream(gmailRouteProcessor: GmailRouteProcessor, driver: GmailDriver): Observable<GmailRouteView, unknown>;
6
+ //# sourceMappingURL=setup-route-view-driver-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-route-view-driver-stream.d.ts","sourceRoot":"","sources":["../../../../../../../src/platform-implementation-js/dom-driver/gmail/gmail-driver/setup-route-view-driver-stream.ts"],"names":[],"mappings":"AACA,OAAc,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,KAAK,WAAW,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,mBAAmB,MAAM,iDAAiD,CAAC;AAEvF,OAAO,cAAc,MAAM,4CAA4C,CAAC;AAKxE,MAAM,CAAC,OAAO,UAAU,0BAA0B,CAChD,mBAAmB,EAAE,mBAAmB,EACxC,MAAM,EAAE,WAAW,GAClB,UAAU,CAAC,cAAc,EAAE,OAAO,CAAC,CA6KrC"}