| // 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(); |
| } |
| } |