- commit
- d5994ab082ebef5505cd970d5be8a0673d7e466e
- parent
- f38c7813c05f42981580edf6ecca639a10e19cff
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2024-04-19 06:56
Merge remote-tracking branch 'origin/thunderbird-115'
Diffstat
| M | background.js | 12 | +++++++++++- |
| M | content/js/message.js | 3 | +-- |
| M | experiment-api/api.js | 64 | ++++++++++++++++++++++++++++++++++--------------------------- |
| M | experiment-api/schema.json | 9 | ++++++--- |
| M | manifest.json | 3 | ++- |
5 files changed, 56 insertions, 35 deletions
diff --git a/background.js b/background.js
@@ -1,3 +1,13 @@ 1 1 /* global browser */ 2 23 -1 browser.xi.patchOpenSelectedMessages();-1 3 browser.tabs.onCreated.addListener(tab => { -1 4 if (tab.mailTab) { -1 5 browser.xi.patchTab(tab.id); -1 6 } -1 7 }); -1 8 -1 9 browser.tabs.query({mailTab: true}).then(tabs => { -1 10 tabs.forEach(tab => { -1 11 browser.xi.patchTab(tab.id); -1 12 }); -1 13 });
diff --git a/content/js/message.js b/content/js/message.js
@@ -149,11 +149,10 @@ export default function(msg, expanded) {
149 149
150 150 // body
151 151 var footer = e.querySelector('.message__footer');
152 -1 var details = e.querySelector('.message__details');
153 152 var bodyLoaded = false;
154 153 var lazyLoadBody = function() {
155 154 if (!bodyLoaded && e.classList.contains('is-expanded')) {
156 -1 details.insertBefore(createBody(msg), footer);
-1 155 footer.before(createBody(msg));
157 156 bodyLoaded = true;
158 157 }
159 158 };
diff --git a/experiment-api/api.js b/experiment-api/api.js
@@ -2,8 +2,10 @@ 2 2 3 3 var {ExtensionCommon} = ChromeUtils.import('resource://gre/modules/ExtensionCommon.jsm'); 4 4 var {Gloda} = ChromeUtils.import('resource:///modules/gloda/GlodaPublic.jsm'); -1 5 var {GlodaConstants} = ChromeUtils.import('resource:///modules/gloda/GlodaConstants.jsm'); 5 6 var {Services} = ChromeUtils.import('resource://gre/modules/Services.jsm'); 6 7 var {MsgHdrToMimeMessage} = ChromeUtils.import('resource:///modules/gloda/MimeMessage.jsm'); -1 8 var {MailServices} = ChromeUtils.import('resource:///modules/MailServices.jsm'); 7 9 8 10 var unique = function(l, keyFn) { 9 11 var keys = []; @@ -16,6 +18,16 @@ var unique = function(l, keyFn) { 16 18 }); 17 19 }; 18 20 -1 21 var waitForLoad = function(win) { -1 22 return new Promise(resolve => { -1 23 if (win.document.readyState === 'complete') { -1 24 resolve(); -1 25 } else { -1 26 win.addEventListener('load', resolve); -1 27 } -1 28 }); -1 29 }; -1 30 19 31 var getConversation = function(ids) { 20 32 return new Promise((resolve, reject) => { 21 33 var conversationListener = { @@ -44,7 +56,7 @@ var getConversation = function(ids) { 44 56 }, 45 57 }; 46 5847 -1 var query = Gloda.newQuery(Gloda.NOUN_MESSAGE);-1 59 var query = Gloda.newQuery(GlodaConstants.NOUN_MESSAGE); 48 60 query.headerMessageID.apply(query, ids); 49 61 query.getCollection(listener, null); 50 62 }); @@ -81,34 +93,30 @@ var xi = class extends ExtensionCommon.ExtensionAPI { 81 93 var win = Services.wm.getMostRecentWindow('mail:3pane'); 82 94 var msgHdr = context.extension.messageManager.get(id); 83 95 var uri = msgHdr.folder.getUriForMsg(msgHdr);84 -1 win.ViewPageSource([uri]);-1 96 var url = MailServices.mailSession.ConvertMsgURIToMsgURL(uri, null); -1 97 win.openDialog( -1 98 'chrome://messenger/content/viewSource.xhtml', -1 99 '_blank', -1 100 'all,dialog=no', -1 101 {URL: url}, -1 102 ); 85 103 },86 -1 // cannot be replaced by messageDisplay.OnMessagesDisplayed because87 -1 // we need to replace the original handler88 -1 patchOpenSelectedMessages() {89 -1 var observer = (win, topic) => {90 -1 if (topic === 'domwindowopened' && win.location.href === 'chrome://messenger/content/messenger.xhtml') {91 -1 win.MsgOpenSelectedMessages = () => {92 -1 var msgs = win.gFolderDisplay.selectedMessages;93 -1 var ids = msgs.map(msgHdr => msgHdr.messageId);94 -1 var url = '/content/main.html?ids=' + encodeURIComponent(ids);95 -1 var tab = win.openTab('contentTab', {96 -1 url: context.uri.resolve(url),97 -1 linkHandler: 'single-page',98 -1 principal: context.extension.principal,99 -1 });100 -1 tab.toolbar.hidden = true;101 -1 };102 -1 }103 -1 win.addEventListener('load', () => observer(win, topic));104 -1 };105 -1106 -1 Services.ww.registerNotification(observer);107 -1108 -1 var e = Services.ww.getWindowEnumerator();109 -1 while (e.hasMoreElements()) {110 -1 observer(e.getNext(), 'domwindowopened');111 -1 }-1 104 patchTab(id) { -1 105 var tabObject = context.extension.tabManager.get(id); -1 106 var win = tabObject.nativeTab.chromeBrowser.contentWindow; -1 107 return waitForLoad(win).then(() => { -1 108 win.threadPane._onItemActivate = () => { -1 109 var msgs = win.gDBView.getSelectedMsgHdrs(); -1 110 var ids = msgs.map(msgHdr => msgHdr.messageId); -1 111 var url = '/content/main.html?ids=' + encodeURIComponent(ids); -1 112 var tab = win.openTab('contentTab', { -1 113 url: context.uri.resolve(url), -1 114 linkHandler: 'single-page', -1 115 principal: context.extension.principal, -1 116 }); -1 117 tab.toolbar.hidden = true; -1 118 }; -1 119 }); 112 120 }, 113 121 }, 114 122 };
diff --git a/experiment-api/schema.json b/experiment-api/schema.json
@@ -28,9 +28,12 @@ 28 28 "type": "integer" 29 29 }] 30 30 }, {31 -1 "name": "patchOpenSelectedMessages",-1 31 "name": "patchTab", 32 32 "type": "function",33 -1 "async": false,34 -1 "parameters": []-1 33 "async": true, -1 34 "parameters": [{ -1 35 "name": "id", -1 36 "type": "integer" -1 37 }] 35 38 }] 36 39 }]
diff --git a/manifest.json b/manifest.json
@@ -17,7 +17,8 @@ 17 17 "permissions": [ 18 18 "accountsRead", 19 19 "messagesRead",20 -1 "messagesMove"-1 20 "messagesMove", -1 21 "tabs" 21 22 ], 22 23 "experiment_apis": { 23 24 "xi": {