Skip to content

Instantly share code, notes, and snippets.

@wbamberg
Created October 24, 2021 17:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wbamberg/e891ad5506798c8b1d9e3b7a897f8033 to your computer and use it in GitHub Desktop.
Save wbamberg/e891ad5506798c8b1d9e3b7a897f8033 to your computer and use it in GitHub Desktop.

Report from 10/24/2021, 10:23:08 AM

All unhandled elements

  • div.hidden (369)
  • td (74)
  • table.fullwidth-table.standard-table (66)
  • tr (31)
  • kbd (26)
  • table.standard-table (8)
  • th (4)
  • table (3)
  • td[colSpan="2"] (2)
  • td[rowSpan="2"] (1)

Details per Document

Missing conversion rules

  • div.hidden (96:1)

Missing conversion rules

  • div.hidden (60:1)

Missing conversion rules

  • div.hidden (37:1)

Missing conversion rules

  • div.hidden (72:1)

Missing conversion rules

  • div.hidden (50:1)

Missing conversion rules

  • div.hidden (68:1)

Missing conversion rules

  • div.hidden (72:1)

Missing conversion rules

  • div.hidden (70:1)

Missing conversion rules

  • div.hidden (92:1)

Missing conversion rules

  • div.hidden (85:1)

Missing conversion rules

  • div.hidden (95:1)

Missing conversion rules

  • div.hidden (87:1)

Missing conversion rules

  • div.hidden (96:1)

Missing conversion rules

  • div.hidden (95:1)

Missing conversion rules

  • div.hidden (81:1)

Missing conversion rules

  • div.hidden (82:1)

Missing conversion rules

  • div.hidden (82:1)

Missing conversion rules

  • div.hidden (104:1)

Missing conversion rules

  • div.hidden (99:1)

Missing conversion rules

  • div.hidden (74:1)

Missing conversion rules

  • div.hidden (81:1)

Missing conversion rules

  • div.hidden (113:1)

Missing conversion rules

  • div.hidden (95:1)

Missing conversion rules

  • div.hidden (44:1)

Missing conversion rules

  • div.hidden (66:1)

Missing conversion rules

  • div.hidden (60:1)

Missing conversion rules

  • div.hidden (79:1)

Missing conversion rules

  • div.hidden (77:1)

Missing conversion rules

  • div.hidden (80:1)

Missing conversion rules

  • div.hidden (77:1)

Missing conversion rules

  • div.hidden (84:1)

Missing conversion rules

  • div.hidden (37:1)

Missing conversion rules

  • div.hidden (98:1)

Missing conversion rules

  • div.hidden (89:2)

Missing conversion rules

  • div.hidden (97:1)

Missing conversion rules

  • div.hidden (85:1)

Missing conversion rules

  • div.hidden (88:1)

Missing conversion rules

  • div.hidden (162:1)

Missing conversion rules

  • div.hidden (112:1)

Missing conversion rules

  • div.hidden (94:1)

Missing conversion rules

  • div.hidden (70:1)

Missing conversion rules

  • div.hidden (91:1)

Missing conversion rules

  • div.hidden (69:1)

Missing conversion rules

  • div.hidden (97:1)

Missing conversion rules

  • div.hidden (69:1)

Missing conversion rules

  • div.hidden (99:1)

Missing conversion rules

  • div.hidden (94:1)

Missing conversion rules

  • div.hidden (94:1)

Missing conversion rules

  • div.hidden (94:1)

Missing conversion rules

  • div.hidden (72:1)

Missing conversion rules

  • div.hidden (92:1)

Missing conversion rules

  • div.hidden (93:1)

Missing conversion rules

  • div.hidden (78:1)

Missing conversion rules

  • div.hidden (30:1)

Missing conversion rules

  • div.hidden (34:1)

Missing conversion rules

  • div.hidden (34:1)

Missing conversion rules

  • div.hidden (54:1)

Missing conversion rules

  • div.hidden (70:1)

Missing conversion rules

  • div.hidden (72:1)

Missing conversion rules

  • div.hidden (62:1)

Missing conversion rules

  • div.hidden (68:1)

Missing conversion rules

  • div.hidden (68:1)

Missing conversion rules

  • div.hidden (68:1)

Missing conversion rules

  • div.hidden (89:1)

Missing conversion rules

  • div.hidden (68:1)

Missing conversion rules

  • div.hidden (98:1)

Missing conversion rules

  • div.hidden (104:1)

Missing conversion rules

  • div.hidden (63:1)

Missing conversion rules

  • div.hidden (152:1)

Missing conversion rules

  • div.hidden (99:1)

Missing conversion rules

  • div.hidden (61:1)

Missing conversion rules

  • div.hidden (97:1)

Missing conversion rules

  • div.hidden (104:1)

Missing conversion rules

  • div.hidden (43:1)

Missing conversion rules

  • div.hidden (189:1)

Missing conversion rules

  • div.hidden (52:1)

Missing conversion rules

  • div.hidden (70:1)

Missing conversion rules

  • div.hidden (55:1)

Missing conversion rules

  • div.hidden (58:1)

Missing conversion rules

  • div.hidden (46:1)

Missing conversion rules

  • div.hidden (73:1)

Missing conversion rules

  • div.hidden (82:1)

Missing conversion rules

  • div.hidden (80:1)

Missing conversion rules

  • div.hidden (76:1)

Missing conversion rules

  • div.hidden (45:1)

Missing conversion rules

  • div.hidden (63:1)

Missing conversion rules

  • div.hidden (61:1)

Missing conversion rules

  • div.hidden (75:1)

Missing conversion rules

  • div.hidden (73:1)

Missing conversion rules

  • div.hidden (60:1)

Missing conversion rules

  • div.hidden (80:1)

Missing conversion rules

  • div.hidden (55:1)

Missing conversion rules

  • div.hidden (44:1)

Missing conversion rules

  • div.hidden (68:1)

Missing conversion rules

  • div.hidden (62:1)

Missing conversion rules

  • div.hidden (44:1)

Missing conversion rules

  • div.hidden (121:1)

Missing conversion rules

  • div.hidden (82:1)

Missing conversion rules

  • div.hidden (94:1)

Missing conversion rules

  • div.hidden (48:1)

Missing conversion rules

  • div.hidden (49:1)

Missing conversion rules

  • div.hidden (91:1)

Missing conversion rules

  • div.hidden (48:1)

Missing conversion rules

  • div.hidden (93:1)

Missing conversion rules

  • div.hidden (103:1)

Missing conversion rules

  • div.hidden (88:1)

Missing conversion rules

  • div.hidden (118:1)

Missing conversion rules

  • div.hidden (79:1)

Missing conversion rules

  • div.hidden (84:1)

Missing conversion rules

  • div.hidden (81:1)

Missing conversion rules

  • div.hidden (66:1)

Missing conversion rules

  • div.hidden (87:1)

Missing conversion rules

  • div.hidden (68:1)

Missing conversion rules

  • div.hidden (136:1)

Missing conversion rules

  • div.hidden (53:1)

Missing conversion rules

  • div.hidden (80:1)

Missing conversion rules

  • div.hidden (52:1)

Missing conversion rules

  • div.hidden (52:1)

Missing conversion rules

  • div.hidden (44:1)

Missing conversion rules

  • div.hidden (56:1)

Missing conversion rules

  • div.hidden (43:1)

Missing conversion rules

  • div.hidden (50:1)

Missing conversion rules

  • div.hidden (115:1)

Missing conversion rules

  • div.hidden (67:1)

Missing conversion rules

  • div.hidden (57:1)

Missing conversion rules

  • div.hidden (66:1)

Missing conversion rules

  • div.hidden (86:1)

Missing conversion rules

  • div.hidden (81:1)

Missing conversion rules

  • div.hidden (41:1)

Missing conversion rules

  • div.hidden (62:1)

Missing conversion rules

  • div.hidden (57:1)

Missing conversion rules

  • div.hidden (33:1)

Missing conversion rules

  • div.hidden (85:1)

Missing conversion rules

  • div.hidden (85:1)

Missing conversion rules

  • div.hidden (66:1)

Missing conversion rules

  • div.hidden (49:1)

Missing conversion rules

  • div.hidden (37:1)

Missing conversion rules

  • div.hidden (57:1)

Missing conversion rules

  • div.hidden (37:1)

Missing conversion rules

  • div.hidden (47:1)

Missing conversion rules

  • div.hidden (45:1)

Missing conversion rules

  • div.hidden (119:1)

Missing conversion rules

  • div.hidden (65:1)

Missing conversion rules

  • div.hidden (76:1)

Missing conversion rules

  • div.hidden (111:1)

Missing conversion rules

  • div.hidden (88:1)

Missing conversion rules

  • div.hidden (52:1)

Missing conversion rules

  • div.hidden (103:1)

Missing conversion rules

  • div.hidden (84:1)

Missing conversion rules

  • div.hidden (82:1)

Missing conversion rules

  • div.hidden (91:1)

Missing conversion rules

  • div.hidden (124:1)

Missing conversion rules

  • div.hidden (62:1)

Missing conversion rules

  • div.hidden (50:1)

Missing conversion rules

  • div.hidden (84:1)

Missing conversion rules

  • div.hidden (60:1)

Missing conversion rules

  • div.hidden (90:1)

Missing conversion rules

  • div.hidden (53:1)

Missing conversion rules

  • div.hidden (59:1)

Missing conversion rules

  • div.hidden (37:1)

Missing conversion rules

  • div.hidden (84:1)

Missing conversion rules

  • div.hidden (37:1)

Missing conversion rules

  • div.hidden (59:1)

Missing conversion rules

  • div.hidden (81:1)

Missing conversion rules

  • div.hidden (68:1)

Missing conversion rules

  • div.hidden (53:1)

Missing conversion rules

  • div.hidden (97:1)

Missing conversion rules

  • div.hidden (67:1)

Missing conversion rules

  • div.hidden (65:1)

Missing conversion rules

  • div.hidden (71:1)

Missing conversion rules

  • div.hidden (80:1)

Missing conversion rules

  • div.hidden (59:1)

Missing conversion rules

  • div.hidden (85:1)

Missing conversion rules

  • div.hidden (75:1)

Missing conversion rules

  • div.hidden (75:1)

Missing conversion rules

  • div.hidden (75:1)

Missing conversion rules

  • div.hidden (75:1)

Missing conversion rules

  • div.hidden (76:1)

Missing conversion rules

  • div.hidden (77:1)

Missing conversion rules

  • div.hidden (91:2)

Missing conversion rules

  • div.hidden (35:1)

Missing conversion rules

  • kbd (32:120)
  • kbd (32:138)
  • kbd (32:176)
  • kbd (32:194)
  • kbd (32:213)
  • div.hidden (75:1)

Missing conversion rules

  • div.hidden (195:1)

Missing conversion rules

  • div.hidden (107:1)

Missing conversion rules

  • div.hidden (174:1)

Missing conversion rules

  • div.hidden (50:1)

Missing conversion rules

  • div.hidden (74:1)

Missing conversion rules

  • div.hidden (87:1)

Missing conversion rules

  • div.hidden (80:1)

Missing conversion rules

  • div.hidden (76:1)

