webext-schema 2.3.3 → 3.0.1
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/modules/browser.js +7 -12
- package/modules/file-util.js +14 -12
- package/modules/schema.js +14 -17
- package/package.json +6 -6
- package/schemas/beta/webext.json +48 -188
- package/schemas/central/webext.json +8 -4
- package/schemas/mail/mailext.json +229 -7
package/modules/browser.js
CHANGED
|
@@ -74,8 +74,7 @@ export const getCloseTabsByDoubleClickValue = async () => {
|
|
|
74
74
|
});
|
|
75
75
|
let userValue;
|
|
76
76
|
if (isGranted) {
|
|
77
|
-
const { browserSettings } = browser;
|
|
78
|
-
const { closeTabsByDoubleClick } = browserSettings;
|
|
77
|
+
const { browserSettings: { closeTabsByDoubleClick } } = browser;
|
|
79
78
|
userValue = await closeTabsByDoubleClick.get({});
|
|
80
79
|
}
|
|
81
80
|
return userValue || null;
|
|
@@ -92,8 +91,7 @@ export const setContextMenuOnMouseup = async () => {
|
|
|
92
91
|
});
|
|
93
92
|
let res;
|
|
94
93
|
if (isGranted) {
|
|
95
|
-
const { browserSettings } = browser;
|
|
96
|
-
const { contextMenuShowEvent } = browserSettings;
|
|
94
|
+
const { browserSettings: { contextMenuShowEvent } } = browser;
|
|
97
95
|
const { levelOfControl, value } = await contextMenuShowEvent.get({});
|
|
98
96
|
if (value === 'mouseup') {
|
|
99
97
|
res = true;
|
|
@@ -117,8 +115,7 @@ export const clearContextMenuOnMouseup = async () => {
|
|
|
117
115
|
});
|
|
118
116
|
let res;
|
|
119
117
|
if (isGranted) {
|
|
120
|
-
const { browserSettings } = browser;
|
|
121
|
-
const { contextMenuShowEvent } = browserSettings;
|
|
118
|
+
const { browserSettings: { contextMenuShowEvent } } = browser;
|
|
122
119
|
res = await contextMenuShowEvent.clear({});
|
|
123
120
|
}
|
|
124
121
|
return !!res;
|
|
@@ -135,8 +132,7 @@ export const getNewTabPositionValue = async () => {
|
|
|
135
132
|
});
|
|
136
133
|
let res;
|
|
137
134
|
if (isGranted) {
|
|
138
|
-
const { browserSettings } = browser;
|
|
139
|
-
const { newTabPosition } = browserSettings;
|
|
135
|
+
const { browserSettings: { newTabPosition } } = browser;
|
|
140
136
|
res = await newTabPosition.get({});
|
|
141
137
|
}
|
|
142
138
|
return res || null;
|
|
@@ -255,9 +251,8 @@ export const getEnabledTheme = async () => {
|
|
|
255
251
|
try {
|
|
256
252
|
const arr = await management.getAll();
|
|
257
253
|
if (Array.isArray(arr) && arr.length) {
|
|
258
|
-
res =
|
|
259
|
-
info
|
|
260
|
-
);
|
|
254
|
+
res =
|
|
255
|
+
arr.filter(info => info?.type === 'theme' && info?.enabled && info);
|
|
261
256
|
}
|
|
262
257
|
} catch (e) {
|
|
263
258
|
logErr(e);
|
|
@@ -303,7 +298,7 @@ export const getExternalExtensions = async () => {
|
|
|
303
298
|
const arr = await management.getAll();
|
|
304
299
|
if (Array.isArray(arr) && arr.length) {
|
|
305
300
|
res =
|
|
306
|
-
arr.filter(info => info
|
|
301
|
+
arr.filter(info => info?.type === 'extension' && info);
|
|
307
302
|
}
|
|
308
303
|
} catch (e) {
|
|
309
304
|
logErr(e);
|
package/modules/file-util.js
CHANGED
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
/* api */
|
|
6
|
-
import { IS_WIN } from './constant.js';
|
|
7
6
|
import { fileURLToPath } from 'url';
|
|
8
7
|
import { getType, isString } from './common.js';
|
|
9
8
|
import fs, { promises as fsPromise } from 'fs';
|
|
10
9
|
import path from 'path';
|
|
10
|
+
import { IS_WIN } from './constant.js';
|
|
11
11
|
|
|
12
12
|
/* constants */
|
|
13
13
|
const MASK_BIT = 0o111;
|
|
@@ -135,7 +135,7 @@ export const getFileNameFromFilePath = (file, subst = SUBST) => {
|
|
|
135
135
|
};
|
|
136
136
|
|
|
137
137
|
/**
|
|
138
|
-
* remove the directory and it's files
|
|
138
|
+
* remove the directory and it's files synchronously
|
|
139
139
|
*
|
|
140
140
|
* @param {string} dir - directory path
|
|
141
141
|
* @param {string} baseDir - base directory path
|
|
@@ -146,16 +146,10 @@ export const removeDir = (dir, baseDir) => {
|
|
|
146
146
|
if (!isSubDir(dir, baseDir)) {
|
|
147
147
|
throw new Error(`${dir} is not a subdirectory of ${baseDir}.`);
|
|
148
148
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
if (fs.lstatSync(cur).isDirectory()) {
|
|
153
|
-
removeDir(cur, baseDir);
|
|
154
|
-
} else {
|
|
155
|
-
fs.unlinkSync(cur);
|
|
156
|
-
}
|
|
149
|
+
fs.rmSync(dir, {
|
|
150
|
+
force: true,
|
|
151
|
+
recursive: true
|
|
157
152
|
});
|
|
158
|
-
fs.rmdirSync(dir);
|
|
159
153
|
}
|
|
160
154
|
};
|
|
161
155
|
|
|
@@ -167,7 +161,15 @@ export const removeDir = (dir, baseDir) => {
|
|
|
167
161
|
* @returns {void}
|
|
168
162
|
*/
|
|
169
163
|
export const removeDirectory = async (dir, baseDir) => {
|
|
170
|
-
|
|
164
|
+
if (isDir(dir)) {
|
|
165
|
+
if (!isSubDir(dir, baseDir)) {
|
|
166
|
+
throw new Error(`${dir} is not a subdirectory of ${baseDir}.`);
|
|
167
|
+
}
|
|
168
|
+
await fsPromise.rm(dir, {
|
|
169
|
+
force: true,
|
|
170
|
+
recursive: true
|
|
171
|
+
});
|
|
172
|
+
}
|
|
171
173
|
};
|
|
172
174
|
|
|
173
175
|
/**
|
package/modules/schema.js
CHANGED
|
@@ -83,7 +83,7 @@ export class Schema {
|
|
|
83
83
|
*/
|
|
84
84
|
_assignImportMap() {
|
|
85
85
|
if (this._importMap.size) {
|
|
86
|
-
const items =
|
|
86
|
+
const items = [...this._importMap];
|
|
87
87
|
for (const [key, value] of items) {
|
|
88
88
|
const target = this._getTargetFromNamespace(key);
|
|
89
89
|
if (target) {
|
|
@@ -94,8 +94,7 @@ export class Schema {
|
|
|
94
94
|
} else if (this._browser[$import]) {
|
|
95
95
|
importValue = this._browser[$import];
|
|
96
96
|
} else {
|
|
97
|
-
importValue =
|
|
98
|
-
this._browser[namespace] && this._browser[namespace][$import];
|
|
97
|
+
importValue = this._browser[namespace]?.[$import];
|
|
99
98
|
}
|
|
100
99
|
Object.assign(target, importValue);
|
|
101
100
|
}
|
|
@@ -111,7 +110,7 @@ export class Schema {
|
|
|
111
110
|
*/
|
|
112
111
|
_assignRefMap() {
|
|
113
112
|
if (this._refMap.size) {
|
|
114
|
-
const items =
|
|
113
|
+
const items = [...this._refMap];
|
|
115
114
|
for (const [key, value] of items) {
|
|
116
115
|
const target = this._getTargetFromNamespace(key);
|
|
117
116
|
if (target) {
|
|
@@ -122,8 +121,7 @@ export class Schema {
|
|
|
122
121
|
} else if (this._browser[$ref]) {
|
|
123
122
|
refValue = this._browser[$ref];
|
|
124
123
|
} else {
|
|
125
|
-
refValue =
|
|
126
|
-
this._browser[namespace] && this._browser[namespace][$ref];
|
|
124
|
+
refValue = this._browser[namespace]?.[$ref];
|
|
127
125
|
}
|
|
128
126
|
Object.assign(target, refValue);
|
|
129
127
|
}
|
|
@@ -149,7 +147,7 @@ export class Schema {
|
|
|
149
147
|
for (const item of events) {
|
|
150
148
|
const { name, type, unsupported } = item;
|
|
151
149
|
if (!unsupported && name && type === 'function') {
|
|
152
|
-
target[name]
|
|
150
|
+
target[name] ??= {};
|
|
153
151
|
target[name].addListener = this._sandbox.stub();
|
|
154
152
|
target[name].hasListener = this._sandbox.stub();
|
|
155
153
|
target[name].removeListener = this._sandbox.stub();
|
|
@@ -210,7 +208,7 @@ export class Schema {
|
|
|
210
208
|
target[key] = this._sandbox.stub();
|
|
211
209
|
} else if (type === 'object' || $ref ||
|
|
212
210
|
Object.prototype.hasOwnProperty.call(item, 'properties')) {
|
|
213
|
-
target[key]
|
|
211
|
+
target[key] ??= {};
|
|
214
212
|
properties && this._mockProperties(
|
|
215
213
|
target[key], properties, `${namespace}.${key}`
|
|
216
214
|
);
|
|
@@ -247,7 +245,7 @@ export class Schema {
|
|
|
247
245
|
$import &&
|
|
248
246
|
this._importMap.set(`${namespace}.${id}`, { $import, namespace });
|
|
249
247
|
if (type === 'object' || $import || events || functions || properties) {
|
|
250
|
-
target[id]
|
|
248
|
+
target[id] ??= {};
|
|
251
249
|
events && this._mockEvents(target[id], events);
|
|
252
250
|
functions && this._mockFunctions(target[id], functions);
|
|
253
251
|
properties &&
|
|
@@ -287,7 +285,7 @@ export class Schema {
|
|
|
287
285
|
if (!isString(name)) {
|
|
288
286
|
throw new TypeError(`Expected String but got ${getType(name)}.`);
|
|
289
287
|
}
|
|
290
|
-
const schemas = this._schema
|
|
288
|
+
const schemas = this._schema ?? this._parseSchemaContent();
|
|
291
289
|
const items = Object.entries(schemas);
|
|
292
290
|
const label = decamelize(name.replace(/\.json$/, ''));
|
|
293
291
|
let schema;
|
|
@@ -306,7 +304,7 @@ export class Schema {
|
|
|
306
304
|
* @returns {object} - schemas
|
|
307
305
|
*/
|
|
308
306
|
getAll() {
|
|
309
|
-
const schemas = this._schema
|
|
307
|
+
const schemas = this._schema ?? this._parseSchemaContent();
|
|
310
308
|
return schemas;
|
|
311
309
|
}
|
|
312
310
|
|
|
@@ -316,7 +314,7 @@ export class Schema {
|
|
|
316
314
|
* @returns {Array} - file list
|
|
317
315
|
*/
|
|
318
316
|
list() {
|
|
319
|
-
const schemas = this._schema
|
|
317
|
+
const schemas = this._schema ?? this._parseSchemaContent();
|
|
320
318
|
const items = Object.keys(schemas);
|
|
321
319
|
const arr = [];
|
|
322
320
|
for (const item of items) {
|
|
@@ -331,7 +329,7 @@ export class Schema {
|
|
|
331
329
|
* @returns {object} - stubbed browser api
|
|
332
330
|
*/
|
|
333
331
|
mock() {
|
|
334
|
-
const schemas = this._schema
|
|
332
|
+
const schemas = this._schema ?? this._parseSchemaContent();
|
|
335
333
|
const schemaItems = Object.entries(schemas);
|
|
336
334
|
const aliasKeys = ['action', 'menus'];
|
|
337
335
|
this._browser = {
|
|
@@ -354,13 +352,12 @@ export class Schema {
|
|
|
354
352
|
let ns;
|
|
355
353
|
if (namespace.includes('.')) {
|
|
356
354
|
const [itemNamespace, itemSubNamespace] = namespace.split('.');
|
|
357
|
-
this._browser[itemNamespace]
|
|
358
|
-
this._browser[itemNamespace][itemSubNamespace]
|
|
359
|
-
this._browser[itemNamespace][itemSubNamespace] || {};
|
|
355
|
+
this._browser[itemNamespace] ??= {};
|
|
356
|
+
this._browser[itemNamespace][itemSubNamespace] ??= {};
|
|
360
357
|
mapKey.push(itemNamespace, itemSubNamespace);
|
|
361
358
|
ns = this._browser[itemNamespace][itemSubNamespace];
|
|
362
359
|
} else {
|
|
363
|
-
this._browser[namespace]
|
|
360
|
+
this._browser[namespace] ??= {};
|
|
364
361
|
mapKey.push(namespace);
|
|
365
362
|
ns = this._browser[namespace];
|
|
366
363
|
}
|
package/package.json
CHANGED
|
@@ -32,21 +32,21 @@
|
|
|
32
32
|
"commander": "^9.2.0",
|
|
33
33
|
"decamelize": "^6.0.0",
|
|
34
34
|
"json5": "^2.2.1",
|
|
35
|
-
"node-fetch": "^3.2.
|
|
36
|
-
"sinon": "^
|
|
35
|
+
"node-fetch": "^3.2.4",
|
|
36
|
+
"sinon": "^14.0.0"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"c8": "^7.11.2",
|
|
40
40
|
"chai": "^4.3.6",
|
|
41
|
-
"eslint": "^8.
|
|
41
|
+
"eslint": "^8.15.0",
|
|
42
42
|
"eslint-config-standard": "^17.0.0",
|
|
43
43
|
"eslint-plugin-import": "^2.26.0",
|
|
44
|
-
"eslint-plugin-jsdoc": "^39.2.
|
|
44
|
+
"eslint-plugin-jsdoc": "^39.2.9",
|
|
45
45
|
"eslint-plugin-node": "^11.1.0",
|
|
46
46
|
"eslint-plugin-promise": "^6.0.0",
|
|
47
|
-
"mocha": "^
|
|
47
|
+
"mocha": "^10.0.0",
|
|
48
48
|
"nock": "^13.2.4",
|
|
49
49
|
"npm-run-all": "^4.1.5"
|
|
50
50
|
},
|
|
51
|
-
"version": "
|
|
51
|
+
"version": "3.0.1"
|
|
52
52
|
}
|
package/schemas/beta/webext.json
CHANGED
|
@@ -2611,6 +2611,7 @@
|
|
|
2611
2611
|
},
|
|
2612
2612
|
"onclick": {
|
|
2613
2613
|
"type": "function",
|
|
2614
|
+
"max_manifest_version": 2,
|
|
2614
2615
|
"optional": true,
|
|
2615
2616
|
"description": "A function that will be called back when the menu item is clicked. Event pages cannot use this; instead, they should register a listener for $(ref:contextMenus.onClicked).",
|
|
2616
2617
|
"parameters": [
|
|
@@ -2766,6 +2767,7 @@
|
|
|
2766
2767
|
},
|
|
2767
2768
|
"onclick": {
|
|
2768
2769
|
"type": "function",
|
|
2770
|
+
"max_manifest_version": 2,
|
|
2769
2771
|
"optional": "omit-key-if-missing",
|
|
2770
2772
|
"parameters": [
|
|
2771
2773
|
{
|
|
@@ -4343,12 +4345,6 @@
|
|
|
4343
4345
|
"optional": true,
|
|
4344
4346
|
"description": "The ID of the tab that opened this tab, if any. This property is only present if the opener tab still exists."
|
|
4345
4347
|
},
|
|
4346
|
-
"selected": {
|
|
4347
|
-
"type": "boolean",
|
|
4348
|
-
"description": "Whether the tab is selected.",
|
|
4349
|
-
"deprecated": "Please use $(ref:tabs.Tab.highlighted).",
|
|
4350
|
-
"unsupported": true
|
|
4351
|
-
},
|
|
4352
4348
|
"highlighted": {
|
|
4353
4349
|
"type": "boolean",
|
|
4354
4350
|
"description": "Whether the tab is highlighted. Works as an alias of active"
|
|
@@ -4802,36 +4798,6 @@
|
|
|
4802
4798
|
"description": "A port that can be used to communicate with the content scripts running in the specified tab. The port's $(ref:runtime.Port) event is fired if the tab closes or does not exist. "
|
|
4803
4799
|
}
|
|
4804
4800
|
},
|
|
4805
|
-
{
|
|
4806
|
-
"name": "sendRequest",
|
|
4807
|
-
"deprecated": "Please use $(ref:runtime.sendMessage).",
|
|
4808
|
-
"unsupported": true,
|
|
4809
|
-
"type": "function",
|
|
4810
|
-
"description": "Sends a single request to the content script(s) in the specified tab, with an optional callback to run when a response is sent back. The $(ref:extension.onRequest) event is fired in each content script running in the specified tab for the current extension.",
|
|
4811
|
-
"parameters": [
|
|
4812
|
-
{
|
|
4813
|
-
"type": "integer",
|
|
4814
|
-
"name": "tabId",
|
|
4815
|
-
"minimum": 0
|
|
4816
|
-
},
|
|
4817
|
-
{
|
|
4818
|
-
"type": "any",
|
|
4819
|
-
"name": "request"
|
|
4820
|
-
},
|
|
4821
|
-
{
|
|
4822
|
-
"type": "function",
|
|
4823
|
-
"name": "responseCallback",
|
|
4824
|
-
"optional": true,
|
|
4825
|
-
"parameters": [
|
|
4826
|
-
{
|
|
4827
|
-
"name": "response",
|
|
4828
|
-
"type": "any",
|
|
4829
|
-
"description": "The JSON response object sent by the handler of the request. If an error occurs while connecting to the specified tab, the callback will be called with no arguments and $(ref:runtime.lastError) will be set to the error message."
|
|
4830
|
-
}
|
|
4831
|
-
]
|
|
4832
|
-
}
|
|
4833
|
-
]
|
|
4834
|
-
},
|
|
4835
4801
|
{
|
|
4836
4802
|
"name": "sendMessage",
|
|
4837
4803
|
"type": "function",
|
|
@@ -4874,63 +4840,6 @@
|
|
|
4874
4840
|
}
|
|
4875
4841
|
]
|
|
4876
4842
|
},
|
|
4877
|
-
{
|
|
4878
|
-
"name": "getSelected",
|
|
4879
|
-
"deprecated": "Please use $(ref:tabs.query) <code>{active: true}</code>.",
|
|
4880
|
-
"unsupported": true,
|
|
4881
|
-
"type": "function",
|
|
4882
|
-
"description": "Gets the tab that is selected in the specified window.",
|
|
4883
|
-
"async": "callback",
|
|
4884
|
-
"parameters": [
|
|
4885
|
-
{
|
|
4886
|
-
"type": "integer",
|
|
4887
|
-
"name": "windowId",
|
|
4888
|
-
"minimum": -2,
|
|
4889
|
-
"optional": true,
|
|
4890
|
-
"description": "Defaults to the $(topic:current-window)[current window]."
|
|
4891
|
-
},
|
|
4892
|
-
{
|
|
4893
|
-
"type": "function",
|
|
4894
|
-
"name": "callback",
|
|
4895
|
-
"parameters": [
|
|
4896
|
-
{
|
|
4897
|
-
"name": "tab",
|
|
4898
|
-
"$ref": "Tab"
|
|
4899
|
-
}
|
|
4900
|
-
]
|
|
4901
|
-
}
|
|
4902
|
-
]
|
|
4903
|
-
},
|
|
4904
|
-
{
|
|
4905
|
-
"name": "getAllInWindow",
|
|
4906
|
-
"deprecated": "Please use $(ref:tabs.query) <code>{windowId: windowId}</code>.",
|
|
4907
|
-
"unsupported": true,
|
|
4908
|
-
"type": "function",
|
|
4909
|
-
"description": "Gets details about all tabs in the specified window.",
|
|
4910
|
-
"async": "callback",
|
|
4911
|
-
"parameters": [
|
|
4912
|
-
{
|
|
4913
|
-
"type": "integer",
|
|
4914
|
-
"name": "windowId",
|
|
4915
|
-
"minimum": -2,
|
|
4916
|
-
"optional": true,
|
|
4917
|
-
"description": "Defaults to the $(topic:current-window)[current window]."
|
|
4918
|
-
},
|
|
4919
|
-
{
|
|
4920
|
-
"type": "function",
|
|
4921
|
-
"name": "callback",
|
|
4922
|
-
"parameters": [
|
|
4923
|
-
{
|
|
4924
|
-
"name": "tabs",
|
|
4925
|
-
"type": "array",
|
|
4926
|
-
"items": {
|
|
4927
|
-
"$ref": "Tab"
|
|
4928
|
-
}
|
|
4929
|
-
}
|
|
4930
|
-
]
|
|
4931
|
-
}
|
|
4932
|
-
]
|
|
4933
|
-
},
|
|
4934
4843
|
{
|
|
4935
4844
|
"name": "create",
|
|
4936
4845
|
"type": "function",
|
|
@@ -4963,13 +4872,6 @@
|
|
|
4963
4872
|
"optional": true,
|
|
4964
4873
|
"description": "Whether the tab should become the active tab in the window. Does not affect whether the window is focused (see $(ref:windows.update)). Defaults to <var>true</var>."
|
|
4965
4874
|
},
|
|
4966
|
-
"selected": {
|
|
4967
|
-
"deprecated": "Please use <em>active</em>.",
|
|
4968
|
-
"unsupported": true,
|
|
4969
|
-
"type": "boolean",
|
|
4970
|
-
"optional": true,
|
|
4971
|
-
"description": "Whether the tab should become the selected tab in the window. Defaults to <var>true</var>"
|
|
4972
|
-
},
|
|
4973
4875
|
"pinned": {
|
|
4974
4876
|
"type": "boolean",
|
|
4975
4877
|
"optional": true,
|
|
@@ -5319,13 +5221,6 @@
|
|
|
5319
5221
|
"optional": true,
|
|
5320
5222
|
"description": "Adds or removes the tab from the current selection."
|
|
5321
5223
|
},
|
|
5322
|
-
"selected": {
|
|
5323
|
-
"unsupported": true,
|
|
5324
|
-
"deprecated": "Please use <em>highlighted</em>.",
|
|
5325
|
-
"type": "boolean",
|
|
5326
|
-
"optional": true,
|
|
5327
|
-
"description": "Whether the tab should be selected."
|
|
5328
|
-
},
|
|
5329
5224
|
"pinned": {
|
|
5330
5225
|
"type": "boolean",
|
|
5331
5226
|
"optional": true,
|
|
@@ -5639,6 +5534,7 @@
|
|
|
5639
5534
|
{
|
|
5640
5535
|
"name": "executeScript",
|
|
5641
5536
|
"type": "function",
|
|
5537
|
+
"max_manifest_version": 2,
|
|
5642
5538
|
"description": "Injects JavaScript code into a page. For details, see the $(topic:content_scripts)[programmatic injection] section of the content scripts doc.",
|
|
5643
5539
|
"async": "callback",
|
|
5644
5540
|
"parameters": [
|
|
@@ -5676,6 +5572,7 @@
|
|
|
5676
5572
|
{
|
|
5677
5573
|
"name": "insertCSS",
|
|
5678
5574
|
"type": "function",
|
|
5575
|
+
"max_manifest_version": 2,
|
|
5679
5576
|
"description": "Injects CSS into a page. For details, see the $(topic:content_scripts)[programmatic injection] section of the content scripts doc.",
|
|
5680
5577
|
"async": "callback",
|
|
5681
5578
|
"parameters": [
|
|
@@ -5703,6 +5600,7 @@
|
|
|
5703
5600
|
{
|
|
5704
5601
|
"name": "removeCSS",
|
|
5705
5602
|
"type": "function",
|
|
5603
|
+
"max_manifest_version": 2,
|
|
5706
5604
|
"description": "Removes injected CSS from a page. For details, see the $(topic:content_scripts)[programmatic injection] section of the content scripts doc.",
|
|
5707
5605
|
"async": "callback",
|
|
5708
5606
|
"parameters": [
|
|
@@ -6170,58 +6068,6 @@
|
|
|
6170
6068
|
}
|
|
6171
6069
|
]
|
|
6172
6070
|
},
|
|
6173
|
-
{
|
|
6174
|
-
"name": "onSelectionChanged",
|
|
6175
|
-
"deprecated": "Please use $(ref:tabs.onActivated).",
|
|
6176
|
-
"unsupported": true,
|
|
6177
|
-
"type": "function",
|
|
6178
|
-
"description": "Fires when the selected tab in a window changes.",
|
|
6179
|
-
"parameters": [
|
|
6180
|
-
{
|
|
6181
|
-
"type": "integer",
|
|
6182
|
-
"name": "tabId",
|
|
6183
|
-
"minimum": 0,
|
|
6184
|
-
"description": "The ID of the tab that has become active."
|
|
6185
|
-
},
|
|
6186
|
-
{
|
|
6187
|
-
"type": "object",
|
|
6188
|
-
"name": "selectInfo",
|
|
6189
|
-
"properties": {
|
|
6190
|
-
"windowId": {
|
|
6191
|
-
"type": "integer",
|
|
6192
|
-
"minimum": 0,
|
|
6193
|
-
"description": "The ID of the window the selected tab changed inside of."
|
|
6194
|
-
}
|
|
6195
|
-
}
|
|
6196
|
-
}
|
|
6197
|
-
]
|
|
6198
|
-
},
|
|
6199
|
-
{
|
|
6200
|
-
"name": "onActiveChanged",
|
|
6201
|
-
"deprecated": "Please use $(ref:tabs.onActivated).",
|
|
6202
|
-
"unsupported": true,
|
|
6203
|
-
"type": "function",
|
|
6204
|
-
"description": "Fires when the selected tab in a window changes. Note that the tab's URL may not be set at the time this event fired, but you can listen to $(ref:tabs.onUpdated) events to be notified when a URL is set.",
|
|
6205
|
-
"parameters": [
|
|
6206
|
-
{
|
|
6207
|
-
"type": "integer",
|
|
6208
|
-
"name": "tabId",
|
|
6209
|
-
"minimum": 0,
|
|
6210
|
-
"description": "The ID of the tab that has become active."
|
|
6211
|
-
},
|
|
6212
|
-
{
|
|
6213
|
-
"type": "object",
|
|
6214
|
-
"name": "selectInfo",
|
|
6215
|
-
"properties": {
|
|
6216
|
-
"windowId": {
|
|
6217
|
-
"type": "integer",
|
|
6218
|
-
"minimum": 0,
|
|
6219
|
-
"description": "The ID of the window the selected tab changed inside of."
|
|
6220
|
-
}
|
|
6221
|
-
}
|
|
6222
|
-
}
|
|
6223
|
-
]
|
|
6224
|
-
},
|
|
6225
6071
|
{
|
|
6226
6072
|
"name": "onActivated",
|
|
6227
6073
|
"type": "function",
|
|
@@ -6251,34 +6097,6 @@
|
|
|
6251
6097
|
}
|
|
6252
6098
|
]
|
|
6253
6099
|
},
|
|
6254
|
-
{
|
|
6255
|
-
"name": "onHighlightChanged",
|
|
6256
|
-
"deprecated": "Please use $(ref:tabs.onHighlighted).",
|
|
6257
|
-
"unsupported": true,
|
|
6258
|
-
"type": "function",
|
|
6259
|
-
"description": "Fired when the highlighted or selected tabs in a window changes.",
|
|
6260
|
-
"parameters": [
|
|
6261
|
-
{
|
|
6262
|
-
"type": "object",
|
|
6263
|
-
"name": "selectInfo",
|
|
6264
|
-
"properties": {
|
|
6265
|
-
"windowId": {
|
|
6266
|
-
"type": "integer",
|
|
6267
|
-
"minimum": 0,
|
|
6268
|
-
"description": "The window whose tabs changed."
|
|
6269
|
-
},
|
|
6270
|
-
"tabIds": {
|
|
6271
|
-
"type": "array",
|
|
6272
|
-
"items": {
|
|
6273
|
-
"type": "integer",
|
|
6274
|
-
"minimum": 0
|
|
6275
|
-
},
|
|
6276
|
-
"description": "All highlighted tabs in the window."
|
|
6277
|
-
}
|
|
6278
|
-
}
|
|
6279
|
-
}
|
|
6280
|
-
]
|
|
6281
|
-
},
|
|
6282
6100
|
{
|
|
6283
6101
|
"name": "onHighlighted",
|
|
6284
6102
|
"type": "function",
|
|
@@ -8982,6 +8800,7 @@
|
|
|
8982
8800
|
"content_scripts.json": [
|
|
8983
8801
|
{
|
|
8984
8802
|
"namespace": "contentScripts",
|
|
8803
|
+
"max_manifest_version": 2,
|
|
8985
8804
|
"types": [
|
|
8986
8805
|
{
|
|
8987
8806
|
"id": "RegisteredContentScriptOptions",
|
|
@@ -11331,7 +11150,6 @@
|
|
|
11331
11150
|
{
|
|
11332
11151
|
"name": "getBackgroundPage",
|
|
11333
11152
|
"type": "function",
|
|
11334
|
-
"max_manifest_version": 2,
|
|
11335
11153
|
"description": "Returns the JavaScript 'window' object for the background page running inside the current extension. Returns null if the extension has no background page.",
|
|
11336
11154
|
"parameters": [],
|
|
11337
11155
|
"returns": {
|
|
@@ -15951,6 +15769,11 @@
|
|
|
15951
15769
|
"world": {
|
|
15952
15770
|
"$ref": "ExecutionWorld",
|
|
15953
15771
|
"optional": true
|
|
15772
|
+
},
|
|
15773
|
+
"injectImmediately": {
|
|
15774
|
+
"type": "boolean",
|
|
15775
|
+
"optional": true,
|
|
15776
|
+
"description": "Whether the injection should be triggered in the target as soon as possible (but not necessarily prior to page load)."
|
|
15954
15777
|
}
|
|
15955
15778
|
}
|
|
15956
15779
|
},
|
|
@@ -16479,6 +16302,23 @@
|
|
|
16479
16302
|
}
|
|
16480
16303
|
]
|
|
16481
16304
|
}
|
|
16305
|
+
],
|
|
16306
|
+
"events": [
|
|
16307
|
+
{
|
|
16308
|
+
"name": "onChanged",
|
|
16309
|
+
"type": "function",
|
|
16310
|
+
"description": "Fired when one or more items change.",
|
|
16311
|
+
"parameters": [
|
|
16312
|
+
{
|
|
16313
|
+
"name": "changes",
|
|
16314
|
+
"type": "object",
|
|
16315
|
+
"additionalProperties": {
|
|
16316
|
+
"$ref": "StorageChange"
|
|
16317
|
+
},
|
|
16318
|
+
"description": "Object mapping each key that changed to its corresponding $(ref:storage.StorageChange) for that item."
|
|
16319
|
+
}
|
|
16320
|
+
]
|
|
16321
|
+
}
|
|
16482
16322
|
]
|
|
16483
16323
|
},
|
|
16484
16324
|
{
|
|
@@ -16635,6 +16475,23 @@
|
|
|
16635
16475
|
}
|
|
16636
16476
|
]
|
|
16637
16477
|
}
|
|
16478
|
+
],
|
|
16479
|
+
"events": [
|
|
16480
|
+
{
|
|
16481
|
+
"name": "onChanged",
|
|
16482
|
+
"type": "function",
|
|
16483
|
+
"description": "Fired when one or more items change.",
|
|
16484
|
+
"parameters": [
|
|
16485
|
+
{
|
|
16486
|
+
"name": "changes",
|
|
16487
|
+
"type": "object",
|
|
16488
|
+
"additionalProperties": {
|
|
16489
|
+
"$ref": "StorageChange"
|
|
16490
|
+
},
|
|
16491
|
+
"description": "Object mapping each key that changed to its corresponding $(ref:storage.StorageChange) for that item."
|
|
16492
|
+
}
|
|
16493
|
+
]
|
|
16494
|
+
}
|
|
16638
16495
|
]
|
|
16639
16496
|
}
|
|
16640
16497
|
],
|
|
@@ -18210,6 +18067,7 @@
|
|
|
18210
18067
|
"properties": {
|
|
18211
18068
|
"user_scripts": {
|
|
18212
18069
|
"type": "object",
|
|
18070
|
+
"max_manifest_version": 2,
|
|
18213
18071
|
"optional": true,
|
|
18214
18072
|
"properties": {
|
|
18215
18073
|
"api_script": {
|
|
@@ -18227,6 +18085,7 @@
|
|
|
18227
18085
|
},
|
|
18228
18086
|
{
|
|
18229
18087
|
"namespace": "userScripts",
|
|
18088
|
+
"max_manifest_version": 2,
|
|
18230
18089
|
"permissions": [
|
|
18231
18090
|
"manifest:user_scripts"
|
|
18232
18091
|
],
|
|
@@ -18350,6 +18209,7 @@
|
|
|
18350
18209
|
"user_scripts_content.json": [
|
|
18351
18210
|
{
|
|
18352
18211
|
"namespace": "userScripts",
|
|
18212
|
+
"max_manifest_version": 2,
|
|
18353
18213
|
"permissions": [
|
|
18354
18214
|
"manifest:user_scripts"
|
|
18355
18215
|
],
|
|
@@ -14865,7 +14865,8 @@
|
|
|
14865
14865
|
"type": "boolean",
|
|
14866
14866
|
"optional": true,
|
|
14867
14867
|
"default": false,
|
|
14868
|
-
"description": "Whether to create all cookies as nonPersistent (i.e., session) cookies."
|
|
14868
|
+
"description": "Whether to create all cookies as nonPersistent (i.e., session) cookies.",
|
|
14869
|
+
"deprecated": "This property has no effect anymore and its value is always <code>false<code>."
|
|
14869
14870
|
}
|
|
14870
14871
|
}
|
|
14871
14872
|
}
|
|
@@ -15720,8 +15721,7 @@
|
|
|
15720
15721
|
"type": "string",
|
|
15721
15722
|
"enum": [
|
|
15722
15723
|
"scripting"
|
|
15723
|
-
]
|
|
15724
|
-
"min_manifest_version": 3
|
|
15724
|
+
]
|
|
15725
15725
|
}
|
|
15726
15726
|
]
|
|
15727
15727
|
}
|
|
@@ -15733,7 +15733,6 @@
|
|
|
15733
15733
|
"permissions": [
|
|
15734
15734
|
"scripting"
|
|
15735
15735
|
],
|
|
15736
|
-
"min_manifest_version": 3,
|
|
15737
15736
|
"types": [
|
|
15738
15737
|
{
|
|
15739
15738
|
"id": "ScriptInjection",
|
|
@@ -15769,6 +15768,11 @@
|
|
|
15769
15768
|
"world": {
|
|
15770
15769
|
"$ref": "ExecutionWorld",
|
|
15771
15770
|
"optional": true
|
|
15771
|
+
},
|
|
15772
|
+
"injectImmediately": {
|
|
15773
|
+
"type": "boolean",
|
|
15774
|
+
"optional": true,
|
|
15775
|
+
"description": "Whether the injection should be triggered in the target as soon as possible (but not necessarily prior to page load)."
|
|
15772
15776
|
}
|
|
15773
15777
|
}
|
|
15774
15778
|
},
|
|
@@ -2483,7 +2483,7 @@
|
|
|
2483
2483
|
"icons_attention": {
|
|
2484
2484
|
"$ref": "ThemeColor",
|
|
2485
2485
|
"optional": true,
|
|
2486
|
-
"description": "The color of the toolbar icons in attention state such as the chat icon
|
|
2486
|
+
"description": "The color of the toolbar icons in attention state such as the chat icon with new messages."
|
|
2487
2487
|
},
|
|
2488
2488
|
"button_background_hover": {
|
|
2489
2489
|
"$ref": "ThemeColor",
|
|
@@ -2873,7 +2873,7 @@
|
|
|
2873
2873
|
{
|
|
2874
2874
|
"name": "list",
|
|
2875
2875
|
"type": "function",
|
|
2876
|
-
"description": "Returns all mail accounts.",
|
|
2876
|
+
"description": "Returns all mail accounts. They will be returned in the same order as used in Thunderbird's folder pane.",
|
|
2877
2877
|
"async": "callback",
|
|
2878
2878
|
"parameters": [
|
|
2879
2879
|
{
|
|
@@ -5359,6 +5359,41 @@
|
|
|
5359
5359
|
"$ref": "ComposeRecipientList",
|
|
5360
5360
|
"optional": true
|
|
5361
5361
|
},
|
|
5362
|
+
"overrideDefaultFcc": {
|
|
5363
|
+
"type": "boolean",
|
|
5364
|
+
"optional": true,
|
|
5365
|
+
"description": "Indicates whether the default fcc setting (defined by the used identity) is being overridden for this message. Setting ``false`` will clear the override. Setting ``true`` will throw an exception, if ``overrideDefaultFccFolder`` is not set as well."
|
|
5366
|
+
},
|
|
5367
|
+
"overrideDefaultFccFolder": {
|
|
5368
|
+
"choices": [
|
|
5369
|
+
{
|
|
5370
|
+
"$ref": "folders.MailFolder"
|
|
5371
|
+
},
|
|
5372
|
+
{
|
|
5373
|
+
"type": "string",
|
|
5374
|
+
"enum": [
|
|
5375
|
+
""
|
|
5376
|
+
]
|
|
5377
|
+
}
|
|
5378
|
+
],
|
|
5379
|
+
"optional": true,
|
|
5380
|
+
"description": " This value overrides the default fcc setting (defined by the used identity) for this message only. Either a :ref:`folders.MailFolder` specifying the folder for the copy of the sent message, or ``\"\"`` to not save a copy at all."
|
|
5381
|
+
},
|
|
5382
|
+
"additionalFccFolder": {
|
|
5383
|
+
"choices": [
|
|
5384
|
+
{
|
|
5385
|
+
"$ref": "folders.MailFolder"
|
|
5386
|
+
},
|
|
5387
|
+
{
|
|
5388
|
+
"type": "string",
|
|
5389
|
+
"enum": [
|
|
5390
|
+
""
|
|
5391
|
+
]
|
|
5392
|
+
}
|
|
5393
|
+
],
|
|
5394
|
+
"description": "An additional fcc folder which can be selected while composing the message, ``\"\"`` if not used.",
|
|
5395
|
+
"optional": true
|
|
5396
|
+
},
|
|
5362
5397
|
"replyTo": {
|
|
5363
5398
|
"$ref": "ComposeRecipientList",
|
|
5364
5399
|
"optional": true
|
|
@@ -5419,14 +5454,52 @@
|
|
|
5419
5454
|
"description": "Whether the message is an HTML message or a plain text message.",
|
|
5420
5455
|
"optional": true
|
|
5421
5456
|
},
|
|
5457
|
+
"deliveryFormat": {
|
|
5458
|
+
"type": "string",
|
|
5459
|
+
"enum": [
|
|
5460
|
+
"auto",
|
|
5461
|
+
"plaintext",
|
|
5462
|
+
"html",
|
|
5463
|
+
"both"
|
|
5464
|
+
],
|
|
5465
|
+
"description": "Defines the mime format of the send message (ignored on plain text messages). Defaults to ``auto``, which will send html messages as plain text, if they do not include any formatting, and as ``both`` otherwise (a multipart/mixed message).",
|
|
5466
|
+
"optional": true
|
|
5467
|
+
},
|
|
5422
5468
|
"customHeaders": {
|
|
5423
5469
|
"type": "array",
|
|
5424
5470
|
"items": {
|
|
5425
5471
|
"$ref": "CustomHeader"
|
|
5426
5472
|
},
|
|
5427
|
-
"description": "Array of custom headers. Headers will be returned in ``Http-Header-Case`` (a.k.a. ``Train-Case``)",
|
|
5473
|
+
"description": "Array of custom headers. Headers will be returned in ``Http-Header-Case`` (a.k.a. ``Train-Case``). Set an empty array to clear all custom headers.",
|
|
5474
|
+
"optional": true
|
|
5475
|
+
},
|
|
5476
|
+
"priority": {
|
|
5477
|
+
"type": "string",
|
|
5478
|
+
"enum": [
|
|
5479
|
+
"lowest",
|
|
5480
|
+
"low",
|
|
5481
|
+
"normal",
|
|
5482
|
+
"high",
|
|
5483
|
+
"highest"
|
|
5484
|
+
],
|
|
5485
|
+
"description": "The priority of the message.",
|
|
5428
5486
|
"optional": true
|
|
5429
5487
|
},
|
|
5488
|
+
"returnReceipt": {
|
|
5489
|
+
"type": "boolean",
|
|
5490
|
+
"optional": true,
|
|
5491
|
+
"description": "Add the ``Disposition-Notification-To`` header to the message to requests the recipients email client to send a reply once the message has been received. Recipient server may strip the header and the recipient might ignore the request."
|
|
5492
|
+
},
|
|
5493
|
+
"deliveryStatusNotification": {
|
|
5494
|
+
"type": "boolean",
|
|
5495
|
+
"optional": true,
|
|
5496
|
+
"description": "Let the sender know when the recipient's server received the message. Not supported by all servers."
|
|
5497
|
+
},
|
|
5498
|
+
"attachVCard": {
|
|
5499
|
+
"type": "boolean",
|
|
5500
|
+
"optional": true,
|
|
5501
|
+
"description": "Wether or not the vCard of the used identity will be attached to the message during send. Note: If the value has not been modified, selecting a different identity will load the default value of the new identity."
|
|
5502
|
+
},
|
|
5430
5503
|
"attachments": {
|
|
5431
5504
|
"type": "array",
|
|
5432
5505
|
"items": {
|
|
@@ -5498,6 +5571,14 @@
|
|
|
5498
5571
|
"type": "string"
|
|
5499
5572
|
}
|
|
5500
5573
|
}
|
|
5574
|
+
},
|
|
5575
|
+
{
|
|
5576
|
+
"id": "ComposeDictionaries",
|
|
5577
|
+
"type": "object",
|
|
5578
|
+
"additionalProperties": {
|
|
5579
|
+
"type": "boolean"
|
|
5580
|
+
},
|
|
5581
|
+
"description": "Object with language identifiers of all installed dictionaries as keys (for example ``en-US``) and a boolean value, indicating whether that dictionary is enabled for spellchecking or not."
|
|
5501
5582
|
}
|
|
5502
5583
|
],
|
|
5503
5584
|
"events": [
|
|
@@ -5603,6 +5684,21 @@
|
|
|
5603
5684
|
"$ref": "ComposeState"
|
|
5604
5685
|
}
|
|
5605
5686
|
]
|
|
5687
|
+
},
|
|
5688
|
+
{
|
|
5689
|
+
"name": "onActiveDictionariesChanged",
|
|
5690
|
+
"type": "function",
|
|
5691
|
+
"description": "Fired when one or more dictionaries have been activated or deactivated.",
|
|
5692
|
+
"parameters": [
|
|
5693
|
+
{
|
|
5694
|
+
"name": "tab",
|
|
5695
|
+
"$ref": "tabs.Tab"
|
|
5696
|
+
},
|
|
5697
|
+
{
|
|
5698
|
+
"name": "dictionaries",
|
|
5699
|
+
"$ref": "ComposeDictionaries"
|
|
5700
|
+
}
|
|
5701
|
+
]
|
|
5606
5702
|
}
|
|
5607
5703
|
],
|
|
5608
5704
|
"functions": [
|
|
@@ -5762,6 +5858,55 @@
|
|
|
5762
5858
|
}
|
|
5763
5859
|
]
|
|
5764
5860
|
},
|
|
5861
|
+
{
|
|
5862
|
+
"name": "getActiveDictionaries",
|
|
5863
|
+
"type": "function",
|
|
5864
|
+
"async": "callback",
|
|
5865
|
+
"description": "Returns a :ref:`ComposeDictionaries` object, listing all installed dictionaries, including the information whether they are currently enabled or not.",
|
|
5866
|
+
"permissions": [
|
|
5867
|
+
"compose"
|
|
5868
|
+
],
|
|
5869
|
+
"parameters": [
|
|
5870
|
+
{
|
|
5871
|
+
"type": "integer",
|
|
5872
|
+
"name": "tabId",
|
|
5873
|
+
"minimum": 0
|
|
5874
|
+
},
|
|
5875
|
+
{
|
|
5876
|
+
"type": "function",
|
|
5877
|
+
"name": "callback",
|
|
5878
|
+
"optional": true,
|
|
5879
|
+
"parameters": [
|
|
5880
|
+
{
|
|
5881
|
+
"$ref": "ComposeDictionaries"
|
|
5882
|
+
}
|
|
5883
|
+
]
|
|
5884
|
+
}
|
|
5885
|
+
]
|
|
5886
|
+
},
|
|
5887
|
+
{
|
|
5888
|
+
"name": "setActiveDictionaries",
|
|
5889
|
+
"type": "function",
|
|
5890
|
+
"async": true,
|
|
5891
|
+
"description": "Updates the active dictionaries. Throws if the ``activeDictionaries`` array contains unknown or invalid language identifiers.",
|
|
5892
|
+
"permissions": [
|
|
5893
|
+
"compose"
|
|
5894
|
+
],
|
|
5895
|
+
"parameters": [
|
|
5896
|
+
{
|
|
5897
|
+
"type": "integer",
|
|
5898
|
+
"name": "tabId",
|
|
5899
|
+
"minimum": 0
|
|
5900
|
+
},
|
|
5901
|
+
{
|
|
5902
|
+
"type": "array",
|
|
5903
|
+
"items": {
|
|
5904
|
+
"type": "string"
|
|
5905
|
+
},
|
|
5906
|
+
"name": "activeDictionaries"
|
|
5907
|
+
}
|
|
5908
|
+
]
|
|
5909
|
+
},
|
|
5765
5910
|
{
|
|
5766
5911
|
"name": "listAttachments",
|
|
5767
5912
|
"type": "function",
|
|
@@ -6715,7 +6860,7 @@
|
|
|
6715
6860
|
},
|
|
6716
6861
|
"subFolders": {
|
|
6717
6862
|
"type": "array",
|
|
6718
|
-
"description": "Subfolders are only included if requested.",
|
|
6863
|
+
"description": "Subfolders are only included if requested. They will be returned in the same order as used in Thunderbird's folder pane.",
|
|
6719
6864
|
"items": {
|
|
6720
6865
|
"$ref": "MailFolder"
|
|
6721
6866
|
},
|
|
@@ -9285,7 +9430,8 @@
|
|
|
9285
9430
|
"enum": [
|
|
9286
9431
|
"messagesMove",
|
|
9287
9432
|
"messagesRead",
|
|
9288
|
-
"messagesDelete"
|
|
9433
|
+
"messagesDelete",
|
|
9434
|
+
"messagesTags"
|
|
9289
9435
|
]
|
|
9290
9436
|
}
|
|
9291
9437
|
]
|
|
@@ -9334,6 +9480,10 @@
|
|
|
9334
9480
|
"type": "string",
|
|
9335
9481
|
"description": "The message-id header of the message."
|
|
9336
9482
|
},
|
|
9483
|
+
"headersOnly": {
|
|
9484
|
+
"description": "Some account types (for example POP) allow to download only the headers of the message, but not its body. The body of such messages will not be available.",
|
|
9485
|
+
"type": "boolean"
|
|
9486
|
+
},
|
|
9337
9487
|
"id": {
|
|
9338
9488
|
"type": "integer",
|
|
9339
9489
|
"minimum": 1
|
|
@@ -9695,7 +9845,7 @@
|
|
|
9695
9845
|
{
|
|
9696
9846
|
"name": "getFull",
|
|
9697
9847
|
"type": "function",
|
|
9698
|
-
"description": "Returns a specified message, including all headers and MIME parts.",
|
|
9848
|
+
"description": "Returns a specified message, including all headers and MIME parts. Throws if the message could not be read, for example due to network issues.",
|
|
9699
9849
|
"async": "callback",
|
|
9700
9850
|
"parameters": [
|
|
9701
9851
|
{
|
|
@@ -9717,7 +9867,7 @@
|
|
|
9717
9867
|
{
|
|
9718
9868
|
"name": "getRaw",
|
|
9719
9869
|
"type": "function",
|
|
9720
|
-
"description": "Returns the unmodified source of a message as a `binary string <https://developer.mozilla.org/en-US/docs/Web/API/DOMString/Binary>`__, which is a simple series of 8-bit values. If the message contains non-ASCII characters, the body parts in the binary string cannot be read directly and must be decoded according to their character sets. Use :ref:`messages.getFull` to get the correctly decoded parts. Manually decoding the raw message is probably too error-prone, especially if the message contains MIME parts with different character set encodings or attachments.\n\nTo get a readable version of the raw message as it appears in Thunderbird's message source view, it may be sufficient to decode the message according to the character set specified in its main ``content-type`` header (example: `text/html; charset=UTF-8`) using the following function (see MDN for `supported input encodings <https://developer.mozilla.org/en-US/docs/Web/API/Encoding_API/Encodings>`__): <literalinclude>includes/messages/decodeBinaryString.js<lang>JavaScript</lang></literalinclude>",
|
|
9870
|
+
"description": "Returns the unmodified source of a message as a `binary string <https://developer.mozilla.org/en-US/docs/Web/API/DOMString/Binary>`__, which is a simple series of 8-bit values. Throws if the message could not be read, for example due to network issues. If the message contains non-ASCII characters, the body parts in the binary string cannot be read directly and must be decoded according to their character sets. Use :ref:`messages.getFull` to get the correctly decoded parts. Manually decoding the raw message is probably too error-prone, especially if the message contains MIME parts with different character set encodings or attachments.\n\nTo get a readable version of the raw message as it appears in Thunderbird's message source view, it may be sufficient to decode the message according to the character set specified in its main ``content-type`` header (example: `text/html; charset=UTF-8`) using the following function (see MDN for `supported input encodings <https://developer.mozilla.org/en-US/docs/Web/API/Encoding_API/Encodings>`__): <literalinclude>includes/messages/decodeBinaryString.js<lang>JavaScript</lang></literalinclude>",
|
|
9721
9871
|
"async": "callback",
|
|
9722
9872
|
"parameters": [
|
|
9723
9873
|
{
|
|
@@ -10029,6 +10179,78 @@
|
|
|
10029
10179
|
]
|
|
10030
10180
|
}
|
|
10031
10181
|
]
|
|
10182
|
+
},
|
|
10183
|
+
{
|
|
10184
|
+
"name": "createTag",
|
|
10185
|
+
"type": "function",
|
|
10186
|
+
"description": "Creates a new message tag. Tagging a message will store the tag's key in the user's message.",
|
|
10187
|
+
"async": true,
|
|
10188
|
+
"permissions": [
|
|
10189
|
+
"messagesTags"
|
|
10190
|
+
],
|
|
10191
|
+
"parameters": [
|
|
10192
|
+
{
|
|
10193
|
+
"type": "string",
|
|
10194
|
+
"name": "key",
|
|
10195
|
+
"pattern": "^[$a-zA-Z0-9]+$"
|
|
10196
|
+
},
|
|
10197
|
+
{
|
|
10198
|
+
"type": "string",
|
|
10199
|
+
"name": "tag"
|
|
10200
|
+
},
|
|
10201
|
+
{
|
|
10202
|
+
"type": "string",
|
|
10203
|
+
"name": "color",
|
|
10204
|
+
"pattern": "^#[0-9a-f]{6}"
|
|
10205
|
+
}
|
|
10206
|
+
]
|
|
10207
|
+
},
|
|
10208
|
+
{
|
|
10209
|
+
"name": "updateTag",
|
|
10210
|
+
"type": "function",
|
|
10211
|
+
"description": "Updates a message tag.",
|
|
10212
|
+
"async": true,
|
|
10213
|
+
"permissions": [
|
|
10214
|
+
"messagesTags"
|
|
10215
|
+
],
|
|
10216
|
+
"parameters": [
|
|
10217
|
+
{
|
|
10218
|
+
"type": "string",
|
|
10219
|
+
"name": "key",
|
|
10220
|
+
"pattern": "^[$a-zA-Z0-9]+$"
|
|
10221
|
+
},
|
|
10222
|
+
{
|
|
10223
|
+
"type": "object",
|
|
10224
|
+
"name": "updateProperties",
|
|
10225
|
+
"properties": {
|
|
10226
|
+
"tag": {
|
|
10227
|
+
"type": "string",
|
|
10228
|
+
"optional": "true"
|
|
10229
|
+
},
|
|
10230
|
+
"color": {
|
|
10231
|
+
"type": "string",
|
|
10232
|
+
"pattern": "^#[0-9a-f]{6}",
|
|
10233
|
+
"optional": "true"
|
|
10234
|
+
}
|
|
10235
|
+
}
|
|
10236
|
+
}
|
|
10237
|
+
]
|
|
10238
|
+
},
|
|
10239
|
+
{
|
|
10240
|
+
"name": "deleteTag",
|
|
10241
|
+
"type": "function",
|
|
10242
|
+
"description": "Deletes a message tag, removing it from the list of known tags. Its key will not be removed from tagged messages, but they will appear untagged. Recreating a deleted tag, will make all former tagged messages appear tagged again.",
|
|
10243
|
+
"async": true,
|
|
10244
|
+
"permissions": [
|
|
10245
|
+
"messagesTags"
|
|
10246
|
+
],
|
|
10247
|
+
"parameters": [
|
|
10248
|
+
{
|
|
10249
|
+
"type": "string",
|
|
10250
|
+
"name": "key",
|
|
10251
|
+
"pattern": "^[$a-zA-Z0-9]+$"
|
|
10252
|
+
}
|
|
10253
|
+
]
|
|
10032
10254
|
}
|
|
10033
10255
|
]
|
|
10034
10256
|
}
|