UNPKG

chrome-devtools-frontend

Version:
204 lines (198 loc) • 4.65 kB
// Copyright 2023 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import * as Dialogs from '../../../../ui/components/dialogs/dialogs.js'; import * as Menus from '../../../../ui/components/menus/menus.js'; const menus = [ { items: [ { name: 'Opt 1', value: '1', }, { name: 'Opt 2', value: '2', selected: false, }, { name: 'Opt 3', value: '3', group: '', }, { name: 'Opt 4', value: '4', }, ], buttonTitle: 'Show dialog', }, { items: [ { name: 'Opt 1', value: '1', }, { name: 'Opt 2', value: '2', selected: false, }, { name: 'Opt 3', value: '3', }, { name: 'Opt 4', value: '4', }, ], buttonTitle: 'Show dialog', position: Dialogs.Dialog.DialogVerticalPosition.TOP, showArrow: true, }, { items: [ { name: 'Opt 1', value: '1', selected: false, }, { name: 'Opt 2', value: '2', }, { name: 'Opt 3', value: '3', }, { name: 'Opt 4', value: '4', }, ], buttonTitle: 'Show dialog', position: Dialogs.Dialog.DialogVerticalPosition.BOTTOM, showArrow: true, }, { items: [ { name: 'Opt 1', value: '1', group: 'Group 1', selected: false, }, { name: 'Opt 2', value: '2', group: 'Group 1', }, { name: 'Opt 3', value: '3', group: 'Group 2', }, { name: 'Opt 4', value: '4', group: 'Group 2', }, ], buttonTitle: 'Show dialog', position: Dialogs.Dialog.DialogVerticalPosition.TOP, showArrow: true, hasGroups: true, }, { items: [ { name: 'Option 1', value: '1', selected: true, }, { name: 'Option 2', value: '2', }, { name: 'Option 3', value: '3', }, { name: 'Option 4', value: '4', }, ], showArrow: true, }, { items: [ { name: 'Option 1', value: '1', selected: true, }, ], buttonTitle: 'Disabled', disabled: true, }, ]; const root = document.getElementById('root'); menus.forEach((menu, i) => { const allItems: Menus.Menu.MenuItem[] = []; const selectMenu = new Menus.SelectMenu.SelectMenu(); if (menu.buttonTitle) { selectMenu.buttonTitle = menu.buttonTitle; } selectMenu.position = menu.position || Dialogs.Dialog.DialogVerticalPosition.BOTTOM; const firstMenuGroup = new Menus.SelectMenu.SelectMenuGroup(); firstMenuGroup.name = 'Group 1'; const secondMenuGroup = new Menus.SelectMenu.SelectMenuGroup(); secondMenuGroup.name = 'Group 2'; selectMenu.showArrow = Boolean(menu.showArrow); selectMenu.disabled = Boolean(menu.disabled); menu.items.forEach((item, j) => { const selectMenuItem = new Menus.Menu.MenuItem(); selectMenuItem.value = item.value; selectMenuItem.selected = Boolean(item.selected); const itemContent = document.createElement('div'); itemContent.textContent = item.name; selectMenuItem.appendChild(itemContent); if (menu.hasGroups && j < 2) { firstMenuGroup.appendChild(selectMenuItem); } else if (menu.hasGroups) { secondMenuGroup.appendChild(selectMenuItem); } else { selectMenu.appendChild(selectMenuItem); } allItems.push(selectMenuItem); }); if (menu.hasGroups) { selectMenu.appendChild(firstMenuGroup); selectMenu.appendChild(secondMenuGroup); } if (root) { const ph = document.createElement('div'); ph.classList.add('place-holder'); ph.setAttribute('id', `place-holder-${i + 1}`); root.appendChild(ph); const result = document.createElement('div'); ph.appendChild(result); selectMenu.addEventListener('selectmenuselected', (_evt: Event) => { const evt = _evt as Menus.SelectMenu.SelectMenuItemSelectedEvent; let item = null; for (let i = 0; i < allItems.length; i++) { allItems[i].selected = allItems[i].value === evt.itemValue; if (allItems[i].selected) { item = allItems[i]; } } if (!item) { return; } result.innerText = `Selected option: ${item.innerText.trim()}`; }); ph.appendChild(selectMenu); } });