Missing conversion rules

  • div.hidden (162:1)

Missing conversion rules

  • div.hidden (79:1)

Missing conversion rules

  • div.hidden (74:1)

Missing conversion rules

  • div.hidden (57:1)

Missing conversion rules

  • div.hidden (37:1)

Missing conversion rules

  • div.hidden (79:1)

Missing conversion rules

  • div.hidden (91:2)

Missing conversion rules

  • div.hidden (107:1)

Missing conversion rules

  • div.hidden (80:1)

Missing conversion rules

  • div.hidden (71:1)

Missing conversion rules

  • div.hidden (75:1)

Missing conversion rules

  • div.hidden (41:1)

Missing conversion rules

  • div.hidden (96:1)

Missing conversion rules

  • div.hidden (125:1)

Missing conversion rules

  • div.hidden (129:1)

Missing conversion rules

  • div.hidden (87:1)

Missing conversion rules

  • div.hidden (89:1)

Missing conversion rules

  • div.hidden (53:1)

Missing conversion rules

  • div.hidden (57:1)

Missing conversion rules

  • div.hidden (59:1)

Missing conversion rules

  • div.hidden (62:1)

Missing conversion rules

  • div.hidden (39:1)

Missing conversion rules

  • div.hidden (135:1)

Missing conversion rules

  • div.hidden (87:1)

Missing conversion rules

  • div.hidden (60:1)

Missing conversion rules

  • div.hidden (73:1)

Missing conversion rules

  • div.hidden (124:1)

Missing conversion rules

  • div.hidden (109:1)

Missing conversion rules

  • div.hidden (94:1)

Missing conversion rules

  • div.hidden (48:1)

Missing conversion rules

  • div.hidden (287:1)

Missing conversion rules

  • div.hidden (122:1)

Missing conversion rules

  • div.hidden (69:1)

Missing conversion rules

  • div.hidden (43:1)

Missing conversion rules

  • div.hidden (76:1)

Missing conversion rules

  • div.hidden (77:1)

Missing conversion rules

  • div.hidden (72:1)

Missing conversion rules

  • div.hidden (87:1)

Missing conversion rules

  • div.hidden (64:1)

Missing conversion rules

  • div.hidden (46:1)

Missing conversion rules

  • div.hidden (46:1)

Missing conversion rules

  • div.hidden (37:1)

