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
← All changes | src/index.tsx +96 -25 1.3.01.13.0 View file →
@@ -1,18 +1,24 @@
1 -import { RichText, useBlockProps as blockProps } from '@wordpress/block-editor';
2 -import { registerBlockType } from '@wordpress/blocks';
1 +import { useBlockProps as blockProps } from '@wordpress/block-editor';
2 +import { createBlock, registerBlockType } from '@wordpress/blocks';
3 3 import { addFilter } from '@wordpress/hooks';
4 4 import { __ } from '@wordpress/i18n';
5 +import classnames from 'classnames';
5 6 import blockConfig from './block.json';
6 7 import { Edit } from './editor/Edit';
7 8 import { BlockFilter } from './editor/components/BlockFilter';
9 +import { FooterType } from './editor/components/FooterSelect';
10 +import { HeaderType } from './editor/components/HeaderSelect';
11 +import { SeeMoreType } from './editor/components/SeeMoreSelect';
8 12 import { SidebarControls } from './editor/controls/Sidebar';
9 13 import { ToolbarControls } from './editor/controls/Toolbar';
10 14 import './editor/editor.css';
15 +import { BlockOutput } from './front/BlockOutput';
11 16 import { CopyButton } from './front/CopyButton';
12 -import './front/style.css';
13 17 import { blockIcon } from './icons';
14 -import { Attributes } from './types';
18 +import { Attributes, Lang } from './types';
19 +import { fontFamilyLong, maybeClamp } from './util/fonts';
20 +import { getMainAlias } from './util/languages';
15 21
16 22 registerBlockType<Attributes>(blockConfig.name, {
17 23 ...blockConfig,
18 24 icon: blockIcon,
@@ -27,10 +33,31 @@
27 33 textColor: { type: 'string', default: '#f8f8f2' },
28 34 fontSize: { type: 'string' },
29 35 fontFamily: { type: 'string' },
30 36 lineHeight: { type: 'string' },
37 + clampFonts: { type: 'boolean' },
38 + editorHeight: { type: 'string' },
31 39 lineNumbers: { type: 'boolean' },
32 - startingLineNumber: { type: 'number', default: 1 },
40 + headerType: { type: 'string' },
41 + headerString: { type: 'string' },
42 + disablePadding: { type: 'boolean' },
43 + footerType: { type: 'string' },
44 + footerString: { type: 'string' },
45 + footerLink: { type: 'string' },
46 + footerLinkTarget: { type: 'boolean' },
47 + enableMaxHeight: { type: 'boolean' },
48 + seeMoreType: { type: 'string' },
49 + seeMoreString: { type: 'string' },
50 + seeMoreAfterLine: { type: 'string' },
51 + seeMoreTransition: { type: 'boolean' },
52 + startingLineNumber: { type: 'string' },
53 + lineNumbersWidth: { type: 'number' },
54 + enableHighlighting: { type: 'boolean' },
55 + lineHighlights: { type: 'string' },
56 + lineHighlightColor: { type: 'string' },
57 + enableBlurring: { type: 'boolean' },
58 + lineBlurs: { type: 'string' },
59 + removeBlurOnHover: { type: 'boolean' },
33 60 frame: { type: 'boolean' },
34 61 renderType: { type: 'string', default: 'code' },
35 62 label: { type: 'string', default: '' },
36 63 copyButton: { type: 'boolean' },
@@ -52,35 +79,79 @@
52 79 setAttributes={setAttributes}
53 80 />
54 81 <div
55 82 {...blockProps({
56 - className: 'code-block-pro-editor',
83 + className: classnames('code-block-pro-editor', {
84 + 'padding-disabled': attributes.disablePadding,
85 + 'padding-bottom-disabled':
86 + attributes?.footerType &&
87 + attributes?.footerType !== 'none',
88 + 'cbp-has-line-numbers': attributes.lineNumbers,
89 + 'cbp-blur-enabled': attributes.enableBlurring,
90 + 'cbp-unblur-on-hover': attributes.removeBlurOnHover,
91 + }),
57 92 style: {
58 - fontSize: attributes.fontSize,
59 - lineHeight: attributes.lineHeight,
93 + fontSize: maybeClamp(
94 + attributes.fontSize,
95 + attributes.clampFonts,
96 + ),
97 + '--cbp-line-number-color': attributes?.lineNumbers
98 + ? attributes.textColor
99 + : undefined,
100 + '--cbp-line-number-start':
101 + Number(attributes?.startingLineNumber) > 1
102 + ? attributes.startingLineNumber
103 + : undefined,
104 + '--cbp-line-number-width': attributes.lineNumbersWidth
105 + ? `${attributes.lineNumbersWidth}px`
106 + : undefined,
107 + '--cbp-line-highlight-color':
108 + attributes?.enableHighlighting
109 + ? attributes.lineHighlightColor
110 + : undefined,
111 + '--cbp-line-height': attributes.lineHeight,
112 + // Disabled as ligatures will break the editor line widths
113 + // fontFamily: fontFamilyLong(attributes.fontFamily),
114 + fontFamily: fontFamilyLong(''),
115 + lineHeight: maybeClamp(
116 + attributes.lineHeight,
117 + attributes.clampFonts,
118 + ),
60 119 },
61 120 })}>
121 + <HeaderType {...attributes} />
122 + {attributes.copyButton && (
123 + <CopyButton attributes={attributes} />
124 + )}
62 125 <Edit attributes={attributes} setAttributes={setAttributes} />
126 + <FooterType {...attributes} />
127 + <SeeMoreType {...attributes} />
63 128 </div>
64 129 </>
65 130 ),
66 - save: ({ attributes }) => (
67 - <div
68 - {...blockProps.save()}
69 - style={{
70 - fontSize: attributes.fontSize,
71 - lineHeight: attributes.lineHeight,
72 - }}>
73 - {attributes.code?.length > 0 ? (
74 - <>
75 - {attributes.copyButton && (
76 - <CopyButton attributes={attributes} />
77 - )}
78 - <RichText.Content value={attributes.codeHTML} />
79 - </>
80 - ) : null}
81 - </div>
82 - ),
131 + save: ({ attributes }) => <BlockOutput attributes={attributes} />,
132 + transforms: {
133 + from: [
134 + {
135 + type: 'block',
136 + blocks: ['core/code', 'syntaxhighlighter/code'],
137 + transform: (attrs) => {
138 + // eslint-disable-next-line @typescript-eslint/ban-ts-comment
139 + // @ts-ignore-next-line - Why is this reading the block generic?
140 + const { content, language } = attrs;
141 + const decode = (value: string) => {
142 + const txt = document.createElement('textarea');
143 + txt.innerHTML = value;
144 + return txt.value;
145 + };
146 + return createBlock(blockConfig.name, {
147 + code: content ? decode(content) : undefined,
148 + language: getMainAlias(language) as Lang,
149 + });
150 + },
151 + },
152 + ],
153 + },
83 154 });
84 155
85 156 addFilter(
86 157 'editor.BlockEdit',