@wordpress/block-library 8.5.0 → 8.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (287) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/buttons/edit.native.js +1 -1
  3. package/build/buttons/edit.native.js.map +1 -1
  4. package/build/columns/edit.js +10 -8
  5. package/build/columns/edit.js.map +1 -1
  6. package/build/columns/edit.native.js +1 -1
  7. package/build/columns/edit.native.js.map +1 -1
  8. package/build/comments/edit/placeholder.js +8 -5
  9. package/build/comments/edit/placeholder.js.map +1 -1
  10. package/build/cover/index.js +13 -4
  11. package/build/cover/index.js.map +1 -1
  12. package/build/cover/variations.js +29 -0
  13. package/build/cover/variations.js.map +1 -0
  14. package/build/embed/edit.js +13 -14
  15. package/build/embed/edit.js.map +1 -1
  16. package/build/embed/edit.native.js +18 -14
  17. package/build/embed/edit.native.js.map +1 -1
  18. package/build/embed/util.js +39 -12
  19. package/build/embed/util.js.map +1 -1
  20. package/build/gallery/edit.js +1 -0
  21. package/build/gallery/edit.js.map +1 -1
  22. package/build/latest-posts/edit.js +10 -10
  23. package/build/latest-posts/edit.js.map +1 -1
  24. package/build/latest-posts/edit.native.js +3 -3
  25. package/build/latest-posts/edit.native.js.map +1 -1
  26. package/build/media-text/constants.js +17 -1
  27. package/build/media-text/constants.js.map +1 -1
  28. package/build/media-text/edit.js +7 -19
  29. package/build/media-text/edit.js.map +1 -1
  30. package/build/media-text/edit.native.js +6 -5
  31. package/build/media-text/edit.native.js.map +1 -1
  32. package/build/media-text/transforms.js +32 -44
  33. package/build/media-text/transforms.js.map +1 -1
  34. package/build/navigation/edit/index.js +56 -86
  35. package/build/navigation/edit/index.js.map +1 -1
  36. package/build/navigation/edit/inner-blocks.js +4 -1
  37. package/build/navigation/edit/inner-blocks.js.map +1 -1
  38. package/build/navigation/edit/menu-inspector-controls.js +2 -5
  39. package/build/navigation/edit/menu-inspector-controls.js.map +1 -1
  40. package/build/navigation/edit/navigation-menu-selector.js +26 -22
  41. package/build/navigation/edit/navigation-menu-selector.js.map +1 -1
  42. package/build/navigation/edit/unsaved-inner-blocks.js +14 -1
  43. package/build/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  44. package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js +2 -4
  45. package/build/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -1
  46. package/build/navigation/edit/use-create-navigation-menu.js +1 -1
  47. package/build/navigation/edit/use-create-navigation-menu.js.map +1 -1
  48. package/build/navigation/edit/use-navigation-notice.js +1 -1
  49. package/build/navigation/edit/use-navigation-notice.js.map +1 -1
  50. package/build/navigation-link/edit.js +0 -11
  51. package/build/navigation-link/edit.js.map +1 -1
  52. package/build/navigation-link/link-ui.js +0 -1
  53. package/build/navigation-link/link-ui.js.map +1 -1
  54. package/build/navigation-submenu/edit.js +1 -13
  55. package/build/navigation-submenu/edit.js.map +1 -1
  56. package/build/page-list/edit.js +59 -45
  57. package/build/page-list/edit.js.map +1 -1
  58. package/build/page-list-item/edit.js +3 -2
  59. package/build/page-list-item/edit.js.map +1 -1
  60. package/build/post-content/edit.js +6 -1
  61. package/build/post-content/edit.js.map +1 -1
  62. package/build/post-featured-image/dimension-controls.js +0 -6
  63. package/build/post-featured-image/dimension-controls.js.map +1 -1
  64. package/build/post-featured-image/edit.js +1 -1
  65. package/build/post-featured-image/edit.js.map +1 -1
  66. package/build/pullquote/deprecated.js +3 -3
  67. package/build/pullquote/deprecated.js.map +1 -1
  68. package/build/query/edit/query-placeholder.js +3 -2
  69. package/build/query/edit/query-placeholder.js.map +1 -1
  70. package/build/query/utils.js +26 -9
  71. package/build/query/utils.js.map +1 -1
  72. package/build/table/state.js +12 -4
  73. package/build/table/state.js.map +1 -1
  74. package/build/template-part/edit/import-controls.js +4 -24
  75. package/build/template-part/edit/import-controls.js.map +1 -1
  76. package/build/template-part/edit/utils/transformers.js +69 -19
  77. package/build/template-part/edit/utils/transformers.js.map +1 -1
  78. package/build/text-columns/edit.js +3 -7
  79. package/build/text-columns/edit.js.map +1 -1
  80. package/build/text-columns/save.js +11 -13
  81. package/build/text-columns/save.js.map +1 -1
  82. package/build-module/buttons/edit.native.js +1 -1
  83. package/build-module/buttons/edit.native.js.map +1 -1
  84. package/build-module/columns/edit.js +10 -7
  85. package/build-module/columns/edit.js.map +1 -1
  86. package/build-module/columns/edit.native.js +1 -1
  87. package/build-module/columns/edit.native.js.map +1 -1
  88. package/build-module/comments/edit/placeholder.js +9 -5
  89. package/build-module/comments/edit/placeholder.js.map +1 -1
  90. package/build-module/cover/index.js +12 -4
  91. package/build-module/cover/index.js.map +1 -1
  92. package/build-module/cover/variations.js +19 -0
  93. package/build-module/cover/variations.js.map +1 -0
  94. package/build-module/embed/edit.js +14 -15
  95. package/build-module/embed/edit.js.map +1 -1
  96. package/build-module/embed/edit.native.js +19 -15
  97. package/build-module/embed/edit.native.js.map +1 -1
  98. package/build-module/embed/util.js +34 -10
  99. package/build-module/embed/util.js.map +1 -1
  100. package/build-module/gallery/edit.js +1 -0
  101. package/build-module/gallery/edit.js.map +1 -1
  102. package/build-module/latest-posts/edit.js +10 -9
  103. package/build-module/latest-posts/edit.js.map +1 -1
  104. package/build-module/latest-posts/edit.native.js +3 -3
  105. package/build-module/latest-posts/edit.native.js.map +1 -1
  106. package/build-module/media-text/constants.js +10 -0
  107. package/build-module/media-text/constants.js.map +1 -1
  108. package/build-module/media-text/edit.js +2 -14
  109. package/build-module/media-text/edit.js.map +1 -1
  110. package/build-module/media-text/edit.native.js +4 -3
  111. package/build-module/media-text/edit.native.js.map +1 -1
  112. package/build-module/media-text/transforms.js +32 -44
  113. package/build-module/media-text/transforms.js.map +1 -1
  114. package/build-module/navigation/edit/index.js +58 -88
  115. package/build-module/navigation/edit/index.js.map +1 -1
  116. package/build-module/navigation/edit/inner-blocks.js +4 -1
  117. package/build-module/navigation/edit/inner-blocks.js.map +1 -1
  118. package/build-module/navigation/edit/menu-inspector-controls.js +2 -5
  119. package/build-module/navigation/edit/menu-inspector-controls.js.map +1 -1
  120. package/build-module/navigation/edit/navigation-menu-selector.js +25 -22
  121. package/build-module/navigation/edit/navigation-menu-selector.js.map +1 -1
  122. package/build-module/navigation/edit/unsaved-inner-blocks.js +14 -1
  123. package/build-module/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  124. package/build-module/navigation/edit/use-convert-classic-menu-to-block-menu.js +2 -4
  125. package/build-module/navigation/edit/use-convert-classic-menu-to-block-menu.js.map +1 -1
  126. package/build-module/navigation/edit/use-create-navigation-menu.js +1 -1
  127. package/build-module/navigation/edit/use-create-navigation-menu.js.map +1 -1
  128. package/build-module/navigation/edit/use-navigation-notice.js +1 -1
  129. package/build-module/navigation/edit/use-navigation-notice.js.map +1 -1
  130. package/build-module/navigation-link/edit.js +0 -11
  131. package/build-module/navigation-link/edit.js.map +1 -1
  132. package/build-module/navigation-link/link-ui.js +0 -1
  133. package/build-module/navigation-link/link-ui.js.map +1 -1
  134. package/build-module/navigation-submenu/edit.js +1 -13
  135. package/build-module/navigation-submenu/edit.js.map +1 -1
  136. package/build-module/page-list/edit.js +61 -47
  137. package/build-module/page-list/edit.js.map +1 -1
  138. package/build-module/page-list-item/edit.js +3 -2
  139. package/build-module/page-list-item/edit.js.map +1 -1
  140. package/build-module/post-content/edit.js +6 -1
  141. package/build-module/post-content/edit.js.map +1 -1
  142. package/build-module/post-featured-image/dimension-controls.js +0 -6
  143. package/build-module/post-featured-image/dimension-controls.js.map +1 -1
  144. package/build-module/post-featured-image/edit.js +1 -1
  145. package/build-module/post-featured-image/edit.js.map +1 -1
  146. package/build-module/pullquote/deprecated.js +3 -2
  147. package/build-module/pullquote/deprecated.js.map +1 -1
  148. package/build-module/query/edit/query-placeholder.js +4 -3
  149. package/build-module/query/edit/query-placeholder.js.map +1 -1
  150. package/build-module/query/utils.js +21 -6
  151. package/build-module/query/utils.js.map +1 -1
  152. package/build-module/table/state.js +13 -5
  153. package/build-module/table/state.js.map +1 -1
  154. package/build-module/template-part/edit/import-controls.js +4 -23
  155. package/build-module/template-part/edit/import-controls.js.map +1 -1
  156. package/build-module/template-part/edit/utils/transformers.js +69 -20
  157. package/build-module/template-part/edit/utils/transformers.js.map +1 -1
  158. package/build-module/text-columns/edit.js +3 -6
  159. package/build-module/text-columns/edit.js.map +1 -1
  160. package/build-module/text-columns/save.js +11 -12
  161. package/build-module/text-columns/save.js.map +1 -1
  162. package/build-style/cover/style-rtl.css +11 -5
  163. package/build-style/cover/style.css +11 -5
  164. package/build-style/editor-rtl.css +5 -1
  165. package/build-style/editor.css +5 -1
  166. package/build-style/navigation/editor-rtl.css +1 -1
  167. package/build-style/navigation/editor.css +1 -1
  168. package/build-style/page-list/editor-rtl.css +4 -0
  169. package/build-style/page-list/editor.css +4 -0
  170. package/build-style/post-featured-image/style-rtl.css +1 -0
  171. package/build-style/post-featured-image/style.css +1 -0
  172. package/build-style/style-rtl.css +12 -5
  173. package/build-style/style.css +12 -5
  174. package/package.json +31 -31
  175. package/src/audio/test/__snapshots__/edit.native.js.snap +44 -4
  176. package/src/audio/test/__snapshots__/transforms.native.js.snap +25 -0
  177. package/src/audio/test/transforms.native.js +42 -0
  178. package/src/block/test/__snapshots__/transforms.native.js.snap +15 -0
  179. package/src/block/test/transforms.native.js +40 -0
  180. package/src/buttons/edit.native.js +1 -1
  181. package/src/buttons/test/__snapshots__/transforms.native.js.snap +31 -0
  182. package/src/buttons/test/transforms.native.js +48 -0
  183. package/src/columns/edit.js +28 -17
  184. package/src/columns/edit.native.js +1 -1
  185. package/src/columns/test/__snapshots__/transforms.native.js.snap +61 -0
  186. package/src/columns/test/transforms.native.js +91 -0
  187. package/src/comment-template/index.php +1 -2
  188. package/src/comments/edit/placeholder.js +16 -4
  189. package/src/cover/block.json +9 -3
  190. package/src/cover/index.js +2 -0
  191. package/src/cover/style.scss +16 -7
  192. package/src/cover/test/__snapshots__/transforms.native.js.snap +73 -0
  193. package/src/cover/test/transforms.native.js +112 -0
  194. package/src/cover/variations.js +20 -0
  195. package/src/embed/edit.js +16 -12
  196. package/src/embed/edit.native.js +28 -18
  197. package/src/embed/test/__snapshots__/transforms.native.js.snap +23 -0
  198. package/src/embed/test/index.js +12 -0
  199. package/src/embed/test/transforms.native.js +44 -0
  200. package/src/embed/util.js +29 -8
  201. package/src/file/test/__snapshots__/edit.native.js.snap +18 -2
  202. package/src/file/test/__snapshots__/transforms.native.js.snap +19 -0
  203. package/src/file/test/transforms.native.js +42 -0
  204. package/src/freeform/test/__snapshots__/transforms.native.js.snap +19 -0
  205. package/src/freeform/test/transforms.native.js +39 -0
  206. package/src/gallery/edit.js +3 -0
  207. package/src/gallery/test/__snapshots__/transforms.native.js.snap +53 -0
  208. package/src/gallery/test/transforms.native.js +52 -0
  209. package/src/group/test/__snapshots__/transforms.native.js.snap +35 -0
  210. package/src/group/test/transforms.native.js +75 -0
  211. package/src/heading/test/__snapshots__/transforms.native.js.snap +47 -0
  212. package/src/heading/test/transforms.native.js +46 -0
  213. package/src/image/test/__snapshots__/transforms.native.js.snap +49 -0
  214. package/src/image/test/transforms.native.js +48 -0
  215. package/src/latest-posts/edit.js +11 -16
  216. package/src/latest-posts/edit.native.js +3 -3
  217. package/src/latest-posts/test/__snapshots__/transforms.native.js.snap +15 -0
  218. package/src/latest-posts/test/transforms.native.js +61 -0
  219. package/src/list/test/__snapshots__/transforms.native.js.snap +85 -0
  220. package/src/list/test/transforms.native.js +56 -0
  221. package/src/media-text/constants.js +16 -0
  222. package/src/media-text/edit.js +8 -18
  223. package/src/media-text/edit.native.js +3 -9
  224. package/src/media-text/test/__snapshots__/transforms.native.js.snap +73 -0
  225. package/src/media-text/test/transforms.native.js +112 -0
  226. package/src/media-text/transforms.js +24 -51
  227. package/src/missing/test/__snapshots__/edit.native.js.snap +20 -2
  228. package/src/more/test/__snapshots__/transforms.native.js.snap +19 -0
  229. package/src/more/test/transforms.native.js +42 -0
  230. package/src/navigation/edit/index.js +104 -107
  231. package/src/navigation/edit/inner-blocks.js +3 -0
  232. package/src/navigation/edit/menu-inspector-controls.js +2 -7
  233. package/src/navigation/edit/navigation-menu-selector.js +41 -25
  234. package/src/navigation/edit/unsaved-inner-blocks.js +46 -33
  235. package/src/navigation/edit/use-convert-classic-menu-to-block-menu.js +82 -83
  236. package/src/navigation/edit/use-create-navigation-menu.js +1 -1
  237. package/src/navigation/edit/use-navigation-notice.js +1 -1
  238. package/src/navigation/editor.scss +23 -20
  239. package/src/navigation/index.php +18 -39
  240. package/src/navigation-link/edit.js +0 -9
  241. package/src/navigation-link/index.php +5 -8
  242. package/src/navigation-link/link-ui.js +0 -1
  243. package/src/navigation-submenu/edit.js +0 -10
  244. package/src/navigation-submenu/index.php +23 -6
  245. package/src/nextpage/test/__snapshots__/transforms.native.js.snap +19 -0
  246. package/src/nextpage/test/transforms.native.js +42 -0
  247. package/src/page-list/edit.js +78 -44
  248. package/src/page-list/editor.scss +6 -0
  249. package/src/page-list-item/edit.js +2 -3
  250. package/src/paragraph/test/__snapshots__/transforms.native.js.snap +59 -0
  251. package/src/paragraph/test/transforms.native.js +50 -0
  252. package/src/post-content/edit.js +5 -1
  253. package/src/post-excerpt/index.php +1 -2
  254. package/src/post-featured-image/dimension-controls.js +0 -8
  255. package/src/post-featured-image/edit.js +1 -1
  256. package/src/post-featured-image/style.scss +1 -0
  257. package/src/preformatted/test/__snapshots__/transforms.native.js.snap +31 -0
  258. package/src/preformatted/test/transforms.native.js +42 -0
  259. package/src/pullquote/deprecated.js +2 -6
  260. package/src/pullquote/test/__snapshots__/transforms.native.js.snap +47 -0
  261. package/src/pullquote/test/transforms.native.js +46 -0
  262. package/src/query/edit/query-placeholder.js +10 -5
  263. package/src/query/test/utils.js +33 -1
  264. package/src/query/utils.js +19 -6
  265. package/src/quote/test/__snapshots__/transforms.native.js.snap +39 -0
  266. package/src/quote/test/transforms.native.js +67 -0
  267. package/src/search/test/__snapshots__/edit.native.js.snap +11 -1
  268. package/src/search/test/__snapshots__/transforms.native.js.snap +15 -0
  269. package/src/search/test/transforms.native.js +40 -0
  270. package/src/separator/test/__snapshots__/transforms.native.js.snap +19 -0
  271. package/src/separator/test/transforms.native.js +42 -0
  272. package/src/shortcode/test/__snapshots__/transforms.native.js.snap +19 -0
  273. package/src/shortcode/test/transforms.native.js +42 -0
  274. package/src/social-links/test/__snapshots__/transforms.native.js.snap +31 -0
  275. package/src/social-links/test/transforms.native.js +53 -0
  276. package/src/spacer/test/__snapshots__/transforms.native.js.snap +19 -0
  277. package/src/spacer/test/transforms.native.js +42 -0
  278. package/src/table/state.js +8 -17
  279. package/src/template-part/edit/import-controls.js +2 -29
  280. package/src/template-part/edit/utils/transformers.js +96 -19
  281. package/src/text-columns/edit.js +1 -6
  282. package/src/text-columns/save.js +1 -6
  283. package/src/verse/test/__snapshots__/transforms.native.js.snap +25 -0
  284. package/src/verse/test/transforms.native.js +42 -0
  285. package/src/video/test/__snapshots__/transforms.native.js.snap +41 -0
  286. package/src/video/test/transforms.native.js +48 -0
  287. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,85 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`List block transforms to Columns block 1`] = `
4
+ "<!-- wp:columns -->
5
+ <div class="wp-block-columns"><!-- wp:column {"width":"100%"} -->
6
+ <div class="wp-block-column" style="flex-basis:100%"><!-- wp:list -->
7
+ <ul><!-- wp:list-item -->
8
+ <li>First Item</li>
9
+ <!-- /wp:list-item -->
10
+
11
+ <!-- wp:list-item -->
12
+ <li>Second Item</li>
13
+ <!-- /wp:list-item -->
14
+
15
+ <!-- wp:list-item -->
16
+ <li>Third Item</li>
17
+ <!-- /wp:list-item --></ul>
18
+ <!-- /wp:list --></div>
19
+ <!-- /wp:column --></div>
20
+ <!-- /wp:columns -->"
21
+ `;
22
+
23
+ exports[`List block transforms to Group block 1`] = `
24
+ "<!-- wp:group {"layout":{"type":"constrained"}} -->
25
+ <div class="wp-block-group"><!-- wp:list -->
26
+ <ul><!-- wp:list-item -->
27
+ <li>First Item</li>
28
+ <!-- /wp:list-item -->
29
+
30
+ <!-- wp:list-item -->
31
+ <li>Second Item</li>
32
+ <!-- /wp:list-item -->
33
+
34
+ <!-- wp:list-item -->
35
+ <li>Third Item</li>
36
+ <!-- /wp:list-item --></ul>
37
+ <!-- /wp:list --></div>
38
+ <!-- /wp:group -->"
39
+ `;
40
+
41
+ exports[`List block transforms to Heading block 1`] = `
42
+ "<!-- wp:heading -->
43
+ <h2 class="wp-block-heading">First Item</h2>
44
+ <!-- /wp:heading -->
45
+
46
+ <!-- wp:heading -->
47
+ <h2 class="wp-block-heading">Second Item</h2>
48
+ <!-- /wp:heading -->
49
+
50
+ <!-- wp:heading -->
51
+ <h2 class="wp-block-heading">Third Item</h2>
52
+ <!-- /wp:heading -->"
53
+ `;
54
+
55
+ exports[`List block transforms to Paragraph block 1`] = `
56
+ "<!-- wp:paragraph -->
57
+ <p>First Item</p>
58
+ <!-- /wp:paragraph -->
59
+
60
+ <!-- wp:paragraph -->
61
+ <p>Second Item</p>
62
+ <!-- /wp:paragraph -->
63
+
64
+ <!-- wp:paragraph -->
65
+ <p>Third Item</p>
66
+ <!-- /wp:paragraph -->"
67
+ `;
68
+
69
+ exports[`List block transforms to Quote block 1`] = `
70
+ "<!-- wp:quote -->
71
+ <blockquote class="wp-block-quote"><!-- wp:list -->
72
+ <ul><!-- wp:list-item -->
73
+ <li>First Item</li>
74
+ <!-- /wp:list-item -->
75
+
76
+ <!-- wp:list-item -->
77
+ <li>Second Item</li>
78
+ <!-- /wp:list-item -->
79
+
80
+ <!-- wp:list-item -->
81
+ <li>Third Item</li>
82
+ <!-- /wp:list-item --></ul>
83
+ <!-- /wp:list --></blockquote>
84
+ <!-- /wp:quote -->"
85
+ `;
@@ -0,0 +1,56 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import {
5
+ getEditorHtml,
6
+ initializeEditor,
7
+ setupCoreBlocks,
8
+ transformBlock,
9
+ getBlockTransformOptions,
10
+ } from 'test/helpers';
11
+
12
+ const block = 'List';
13
+ const initialHtml = `
14
+ <!-- wp:list -->
15
+ <ul><!-- wp:list-item -->
16
+ <li>First Item</li>
17
+ <!-- /wp:list-item -->
18
+
19
+ <!-- wp:list-item -->
20
+ <li>Second Item</li>
21
+ <!-- /wp:list-item -->
22
+
23
+ <!-- wp:list-item -->
24
+ <li>Third Item</li>
25
+ <!-- /wp:list-item --></ul>
26
+ <!-- /wp:list -->`;
27
+
28
+ const transformsWithInnerBlocks = [ 'Quote', 'Columns', 'Group' ];
29
+ const blockTransforms = [
30
+ 'Paragraph',
31
+ 'Heading',
32
+ ...transformsWithInnerBlocks,
33
+ ];
34
+
35
+ setupCoreBlocks();
36
+
37
+ describe( `${ block } block transforms`, () => {
38
+ test.each( blockTransforms )( 'to %s block', async ( blockTransform ) => {
39
+ const screen = await initializeEditor( { initialHtml } );
40
+ const newBlock = await transformBlock( screen, block, blockTransform, {
41
+ hasInnerBlocks:
42
+ transformsWithInnerBlocks.includes( blockTransform ),
43
+ } );
44
+ expect( newBlock ).toBeVisible();
45
+ expect( getEditorHtml() ).toMatchSnapshot();
46
+ } );
47
+
48
+ it( 'matches expected transformation options', async () => {
49
+ const screen = await initializeEditor( { initialHtml } );
50
+ const transformOptions = await getBlockTransformOptions(
51
+ screen,
52
+ block
53
+ );
54
+ expect( transformOptions ).toHaveLength( blockTransforms.length );
55
+ } );
56
+ } );
@@ -1 +1,17 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { _x } from '@wordpress/i18n';
5
+
1
6
  export const DEFAULT_MEDIA_SIZE_SLUG = 'full';