Missing conversion rules

  • div.hidden (52:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (35:1)
  • div.hidden (214:1)

Missing conversion rules

  • div.hidden (52:1)

Missing conversion rules

  • div.hidden (79:1)

Missing conversion rules

  • div.hidden (46:1)

Missing conversion rules

  • div.hidden (140:1)

Missing conversion rules

  • div.hidden (85:1)

Missing conversion rules

  • div.hidden (66:1)

Missing conversion rules

  • div.hidden (44:1)

Missing conversion rules

  • div.hidden (84:1)

Missing conversion rules

  • div.hidden (105:1)

Missing conversion rules

  • div.hidden (31:1)

Missing conversion rules

  • div.hidden (92:1)

Missing conversion rules

  • div.hidden (81:1)

Missing conversion rules

  • div.hidden (57:1)

Missing conversion rules

  • div.hidden (78:1)

Missing conversion rules

  • div.hidden (85:1)

Missing conversion rules

  • div.hidden (36:1)

Missing conversion rules

  • div.hidden (71:1)

Missing conversion rules

  • div.hidden (101:1)

Missing conversion rules

  • div.hidden (90:1)

Missing conversion rules

  • div.hidden (80:1)

Missing conversion rules

  • div.hidden (63:1)

Missing conversion rules

  • div.hidden (56:1)

Missing conversion rules

  • div.hidden (93:1)

Missing conversion rules

  • div.hidden (52:1)

Missing conversion rules

  • div.hidden (44:1)

Invalid AST transformations

td (53:4) => tableCell
type: "paragraph"
summary: "Represents the sync storage area. Items in sync storage are synced by the browser, and are available across all instances of that browser that the user is logged into (e.g. via Firefox sync, or a Google account), across different devices."
locale: "en-US"
rowIndex: 3
shouldWrap: true
children: 
  type: "text"
  value: "512"
tr (50:3) => tableRow
type: "html"
value: "<td><p>512</p></td>"
table.standard-table (31:1) => table
type: "html"
value: "<tr><td>Maximum number of items</td><td>The maximum number of items that each extension is allowed to store in the sync storage area.</td><td><p>512</p></td></tr>"

Missing conversion rules

  • div.hidden (91:1)

Missing conversion rules

  • div.hidden (71:1)

Missing conversion rules

  • div.hidden (74:1)

Missing conversion rules

  • div.hidden (91:1)

Missing conversion rules

  • div.hidden (118:1)

Missing conversion rules

  • div.hidden (96:1)

Missing conversion rules

  • div.hidden (85:1)

Missing conversion rules

  • div.hidden (95:1)

Missing conversion rules

  • div.hidden (193:1)

Missing conversion rules

  • div.hidden (66:1)

Missing conversion rules

  • div.hidden (58:1)

Missing conversion rules

  • div.hidden (69:1)

Missing conversion rules

  • div.hidden (58:1)

Missing conversion rules

  • div.hidden (81:1)

Missing conversion rules

  • div.hidden (68:1)

Missing conversion rules

  • div.hidden (69:1)

Missing conversion rules

  • div.hidden (69:1)

Missing conversion rules

  • div.hidden (71:1)

Missing conversion rules

  • div.hidden (192:1)

Missing conversion rules

  • div.hidden (117:1)

Missing conversion rules

  • div.hidden (138:1)

Missing conversion rules

  • div.hidden (46:1)

Missing conversion rules

  • div.hidden (46:1)

Missing conversion rules

  • div.hidden (89:1)

Missing conversion rules

  • div.hidden (84:1)

Missing conversion rules

  • div.hidden (95:1)

Missing conversion rules

  • div.hidden (79:1)

Missing conversion rules

  • div.hidden (95:1)

Missing conversion rules

  • div.hidden (80:1)

Missing conversion rules

  • div.hidden (88:1)

Missing conversion rules

  • div.hidden (99:1)

Missing conversion rules

  • div.hidden (95:1)

Missing conversion rules

  • div.hidden (86:1)

Missing conversion rules

  • div.hidden (86:1)

Missing conversion rules

  • div.hidden (250:1)

Missing conversion rules

  • div.hidden (94:1)

Missing conversion rules

  • div.hidden (158:1)

Missing conversion rules

  • div.hidden (84:1)

Missing conversion rules

  • div.hidden (81:1)

Missing conversion rules

  • div.hidden (89:1)

Missing conversion rules

  • div.hidden (116:1)

Missing conversion rules

  • div.hidden (59:1)

Missing conversion rules

  • div.hidden (76:1)

Missing conversion rules

  • div.hidden (71:1)

Missing conversion rules

  • kbd (50:242)
  • kbd (50:259)
  • kbd (50:279)
  • div.hidden (101:1)

Missing conversion rules

  • div.hidden (33:1)

Missing conversion rules

  • div.hidden (37:1)

Missing conversion rules

  • div.hidden (139:1)

Missing conversion rules

  • div.hidden (44:1)

Missing conversion rules

  • div.hidden (46:1)

Missing conversion rules

  • div.hidden (46:1)

Missing conversion rules

  • div.hidden (48:1)

Missing conversion rules

  • div.hidden (52:1)

Missing conversion rules

  • div.hidden (118:1)

Missing conversion rules

  • div.hidden (50:1)

Missing conversion rules

  • div.hidden (48:1)

Missing conversion rules

  • div.hidden (69:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (44:2)
  • div.hidden (92:1)

Missing conversion rules

  • div.hidden (52:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (58:4)
  • div.hidden (99:1)

Missing conversion rules

  • div.hidden (98:1)

Missing conversion rules

  • div.hidden (35:1)

Missing conversion rules

  • div.hidden (104:1)

Missing conversion rules

  • div.hidden (95:1)

Missing conversion rules

  • div.hidden (114:1)

Missing conversion rules

  • div.hidden (111:1)

Missing conversion rules

  • div.hidden (117:1)

Missing conversion rules

  • div.hidden (110:1)

Missing conversion rules

  • kbd (26:138)
  • div.hidden (125:1)

Missing conversion rules

  • div.hidden (111:1)

Missing conversion rules

  • div.hidden (125:1)

Missing conversion rules

  • div.hidden (116:1)

Missing conversion rules

  • div.hidden (116:1)

Missing conversion rules

  • div.hidden (91:1)

Missing conversion rules

  • div.hidden (52:1)

Missing conversion rules

  • div.hidden (64:1)

Missing conversion rules

  • div.hidden (68:1)

Missing conversion rules

  • div.hidden (83:1)

Missing conversion rules

  • div.hidden (46:1)

Missing conversion rules

  • div.hidden (168:1)

Missing conversion rules

  • div.hidden (36:1)

Missing conversion rules

  • div.hidden (367:1)

Missing conversion rules

  • div.hidden (199:1)

Missing conversion rules

  • div.hidden (343:1)

Missing conversion rules

  • div.hidden (279:1)

Missing conversion rules

  • div.hidden (203:1)

Missing conversion rules

  • div.hidden (189:1)

Missing conversion rules

  • div.hidden (254:1)

Missing conversion rules

  • div.hidden (198:1)

Missing conversion rules

  • div.hidden (194:1)

Missing conversion rules

  • div.hidden (48:1)

Missing conversion rules

  • div.hidden (90:1)

Missing conversion rules

  • div.hidden (44:1)

Missing conversion rules

  • div.hidden (161:1)

Missing conversion rules

  • div.hidden (44:1)

Missing conversion rules

  • div.hidden (90:1)

Missing conversion rules

  • div.hidden (85:1)

Missing conversion rules

  • div.hidden (86:1)

Missing conversion rules

  • div.hidden (84:1)

Missing conversion rules

  • div.hidden (86:1)

Missing conversion rules

  • div.hidden (75:1)

Missing conversion rules

  • div.hidden (79:1)

Missing conversion rules

  • div.hidden (76:1)

Missing conversion rules

  • div.hidden (86:1)

Missing conversion rules

  • div.hidden (99:1)

Missing conversion rules

  • div.hidden (69:1)

Missing conversion rules

  • div.hidden (33:1)

Missing conversion rules

  • div.hidden (33:1)

Missing conversion rules

  • div.hidden (52:1)

Missing conversion rules

  • div.hidden (44:1)

Invalid AST transformations

td (176:4) => tableCell
type: "paragraph"
summary: "The introduction of the browser extensions API created a uniform landscape for the development of browser extensions. However, among the browsers that use the extensions API (the major ones being Chrome, Firefox, Opera, and Edge), there are differences in both the implementation of the API and the scope of coverage. And then, Safari uses its own proprietary Safari Extensions JS."
locale: "en-US"
rowIndex: 1
shouldWrap: true
children: 
  type: "text"
  value: "No"
td (179:4) => tableCell
type: "paragraph"
summary: "The introduction of the browser extensions API created a uniform landscape for the development of browser extensions. However, among the browsers that use the extensions API (the major ones being Chrome, Firefox, Opera, and Edge), there are differences in both the implementation of the API and the scope of coverage. And then, Safari uses its own proprietary Safari Extensions JS."
locale: "en-US"
rowIndex: 1
shouldWrap: true
children: 
  type: "link"
  title: 

  url: "https://extensionworkshop.com/documentation/develop/web-ext-command-reference/"
  children: 
    type: "text"
    value: "web-ext"
td (182:4) => tableCell
type: "paragraph"
summary: "The introduction of the browser extensions API created a uniform landscape for the development of browser extensions. However, among the browsers that use the extensions API (the major ones being Chrome, Firefox, Opera, and Edge), there are differences in both the implementation of the API and the scope of coverage. And then, Safari uses its own proprietary Safari Extensions JS."
locale: "en-US"
rowIndex: 1
shouldWrap: true
children: 
  type: "text"
  value: "Automatic, a few seconds.",type: "paragraph"
summary: "The introduction of the browser extensions API created a uniform landscape for the development of browser extensions. However, among the browsers that use the extensions API (the major ones being Chrome, Firefox, Opera, and Edge), there are differences in both the implementation of the API and the scope of coverage. And then, Safari uses its own proprietary Safari Extensions JS."
locale: "en-US"
rowIndex: 1
shouldWrap: true
children: 
  type: "text"
  value: "A manual review of the extension takes place after publication, which may result in the extension being suspended where issues that need fixing are found."
td (186:4) => tableCell
type: "paragraph"
summary: "The introduction of the browser extensions API created a uniform landscape for the development of browser extensions. However, among the browsers that use the extensions API (the major ones being Chrome, Firefox, Opera, and Edge), there are differences in both the implementation of the API and the scope of coverage. And then, Safari uses its own proprietary Safari Extensions JS."
locale: "en-US"
rowIndex: 1
shouldWrap: true
children: 
  type: "text"
  value: "Yes"
tr (172:3) => tableRow
type: "html"
value: "<th><p>Firefox</p></th>",type: "html"
value: "<td><p>No</p></td>",type: "html"
value: "<td><p><a href=\"https://extensionworkshop.com/documentation/develop/web-ext-command-reference/\">web-ext</a></p></td>",type: "html"
value: "<td><p>Automatic, a few seconds.</p><p>A manual review of the extension takes place after publication, which may result in the extension being suspended where issues that need fixing are found.</p></td>",type: "html"
value: "<td><p>Yes</p></td>"
td (194:4) => tableCell
type: "paragraph"
summary: "The introduction of the browser extensions API created a uniform landscape for the development of browser extensions. However, among the browsers that use the extensions API (the major ones being Chrome, Firefox, Opera, and Edge), there are differences in both the implementation of the API and the scope of coverage. And then, Safari uses its own proprietary Safari Extensions JS."
locale: "en-US"
rowIndex: 2
shouldWrap: true
children: 
  type: "text"
  value: "Yes"
td (197:4) => tableCell
type: "paragraph"
summary: "The introduction of the browser extensions API created a uniform landscape for the development of browser extensions. However, among the browsers that use the extensions API (the major ones being Chrome, Firefox, Opera, and Edge), there are differences in both the implementation of the API and the scope of coverage. And then, Safari uses its own proprietary Safari Extensions JS."
locale: "en-US"
rowIndex: 2
shouldWrap: true
children: 
  type: "text"
  value: "Yes"
td (200:4) => tableCell
type: "paragraph"
summary: "The introduction of the browser extensions API created a uniform landscape for the development of browser extensions. However, among the browsers that use the extensions API (the major ones being Chrome, Firefox, Opera, and Edge), there are differences in both the implementation of the API and the scope of coverage. And then, Safari uses its own proprietary Safari Extensions JS."
locale: "en-US"
rowIndex: 2
shouldWrap: true
children: 
  type: "text"
  value: "Automatic, less than an hour"
td (203:4) => tableCell
type: "paragraph"
summary: "The introduction of the browser extensions API created a uniform landscape for the development of browser extensions. However, among the browsers that use the extensions API (the major ones being Chrome, Firefox, Opera, and Edge), there are differences in both the implementation of the API and the scope of coverage. And then, Safari uses its own proprietary Safari Extensions JS."
locale: "en-US"
rowIndex: 2
shouldWrap: true
children: 
  type: "text"
  value: "Yes"
tr (190:3) => tableRow
type: "html"
value: "<th><p>Chrome</p></th>",type: "html"
value: "<td><p>Yes</p></td>",type: "html"
value: "<td><p>Yes</p></td>",type: "html"
value: "<td><p>Automatic, less than an hour</p></td>",type: "html"
value: "<td><p>Yes</p></td>"
td (211:4) => tableCell
type: "paragraph"
summary: "The introduction of the browser extensions API created a uniform landscape for the development of browser extensions. However, among the browsers that use the extensions API (the major ones being Chrome, Firefox, Opera, and Edge), there are differences in both the implementation of the API and the scope of coverage. And then, Safari uses its own proprietary Safari Extensions JS."
locale: "en-US"
rowIndex: 3
shouldWrap: true
children: 
  type: "text"
  value: "No"
td (214:4) => tableCell
type: "paragraph"
summary: "The introduction of the browser extensions API created a uniform landscape for the development of browser extensions. However, among the browsers that use the extensions API (the major ones being Chrome, Firefox, Opera, and Edge), there are differences in both the implementation of the API and the scope of coverage. And then, Safari uses its own proprietary Safari Extensions JS."
locale: "en-US"
rowIndex: 3
shouldWrap: true
children: 
  type: "text"
  value: "No"
td (217:4) => tableCell
type: "paragraph"
summary: "The introduction of the browser extensions API created a uniform landscape for the development of browser extensions. However, among the browsers that use the extensions API (the major ones being Chrome, Firefox, Opera, and Edge), there are differences in both the implementation of the API and the scope of coverage. And then, Safari uses its own proprietary Safari Extensions JS."
locale: "en-US"
rowIndex: 3
shouldWrap: true
children: 
  type: "text"
  value: "Manual, no SLA provided"
td (220:4) => tableCell
type: "paragraph"
summary: "The introduction of the browser extensions API created a uniform landscape for the development of browser extensions. However, among the browsers that use the extensions API (the major ones being Chrome, Firefox, Opera, and Edge), there are differences in both the implementation of the API and the scope of coverage. And then, Safari uses its own proprietary Safari Extensions JS."
locale: "en-US"
rowIndex: 3
shouldWrap: true
children: 
  type: "text"
  value: "No"
tr (207:3) => tableRow
type: "html"
value: "<th><p>Opera</p></th>",type: "html"
value: "<td><p>No</p></td>",type: "html"
value: "<td><p>No</p></td>",type: "html"
value: "<td><p>Manual, no SLA provided</p></td>",type: "html"
value: "<td><p>No</p></td>"
td (228:4) => tableCell
type: "paragraph"
summary: "The introduction of the browser extensions API created a uniform landscape for the development of browser extensions. However, among the browsers that use the extensions API (the major ones being Chrome, Firefox, Opera, and Edge), there are differences in both the implementation of the API and the scope of coverage. And then, Safari uses its own proprietary Safari Extensions JS."
locale: "en-US"
rowIndex: 4
shouldWrap: true
children: 
  type: "text"
  value: "No"
td (231:4) => tableCell
type: "paragraph"
summary: "The introduction of the browser extensions API created a uniform landscape for the development of browser extensions. However, among the browsers that use the extensions API (the major ones being Chrome, Firefox, Opera, and Edge), there are differences in both the implementation of the API and the scope of coverage. And then, Safari uses its own proprietary Safari Extensions JS."
locale: "en-US"
rowIndex: 4
shouldWrap: true
children: 
  type: "text"
  value: "No"
td (234:4) => tableCell
type: "paragraph"
summary: "The introduction of the browser extensions API created a uniform landscape for the development of browser extensions. However, among the browsers that use the extensions API (the major ones being Chrome, Firefox, Opera, and Edge), there are differences in both the implementation of the API and the scope of coverage. And then, Safari uses its own proprietary Safari Extensions JS."
locale: "en-US"
rowIndex: 4
shouldWrap: true
children: 
  type: "text"
  value: "Manual, up to seven business days"
td (237:4) => tableCell
type: "paragraph"
summary: "The introduction of the browser extensions API created a uniform landscape for the development of browser extensions. However, among the browsers that use the extensions API (the major ones being Chrome, Firefox, Opera, and Edge), there are differences in both the implementation of the API and the scope of coverage. And then, Safari uses its own proprietary Safari Extensions JS."
locale: "en-US"
rowIndex: 4
shouldWrap: true
children: 
  type: "text"
  value: "Yes"
tr (224:3) => tableRow
type: "html"
value: "<th><p>Edge</p></th>",type: "html"
value: "<td><p>No</p></td>",type: "html"
value: "<td><p>No</p></td>",type: "html"
value: "<td><p>Manual, up to seven business days</p></td>",type: "html"
value: "<td><p>Yes</p></td>"
table (161:1) => table
type: "html"
value: "<tr><th><p>Firefox</p></th><td><p>No</p></td><td><p><a href=\"https://extensionworkshop.com/documentation/develop/web-ext-command-reference/\">web-ext</a></p></td><td><p>Automatic, a few seconds.</p><p>A manual review of the extension takes place after publication, which may result in the extension being suspended where issues that need fixing are found.</p></td><td><p>Yes</p></td></tr>",type: "html"
value: "<tr><th><p>Chrome</p></th><td><p>Yes</p></td><td><p>Yes</p></td><td><p>Automatic, less than an hour</p></td><td><p>Yes</p></td></tr>",type: "html"
value: "<tr><th><p>Opera</p></th><td><p>No</p></td><td><p>No</p></td><td><p>Manual, no SLA provided</p></td><td><p>No</p></td></tr>",type: "html"
value: "<tr><th><p>Edge</p></th><td><p>No</p></td><td><p>No</p></td><td><p>Manual, up to seven business days</p></td><td><p>Yes</p></td></tr>"

Missing conversion rules

  • th (173:4)
  • th (191:4)
  • th (208:4)
  • th (225:4)

Missing conversion rules

  • table.fullwidth-table.standard-table (242:1)

Invalid AST transformations

tr (22:3) => tableRow
type: "html"
value: "<td><p>Help users separate their browser activities with <a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/API/contextualIdentities\">Contextual Identities</a> a.k.a. Containers. Give groups of tabs their own local browser storage: cookie store and local data in localStorage and indexedDB. This keeps details such as site preferences, signed in sessions, and ad tracking data private to the tabs.</p></td>",type: "html"
value: "<td><img alt=\"Illustration of the containers menu\" src=\"containers.png\"></td>"
td (29:4) => tableCell
type: "paragraph"
summary: "Firefox is a great place to begin your browser extension development. To start, you get the highest compliance with the proposed browser extension API including use of the browser.* namespace and promises for handling asynchronous events. Then, there is a highly supportive community of extension developers, ready to assist you."
locale: "en-US"
rowIndex: 1
shouldWrap: true
children: 
  type: "text"
  value: "Record and display additional or complementary information about a web page with the "
  type: "link"
  title: 

  url: "/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Sidebars"
  children: 
    type: "text"
    value: "Sidebar"
  type: "text"
  value: " UI component, a panel that sits alongside web pages."
tr (28:3) => tableRow
type: "html"
value: "<td><p>Record and display additional or complementary information about a web page with the <a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Sidebars\">Sidebar</a> UI component, a panel that sits alongside web pages.</p></td>"
td (35:4) => tableCell
type: "paragraph"
summary: "Firefox is a great place to begin your browser extension development. To start, you get the highest compliance with the proposed browser extension API including use of the browser.* namespace and promises for handling asynchronous events. Then, there is a highly supportive community of extension developers, ready to assist you."
locale: "en-US"
rowIndex: 2
shouldWrap: true
children: 
  type: "text"
  value: "Better integrate your extension with the browser using the ability to pick up the browser style in page and browser actions as well as the sidebar UI. Define, in the "
  type: "inlineCode"
  value: "manifest.json"
  type: "text"
  value: " file, the URLs where a page action is shown or hidden, and choose where to place the browser action icon."
tr (34:3) => tableRow
type: "html"
value: "<td><p>Better integrate your extension with the browser using the ability to pick up the browser style in page and browser actions as well as the sidebar UI. Define, in the <code>manifest.json</code> file, the URLs where a page action is shown or hidden, and choose where to place the browser action icon.</p></td>"
td (41:4) => tableCell
type: "paragraph"
summary: "Firefox is a great place to begin your browser extension development. To start, you get the highest compliance with the proposed browser extension API including use of the browser.* namespace and promises for handling asynchronous events. Then, there is a highly supportive community of extension developers, ready to assist you."
locale: "en-US"
rowIndex: 3
shouldWrap: true
children: 
  type: "text"
  value: "Help users locate content of interest in a web page, with the ability to "
  type: "link"
  title: 

  url: "/en-US/docs/Mozilla/Add-ons/WebExtensions/API/find"
  children: 
    type: "text"
    value: "find and highlight text in a webpage"
  type: "text"
  value: "."
tr (40:3) => tableRow
type: "html"
value: "<td><p>Help users locate content of interest in a web page, with the ability to <a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/API/find\">find and highlight text in a webpage</a>.</p></td>"
td (47:4) => tableCell
type: "paragraph"
summary: "Firefox is a great place to begin your browser extension development. To start, you get the highest compliance with the proposed browser extension API including use of the browser.* namespace and promises for handling asynchronous events. Then, there is a highly supportive community of extension developers, ready to assist you."
locale: "en-US"
rowIndex: 4
shouldWrap: true
children: 
  type: "text"
  value: "Perform searches directly from your extension, with features to "
  type: "link"
  title: 

  url: "/en-US/docs/Mozilla/Add-ons/WebExtensions/API/search"
  children: 
    type: "text"
    value: "get details of search engines and perform a search"
  type: "text"
  value: "."
tr (46:3) => tableRow
type: "html"
value: "<td><p>Perform searches directly from your extension, with features to <a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/API/search\">get details of search engines and perform a search</a>.</p></td>"
td (53:4) => tableCell
type: "paragraph"
summary: "Firefox is a great place to begin your browser extension development. To start, you get the highest compliance with the proposed browser extension API including use of the browser.* namespace and promises for handling asynchronous events. Then, there is a highly supportive community of extension developers, ready to assist you."
locale: "en-US"
rowIndex: 5
shouldWrap: true
children: 
  type: "text"
  value: "Add an extra dimension to your themes by "
  type: "link"
  title: 

  url: "/en-US/docs/Mozilla/Add-ons/WebExtensions/API/theme"
  children: 
    type: "text"
    value: "updating the browser theme at runtime"
  type: "text"
  value: ". With this feature you can alternate themes by time of day, apply a different theme when users browse your website, reflect user actions in your extension, and more."
tr (52:3) => tableRow
type: "html"
value: "<td><p>Add an extra dimension to your themes by <a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/API/theme\">updating the browser theme at runtime</a>. With this feature you can alternate themes by time of day, apply a different theme when users browse your website, reflect user actions in your extension, and more.</p></td>"
td (59:4) => tableCell
type: "paragraph"
summary: "Firefox is a great place to begin your browser extension development. To start, you get the highest compliance with the proposed browser extension API including use of the browser.* namespace and promises for handling asynchronous events. Then, there is a highly supportive community of extension developers, ready to assist you."
locale: "en-US"
rowIndex: 6
shouldWrap: true
children: 
  type: "text"
  value: "Provide users with control over their browsing experience from your extension with the ability to "
  type: "link"
  title: 

  url: "/en-US/docs/Mozilla/Add-ons/WebExtensions/API/browserSettings"
  children: 
    type: "text"
    value: "modify (some) global browser settings"
  type: "text"
  value: "."
tr (58:3) => tableRow
type: "html"
value: "<td><p>Provide users with control over their browsing experience from your extension with the ability to <a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/API/browserSettings\">modify (some) global browser settings</a>.</p></td>"
td (65:4) => tableCell
type: "paragraph"
summary: "Firefox is a great place to begin your browser extension development. To start, you get the highest compliance with the proposed browser extension API including use of the browser.* namespace and promises for handling asynchronous events. Then, there is a highly supportive community of extension developers, ready to assist you."
locale: "en-US"
rowIndex: 7
shouldWrap: true
children: 
  type: "text"
  value: "Enable users to reliably add your extension’s features to new pages and sites, with the ability to "
  type: "link"
  title: 

  url: "/en-US/docs/Mozilla/Add-ons/WebExtensions/API/contentScripts"
  children: 
    type: "text"
    value: "register and unregister content scripts at runtime"
  type: "text"
  value: "."
tr (64:3) => tableRow
type: "html"
value: "<td><p>Enable users to reliably add your extension’s features to new pages and sites, with the ability to <a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/API/contentScripts\">register and unregister content scripts at runtime</a>.</p></td>"
td (71:4) => tableCell
type: "paragraph"
summary: "Firefox is a great place to begin your browser extension development. To start, you get the highest compliance with the proposed browser extension API including use of the browser.* namespace and promises for handling asynchronous events. Then, there is a highly supportive community of extension developers, ready to assist you."
locale: "en-US"
rowIndex: 8
shouldWrap: true
children: 
  type: "text"
  value: "Take advantage of external services to handle protocols or content types by registering "
  type: "link"
  title: 

  url: "/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/protocol_handlers"
  children: 
    type: "text"
    value: "protocol handlers"
  type: "text"
  value: " in the "
  type: "inlineCode"
  value: "manifest.json"
  type: "text"
  value: "."
tr (70:3) => tableRow
type: "html"
value: "<td><p>Take advantage of external services to handle protocols or content types by registering <a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/protocol_handlers\">protocol handlers</a> in the <code>manifest.json</code>.</p></td>"
td (77:4) => tableCell
type: "paragraph"
summary: "Firefox is a great place to begin your browser extension development. To start, you get the highest compliance with the proposed browser extension API including use of the browser.* namespace and promises for handling asynchronous events. Then, there is a highly supportive community of extension developers, ready to assist you."
locale: "en-US"
rowIndex: 9
shouldWrap: true
children: 
  type: "text"
  value: "Perform additional web tasks such as "
  type: "link"
  title: 

  url: "/en-US/docs/Mozilla/Add-ons/WebExtensions/API/dns"
  children: 
    type: "text"
    value: "resolving domain names"
  type: "text"
  value: " and "
  type: "link"
  title: 

  url: "/en-US/docs/Mozilla/Add-ons/WebExtensions/API/proxy"
  children: 
    type: "text"
    value: "proxying web requests"
  type: "text"
  value: "."
tr (76:3) => tableRow
type: "html"
value: "<td><p>Perform additional web tasks such as <a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/API/dns\">resolving domain names</a> and <a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/API/proxy\">proxying web requests</a>.</p></td>"
td (83:4) => tableCell
type: "paragraph"
summary: "Firefox is a great place to begin your browser extension development. To start, you get the highest compliance with the proposed browser extension API including use of the browser.* namespace and promises for handling asynchronous events. Then, there is a highly supportive community of extension developers, ready to assist you."
locale: "en-US"
rowIndex: 10
shouldWrap: true
children: 
  type: "text"
  value: "Add advanced security capabilities "
  type: "link"
  title: 

  url: "/en-US/docs/Mozilla/Add-ons/WebExtensions/API/pkcs11"
  children: 
    type: "text"
    value: "using PKCS #11 security modules to source keys and certificates"
  type: "text"
  value: "."
tr (82:3) => tableRow
type: "html"
value: "<td><p>Add advanced security capabilities <a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/API/pkcs11\">using PKCS #11 security modules to source keys and certificates</a>.</p></td>"
table.standard-table (20:1) => table
type: "html"
value: "<tr><td><p>Help users separate their browser activities with <a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/API/contextualIdentities\">Contextual Identities</a> a.k.a. Containers. Give groups of tabs their own local browser storage: cookie store and local data in localStorage and indexedDB. This keeps details such as site preferences, signed in sessions, and ad tracking data private to the tabs.</p></td><td><img alt=\"Illustration of the containers menu\" src=\"containers.png\"></td></tr>",type: "html"
value: "<tr><td><p>Record and display additional or complementary information about a web page with the <a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Sidebars\">Sidebar</a> UI component, a panel that sits alongside web pages.</p></td><td><img alt=\"Illustration of the annotation example sidebar sitting alongside a webpage\" src=\"sidebar.png\"></td></tr>",type: "html"
value: "<tr><td><p>Better integrate your extension with the browser using the ability to pick up the browser style in page and browser actions as well as the sidebar UI. Define, in the <code>manifest.json</code> file, the URLs where a page action is shown or hidden, and choose where to place the browser action icon.</p></td><td><img alt=\"Illustration of a browser action icon placed in the menu panel\" src=\"icon_placement.png\"></td></tr>",type: "html"
value: "<tr><td><p>Help users locate content of interest in a web page, with the ability to <a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/API/find\">find and highlight text in a webpage</a>.</p></td><td><img alt=\"Illustration of find highlighting text in page content\" src=\"find.png\"></td></tr>",type: "html"
value: "<tr><td><p>Perform searches directly from your extension, with features to <a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/API/search\">get details of search engines and perform a search</a>.</p></td><td><img alt=\"Wikipedia page showing the results of the search for &#x22;extension&#x22;\" src=\"search_extension.png\"></td></tr>",type: "html"
value: "<tr><td><p>Add an extra dimension to your themes by <a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/API/theme\">updating the browser theme at runtime</a>. With this feature you can alternate themes by time of day, apply a different theme when users browse your website, reflect user actions in your extension, and more.</p></td><td><img alt=\"Illustration suggesting the theme is changing by time\" src=\"dynamic_theme.png\"></td></tr>",type: "html"
value: "<tr><td><p>Provide users with control over their browsing experience from your extension with the ability to <a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/API/browserSettings\">modify (some) global browser settings</a>.</p></td><td><img alt=\"Example of a Firefox setting showing that it is being controlled by an extension\" src=\"extension_controlling_settings.png\"></td></tr>",type: "html"
value: "<tr><td><p>Enable users to reliably add your extension’s features to new pages and sites, with the ability to <a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/API/contentScripts\">register and unregister content scripts at runtime</a>.</p></td><td><img alt=\"Illustration of example code used to inject a  content script on demand\" src=\"script_inject.png\"></td></tr>",type: "html"
value: "<tr><td><p>Take advantage of external services to handle protocols or content types by registering <a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/protocol_handlers\">protocol handlers</a> in the <code>manifest.json</code>.</p></td><td><img alt=\"Illustration of code setting a protocol handler\" src=\"protocol.png\"></td></tr>",type: "html"
value: "<tr><td><p>Perform additional web tasks such as <a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/API/dns\">resolving domain names</a> and <a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/API/proxy\">proxying web requests</a>.</p></td><td><img alt=\"Example of Firefox proxy settings\" src=\"proxy_settings.png\"></td></tr>",type: "html"
value: "<tr><td><p>Add advanced security capabilities <a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/API/pkcs11\">using PKCS #11 security modules to source keys and certificates</a>.</p></td><td><img alt=\"Illustration of the certificate and key\" src=\"certificate_key.png\"></td></tr>"

Missing conversion rules

  • td (23:4)
  • td (26:4)

Invalid AST transformations

tr (21:3) => tableRow
type: "html"
value: "<td><img alt=\"Firefox workflow prepare step graphic\" src=\"firefox_workflow_prepare.png\"></td>",type: "html"
value: "<td><img alt=\"Firefox workflow code step graphic\" src=\"firefox_workflow_code.png\"></td>",type: "html"
value: "<td><img alt=\"Firefox workflow publish step graphic\" src=\"firefox_workflow_publish.png\"></td>",type: "html"
value: "<td><img alt=\"Firefox workflow enhance step graphic\" src=\"firefox_workflow_enhance.png\"></td>",type: "html"
value: "<td><img alt=\"Firefox workflow retire step graphic\" src=\"firefox_workflow_retire.png\"></td>"
td (29:4) => tableCell
type: "list"
ordered: false
start: 

spread: false
children: 
  type: "listItem"
  spread: false
  children: 
    type: "paragraph"
    children: 
      type: "text"
      value: "Choose a Firefox version for web extension development"
  type: "listItem"
  spread: false
  children: 
    type: "paragraph"
    children: 
      type: "text"
      value: "Choose your IDE or code editor"
  type: "listItem"
  spread: false
  children: 
    type: "paragraph"
    children: 
      type: "link"
      title: 

      url: "https://extensionworkshop.com/documentation/develop/getting-started-with-web-ext/"
      children: 
        type: "text"
        value: "Install web-ext"
  type: "listItem"
  spread: false
  children: 
    type: "paragraph"
    children: 
      type: "link"
      title: 

      url: "https://webextensions.in/"
      children: 
        type: "text"
        value: "Create your extension scaffold"
  type: "listItem"
  spread: false
  children: 
    type: "paragraph"
    children: 
      type: "text"
      value: "Get familiar with the "
      type: "link"
      title: 

      url: "/en-US/docs/Mozilla/Add-ons/AMO/Policy"
      children: 
        type: "text"
        value: "add-on policies and developer agreement"
td (38:4) => tableCell
type: "list"
ordered: false
start: 

spread: false
children: 
  type: "listItem"
  spread: false
  children: 
    type: "paragraph"
    children: 
      type: "link"
      title: 

      url: "/en-US/docs/Mozilla/Add-ons/WebExtensions/Your_first_WebExtension"
      children: 
        type: "text"
        value: "Code your extension"
  type: "listItem"
  spread: false
  children: 
    type: "paragraph"
    children: 
      type: "text"
      value: "Run your extension with"
      type: "link"
      title: 

      url: "https://extensionworkshop.com/documentation/develop/getting-started-with-web-ext/#testing_out_an_extension"
      children: 
        type: "text"
        value: " web-ext run"
      type: "text"
      value: " or "
      type: "link"
      title: 

      url: "https://extensionworkshop.com/documentation/develop/temporary-installation-in-firefox/"
      children: 
        type: "text"
        value: "about: debugging"
      type: "text"
      value: ")"
  type: "listItem"
  spread: false
  children: 
    type: "paragraph"
    children: 
      type: "link"
      title: 

      url: "https://extensionworkshop.com/documentation/develop/testing-persistent-and-restart-features/"
      children: 
        type: "text"
        value: "Test persistent and restart features"
  type: "listItem"
  spread: false
  children: 
    type: "paragraph"
    children: 
      type: "text"
      value: "Debug with the"
      type: "link"
      title: 

      url: "/en-US/docs/Tools/Browser_Toolbox"
      children: 
        type: "text"
        value: " Addon Debugging Window"
td (46:4) => tableCell
type: "list"
ordered: false
start: 

spread: false
children: 
  type: "listItem"
  spread: false
  children: 
    type: "paragraph"
    children: 
      type: "text"
      value: "Package your extension with"
      type: "link"
      title: 

      url: "https://extensionworkshop.com/documentation/develop/getting-started-with-web-ext/#packaging_your_extension"
      children: 
        type: "text"
        value: " web-ext build"
  type: "listItem"
  spread: false
  children: 
    type: "paragraph"
    children: 
      type: "text"
      value: "Create an "
      type: "link"
      title: 

      url: "https://addons.mozilla.org"
      children: 
        type: "text"
        value: "addons.mozilla.org"
      type: "text"
      value: " account"
  type: "listItem"
  spread: false
  children: 
    type: "paragraph"
    children: 
      type: "link"
      title: 

      url: "https://extensionworkshop.com/documentation/publish/submitting-an-add-on/"
      children: 
        type: "text"
        value: "Submit your extension"
  type: "listItem"
  spread: false
  children: 
    type: "paragraph"
    children: 
      type: "link"
      title: 

      url: "https://extensionworkshop.com/documentation/publish/source-code-submission/"
      children: 
        type: "text"
        value: "Submit your source code"
      type: "text"
      value: " (if required)"
  type: "listItem"
  spread: false
  children: 
    type: "paragraph"
    children: 
      type: "link"
      title: 

      url: "https://extensionworkshop.com/documentation/develop/create-an-appealing-listing/"
      children: 
        type: "text"
        value: "Create an appealing listing"
td (55:4) => tableCell
type: "list"
ordered: false
start: 

spread: false
children: 
  type: "listItem"
  spread: false
  children: 
    type: "paragraph"
    children: 
      type: "text"
      value: "Responded to Mozilla extension review"
  type: "listItem"
  spread: false
  children: 
    type: "paragraph"
    children: 
      type: "text"
      value: "Promote your extension"
  type: "listItem"
  spread: false
  children: 
    type: "paragraph"
    children: 
      type: "link"
      title: 

      url: "https://extensionworkshop.com/documentation/publish/recommended-extensions/"
      children: 
        type: "text"
        value: "Nominate your extension to be featured"
  type: "listItem"
  spread: false
  children: 
    type: "paragraph"
    children: 
      type: "text"
      value: "Update and improve your extension"
td (63:4) => tableCell
type: "list"
ordered: false
start: 

spread: false
children: 
  type: "listItem"
  spread: false
  children: 
    type: "paragraph"
    children: 
      type: "link"
      title: 

      url: "https://extensionworkshop.com/documentation/manage/retiring-your-extension/"
      children: 
        type: "text"
        value: "Retire your extension"
tr (28:3) => tableRow
type: "html"
value: "<td><ul><li>Choose a Firefox version for web extension development</li><li>Choose your IDE or code editor</li><li><a href=\"https://extensionworkshop.com/documentation/develop/getting-started-with-web-ext/\">Install web-ext</a></li><li><a href=\"https://webextensions.in/\">Create your extension scaffold</a></li><li>Get familiar with the <a href=\"/en-US/docs/Mozilla/Add-ons/AMO/Policy\">add-on policies and developer agreement</a></li></ul></td>",type: "html"
value: "<td><ul><li><a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/Your_first_WebExtension\">Code your extension</a></li><li>Run your extension with<a href=\"https://extensionworkshop.com/documentation/develop/getting-started-with-web-ext/#testing_out_an_extension\"> web-ext run</a> or <a href=\"https://extensionworkshop.com/documentation/develop/temporary-installation-in-firefox/\">about: debugging</a>)</li><li><a href=\"https://extensionworkshop.com/documentation/develop/testing-persistent-and-restart-features/\">Test persistent and restart features</a></li><li>Debug with the<a href=\"/en-US/docs/Tools/Browser_Toolbox\"> Addon Debugging Window</a></li></ul></td>",type: "html"
value: "<td><ul><li>Package your extension with<a href=\"https://extensionworkshop.com/documentation/develop/getting-started-with-web-ext/#packaging_your_extension\"> web-ext build</a></li><li>Create an <a href=\"https://addons.mozilla.org\">addons.mozilla.org</a> account</li><li><a href=\"https://extensionworkshop.com/documentation/publish/submitting-an-add-on/\">Submit your extension</a></li><li><a href=\"https://extensionworkshop.com/documentation/publish/source-code-submission/\">Submit your source code</a> (if required)</li><li><a href=\"https://extensionworkshop.com/documentation/develop/create-an-appealing-listing/\">Create an appealing listing</a></li></ul></td>",type: "html"
value: "<td><ul><li>Responded to Mozilla extension review</li><li>Promote your extension</li><li><a href=\"https://extensionworkshop.com/documentation/publish/recommended-extensions/\">Nominate your extension to be featured</a></li><li>Update and improve your extension</li></ul></td>",type: "html"
value: "<td><ul><li><a href=\"https://extensionworkshop.com/documentation/manage/retiring-your-extension/\">Retire your extension</a></li></ul></td>"
table (19:1) => table
type: "html"
value: "<tr><td><img alt=\"Firefox workflow prepare step graphic\" src=\"firefox_workflow_prepare.png\"></td><td><img alt=\"Firefox workflow code step graphic\" src=\"firefox_workflow_code.png\"></td><td><img alt=\"Firefox workflow publish step graphic\" src=\"firefox_workflow_publish.png\"></td><td><img alt=\"Firefox workflow enhance step graphic\" src=\"firefox_workflow_enhance.png\"></td><td><img alt=\"Firefox workflow retire step graphic\" src=\"firefox_workflow_retire.png\"></td></tr>",type: "html"
value: "<tr><td><ul><li>Choose a Firefox version for web extension development</li><li>Choose your IDE or code editor</li><li><a href=\"https://extensionworkshop.com/documentation/develop/getting-started-with-web-ext/\">Install web-ext</a></li><li><a href=\"https://webextensions.in/\">Create your extension scaffold</a></li><li>Get familiar with the <a href=\"/en-US/docs/Mozilla/Add-ons/AMO/Policy\">add-on policies and developer agreement</a></li></ul></td><td><ul><li><a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/Your_first_WebExtension\">Code your extension</a></li><li>Run your extension with<a href=\"https://extensionworkshop.com/documentation/develop/getting-started-with-web-ext/#testing_out_an_extension\"> web-ext run</a> or <a href=\"https://extensionworkshop.com/documentation/develop/temporary-installation-in-firefox/\">about: debugging</a>)</li><li><a href=\"https://extensionworkshop.com/documentation/develop/testing-persistent-and-restart-features/\">Test persistent and restart features</a></li><li>Debug with the<a href=\"/en-US/docs/Tools/Browser_Toolbox\"> Addon Debugging Window</a></li></ul></td><td><ul><li>Package your extension with<a href=\"https://extensionworkshop.com/documentation/develop/getting-started-with-web-ext/#packaging_your_extension\"> web-ext build</a></li><li>Create an <a href=\"https://addons.mozilla.org\">addons.mozilla.org</a> account</li><li><a href=\"https://extensionworkshop.com/documentation/publish/submitting-an-add-on/\">Submit your extension</a></li><li><a href=\"https://extensionworkshop.com/documentation/publish/source-code-submission/\">Submit your source code</a> (if required)</li><li><a href=\"https://extensionworkshop.com/documentation/develop/create-an-appealing-listing/\">Create an appealing listing</a></li></ul></td><td><ul><li>Responded to Mozilla extension review</li><li>Promote your extension</li><li><a href=\"https://extensionworkshop.com/documentation/publish/recommended-extensions/\">Nominate your extension to be featured</a></li><li>Update and improve your extension</li></ul></td><td><ul><li><a href=\"https://extensionworkshop.com/documentation/manage/retiring-your-extension/\">Retire your extension</a></li></ul></td></tr>"

Missing conversion rules

  • td (22:4)
  • td (23:4)
  • td (24:4)
  • td (25:4)
  • td (26:4)

Missing conversion rules

  • kbd (165:49)
  • kbd (219:90)

Invalid AST transformations

td (316:4) => tableCell
type: "paragraph"
summary: "The WebExtensions API has a rather handy module available for internationalizing extensions — i18n. In this article we'll explore its features and provide a practical example of how it works. The i18n system for extensions built using WebExtension APIs is similar to common JavaScript libraries for i18n such as i18n.js."
locale: "en-US"
rowIndex: 1
shouldWrap: true
children: 
  type: "text"
  value: "The extension's internally-generated UUID. You might use this string to construct URLs for resources inside the extension. Even unlocalized extensions can use this message.",type: "paragraph"
summary: "The WebExtensions API has a rather handy module available for internationalizing extensions — i18n. In this article we'll explore its features and provide a practical example of how it works. The i18n system for extensions built using WebExtension APIs is similar to common JavaScript libraries for i18n such as i18n.js."
locale: "en-US"
rowIndex: 1
shouldWrap: true
children: 
  type: "text"
  value: "You can't use this message in a manifest file.",type: "paragraph"
summary: "The WebExtensions API has a rather handy module available for internationalizing extensions — i18n. In this article we'll explore its features and provide a practical example of how it works. The i18n system for extensions built using WebExtension APIs is similar to common JavaScript libraries for i18n such as i18n.js."
locale: "en-US"
rowIndex: 1
shouldWrap: true
children: 
  type: "text"
  value: "Also note that this ID is "
  type: "emphasis"
  children: 
    type: "text"
    value: "not"
  type: "text"
  value: " the add-on ID returned by {{V2ViRXh0QVBJUmVmKCJydW50aW1lLmlkIik=}}, and that can be set using the "
  type: "link"
  title: 

  url: "/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/browser_specific_settings"
  children: 
    type: "text"
    value: "applications"
  type: "text"
  value: " key in manifest.json. It's the generated UUID that appears in the add-on's URL. This means that you can't use this value as the "
  type: "inlineCode"
  value: "extensionId"
  type: "text"
  value: " parameter to {{V2ViRXh0QVBJUmVmKCJydW50aW1lLnNlbmRNZXNzYWdlKCkiKQ==}}, and can't use it to check against the "
  type: "inlineCode"
  value: "id"
  type: "text"
  value: " property of a {{V2ViRXh0QVBJUmVmKCJydW50aW1lLk1lc3NhZ2VTZW5kZXIiKQ==}} object."
tr (314:3) => tableRow
type: "html"
value: "<td><p>The extension's internally-generated UUID. You might use this string to construct URLs for resources inside the extension. Even unlocalized extensions can use this message.</p><p>You can't use this message in a manifest file.</p><p>Also note that this ID is <em>not</em> the add-on ID returned by {{V2ViRXh0QVBJUmVmKCJydW50aW1lLmlkIik=}}, and that can be set using the <a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/browser_specific_settings\">applications</a> key in manifest.json. It's the generated UUID that appears in the add-on's URL. This means that you can't use this value as the <code>extensionId</code> parameter to {{V2ViRXh0QVBJUmVmKCJydW50aW1lLnNlbmRNZXNzYWdlKCkiKQ==}}, and can't use it to check against the <code>id</code> property of a {{V2ViRXh0QVBJUmVmKCJydW50aW1lLk1lc3NhZ2VTZW5kZXIiKQ==}} object.</p></td>"
table.standard-table (306:1) => table
type: "html"
value: "<tr><td><code>@@extension_id</code></td><td><p>The extension's internally-generated UUID. You might use this string to construct URLs for resources inside the extension. Even unlocalized extensions can use this message.</p><p>You can't use this message in a manifest file.</p><p>Also note that this ID is <em>not</em> the add-on ID returned by {{V2ViRXh0QVBJUmVmKCJydW50aW1lLmlkIik=}}, and that can be set using the <a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/browser_specific_settings\">applications</a> key in manifest.json. It's the generated UUID that appears in the add-on's URL. This means that you can't use this value as the <code>extensionId</code> parameter to {{V2ViRXh0QVBJUmVmKCJydW50aW1lLnNlbmRNZXNzYWdlKCkiKQ==}}, and can't use it to check against the <code>id</code> property of a {{V2ViRXh0QVBJUmVmKCJydW50aW1lLk1lc3NhZ2VTZW5kZXIiKQ==}} object.</p></td></tr>"

Missing conversion rules

  • table.fullwidth-table.standard-table (13:1)

Invalid AST transformations

tr (49:3) => tableRow
type: "html"
value: "<td><code>scripts</code></td>",type: "html"
value: "<td><p>An <code>Array</code> of <code>Strings</code>, each of which is a path to a JavaScript source. The path is relative to the manifest.json file itself. These are the scripts which will be executed in the extension's background page.</p><p>The scripts share the same <code>window</code> global context.</p><p>The scripts are loaded in the order they appear in the array.</p><p>If you specify a value for <code>scripts</code>, then an empty page will be created in which your scripts are run.</p><div class=\"note\"><p><strong>Note:</strong> If you want to fetch a script from a remote location with the <code>&#x3C;script></code> tag (e.g. <code>&#x3C;script src = \"https://code.jquery.com/jquery-1.7.1.min.js\"></code>), you will also have to change the <code><a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/content_security_policy\">content_security_policy</a></code> key in the manifest.json file of your extension.</p></div><div class=\"note\"><p><strong>Note:</strong> In Firefox prior to version 50, when the debugger is open, scripts are not always loaded in the order given in the array. To work around this bug, you can use the <code>page</code> property and include background scripts from the page using <code>&#x3C;script></code> tags. This bug is fixed in Firefox 50. From that point on, scripts are always loaded in the order given in the array.</p></div></td>"
td (71:4) => tableCell
type: "paragraph"
summary: "Use the background key to include one or more background scripts, and optionally a background page in your extension."
locale: "en-US"
rowIndex: 1
shouldWrap: true
children: 
  type: "text"
  value: "If you need some particular content in the page, you can define your own page using the "
  type: "inlineCode"
  value: "page"
  type: "text"
  value: " property, which is a "
  type: "inlineCode"
  value: "String"
  type: "text"
  value: " representing a path, relative your manifest.json file, to an HTML document included in your extension bundle.",type: "paragraph"
summary: "Use the background key to include one or more background scripts, and optionally a background page in your extension."
locale: "en-US"
rowIndex: 1
shouldWrap: true
children: 
  type: "text"
  value: "If you use this property, you can not specify background scripts using "
  type: "inlineCode"
  value: "scripts"
  type: "text"
  value: ", but you can  include your own scripts from the page, just like in a normal web page."
tr (69:3) => tableRow
type: "html"
value: "<td><p>If you need some particular content in the page, you can define your own page using the <code>page</code> property, which is a <code>String</code> representing a path, relative your manifest.json file, to an HTML document included in your extension bundle.</p><p>If you use this property, you can not specify background scripts using <code>scripts</code>, but you can  include your own scripts from the page, just like in a normal web page.</p></td>"
table.standard-table (47:1) => table
type: "html"
value: "<tr><td><code>scripts</code></td><td><p>An <code>Array</code> of <code>Strings</code>, each of which is a path to a JavaScript source. The path is relative to the manifest.json file itself. These are the scripts which will be executed in the extension's background page.</p><p>The scripts share the same <code>window</code> global context.</p><p>The scripts are loaded in the order they appear in the array.</p><p>If you specify a value for <code>scripts</code>, then an empty page will be created in which your scripts are run.</p><div class=\"note\"><p><strong>Note:</strong> If you want to fetch a script from a remote location with the <code>&#x3C;script></code> tag (e.g. <code>&#x3C;script src = \"https://code.jquery.com/jquery-1.7.1.min.js\"></code>), you will also have to change the <code><a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/content_security_policy\">content_security_policy</a></code> key in the manifest.json file of your extension.</p></div><div class=\"note\"><p><strong>Note:</strong> In Firefox prior to version 50, when the debugger is open, scripts are not always loaded in the order given in the array. To work around this bug, you can use the <code>page</code> property and include background scripts from the page using <code>&#x3C;script></code> tags. This bug is fixed in Firefox 50. From that point on, scripts are always loaded in the order given in the array.</p></div></td></tr>",type: "html"
value: "<tr><td><code>page</code></td><td><p>If you need some particular content in the page, you can define your own page using the <code>page</code> property, which is a <code>String</code> representing a path, relative your manifest.json file, to an HTML document included in your extension bundle.</p><p>If you use this property, you can not specify background scripts using <code>scripts</code>, but you can  include your own scripts from the page, just like in a normal web page.</p></td></tr>"
tr (84:3) => tableRow
type: "html"
value: "<td><code>persistent</code></td>",type: "html"
value: "<td><p>A <code>Boolean</code> value.</p><ul><li><code>true</code> indicates the background page is to be kept in memory from when the extension is loaded or the browser starts until the extension is unloaded or disabled, or the browser is closed (i.e. the background page is persistent).</li><li><code>false</code> indicates the background page may be unloaded from memory when idle and recreated when needed. Such background pages are often called Event Pages, because they are loaded into memory to allow the background page to handle the events to which it has added listeners. Registration of listeners is persistent when the page is unloaded from memory, but other values are not persistent. If you want to store data persistently in an event page, then you should use the <a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage\">storage API</a>.</li></ul></td>"
table.standard-table (82:1) => table
type: "html"
value: "<tr><td><code>persistent</code></td><td><p>A <code>Boolean</code> value.</p><ul><li><code>true</code> indicates the background page is to be kept in memory from when the extension is loaded or the browser starts until the extension is unloaded or disabled, or the browser is closed (i.e. the background page is persistent).</li><li><code>false</code> indicates the background page may be unloaded from memory when idle and recreated when needed. Such background pages are often called Event Pages, because they are loaded into memory to allow the background page to handle the events to which it has added listeners. Registration of listeners is persistent when the page is unloaded from memory, but other values are not persistent. If you want to store data persistently in an event page, then you should use the <a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage\">storage API</a>.</li></ul></td></tr>"

Missing conversion rules

  • table.fullwidth-table.standard-table (15:1)
  • td (50:4)
  • td (51:4)
  • td (85:4)
  • td (86:4)

Missing conversion rules

  • table.fullwidth-table.standard-table (13:1)
  • table.fullwidth-table.standard-table (60:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (14:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (15:1)
  • table.fullwidth-table.standard-table (52:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (13:1)
  • table.fullwidth-table.standard-table (41:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (14:1)
  • kbd (91:51)
  • kbd (91:67)
  • kbd (91:84)
  • kbd (91:111)
  • kbd (91:126)
  • kbd (91:143)
  • kbd (92:53)
  • kbd (92:69)
  • kbd (92:86)

Missing conversion rules

  • table.fullwidth-table.standard-table (13:1)
  • table.fullwidth-table.standard-table (50:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (13:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (13:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (13:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (13:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (17:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (14:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (13:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (13:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (13:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (14:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (13:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (13:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (17:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (13:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (14:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (17:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (18:1)
  • table.fullwidth-table.standard-table (55:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (13:1)
  • table.fullwidth-table.standard-table (57:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (16:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (14:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (13:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (11:1)
  • table.fullwidth-table.standard-table (51:1)

Invalid AST transformations

tr (51:3) => tableRow
type: "html"
value: "<td><code>managed_schema</code></td>",type: "html"
value: "<td><p>A <code>String</code> specifying the full path of the file within the extension that defines the schema of the manage storage.</p></td>"
table.standard-table (49:1) => table
type: "html"
value: "<tr><td><code>managed_schema</code></td><td><p>A <code>String</code> specifying the full path of the file within the extension that defines the schema of the manage storage.</p></td></tr>"

Missing conversion rules

  • table.fullwidth-table.standard-table (15:1)
  • td (52:4)
  • td (53:4)

Missing conversion rules

  • table.fullwidth-table.standard-table (19:1)
  • table.fullwidth-table.standard-table (77:1)
  • table.fullwidth-table.standard-table (130:1)
  • table.fullwidth-table.standard-table (191:1)
  • table.fullwidth-table.standard-table (220:1)
  • table.fullwidth-table.standard-table (1176:1)
  • table.fullwidth-table.standard-table (1205:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (19:1)
  • table.fullwidth-table.standard-table (72:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (15:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (13:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (13:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (13:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (30:1)
  • table.fullwidth-table.standard-table (53:1)
  • table.fullwidth-table.standard-table (102:1)
  • table.fullwidth-table.standard-table (382:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (141:1)
  • kbd (216:33)
  • kbd (216:49)
  • kbd (216:66)
  • kbd (216:83)
  • kbd (216:98)
  • kbd (216:115)

Invalid AST transformations

tr (17:3) => tableRow
type: "html"
value: "<td><a href=\"#native_messaging_manifests\">Native messaging manifests</a></td>",type: "html"
value: "<td>Enable a feature called <a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/Native_messaging\">native messaging</a>, in which an extension can communicate with a native app installed on the device.</td>"
table.standard-table (15:1) => table
type: "html"
value: "<tr><td><a href=\"#native_messaging_manifests\">Native messaging manifests</a></td><td>Enable a feature called <a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/Native_messaging\">native messaging</a>, in which an extension can communicate with a native app installed on the device.</td></tr>"

Missing conversion rules

  • td (18:4)
  • td (19:4)
  • table.fullwidth-table.standard-table (38:1)
  • table.fullwidth-table.standard-table (113:1)
  • table.fullwidth-table.standard-table (174:1)

Missing conversion rules

  • table.fullwidth-table.standard-table (38:1)
  • table.fullwidth-table.standard-table (107:1)

Invalid AST transformations

td (54:4) => tableCell
type: "paragraph"
summary: "Extensions that use WebExtension APIs are provided with several user interface options so that their functionality can be made available to the user. A summary of those options is provided below, with a more detailed introduction to each user interface option in this section."
locale: "en-US"
rowIndex: 6
shouldWrap: true
children: 
  type: "text"
  value: "An HTML document displayed next to a web page, with the option for unique content per page. The sidebar is opened when the extension is installed, then obeys the user's sidebar visibility selection. User interaction within the sidebar is handled by its HTML document."
tr (52:3) => tableRow
type: "html"
value: "<td><p>An HTML document displayed next to a web page, with the option for unique content per page. The sidebar is opened when the extension is installed, then obeys the user's sidebar visibility selection. User interaction within the sidebar is handled by its HTML document.</p></td>"
table.standard-table (18:1) => table
type: "html"
value: "<tr><td><a href=\"/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Sidebars\">Sidebar</a></td><td><p>An HTML document displayed next to a web page, with the option for unique content per page. The sidebar is opened when the extension is installed, then obeys the user's sidebar visibility selection. User interaction within the sidebar is handled by its HTML document.</p></td><td><img alt=\"Example of a sidebar\" src=\"bookmarks-sidebar.png\"></td></tr>"

Missing conversion rules

  • table.fullwidth-table.standard-table (41:1)

Invalid AST transformations

tr (34:3) => tableRow
type: "html"
value: "<td rowspan=\"2\"><p>Host permission string</p></td>",type: "html"
value: "<td colspan=\"2\"><p>Read</p></td>",type: "html"
value: "<td colspan=\"2\"><p>Write/Delete</p></td>"
td (46:4) => tableCell
type: "paragraph"
summary: "With the Cookies API your extensions have access to capabilities similar to those used by websites to store and read cookies. The API’s features give extensions the ability to store information on a site-by-site basis. So, as we shall see in the example, you could store details of a user’s choice of background color for a site. Then, when the user revisits the site, your extension can use the API’s ability to get details about cookies and read them to recover the user’s choice and apply it to the website."
locale: "en-US"
rowIndex: 1
shouldWrap: true
children: 
  type: "text"
  value: "Secure"
td (49:4) => tableCell
type: "paragraph"
summary: "With the Cookies API your extensions have access to capabilities similar to those used by websites to store and read cookies. The API’s features give extensions the ability to store information on a site-by-site basis. So, as we shall see in the example, you could store details of a user’s choice of background color for a site. Then, when the user revisits the site, your extension can use the API’s ability to get details about cookies and read them to recover the user’s choice and apply it to the website."
locale: "en-US"
rowIndex: 1
shouldWrap: true
children: 
  type: "text"
  value: "Non-secure"
td (52:4) => tableCell
type: "paragraph"
summary: "With the Cookies API your extensions have access to capabilities similar to those used by websites to store and read cookies. The API’s features give extensions the ability to store information on a site-by-site basis. So, as we shall see in the example, you could store details of a user’s choice of background color for a site. Then, when the user revisits the site, your extension can use the API’s ability to get details about cookies and read them to recover the user’s choice and apply it to the website."
locale: "en-US"
rowIndex: 1
shouldWrap: true
children: 
  type: "text"
  value: "Secure"
td (55:4) => tableCell
type: "paragraph"
summary: "With the Cookies API your extensions have access to capabilities similar to those used by websites to store and read cookies. The API’s features give extensions the ability to store information on a site-by-site basis. So, as we shall see in the example, you could store details of a user’s choice of background color for a site. Then, when the user revisits the site, your extension can use the API’s ability to get details about cookies and read them to recover the user’s choice and apply it to the website."
locale: "en-US"
rowIndex: 1
shouldWrap: true
children: 
  type: "text"
  value: "Non-secure"
tr (45:3) => tableRow
type: "html"
value: "<td><p>Secure</p></td>",type: "html"
value: "<td><p>Non-secure</p></td>",type: "html"
value: "<td><p>Secure</p></td>",type: "html"
value: "<td><p>Non-secure</p></td>"
td (60:4) => tableCell
type: "paragraph"
summary: "With the Cookies API your extensions have access to capabilities similar to those used by websites to store and read cookies. The API’s features give extensions the ability to store information on a site-by-site basis. So, as we shall see in the example, you could store details of a user’s choice of background color for a site. Then, when the user revisits the site, your extension can use the API’s ability to get details about cookies and read them to recover the user’s choice and apply it to the website."
locale: "en-US"
rowIndex: 2
shouldWrap: true
children: 
  type: "inlineCode"
  value: "\"http://*.example.com/\""
td (63:4) => tableCell
type: "paragraph"
summary: "With the Cookies API your extensions have access to capabilities similar to those used by websites to store and read cookies. The API’s features give extensions the ability to store information on a site-by-site basis. So, as we shall see in the example, you could store details of a user’s choice of background color for a site. Then, when the user revisits the site, your extension can use the API’s ability to get details about cookies and read them to recover the user’s choice and apply it to the website."
locale: "en-US"
rowIndex: 2
shouldWrap: true
children: 
  type: "text"
  value: "No"
td (66:4) => tableCell
type: "paragraph"
summary: "With the Cookies API your extensions have access to capabilities similar to those used by websites to store and read cookies. The API’s features give extensions the ability to store information on a site-by-site basis. So, as we shall see in the example, you could store details of a user’s choice of background color for a site. Then, when the user revisits the site, your extension can use the API’s ability to get details about cookies and read them to recover the user’s choice and apply it to the website."
locale: "en-US"
rowIndex: 2
shouldWrap: true
children: 
  type: "text"
  value: "Main and sub domains, with any path"
td (69:4) => tableCell
type: "paragraph"
summary: "With the Cookies API your extensions have access to capabilities similar to those used by websites to store and read cookies. The API’s features give extensions the ability to store information on a site-by-site basis. So, as we shall see in the example, you could store details of a user’s choice of background color for a site. Then, when the user revisits the site, your extension can use the API’s ability to get details about cookies and read them to recover the user’s choice and apply it to the website."
locale: "en-US"
rowIndex: 2
shouldWrap: true
children: 
  type: "text"
  value: "Main and sub domains, with any path"
td (72:4) => tableCell
type: "paragraph"
summary: "With the Cookies API your extensions have access to capabilities similar to those used by websites to store and read cookies. The API’s features give extensions the ability to store information on a site-by-site basis. So, as we shall see in the example, you could store details of a user’s choice of background color for a site. Then, when the user revisits the site, your extension can use the API’s ability to get details about cookies and read them to recover the user’s choice and apply it to the website."
locale: "en-US"
rowIndex: 2
shouldWrap: true
children: 
  type: "text"
  value: "Main and sub domains, with any path"
tr (59:3) => tableRow
type: "html"
value: "<td><p><code>\"http://*.example.com/\"</code></p></td>",type: "html"
value: "<td><p>No</p></td>",type: "html"
value: "<td><p>Main and sub domains, with any path</p></td>",type: "html"
value: "<td><p>Main and sub domains, with any path</p></td>",type: "html"
value: "<td><p>Main and sub domains, with any path</p></td>"
td (77:4) => tableCell
type: "paragraph"
summary: "With the Cookies API your extensions have access to capabilities similar to those used by websites to store and read cookies. The API’s features give extensions the ability to store information on a site-by-site basis. So, as we shall see in the example, you could store details of a user’s choice of background color for a site. Then, when the user revisits the site, your extension can use the API’s ability to get details about cookies and read them to recover the user’s choice and apply it to the website."
locale: "en-US"
rowIndex: 3
shouldWrap: true
children: 
  type: "inlineCode"
  value: "\"https://www.example.com/\""
td (80:4) => tableCell
type: "paragraph"
summary: "With the Cookies API your extensions have access to capabilities similar to those used by websites to store and read cookies. The API’s features give extensions the ability to store information on a site-by-site basis. So, as we shall see in the example, you could store details of a user’s choice of background color for a site. Then, when the user revisits the site, your extension can use the API’s ability to get details about cookies and read them to recover the user’s choice and apply it to the website."
locale: "en-US"
rowIndex: 3
shouldWrap: true
children: 
  type: "text"
  value: "www.example.com or .example.com with any path, but no subdomains"
td (83:4) => tableCell
type: "paragraph"
summary: "With the Cookies API your extensions have access to capabilities similar to those used by websites to store and read cookies. The API’s features give extensions the ability to store information on a site-by-site basis. So, as we shall see in the example, you could store details of a user’s choice of background color for a site. Then, when the user revisits the site, your extension can use the API’s ability to get details about cookies and read them to recover the user’s choice and apply it to the website."
locale: "en-US"
rowIndex: 3
shouldWrap: true
children: 
  type: "text"
  value: "www.example.com or .example.com with any path, but no subdomains"
td (86:4) => tableCell
type: "paragraph"
summary: "With the Cookies API your extensions have access to capabilities similar to those used by websites to store and read cookies. The API’s features give extensions the ability to store information on a site-by-site basis. So, as we shall see in the example, you could store details of a user’s choice of background color for a site. Then, when the user revisits the site, your extension can use the API’s ability to get details about cookies and read them to recover the user’s choice and apply it to the website."
locale: "en-US"
rowIndex: 3
shouldWrap: true
children: 
  type: "text"
  value: "www.example.com or .example.com with any path, but no subdomains"
td (89:4) => tableCell
type: "paragraph"
summary: "With the Cookies API your extensions have access to capabilities similar to those used by websites to store and read cookies. The API’s features give extensions the ability to store information on a site-by-site basis. So, as we shall see in the example, you could store details of a user’s choice of background color for a site. Then, when the user revisits the site, your extension can use the API’s ability to get details about cookies and read them to recover the user’s choice and apply it to the website."
locale: "en-US"
rowIndex: 3
shouldWrap: true
children: 
  type: "text"
  value: "www.example.com or .example.com with any path, but no subdomains"
tr (76:3) => tableRow
type: "html"
value: "<td><p><code>\"https://www.example.com/\"</code></p></td>",type: "html"
value: "<td><p>www.example.com or .example.com with any path, but no subdomains</p></td>",type: "html"
value: "<td><p>www.example.com or .example.com with any path, but no subdomains</p></td>",type: "html"
value: "<td><p>www.example.com or .example.com with any path, but no subdomains</p></td>",type: "html"
value: "<td><p>www.example.com or .example.com with any path, but no subdomains</p></td>"
td (94:4) => tableCell
type: "paragraph"
summary: "With the Cookies API your extensions have access to capabilities similar to those used by websites to store and read cookies. The API’s features give extensions the ability to store information on a site-by-site basis. So, as we shall see in the example, you could store details of a user’s choice of background color for a site. Then, when the user revisits the site, your extension can use the API’s ability to get details about cookies and read them to recover the user’s choice and apply it to the website."
locale: "en-US"
rowIndex: 4
shouldWrap: true
children: 
  type: "inlineCode"
  value: "\"*://*.example.com/\""
td (97:4) => tableCell
type: "paragraph"
summary: "With the Cookies API your extensions have access to capabilities similar to those used by websites to store and read cookies. The API’s features give extensions the ability to store information on a site-by-site basis. So, as we shall see in the example, you could store details of a user’s choice of background color for a site. Then, when the user revisits the site, your extension can use the API’s ability to get details about cookies and read them to recover the user’s choice and apply it to the website."
locale: "en-US"
rowIndex: 4
shouldWrap: true
children: 
  type: "text"
  value: "Main and sub domains, with any path"
td (100:4) => tableCell
type: "paragraph"
summary: "With the Cookies API your extensions have access to capabilities similar to those used by websites to store and read cookies. The API’s features give extensions the ability to store information on a site-by-site basis. So, as we shall see in the example, you could store details of a user’s choice of background color for a site. Then, when the user revisits the site, your extension can use the API’s ability to get details about cookies and read them to recover the user’s choice and apply it to the website."
locale: "en-US"
rowIndex: 4
shouldWrap: true
children: 
  type: "text"
  value: "Main and sub domains, with any path"
td (103:4) => tableCell
type: "paragraph"
summary: "With the Cookies API your extensions have access to capabilities similar to those used by websites to store and read cookies. The API’s features give extensions the ability to store information on a site-by-site basis. So, as we shall see in the example, you could store details of a user’s choice of background color for a site. Then, when the user revisits the site, your extension can use the API’s ability to get details about cookies and read them to recover the user’s choice and apply it to the website."
locale: "en-US"
rowIndex: 4
shouldWrap: true
children: 
  type: "text"
  value: "Main and sub domains, with any path"
td (106:4) => tableCell
type: "paragraph"
summary: "With the Cookies API your extensions have access to capabilities similar to those used by websites to store and read cookies. The API’s features give extensions the ability to store information on a site-by-site basis. So, as we shall see in the example, you could store details of a user’s choice of background color for a site. Then, when the user revisits the site, your extension can use the API’s ability to get details about cookies and read them to recover the user’s choice and apply it to the website."
locale: "en-US"
rowIndex: 4
shouldWrap: true
children: 
  type: "text"
  value: "Main and sub domains, with any path"
tr (93:3) => tableRow
type: "html"
value: "<td><p><code>\"*://*.example.com/\"</code></p></td>",type: "html"
value: "<td><p>Main and sub domains, with any path</p></td>",type: "html"
value: "<td><p>Main and sub domains, with any path</p></td>",type: "html"
value: "<td><p>Main and sub domains, with any path</p></td>",type: "html"
value: "<td><p>Main and sub domains, with any path</p></td>"
td (111:4) => tableCell
type: "paragraph"
summary: "With the Cookies API your extensions have access to capabilities similar to those used by websites to store and read cookies. The API’s features give extensions the ability to store information on a site-by-site basis. So, as we shall see in the example, you could store details of a user’s choice of background color for a site. Then, when the user revisits the site, your extension can use the API’s ability to get details about cookies and read them to recover the user’s choice and apply it to the website."
locale: "en-US"
rowIndex: 5
shouldWrap: true
children: 
  type: "inlineCode"
  value: "\"<all_urls>\""
td (114:4) => tableCell
type: "paragraph"
summary: "With the Cookies API your extensions have access to capabilities similar to those used by websites to store and read cookies. The API’s features give extensions the ability to store information on a site-by-site basis. So, as we shall see in the example, you could store details of a user’s choice of background color for a site. Then, when the user revisits the site, your extension can use the API’s ability to get details about cookies and read them to recover the user’s choice and apply it to the website."
locale: "en-US"
rowIndex: 5
shouldWrap: true
children: 
  type: "text"
  value: "Any domain with any path"
td (117:4) => tableCell
type: "paragraph"
summary: "With the Cookies API your extensions have access to capabilities similar to those used by websites to store and read cookies. The API’s features give extensions the ability to store information on a site-by-site basis. So, as we shall see in the example, you could store details of a user’s choice of background color for a site. Then, when the user revisits the site, your extension can use the API’s ability to get details about cookies and read them to recover the user’s choice and apply it to the website."
locale: "en-US"
rowIndex: 5
shouldWrap: true
children: 
  type: "text"
  value: "Any domain with any path"
td (120:4) => tableCell
type: "paragraph"
summary: "With the Cookies API your extensions have access to capabilities similar to those used by websites to store and read cookies. The API’s features give extensions the ability to store information on a site-by-site basis. So, as we shall see in the example, you could store details of a user’s choice of background color for a site. Then, when the user revisits the site, your extension can use the API’s ability to get details about cookies and read them to recover the user’s choice and apply it to the website."
locale: "en-US"
rowIndex: 5
shouldWrap: true
children: 
  type: "text"
  value: "Any domain with any path"
td (123:4) => tableCell
type: "paragraph"
summary: "With the Cookies API your extensions have access to capabilities similar to those used by websites to store and read cookies. The API’s features give extensions the ability to store information on a site-by-site basis. So, as we shall see in the example, you could store details of a user’s choice of background color for a site. Then, when the user revisits the site, your extension can use the API’s ability to get details about cookies and read them to recover the user’s choice and apply it to the website."
locale: "en-US"
rowIndex: 5
shouldWrap: true
children: 
  type: "text"
  value: "Any domain with any path"
tr (110:3) => tableRow
type: "html"
value: "<td><p><code>\"&#x3C;all_urls>\"</code></p></td>",type: "html"
value: "<td><p>Any domain with any path</p></td>",type: "html"
value: "<td><p>Any domain with any path</p></td>",type: "html"
value: "<td><p>Any domain with any path</p></td>",type: "html"
value: "<td><p>Any domain with any path</p></td>"
table (25:1) => table
type: "html"
value: "<tr><td rowspan=\"2\"><p>Host permission string</p></td><td colspan=\"2\"><p>Read</p></td><td colspan=\"2\"><p>Write/Delete</p></td></tr>",type: "html"
value: "<tr><td><p>Secure</p></td><td><p>Non-secure</p></td><td><p>Secure</p></td><td><p>Non-secure</p></td></tr>",type: "html"
value: "<tr><td><p><code>\"http://*.example.com/\"</code></p></td><td><p>No</p></td><td><p>Main and sub domains, with any path</p></td><td><p>Main and sub domains, with any path</p></td><td><p>Main and sub domains, with any path</p></td></tr>",type: "html"
value: "<tr><td><p><code>\"https://www.example.com/\"</code></p></td><td><p>www.example.com or .example.com with any path, but no subdomains</p></td><td><p>www.example.com or .example.com with any path, but no subdomains</p></td><td><p>www.example.com or .example.com with any path, but no subdomains</p></td><td><p>www.example.com or .example.com with any path, but no subdomains</p></td></tr>",type: "html"
value: "<tr><td><p><code>\"*://*.example.com/\"</code></p></td><td><p>Main and sub domains, with any path</p></td><td><p>Main and sub domains, with any path</p></td><td><p>Main and sub domains, with any path</p></td><td><p>Main and sub domains, with any path</p></td></tr>",type: "html"
value: "<tr><td><p><code>\"&#x3C;all_urls>\"</code></p></td><td><p>Any domain with any path</p></td><td><p>Any domain with any path</p></td><td><p>Any domain with any path</p></td><td><p>Any domain with any path</p></td></tr>"

Missing conversion rules

  • td[rowSpan="2"] (35:4)
  • td[colSpan="2"] (38:4)
  • td[colSpan="2"] (41:4)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment