PluginProbe ʕ •ᴥ•ʔ
VK Blocks / trunk
VK Blocks vtrunk
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 / highlighter / inline.js
vk-blocks / src / extensions / common / highlighter Last commit date
common.js 2 months ago icon.svg 2 months ago index.js 2 months ago inline.js 2 months ago
inline.js
112 lines
1 /**
2 * WordPress dependencies
3 */
4 import {
5 removeFormat,
6 getActiveFormat,
7 useAnchor,
8 useAnchorRef,
9 } from '@wordpress/rich-text';
10 import { ColorPalette, useCachedTruthy } from '@wordpress/block-editor';
11 import { Popover } from '@wordpress/components';
12
13 /**
14 * Internal dependencies
15 */
16 import { highlighColor as settings, highlighterOnApply } from './common';
17
18 export function getGradientDirectionByWritingMode(contentRef) {
19 if (!contentRef?.current) {
20 return '';
21 }
22 let el = contentRef.current;
23 while (el) {
24 const writingMode = window.getComputedStyle(el).writingMode;
25 if (writingMode && writingMode.startsWith('vertical')) {
26 if (writingMode === 'vertical-rl') {
27 return 'to left';
28 }
29 if (writingMode === 'vertical-lr') {
30 return 'to right';
31 }
32 return 'to left'; // デフォルトで縦書きは左
33 }
34 el = el.parentElement;
35 }
36 return ''; // 横書き
37 }
38
39 export function getActiveColors(value, name) {
40 const activeColorFormat = getActiveFormat(value, name);
41
42 if (!activeColorFormat) {
43 return undefined;
44 }
45
46 return activeColorFormat.attributes.data;
47 }
48
49 function ColorPicker({ name, value, onChange, setIsAddingColor, contentRef }) {
50 const onColorChange = (color) => {
51 if (color) {
52 // select color on palette
53 const direction = getGradientDirectionByWritingMode(contentRef);
54 highlighterOnApply({
55 color,
56 value,
57 onChange,
58 direction,
59 });
60 } else {
61 // clear palette
62 onChange(removeFormat(value, name));
63 setIsAddingColor(false);
64 }
65 };
66
67 const activeColor = getActiveColors(value, name);
68
69 return <ColorPalette value={activeColor} onChange={onColorChange} />;
70 }
71
72 export default function InlineColorUI({
73 name,
74 value,
75 onChange,
76 onClose,
77 contentRef,
78 setIsAddingColor,
79 }) {
80 /*
81 As you change the text color by typing a HEX value into a field,
82 the return value of document.getSelection jumps to the field you're editing,
83 not the highlighted text. Given that useAnchor uses document.getSelection,
84 it will return null, since it can't find the <mark> element within the HEX input.
85 This caches the last truthy value of the selection anchor reference.
86 */
87
88 // NOTE: useAnchorRefが非推奨になったのでフォールバック WP6.0以下をサポートしなくなったら削除すること #1456
89 const existsUseAnchor = typeof useAnchor === 'function';
90 const _useAnchor = existsUseAnchor ? useAnchor : useAnchorRef;
91 const useAnchorObj = existsUseAnchor
92 ? { editableContentElement: contentRef.current, value, settings }
93 : { ref: contentRef, value };
94 const popoverAnchor = useCachedTruthy(_useAnchor(useAnchorObj));
95
96 return (
97 <Popover
98 onClose={onClose}
99 className="vk-blocks-format-popover components-inline-color-popover"
100 anchor={popoverAnchor}
101 >
102 <ColorPicker
103 name={name}
104 value={value}
105 onChange={onChange}
106 setIsAddingColor={setIsAddingColor}
107 contentRef={contentRef}
108 />
109 </Popover>
110 );
111 }
112