7
+ export const WIDTH_CONSTRAINT_PERCENTAGE = 15;
8
+ export const LINK_DESTINATION_MEDIA = 'media';
9
+ export const LINK_DESTINATION_ATTACHMENT = 'attachment';
10
+ export const TEMPLATE = [
11
+ [
12
+ 'core/paragraph',
13
+ {
14
+ placeholder: _x( 'Content…', 'content placeholder' ),
15
+ },
16
+ ],
17
+ ];
@@ -6,7 +6,7 @@ import classnames from 'classnames';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import { __, _x } from '@wordpress/i18n';
9
+ import { __ } from '@wordpress/i18n';
10
10
  import { useSelect } from '@wordpress/data';
11
11
  import { useState, useRef } from '@wordpress/element';
12
12
  import {
@@ -36,31 +36,21 @@ import { store as coreStore } from '@wordpress/core-data';
36
36
  * Internal dependencies
37
37
  */
38
38
  import MediaContainer from './media-container';
39
- import { DEFAULT_MEDIA_SIZE_SLUG } from './constants';
40
-
41
- /**
42
- * Constants
43
- */
44
- const TEMPLATE = [
45
- [
46
- 'core/paragraph',
47
- {
48
- placeholder: _x( 'Content…', 'content placeholder' ),
49
- },
50
- ],
51
- ];
39
+ import {
40
+ DEFAULT_MEDIA_SIZE_SLUG,
41
+ WIDTH_CONSTRAINT_PERCENTAGE,
42
+ LINK_DESTINATION_MEDIA,
43
+ LINK_DESTINATION_ATTACHMENT,
44
+ TEMPLATE,
45
+ } from './constants';
52
46
 
53
47
  // this limits the resize to a safe zone to avoid making broken layouts
54
- const WIDTH_CONSTRAINT_PERCENTAGE = 15;
55
48
  const applyWidthConstraints = ( width ) =>
56
49
  Math.max(
57
50
  WIDTH_CONSTRAINT_PERCENTAGE,
58
51
  Math.min( width, 100 - WIDTH_CONSTRAINT_PERCENTAGE )
59
52
  );
60
53
 
61
- const LINK_DESTINATION_MEDIA = 'media';
62
- const LINK_DESTINATION_ATTACHMENT = 'attachment';
63
-
64
54
  function getImageSourceUrlBySizeSlug( image, slug ) {
65
55
  // eslint-disable-next-line camelcase
66
56
  return image?.media_details?.sizes?.[ slug ]?.source_url;
@@ -1,7 +1,6 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { get } from 'lodash';
5
4
  import { View } from 'react-native';
6
5
 
7
6
  /**
@@ -32,12 +31,12 @@ import { pullLeft, pullRight, replace } from '@wordpress/icons';
32
31
  /**
33
32
  * Internal dependencies
34
33
  */
34
+ import { WIDTH_CONSTRAINT_PERCENTAGE } from './constants';
35
35
  import MediaContainer from './media-container';
36
36
  import styles from './style.scss';
37
37
 
38
38
  const TEMPLATE = [ [ 'core/paragraph' ] ];
39
39
  // this limits the resize to a safe zone to avoid making broken layouts
40
- const WIDTH_CONSTRAINT_PERCENTAGE = 15;
41
40
  const BREAKPOINTS = {
42
41
  mobile: 480,
43
42
  };
@@ -99,13 +98,8 @@ class MediaTextEdit extends Component {
99
98
  if ( mediaType === 'image' && media.sizes ) {
100
99
  // Try the "large" size URL, falling back to the "full" size URL below.
101
100
  src =
102
- get( media, [ 'sizes', 'large', 'url' ] ) ||
103
- get( media, [
104
- 'media_details',
105
- 'sizes',
106
- 'large',
107
- 'source_url',
108
- ] );
101
+ media.sizes.large?.url ||
102
+ media?.media_details?.sizes?.large?.source_url;
109
103
  }
110
104
 
111
105
  setAttributes( {
@@ -0,0 +1,73 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`Media & Text block transformations with Image to Columns block 1`] = `
4
+ "<!-- wp:columns -->
5
+ <div class="wp-block-columns"><!-- wp:column {"width":"100%"} -->
6
+ <div class="wp-block-column" style="flex-basis:100%"><!-- wp:media-text {"mediaId":4674,"mediaType":"image","isStackedOnMobile":false,"className":"is-stacked-on-mobile"} -->
7
+ <div class="wp-block-media-text alignwide is-stacked-on-mobile"><figure class="wp-block-media-text__media"><img src="https://cldup.com/cXyG__fTLN.jpg" alt="" class="wp-image-4674 size-full"/></figure><div class="wp-block-media-text__content"><!-- wp:paragraph {"className":"has-large-font-size"} -->
8
+ <p class="has-large-font-size">Mountain</p>
9
+ <!-- /wp:paragraph --></div></div>
10
+ <!-- /wp:media-text --></div>
11
+ <!-- /wp:column --></div>
12
+ <!-- /wp:columns -->"
13
+ `;
14
+
15
+ exports[`Media & Text block transformations with Image to Cover block 1`] = `
16
+ "<!-- wp:cover {"url":"https://cldup.com/cXyG__fTLN.jpg","id":4674,"dimRatio":50,"align":"wide"} -->
17
+ <div class="wp-block-cover alignwide"><span aria-hidden="true" class="wp-block-cover__background has-background-dim"></span><img class="wp-block-cover__image-background wp-image-4674" alt="" src="https://cldup.com/cXyG__fTLN.jpg" data-object-fit="cover"/><div class="wp-block-cover__inner-container"><!-- wp:paragraph {"className":"has-large-font-size"} -->
18
+ <p class="has-large-font-size">Mountain</p>
19
+ <!-- /wp:paragraph --></div></div>
20
+ <!-- /wp:cover -->"
21
+ `;
22
+
23
+ exports[`Media & Text block transformations with Image to Group block 1`] = `
24
+ "<!-- wp:group {"align":"wide","layout":{"type":"constrained"}} -->
25
+ <div class="wp-block-group alignwide"><!-- wp:media-text {"mediaId":4674,"mediaType":"image","isStackedOnMobile":false,"className":"is-stacked-on-mobile"} -->
26
+ <div class="wp-block-media-text alignwide is-stacked-on-mobile"><figure class="wp-block-media-text__media"><img src="https://cldup.com/cXyG__fTLN.jpg" alt="" class="wp-image-4674 size-full"/></figure><div class="wp-block-media-text__content"><!-- wp:paragraph {"className":"has-large-font-size"} -->
27
+ <p class="has-large-font-size">Mountain</p>
28
+ <!-- /wp:paragraph --></div></div>
29
+ <!-- /wp:media-text --></div>
30
+ <!-- /wp:group -->"
31
+ `;
32
+
33
+ exports[`Media & Text block transformations with Image to Image block 1`] = `
34
+ "<!-- wp:image {"id":4674} -->
35
+ <figure class="wp-block-image"><img src="https://cldup.com/cXyG__fTLN.jpg" alt="" class="wp-image-4674"/></figure>
36
+ <!-- /wp:image -->"
37
+ `;
38
+
39
+ exports[`Media & Text block transformations with Video to Columns block 1`] = `
40
+ "<!-- wp:columns -->
41
+ <div class="wp-block-columns"><!-- wp:column {"width":"100%"} -->
42
+ <div class="wp-block-column" style="flex-basis:100%"><!-- wp:media-text {"mediaId":4675,"mediaType":"video","isStackedOnMobile":false,"className":"is-stacked-on-mobile"} -->
43
+ <div class="wp-block-media-text alignwide is-stacked-on-mobile"><figure class="wp-block-media-text__media"><video controls src="https://i.cloudup.com/YtZFJbuQCE.mov"></video></figure><div class="wp-block-media-text__content"><!-- wp:paragraph {"className":"has-large-font-size"} -->
44
+ <p class="has-large-font-size">Cloudup</p>
45
+ <!-- /wp:paragraph --></div></div>
46
+ <!-- /wp:media-text --></div>
47
+ <!-- /wp:column --></div>
48
+ <!-- /wp:columns -->"
49
+ `;
50
+
51
+ exports[`Media & Text block transformations with Video to Cover block 1`] = `
52
+ "<!-- wp:cover {"url":"https://i.cloudup.com/YtZFJbuQCE.mov","id":4675,"dimRatio":50,"backgroundType":"video","align":"wide"} -->
53
+ <div class="wp-block-cover alignwide"><span aria-hidden="true" class="wp-block-cover__background has-background-dim"></span><video class="wp-block-cover__video-background intrinsic-ignore" autoplay muted loop playsinline src="https://i.cloudup.com/YtZFJbuQCE.mov" data-object-fit="cover"></video><div class="wp-block-cover__inner-container"><!-- wp:paragraph {"className":"has-large-font-size"} -->
54
+ <p class="has-large-font-size">Cloudup</p>
55
+ <!-- /wp:paragraph --></div></div>
56
+ <!-- /wp:cover -->"
57
+ `;
58
+
59
+ exports[`Media & Text block transformations with Video to Group block 1`] = `
60
+ "<!-- wp:group {"align":"wide","layout":{"type":"constrained"}} -->
61
+ <div class="wp-block-group alignwide"><!-- wp:media-text {"mediaId":4675,"mediaType":"video","isStackedOnMobile":false,"className":"is-stacked-on-mobile"} -->
62
+ <div class="wp-block-media-text alignwide is-stacked-on-mobile"><figure class="wp-block-media-text__media"><video controls src="https://i.cloudup.com/YtZFJbuQCE.mov"></video></figure><div class="wp-block-media-text__content"><!-- wp:paragraph {"className":"has-large-font-size"} -->
63
+ <p class="has-large-font-size">Cloudup</p>
64
+ <!-- /wp:paragraph --></div></div>
65
+ <!-- /wp:media-text --></div>
66
+ <!-- /wp:group -->"
67
+ `;
68
+
69
+ exports[`Media & Text block transformations with Video to Video block 1`] = `
70
+ "<!-- wp:video {"id":4675} -->
71
+ <figure class="wp-block-video"><video controls src="https://i.cloudup.com/YtZFJbuQCE.mov"></video></figure>
72
+ <!-- /wp:video -->"
73
+ `;
@@ -0,0 +1,112 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import {
5
+ getEditorHtml,
6
+ initializeEditor,
7
+ setupCoreBlocks,
8
+ transformBlock,
9
+ getBlockTransformOptions,
10
+ } from 'test/helpers';
11
+
12
+ const block = 'Media & Text';
13
+ const initialHtmlWithImage = `
14
+ <!-- wp:media-text {"mediaId":4674,"mediaType":"image","isStackedOnMobile":false,"className":"is-stacked-on-mobile"} -->
15
+ <div class="wp-block-media-text alignwide is-stacked-on-mobile"><figure class="wp-block-media-text__media"><img src="https://cldup.com/cXyG__fTLN.jpg" class="wp-image-4674 size-full"/></figure><div class="wp-block-media-text__content"><!-- wp:paragraph {"className":"has-large-font-size"} -->
16
+ <p class="has-large-font-size">Mountain</p>
17
+ <!-- /wp:paragraph --></div></div>
18
+ <!-- /wp:media-text -->`;
19
+ const initialHtmlWithVideo = `
20
+ <!-- wp:media-text {"mediaId":4675,"mediaType":"video","isStackedOnMobile":false,"className":"is-stacked-on-mobile"} -->
21
+ <div class="wp-block-media-text alignwide is-stacked-on-mobile"><figure class="wp-block-media-text__media"><video controls src="https://i.cloudup.com/YtZFJbuQCE.mov"></video></figure><div class="wp-block-media-text__content"><!-- wp:paragraph {"className":"has-large-font-size"} -->
22
+ <p class="has-large-font-size">Cloudup</p>
23
+ <!-- /wp:paragraph --></div></div>
24
+ <!-- /wp:media-text -->`;
25
+
26
+ const tranformsWithInnerBlocks = [ 'Columns', 'Group' ];
27
+ const blockTransformsWithImage = [
28
+ 'Image',
29
+ 'Cover',
30
+ ...tranformsWithInnerBlocks,
31
+ ];
32
+ const blockTransformsWithVideo = [
33
+ 'Video',
34
+ 'Cover',
35
+ ...tranformsWithInnerBlocks,
36
+ ];
37
+
38
+ setupCoreBlocks();
39
+
40
+ describe( `${ block } block transformations`, () => {
41
+ describe( 'with Image', () => {
42
+ test.each( blockTransformsWithImage )(
43
+ 'to %s block',
44
+ async ( blockTransform ) => {
45
+ const screen = await initializeEditor( {
46
+ initialHtml: initialHtmlWithImage,
47
+ } );
48
+ const newBlock = await transformBlock(
49
+ screen,
50
+ block,
51
+ blockTransform,
52
+ {
53
+ isMediaBlock: true,
54
+ hasInnerBlocks:
55
+ tranformsWithInnerBlocks.includes( blockTransform ),
56
+ }
57
+ );
58
+ expect( newBlock ).toBeVisible();
59
+ expect( getEditorHtml() ).toMatchSnapshot();
60
+ }
61
+ );
62
+
63
+ it( 'matches expected transformation options', async () => {
64
+ const screen = await initializeEditor( {
65
+ initialHtml: initialHtmlWithImage,
66
+ } );
67
+ const transformOptions = await getBlockTransformOptions(
68
+ screen,
69
+ block
70
+ );
71
+ expect( transformOptions ).toHaveLength(
72
+ blockTransformsWithImage.length
73
+ );
74
+ } );
75
+ } );
76
+
77
+ describe( 'with Video', () => {
78
+ test.each( blockTransformsWithVideo )(
79
+ 'to %s block',
80
+ async ( blockTransform ) => {
81
+ const screen = await initializeEditor( {
82
+ initialHtml: initialHtmlWithVideo,
83
+ } );
84
+ const newBlock = await transformBlock(
85
+ screen,
86
+ block,
87
+ blockTransform,
88
+ {
89
+ isMediaBlock: true,
90
+ hasInnerBlocks:
91
+ tranformsWithInnerBlocks.includes( blockTransform ),
92
+ }
93
+ );
94
+ expect( newBlock ).toBeVisible();
95
+ expect( getEditorHtml() ).toMatchSnapshot();
96
+ }
97
+ );
98
+
99
+ it( 'matches expected transformation options', async () => {
100
+ const screen = await initializeEditor( {
101
+ initialHtml: initialHtmlWithVideo,
102
+ } );
103
+ const transformOptions = await getBlockTransformOptions(
104
+ screen,
105
+ block
106
+ );
107
+ expect( transformOptions ).toHaveLength(
108
+ blockTransformsWithVideo.length
109
+ );
110
+ } );
111
+ } );
112
+ } );
@@ -42,6 +42,8 @@ const transforms = {
42
42
  gradient,
43
43
  id,
44
44
  overlayColor,
45
+ style,
46
+ textColor,
45
47
  url,
46
48
  },
47
49
  innerBlocks
@@ -66,6 +68,16 @@ const transforms = {
66
68
  };
67
69
  }
68
70
 
71
+ // Maintain custom text color block support value.
72
+ if ( style?.color?.text ) {
73
+ additionalAttributes.style = {
74
+ color: {
75
+ ...additionalAttributes.style?.color,
76
+ text: style.color.text,
77
+ },
78
+ };
79
+ }
80
+
69
81
  return createBlock(
70
82
  'core/media-text',
71
83
  {
@@ -77,6 +89,7 @@ const transforms = {
77
89
  mediaId: id,
78
90
  mediaType: backgroundType,
79
91
  mediaUrl: url,
92
+ textColor,
80
93
  ...additionalAttributes,
81
94
  },
82
95
  innerBlocks
@@ -135,6 +148,8 @@ const transforms = {
135
148
  ) => {
136
149
  const additionalAttributes = {};
137
150
 
151
+ // Migrate the background styles or gradient to Cover's custom
152
+ // gradient and overlay properties.
138
153
  if ( style?.color?.gradient ) {
139
154
  additionalAttributes.customGradient = style.color.gradient;
140
155
  } else if ( style?.color?.background ) {
@@ -142,6 +157,13 @@ const transforms = {
142
157
  style.color.background;
143
158
  }
144
159
 
160
+ // Maintain custom text color support style.
161
+ if ( style?.color?.text ) {
162
+ additionalAttributes.style = {
163
+ color: { text: style.color.text },
164
+ };
165
+ }
166
+
145
167
  const coverAttributes = {
146
168
  align,
147
169
  alt: mediaAlt,
@@ -152,64 +174,15 @@ const transforms = {
152
174
  gradient,
153
175
  id: mediaId,
154
176
  overlayColor: backgroundColor,
177
+ textColor,
155
178
  url: mediaUrl,
156
179
  ...additionalAttributes,
157
180
  };
158
- const customTextColor = style?.color?.text;
159
-
160
- // Attempt to maintain any text color selection.
161
- // Cover block's do not opt into color block support so we
162
- // cannot directly copy the color attributes across.
163
- if ( ! textColor && ! customTextColor ) {
164
- return createBlock(
165
- 'core/cover',
166
- coverAttributes,
167
- innerBlocks
168
- );
169
- }
170
-
171
- const coloredInnerBlocks = innerBlocks.map( ( innerBlock ) => {
172
- const {
173
- attributes: { style: innerStyle },
174
- } = innerBlock;
175
-
176
- // Only apply the media and text color if the inner block
177
- // doesn't set its own color block support selection.
178
- if (
179
- innerBlock.attributes.textColor ||
180
- innerStyle?.color?.text
181
- ) {
182
- return innerBlock;
183
- }
184
-
185
- const newAttributes = { textColor };
186
-
187
- // Only add or extend inner block's style object if we have
188
- // a custom text color from the media & text block.
189
- if ( customTextColor ) {
190
- newAttributes.style = {
191
- ...innerStyle,
192
- color: {
193
- ...innerStyle?.color,
194
- text: customTextColor,
195
- },
196
- };
197
- }
198
-
199
- return createBlock(
200
- innerBlock.name,
201
- {
202
- ...innerBlock.attributes,
203
- ...newAttributes,
204
- },
205
- innerBlock.innerBlocks
206
- );
207
- } );
208
181
 
209
182
  return createBlock(
210
183
  'core/cover',
211
184
  coverAttributes,
212
- coloredInnerBlocks
185
+ innerBlocks
213
186
  );
214
187
  },
215
188
  },
@@ -34,9 +34,27 @@ exports[`Missing block renders without crashing 1`] = `
34
34
  onResponderTerminationRequest={[Function]}
35
35
  onStartShouldSetResponder={[Function]}
36
36
  >
37
- Svg
37
+ <Svg
38
+ height={24}
39
+ label="Help icon"
40
+ style={{}}
41
+ viewBox="0 0 24 24"
42
+ width={24}
43
+ xmlns="http://www.w3.org/2000/svg"
44
+ >
45
+ Path
46
+ </Svg>
38
47
  </View>
39
- Svg
48
+ <Svg
49
+ color="white"
50
+ height={24}
51
+ style={{}}
52
+ viewBox="0 0 24 24"
53
+ width={24}
54
+ xmlns="http://www.w3.org/2000/svg"
55
+ >
56
+ Path
57
+ </Svg>
40
58
  <Text>
41
59
  missing/block/title
42
60
  </Text>
@@ -0,0 +1,19 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`More block transforms to Columns block 1`] = `
4
+ "<!-- wp:columns -->
5
+ <div class="wp-block-columns"><!-- wp:column {"width":"100%"} -->
6
+ <div class="wp-block-column" style="flex-basis:100%"><!-- wp:more -->
7
+ <!--more-->
8
+ <!-- /wp:more --></div>
9
+ <!-- /wp:column --></div>
10
+ <!-- /wp:columns -->"
11
+ `;
12
+
13
+ exports[`More block transforms to Group block 1`] = `
14
+ "<!-- wp:group {"layout":{"type":"constrained"}} -->
15
+ <div class="wp-block-group"><!-- wp:more -->
16
+ <!--more-->
17
+ <!-- /wp:more --></div>
18
+ <!-- /wp:group -->"
19
+ `;
@@ -0,0 +1,42 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import {
5
+ getEditorHtml,
6
+ initializeEditor,
7
+ setupCoreBlocks,
8
+ transformBlock,
9
+ getBlockTransformOptions,
10
+ } from 'test/helpers';
11
+
12
+ const block = 'More';
13
+ const initialHtml = `
14
+ <!-- wp:more -->
15
+ <!--more-->
16
+ <!-- /wp:more -->`;
17
+
18
+ const transformsWithInnerBlocks = [ 'Columns', 'Group' ];
19
+ const blockTransforms = [ ...transformsWithInnerBlocks ];
20
+
21
+ setupCoreBlocks();
22
+
23
+ describe( `${ block } block transforms`, () => {
24
+ test.each( blockTransforms )( 'to %s block', async ( blockTransform ) => {
25
+ const screen = await initializeEditor( { initialHtml } );
26
+ const newBlock = await transformBlock( screen, block, blockTransform, {
27
+ hasInnerBlocks:
28
+ transformsWithInnerBlocks.includes( blockTransform ),
29
+ } );
30
+ expect( newBlock ).toBeVisible();
31
+ expect( getEditorHtml() ).toMatchSnapshot();
32
+ } );
33
+
34
+ it( 'matches expected transformation options', async () => {
35
+ const screen = await initializeEditor( { initialHtml } );
36
+ const transformOptions = await getBlockTransformOptions(
37
+ screen,
38
+ block
39
+ );
40
+ expect( transformOptions ).toHaveLength( blockTransforms.length );
41
+ } );
42
+ } );