PluginProbe ʕ •ᴥ•ʔ
VK Blocks / 1.126.2
VK Blocks v1.126.2
1.126.4 1.126.3 1.126.1 1.126.2 1.126.0 1.125.0 1.124.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 / utils / is-parent-reusable-block.js
vk-blocks / src / utils Last commit date
store 3 months ago GenerateBgImage.js 3 months ago _breakpoints.scss 1 week ago block-duplicate-helper.js 3 months ago capitalize.js 3 months ago color-code-to-class.js 3 months ago color-slug-to-color-code.js 3 months ago common.scss 1 week ago convert-to-grid.js 3 months ago default-color-palette.js 3 months ago delete-from-array.js 3 months ago depModules.js 3 months ago disable-links.js 2 months ago empty-string-to-undefined.js 3 months ago example-data.js 3 months ago fixBrokenUnicode.js 3 months ago font-awesome-new.js 1 week ago font-awesome-version.js 3 months ago font-awesome.js 3 months ago formatNumCol.js 3 months ago gradient-slug-to-gradient-code.js 3 months ago heading-level-utils.js 3 months ago hex-to-rgba.js 3 months ago horizontal-scroll-controls.js 3 months ago icon-label.js 2 months ago is-excludes-blocks.js 3 months ago is-gradient-style.js 3 months ago is-hex-color.js 3 months ago is-not-json.js 3 months ago is-parent-reusable-block.js 1 month ago merge-colors.js 3 months ago multi-array-flaten.js 3 months ago removeProperty.js 3 months ago replaceClientId.js 3 months ago sanitizeSlug.js 3 months ago settings-page-url.js 2 months ago strip-html.js 3 months ago taxonomy-utils.js 3 months ago to-number.js 3 months ago to-preset-spacing-var.js 3 months ago unit-options.js 3 months ago wrap-unwrap.js 3 months ago
is-parent-reusable-block.js
92 lines
1 import { select } from '@wordpress/data';
2
3 export const isParentReusableBlock = (clientId) => {
4 const blockEditor = select('core/block-editor');
5 const parents = blockEditor?.getBlockParentsByBlockName?.(clientId, [
6 'core/block',
7 'core/template-part',
8 ]);
9 return Array.isArray(parents) && parents.length ? true : false;
10 };
11
12 /**
13 * エディタ�
14 に、自分以外で同じ blockId を持つブロックが存在するか(= blockId 衝突)を調べる。
15 *
16 * blockId はブロック複製時に複製�
17 �と同じ値がコピーされるため、複製直後は
18 * 「自分以外に同一 blockId のブロックがある」状�
19 �になる。この状�
20 �を衝突として検出する。
21 * 通常のリロード(複製ではない)では同一 blockId のブロックは自分だけなので衝突しない。
22 *
23 * @param {string} clientId 判定対象ブロックの clientId
24 * @param {string} blockId 判定対象ブロックの現在の blockId 属性値
25 * @return {boolean} 自分以外に同一 blockId のブロックがあれば true
26 */
27 export const hasBlockIdCollision = (clientId, blockId) => {
28 // blockId が未確定なら衝突判定の対象外(呼び出し側で undefined を別途処理する)
29 if (!blockId) {
30 return false;
31 }
32 const blockEditor = select('core/block-editor');
33 // エディタ�
34 の�
35 �ブロック(ネスト含む)の clientId を取得
36 const allClientIds = blockEditor?.getClientIdsWithDescendants?.() ?? [];
37 // 自分以外で blockId が一致するブロックがあれば衝突
38 return allClientIds.some((id) => {
39 if (id === clientId) {
40 return false;
41 }
42 const attrs = blockEditor?.getBlockAttributes?.(id);
43 return attrs?.blockId === blockId;
44 });
45 };
46
47 /**
48 * blockId を clientId に更新(再採番)すべきかどうかを判定する純粋関数。
49 *
50 * issue #2556 対応:
51 * 従来は「再利用ブロック外なら毎回更新」していたため、通常リロードのたびに
52 * blockId が新しい clientId へ churn し、デリミタコメントの差分で投稿が dirty 化していた。
53 * そこで「複製による実衝突があるときだけ再採番する」案 A(真の衝突検出)に変更する。
54 *
55 * 再採番する条件:
56 * - blockId が未確定(undefined)、または
57 * - 再利用ブロック外 かつ エディタ�
58 に同一 blockId を持つ自分以外のブロックがある(実衝突)
59 *
60 * 再利用ブロック(同期パターン)�
61 では複数インスタンスが同じ blockId を�
62 �有するのが正常なので、
63 * 衝突検出は適用しない(= 再利用ブロック�
64 では undefined のときのみ採番する)。
65 * これにより複製時の CSS-ID 衝突回避という当初目的を保ちつつ、通常リロードでの
66 * dirty 化を防ぐ。
67 *
68 * @param {Object} params
69 * @param {string|undefined} params.blockId ブロックに保存済みの blockId 属性値
70 * @param {boolean} params.isInReusableBlock 再利用ブロック�
71 かどうか(isParentReusableBlock の結果)
72 * @param {boolean} params.hasCollision 自分以外に同一 blockId のブロックがあるか(実衝突)
73 * @return {boolean} true なら setAttributes({ blockId: clientId }) を呼ぶべき
74 */
75 export const shouldUpdateBlockId = ({
76 blockId,
77 isInReusableBlock,
78 hasCollision,
79 }) => {
80 if (blockId === undefined) {
81 return true;
82 }
83 // 再利用ブロック�
84 では衝突検出しない(�
85 �有 blockId が正常なため)
86 if (isInReusableBlock) {
87 return false;
88 }
89 // 再利用ブロック外では、実際に blockId が衝突しているときだけ再採番する
90 return hasCollision === true;
91 };
92