Skip to content

Test webview context menus proposal  #156224

@mjbvz

Description

@mjbvz

Test for #54285

Complexity: 5

Create Issue


Summary

#54285 introduces a new contribution point for context menus on webviews. These menus can also use when clauses that control when they are shown or hidden

"webview/context": [
	{
		"command": "gitlens.showSettingsPage",
		"when": "webview == 'gitlens.welcome'"
	}
],

The contents of the webview can change the when clauses by setting data-vscode-context with json values of the new context. For example, if I right click inside of nav with the following html:

<div class="menu" data-vscode-context='{"webviewSection": "menu", "countOfThing": 123}'>
    ...
    <div class="nav" data-vscode-context='{"webviewSection": "nav", "preventDefaultContextMenuItems": true}'>
        ...
    </div>
</div>

The set contexts would be:

  • webviewSection = "nav" (overrides the value from the . menu element)
  • countOfThing = 123 (inherited from the parent .menu element)
  • preventDefaultContextMenuItems = true

The preventDefaultContextMenuItems context should prevent the default context menu items from showing up (copy, paste, ...)

Testing

Using the webview extension sample, try testing:

  • Context menus only show up if you set:

    "enabledApiProposals": [
    	"contribWebviewContext"
    ],
    
  1. You can register webview context menu items and use webview == 'catCoding' to register a new menu. For example:

    "contributes": {
    	"menus": {
    		"webview/context": [
    			{
    				"command": "catCoding.doRefactor",
    				"when": "webview == 'catCoding'"
    			}
    		]
    	},
  2. Your html can suppress the default context menu items using preventDefaultContextMenuItems with data-vscode-context (see above)

  3. Your html can set custom context using data-vscode-context

  4. Any set contexts should override contexts set by parent element (the above example shows this for webviewSection)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions