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 / utils / block-duplicate-helper.js
vk-blocks / src / utils Last commit date
store 2 months ago GenerateBgImage.js 2 months ago block-duplicate-helper.js 2 months ago capitalize.js 2 months ago color-code-to-class.js 2 months ago color-slug-to-color-code.js 2 months ago common.scss 3 weeks ago convert-to-grid.js 2 months ago default-color-palette.js 2 months ago delete-from-array.js 2 months ago depModules.js 2 months ago disable-links.js 3 weeks ago empty-string-to-undefined.js 2 months ago example-data.js 2 months ago fixBrokenUnicode.js 2 months ago font-awesome-new.js 3 weeks ago font-awesome-version.js 2 months ago font-awesome.js 2 months ago formatNumCol.js 2 months ago gradient-slug-to-gradient-code.js 2 months ago heading-level-utils.js 2 months ago hex-to-rgba.js 2 months ago horizontal-scroll-controls.js 2 months ago icon-label.js 3 weeks ago is-excludes-blocks.js 2 months ago is-gradient-style.js 2 months ago is-hex-color.js 2 months ago is-not-json.js 2 months ago is-parent-reusable-block.js 1 week ago merge-colors.js 2 months ago multi-array-flaten.js 2 months ago removeProperty.js 2 months ago replaceClientId.js 2 months ago sanitizeSlug.js 2 months ago settings-page-url.js 3 weeks ago strip-html.js 2 months ago taxonomy-utils.js 2 months ago to-number.js 2 months ago to-preset-spacing-var.js 2 months ago unit-options.js 2 months ago wrap-unwrap.js 2 months ago
block-duplicate-helper.js
139 lines
1 /**
2 * ブロックID重複検出の�
3 �通ユーティリティ関数
4 * ブロックIDの生成、重複検出、再帰的なブロック取得などの�
5 �通処理
6 */
7
8 /**
9 * ユニークなブロックIDを生成
10 * @return {string} ユニークなID
11 */
12 export const generateUniqueBlockId = () => {
13 return (
14 Math.random().toString(36).substring(2, 11) +
15 '-' +
16 Math.random().toString(36).substring(2, 6) +
17 '-' +
18 Math.random().toString(36).substring(2, 6) +
19 '-' +
20 Math.random().toString(36).substring(2, 6) +
21 '-' +
22 Math.random().toString(36).substring(2, 14)
23 );
24 };
25
26 /**
27 * ブロックを再帰的に取得(ネストされたブロックも含む)
28 * @param {Array} blocks - ブロック�
29 �列
30 * @return {Array} すべてのブロック(ネストされたものも含む)
31 */
32 export const getAllBlocksRecursively = (blocks) => {
33 let allBlocks = [];
34 blocks.forEach((block) => {
35 allBlocks.push(block);
36 if (block.innerBlocks && block.innerBlocks.length > 0) {
37 allBlocks = allBlocks.concat(
38 getAllBlocksRecursively(block.innerBlocks)
39 );
40 }
41 });
42 return allBlocks;
43 };
44
45 /**
46 * 重複検出を�
47 延実行するヘルパー
48 * @param {Function} checkFn - 実行する関数
49 * @param {number} delay - �
50 延時間(ミリ秒)
51 * @return {Function} クリーンアップ関数
52 */
53 export const scheduleDuplicateCheck = (checkFn, delay = 100) => {
54 checkFn(); // 即座に実行
55 const timeoutId = setTimeout(checkFn, delay); // �
56 延実行
57 return () => clearTimeout(timeoutId); // クリーンアップ関数を返す
58 };
59
60 /**
61 * 複製されたブロックを判定する
62 * @param {Array} allBlocks - すべてのブロック�
63 �列
64 * @param {string} blockName - 検索するブロック名
65 * @param {string} blockId - 検索するブロックID
66 * @param {string} currentClientId - 現在のブロックのクライアントID
67 * @return {boolean} 現在のブロックが複製された方の場合true
68 */
69 export const isCurrentBlockDuplicate = (
70 allBlocks,
71 blockName,
72 blockId,
73 currentClientId
74 ) => {
75 const duplicateBlocks = allBlocks.filter(
76 (block) =>
77 block.name === blockName &&
78 block.attributes &&
79 block.attributes.blockId === blockId
80 );
81
82 if (duplicateBlocks.length <= 1) {
83 return false; // 重複なし
84 }
85
86 // 複数のブロックが同じIDを持っている場合
87 // ブロックの�
88 �置順序で判定(より後に�
89 �置されたブロックが複製された方)
90 const currentBlock = duplicateBlocks.find(
91 (block) => block.clientId === currentClientId
92 );
93 const otherBlocks = duplicateBlocks.filter(
94 (block) => block.clientId !== currentClientId
95 );
96
97 if (!currentBlock || otherBlocks.length === 0) {
98 return false;
99 }
100
101 // 現在のブロックが他のブロックより後に�
102 �置されている場合、複製された方
103 // ブロックの�
104 �置順序は、DOM�
105 での位置で判定
106 const currentBlockIndex = allBlocks.findIndex(
107 (block) => block.clientId === currentClientId
108 );
109 const otherBlockIndices = otherBlocks
110 .map((block) =>
111 allBlocks.findIndex((b) => b.clientId === block.clientId)
112 )
113 .filter((index) => index !== -1);
114
115 // 現在のブロックが他のブロックより後に�
116 �置されている場合、複製された方
117 return otherBlockIndices.some(
118 (otherIndex) => currentBlockIndex > otherIndex
119 );
120 };
121
122 /**
123 * WordPressのブロックエディタからすべてのブロックを取得
124 * @return {Array|null} すべてのブロック�
125 �列、取得できない場合はnull
126 */
127 export const getAllBlocksFromEditor = () => {
128 if (typeof window !== 'undefined' && window.wp && window.wp.data) {
129 const { select } = window.wp.data;
130 const { getBlocks } = select('core/block-editor');
131
132 if (getBlocks) {
133 const rootBlocks = getBlocks();
134 return getAllBlocksRecursively(rootBlocks);
135 }
136 }
137 return null;
138 };
139