UNPKG

chrome-devtools-frontend

Version:
137 lines (109 loc) 4.91 kB
// Copyright 2021 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import * as Lit from '../lit/lit.js'; import {ContextMenu} from './legacy.js'; const {html} = Lit; export function render(container: HTMLElement) { const menuDocs = container.createChild('div', 'menu-docs'); const style = document.createElement('style'); style.textContent = ` .menu-docs > div { width: var(--sys-size-34); padding: var(--sys-size-11); display: flex; align-items: center; flex-wrap: wrap; gap: var(--sys-size-5); background-color: var(--sys-color-neutral-container); border-radius: var(--sys-shape-corner-medium); text-align: center; p { vertical-align: middle; } } `; menuDocs.appendChild(style); const menuButtonSection = document.createElement('div'); const menuButtonHeader = document.createElement('header'); menuButtonHeader.textContent = 'DevTools menu button (lit-html)'; menuDocs.appendChild(menuButtonHeader); menuDocs.appendChild(menuButtonSection); Lit.render( html` <devtools-menu-button icon-name="bin" .populateMenuCall=${(menu: ContextMenu.ContextMenu) => { menu.defaultSection().appendItem('Item', () => { alert('Item clicked'); }, {jslogContext: 'item'}); }} jslogContext="my-menu-button" ></devtools-menu-button> `, menuButtonSection); const simpleItemsSection = document.createElement('div'); simpleItemsSection.innerHTML = '<p>Right-click here</p>'; const simpleItemsHeader = document.createElement('header'); simpleItemsHeader.textContent = 'Various simple menu items (imperative API)'; menuDocs.appendChild(simpleItemsHeader); menuDocs.appendChild(simpleItemsSection); let checked = true; simpleItemsSection.addEventListener('contextmenu', onSimpleMenu); function onSimpleMenu(event: Event) { const simpleMenu = new ContextMenu.ContextMenu(event); // Regular item simpleMenu.defaultSection().appendItem('Regular item', () => { alert('Regular item clicked '); }, {jslogContext: 'regular-item'}); // Disabled item simpleMenu.defaultSection().appendItem('Disabled item', () => { alert('Will not be printed'); }, {jslogContext: 'disabled-item', disabled: true}); // Experimental item simpleMenu.defaultSection().appendItem('Experimental item', () => { alert('Experimental item clicked'); }, {jslogContext: 'experimental-item', isPreviewFeature: true}); // Separator simpleMenu.defaultSection().appendSeparator(); // Checkbox item simpleMenu.defaultSection().appendCheckboxItem('Checkbox item', () => { alert('Checkbox item clicked'); checked = !checked; }, {checked, jslogContext: 'checkbox-item'}); void simpleMenu.show(); } const customSection = document.createElement('div'); customSection.innerHTML = '<p>Right-click here</p>'; const customSectionHeader = document.createElement('header'); customSectionHeader.textContent = 'Custom sections (imperative API)'; menuDocs.appendChild(customSectionHeader); menuDocs.appendChild(customSection); customSection.addEventListener('contextmenu', onCustomSectionMenu); function onCustomSectionMenu(event: Event) { const customSectionMenu = new ContextMenu.ContextMenu(event); // First custom section const customSection = customSectionMenu.section('Custom section'); customSection.appendItem('Section inner item 1', () => {/* ... */}, {jslogContext: 'my-inner-item-1'}); customSection.appendItem('Section inner item 2', () => {/* ... */}, {jslogContext: 'my-inner-item-2'}); // Second custom section const customSection2 = customSectionMenu.section('Custom section 2'); customSection2.appendItem('Section inner item 1', () => {/* ... */}, {jslogContext: 'my-inner-item-3'}); void customSectionMenu.show(); } const subMenuSection = document.createElement('div'); subMenuSection.innerHTML = '<p>Right-click here</p>'; const subMenuHeader = document.createElement('header'); subMenuHeader.textContent = 'Sub menu (imperative API)'; menuDocs.appendChild(subMenuHeader); menuDocs.appendChild(subMenuSection); subMenuSection.addEventListener('contextmenu', onSubMenu); function onSubMenu(event: Event) { const subMenuMenu = new ContextMenu.ContextMenu(event); const subMenu = subMenuMenu.defaultSection().appendSubMenuItem('Item to open sub menu', /* disabled */ false, 'my-sub-menu'); subMenu.defaultSection().appendItem('Sub menu inner item 1', () => {/* ... */}, {jslogContext: 'my-inner-item-1'}); subMenu.defaultSection().appendItem('Sub menu inner item 2', () => {/* ... */}, {jslogContext: 'my-inner-item-2'}); void subMenuMenu.show(); } }