PluginProbe
Code Block Pro – Beautiful Syntax Highlighting / 1.13.0
Code Block Pro – Beautiful Syntax Highlighting v1.13.0
1.27.1 1.27.2 1.27.3 1.27.4 1.27.5 1.27.6 1.27.7 1.28.0 1.3.0 1.4.0 1.5.0 1.5.1 1.5.2 1.6.0 1.7.0 1.8.0 1.9.0 1.9.1 1.9.2 1.9.3 trunk 1.1.0 1.10.0 1.11.0 1.11.1 All 63 releases
code-block-pro / src / editor / controls / Toolbar.tsx

Toolbar.tsx in Code Block Pro – Beautiful Syntax Highlighting 1.13.0, at src/editor/controls/Toolbar.tsx

77 lines 2.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import { BlockControls } from '@wordpress/block-editor';
2 import {
3 ToolbarGroup,
4 Dropdown,
5 Button,
6 NavigableMenu,
7 MenuItem,
8 MenuGroup,
9 } from '@wordpress/components';
10 import { __ } from '@wordpress/i18n';
11 import { useLanguage } from '../../hooks/useLanguage';
12 import { AttributesPropsAndSetter, Lang } from '../../types';
13 import { languages } from '../../util/languages';
14
15 export const ToolbarControls = ({
16 attributes,
17 setAttributes,
18 }: AttributesPropsAndSetter) => {
19 const [language, setLanguage] = useLanguage({ attributes, setAttributes });
20 return (
21 <BlockControls>
22 <ToolbarGroup className="code-block-pro-editor">
23 <Dropdown
24 renderContent={() => (
25 <DropdownLanguageSelect
26 language={language}
27 setLanguage={setLanguage}
28 />
29 )}
30 renderToggle={({ isOpen, onToggle }) => (
31 <Button
32 onClick={onToggle}
33 aria-expanded={isOpen}
34 aria-haspopup="true">
35 {(languages[language] ?? language).replace(
36 'ANSI',
37 'ANSI (experimental)',
38 )}
39 </Button>
40 )}
41 />
42 </ToolbarGroup>
43 </BlockControls>
44 );
45 };
46 type LanguageSetterAndGetter = {
47 language: Lang;
48 setLanguage: (language: Lang) => void;
49 };
50 const DropdownLanguageSelect = ({
51 language,
52 setLanguage,
53 }: LanguageSetterAndGetter) => (
54 <NavigableMenu
55 orientation="vertical"
56 role="menu"
57 style={{
58 minWidth: '200px',
59 }}>
60 <MenuGroup label={__('Select language', 'code-block-pro')}>
61 {Object.entries(languages).map(([value, label]) => (
62 <MenuItem
63 key={value}
64 role="menuitem"
65 style={{ width: '100%' }}
66 isSelected={language === value}
67 variant={language === value ? 'primary' : undefined}
68 onClick={() => {
69 setLanguage(value as Lang);
70 }}>
71 {label}
72 </MenuItem>
73 ))}
74 </MenuGroup>
75 </NavigableMenu>
76 );
77