chrome-devtools-frontend
Version:
Chrome DevTools UI
204 lines (198 loc) • 4.65 kB
text/typescript
// 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);
}
});