PluginProbe ʕ •ᴥ•ʔ
VK Blocks / 1.123.0
VK Blocks v1.123.0
1.123.0 1.122.0 1.121.0 1.120.0 1.119.2 1.119.1 1.119.0 1.118.7 1.82.0.0 1.82.0.1 1.83.0.0 1.83.0.1 1.84.0.0 1.84.0.1 1.85.0.2 1.85.0.3 1.85.1.0 1.85.1.1 1.86.0.0 1.86.0.1 1.86.1.0 1.87.0.0 1.87.0.1 1.88.0.1 1.88.0.2 1.89.0.0 1.9.2 1.90.0.0 1.90.0.1 1.90.1.1 1.91.0.0 1.91.1.1 1.92.0.0 1.92.0.1 1.92.1.0 1.92.1.1 1.93.0.0 trunk 1.93.0.1 0.1.1 1.93.1.0 0.10.3 1.93.1.1 0.11.0 1.94.0.0 0.12.6 1.94.0.1 0.15.1 1.94.1.0 0.16.2 1.94.2.1 0.17.6 1.94.2.2 0.2.2 1.95.0.3 0.22.4 1.95.0.4 0.26.7 1.96.2.0 0.3.2 1.96.2.1 0.31.0 1.97.0.1 0.35.5 1.97.0.2 0.37.5 1.99.0.0 0.38.8 1.99.0.1 0.39.4 0.4.7 0.41.0 0.42.0 0.44.13 0.45.2 0.46.1 0.47.0 0.48.0 0.49.8 0.5.2 0.50.3 0.51.0 0.52.2 0.53.2 0.54.0 0.55.0 0.56.2 0.56.3 0.57.6 0.58.10 0.59.0 0.6.0 0.60.1 0.61.2 0.7.1 0.8.2 1.0.16 1.10.0 1.100.0.0 1.100.0.1 1.102.0.0 1.102.0.1 1.103.0.0 1.104.0.0 1.104.0.1 1.105.1.0 1.105.1.1 1.106.0.0 1.106.0.1 1.107.0.0 1.107.0.1 1.107.0.2 1.108.0.0 1.108.0.1 1.109.0.0 1.109.0.1 1.11.4 1.110.0.0 1.110.0.1 1.111.0.0 1.111.0.1 1.111.0.2 1.112.0.0 1.112.0.1 1.113.0.0 1.113.0.1 1.114.0.0 1.114.0.1 1.114.2.0 1.114.2.1 1.115.0.0 1.115.0.1 1.115.1.0 1.115.1.1 1.115.2.0 1.115.2.1 1.116.0.0 1.116.0.1 1.116.1.0 1.116.1.1 1.116.2.0 1.117.0.0 1.117.0.1 1.117.1.0 1.118.2 1.118.5 1.12.0 1.13.2 1.14.1 1.15.1 1.16.11 1.17.0 1.18.6 1.19.0 1.19.1 1.2.3 1.20.7 1.21.0 1.22.4 1.23.0 1.24.5 1.25.1 1.26.2 1.27.7.2 1.28.0.1 1.29.2.0 1.3.9 1.30.0.1 1.31.0.1 1.32.0.2 1.33.2.1 1.36.1.5 1.37.0.0 1.39.2.1 1.4.6 1.40.0.1 1.40.1.0 1.40.1.1 1.41.0.0 1.41.0.1 1.41.2.2 1.41.2.3 1.43.0.0 1.43.0.1 1.43.0.2 1.44.0.0 1.44.0.1 1.45.0.0 1.45.0.1 1.46.0.0 1.46.0.1 1.47.0.0 1.47.0.1 1.47.1.0 1.48.0.0 1.48.0.1 1.48.0.2 1.48.1.0 1.48.1.1 1.5.0 1.50.0.0 1.50.0.1 1.51.0.0 1.51.0.1 1.52.0.0 1.52.0.1 1.53.0.0 1.53.0.1 1.54.0.0 1.54.0.1 1.55.0.0 1.55.0.1 1.56.0.0 1.56.0.1 1.57.0.0 1.57.0.2 1.57.0.3 1.57.0.4 1.57.0.5 1.57.1.0 1.57.1.1 1.57.1.2 1.58.0.0 1.58.0.1 1.59.0.0 1.59.0.1 1.6.0 1.60.0.0 1.60.0.1 1.63.0.0 1.63.0.1 1.64.0.0 1.64.0.1 1.64.1.0 1.64.1.2 1.67.0.0 1.67.0.1 1.68.0.0 1.68.0.1 1.69.0.0 1.69.0.1 1.69.1.1 1.69.1.2 1.7.1 1.70.0.0 1.70.0.1 1.71.0.0 1.71.0.1 1.72.0.0 1.72.1.0 1.72.1.1 1.73.0.0 1.73.0.1 1.74.0.0 1.74.0.1 1.75.0.0 1.75.1.0 1.75.1.1 1.76.0.0 1.76.0.1 1.76.1.0 1.76.1.1 1.76.2.0 1.76.2.1 1.77.0.0 1.77.0.1 1.78.0.0 1.78.0.1 1.79.0.0 1.79.0.1 1.79.0.2 1.79.0.3 1.79.1.0 1.79.1.1 1.8.2 1.80.1.0 1.80.1.1 1.80.1.2 1.81.0.1 1.81.0.2
vk-blocks / src / extensions / common / inline-font-size / inline.js
vk-blocks / src / extensions / common / inline-font-size Last commit date
icon.svg 2 months ago index.js 2 months ago inline.js 2 weeks ago
inline.js
151 lines
1 /**
2 * WordPress dependencies
3 */
4 import {
5 applyFormat,
6 removeFormat,
7 getActiveFormat,
8 useAnchor,
9 useAnchorRef,
10 } from '@wordpress/rich-text';
11 import { useCachedTruthy } from '@wordpress/block-editor';
12 import { Popover, FontSizePicker, Button } from '@wordpress/components';
13 import { __ } from '@wordpress/i18n';
14 import { useMemo } from '@wordpress/element';
15
16 /**
17 * Internal dependencies
18 */
19 import { inlineFontSize as settings } from './index';
20
21 const fontSizes = [
22 {
23 name: __('Small', 'vk-blocks'),
24 slug: 'small',
25 size: '12px',
26 },
27 {
28 name: __('Normal', 'vk-blocks'),
29 slug: 'normal',
30 size: '16px',
31 },
32 {
33 name: __('Big', 'vk-blocks'),
34 slug: 'big',
35 size: '18px',
36 },
37 {
38 name: __('Extra big', 'vk-blocks'),
39 slug: 'extra-big',
40 size: '21px',
41 },
42 ];
43
44 function parseFontSize(fontSize = '') {
45 return fontSize.replace('font-size:', '').replace(/;/g, '').trim();
46 }
47
48 export function getActiveInlineFontSize(value, name) {
49 const activeInlineFontSizeFormat = getActiveFormat(value, name);
50
51 if (!activeInlineFontSizeFormat) {
52 return undefined;
53 }
54
55 if (activeInlineFontSizeFormat.attributes.data !== undefined) {
56 return activeInlineFontSizeFormat.attributes.data;
57 }
58
59 return parseFontSize(activeInlineFontSizeFormat.attributes.style);
60 }
61
62 function InlineFontSizePicker({ name, value, onChange, setIsSettingFontSize }) {
63 const pickerStyle = {
64 width: '200px',
65 };
66 const buttonStyle = {
67 marginTop: '16px',
68 padding: '0 16px',
69 height: '30px',
70 };
71
72 const onInlineFontSizeChange = (newFontSize) => {
73 if (!newFontSize) {
74 // reset font size
75 onChange(removeFormat(value, name));
76 } else if (newFontSize.match(/\d/)) {
77 // Applies only Font Size has a numeric value.
78 onChange(
79 applyFormat(value, {
80 type: name,
81 attributes: {
82 data: `${newFontSize}`,
83 style: `font-size: ${newFontSize};`,
84 },
85 })
86 );
87 }
88 };
89
90 const activeFontSize = getActiveInlineFontSize(value, name);
91
92 return (
93 <div style={pickerStyle}>
94 <FontSizePicker
95 __nextHasNoMarginBottom
96 fontSizes={fontSizes}
97 value={activeFontSize}
98 onChange={onInlineFontSizeChange}
99 />
100 <Button
101 onClick={() => {
102 setIsSettingFontSize(false);
103 }}
104 isSmall
105 variant="secondary"
106 style={buttonStyle}
107 >
108 {__('Apply', 'vk-blocks')}
109 </Button>
110 </div>
111 );
112 }
113
114 export default function InlineFontSizeUI({
115 name,
116 value,
117 onChange,
118 onClose,
119 contentRef,
120 setIsSettingFontSize,
121 }) {
122 // NOTE: useAnchorRefが非推奨になったのでフォールバック WP6.0以下をサポートしなくなったら削除すること #1456
123 const existsUseAnchor = typeof useAnchor === 'function';
124 const _useAnchor = existsUseAnchor ? useAnchor : useAnchorRef;
125 const useAnchorObj = existsUseAnchor
126 ? { editableContentElement: contentRef.current, value, settings }
127 : { ref: contentRef, value };
128 const popoverAnchor = useCachedTruthy(_useAnchor(useAnchorObj));
129
130 const rect = useMemo(() => popoverAnchor.getBoundingClientRect(), []);
131 if (!!popoverAnchor?.ownerDocument) {
132 popoverAnchor.getBoundingClientRect = () => rect;
133 }
134
135 return (
136 <Popover
137 onClose={onClose}
138 className="vk-blocks-format-popover components-inline-color-popover"
139 anchor={existsUseAnchor ? popoverAnchor : undefined}
140 anchorRef={existsUseAnchor ? undefined : popoverAnchor}
141 >
142 <InlineFontSizePicker
143 name={name}
144 value={value}
145 onChange={onChange}
146 setIsSettingFontSize={setIsSettingFontSize}
147 />
148 </Popover>
149 );
150 }
151