PluginProbe
Code Block Pro – Beautiful Syntax Highlighting / 1.28.0
Code Block Pro – Beautiful Syntax Highlighting v1.28.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 / front / BlockOutput.tsx

BlockOutput.tsx in Code Block Pro – Beautiful Syntax Highlighting 1.28.0, at src/front/BlockOutput.tsx

117 lines 3.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import { useBlockProps as blockProps, RichText } from '@wordpress/block-editor';
2 import { applyFilters } from '@wordpress/hooks';
3 import classNames from 'classnames';
4 import defaultThemes from '../defaultThemes.json';
5 import { ButtonList } from '../editor/components/buttons/ButtonList';
6 import { FooterType } from '../editor/components/FooterSelect';
7 import { HeaderType } from '../editor/components/HeaderSelect';
8 import { SeeMoreType } from '../editor/components/SeeMoreSelect';
9 import type { Attributes, ThemeOption } from '../types';
10 import { findLineNumberColor } from '../util/colors';
11 import { fontFamilyLong, maybeClamp } from '../util/fonts';
12 import './style.css';
13
14 export const BlockOutput = ({ attributes }: { attributes: Attributes }) => {
15 const {
16 clampFonts,
17 code,
18 codeHTML,
19 disablePadding,
20 enableBlurring,
21 enableHighlighting,
22 footerType,
23 fontSize,
24 fontFamily,
25 highestLineNumber,
26 highlightingHover,
27 lineHeight,
28 lineHighlightColor,
29 lineNumbers,
30 lineNumbersWidth,
31 removeBlurOnHover,
32 startingLineNumber,
33 tabSize,
34 theme,
35 useTabs,
36 } = attributes;
37
38 const fontFamilyRatio = (fontFamily: string) =>
39 fontFamily === 'Code-Pro-Fantasque-Sans-Mono' ? 0.5 : 0.6;
40
41 // To add custom styles
42 const themes = applyFilters(
43 'blocks.codeBlockPro.themes',
44 defaultThemes,
45 ) as ThemeOption;
46 const styles = themes[theme]?.styles;
47 return (
48 <div
49 {...blockProps.save({
50 className: classNames({
51 'padding-disabled': disablePadding,
52 'padding-bottom-disabled': footerType && footerType !== 'none',
53 'cbp-has-line-numbers': lineNumbers,
54 'cbp-blur-enabled': enableBlurring,
55 'cbp-unblur-on-hover': removeBlurOnHover,
56 'cbp-highlight-hover': highlightingHover,
57 }),
58 })}
59 data-code-block-pro-font-family={fontFamily}
60 style={
61 {
62 fontSize: maybeClamp(fontSize, clampFonts),
63 // Tiny check to avoid block invalidation error
64 fontFamily: fontFamilyLong(fontFamily),
65 '--cbp-line-number-color': lineNumbers
66 ? findLineNumberColor(attributes)
67 : undefined,
68 '--cbp-line-number-start':
69 Number(startingLineNumber) > 1 ? startingLineNumber : undefined,
70 '--cbp-line-number-width': highestLineNumber
71 ? `calc(${
72 String(highestLineNumber).length
73 } * ${fontFamilyRatio(fontFamily)} * ${fontSize})`
74 : lineNumbersWidth
75 ? `${lineNumbersWidth}px`
76 : undefined,
77 '--cbp-line-highlight-color':
78 enableHighlighting || highlightingHover
79 ? lineHighlightColor
80 : undefined,
81 lineHeight: maybeClamp(lineHeight, clampFonts),
82 '--cbp-tab-width':
83 useTabs === undefined
84 ? undefined // bw compatibility
85 : String(tabSize),
86 tabSize:
87 useTabs === undefined
88 ? undefined // bw compatibility
89 : 'var(--cbp-tab-width, 2)',
90 ...Object.entries(styles ?? {}).reduce(
91 (acc, [key, value]) => ({
92 ...acc,
93 [`--shiki-${key}`]: value,
94 }),
95 {},
96 ),
97 ...(applyFilters(
98 'blocks.codeBlockPro.additionalOutputAttributes',
99 {},
100 attributes,
101 ) as object),
102 } as React.CSSProperties
103 }
104 >
105 {code?.length > 0 ? (
106 <>
107 <HeaderType {...attributes} />
108 <ButtonList {...attributes} />
109 <RichText.Content value={codeHTML} />
110 <FooterType {...attributes} />
111 <SeeMoreType {...attributes} />
112 </>
113 ) : null}
114 </div>
115 );
116 };
117