@inboxsdk/core 2.2.26 → 2.2.27
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 +163 -57
- package/inboxsdk.js.map +1 -1
- package/package.json +1 -1
- package/pageWorld.js.map +1 -1
- package/src/platform-implementation-js/dom-driver/gmail/selectors.d.ts +120 -0
- package/src/platform-implementation-js/dom-driver/gmail/selectors.d.ts.map +1 -1
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view.d.ts.map +1 -1
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-view.d.ts.map +1 -1
package/inboxsdk.js
CHANGED
|
@@ -18054,7 +18054,7 @@ options.insert = htmlElement => {
|
|
|
18054
18054
|
htmlElement.setAttribute('data-inboxsdk-version',
|
|
18055
18055
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment -- this is injected by webpack
|
|
18056
18056
|
///@ts-ignore
|
|
18057
|
-
"2.2.
|
|
18057
|
+
"2.2.27-1790289405402-94d8cee7e8e37c39");
|
|
18058
18058
|
document.head.append(htmlElement);
|
|
18059
18059
|
};
|
|
18060
18060
|
options.domAPI = (styleDomAPI_default());
|
|
@@ -25779,7 +25779,7 @@ module.exports = assocIndexOf;
|
|
|
25779
25779
|
|
|
25780
25780
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment -- SDK_VERSION is injected by webpack
|
|
25781
25781
|
///@ts-ignore
|
|
25782
|
-
const BUILD_VERSION = "2.2.
|
|
25782
|
+
const BUILD_VERSION = "2.2.27-1790289405402-94d8cee7e8e37c39";
|
|
25783
25783
|
if (false) {}
|
|
25784
25784
|
|
|
25785
25785
|
/***/ }),
|
|
@@ -27571,7 +27571,7 @@ options.insert = htmlElement => {
|
|
|
27571
27571
|
htmlElement.setAttribute('data-inboxsdk-version',
|
|
27572
27572
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment -- this is injected by webpack
|
|
27573
27573
|
///@ts-ignore
|
|
27574
|
-
"2.2.
|
|
27574
|
+
"2.2.27-1790289405402-94d8cee7e8e37c39");
|
|
27575
27575
|
document.head.append(htmlElement);
|
|
27576
27576
|
};
|
|
27577
27577
|
options.domAPI = (styleDomAPI_default());
|
|
@@ -45927,7 +45927,6 @@ function reemitClickEvent(event) {
|
|
|
45927
45927
|
|
|
45928
45928
|
|
|
45929
45929
|
|
|
45930
|
-
|
|
45931
45930
|
let hasSeenOldElement = false;
|
|
45932
45931
|
const MORE_MENU_WAIT_TIMEOUT = 5 * 1000;
|
|
45933
45932
|
const MORE_MENU_WAIT_STEP = 16;
|
|
@@ -45970,7 +45969,7 @@ class GmailMessageView {
|
|
|
45970
45969
|
// client side, so the new message added (from your reply) shows up in the UI right away and has a data-message-id but
|
|
45971
45970
|
// because it hasn't been synced to the server it does not have a data-legacy-messag-id
|
|
45972
45971
|
// so we wait until the message has been synced to the server before saying this is ready
|
|
45973
|
-
const messageIdElement = this.#
|
|
45972
|
+
const messageIdElement = this.#driver.selectors.querySelectorByKey(this.#element, 'messageView.syncIdElement');
|
|
45974
45973
|
if (messageIdElement) {
|
|
45975
45974
|
const syncMessageId = messageIdElement.getAttribute('data-message-id');
|
|
45976
45975
|
if (!syncMessageId) throw new Error('data-message-id attribute has no value');
|
|
@@ -46054,7 +46053,7 @@ class GmailMessageView {
|
|
|
46054
46053
|
getRecipients() {
|
|
46055
46054
|
let recipients = this.#recipients;
|
|
46056
46055
|
if (recipients) return recipients;
|
|
46057
|
-
const receipientSpans =
|
|
46056
|
+
const receipientSpans = this.#driver.selectors.querySelectorAllByKey(this.#element, 'messageView.recipientSpans');
|
|
46058
46057
|
recipients = this.#recipients = receipientSpans.map(span => {
|
|
46059
46058
|
return this.#getUpdatedContact({
|
|
46060
46059
|
name: span.getAttribute('name'),
|
|
@@ -46066,7 +46065,7 @@ class GmailMessageView {
|
|
|
46066
46065
|
getRecipientEmailAddresses() {
|
|
46067
46066
|
let recipients = this.#recipientEmailAddresses;
|
|
46068
46067
|
if (recipients) return recipients;
|
|
46069
|
-
const receipientSpans =
|
|
46068
|
+
const receipientSpans = this.#driver.selectors.querySelectorAllByKey(this.#element, 'messageView.recipientSpans');
|
|
46070
46069
|
recipients = this.#recipientEmailAddresses = receipientSpans.map(span => span.getAttribute('email') || '');
|
|
46071
46070
|
return recipients;
|
|
46072
46071
|
}
|
|
@@ -46207,7 +46206,7 @@ class GmailMessageView {
|
|
|
46207
46206
|
if (!ignoreLoadStatus && !this.#messageLoaded) {
|
|
46208
46207
|
throw new Error('tried to get message id before message is loaded');
|
|
46209
46208
|
}
|
|
46210
|
-
const messageIdElement = this.#
|
|
46209
|
+
const messageIdElement = this.#driver.selectors.querySelectorByKey(this.#element, 'messageView.legacyIdElement');
|
|
46211
46210
|
if (messageIdElement) {
|
|
46212
46211
|
const messageId = messageIdElement.getAttribute('data-legacy-message-id');
|
|
46213
46212
|
if (!messageId) throw new Error('message id attribute with no value, wtf?');
|
|
@@ -46294,9 +46293,9 @@ class GmailMessageView {
|
|
|
46294
46293
|
} else {
|
|
46295
46294
|
let attachmentDiv;
|
|
46296
46295
|
if (this.getViewState() === 'COLLAPSED') {
|
|
46297
|
-
attachmentDiv = (
|
|
46296
|
+
attachmentDiv = this.#driver.selectors.querySelectorByKeyOrFail(this.#element, 'messageView.attachmentIconSlotCollapsed');
|
|
46298
46297
|
} else {
|
|
46299
|
-
attachmentDiv = (
|
|
46298
|
+
attachmentDiv = this.#driver.selectors.querySelectorByKeyOrFail(this.#element, 'messageView.attachmentIconSlot');
|
|
46300
46299
|
}
|
|
46301
46300
|
const img = opts.iconHtml != null ? getCustomIconWrapper() : getImgElement();
|
|
46302
46301
|
const onClick = opts.onClick;
|
|
@@ -46457,7 +46456,7 @@ class GmailMessageView {
|
|
|
46457
46456
|
this.#setupReplyStream();
|
|
46458
46457
|
}
|
|
46459
46458
|
#setupReplyStream() {
|
|
46460
|
-
const replyContainer = this.#
|
|
46459
|
+
const replyContainer = this.#driver.selectors.querySelectorByKey(this.#element, 'messageView.replyContainer');
|
|
46461
46460
|
if (!replyContainer) {
|
|
46462
46461
|
return;
|
|
46463
46462
|
}
|
|
@@ -46510,7 +46509,7 @@ class GmailMessageView {
|
|
|
46510
46509
|
if (!self.#element.classList.contains('h7')) {
|
|
46511
46510
|
contactType = 'sender';
|
|
46512
46511
|
} else {
|
|
46513
|
-
if (self.#
|
|
46512
|
+
if (self.#driver.selectors.querySelectorByKeyOrFail(self.#element, 'messageView.senderHeading').contains(element)) {
|
|
46514
46513
|
contactType = 'sender';
|
|
46515
46514
|
} else {
|
|
46516
46515
|
contactType = 'recipient';
|
|
@@ -46527,14 +46526,15 @@ class GmailMessageView {
|
|
|
46527
46526
|
}));
|
|
46528
46527
|
}
|
|
46529
46528
|
#getAttachmentArea() {
|
|
46530
|
-
|
|
46531
|
-
|
|
46529
|
+
const attachmentArea = this.#driver.selectors.querySelectorByKey(this.#element, 'messageView.attachmentArea');
|
|
46530
|
+
if (attachmentArea) {
|
|
46531
|
+
return new gmail_attachment_area_view(attachmentArea, this.#driver, this);
|
|
46532
46532
|
}
|
|
46533
46533
|
return null;
|
|
46534
46534
|
}
|
|
46535
46535
|
#createAttachmentArea() {
|
|
46536
46536
|
const gmailAttachmentAreaView = new gmail_attachment_area_view(null, this.#driver, this);
|
|
46537
|
-
const beforeElement = (
|
|
46537
|
+
const beforeElement = this.#driver.selectors.querySelectorByKeyOrFail(this.#element, 'messageView.attachmentAreaAnchor');
|
|
46538
46538
|
const parentNode = beforeElement.parentNode;
|
|
46539
46539
|
if (!parentNode) throw new Error('parentNode not found');
|
|
46540
46540
|
parentNode.insertBefore(gmailAttachmentAreaView.getElement(), beforeElement);
|
|
@@ -47410,39 +47410,19 @@ class GmailThreadView {
|
|
|
47410
47410
|
const sidebar = this.#driver.getGlobalSidebar();
|
|
47411
47411
|
return sidebar.addThreadSidebarContentPanel(descriptor, this);
|
|
47412
47412
|
}
|
|
47413
|
-
#subjectContainerSelectors = {
|
|
47414
|
-
'2022_10_21': '.a98.iY > .nH',
|
|
47415
|
-
'2022_10_12': '.PeIF1d > .nH',
|
|
47416
|
-
[2018]: '.if > .nH'
|
|
47417
|
-
};
|
|
47418
|
-
#subjectContainerSelectorsAfterNov162023 = {
|
|
47419
|
-
'2023_11_16': '* > .nH'
|
|
47420
|
-
};
|
|
47421
47413
|
#subjectAISuggestionsContainerSelectors = {
|
|
47422
47414
|
'2024_04_26': '.nH > .einvLd'
|
|
47423
47415
|
};
|
|
47424
47416
|
addNoticeBar() {
|
|
47425
47417
|
const el = document.createElement('div');
|
|
47426
47418
|
el.className = (0,idMap/* default */.A)('thread_noticeBar');
|
|
47427
|
-
|
|
47428
|
-
|
|
47429
|
-
|
|
47430
|
-
|
|
47431
|
-
// thread view gmail update Nov 16, 2023
|
|
47432
|
-
selectorsToTry = this.#subjectContainerSelectorsAfterNov162023;
|
|
47433
|
-
}
|
|
47434
|
-
for (const [currentVersion, selector] of Object.entries(selectorsToTry)) {
|
|
47435
|
-
const el = this.#element.querySelector(selector);
|
|
47436
|
-
if (!el) {
|
|
47437
|
-
continue;
|
|
47438
|
-
}
|
|
47439
|
-
version = currentVersion;
|
|
47440
|
-
subjectContainer = el;
|
|
47441
|
-
break;
|
|
47442
|
-
}
|
|
47419
|
+
|
|
47420
|
+
// `.a98.iY` is the thread view gmail update Nov 16, 2023
|
|
47421
|
+
const subjectContainerKey = this.#element.matches('.a98.iY') ? 'threadView.subjectContainer' : 'threadView.subjectContainerLegacy';
|
|
47422
|
+
const subjectContainer = this.#driver.selectors.querySelectorByKey(this.#element, subjectContainerKey);
|
|
47443
47423
|
if (!subjectContainer) throw new Error('Failed to find subject container');
|
|
47444
47424
|
this.#driver.getLogger().eventSdkPassive('addNoticeBar subjectContainer', {
|
|
47445
|
-
version
|
|
47425
|
+
version: subjectContainerKey
|
|
47446
47426
|
});
|
|
47447
47427
|
|
|
47448
47428
|
// AI suggestions container could be rendered after the subject container so
|
|
@@ -47473,7 +47453,7 @@ class GmailThreadView {
|
|
|
47473
47453
|
if (!parentElement) throw new Error('missing parent element');
|
|
47474
47454
|
const customMessageView = new CustomMessageView(descriptorStream, () => {
|
|
47475
47455
|
this.#readyStream.onValue(async () => {
|
|
47476
|
-
const messageContainer = this.#
|
|
47456
|
+
const messageContainer = this.#driver.selectors.querySelectorByKey(this.#element, 'threadView.messageList');
|
|
47477
47457
|
if (!messageContainer) return;
|
|
47478
47458
|
let mostRecentDate = Number.MIN_SAFE_INTEGER;
|
|
47479
47459
|
let insertBeforeMessage;
|
|
@@ -47523,7 +47503,7 @@ class GmailThreadView {
|
|
|
47523
47503
|
customMessageView.getElement().classList.add('inboxsdk__custom_message_view_hidden');
|
|
47524
47504
|
|
|
47525
47505
|
// get the message element that contains the hidden messages notice
|
|
47526
|
-
let hiddenNoticeMessageElement = this.#
|
|
47506
|
+
let hiddenNoticeMessageElement = this.#driver.selectors.querySelectorByKey(this.#element, 'threadView.hiddenNoticeMessage');
|
|
47527
47507
|
let nativeHiddenNoticePresent = true;
|
|
47528
47508
|
if (!hiddenNoticeMessageElement) {
|
|
47529
47509
|
nativeHiddenNoticePresent = false;
|
|
@@ -47562,7 +47542,7 @@ class GmailThreadView {
|
|
|
47562
47542
|
const numberCustomHiddenMessages = this.#hiddenCustomMessageViews.size;
|
|
47563
47543
|
let numberNativeHiddenMessages = null;
|
|
47564
47544
|
if (nativeHiddenNoticePresent) {
|
|
47565
|
-
const nativeHiddenNoticeCountSpan = (
|
|
47545
|
+
const nativeHiddenNoticeCountSpan = this.#driver.selectors.querySelectorByKeyOrFail(hiddenNoticeMessageElement, 'threadView.hiddenNoticeCount');
|
|
47566
47546
|
numberNativeHiddenMessages = Number(nativeHiddenNoticeCountSpan.innerHTML);
|
|
47567
47547
|
if (isNaN(numberNativeHiddenMessages)) {
|
|
47568
47548
|
throw new Error("Couldn't find number of native hidden messages in dom structure");
|
|
@@ -47578,7 +47558,7 @@ class GmailThreadView {
|
|
|
47578
47558
|
if (!nativeHiddenNoticePresent) {
|
|
47579
47559
|
const fakeAppNoticeElement = document.createElement('span');
|
|
47580
47560
|
fakeAppNoticeElement.classList.add('adx');
|
|
47581
|
-
const insertionPoint = (
|
|
47561
|
+
const insertionPoint = this.#driver.selectors.querySelectorByKeyOrFail(hiddenNoticeMessageElement, 'threadView.hiddenNoticeSlot');
|
|
47582
47562
|
insertionPoint.appendChild(fakeAppNoticeElement);
|
|
47583
47563
|
}
|
|
47584
47564
|
const hiddenNoticeElement = (0,querySelectorOrFail/* default */.A)(hiddenNoticeMessageElement, '.adx');
|
|
@@ -47661,7 +47641,7 @@ class GmailThreadView {
|
|
|
47661
47641
|
if (this.#threadID) return this.#threadID;else throw new Error('Failed to get id for thread');
|
|
47662
47642
|
}
|
|
47663
47643
|
addLabel() {
|
|
47664
|
-
const labelContainer = this.#
|
|
47644
|
+
const labelContainer = this.#driver.selectors.querySelectorByKey(this.#element, 'threadView.labelContainer');
|
|
47665
47645
|
if (!labelContainer) {
|
|
47666
47646
|
throw new Error('Thread view label container not found');
|
|
47667
47647
|
}
|
|
@@ -47685,9 +47665,9 @@ class GmailThreadView {
|
|
|
47685
47665
|
return view;
|
|
47686
47666
|
}
|
|
47687
47667
|
addSubjectButton(button) {
|
|
47688
|
-
const subjectParent = this.#
|
|
47668
|
+
const subjectParent = this.#driver.selectors.querySelectorByKey(this.#element, 'threadView.subjectParent');
|
|
47689
47669
|
if (!subjectParent) {
|
|
47690
|
-
throw new querySelectorOrFail/* SelectorError */.a('.
|
|
47670
|
+
throw new querySelectorOrFail/* SelectorError */.a('threadView.subjectParent', {
|
|
47691
47671
|
cause: 'Subject wrapper element not found'
|
|
47692
47672
|
});
|
|
47693
47673
|
}
|
|
@@ -47724,13 +47704,12 @@ class GmailThreadView {
|
|
|
47724
47704
|
return new basic_button_view_controller/* default */.A(buttonOptions);
|
|
47725
47705
|
}
|
|
47726
47706
|
addFooterButton(button) {
|
|
47727
|
-
const
|
|
47728
|
-
const messagesContainer = this.#element.querySelector(messagesSelector);
|
|
47707
|
+
const messagesContainer = this.#driver.selectors.querySelectorByKey(this.#element, 'threadView.messagesContainer');
|
|
47729
47708
|
if (!messagesContainer) {
|
|
47730
47709
|
this.#driver.getLogger().eventSdkPassive('Footer button selector fail', {
|
|
47731
47710
|
html: (0,censorHTMLtree/* default */.A)(this.#element)
|
|
47732
47711
|
});
|
|
47733
|
-
throw new querySelectorOrFail/* SelectorError */.a(
|
|
47712
|
+
throw new querySelectorOrFail/* SelectorError */.a('threadView.messagesContainer', {
|
|
47734
47713
|
cause: 'Last message footer element not found'
|
|
47735
47714
|
});
|
|
47736
47715
|
}
|
|
@@ -47806,8 +47785,7 @@ class GmailThreadView {
|
|
|
47806
47785
|
return null;
|
|
47807
47786
|
}
|
|
47808
47787
|
#findSubjectToolbarElement() {
|
|
47809
|
-
|
|
47810
|
-
return toolbarContainerElement;
|
|
47788
|
+
return this.#driver.selectors.querySelectorByKey(this.#element, 'threadView.subjectToolbar');
|
|
47811
47789
|
}
|
|
47812
47790
|
#findBottomReplyToolbarElement() {
|
|
47813
47791
|
// Get all .amn elements (may exist in multiple locations due to A/B testing)
|
|
@@ -47849,7 +47827,7 @@ class GmailThreadView {
|
|
|
47849
47827
|
return false;
|
|
47850
47828
|
}
|
|
47851
47829
|
#setupMessageViewStream() {
|
|
47852
|
-
var openMessage = this.#
|
|
47830
|
+
var openMessage = this.#driver.selectors.querySelectorByKey(this.#element, 'threadView.openMessage');
|
|
47853
47831
|
if (!openMessage) {
|
|
47854
47832
|
var self = this;
|
|
47855
47833
|
setTimeout(function () {
|
|
@@ -47932,7 +47910,7 @@ class GmailThreadView {
|
|
|
47932
47910
|
}
|
|
47933
47911
|
#listenToExpandCollapseAll() {
|
|
47934
47912
|
//expand all
|
|
47935
|
-
const expandAllElementImg = this.#
|
|
47913
|
+
const expandAllElementImg = this.#driver.selectors.querySelectorByKey(this.#element, 'threadView.expandAllButton');
|
|
47936
47914
|
if (expandAllElementImg) {
|
|
47937
47915
|
const expandAllElement = findParent(expandAllElementImg, el => el.getAttribute('role') === 'button');
|
|
47938
47916
|
if (expandAllElement) {
|
|
@@ -47946,7 +47924,7 @@ class GmailThreadView {
|
|
|
47946
47924
|
}
|
|
47947
47925
|
|
|
47948
47926
|
//collapse all
|
|
47949
|
-
const collapseAllElementImg = this.#
|
|
47927
|
+
const collapseAllElementImg = this.#driver.selectors.querySelectorByKey(this.#element, 'threadView.collapseAllButton');
|
|
47950
47928
|
if (collapseAllElementImg) {
|
|
47951
47929
|
const collapseAllElement = findParent(collapseAllElementImg, el => el.getAttribute('role') === 'button');
|
|
47952
47930
|
if (collapseAllElement) {
|
|
@@ -48274,7 +48252,7 @@ options.insert = htmlElement => {
|
|
|
48274
48252
|
htmlElement.setAttribute('data-inboxsdk-version',
|
|
48275
48253
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment -- this is injected by webpack
|
|
48276
48254
|
///@ts-ignore
|
|
48277
|
-
"2.2.
|
|
48255
|
+
"2.2.27-1790289405402-94d8cee7e8e37c39");
|
|
48278
48256
|
document.head.append(htmlElement);
|
|
48279
48257
|
};
|
|
48280
48258
|
options.domAPI = (styleDomAPI_default());
|
|
@@ -53113,7 +53091,7 @@ mole_view_module_options.insert = htmlElement => {
|
|
|
53113
53091
|
htmlElement.setAttribute('data-inboxsdk-version',
|
|
53114
53092
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment -- this is injected by webpack
|
|
53115
53093
|
///@ts-ignore
|
|
53116
|
-
"2.2.
|
|
53094
|
+
"2.2.27-1790289405402-94d8cee7e8e37c39");
|
|
53117
53095
|
document.head.append(htmlElement);
|
|
53118
53096
|
};
|
|
53119
53097
|
mole_view_module_options.domAPI = (styleDomAPI_default());
|
|
@@ -57544,12 +57522,140 @@ const GMAIL_SELECTORS = {
|
|
|
57544
57522
|
* Root: message element.
|
|
57545
57523
|
*/
|
|
57546
57524
|
'messageView.dateElement': ['.ads .gK .g3'],
|
|
57525
|
+
/**
|
|
57526
|
+
* The element carrying the message's sync id in `data-message-id`.
|
|
57527
|
+
* Root: message element.
|
|
57528
|
+
*/
|
|
57529
|
+
'messageView.syncIdElement': ['[data-message-id]'],
|
|
57530
|
+
/**
|
|
57531
|
+
* The element carrying `data-legacy-message-id`. The SDK also writes that
|
|
57532
|
+
* attribute onto `messageView.syncIdElement`, so a rung must match both.
|
|
57533
|
+
* Root: message element.
|
|
57534
|
+
*/
|
|
57535
|
+
'messageView.legacyIdElement': ['[data-legacy-message-id]'],
|
|
57536
|
+
/**
|
|
57537
|
+
* The header span attachment icons are added to, in an expanded message.
|
|
57538
|
+
* Root: message element.
|
|
57539
|
+
*/
|
|
57540
|
+
'messageView.attachmentIconSlot': ['td.gH div.gK span'],
|
|
57541
|
+
/**
|
|
57542
|
+
* The header span attachment icons are added to, in a collapsed message.
|
|
57543
|
+
* Root: message element.
|
|
57544
|
+
*/
|
|
57545
|
+
'messageView.attachmentIconSlotCollapsed': ['.adf.ads td.gH span'],
|
|
57546
|
+
/**
|
|
57547
|
+
* The container that holds an inline reply; watched for its class change.
|
|
57548
|
+
* Root: message element.
|
|
57549
|
+
*/
|
|
57550
|
+
'messageView.replyContainer': ['.ip'],
|
|
57551
|
+
/**
|
|
57552
|
+
* The sender heading of an expanded message; a hovered contact inside it is
|
|
57553
|
+
* the sender, and one outside it a recipient.
|
|
57554
|
+
* Root: message element.
|
|
57555
|
+
*/
|
|
57556
|
+
'messageView.senderHeading': ['h3.iw'],
|
|
57557
|
+
/**
|
|
57558
|
+
* Gmail's attachment area. The area the SDK builds carries the same class,
|
|
57559
|
+
* so this can also match that one.
|
|
57560
|
+
* Root: message element.
|
|
57561
|
+
*/
|
|
57562
|
+
'messageView.attachmentArea': ['.hq'],
|
|
57563
|
+
/**
|
|
57564
|
+
* The element the SDK's own attachment area is inserted before.
|
|
57565
|
+
* Root: message element.
|
|
57566
|
+
*/
|
|
57567
|
+
'messageView.attachmentAreaAnchor': ['.hi'],
|
|
57568
|
+
/**
|
|
57569
|
+
* The recipients' spans in a message header; each carries `email` and `name`.
|
|
57570
|
+
* Root: message element.
|
|
57571
|
+
*/
|
|
57572
|
+
'messageView.recipientSpans': ['.hb span[email]'],
|
|
57547
57573
|
/**
|
|
57548
57574
|
* The thread's subject heading. Read for its text, or walked child by child
|
|
57549
57575
|
* when it contains emoji images.
|
|
57550
57576
|
* Root: thread element.
|
|
57551
57577
|
*/
|
|
57552
57578
|
'threadView.subject': ['.ha h2'],
|
|
57579
|
+
/**
|
|
57580
|
+
* The list holding the thread's messages, which custom messages are
|
|
57581
|
+
* inserted into.
|
|
57582
|
+
* Root: thread element.
|
|
57583
|
+
*/
|
|
57584
|
+
'threadView.messageList': ['[role=list]'],
|
|
57585
|
+
/**
|
|
57586
|
+
* The message element that contains the hidden messages notice.
|
|
57587
|
+
* Root: thread element.
|
|
57588
|
+
*/
|
|
57589
|
+
'threadView.hiddenNoticeMessage': ['.adv'],
|
|
57590
|
+
/**
|
|
57591
|
+
* The span holding the number of messages Gmail has hidden; read as a number.
|
|
57592
|
+
* Root: `threadView.hiddenNoticeMessage`.
|
|
57593
|
+
*/
|
|
57594
|
+
'threadView.hiddenNoticeCount': ['.adx span'],
|
|
57595
|
+
/**
|
|
57596
|
+
* Where a stand-in notice is inserted when Gmail renders no native one.
|
|
57597
|
+
* Root: `threadView.hiddenNoticeMessage`.
|
|
57598
|
+
*/
|
|
57599
|
+
'threadView.hiddenNoticeSlot': ['.G3'],
|
|
57600
|
+
/**
|
|
57601
|
+
* The container an app's thread label is appended to, and re-appended to
|
|
57602
|
+
* whenever Gmail removes it.
|
|
57603
|
+
* Root: thread element.
|
|
57604
|
+
*/
|
|
57605
|
+
'threadView.labelContainer': ['.ha .J-J5-Ji'],
|
|
57606
|
+
/**
|
|
57607
|
+
* The subject wrapper that subject buttons are added to.
|
|
57608
|
+
* Root: thread element.
|
|
57609
|
+
*/
|
|
57610
|
+
'threadView.subjectParent': ['.V8djrc.byY'],
|
|
57611
|
+
/**
|
|
57612
|
+
* The messages container, whose last message footer holds footer buttons.
|
|
57613
|
+
* Root: thread element.
|
|
57614
|
+
*/
|
|
57615
|
+
'threadView.messagesContainer': ['div.nH .aHU'],
|
|
57616
|
+
/**
|
|
57617
|
+
* The toolbar beside the thread subject, which subject buttons are put in.
|
|
57618
|
+
* Root: thread element.
|
|
57619
|
+
*/
|
|
57620
|
+
'threadView.subjectToolbar': ['.bHJ'],
|
|
57621
|
+
/**
|
|
57622
|
+
* An expanded message. Its PARENT is the container the message view stream
|
|
57623
|
+
* watches, so stay at this depth.
|
|
57624
|
+
* Root: thread element.
|
|
57625
|
+
*/
|
|
57626
|
+
'threadView.openMessage': ['.h7'],
|
|
57627
|
+
/**
|
|
57628
|
+
* The expand-all icon. The code walks up to its `role=button` ancestor, so
|
|
57629
|
+
* stay at the image.
|
|
57630
|
+
* Root: thread element.
|
|
57631
|
+
*/
|
|
57632
|
+
'threadView.expandAllButton': ['img.gx'],
|
|
57633
|
+
/**
|
|
57634
|
+
* The collapse-all icon. The code walks up to its `role=button` ancestor, so
|
|
57635
|
+
* stay at the image.
|
|
57636
|
+
* Root: thread element.
|
|
57637
|
+
*/
|
|
57638
|
+
'threadView.collapseAllButton': ['img.gq'],
|
|
57639
|
+
/**
|
|
57640
|
+
* The subject container the notice bar is inserted into, in the current
|
|
57641
|
+
* thread view.
|
|
57642
|
+
* Root: thread element.
|
|
57643
|
+
*/
|
|
57644
|
+
'threadView.subjectContainer': [
|
|
57645
|
+
// 2023-11-16 thread-view redesign
|
|
57646
|
+
'* > .nH'],
|
|
57647
|
+
/**
|
|
57648
|
+
* The subject container the notice bar is inserted into, in the thread
|
|
57649
|
+
* views that predate the redesign.
|
|
57650
|
+
* Root: thread element.
|
|
57651
|
+
*/
|
|
57652
|
+
'threadView.subjectContainerLegacy': [
|
|
57653
|
+
// 2018 layout
|
|
57654
|
+
'.if > .nH',
|
|
57655
|
+
// 2022-10-21 layout
|
|
57656
|
+
'.a98.iY > .nH',
|
|
57657
|
+
// 2022-10-12 layout
|
|
57658
|
+
'.PeIF1d > .nH'],
|
|
57553
57659
|
/**
|
|
57554
57660
|
* The element holding the list toolbar and the thread list.
|
|
57555
57661
|
* Root: the row list element container.
|