@inboxsdk/core 1.1.0 → 1.1.2

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 (81) hide show
  1. package/inboxsdk.js +7 -34
  2. package/inboxsdk.js.map +1 -1
  3. package/package.json +1 -1
  4. package/pageWorld.js +1 -1
  5. package/pageWorld.js.map +1 -1
  6. package/src/common/version.d.ts.map +1 -1
  7. package/src/common/version.js +3 -1
  8. package/src/injected-js/main.js +0 -9
  9. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/index.test.js +6 -2
  10. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/index.js +4 -2
  11. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view.js +4 -2
  12. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view.test.js +6 -2
  13. package/src/platform-implementation-js/driver-common/sidebar/ContentPanelViewDriver.js +2 -2
  14. package/src/platform-implementation-js/driver-common/sidebar/constants.d.ts +9 -0
  15. package/src/platform-implementation-js/driver-common/sidebar/constants.d.ts.map +1 -0
  16. package/src/platform-implementation-js/driver-common/sidebar/constants.js +26 -0
  17. package/src/platform-implementation-js/lib/idMap.d.ts +7 -0
  18. package/src/platform-implementation-js/lib/idMap.d.ts.map +1 -1
  19. package/src/platform-implementation-js/lib/idMap.js +35 -0
  20. package/src/platform-implementation-js/platform-implementation.d.ts +0 -3
  21. package/src/platform-implementation-js/platform-implementation.js +1 -9
  22. package/src/injected-js/inbox/setupAjaxInterceptor.js +0 -211
  23. package/src/injected-js/inbox/setupClickAndGetNewIframeSrc.js +0 -67
  24. package/src/injected-js/inbox/setupComposeViewDraftIDFinder.js +0 -35
  25. package/src/injected-js/inbox/setupInboxFakeWindowResizeListener.js +0 -29
  26. package/src/platform-implementation-js/dom-driver/inbox/__mocks__/getSidebarClassnames.js +0 -13
  27. package/src/platform-implementation-js/dom-driver/inbox/addNavItem.js +0 -38
  28. package/src/platform-implementation-js/dom-driver/inbox/addRecipientRow.js +0 -55
  29. package/src/platform-implementation-js/dom-driver/inbox/createLink.js +0 -19
  30. package/src/platform-implementation-js/dom-driver/inbox/createLink.test.js +0 -27
  31. package/src/platform-implementation-js/dom-driver/inbox/detection/appToolbarLocation/parser.js +0 -43
  32. package/src/platform-implementation-js/dom-driver/inbox/detection/attachmentCard/parser.js +0 -34
  33. package/src/platform-implementation-js/dom-driver/inbox/detection/attachmentOverlay/parser.js +0 -53
  34. package/src/platform-implementation-js/dom-driver/inbox/detection/chatSidebar/parser.js +0 -31
  35. package/src/platform-implementation-js/dom-driver/inbox/detection/compose/parser.js +0 -103
  36. package/src/platform-implementation-js/dom-driver/inbox/detection/message/parser.js +0 -69
  37. package/src/platform-implementation-js/dom-driver/inbox/detection/nativeDrawer/parser.js +0 -32
  38. package/src/platform-implementation-js/dom-driver/inbox/detection/searchBar/parser.js +0 -28
  39. package/src/platform-implementation-js/dom-driver/inbox/detection/thread/parser.js +0 -49
  40. package/src/platform-implementation-js/dom-driver/inbox/detection/thread-row/parser.js +0 -100
  41. package/src/platform-implementation-js/dom-driver/inbox/getComposeViewDriverLiveSet.js +0 -99
  42. package/src/platform-implementation-js/dom-driver/inbox/getInboxMessageIdForInboxThreadId.js +0 -36
  43. package/src/platform-implementation-js/dom-driver/inbox/getSidebarClassnames.js +0 -114
  44. package/src/platform-implementation-js/dom-driver/inbox/getSidebarClassnames.test.js +0 -73
  45. package/src/platform-implementation-js/dom-driver/inbox/gotoView.js +0 -39
  46. package/src/platform-implementation-js/dom-driver/inbox/gotoView.test.js +0 -28
  47. package/src/platform-implementation-js/dom-driver/inbox/inbox-butter-bar-driver.js +0 -148
  48. package/src/platform-implementation-js/dom-driver/inbox/inbox-driver.js +0 -863
  49. package/src/platform-implementation-js/dom-driver/inbox/inbox-page-communicator.js +0 -62
  50. package/src/platform-implementation-js/dom-driver/inbox/inboxResponseProcessor.js +0 -12
  51. package/src/platform-implementation-js/dom-driver/inbox/inboxResponseProcessor.test.js +0 -18
  52. package/src/platform-implementation-js/dom-driver/inbox/makePageParserTree.js +0 -33
  53. package/src/platform-implementation-js/dom-driver/inbox/pageParserOptions.js +0 -265
  54. package/src/platform-implementation-js/dom-driver/inbox/registerSearchSuggestionsProvider.js +0 -301
  55. package/src/platform-implementation-js/dom-driver/inbox/setupCustomAutocompleteSelectionHandling.js +0 -183
  56. package/src/platform-implementation-js/dom-driver/inbox/setupRouteViewDriverStream.js +0 -64
  57. package/src/platform-implementation-js/dom-driver/inbox/setupRouteViewDriverStream.test.js +0 -72
  58. package/src/platform-implementation-js/dom-driver/inbox/views/InboxLabelView.js +0 -78
  59. package/src/platform-implementation-js/dom-driver/inbox/views/InboxMoleViewDriver.js +0 -296
  60. package/src/platform-implementation-js/dom-driver/inbox/views/InboxToolbarButtonView.js +0 -91
  61. package/src/platform-implementation-js/dom-driver/inbox/views/InboxToolbarView.js +0 -53
  62. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-app-sidebar-view.js +0 -271
  63. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-app-toolbar-button-view.js +0 -160
  64. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-app-toolbar-tooltip-view.js +0 -57
  65. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-attachment-card-view.js +0 -197
  66. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-attachment-overlay-view.js +0 -83
  67. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-chat-sidebar-view.js +0 -45
  68. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-compose-button-view.js +0 -116
  69. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-compose-view.js +0 -842
  70. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-custom-route-view.js +0 -75
  71. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-dropdown-view.js +0 -25
  72. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-dummy-route-view.js +0 -63
  73. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-message-view.js +0 -274
  74. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-modal-view.js +0 -112
  75. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-route-view.js +0 -96
  76. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-thread-row-view.js +0 -315
  77. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-thread-view.js +0 -218
  78. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-thread-view.test.js +0 -171
  79. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-tooltip-view.js +0 -127
  80. package/src/platform-implementation-js/dom-driver/inbox/views/inboxNavItemView.js +0 -311
  81. package/src/platform-implementation-js/dom-driver/inbox/waitForAnimationClickBlockerGone.js +0 -26
@@ -1,863 +0,0 @@
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 _once = _interopRequireDefault(require("lodash/once"));
9
- var _constant = _interopRequireDefault(require("lodash/constant"));
10
- var _includes = _interopRequireDefault(require("lodash/includes"));
11
- var _autoHtml = _interopRequireDefault(require("auto-html"));
12
- var _kefir = _interopRequireDefault(require("kefir"));
13
- var _kefirBus = _interopRequireDefault(require("kefir-bus"));
14
- var _kefirStopper = _interopRequireDefault(require("kefir-stopper"));
15
- var _ud = require("ud");
16
- var _liveSet = _interopRequireDefault(require("live-set"));
17
- var _filter = _interopRequireDefault(require("live-set/filter"));
18
- var _merge = _interopRequireDefault(require("live-set/merge"));
19
- var _flatMap = _interopRequireDefault(require("live-set/flatMap"));
20
- var _mapWithRemoval = _interopRequireDefault(require("live-set/mapWithRemoval"));
21
- var _toValueObservable = _interopRequireDefault(require("live-set/toValueObservable"));
22
- var _makePageParserTree = _interopRequireDefault(require("./makePageParserTree"));
23
- var _logger = _interopRequireDefault(require("../../lib/logger"));
24
- var _toItemWithLifetimeStream = _interopRequireDefault(require("../../lib/toItemWithLifetimeStream"));
25
- var _injectScript = require("../../lib/inject-script");
26
- var _fromEventTargetCapture = _interopRequireDefault(require("../../lib/from-event-target-capture"));
27
- var _bimapcache = _interopRequireDefault(require("bimapcache"));
28
- var _getInboxMessageIdForInboxThreadId = _interopRequireDefault(require("./getInboxMessageIdForInboxThreadId"));
29
- var _getGmailMessageIdForSyncMessageId = _interopRequireDefault(require("../../driver-common/getGmailMessageIdForSyncMessageId"));
30
- var _getThreadIdFromMessageId = _interopRequireDefault(require("../../driver-common/getThreadIdFromMessageId"));
31
- var _gmailAjax = _interopRequireDefault(require("../../driver-common/gmailAjax"));
32
- var _getAccountUrlPart = _interopRequireDefault(require("../../driver-common/getAccountUrlPart"));
33
- var _simulateKey = _interopRequireDefault(require("../../lib/dom/simulate-key"));
34
- var _setCss = _interopRequireDefault(require("../../lib/dom/set-css"));
35
- var _querySelectorOrFail = _interopRequireDefault(require("../../lib/dom/querySelectorOrFail"));
36
- var _censorHTMLstring = _interopRequireDefault(require("../../../common/censorHTMLstring"));
37
- var _censorHTMLtree = _interopRequireDefault(require("../../../common/censorHTMLtree"));
38
- var _getComposeViewDriverLiveSet = _interopRequireDefault(require("./getComposeViewDriverLiveSet"));
39
- var _addNavItem = _interopRequireDefault(require("./addNavItem"));
40
- var _querySelectorOne = _interopRequireDefault(require("../../lib/dom/querySelectorOne"));
41
- var _idMap = _interopRequireDefault(require("../../lib/idMap"));
42
- var _makeMutationObserverChunkedStream = _interopRequireDefault(require("../../lib/dom/make-mutation-observer-chunked-stream"));
43
- var _getSidebarClassnames = _interopRequireDefault(require("./getSidebarClassnames"));
44
- var _inboxButterBarDriver = _interopRequireDefault(require("./inbox-butter-bar-driver"));
45
- var _createLink = _interopRequireDefault(require("./createLink"));
46
- var _gotoView = _interopRequireDefault(require("./gotoView"));
47
- var _parser = _interopRequireDefault(require("./detection/thread/parser"));
48
- var _parser2 = _interopRequireDefault(require("./detection/thread-row/parser"));
49
- var _parser3 = _interopRequireDefault(require("./detection/message/parser"));
50
- var _parser4 = _interopRequireDefault(require("./detection/attachmentCard/parser"));
51
- var _parser5 = _interopRequireDefault(require("./detection/attachmentOverlay/parser"));
52
- var _parser6 = _interopRequireDefault(require("./detection/nativeDrawer/parser"));
53
- var _parser7 = _interopRequireDefault(require("./detection/searchBar/parser"));
54
- var _parser8 = _interopRequireDefault(require("./detection/chatSidebar/parser"));
55
- var _parser9 = _interopRequireDefault(require("./detection/appToolbarLocation/parser"));
56
- var _setupRouteViewDriverStream = _interopRequireDefault(require("./setupRouteViewDriverStream"));
57
- var _inboxThreadView = _interopRequireDefault(require("./views/inbox-thread-view"));
58
- var _inboxThreadRowView = _interopRequireDefault(require("./views/inbox-thread-row-view"));
59
- var _inboxMessageView = _interopRequireDefault(require("./views/inbox-message-view"));
60
- var _inboxAttachmentCardView = _interopRequireDefault(require("./views/inbox-attachment-card-view"));
61
- var _inboxAttachmentOverlayView = _interopRequireDefault(require("./views/inbox-attachment-overlay-view"));
62
- var _inboxChatSidebarView = _interopRequireDefault(require("./views/inbox-chat-sidebar-view"));
63
- var _InboxToolbarView = _interopRequireDefault(require("./views/InboxToolbarView"));
64
- var _InboxMoleViewDriver = _interopRequireDefault(require("./views/InboxMoleViewDriver"));
65
- var _inboxAppSidebarView = _interopRequireDefault(require("./views/inbox-app-sidebar-view"));
66
- var _registerSearchSuggestionsProvider = _interopRequireDefault(require("./registerSearchSuggestionsProvider"));
67
- var _inboxAppToolbarButtonView = _interopRequireDefault(require("./views/inbox-app-toolbar-button-view"));
68
- var _inboxPageCommunicator = _interopRequireDefault(require("./inbox-page-communicator"));
69
- var _inboxModalView = _interopRequireDefault(require("./views/inbox-modal-view"));
70
- var _inboxDrawerView = _interopRequireDefault(require("./views/inbox-drawer-view"));
71
- var _inboxBackdrop = _interopRequireDefault(require("./views/inbox-backdrop"));
72
- /* eslint-disable flowtype/require-valid-file-annotation -- flow support is deprecated and this file existed for a Google product that no longer exists */
73
-
74
- class InboxDriver {
75
- _threadViewElements = new WeakMap();
76
- _messageViewElements = new WeakMap();
77
- _butterBarDriver = new _inboxButterBarDriver.default();
78
- _lastInteractedAttachmentCardView = null;
79
- _lastInteractedAttachmentCardViewSet = (0, _kefirBus.default)();
80
- _appSidebarView = null;
81
- _customRouteIDs = new Set();
82
- constructor(appId, LOADER_VERSION, IMPL_VERSION, logger, opts, envData) {
83
- this; // interface check
84
- this._appId = appId;
85
- this._logger = logger;
86
- this._opts = opts;
87
- this._envData = envData;
88
- this._stopper = (0, _kefirStopper.default)();
89
- this._pageCommunicator = new _inboxPageCommunicator.default();
90
- this._page = (0, _makePageParserTree.default)(this, document);
91
- this._stopper.onValue(() => this._page.dump());
92
- this.onready = (0, _injectScript.injectScript)().then(() => {
93
- this._logger.setUserEmailAddress(this.getUserEmailAddress());
94
- });
95
- this._setupThreadIdStats();
96
- {
97
- if (global.localStorage) {
98
- // We used to not always identify the ids of messages correctly, so we
99
- // just drop the old cache and use a new one.
100
- global.localStorage.removeItem('inboxsdk__cached_gmail_and_inbox_message_ids');
101
- }
102
- const gmailMessageIdForInboxMessageIdCache = new _bimapcache.default({
103
- key: 'inboxsdk__cached_gmail_and_inbox_message_ids_2',
104
- getAfromB: inboxMessageId => (0, _getGmailMessageIdForSyncMessageId.default)(this, inboxMessageId),
105
- getBfromA() {
106
- throw new Error('should not happen');
107
- }
108
- });
109
- this.getGmailMessageIdForSyncMessageId = inboxMessageId => gmailMessageIdForInboxMessageIdCache.getAfromB(inboxMessageId);
110
- }
111
- {
112
- const inboxMessageIdForInboxThreadIdCache = new _bimapcache.default({
113
- key: 'inboxsdk__cached_inbox_message_and_inbox_thread_ids',
114
- getAfromB: inboxThreadId => {
115
- this._threadIdStats.threadRows.threadsWithFetch += 1;
116
- return (0, _getInboxMessageIdForInboxThreadId.default)(this, inboxThreadId);
117
- },
118
- getBfromA() {
119
- throw new Error('should not happen');
120
- }
121
- });
122
- this.getInboxMessageIdForInboxThreadId = inboxThreadId => inboxMessageIdForInboxThreadIdCache.getAfromB(inboxThreadId);
123
- }
124
- {
125
- const threadIdFromMessageIdCache = new _bimapcache.default({
126
- key: 'inboxsdk__cached_thread_and_message_ids',
127
- getAfromB: messageId => (0, _getThreadIdFromMessageId.default)(this, messageId),
128
- getBfromA() {
129
- throw new Error('should not happen');
130
- }
131
- });
132
- this.getThreadIdFromMessageId = messageId => threadIdFromMessageIdCache.getAfromB(messageId);
133
- }
134
- this._threadRowViewDriverLiveSet = (0, _mapWithRemoval.default)(this._page.tree.getAllByTag('collapsedThreadRow'), (node, removal) => {
135
- const el = node.getValue();
136
- const parsed = (0, _parser2.default)(el);
137
- if (parsed.errors.length) {
138
- this._logger.errorSite(new Error('parse errors (threadRow)'), {
139
- score: parsed.score,
140
- errors: parsed.errors,
141
- html: (0, _censorHTMLtree.default)(el)
142
- });
143
- }
144
- const view = new _inboxThreadRowView.default(el, this, parsed);
145
- removal.then(() => {
146
- view.destroy();
147
- });
148
- return view;
149
- });
150
- this._threadViewDriverLiveSet = (0, _flatMap.default)(this._page.tree.getAllByTag('thread'), node => {
151
- const el = node.getValue();
152
- let parsed = (0, _parser.default)(el);
153
- if (parsed.errors.length) {
154
- this._logger.errorSite(new Error('parse errors (thread)'), {
155
- score: parsed.score,
156
- errors: parsed.errors,
157
- html: (0, _censorHTMLtree.default)(el)
158
- });
159
- }
160
- return new _liveSet.default({
161
- read() {
162
- throw new Error();
163
- },
164
- listen: (setValues, controller) => {
165
- setValues(new Set());
166
- const unsub = (0, _kefirStopper.default)();
167
-
168
- // If the InboxThreadView is destroyed before the element is removed,
169
- // then make a new InboxThreadView out of the same element.
170
- const newView = firstRun => {
171
- if (!firstRun) {
172
- parsed = (0, _parser.default)(el);
173
- if (parsed.errors.length > 0) {
174
- this._logger.errorSite(new Error('thread reparse errors'), {
175
- score: parsed.score,
176
- errors: parsed.errors,
177
- html: (0, _censorHTMLtree.default)(el)
178
- });
179
- }
180
- }
181
- const view = new _inboxThreadView.default(el, this, parsed);
182
- view.getStopper().takeUntilBy(unsub).onValue(() => {
183
- controller.remove(view);
184
- newView(false);
185
- });
186
- unsub.takeUntilBy(view.getStopper()).onValue(() => {
187
- view.destroy();
188
- });
189
- controller.add(view);
190
- };
191
- newView(true);
192
- return () => {
193
- unsub.destroy();
194
- };
195
- }
196
- });
197
- });
198
- this._messageViewDriverLiveSet = (0, _flatMap.default)(this._page.tree.getAllByTag('message'), node => {
199
- const el = node.getValue();
200
- let parsed = (0, _parser3.default)(el);
201
- if (parsed.errors.length > 0) {
202
- this._logger.errorSite(new Error('parse errors (message)'), {
203
- score: parsed.score,
204
- errors: parsed.errors,
205
- html: (0, _censorHTMLtree.default)(el)
206
- });
207
- }
208
- if (parsed.attributes.isDraft) return _liveSet.default.constant(new Set());
209
- return new _liveSet.default({
210
- read() {
211
- throw new Error();
212
- },
213
- listen: (setValues, controller) => {
214
- setValues(new Set());
215
- const unsub = (0, _kefirStopper.default)();
216
-
217
- // If the InboxMessageView is destroyed before the element is removed,
218
- // then make a new InboxMessageView out of the same element. Inbox re-uses
219
- // elements for different messages in some cases.
220
- const newView = firstRun => {
221
- if (!firstRun) {
222
- parsed = (0, _parser3.default)(el);
223
- if (parsed.errors.length > 0) {
224
- this._logger.errorSite(new Error(`message reparse errors`), {
225
- score: parsed.score,
226
- errors: parsed.errors,
227
- html: (0, _censorHTMLtree.default)(el)
228
- });
229
- }
230
- }
231
- const view = new _inboxMessageView.default(el, this, parsed);
232
- view.getStopper().takeUntilBy(unsub).onValue(() => {
233
- controller.remove(view);
234
- newView(false);
235
- });
236
- unsub.takeUntilBy(view.getStopper()).onValue(() => {
237
- view.destroy();
238
- });
239
- controller.add(view);
240
- };
241
- newView(true);
242
- return () => {
243
- unsub.destroy();
244
- };
245
- }
246
- });
247
- });
248
- this._attachmentCardViewDriverLiveSet = (0, _mapWithRemoval.default)(this._page.tree.getAllByTag('attachmentCard'), (node, removal) => {
249
- const el = node.getValue();
250
- const parsed = (0, _parser4.default)(el);
251
- if (parsed.errors.length) {
252
- this._logger.errorSite(new Error('parse errors (attachmentCard)'), {
253
- score: parsed.score,
254
- errors: parsed.errors,
255
- html: (0, _censorHTMLtree.default)(el)
256
- });
257
- }
258
- const view = new _inboxAttachmentCardView.default({
259
- element: el,
260
- parsed
261
- }, this);
262
- removal.then(() => {
263
- view.destroy();
264
- });
265
- return view;
266
- });
267
- this._attachmentOverlayViewDriverLiveSet = (0, _flatMap.default)(this._page.tree.getAllByTag('attachmentOverlay'), node => {
268
- const el = node.getValue();
269
- const parsed = (0, _parser5.default)(el);
270
- if (parsed.errors.length) {
271
- this._logger.errorSite(new Error('parse errors (attachmentOverlay)'), {
272
- score: parsed.score,
273
- errors: parsed.errors,
274
- html: (0, _censorHTMLtree.default)(el)
275
- });
276
- }
277
- const cardView = this.getLastInteractedAttachmentCardView();
278
- if (!cardView) {
279
- this._logger.error(new Error('Encountered overlay without knowing cardView'));
280
- return _liveSet.default.constant(new Set());
281
- }
282
- return new _liveSet.default({
283
- read() {
284
- throw new Error();
285
- },
286
- listen: setValues => {
287
- const view = new _inboxAttachmentOverlayView.default(this, el, parsed, cardView);
288
- setValues(new Set([view]));
289
- return () => {
290
- view.destroy();
291
- };
292
- }
293
- });
294
- });
295
- this._attachmentOverlayViewDriverLiveSet.subscribe({});
296
- // force activation because nothing outside of the driver is going to
297
- // subscribe to this, unlike some of the other livesets.
298
-
299
- this._composeViewDriverLiveSet = (0, _getComposeViewDriverLiveSet.default)(this, this._page.tree);
300
- this._chatSidebarViewLiveSet = (0, _mapWithRemoval.default)(this._page.tree.getAllByTag('chatSidebar'), (node, removal) => {
301
- const el = node.getValue();
302
- const parsed = (0, _parser8.default)(el);
303
- if (parsed.errors.length) {
304
- this._logger.errorSite(new Error('parse errors (chatSidebar)'), {
305
- score: parsed.score,
306
- errors: parsed.errors,
307
- html: (0, _censorHTMLtree.default)(el)
308
- });
309
- }
310
- const view = new _inboxChatSidebarView.default(el, parsed);
311
- removal.then(() => {
312
- view.destroy();
313
- });
314
- return view;
315
- });
316
- this._chatSidebarViewLiveSet.subscribe({});
317
- // force activation because nothing outside of the driver is going to
318
- // subscribe to this, unlike some of the other livesets.
319
-
320
- this._routeViewDriverStream = (0, _setupRouteViewDriverStream.default)(this);
321
- this._routeViewDriverStream.takeUntilBy(this._stopper).onValue(routeViewDriver => {
322
- this._currentRouteViewDriver = routeViewDriver;
323
- });
324
- this._rowListViewDriverStream = _kefir.default.never();
325
- _kefir.default.later(30 * 1000).takeUntilBy((0, _toItemWithLifetimeStream.default)(this._page.tree.getAllByTag('appToolbarLocation'))).onValue(() => {
326
- this._logger.errorSite(new Error('Failed to find appToolbarLocation'));
327
- });
328
- (0, _toValueObservable.default)(this._page.tree.getAllByTag('searchBar')).subscribe(_ref => {
329
- let {
330
- value: node
331
- } = _ref;
332
- const el = node.getValue();
333
- const parsed = (0, _parser7.default)(el);
334
- if (parsed.errors.length) {
335
- this._logger.errorSite(new Error('parse errors (searchBar)'), {
336
- score: parsed.score,
337
- errors: parsed.errors,
338
- html: (0, _censorHTMLtree.default)(el)
339
- });
340
- }
341
- });
342
- _kefir.default.later(30 * 1000).takeUntilBy((0, _toItemWithLifetimeStream.default)(this._page.tree.getAllByTag('searchBar'))).onValue(() => {
343
- this._logger.errorSite(new Error('Failed to find searchBar'));
344
- });
345
- (0, _toValueObservable.default)(this._page.tree.getAllByTag('nativeDrawer')).subscribe(_ref2 => {
346
- let {
347
- value: node
348
- } = _ref2;
349
- const el = node.getValue();
350
- const parsed = (0, _parser6.default)(el);
351
- if (parsed.errors.length) {
352
- this._logger.errorSite(new Error('parse errors (nativeDrawer)'), {
353
- score: parsed.score,
354
- errors: parsed.errors,
355
- html: (0, _censorHTMLtree.default)(el)
356
- });
357
- }
358
- });
359
-
360
- // When a user goes from one thread to another, a new thread view is made
361
- // but the old thread view doesn't get destroyed until it finishes
362
- // animating out. We need to clear the old thread view's sidebar
363
- // immediately when a new thread view comes in.
364
- let _currentThreadView = null;
365
- this._threadViewDriverLiveSet.subscribe(changes => {
366
- changes.forEach(change => {
367
- if (change.type === 'add') {
368
- const threadView = change.value;
369
- if (_currentThreadView) {
370
- _currentThreadView.removePanels();
371
- }
372
- _currentThreadView = threadView;
373
- }
374
- });
375
- });
376
- this._toolbarViewDriverLiveSet = (0, _merge.default)([(0, _mapWithRemoval.default)(this._page.tree.getAllByTag('listToolBar'), (node, removal) => {
377
- const el = node.getValue();
378
- const view = new _InboxToolbarView.default(el, this, null);
379
- removal.then(() => {
380
- view.destroy();
381
- });
382
- return view;
383
- }), (0, _mapWithRemoval.default)(this._threadViewDriverLiveSet, (inboxThreadView, removal) => {
384
- const el = inboxThreadView.getToolbarElement();
385
- const view = new _InboxToolbarView.default(el, this, inboxThreadView);
386
- removal.then(() => {
387
- view.destroy();
388
- });
389
- return view;
390
- })]);
391
- }
392
- _setupThreadIdStats() {
393
- this._resetThreadIdStats();
394
- setInterval(() => {
395
- if (this._threadIdStats.threadRows.totalCalls === 0) return;
396
- const {
397
- threadRows
398
- } = this._threadIdStats;
399
- const stats = {};
400
- stats.threadRows = Object.assign({}, threadRows, {
401
- totalThreads: threadRows.totalThreads.size,
402
- threadsWithoutGmailId: threadRows.threadsWithoutGmailId.size
403
- });
404
- this._logger.eventSdkPassive('inboxThreadIdStats', stats);
405
- this._resetThreadIdStats();
406
- }, 1000 * 60 * 60);
407
- }
408
- _resetThreadIdStats() {
409
- this._threadIdStats = {
410
- threadRows: {
411
- totalThreads: new Set(),
412
- totalCalls: 0,
413
- threadsWithoutGmailId: new Set(),
414
- callsWithoutGmailId: 0,
415
- threadsWithFetch: 0
416
- }
417
- };
418
- }
419
- trackThreadRowIdCall(hasGmailId, inboxThreadId) {
420
- this._threadIdStats.threadRows.totalCalls += 1;
421
- this._threadIdStats.threadRows.totalThreads.add(inboxThreadId);
422
- if (!hasGmailId) {
423
- this._threadIdStats.threadRows.callsWithoutGmailId += 1;
424
- this._threadIdStats.threadRows.threadsWithoutGmailId.add(inboxThreadId);
425
- }
426
- }
427
- destroy() {
428
- this._stopper.destroy();
429
- }
430
- getAppId() {
431
- return this._appId;
432
- }
433
- getOpts() {
434
- return this._opts;
435
- }
436
- getLogger() {
437
- return this._logger;
438
- }
439
- getStopper() {
440
- return this._stopper;
441
- }
442
- getRouteViewDriverStream() {
443
- return this._routeViewDriverStream;
444
- }
445
- getCurrentRouteViewDriver() {
446
- return this._currentRouteViewDriver;
447
- }
448
- getRowListViewDriverStream() {
449
- return _kefir.default.never();
450
- }
451
- getComposeViewDriverLiveSet() {
452
- return this._composeViewDriverLiveSet;
453
- }
454
- getComposeViewDriverStream() {
455
- return (0, _toItemWithLifetimeStream.default)(this._composeViewDriverLiveSet).map(_ref3 => {
456
- let {
457
- el
458
- } = _ref3;
459
- return el;
460
- });
461
- }
462
- getThreadRowViewDriverLiveSet() {
463
- return this._threadRowViewDriverLiveSet;
464
- }
465
- getThreadRowViewDriverStream() {
466
- return (0, _toItemWithLifetimeStream.default)(this._threadRowViewDriverLiveSet).map(_ref4 => {
467
- let {
468
- el
469
- } = _ref4;
470
- return el;
471
- });
472
- }
473
- getThreadViewDriverStream() {
474
- return (0, _toItemWithLifetimeStream.default)(this._threadViewDriverLiveSet).map(_ref5 => {
475
- let {
476
- el
477
- } = _ref5;
478
- return el;
479
- });
480
- }
481
- getMessageViewDriverStream() {
482
- return (0, _toItemWithLifetimeStream.default)(this._messageViewDriverLiveSet).map(_ref6 => {
483
- let {
484
- el
485
- } = _ref6;
486
- return el;
487
- });
488
- }
489
- getAttachmentCardViewDriverStream() {
490
- return (0, _toItemWithLifetimeStream.default)(this._attachmentCardViewDriverLiveSet).map(_ref7 => {
491
- let {
492
- el
493
- } = _ref7;
494
- return el;
495
- });
496
- }
497
- getButterBarDriver() {
498
- return this._butterBarDriver;
499
- }
500
- getButterBar() {
501
- return this._butterBar;
502
- }
503
- setButterBar(bb) {
504
- this._butterBar = bb;
505
- }
506
- getPageCommunicator() {
507
- return this._pageCommunicator;
508
- }
509
- getThreadViewElementsMap() {
510
- return this._threadViewElements;
511
- }
512
- getMessageViewElementsMap() {
513
- return this._messageViewElements;
514
- }
515
- getTagTree() {
516
- return this._page.tree;
517
- }
518
- getCustomRouteIDs() {
519
- return this._customRouteIDs;
520
- }
521
- getCurrentChatSidebarView() {
522
- const view = Array.from(this._chatSidebarViewLiveSet.values())[0];
523
- if (!view) throw new Error('No chat sidebar found');
524
- return view;
525
- }
526
- getAppSidebarView() {
527
- if (!this._appSidebarView) {
528
- this._appSidebarView = new _inboxAppSidebarView.default(this);
529
- }
530
- return this._appSidebarView;
531
- }
532
- getChatSidebarButton() {
533
- const appToolbarLocationNode = Array.from(this._page.tree.getAllByTag('appToolbarLocation').values())[0];
534
- const parsed = appToolbarLocationNode ? (0, _parser9.default)(appToolbarLocationNode.getValue()) : null;
535
- const el = parsed ? parsed.elements.chatSidebarButton : null;
536
- if (!el) throw new Error('No chat sidebar button found');
537
- return el;
538
- }
539
- getLastInteractedAttachmentCardView() {
540
- return this._lastInteractedAttachmentCardView;
541
- }
542
- setLastInteractedAttachmentCardView(card) {
543
- this._lastInteractedAttachmentCardViewSet.emit();
544
- this._lastInteractedAttachmentCardView = card;
545
- if (card) {
546
- card.getStopper().merge((0, _fromEventTargetCapture.default)(document.body, 'click')).take(1).takeUntilBy(this._lastInteractedAttachmentCardViewSet).takeUntilBy(this._stopper).onValue(() => {
547
- this._lastInteractedAttachmentCardView = null;
548
- });
549
- }
550
- }
551
- openNewComposeViewDriver() {
552
- const composeViewDriverPromise = this.getNextComposeViewDriver();
553
- const fabButton = (0, _querySelectorOne.default)(document.body, 'nav[role=banner] ~ div[aria-expanded] button:not([tabindex="-1"])');
554
- fabButton.click();
555
- return composeViewDriverPromise;
556
- }
557
- getNextComposeViewDriver() {
558
- let timeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 10 * 1000;
559
- const s = _kefir.default.stream(em => {
560
- const subscription = this._composeViewDriverLiveSet.subscribe({
561
- next: changes => {
562
- const newComposeChange = changes.filter(change => change.type === 'add')[0];
563
- if (newComposeChange) {
564
- // make flow happy
565
- if (newComposeChange.type !== 'add') throw new Error('should not happen');
566
- em.value(newComposeChange.value);
567
- }
568
- },
569
- complete: em.end
570
- });
571
- return () => subscription.unsubscribe();
572
- });
573
- return s.merge(_kefir.default.later(timeout, new Error('Reached timeout while waiting for getNextComposeViewDriver'))).beforeEnd(() => new Error('Driver was shut down before a new compose was found')).flatMap(x => x instanceof Error ? _kefir.default.constantError(x) : _kefir.default.constant(x)).take(1).takeErrors(1).toPromise();
574
- }
575
- activateShortcut(keyboardShortcutHandle, appName, appIconUrl) {
576
- console.warn('activateShortcut not implemented');
577
- }
578
- getGmailActionToken = (0, _once.default)(async () => {
579
- const response = await (0, _gmailAjax.default)({
580
- url: `https://mail.google.com/mail${(0, _getAccountUrlPart.default)()}/`,
581
- xhrFields: {
582
- withCredentials: true
583
- },
584
- canRetry: true
585
- });
586
- const tokenVarMatch = response.text.match(/var GM_ACTION_TOKEN=("[^"]+")/);
587
- if (!tokenVarMatch) {
588
- throw new Error('Could not find GM_ACTION_TOKEN');
589
- }
590
- return JSON.parse(tokenVarMatch[1]);
591
- });
592
- getUserEmailAddress() {
593
- const s = document.head.getAttribute('data-inboxsdk-user-email-address');
594
- if (s == null) throw new Error('should not happen');
595
- return s;
596
- }
597
- isConversationViewDisabled() {
598
- return Promise.resolve(false);
599
- }
600
- getUserLanguage() {
601
- return this._pageCommunicator.getUserLanguage();
602
- }
603
- getUserContact() {
604
- return {
605
- emailAddress: this.getUserEmailAddress(),
606
- name: this.getUserEmailAddress()
607
- };
608
- }
609
- getAccountSwitcherContactList() {
610
- console.log('getAccountSwitcherContactList not implemented');
611
- return [this.getUserContact()];
612
- }
613
- registerThreadButton(options) {
614
- const unregister = (0, _kefirStopper.default)();
615
- const removeButtonOnUnregister = button => {
616
- unregister.takeUntilBy(button.getStopper()).onValue(() => {
617
- button.destroy();
618
- });
619
- };
620
- const toolbarViewSub = (0, _toValueObservable.default)(this._toolbarViewDriverLiveSet).subscribe(_ref8 => {
621
- let {
622
- value: inboxToolbarView
623
- } = _ref8;
624
- if (inboxToolbarView.isForThread()) {
625
- if (!options.positions || (0, _includes.default)(options.positions, 'THREAD')) {
626
- if (options.threadSection === 'OTHER') {
627
- console.warn('registerThreadButton does not support OTHER section items in Inbox yet.');
628
- return;
629
- }
630
- removeButtonOnUnregister(inboxToolbarView.addButton({
631
- ...options,
632
- onClick: event => {
633
- options.onClick({
634
- position: 'THREAD',
635
- dropdown: event.dropdown,
636
- selectedThreadViewDrivers: [inboxToolbarView.getThreadViewDriver()],
637
- selectedThreadRowViewDrivers: []
638
- });
639
- }
640
- }));
641
- }
642
- } else if (inboxToolbarView.isForRowList()) {
643
- if (!options.positions || (0, _includes.default)(options.positions, 'LIST')) {
644
- if (options.listSection === 'OTHER') {
645
- console.warn('registerThreadButton does not support OTHER section items in Inbox yet.');
646
- return;
647
- }
648
- removeButtonOnUnregister(inboxToolbarView.addButton({
649
- ...options,
650
- onClick: event => {
651
- options.onClick({
652
- position: 'LIST',
653
- dropdown: event.dropdown,
654
- selectedThreadViewDrivers: [],
655
- selectedThreadRowViewDrivers: this.getSelectedThreadRowViewDrivers()
656
- });
657
- }
658
- }));
659
- }
660
- }
661
- });
662
- unregister.onValue(() => {
663
- toolbarViewSub.unsubscribe();
664
- });
665
- if (!options.positions || (0, _includes.default)(options.positions, 'ROW')) {
666
- const threadRowViewSub = (0, _toValueObservable.default)(this._threadRowViewDriverLiveSet).subscribe(_ref9 => {
667
- let {
668
- value: inboxThreadRowView
669
- } = _ref9;
670
- removeButtonOnUnregister(inboxThreadRowView.addToolbarButton({
671
- ...options,
672
- onClick: event => {
673
- options.onClick({
674
- position: 'ROW',
675
- dropdown: event.dropdown,
676
- selectedThreadViewDrivers: [],
677
- selectedThreadRowViewDrivers: [inboxThreadRowView]
678
- });
679
- }
680
- }));
681
- });
682
- unregister.onValue(() => {
683
- threadRowViewSub.unsubscribe();
684
- });
685
- }
686
- return () => {
687
- unregister.destroy();
688
- };
689
- }
690
- getSelectedThreadRowViewDrivers() {
691
- return Array.from(this.getThreadRowViewDriverLiveSet().values()).filter(threadRowViewDriver => threadRowViewDriver.isSelected());
692
- }
693
- async addNavItem(appId, navItemDescriptor) {
694
- if (!this._navMenuContainer) {
695
- this._navMenuContainer = document.createElement('div');
696
- this._navMenuContainer.classList.add('inboxsdk__navItem_appContainer');
697
- }
698
- return (0, _addNavItem.default)(navItemDescriptor, this._page.tree.getAllByTag('leftNav'), this._navMenuContainer);
699
- }
700
- addSupportItem(supportItemDescriptor) {}
701
- getSentMailNativeNavItem() {
702
- // stub, never resolve
703
- // console.log('getSentMailNativeNavItem not implemented');
704
- return new Promise((resolve, reject) => {});
705
- }
706
- createLink(routeID, params) {
707
- return (0, _createLink.default)(this, routeID, params);
708
- }
709
- async goto(routeID, params) {
710
- (0, _gotoView.default)(this, routeID, params);
711
- }
712
- addCustomRouteID(routeID) {
713
- this._customRouteIDs.add(routeID);
714
- this._pageCommunicator.registerAllowedHashLinkStartTerm(routeID.split('/')[0]);
715
- return () => {
716
- this._customRouteIDs.delete(routeID);
717
- };
718
- }
719
- addCustomListRouteID(routeID, handler) {
720
- console.log('addCustomListRouteID not implemented');
721
- return () => {};
722
- }
723
- showCustomRouteView(el) {
724
- let customViewBase = document.querySelector('body > .inboxsdk__custom_view');
725
- if (!customViewBase) {
726
- const _customViewBase = customViewBase = document.createElement('div');
727
- customViewBase.className = 'inboxsdk__custom_view';
728
- const {
729
- chat,
730
- nav
731
- } = (0, _getSidebarClassnames.default)();
732
- (0, _setCss.default)('custom_view_base_margins', `
733
- .inboxsdk__custom_view.${nav || 'nav_sidebar'} >
734
- .${(0, _idMap.default)('custom_view_container')}.${(0, _idMap.default)('custom_view_min_margins')} {
735
- margin-left: 232px;
736
- }
737
- .inboxsdk__custom_view.${chat || 'chat_sidebar'} >
738
- .${(0, _idMap.default)('custom_view_container')}.${(0, _idMap.default)('custom_view_min_margins')} {
739
- margin-right: 232px;
740
- }
741
- `);
742
-
743
- // Mirror the nav and chat sidebar classnames onto the inboxsdk__custom_view
744
- // element so that if the custom_view_container element also has the centerList
745
- // classname, then Inbox's margin rules for centerList will apply to it.
746
- const main = (0, _querySelectorOrFail.default)(document, 'body > div[class][id][jsaction][jslog]');
747
- (0, _makeMutationObserverChunkedStream.default)(main, {
748
- attributes: true,
749
- attributeFilter: ['class']
750
- }).toProperty(() => null).onValue(() => {
751
- [chat, nav].filter(Boolean).forEach(className => {
752
- if (main.classList.contains(className)) {
753
- _customViewBase.classList.add(className);
754
- } else {
755
- _customViewBase.classList.remove(className);
756
- }
757
- });
758
- });
759
- document.body.appendChild(customViewBase);
760
- }
761
- customViewBase.innerHTML = '';
762
- customViewBase.appendChild(el);
763
- customViewBase.style.display = '';
764
- document.body.classList.add('inboxsdk__custom_view_active');
765
- const main = document.querySelector('[id][jsaction] > div[token][class]');
766
- if (main) {
767
- main.style.display = 'none';
768
- }
769
- }
770
- showNativeRouteView() {
771
- document.body.classList.remove('inboxsdk__custom_view_active');
772
- const customViewBase = document.querySelector('body > .inboxsdk__custom_view');
773
- if (customViewBase) {
774
- customViewBase.style.display = 'none';
775
- customViewBase.innerHTML = '';
776
- }
777
- const main = document.querySelector('[id][jsaction] > div[token][class]');
778
- if (main) {
779
- main.style.display = '';
780
- }
781
- }
782
- setShowNativeNavMarker(isNative) {
783
- // stub
784
- }
785
- setShowNativeAddonSidebar(isNative) {
786
- // stub
787
- }
788
- registerSearchSuggestionsProvider(handler) {
789
- (0, _registerSearchSuggestionsProvider.default)(this, handler);
790
- }
791
- registerSearchQueryRewriter(obj) {
792
- console.log('registerSearchQueryRewriter not implemented');
793
- }
794
- addToolbarButtonForApp(buttonDescriptor) {
795
- const view = new _inboxAppToolbarButtonView.default(buttonDescriptor, this._page.tree.getAllByTag('appToolbarLocation'), this._page.tree.getAllByTag('searchBar'));
796
- return view.waitForReady();
797
- }
798
- addGlobalSidebarContentPanel(buttonDescriptor) {
799
- // stub
800
- return Promise.resolve(null);
801
- }
802
- isRunningInPageContext() {
803
- return !!(global.gbar && global.gbar._CONFIG);
804
- }
805
- showAppIdWarning() {
806
- const topDiv = document.createElement('div');
807
- topDiv.className = 'inboxsdk__appid_warning';
808
- topDiv.innerHTML = `
809
- <button type="button" value="" title="Close" class="inboxsdk__close_button"></button>
810
- <div class="inboxsdk__appid_warning_main">
811
- <div class="topline">InboxSDK Developer Warning: Invalid AppId</div>
812
- <div>You've loaded the InboxSDK with an unregistered appId. Registration is free but necessary to load the SDK.</div>
813
- </div>
814
- <a class="inboxsdk__appid_register" target="_blank" href="https://www.inboxsdk.com/register">Register Your App</a>
815
- `;
816
- document.body.insertBefore(topDiv, document.body.firstChild);
817
- const closeBtn = topDiv.querySelector('.inboxsdk__close_button');
818
- if (!closeBtn) throw new Error('Should not happen');
819
- closeBtn.addEventListener('click', function (e) {
820
- topDiv.remove();
821
- });
822
- }
823
- openDraftByMessageID(messageID) {
824
- throw new Error('Not implemented');
825
- }
826
- createMoleViewDriver(options) {
827
- return new _InboxMoleViewDriver.default(options, this);
828
- }
829
- createModalViewDriver(options) {
830
- return new _inboxModalView.default(options);
831
- }
832
- createTopMessageBarDriver(options) {
833
- throw new Error('Not implemented');
834
- }
835
- createDrawerViewDriver(options) {
836
- const drawerView = new _inboxDrawerView.default(options);
837
- // TODO if a native drawer was already open, we should close the native
838
- // drawer istead of the new one.
839
-
840
- // If a nativeDrawer is opened while the new SDK drawer is open, then close
841
- // the SDK drawer.
842
- _kefir.default.fromESObservable(this._page.tree.getAllByTag('nativeDrawer')).takeUntilBy(drawerView.getClosingStream()).onValue(changes => {
843
- for (let change of changes) {
844
- if (change.type === 'add') {
845
- drawerView.close();
846
- break;
847
- }
848
- }
849
- });
850
- return drawerView;
851
- }
852
- createBackdrop(zIndex, target) {
853
- return new _inboxBackdrop.default(zIndex, target);
854
- }
855
- closeOpenThread() {
856
- (0, _simulateKey.default)(document.body, 27, 27);
857
- }
858
- registerThreadRowViewSelectionHandler(handler) {
859
- return () => {};
860
- }
861
- }
862
- var _default = (0, _ud.defn)(module, InboxDriver);
863
- exports.default = _default;