diff --git a/CHANGELOG.md b/CHANGELOG.md
index 61b9a6fe3..4d0b9daa0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,10 @@
## [Unreleased]
- The settings-view package now lists a package’s snippets more accurately
+- Fixed some issues with some packages with WebComponents v0 (tablr package
+should work now) by internalizing and patching document-register-element
+- Migrated away from `node-oniguruma` in favor of `vscode-oniguruma` (WASM
+version). This fixes issues with Electron 21
## 1.103.0
diff --git a/crowdin.yml b/crowdin.yml
new file mode 100644
index 000000000..32614a491
--- /dev/null
+++ b/crowdin.yml
@@ -0,0 +1,9 @@
+preserve_hierarchy: true
+commit_message: "[skip ci] Translations from Crowdin"
+append_commit_message: false
+
+files:
+- source: /i18n/en.json
+ translation: /i18n/%locale%.json
+- source: /packages/**/i18n/en.json
+ translation: /packages/**/i18n/%locale%.json
diff --git a/docs/Pulsar-API-Documentation.md b/docs/Pulsar-API-Documentation.md
index 6e7dada39..cedb848c3 100644
--- a/docs/Pulsar-API-Documentation.md
+++ b/docs/Pulsar-API-Documentation.md
@@ -98,6 +98,60 @@
"warnings": []
}
+chromiumElementsShim
+This file will manage the updating of autocomplete-html
completions.json
+ We will partially utilize @webref/elements
.listAll()
function that returns
+ a full list of HTML Elements along with a defined interface
.
+ To use this interface
in any meaningful way, we will utilize the dataset
+ of Attributes that apply to each interface
from Chromiums DevTools resource
+ https://github.com/ChromeDevTools/devtools-frontend
.
+ Finally from here we will utilize https://github.com/mdn/content
to parse
+ the Markdown docs of MDN's website to retreive descriptions for each element.
+ Now for a summary of our completions.json
file we aim to generate.
+ There are two top level elements, tags
and attributes
, both objects.
+ Within tags
we expect the following:
+ "tags": {
+ "a": {
+ "attributes": [ "href", "hreflang", "media", "rel", "target", "type" ],
+ "description": "....."
+ }
+ };
+ When an entry contains no attributes
there is no empty array, the element
+ simply doesn't exist.
+ The attributes
object contains keys of different elements that themselves
+ are objects that can contain several valid keys.
+
+global: Seems to be used exclusively for Global Attributes. Is a boolean
+ which when false, the key does not appear.
+type: A ?type? for the attribute. It's meaning is not immediately known.
+ Nor a way to reliabley programatically collect it. Some discovered values:
+
+cssStyle: Exclusively used for class
attribute
+boolean: Attributes that only accept true
or false
+flag: For attributes that don't require or accept values. eg autoplay
+cssId: Exclusively used for the id
attribute
+color: Exclusively used for the bgcolor
attribute
+style: Exclusively used for the style
attribute
+
+description: A text description of the attribute
+attribOption: A string array of valid values that can exist within the attribute.
+ Such as the case with rel
where only so many valid options exist.
+
+ Although with our data sources mentioned above, we are able to collect nearly
+ all the data needed. Except the type
that is defined within our
+ completions.json
as well as the attribOption
within our completions.
+ Studying these closer reveals that all attributes listing with our completions.json
+ do not appear elsewhere, and are nearly all global attributes.
+ In this case since there is no sane way to collect this data, we will leave this
+ list as a manually maintained section of our completions.json
.
+ This does mean that curated-attributes.json
is a static document that
+ will require manual updating in the future. Or most ideally, will find a way
+ to automatically generate the needed data.
+
+update
+This file aims to run some short simple tests against update.js
. Focusing
+ mainly on the Regex used within sanitizeDescription()
+
fs
dalek
@@ -376,6 +430,68 @@ This file will manage the updating of `autocomplete-css` `completions.json`.
"warnings": []
}
+**Kind**: global constant
+
+
+## chromiumElementsShim
+This file will manage the updating of `autocomplete-html` `completions.json`
+ We will partially utilize `@webref/elements` `.listAll()` function that returns
+ a full list of HTML Elements along with a defined `interface`.
+ To use this `interface` in any meaningful way, we will utilize the dataset
+ of Attributes that apply to each `interface` from Chromiums DevTools resource
+ `https://github.com/ChromeDevTools/devtools-frontend`.
+ Finally from here we will utilize `https://github.com/mdn/content` to parse
+ the Markdown docs of MDN's website to retreive descriptions for each element.
+
+ Now for a summary of our `completions.json` file we aim to generate.
+ There are two top level elements, `tags` and `attributes`, both objects.
+ Within `tags` we expect the following:
+ "tags": {
+ "a": {
+ "attributes": [ "href", "hreflang", "media", "rel", "target", "type" ],
+ "description": "....."
+ }
+ };
+
+ When an entry contains no `attributes` there is no empty array, the element
+ simply doesn't exist.
+
+ The `attributes` object contains keys of different elements that themselves
+ are objects that can contain several valid keys.
+ - global: Seems to be used exclusively for Global Attributes. Is a boolean
+ which when false, the key does not appear.
+ - type: A ?type? for the attribute. It's meaning is not immediately known.
+ Nor a way to reliabley programatically collect it. Some discovered values:
+cssStyle: Exclusively used for `class` attribute
+boolean: Attributes that only accept `true` or `false`
+flag: For attributes that don't require or accept values. eg autoplay
+cssId: Exclusively used for the `id` attribute
+color: Exclusively used for the `bgcolor` attribute
+style: Exclusively used for the `style` attribute
+ - description: A text description of the attribute
+ - attribOption: A string array of valid values that can exist within the attribute.
+ Such as the case with `rel` where only so many valid options exist.
+
+ Although with our data sources mentioned above, we are able to collect nearly
+ all the data needed. Except the `type` that is defined within our
+ `completions.json` as well as the `attribOption` within our completions.
+
+ Studying these closer reveals that all attributes listing with our `completions.json`
+ do not appear elsewhere, and are nearly all global attributes.
+
+ In this case since there is no sane way to collect this data, we will leave this
+ list as a manually maintained section of our `completions.json`.
+ This does mean that `curated-attributes.json` is a static document that
+ will require manual updating in the future. Or most ideally, will find a way
+ to automatically generate the needed data.
+
+**Kind**: global constant
+
+
+## update
+This file aims to run some short simple tests against `update.js`. Focusing
+ mainly on the Regex used within `sanitizeDescription()`
+
**Kind**: global constant
diff --git a/docs/Source-Code-Documentation.md b/docs/Source-Code-Documentation.md
index d612619fe..112d83003 100644
--- a/docs/Source-Code-Documentation.md
+++ b/docs/Source-Code-Documentation.md
@@ -98,6 +98,60 @@
"warnings": []
}
+chromiumElementsShim
+This file will manage the updating of autocomplete-html
completions.json
+ We will partially utilize @webref/elements
.listAll()
function that returns
+ a full list of HTML Elements along with a defined interface
.
+ To use this interface
in any meaningful way, we will utilize the dataset
+ of Attributes that apply to each interface
from Chromiums DevTools resource
+ https://github.com/ChromeDevTools/devtools-frontend
.
+ Finally from here we will utilize https://github.com/mdn/content
to parse
+ the Markdown docs of MDN's website to retreive descriptions for each element.
+ Now for a summary of our completions.json
file we aim to generate.
+ There are two top level elements, tags
and attributes
, both objects.
+ Within tags
we expect the following:
+ "tags": {
+ "a": {
+ "attributes": [ "href", "hreflang", "media", "rel", "target", "type" ],
+ "description": "....."
+ }
+ };
+ When an entry contains no attributes
there is no empty array, the element
+ simply doesn't exist.
+ The attributes
object contains keys of different elements that themselves
+ are objects that can contain several valid keys.
+
+global: Seems to be used exclusively for Global Attributes. Is a boolean
+ which when false, the key does not appear.
+type: A ?type? for the attribute. It's meaning is not immediately known.
+ Nor a way to reliabley programatically collect it. Some discovered values:
+
+cssStyle: Exclusively used for class
attribute
+boolean: Attributes that only accept true
or false
+flag: For attributes that don't require or accept values. eg autoplay
+cssId: Exclusively used for the id
attribute
+color: Exclusively used for the bgcolor
attribute
+style: Exclusively used for the style
attribute
+
+description: A text description of the attribute
+attribOption: A string array of valid values that can exist within the attribute.
+ Such as the case with rel
where only so many valid options exist.
+
+ Although with our data sources mentioned above, we are able to collect nearly
+ all the data needed. Except the type
that is defined within our
+ completions.json
as well as the attribOption
within our completions.
+ Studying these closer reveals that all attributes listing with our completions.json
+ do not appear elsewhere, and are nearly all global attributes.
+ In this case since there is no sane way to collect this data, we will leave this
+ list as a manually maintained section of our completions.json
.
+ This does mean that curated-attributes.json
is a static document that
+ will require manual updating in the future. Or most ideally, will find a way
+ to automatically generate the needed data.
+
+update
+This file aims to run some short simple tests against update.js
. Focusing
+ mainly on the Regex used within sanitizeDescription()
+
fs
dalek
@@ -384,6 +438,68 @@ This file will manage the updating of `autocomplete-css` `completions.json`.
"warnings": []
}
+**Kind**: global constant
+
+
+## chromiumElementsShim
+This file will manage the updating of `autocomplete-html` `completions.json`
+ We will partially utilize `@webref/elements` `.listAll()` function that returns
+ a full list of HTML Elements along with a defined `interface`.
+ To use this `interface` in any meaningful way, we will utilize the dataset
+ of Attributes that apply to each `interface` from Chromiums DevTools resource
+ `https://github.com/ChromeDevTools/devtools-frontend`.
+ Finally from here we will utilize `https://github.com/mdn/content` to parse
+ the Markdown docs of MDN's website to retreive descriptions for each element.
+
+ Now for a summary of our `completions.json` file we aim to generate.
+ There are two top level elements, `tags` and `attributes`, both objects.
+ Within `tags` we expect the following:
+ "tags": {
+ "a": {
+ "attributes": [ "href", "hreflang", "media", "rel", "target", "type" ],
+ "description": "....."
+ }
+ };
+
+ When an entry contains no `attributes` there is no empty array, the element
+ simply doesn't exist.
+
+ The `attributes` object contains keys of different elements that themselves
+ are objects that can contain several valid keys.
+ - global: Seems to be used exclusively for Global Attributes. Is a boolean
+ which when false, the key does not appear.
+ - type: A ?type? for the attribute. It's meaning is not immediately known.
+ Nor a way to reliabley programatically collect it. Some discovered values:
+cssStyle: Exclusively used for `class` attribute
+boolean: Attributes that only accept `true` or `false`
+flag: For attributes that don't require or accept values. eg autoplay
+cssId: Exclusively used for the `id` attribute
+color: Exclusively used for the `bgcolor` attribute
+style: Exclusively used for the `style` attribute
+ - description: A text description of the attribute
+ - attribOption: A string array of valid values that can exist within the attribute.
+ Such as the case with `rel` where only so many valid options exist.
+
+ Although with our data sources mentioned above, we are able to collect nearly
+ all the data needed. Except the `type` that is defined within our
+ `completions.json` as well as the `attribOption` within our completions.
+
+ Studying these closer reveals that all attributes listing with our `completions.json`
+ do not appear elsewhere, and are nearly all global attributes.
+
+ In this case since there is no sane way to collect this data, we will leave this
+ list as a manually maintained section of our `completions.json`.
+ This does mean that `curated-attributes.json` is a static document that
+ will require manual updating in the future. Or most ideally, will find a way
+ to automatically generate the needed data.
+
+**Kind**: global constant
+
+
+## update
+This file aims to run some short simple tests against `update.js`. Focusing
+ mainly on the Regex used within `sanitizeDescription()`
+
**Kind**: global constant
diff --git a/i18n/en.json b/i18n/en.json
new file mode 100644
index 000000000..b00e13704
--- /dev/null
+++ b/i18n/en.json
@@ -0,0 +1,169 @@
+{
+ "menu": {
+ "pulsar": {
+ "about": "About Pulsar",
+ "view-license": "View License",
+ "version": "Version VERSION",
+ "restart-and-install-update": "Restart and Install Update",
+ "check-for-update": "Check for Update",
+ "checking-for-update": "Checking for Update",
+ "downloading-update": "Downloading Update",
+ "preferences": "Preferences",
+ "config": "Config",
+ "init-script": "Init Script",
+ "keymap": "Keymap",
+ "snippets": "Snippets",
+ "stylesheet": "Stylesheet",
+ "install-shell-commands": "Install Shell Commands",
+ "quit": "Quit Pulsar"
+ },
+ "macos": {
+ "services": "Services",
+ "hide-self": "Hide Pulsar",
+ "hide-others": "Hide Others",
+ "show-all": "Show All"
+ },
+ "file": {
+ "self": "File",
+ "new-window": "New Window",
+ "new-file": "New File",
+ "open": "Open...",
+ "open-file": "Open File...",
+ "open-folder": "Open Folder...",
+ "add-project-folder": "Add Project Folder",
+ "project-history": {
+ "reopen-project": "Reopen Project",
+ "clear": "Clear Project History"
+ },
+ "reopen-last-item": "Reopen Last Item",
+ "save": "Save",
+ "save-as": "Save As...",
+ "save-all": "Save All",
+ "close-tab": "Close Tab",
+ "close-pane": "Close Pane",
+ "close-window": "Close Window"
+ },
+ "edit": {
+ "self": "Edit",
+ "undo": "Undo",
+ "redo": "Redo",
+ "cut": "Cut",
+ "copy": "Copy",
+ "copy-path": "Copy Path",
+ "paste": "Paste",
+ "paste-without-reformatting": "Paste Without Reformatting",
+ "select-all": "Select All",
+ "toggle-comments": "Toggle Comments",
+ "lines": {
+ "self": "Lines",
+ "indent": "Indent",
+ "outdent": "Outdent",
+ "auto-indent": "Auto Indent",
+ "move-up": "Move Line Up",
+ "move-down": "Move Line Down",
+ "duplicate": "Duplicate Lines",
+ "delete": "Delete Line",
+ "join": "Join Lines"
+ },
+ "columns": {
+ "self": "Columns",
+ "move-selection-left": "Move Selection Left",
+ "move-selection-right": "Move Selection Right"
+ },
+ "text": {
+ "self": "Text",
+ "upper-case": "Upper Case",
+ "lower-case": "Lower Case",
+ "delete-to-end-of-word": "Delete to End of Word",
+ "delete-to-previous-word-boundary": "Delete to Previous Word Boundary",
+ "delete-to-next-word-boundary": "Delete to Next Word Boundary",
+ "delete-line": "Delete Line",
+ "transpose": "Transpose"
+ },
+ "folding": {
+ "self": "Folding",
+ "fold": "Fold",
+ "unfold": "Unfold",
+ "fold-all": "Fold All",
+ "unfold-all": "Unfold All",
+ "fold-level-1": "Fold Level 1",
+ "fold-level-2": "Fold Level 2",
+ "fold-level-3": "Fold Level 3",
+ "fold-level-4": "Fold Level 4",
+ "fold-level-5": "Fold Level 5",
+ "fold-level-6": "Fold Level 6",
+ "fold-level-7": "Fold Level 7",
+ "fold-level-8": "Fold Level 8",
+ "fold-level-9": "Fold Level 9"
+ }
+ },
+ "view": {
+ "self": "View",
+ "toggle-full-screen": "Toggle Full Screen",
+ "toggle-menu-bar": "Toggle Menu Bar",
+ "panes": {
+ "self": "Panes",
+ "split-up": "Split Up",
+ "split-down": "Split Down",
+ "split-left": "Split Left",
+ "split-right": "Split Right",
+ "focus-next": "Focus Next Pane",
+ "focus-previous": "Focus Previous Pane",
+ "focus-above": "Focus Pane Above",
+ "focus-below": "Focus Pane Below",
+ "focus-on-left": "Focus Pane On Left",
+ "focus-on-right": "Focus Pane On Right",
+ "close": "Close Pane"
+ },
+ "developer": {
+ "self": "Developer",
+ "open-in-dev-mode": "Open In Dev Mode",
+ "reload-window": "Reload Window",
+ "run-package-specs": "Run Package Specs",
+ "toggle-dev-tools": "Toggle Developer Tools"
+ },
+ "increase-font-size": "Increase Font Size",
+ "decrease-font-size": "Decrease Font Size",
+ "reset-font-size": "Reset Font Size",
+ "toggle-soft-wrap": "Toggle Soft Wrap"
+ },
+ "selection": {
+ "self": "Selection",
+ "add-above": "Add Selection Above",
+ "add-below": "Add Selection Below",
+ "single": "Single Selection",
+ "split-into-lines": "Split into Lines",
+ "to-top": "Select to Top",
+ "to-bottom": "Select to Bottom",
+ "line": "Select Line",
+ "word": "Select Word",
+ "to-beginning-of-word": "Select to Beginning of Word",
+ "to-beginning-of-line": "Select to Beginning of Line",
+ "to-first-char-of-line": "Select to First Character of Line",
+ "to-end-of-word": "Select to End of Word",
+ "to-end-of-line": "Select to End of Line"
+ },
+ "find": {
+ "self": "Find"
+ },
+ "packages": {
+ "self": "Packages",
+ "open-package-manager": "Open Package Manager"
+ },
+ "window": {
+ "self": "Window",
+ "minimise": "Minimise",
+ "zoom": "Zoom",
+ "bring-all-to-front": "Bring All to Front"
+ },
+ "help": {
+ "self": "Help",
+ "terms-of-use": "Terms of Use",
+ "docs": "Documentation",
+ "faq": "Frequently Asked Questions",
+ "community-discussions": "Community Discussions",
+ "report-issue": "Report Issue",
+ "search-issues": "Search Issues"
+ }
+ }
+}
diff --git a/menus/darwin.cson b/menus/darwin.cson
index b65f67708..d229ad190 100644
--- a/menus/darwin.cson
+++ b/menus/darwin.cson
@@ -2,227 +2,227 @@
{
label: 'Pulsar'
submenu: [
- { label: 'About Pulsar', command: 'application:about' }
- { label: 'View License', command: 'application:open-license' }
- { label: 'VERSION', enabled: false }
- { label: 'Restart and Install Update', command: 'application:install-update', visible: false}
- { label: 'Check for Update', command: 'application:check-for-update', visible: false}
- { label: 'Checking for Update', enabled: false, visible: false}
- { label: 'Downloading Update', enabled: false, visible: false}
+ { localisedLabel: 'core.menu.pulsar.about', command: 'application:about' }
+ { localisedLabel: 'core.menu.pulsar.view-license', command: 'application:open-license' }
+ { localisedLabel: 'core.menu.pulsar.version', enabled: false }
+ { localisedLabel: 'core.menu.pulsar.restart-and-install-update', command: 'application:install-update', visible: false }
+ { localisedLabel: 'core.menu.pulsar.check-for-update', command: 'application:check-for-update', visible: false }
+ { localisedLabel: 'core.menu.pulsar.checking-for-update', enabled: false, visible: false }
+ { localisedLabel: 'core.menu.pulsar.downloading-update', enabled: false, visible: false }
{ type: 'separator' }
- { label: 'Preferences…', command: 'application:show-settings' }
+ { localisedLabel: 'core.menu.pulsar.preferences', command: 'application:show-settings' }
{ type: 'separator' }
- { label: 'Config…', command: 'application:open-your-config' }
- { label: 'Init Script…', command: 'application:open-your-init-script' }
- { label: 'Keymap…', command: 'application:open-your-keymap' }
- { label: 'Snippets…', command: 'application:open-your-snippets' }
- { label: 'Stylesheet…', command: 'application:open-your-stylesheet' }
+ { localisedLabel: 'core.menu.pulsar.config', command: 'application:open-your-config' }
+ { localisedLabel: 'core.menu.pulsar.init-script', command: 'application:open-your-init-script' }
+ { localisedLabel: 'core.menu.pulsar.keymap', command: 'application:open-your-keymap' }
+ { localisedLabel: 'core.menu.pulsar.snippets', command: 'application:open-your-snippets' }
+ { localisedLabel: 'core.menu.pulsar.stylesheet', command: 'application:open-your-stylesheet' }
{ type: 'separator' }
- { label: 'Install Shell Commands', command: 'window:install-shell-commands' }
+ { localisedLabel: 'core.menu.pulsar.install-shell-commands', command: 'window:install-shell-commands' }
{ type: 'separator' }
- { label: 'Services', role: 'services', submenu: [] }
+ { localisedLabel: 'core.menu.macos.services', role: 'services', submenu: [] }
{ type: 'separator' }
- { label: 'Hide Pulsar', command: 'application:hide' }
- { label: 'Hide Others', command: 'application:hide-other-applications' }
- { label: 'Show All', command: 'application:unhide-all-applications' }
+ { localisedLabel: 'core.menu.macos.hide-self', command: 'application:hide' }
+ { localisedLabel: 'core.menu.macos.hide-others', command: 'application:hide-other-applications' }
+ { localisedLabel: 'core.menu.macos.show-all', command: 'application:unhide-all-applications' }
{ type: 'separator' }
- { label: 'Quit Pulsar', command: 'application:quit' }
+ { localisedLabel: 'core.menu.pulsar.quit', command: 'application:quit' }
]
}
{
- label: 'File'
+ localisedLabel: 'core.menu.file.self'
submenu: [
- { label: 'New Window', command: 'application:new-window' }
- { label: 'New File', command: 'application:new-file' }
- { label: 'Open…', command: 'application:open' }
- { label: 'Add Project Folder…', command: 'application:add-project-folder' }
+ { localisedLabel: 'core.menu.file.new-window', command: 'application:new-window' }
+ { localisedLabel: 'core.menu.file.new-file', command: 'application:new-file' }
+ { localisedLabel: 'core.menu.file.open', command: 'application:open' }
+ { localisedLabel: 'core.menu.file.add-project-folder', command: 'application:add-project-folder' }
{
- label: 'Reopen Project',
+ localisedLabel: 'core.menu.file.project-history.reopen-project'
submenu: [
- { label: 'Clear Project History', command: 'application:clear-project-history' }
+ { localisedLabel: 'core.menu.file.project-history.clear', command: 'application:clear-project-history' }
{ type: 'separator' }
]
}
- { label: 'Reopen Last Item', command: 'pane:reopen-closed-item' }
+ { localisedLabel: 'core.menu.file.reopen-last-item', command: 'pane:reopen-closed-item' }
{ type: 'separator' }
- { label: 'Save', command: 'core:save' }
- { label: 'Save As…', command: 'core:save-as' }
- { label: 'Save All', command: 'window:save-all' }
+ { localisedLabel: 'core.menu.file.save', command: 'core:save' }
+ { localisedLabel: 'core.menu.file.save-as', command: 'core:save-as' }
+ { localisedLabel: 'core.menu.file.save-all', command: 'window:save-all' }
{ type: 'separator' }
- { label: 'Close Tab', command: 'core:close' }
- { label: 'Close Pane', command: 'pane:close' }
- { label: 'Close Window', command: 'window:close' }
+ { localisedLabel: 'core.menu.file.close-tab', command: 'core:close' }
+ { localisedLabel: 'core.menu.file.close-pane', command: 'pane:close' }
+ { localisedLabel: 'core.menu.file.close-window', command: 'window:close' }
]
}
{
- label: 'Edit'
+ localisedLabel: 'core.menu.edit.self'
submenu: [
- { label: 'Undo', command: 'core:undo' }
- { label: 'Redo', command: 'core:redo' }
+ { localisedLabel: 'core.menu.edit.undo', command: 'core:undo' }
+ { localisedLabel: 'core.menu.edit.redo', command: 'core:redo' }
{ type: 'separator' }
- { label: 'Cut', command: 'core:cut' }
- { label: 'Copy', command: 'core:copy' }
- { label: 'Copy Path', command: 'editor:copy-path' }
- { label: 'Paste', command: 'core:paste' }
- { label: 'Paste Without Reformatting', command: 'editor:paste-without-reformatting' }
- { label: 'Select All', command: 'core:select-all' }
+ { localisedLabel: 'core.menu.edit.cut', command: 'core:cut' }
+ { localisedLabel: 'core.menu.edit.copy', command: 'core:copy' }
+ { localisedLabel: 'core.menu.edit.copy-path', command: 'editor:copy-path' }
+ { localisedLabel: 'core.menu.edit.paste', command: 'core:paste' }
+ { localisedLabel: 'core.menu.edit.paste-without-reformatting', command: 'editor:paste-without-reformatting' }
+ { localisedLabel: 'core.menu.edit.select-all', command: 'core:select-all' }
{ type: 'separator' }
- { label: 'Toggle Comments', command: 'editor:toggle-line-comments' }
+ { localisedLabel: 'core.menu.edit.toggle-comments', command: 'editor:toggle-line-comments' }
{
- label: 'Lines',
+ localisedLabel: 'core.menu.edit.lines.self',
submenu: [
- { label: 'Indent', command: 'editor:indent-selected-rows' }
- { label: 'Outdent', command: 'editor:outdent-selected-rows' }
- { label: 'Auto Indent', command: 'editor:auto-indent' }
+ { localisedLabel: 'core.menu.edit.lines.indent', command: 'editor:indent-selected-rows' }
+ { localisedLabel: 'core.menu.edit.lines.outdent', command: 'editor:outdent-selected-rows' }
+ { localisedLabel: 'core.menu.edit.lines.auto-indent', command: 'editor:auto-indent' }
{ type: 'separator' }
- { label: 'Move Line Up', command: 'editor:move-line-up' }
- { label: 'Move Line Down', command: 'editor:move-line-down' }
- { label: 'Duplicate Lines', command: 'editor:duplicate-lines' }
- { label: 'Delete Line', command: 'editor:delete-line' }
- { label: 'Join Lines', command: 'editor:join-lines' }
+ { localisedLabel: 'core.menu.edit.lines.move-up', command: 'editor:move-line-up' }
+ { localisedLabel: 'core.menu.edit.lines.move-down', command: 'editor:move-line-down' }
+ { localisedLabel: 'core.menu.edit.lines.duplicate', command: 'editor:duplicate-lines' }
+ { localisedLabel: 'core.menu.edit.lines.delete', command: 'editor:delete-line' }
+ { localisedLabel: 'core.menu.edit.lines.join', command: 'editor:join-lines' }
]
}
{
- label: 'Columns',
+ localisedLabel: 'core.menu.edit.columns.self'
submenu: [
- { label: 'Move Selection Left', command: 'editor:move-selection-left' }
- { label: 'Move Selection Right', command: 'editor:move-selection-right' }
+ { localisedLabel: 'core.menu.edit.columns.move-selection-left', command: 'editor:move-selection-left' }
+ { localisedLabel: 'core.menu.edit.columns.move-selection-right', command: 'editor:move-selection-right' }
]
}
{
- label: 'Text',
+ localisedLabel: 'core.menu.edit.text.self'
submenu: [
- { label: 'Upper Case', command: 'editor:upper-case' }
- { label: 'Lower Case', command: 'editor:lower-case' }
+ { localisedLabel: 'core.menu.edit.text.upper-case', command: 'editor:upper-case' }
+ { localisedLabel: 'core.menu.edit.text.lower-case', command: 'editor:lower-case' }
{ type: 'separator' }
- { label: 'Delete to End of Word', command: 'editor:delete-to-end-of-word' }
- { label: 'Delete to Previous Word Boundary', command: 'editor:delete-to-previous-word-boundary' }
- { label: 'Delete to Next Word Boundary', command: 'editor:delete-to-next-word-boundary' }
- { label: 'Delete Line', command: 'editor:delete-line' }
+ { localisedLabel: 'core.menu.edit.text.delete-to-end-of-word', command: 'editor:delete-to-end-of-word' }
+ { localisedLabel: 'core.menu.edit.text.delete-to-previous-word-boundary', command: 'editor:delete-to-previous-word-boundary' }
+ { localisedLabel: 'core.menu.edit.text.delete-to-next-word-boundary', command: 'editor:delete-to-next-word-boundary' }
+ { localisedLabel: 'core.menu.edit.text.delete-line', command: 'editor:delete-line' }
{ type: 'separator' }
- { label: 'Transpose', command: 'editor:transpose' }
+ { localisedLabel: 'core.menu.edit.text.transpose', command: 'editor:transpose' }
]
}
{
- label: 'Folding',
+ localisedLabel: 'core.menu.edit.folding.self'
submenu: [
- { label: 'Fold', command: 'editor:fold-current-row' }
- { label: 'Unfold', command: 'editor:unfold-current-row' }
- { label: 'Fold All', command: 'editor:fold-all' }
- { label: 'Unfold All', command: 'editor:unfold-all' }
+ { localisedLabel: 'core.menu.edit.folding.fold', command: 'editor:fold-current-row' }
+ { localisedLabel: 'core.menu.edit.folding.unfold', command: 'editor:unfold-current-row' }
+ { localisedLabel: 'core.menu.edit.folding.fold-all', command: 'editor:fold-all' }
+ { localisedLabel: 'core.menu.edit.folding.unfold-all', command: 'editor:unfold-all' }
{ type: 'separator' }
- { label: 'Fold Level 1', command: 'editor:fold-at-indent-level-1' }
- { label: 'Fold Level 2', command: 'editor:fold-at-indent-level-2' }
- { label: 'Fold Level 3', command: 'editor:fold-at-indent-level-3' }
- { label: 'Fold Level 4', command: 'editor:fold-at-indent-level-4' }
- { label: 'Fold Level 5', command: 'editor:fold-at-indent-level-5' }
- { label: 'Fold Level 6', command: 'editor:fold-at-indent-level-6' }
- { label: 'Fold Level 7', command: 'editor:fold-at-indent-level-7' }
- { label: 'Fold Level 8', command: 'editor:fold-at-indent-level-8' }
- { label: 'Fold Level 9', command: 'editor:fold-at-indent-level-9' }
+ { localisedLabel: 'core.menu.edit.folding.fold-level-1', command: 'editor:fold-at-indent-level-1' }
+ { localisedLabel: 'core.menu.edit.folding.fold-level-2', command: 'editor:fold-at-indent-level-2' }
+ { localisedLabel: 'core.menu.edit.folding.fold-level-3', command: 'editor:fold-at-indent-level-3' }
+ { localisedLabel: 'core.menu.edit.folding.fold-level-4', command: 'editor:fold-at-indent-level-4' }
+ { localisedLabel: 'core.menu.edit.folding.fold-level-5', command: 'editor:fold-at-indent-level-5' }
+ { localisedLabel: 'core.menu.edit.folding.fold-level-6', command: 'editor:fold-at-indent-level-6' }
+ { localisedLabel: 'core.menu.edit.folding.fold-level-7', command: 'editor:fold-at-indent-level-7' }
+ { localisedLabel: 'core.menu.edit.folding.fold-level-8', command: 'editor:fold-at-indent-level-8' }
+ { localisedLabel: 'core.menu.edit.folding.fold-level-9', command: 'editor:fold-at-indent-level-9' }
]
}
]
}
{
- label: 'View'
+ localisedLabel: 'core.menu.view.self'
submenu: [
- { label: 'Toggle Full Screen', command: 'window:toggle-full-screen' }
+ { localisedLabel: 'core.menu.view.toggle-full-screen', command: 'window:toggle-full-screen' }
{
- label: 'Panes'
+ localisedLabel: 'core.menu.view.panes.self'
submenu: [
- { label: 'Split Up', command: 'pane:split-up-and-copy-active-item' }
- { label: 'Split Down', command: 'pane:split-down-and-copy-active-item' }
- { label: 'Split Left', command: 'pane:split-left-and-copy-active-item' }
- { label: 'Split Right', command: 'pane:split-right-and-copy-active-item' }
+ { localisedLabel: 'core.menu.view.panes.split-up', command: 'pane:split-up-and-copy-active-item' }
+ { localisedLabel: 'core.menu.view.panes.split-down', command: 'pane:split-down-and-copy-active-item' }
+ { localisedLabel: 'core.menu.view.panes.split-left', command: 'pane:split-left-and-copy-active-item' }
+ { localisedLabel: 'core.menu.view.panes.split-right', command: 'pane:split-right-and-copy-active-item' }
{ type: 'separator' }
- { label: 'Focus Next Pane', command: 'window:focus-next-pane' }
- { label: 'Focus Previous Pane', command: 'window:focus-previous-pane' }
+ { localisedLabel: 'core.menu.view.panes.focus-next', command: 'window:focus-next-pane' }
+ { localisedLabel: 'core.menu.view.panes.focus-previous', command: 'window:focus-previous-pane' }
{ type: 'separator' }
- { label: 'Focus Pane Above', command: 'window:focus-pane-above' }
- { label: 'Focus Pane Below', command: 'window:focus-pane-below' }
- { label: 'Focus Pane On Left', command: 'window:focus-pane-on-left' }
- { label: 'Focus Pane On Right', command: 'window:focus-pane-on-right' }
+ { localisedLabel: 'core.menu.view.panes.focus-above', command: 'window:focus-pane-above' }
+ { localisedLabel: 'core.menu.view.panes.focus-below', command: 'window:focus-pane-below' }
+ { localisedLabel: 'core.menu.view.panes.focus-on-left', command: 'window:focus-pane-on-left' }
+ { localisedLabel: 'core.menu.view.panes.focus-on-right', command: 'window:focus-pane-on-right' }
{ type: 'separator' }
- { label: 'Close Pane', command: 'pane:close' }
+ { localisedLabel: 'core.menu.view.panes.close', command: 'pane:close' }
]
}
{
- label: 'Developer'
+ localisedLabel: 'core.menu.view.developer.self'
submenu: [
- { label: 'Open In Dev Mode…', command: 'application:open-dev' }
- { label: 'Reload Window', command: 'window:reload' }
- { label: 'Run Package Specs', command: 'window:run-package-specs' }
- { label: 'Toggle Developer Tools', command: 'window:toggle-dev-tools' }
+ { localisedLabel: 'core.menu.view.developer.open-in-dev-mode', command: 'application:open-dev' }
+ { localisedLabel: 'core.menu.view.developer.reload-window', command: 'window:reload' }
+ { localisedLabel: 'core.menu.view.developer.run-package-specs', command: 'window:run-package-specs' }
+ { localisedLabel: 'core.menu.view.developer.toggle-dev-tools', command: 'window:toggle-dev-tools' }
]
}
{ type: 'separator' }
- { label: 'Increase Font Size', command: 'window:increase-font-size' }
- { label: 'Decrease Font Size', command: 'window:decrease-font-size' }
- { label: 'Reset Font Size', command: 'window:reset-font-size' }
+ { localisedLabel: 'core.menu.view.increase-font-size', command: 'window:increase-font-size' }
+ { localisedLabel: 'core.menu.view.decrease-font-size', command: 'window:decrease-font-size' }
+ { localisedLabel: 'core.menu.view.reset-font-size', command: 'window:reset-font-size' }
{ type: 'separator' }
- { label: 'Toggle Soft Wrap', command: 'editor:toggle-soft-wrap' }
+ { localisedLabel: 'core.menu.view.toggle-soft-wrap', command: 'editor:toggle-soft-wrap' }
]
}
{
- label: 'Selection'
+ localisedLabel: 'core.menu.selection.self'
submenu: [
- { label: 'Add Selection Above', command: 'editor:add-selection-above' }
- { label: 'Add Selection Below', command: 'editor:add-selection-below' }
- { label: 'Single Selection', command: 'editor:consolidate-selections'}
- { label: 'Split into Lines', command: 'editor:split-selections-into-lines'}
+ { localisedLabel: 'core.menu.selection.add-above', command: 'editor:add-selection-above' }
+ { localisedLabel: 'core.menu.selection.add-below', command: 'editor:add-selection-below' }
+ { localisedLabel: 'core.menu.selection.single', command: 'editor:consolidate-selections' }
+ { localisedLabel: 'core.menu.selection.split-into-lines', command: 'editor:split-selections-into-lines' }
{ type: 'separator' }
- { label: 'Select to Top', command: 'core:select-to-top' }
- { label: 'Select to Bottom', command: 'core:select-to-bottom' }
+ { localisedLabel: 'core.menu.selection.to-top', command: 'core:select-to-top' }
+ { localisedLabel: 'core.menu.selection.to-bottom', command: 'core:select-to-bottom' }
{ type: 'separator' }
- { label: 'Select Line', command: 'editor:select-line' }
- { label: 'Select Word', command: 'editor:select-word' }
- { label: 'Select to Beginning of Word', command: 'editor:select-to-beginning-of-word' }
- { label: 'Select to Beginning of Line', command: 'editor:select-to-beginning-of-line' }
- { label: 'Select to First Character of Line', command: 'editor:select-to-first-character-of-line' }
- { label: 'Select to End of Word', command: 'editor:select-to-end-of-word' }
- { label: 'Select to End of Line', command: 'editor:select-to-end-of-line' }
+ { localisedLabel: 'core.menu.selection.line', command: 'editor:select-line' }
+ { localisedLabel: 'core.menu.selection.word', command: 'editor:select-word' }
+ { localisedLabel: 'core.menu.selection.to-beginning-of-word', command: 'editor:select-to-beginning-of-word' }
+ { localisedLabel: 'core.menu.selection.to-beginning-of-line', command: 'editor:select-to-beginning-of-line' }
+ { localisedLabel: 'core.menu.selection.to-first-char-of-line', command: 'editor:select-to-first-character-of-line' }
+ { localisedLabel: 'core.menu.selection.to-end-of-word', command: 'editor:select-to-end-of-word' }
+ { localisedLabel: 'core.menu.selection.to-end-of-line', command: 'editor:select-to-end-of-line' }
]
}
{
- label: 'Find'
+ localisedLabel: 'core.menu.find.self'
submenu: []
}
{
- label: 'Packages'
+ localisedLabel: 'core.menu.packages.self'
submenu: [
- { label: 'Open Package Manager', command: 'settings-view:view-installed-packages' }
+ { localisedLabel: 'core.menu.packages.open-package-manager', command: 'settings-view:view-installed-packages' }
{ type: 'separator' }
]
}
{
- label: 'Window'
+ localisedLabel: 'core.menu.window.self'
role: 'window'
submenu: [
- { label: 'Minimize', command: 'application:minimize' }
- { label: 'Zoom', command: 'application:zoom' }
+ { localisedLabel: 'core.menu.window.minimise', command: 'application:minimize' }
+ { localisedLabel: 'core.menu.window.zoom', command: 'application:zoom' }
{ type: 'separator' }
- { label: 'Bring All to Front', command: 'application:bring-all-windows-to-front' }
+ { localisedLabel: 'core.menu.window.bring-all-to-front', command: 'application:bring-all-windows-to-front' }
]
}
{
- label: 'Help'
+ localisedLabel: 'core.menu.help.self'
role: 'help'
submenu: [
- { label: 'Terms of Use', command: 'application:open-terms-of-use' }
- { label: 'Documentation', command: 'application:open-documentation' }
- { label: 'Frequently Asked Questions', command: 'application:open-faq' }
+ { localisedLabel: 'core.menu.help.terms-of-use', command: 'application:open-terms-of-use' }
+ { localisedLabel: 'core.menu.help.docs', command: 'application:open-documentation' }
+ { localisedLabel: 'core.menu.help.faq', command: 'application:open-faq' }
{ type: 'separator' }
- { label: 'Community Discussions', command: 'application:open-discussions' }
- { label: 'Report Issue', command: 'application:report-issue' }
- { label: 'Search Issues', command: 'application:search-issues' }
+ { localisedLabel: 'core.menu.help.community-discussions', command: 'application:open-discussions' }
+ { localisedLabel: 'core.menu.help.report-issue', command: 'application:report-issue' }
+ { localisedLabel: 'core.menu.help.search-issues', command: 'application:search-issues' }
{ type: 'separator' }
]
}
diff --git a/menus/linux.cson b/menus/linux.cson
index e4f6a0532..66ab1b1ad 100644
--- a/menus/linux.cson
+++ b/menus/linux.cson
@@ -1,204 +1,204 @@
'menu': [
{
- label: '&File'
+ localisedLabel: 'core.menu.file.self' # accelerator F
submenu: [
- { label: 'New &Window', command: 'application:new-window' }
- { label: '&New File', command: 'application:new-file' }
- { label: '&Open File…', command: 'application:open-file' }
- { label: 'Open Folder…', command: 'application:open-folder' }
- { label: 'Add Project Folder…', command: 'application:add-project-folder' }
+ { localisedLabel: 'core.menu.file.new-window', command: 'application:new-window' } # accelerator W
+ { localisedLabel: 'core.menu.file.new-file', command: 'application:new-file' } # accelerator N
+ { localisedLabel: 'core.menu.file.open-file', command: 'application:open-file' } # accelerator O
+ { localisedLabel: 'core.menu.file.open-folder', command: 'application:open-folder' }
+ { localisedLabel: 'core.menu.file.add-project-folder', command: 'application:add-project-folder' }
{
- label: 'Reopen Project',
+ localisedLabel: 'core.menu.file.project-history.reopen-project'
submenu: [
- { label: 'Clear Project History', command: 'application:clear-project-history' }
+ { localisedLabel: 'core.menu.file.project-history.clear', command: 'application:clear-project-history' }
{ type: 'separator' }
]
}
- { label: 'Reopen Last &Item', command: 'pane:reopen-closed-item' }
+ { localisedLabel: 'core.menu.file.reopen-last-item', command: 'pane:reopen-closed-item' } # accelerator I
{ type: 'separator' }
- { label: '&Save', command: 'core:save' }
- { label: 'Save &As…', command: 'core:save-as' }
- { label: 'Save A&ll', command: 'window:save-all' }
+ { localisedLabel: 'core.menu.file.save', command: 'core:save' } # accelerator S
+ { localisedLabel: 'core.menu.file.save-as', command: 'core:save-as' } # accelerator A
+ { localisedLabel: 'core.menu.file.save-all', command: 'window:save-all' } # accelerator L
{ type: 'separator' }
- { label: '&Close Tab', command: 'core:close' }
- { label: 'Close &Pane', command: 'pane:close' }
- { label: 'Clos&e Window', command: 'window:close' }
+ { localisedLabel: 'core.menu.file.close-tab', command: 'core:close' } # accelerator C
+ { localisedLabel: 'core.menu.file.close-pane', command: 'pane:close' } # accelerator P
+ { localisedLabel: 'core.menu.file.close-window', command: 'window:close' } # accelerator E
{ type: 'separator' }
- { label: 'Quit', command: 'application:quit' }
+ { localisedLabel: 'core.menu.pulsar.quit', command: 'application:quit' }
]
}
{
- label: '&Edit'
+ localisedLabel: 'core.menu.edit.self' # accelerator E
submenu: [
- { label: '&Undo', command: 'core:undo' }
- { label: '&Redo', command: 'core:redo' }
+ { localisedLabel: 'core.menu.edit.undo', command: 'core:undo' } # accelerator U
+ { localisedLabel: 'core.menu.edit.redo', command: 'core:redo' } # accelerator R
{ type: 'separator' }
- { label: '&Cut', command: 'core:cut' }
- { label: 'C&opy', command: 'core:copy' }
- { label: 'Copy Pat&h', command: 'editor:copy-path' }
- { label: '&Paste', command: 'core:paste' }
- { label: 'Paste Without Reformatting', command: 'editor:paste-without-reformatting' }
- { label: 'Select &All', command: 'core:select-all' }
+ { localisedLabel: 'core.menu.edit.cut', command: 'core:cut' } # accelerator C
+ { localisedLabel: 'core.menu.edit.copy', command: 'core:copy' } # accelerator O
+ { localisedLabel: 'core.menu.edit.copy-path', command: 'editor:copy-path' } # accelerator H
+ { localisedLabel: 'core.menu.edit.paste', command: 'core:paste' } # accelerator P
+ { localisedLabel: 'core.menu.edit.paste-without-reformatting', command: 'editor:paste-without-reformatting' }
+ { localisedLabel: 'core.menu.edit.select-all', command: 'core:select-all' } # accelerator A
{ type: 'separator' }
- { label: '&Toggle Comments', command: 'editor:toggle-line-comments' }
+ { localisedLabel: 'core.menu.edit.toggle-comments', command: 'editor:toggle-line-comments' } # accelerator T
{
- label: 'Lines',
+ localisedLabel: 'core.menu.edit.lines.self'
submenu: [
- { label: '&Indent', command: 'editor:indent-selected-rows' }
- { label: '&Outdent', command: 'editor:outdent-selected-rows' }
- { label: '&Auto Indent', command: 'editor:auto-indent' }
+ { localisedLabel: 'core.menu.edit.lines.indent', command: 'editor:indent-selected-rows' } # accelerator I
+ { localisedLabel: 'core.menu.edit.lines.outdent', command: 'editor:outdent-selected-rows' } # accelerator O
+ { localisedLabel: 'core.menu.edit.lines.auto-indent', command: 'editor:auto-indent' } # accelerator A
{ type: 'separator' }
- { label: 'Move Line &Up', command: 'editor:move-line-up' }
- { label: 'Move Line &Down', command: 'editor:move-line-down' }
- { label: 'Du&plicate Lines', command: 'editor:duplicate-lines' }
- { label: 'D&elete Line', command: 'editor:delete-line' }
- { label: '&Join Lines', command: 'editor:join-lines' }
+ { localisedLabel: 'core.menu.edit.lines.move-up', command: 'editor:move-line-up' } # accelerator U
+ { localisedLabel: 'core.menu.edit.lines.move-down', command: 'editor:move-line-down' } # accelerator D
+ { localisedLabel: 'core.menu.edit.lines.duplicate', command: 'editor:duplicate-lines' } # accelerator P
+ { localisedLabel: 'core.menu.edit.lines.delete', command: 'editor:delete-line' } # accelerator E
+ { localisedLabel: 'core.menu.edit.lines.join', command: 'editor:join-lines' } # accelerator J
]
}
{
- label: 'Columns',
+ localisedLabel: 'core.menu.edit.columns.self'
submenu: [
- { label: 'Move Selection &Left', command: 'editor:move-selection-left' }
- { label: 'Move Selection &Right', command: 'editor:move-selection-right' }
+ { localisedLabel: 'core.menu.edit.columns.move-selection-left', command: 'editor:move-selection-left' } # accelerator L
+ { localisedLabel: 'core.menu.edit.columns.move-selection-right', command: 'editor:move-selection-right' } # accelerator R
]
}
{
- label: 'Text',
+ localisedLabel: 'core.menu.edit.text.self'
submenu: [
- { label: '&Upper Case', command: 'editor:upper-case' }
- { label: '&Lower Case', command: 'editor:lower-case' }
+ { localisedLabel: 'core.menu.edit.text.upper-case', command: 'editor:upper-case' } # accelerator U
+ { localisedLabel: 'core.menu.edit.text.lower-case', command: 'editor:lower-case' } # accelerator L
{ type: 'separator' }
- { label: 'Delete to End of &Word', command: 'editor:delete-to-end-of-word' }
- { label: 'Delete to Previous Word Boundary', command: 'editor:delete-to-previous-word-boundary' }
- { label: 'Delete to Next Word Boundary', command: 'editor:delete-to-next-word-boundary' }
- { label: '&Delete Line', command: 'editor:delete-line' }
+ { localisedLabel: 'core.menu.edit.text.delete-to-end-of-word', command: 'editor:delete-to-end-of-word' } # accelerator W
+ { localisedLabel: 'core.menu.edit.text.delete-to-previous-word-boundary', command: 'editor:delete-to-previous-word-boundary' }
+ { localisedLabel: 'core.menu.edit.text.delete-to-next-word-boundary', command: 'editor:delete-to-next-word-boundary' }
+ { localisedLabel: 'core.menu.edit.text.delete-line', command: 'editor:delete-line' } # accelerator D
{ type: 'separator' }
- { label: '&Transpose', command: 'editor:transpose' }
+ { localisedLabel: 'core.menu.edit.text.transpose', command: 'editor:transpose' } # accelerator T
]
}
{
- label: 'Folding',
+ localisedLabel: 'core.menu.edit.folding.self'
submenu: [
- { label: '&Fold', command: 'editor:fold-current-row' }
- { label: '&Unfold', command: 'editor:unfold-current-row' }
- { label: 'Fol&d All', command: 'editor:fold-all' }
- { label: 'Unfold &All', command: 'editor:unfold-all' }
+ { localisedLabel: 'core.menu.edit.folding.fold', command: 'editor:fold-current-row' } # accelerator F
+ { localisedLabel: 'core.menu.edit.folding.unfold', command: 'editor:unfold-current-row' } # accelerator U
+ { localisedLabel: 'core.menu.edit.folding.fold-all', command: 'editor:fold-all' } # accelerator D
+ { localisedLabel: 'core.menu.edit.folding.unfold-all', command: 'editor:unfold-all' } # accelerator A
{ type: 'separator' }
- { label: 'Fold Level 1', command: 'editor:fold-at-indent-level-1' }
- { label: 'Fold Level 2', command: 'editor:fold-at-indent-level-2' }
- { label: 'Fold Level 3', command: 'editor:fold-at-indent-level-3' }
- { label: 'Fold Level 4', command: 'editor:fold-at-indent-level-4' }
- { label: 'Fold Level 5', command: 'editor:fold-at-indent-level-5' }
- { label: 'Fold Level 6', command: 'editor:fold-at-indent-level-6' }
- { label: 'Fold Level 7', command: 'editor:fold-at-indent-level-7' }
- { label: 'Fold Level 8', command: 'editor:fold-at-indent-level-8' }
- { label: 'Fold Level 9', command: 'editor:fold-at-indent-level-9' }
+ { localisedLabel: 'core.menu.edit.folding.fold-level-1', command: 'editor:fold-at-indent-level-1' }
+ { localisedLabel: 'core.menu.edit.folding.fold-level-2', command: 'editor:fold-at-indent-level-2' }
+ { localisedLabel: 'core.menu.edit.folding.fold-level-3', command: 'editor:fold-at-indent-level-3' }
+ { localisedLabel: 'core.menu.edit.folding.fold-level-4', command: 'editor:fold-at-indent-level-4' }
+ { localisedLabel: 'core.menu.edit.folding.fold-level-5', command: 'editor:fold-at-indent-level-5' }
+ { localisedLabel: 'core.menu.edit.folding.fold-level-6', command: 'editor:fold-at-indent-level-6' }
+ { localisedLabel: 'core.menu.edit.folding.fold-level-7', command: 'editor:fold-at-indent-level-7' }
+ { localisedLabel: 'core.menu.edit.folding.fold-level-8', command: 'editor:fold-at-indent-level-8' }
+ { localisedLabel: 'core.menu.edit.folding.fold-level-9', command: 'editor:fold-at-indent-level-9' }
]
}
{ type: 'separator' }
- { label: '&Preferences', command: 'application:show-settings' }
+ { localisedLabel: 'core.menu.pulsar.preferences', command: 'application:show-settings' } # accelerator P
{ type: 'separator' }
- { label: 'Config…', command: 'application:open-your-config' }
- { label: 'Init Script…', command: 'application:open-your-init-script' }
- { label: 'Keymap…', command: 'application:open-your-keymap' }
- { label: 'Snippets…', command: 'application:open-your-snippets' }
- { label: 'Stylesheet…', command: 'application:open-your-stylesheet' }
+ { localisedLabel: 'core.menu.pulsar.config', command: 'application:open-your-config' }
+ { localisedLabel: 'core.menu.pulsar.init-script', command: 'application:open-your-init-script' }
+ { localisedLabel: 'core.menu.pulsar.keymap', command: 'application:open-your-keymap' }
+ { localisedLabel: 'core.menu.pulsar.snippets', command: 'application:open-your-snippets' }
+ { localisedLabel: 'core.menu.pulsar.stylesheet', command: 'application:open-your-stylesheet' }
{ type: 'separator' }
]
}
{
- label: '&View'
+ localisedLabel: 'core.menu.view.self' # accelerator V
submenu: [
- { label: 'Toggle &Full Screen', command: 'window:toggle-full-screen' }
- { label: 'Toggle Menu Bar', command: 'window:toggle-menu-bar' }
+ { localisedLabel: 'core.menu.view.toggle-full-screen', command: 'window:toggle-full-screen' } # accelerator F
+ { localisedLabel: 'core.menu.view.toggle-menu-bar', command: 'window:toggle-menu-bar' }
{
- label: 'Panes'
+ localisedLabel: 'core.menu.view.panes.self'
submenu: [
- { label: 'Split Up', command: 'pane:split-up-and-copy-active-item' }
- { label: 'Split Down', command: 'pane:split-down-and-copy-active-item' }
- { label: 'Split Left', command: 'pane:split-left-and-copy-active-item' }
- { label: 'Split Right', command: 'pane:split-right-and-copy-active-item' }
+ { localisedLabel: 'core.menu.view.panes.split-up', command: 'pane:split-up-and-copy-active-item' }
+ { localisedLabel: 'core.menu.view.panes.split-down', command: 'pane:split-down-and-copy-active-item' }
+ { localisedLabel: 'core.menu.view.panes.split-left', command: 'pane:split-left-and-copy-active-item' }
+ { localisedLabel: 'core.menu.view.panes.split-right', command: 'pane:split-right-and-copy-active-item' }
{ type: 'separator' }
- { label: 'Focus Next Pane', command: 'window:focus-next-pane' }
- { label: 'Focus Previous Pane', command: 'window:focus-previous-pane' }
+ { localisedLabel: 'core.menu.view.panes.focus-next', command: 'window:focus-next-pane' }
+ { localisedLabel: 'core.menu.view.panes.focus-previous', command: 'window:focus-previous-pane' }
{ type: 'separator' }
- { label: 'Focus Pane Above', command: 'window:focus-pane-above' }
- { label: 'Focus Pane Below', command: 'window:focus-pane-below' }
- { label: 'Focus Pane On Left', command: 'window:focus-pane-on-left' }
- { label: 'Focus Pane On Right', command: 'window:focus-pane-on-right' }
+ { localisedLabel: 'core.menu.view.panes.focus-above', command: 'window:focus-pane-above' }
+ { localisedLabel: 'core.menu.view.panes.focus-below', command: 'window:focus-pane-below' }
+ { localisedLabel: 'core.menu.view.panes.focus-on-left', command: 'window:focus-pane-on-left' }
+ { localisedLabel: 'core.menu.view.panes.focus-on-right', command: 'window:focus-pane-on-right' }
{ type: 'separator' }
- { label: 'Close Pane', command: 'pane:close' }
+ { localisedLabel: 'core.menu.view.panes.close', command: 'pane:close' }
]
}
{
- label: 'Developer'
+ localisedLabel: 'core.menu.view.developer.self'
submenu: [
- { label: 'Open In &Dev Mode…', command: 'application:open-dev' }
- { label: '&Reload Window', command: 'window:reload' }
- { label: 'Run Package &Specs', command: 'window:run-package-specs' }
- { label: 'Toggle Developer &Tools', command: 'window:toggle-dev-tools' }
+ { localisedLabel: 'core.menu.view.developer.open-in-dev-mode', command: 'application:open-dev' } # accelerator D
+ { localisedLabel: 'core.menu.view.developer.reload-window', command: 'window:reload' } # accelerator R
+ { localisedLabel: 'core.menu.view.developer.run-package-specs', command: 'window:run-package-specs' } # accelerator S
+ { localisedLabel: 'core.menu.view.developer.toggle-dev-tools', command: 'window:toggle-dev-tools' } # accelerator T
]
}
{ type: 'separator' }
- { label: '&Increase Font Size', command: 'window:increase-font-size' }
- { label: '&Decrease Font Size', command: 'window:decrease-font-size' }
- { label: 'Re&set Font Size', command: 'window:reset-font-size' }
+ { localisedLabel: 'core.menu.view.increase-font-size', command: 'window:increase-font-size' } # accelerator I
+ { localisedLabel: 'core.menu.view.decrease-font-size', command: 'window:decrease-font-size' } # accelerator D
+ { localisedLabel: 'core.menu.view.reset-font-size', command: 'window:reset-font-size' } # accelerator S
{ type: 'separator' }
- { label: 'Toggle Soft &Wrap', command: 'editor:toggle-soft-wrap' }
+ { localisedLabel: 'core.menu.view.toggle-soft-wrap', command: 'editor:toggle-soft-wrap' } # accelerator W
]
}
{
- label: '&Selection'
+ localisedLabel: 'core.menu.selection.self' # accelerator S
submenu: [
- { label: 'Add Selection &Above', command: 'editor:add-selection-above' }
- { label: 'Add Selection &Below', command: 'editor:add-selection-below' }
- { label: 'S&plit into Lines', command: 'editor:split-selections-into-lines'}
- { label: 'Single Selection', command: 'editor:consolidate-selections'}
+ { localisedLabel: 'core.menu.selection.add-above', command: 'editor:add-selection-above' } # accelerator A
+ { localisedLabel: 'core.menu.selection.add-below', command: 'editor:add-selection-below' } # accelerator B
+ { localisedLabel: 'core.menu.selection.single', command: 'editor:consolidate-selections' }
+ { localisedLabel: 'core.menu.selection.split-into-lines', command: 'editor:split-selections-into-lines' } # accelerator P
{ type: 'separator' }
- { label: 'Select to &Top', command: 'core:select-to-top' }
- { label: 'Select to Botto&m', command: 'core:select-to-bottom' }
+ { localisedLabel: 'core.menu.selection.to-top', command: 'core:select-to-top' } # accelerator T
+ { localisedLabel: 'core.menu.selection.to-bottom', command: 'core:select-to-bottom' } # accelerator M
{ type: 'separator' }
- { label: 'Select &Line', command: 'editor:select-line' }
- { label: 'Select &Word', command: 'editor:select-word' }
- { label: 'Select to Beginning of W&ord', command: 'editor:select-to-beginning-of-word' }
- { label: 'Select to Beginning of L&ine', command: 'editor:select-to-beginning-of-line' }
- { label: 'Select to First &Character of Line', command: 'editor:select-to-first-character-of-line' }
- { label: 'Select to End of Wor&d', command: 'editor:select-to-end-of-word' }
- { label: 'Select to End of Lin&e', command: 'editor:select-to-end-of-line' }
+ { localisedLabel: 'core.menu.selection.line', command: 'editor:select-line' } # accelerator L
+ { localisedLabel: 'core.menu.selection.word', command: 'editor:select-word' } # accelerator W
+ { localisedLabel: 'core.menu.selection.to-beginning-of-word', command: 'editor:select-to-beginning-of-word' } # accelerator O
+ { localisedLabel: 'core.menu.selection.to-beginning-of-line', command: 'editor:select-to-beginning-of-line' } # accelerator I
+ { localisedLabel: 'core.menu.selection.to-first-char-of-line', command: 'editor:select-to-first-character-of-line' } # accelerator C
+ { localisedLabel: 'core.menu.selection.to-end-of-word', command: 'editor:select-to-end-of-word' } # accelerator D
+ { localisedLabel: 'core.menu.selection.to-end-of-line', command: 'editor:select-to-end-of-line' } # accelerator E
]
}
{
- label: 'F&ind'
+ localisedLabel: 'core.menu.find.self' # accelerator I
submenu: []
}
{
- label: '&Packages'
+ localisedLabel: 'core.menu.packages.self' # accelerator P
submenu: [
- { label: 'Open Package Manager', command: 'settings-view:view-installed-packages' }
+ { localisedLabel: 'core.menu.packages.open-package-manager', command: 'settings-view:view-installed-packages' }
{ type: 'separator' }
]
}
{
- label: '&Help'
+ localisedLabel: 'core.menu.help.self' # accelerator H
submenu: [
- { label: 'View &Terms of Use', command: 'application:open-terms-of-use' }
- { label: 'View &License', command: 'application:open-license' }
- { label: "VERSION", enabled: false }
+ { localisedLabel: 'core.menu.help.terms-of-use', command: 'application:open-terms-of-use' } # accelerator T
+ { localisedLabel: 'core.menu.pulsar.view-license', command: 'application:open-license' } # accelerator L
+ { localisedLabel: 'core.menu.pulsar.version', enabled: false }
{ type: 'separator' }
- { label: '&Documentation', command: 'application:open-documentation' }
- { label: 'Frequently Asked Questions', command: 'application:open-faq' }
+ { localisedLabel: 'core.menu.help.docs', command: 'application:open-documentation' } # accelerator D
+ { localisedLabel: 'core.menu.help.faq', command: 'application:open-faq' }
{ type: 'separator' }
- { label: 'Community Discussions', command: 'application:open-discussions' }
- { label: 'Report Issue', command: 'application:report-issue' }
- { label: 'Search Issues', command: 'application:search-issues' }
+ { localisedLabel: 'core.menu.help.community-discussions', command: 'application:open-discussions' }
+ { localisedLabel: 'core.menu.help.report-issue', 'application:report-issue' }
+ { localisedLabel: 'core.menu.help.search-issues', command: 'application:search-issues' }
{ type: 'separator' }
- { label: 'About Pulsar', command: 'application:about' }
+ { localisedLabel: 'core.menu.pulsar.about', command: 'application:about' }
{ type: 'separator' }
]
}
diff --git a/package.json b/package.json
index 76f58b1a2..4ebcd779e 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "pulsar",
- "author": "Pulsar Community ",
+ "author": "Pulsar-Edit ",
"productName": "Pulsar",
"version": "1.103.0-dev",
"description": "A Community-led Hyper-Hackable Text Editor",
@@ -24,6 +24,7 @@
"dependencies": {
"@atom/source-map-support": "^0.3.4",
"@babel/core": "7.18.6",
+ "@formatjs/icu-messageformat-parser": "^2.3.0",
"about": "file:packages/about",
"archive-view": "file:packages/archive-view",
"async": "3.2.4",
@@ -45,7 +46,7 @@
"base16-tomorrow-dark-theme": "file:packages/base16-tomorrow-dark-theme",
"base16-tomorrow-light-theme": "file:packages/base16-tomorrow-light-theme",
"bookmarks": "file:packages/bookmarks",
- "bracket-matcher": "https://github.com/pulsar-edit/bracket-matcher.git#c877977",
+ "bracket-matcher": "file:packages/bracket-matcher",
"chai": "4.3.4",
"clear-cut": "^2.0.2",
"coffeescript": "1.12.7",
@@ -55,14 +56,14 @@
"dedent": "^0.7.0",
"deprecation-cop": "file:packages/deprecation-cop",
"dev-live-reload": "file:packages/dev-live-reload",
- "document-register-element": "^1.14.10",
+ "document-register-element": "https://github.com/pulsar-edit/document-register-element.git#1f5868f",
"encoding-selector": "file:packages/encoding-selector",
"etch": "0.14.1",
"event-kit": "^2.5.3",
"exception-reporting": "file:packages/exception-reporting",
"find-and-replace": "https://github.com/atom-community/find-and-replace/archive/refs/tags/v0.220.1.tar.gz",
"find-parent-dir": "^0.3.0",
- "first-mate": "7.4.3",
+ "second-mate": "https://github.com/pulsar-edit/second-mate.git#14aa7bd",
"focus-trap": "6.3.0",
"fs-admin": "0.19.0",
"fs-plus": "^3.1.1",
@@ -77,6 +78,7 @@
"grim": "2.0.3",
"image-view": "file:packages/image-view",
"incompatible-packages": "file:packages/incompatible-packages",
+ "intl-messageformat": "^10.3.3",
"jasmine-json": "~0.0",
"jasmine-reporters": "1.1.0",
"jasmine-tagged": "^1.1.4",
diff --git a/packages/README.md b/packages/README.md
index 0c8e85798..ab9a2d93a 100644
--- a/packages/README.md
+++ b/packages/README.md
@@ -16,7 +16,7 @@ See [RFC 003](https://github.com/atom/atom/blob/master/docs/rfcs/003-consolidate
| **autocomplete-atom-api** | [`atom/autocomplete-atom-api`][autocomplete-atom-api] | |
| **autocomplete-css** | [`./autocomplete-css`](./autocomplete-css) | |
| **autocomplete-html** | [`./autocomplete-html`](./autocomplete-html) | |
-| **autocomplete-plus** | [`./autocomplete-plus`][./autocomplete-plus] | |
+| **autocomplete-plus** | [`./autocomplete-plus`](./autocomplete-plus) | |
| **autocomplete-snippets** | [`./autocomplete-snippets`](./autocomplete-snippets) | |
| **autoflow** | [`./autoflow`](./autoflow) | |
| **autosave** | [`pulsar-edit/autosave`][autosave] | [#17834](https://github.com/atom/atom/issues/17834) |
@@ -76,7 +76,7 @@ See [RFC 003](https://github.com/atom/atom/blob/master/docs/rfcs/003-consolidate
| **language-yaml** | [`./language-yaml`](./language-yaml) | |
| **line-ending-selector** | [`./line-ending-selector`](./line-ending-selector) | |
| **link** | [`./link`](./link) | |
-| **markdown-preview** | [`./markdown-preview`][./markdown-preview] | |
+| **markdown-preview** | [`./markdown-preview`](./markdown-preview) | |
| **notifications** | [`atom/notifications`][notifications] | [#18277](https://github.com/atom/atom/issues/18277) |
| **one-dark-syntax** | [`./one-dark-syntax`](./one-dark-syntax) | |
| **one-dark-ui** | [`./one-dark-ui`](./one-dark-ui) | |
@@ -90,7 +90,7 @@ See [RFC 003](https://github.com/atom/atom/blob/master/docs/rfcs/003-consolidate
| **solarized-light-syntax** | [`./solarized-light-syntax`](./solarized-light-syntax) | |
| **spell-check** | [`atom/spell-check`][spell-check] | |
| **status-bar** | [`./status-bar`](./status-bar) | |
-| **styleguide** | [`./styleguide`][./styleguide] | |
+| **styleguide** | [`./styleguide`](./styleguide) | |
| **symbols-view** | [`pulsar-edit/symbols-view`][symbols-view] | |
| **tabs** | [`./tabs`](./tabs) | |
| **timecop** | [`pulsar-edit/timecop`][timecop] | [#18272](https://github.com/atom/atom/issues/18272) |
@@ -98,7 +98,7 @@ See [RFC 003](https://github.com/atom/atom/blob/master/docs/rfcs/003-consolidate
| **update-package-dependencies** | [`./update-package-dependencies`](./update-package-dependencies) | |
| **welcome** | [`./welcome`](./welcome) | |
| **whitespace** | [`./whitespace`](./whitespace) | |
-| **wrap-guide** | [`./wrap-guide`][./wrap-guide] | |
+| **wrap-guide** | [`./wrap-guide`](./wrap-guide) | |
[autocomplete-atom-api]: https://github.com/pulsar-edit/autocomplete-atom-api
[autosave]: https://github.com/pulsar-edit/autosave
diff --git a/packages/autocomplete-html/README.md b/packages/autocomplete-html/README.md
index a0ec28f69..25e865edb 100644
--- a/packages/autocomplete-html/README.md
+++ b/packages/autocomplete-html/README.md
@@ -7,4 +7,4 @@ Descriptions are powered by [MDN](https://developer.mozilla.org).
![html-completions](https://cloud.githubusercontent.com/assets/2766036/25668197/ffd24928-2ff3-11e7-85fc-b327ac2287e6.gif)
-You can update the prebuilt list of tags and attributes names and values by running the `update.js` file at the root of the repository and then checking-in the changed `completions.json` file.
+You can update the prebuilt list of tags and attributes names and values by running `npm run update` at the root of the package and then checking-in the changed `completions.json` file.
diff --git a/packages/autocomplete-html/completions.json b/packages/autocomplete-html/completions.json
index e576f825c..5438c729d 100644
--- a/packages/autocomplete-html/completions.json
+++ b/packages/autocomplete-html/completions.json
@@ -1,702 +1,13212 @@
{
"tags": {
- "a": {
+ "clipPath": {
+ "description": "The SVG element defines a clipping path, to be used by the clip-path property."
+ },
+ "mask": {
+ "description": "The element defines an alpha mask for compositing the current object into the background. A mask is used/referenced using the mask property."
+ },
+ "filter": {
+ "description": "The SVG element defines a custom filter effect by grouping atomic filter primitives. It is never rendered itself, but must be used by the filter attribute on SVG elements, or the filter CSS property for SVG/HTML elements."
+ },
+ "feBlend": {
+ "description": "The SVG filter primitive composes two objects together ruled by a certain blending mode. This is similar to what is known from image editing software when blending two layers. The mode is defined by the mode attribute."
+ },
+ "feColorMatrix": {
+ "description": "The SVG filter element changes colors based on a transformation matrix. Every pixel's color value [R,G,B,A] is matrix multiplied by a 5 by 5 color matrix to create new color [R',G',B',A']."
+ },
+ "feComponentTransfer": {
+ "description": "The SVG filter primitive performs color-component-wise remapping of data for each pixel. It allows operations like brightness adjustment, contrast adjustment, color balance or thresholding."
+ },
+ "feFuncR": {
+ "description": "The SVG filter primitive defines the transfer function for the red component of the input graphic of its parent feComponentTransfer element."
+ },
+ "feFuncG": {
+ "description": "The SVG filter primitive defines the transfer function for the green component of the input graphic of its parent feComponentTransfer element."
+ },
+ "feFuncB": {
+ "description": "The SVG filter primitive defines the transfer function for the blue component of the input graphic of its parent feComponentTransfer element."
+ },
+ "feFuncA": {
+ "description": "The SVG filter primitive defines the transfer function for the alpha component of the input graphic of its parent feComponentTransfer element."
+ },
+ "feComposite": {
+ "description": "The SVG filter primitive performs the combination of two input images pixel-wise in image space using one of the Porter-Duff compositing operations: over, in, atop, out, xor, lighter, or arithmetic."
+ },
+ "feConvolveMatrix": {
+ "description": "The SVG filter primitive applies a matrix convolution filter effect. A convolution combines pixels in the input image with neighboring pixels to produce a resulting image. A wide variety of imaging operations can be achieved through convolutions, including blurring, edge detection, sharpening, embossing and beveling."
+ },
+ "feDiffuseLighting": {
+ "description": "The SVG filter primitive lights an image using the alpha channel as a bump map. The resulting image, which is an RGBA opaque image, depends on the light color, light position and surface geometry of the input bump map."
+ },
+ "feDisplacementMap": {
+ "description": "The SVG filter primitive uses the pixel values from the image from in2 to spatially displace the image from in."
+ },
+ "feDropShadow": {
+ "description": "The SVG filter primitive creates a drop shadow of the input image. It can only be used inside a SVGElement('filter') element."
+ },
+ "feFlood": {
+ "description": "The SVG filter primitive fills the filter subregion with the color and opacity defined by flood-color and flood-opacity."
+ },
+ "feGaussianBlur": {
+ "description": "The SVG filter primitive blurs the input image by the amount specified in stdDeviation, which defines the bell-curve."
+ },
+ "feImage": {
+ "description": "The SVG filter primitive fetches image data from an external source and provides the pixel data as output (meaning if the external source is an SVG image, it is rasterized.)"
+ },
+ "feMerge": {
+ "description": "The SVG element allows filter effects to be applied concurrently instead of sequentially. This is achieved by other filters storing their output via the SVGAttr(result) attribute and then accessing it in a SVGElement(feMergeNode) child."
+ },
+ "feMergeNode": {
+ "description": "The feMergeNode takes the result of another filter to be processed by its parent SVGElement(feMerge) ."
+ },
+ "feMorphology": {
+ "description": "The SVG filter primitive is used to erode or dilate the input image. Its usefulness lies especially in fattening or thinning effects."
+ },
+ "feOffset": {
+ "description": "The SVG filter primitive allows to offset the input image. The input image as a whole is offset by the values specified in the dx and dy attributes."
+ },
+ "feSpecularLighting": {
+ "description": "The SVG filter primitive lights a source graphic using the alpha channel as a bump map. The resulting image is an RGBA image based on the light color. The lighting calculation follows the standard specular component of the Phong lighting model. The resulting image depends on the light color, light position and surface geometry of the input bump map. The result of the lighting calculation is added. The filter primitive assumes that the viewer is at infinity in the z direction."
+ },
+ "feTile": {
+ "description": "The SVG filter primitive allows to fill a target rectangle with a repeated, tiled pattern of an input image. The effect is similar to the one of a pattern."
+ },
+ "feTurbulence": {
+ "description": "The SVG filter primitive creates an image using the Perlin turbulence function. It allows the synthesis of artificial textures like clouds or marble. The resulting image will fill the entire filter primitive subregion."
+ },
+ "feDistantLight": {
+ "description": "The filter primitive defines a distant light source that can be used within a lighting filter primitive: feDiffuseLighting or feSpecularLighting."
+ },
+ "fePointLight": {
+ "description": "The filter primitive defines a light source which allows to create a point light effect. It that can be used within a lighting filter primitive: feDiffuseLighting or feSpecularLighting."
+ },
+ "feSpotLight": {
+ "description": "The SVG filter primitive defines a light source that can be used to create a spotlight effect."
+ },
+ "html": {
"attributes": [
- "href",
- "hreflang",
- "media",
- "rel",
- "target",
- "type"
+ "version",
+ "inert",
+ "accessKey",
+ "accessKeyLabel",
+ "innerText",
+ "outerText",
+ "namespaceURI",
+ "prefix",
+ "localName",
+ "tagName",
+ "id",
+ "className",
+ "classList",
+ "slot",
+ "attributes",
+ "shadowRoot",
+ "oncopy",
+ "oncut",
+ "onpaste",
+ "contentEditable",
+ "enterKeyHint",
+ "isContentEditable",
+ "inputMode",
+ "dataset",
+ "tabIndex",
+ "nodeType",
+ "nodeName",
+ "baseURI",
+ "isConnected",
+ "ownerDocument",
+ "parentNode",
+ "parentElement",
+ "childNodes",
+ "firstChild",
+ "lastChild",
+ "previousSibling",
+ "nextSibling",
+ "nodeValue",
+ "textContent",
+ "children",
+ "firstElementChild",
+ "lastElementChild",
+ "childElementCount",
+ "previousElementSibling",
+ "nextElementSibling",
+ "assignedSlot",
+ "role",
+ "ariaAtomic",
+ "ariaAutoComplete",
+ "ariaBusy",
+ "ariaChecked",
+ "ariaColCount",
+ "ariaColIndex",
+ "ariaColIndexText",
+ "ariaColSpan",
+ "ariaCurrent",
+ "ariaDescription",
+ "ariaDisabled",
+ "ariaExpanded",
+ "ariaHasPopup",
+ "ariaHidden",
+ "ariaInvalid",
+ "ariaKeyShortcuts",
+ "ariaLabel",
+ "ariaLevel",
+ "ariaLive",
+ "ariaModal",
+ "ariaMultiLine",
+ "ariaMultiSelectable",
+ "ariaOrientation",
+ "ariaPlaceholder",
+ "ariaPosInSet",
+ "ariaPressed",
+ "ariaReadOnly",
+ "ariaRequired",
+ "ariaRoleDescription",
+ "ariaRowCount",
+ "ariaRowIndex",
+ "ariaRowIndexText",
+ "ariaRowSpan",
+ "ariaSelected",
+ "ariaSetSize",
+ "ariaSort",
+ "ariaValueMax",
+ "ariaValueMin",
+ "ariaValueNow",
+ "ariaValueText"
],
- "description": "Creates a hyperlink to other web pages, files, locations within the same page, email addresses, or any other URL."
+ "description": "The HTML element represents the root (top-level element) of an HTML document, so it is also referred to as the _root element_. All other elements must be descendants of this element."
},
- "abbr": {
- "description": "Represents an abbreviation and optionally provides a full description for it."
- },
- "address": {
- "description": "Indicates that the enclosed HTML provides contact information for a person or people, or for an organization."
- },
- "area": {
+ "head": {
"attributes": [
- "alt",
- "coords",
- "href",
- "hreflang",
- "media",
- "rel",
- "shape",
- "target",
- "type"
+ "inert",
+ "accessKey",
+ "accessKeyLabel",
+ "innerText",
+ "outerText",
+ "namespaceURI",
+ "prefix",
+ "localName",
+ "tagName",
+ "id",
+ "className",
+ "classList",
+ "slot",
+ "attributes",
+ "shadowRoot",
+ "oncopy",
+ "oncut",
+ "onpaste",
+ "contentEditable",
+ "enterKeyHint",
+ "isContentEditable",
+ "inputMode",
+ "dataset",
+ "tabIndex",
+ "nodeType",
+ "nodeName",
+ "baseURI",
+ "isConnected",
+ "ownerDocument",
+ "parentNode",
+ "parentElement",
+ "childNodes",
+ "firstChild",
+ "lastChild",
+ "previousSibling",
+ "nextSibling",
+ "nodeValue",
+ "textContent",
+ "children",
+ "firstElementChild",
+ "lastElementChild",
+ "childElementCount",
+ "previousElementSibling",
+ "nextElementSibling",
+ "assignedSlot",
+ "role",
+ "ariaAtomic",
+ "ariaAutoComplete",
+ "ariaBusy",
+ "ariaChecked",
+ "ariaColCount",
+ "ariaColIndex",
+ "ariaColIndexText",
+ "ariaColSpan",
+ "ariaCurrent",
+ "ariaDescription",
+ "ariaDisabled",
+ "ariaExpanded",
+ "ariaHasPopup",
+ "ariaHidden",
+ "ariaInvalid",
+ "ariaKeyShortcuts",
+ "ariaLabel",
+ "ariaLevel",
+ "ariaLive",
+ "ariaModal",
+ "ariaMultiLine",
+ "ariaMultiSelectable",
+ "ariaOrientation",
+ "ariaPlaceholder",
+ "ariaPosInSet",
+ "ariaPressed",
+ "ariaReadOnly",
+ "ariaRequired",
+ "ariaRoleDescription",
+ "ariaRowCount",
+ "ariaRowIndex",
+ "ariaRowIndexText",
+ "ariaRowSpan",
+ "ariaSelected",
+ "ariaSetSize",
+ "ariaSort",
+ "ariaValueMax",
+ "ariaValueMin",
+ "ariaValueNow",
+ "ariaValueText"
],
- "description": "Defines a hot-spot region on an image, and optionally associates it with a hypertext link."
+ "description": "The HTML element contains machine-readable information (metadata) about the document, like its title, scripts, and style sheets."
},
- "article": {
- "description": "Represents a self-contained composition in a document, page, application, or site, which is intended to be independently distributable or reusable (e."
- },
- "aside": {
- "description": "Represents a portion of a document whose content is only indirectly related to the document's main content."
- },
- "audio": {
- "attributes": [
- "autoplay",
- "controls",
- "loop",
- "mediagroup",
- "muted",
- "preload",
- "src"
- ],
- "description": "Used to embed sound content in documents."
- },
- "b": {
- "description": "Represents a span of text stylistically different from normal text, without conveying any special importance or relevance, and that is typically rendered in boldface."
+ "title": {
+ "description": "The HTML element defines the document's title that is shown in a glossary(Browser, browser)'s title bar or a page's tab. It only contains text; tags within the element are ignored."
},
"base": {
"attributes": [
"href",
- "target"
+ "target",
+ "inert",
+ "accessKey",
+ "accessKeyLabel",
+ "innerText",
+ "outerText",
+ "namespaceURI",
+ "prefix",
+ "localName",
+ "tagName",
+ "id",
+ "className",
+ "classList",
+ "slot",
+ "attributes",
+ "shadowRoot",
+ "oncopy",
+ "oncut",
+ "onpaste",
+ "contentEditable",
+ "enterKeyHint",
+ "isContentEditable",
+ "inputMode",
+ "dataset",
+ "tabIndex",
+ "nodeType",
+ "nodeName",
+ "baseURI",
+ "isConnected",
+ "ownerDocument",
+ "parentNode",
+ "parentElement",
+ "childNodes",
+ "firstChild",
+ "lastChild",
+ "previousSibling",
+ "nextSibling",
+ "nodeValue",
+ "textContent",
+ "children",
+ "firstElementChild",
+ "lastElementChild",
+ "childElementCount",
+ "previousElementSibling",
+ "nextElementSibling",
+ "assignedSlot",
+ "role",
+ "ariaAtomic",
+ "ariaAutoComplete",
+ "ariaBusy",
+ "ariaChecked",
+ "ariaColCount",
+ "ariaColIndex",
+ "ariaColIndexText",
+ "ariaColSpan",
+ "ariaCurrent",
+ "ariaDescription",
+ "ariaDisabled",
+ "ariaExpanded",
+ "ariaHasPopup",
+ "ariaHidden",
+ "ariaInvalid",
+ "ariaKeyShortcuts",
+ "ariaLabel",
+ "ariaLevel",
+ "ariaLive",
+ "ariaModal",
+ "ariaMultiLine",
+ "ariaMultiSelectable",
+ "ariaOrientation",
+ "ariaPlaceholder",
+ "ariaPosInSet",
+ "ariaPressed",
+ "ariaReadOnly",
+ "ariaRequired",
+ "ariaRoleDescription",
+ "ariaRowCount",
+ "ariaRowIndex",
+ "ariaRowIndexText",
+ "ariaRowSpan",
+ "ariaSelected",
+ "ariaSetSize",
+ "ariaSort",
+ "ariaValueMax",
+ "ariaValueMin",
+ "ariaValueNow",
+ "ariaValueText"
],
- "description": "Specifies the base URL to use for all relative URLs contained within a document."
+ "description": "The HTML element specifies the base URL to use for all _relative_ URLs in a document. There can be only one element in a document."
},
- "bdi": {
- "description": "Isolates a span of text that might be formatted in a different direction from other text outside it."
- },
- "bdo": {
- "description": "Used to override the current directionality of text."
- },
- "big": {
- "description": "The big element is obsolete. Avoid using it and update existing code if possible."
- },
- "blockquote": {
+ "link": {
"attributes": [
- "cite"
+ "href",
+ "crossOrigin",
+ "rel",
+ "as",
+ "relList",
+ "media",
+ "integrity",
+ "hreflang",
+ "type",
+ "sizes",
+ "imageSrcset",
+ "imageSizes",
+ "referrerPolicy",
+ "blocking",
+ "disabled",
+ "charset",
+ "rev",
+ "target",
+ "inert",
+ "accessKey",
+ "accessKeyLabel",
+ "innerText",
+ "outerText",
+ "sheet",
+ "namespaceURI",
+ "prefix",
+ "localName",
+ "tagName",
+ "id",
+ "className",
+ "classList",
+ "slot",
+ "attributes",
+ "shadowRoot",
+ "oncopy",
+ "oncut",
+ "onpaste",
+ "contentEditable",
+ "enterKeyHint",
+ "isContentEditable",
+ "inputMode",
+ "dataset",
+ "tabIndex",
+ "nodeType",
+ "nodeName",
+ "baseURI",
+ "isConnected",
+ "ownerDocument",
+ "parentNode",
+ "parentElement",
+ "childNodes",
+ "firstChild",
+ "lastChild",
+ "previousSibling",
+ "nextSibling",
+ "nodeValue",
+ "textContent",
+ "children",
+ "firstElementChild",
+ "lastElementChild",
+ "childElementCount",
+ "previousElementSibling",
+ "nextElementSibling",
+ "assignedSlot",
+ "role",
+ "ariaAtomic",
+ "ariaAutoComplete",
+ "ariaBusy",
+ "ariaChecked",
+ "ariaColCount",
+ "ariaColIndex",
+ "ariaColIndexText",
+ "ariaColSpan",
+ "ariaCurrent",
+ "ariaDescription",
+ "ariaDisabled",
+ "ariaExpanded",
+ "ariaHasPopup",
+ "ariaHidden",
+ "ariaInvalid",
+ "ariaKeyShortcuts",
+ "ariaLabel",
+ "ariaLevel",
+ "ariaLive",
+ "ariaModal",
+ "ariaMultiLine",
+ "ariaMultiSelectable",
+ "ariaOrientation",
+ "ariaPlaceholder",
+ "ariaPosInSet",
+ "ariaPressed",
+ "ariaReadOnly",
+ "ariaRequired",
+ "ariaRoleDescription",
+ "ariaRowCount",
+ "ariaRowIndex",
+ "ariaRowIndexText",
+ "ariaRowSpan",
+ "ariaSelected",
+ "ariaSetSize",
+ "ariaSort",
+ "ariaValueMax",
+ "ariaValueMin",
+ "ariaValueNow",
+ "ariaValueText"
],
- "description": "Indicates that the enclosed text is an extended quotation."
+ "description": "The HTML element specifies relationships between the current document and an external resource."
+ },
+ "meta": {
+ "attributes": [
+ "name",
+ "httpEquiv",
+ "content",
+ "media",
+ "scheme",
+ "inert",
+ "accessKey",
+ "accessKeyLabel",
+ "innerText",
+ "outerText",
+ "namespaceURI",
+ "prefix",
+ "localName",
+ "tagName",
+ "id",
+ "className",
+ "classList",
+ "slot",
+ "attributes",
+ "shadowRoot",
+ "oncopy",
+ "oncut",
+ "onpaste",
+ "contentEditable",
+ "enterKeyHint",
+ "isContentEditable",
+ "inputMode",
+ "dataset",
+ "tabIndex",
+ "nodeType",
+ "nodeName",
+ "baseURI",
+ "isConnected",
+ "ownerDocument",
+ "parentNode",
+ "parentElement",
+ "childNodes",
+ "firstChild",
+ "lastChild",
+ "previousSibling",
+ "nextSibling",
+ "nodeValue",
+ "textContent",
+ "children",
+ "firstElementChild",
+ "lastElementChild",
+ "childElementCount",
+ "previousElementSibling",
+ "nextElementSibling",
+ "assignedSlot",
+ "role",
+ "ariaAtomic",
+ "ariaAutoComplete",
+ "ariaBusy",
+ "ariaChecked",
+ "ariaColCount",
+ "ariaColIndex",
+ "ariaColIndexText",
+ "ariaColSpan",
+ "ariaCurrent",
+ "ariaDescription",
+ "ariaDisabled",
+ "ariaExpanded",
+ "ariaHasPopup",
+ "ariaHidden",
+ "ariaInvalid",
+ "ariaKeyShortcuts",
+ "ariaLabel",
+ "ariaLevel",
+ "ariaLive",
+ "ariaModal",
+ "ariaMultiLine",
+ "ariaMultiSelectable",
+ "ariaOrientation",
+ "ariaPlaceholder",
+ "ariaPosInSet",
+ "ariaPressed",
+ "ariaReadOnly",
+ "ariaRequired",
+ "ariaRoleDescription",
+ "ariaRowCount",
+ "ariaRowIndex",
+ "ariaRowIndexText",
+ "ariaRowSpan",
+ "ariaSelected",
+ "ariaSetSize",
+ "ariaSort",
+ "ariaValueMax",
+ "ariaValueMin",
+ "ariaValueNow",
+ "ariaValueText"
+ ],
+ "description": "The HTML element represents Metadata,metadata that cannot be represented by other HTML meta-related elements, like base, link, script, style or title."
+ },
+ "style": {
+ "description": "The