@wordpress/block-library 9.47.0 → 9.48.1

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 (552) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/build/columns/transforms.cjs +65 -0
  3. package/build/columns/transforms.cjs.map +2 -2
  4. package/build/comments/edit/placeholder.cjs +1 -1
  5. package/build/comments/edit/placeholder.cjs.map +2 -2
  6. package/build/cover/edit/inspector-controls.cjs +16 -4
  7. package/build/cover/edit/inspector-controls.cjs.map +2 -2
  8. package/build/gallery/edit.cjs +212 -331
  9. package/build/gallery/edit.cjs.map +2 -2
  10. package/build/gallery/transforms.cjs +43 -0
  11. package/build/gallery/transforms.cjs.map +2 -2
  12. package/build/heading/edit.cjs +0 -1
  13. package/build/heading/edit.cjs.map +2 -2
  14. package/build/image/image.cjs +14 -3
  15. package/build/image/image.cjs.map +2 -2
  16. package/build/image/use-open-image-media-editor-modal.cjs +8 -2
  17. package/build/image/use-open-image-media-editor-modal.cjs.map +2 -2
  18. package/build/list/edit.cjs +1 -8
  19. package/build/list/edit.cjs.map +2 -2
  20. package/build/list/ordered-list-settings.cjs +1 -44
  21. package/build/list/ordered-list-settings.cjs.map +2 -2
  22. package/build/list-item/hooks/use-merge.cjs +47 -24
  23. package/build/list-item/hooks/use-merge.cjs.map +2 -2
  24. package/build/navigation/edit/index.cjs +15 -26
  25. package/build/navigation/edit/index.cjs.map +2 -2
  26. package/build/navigation-link/edit.cjs +0 -1
  27. package/build/navigation-link/edit.cjs.map +2 -2
  28. package/build/navigation-submenu/edit.cjs +2 -1
  29. package/build/navigation-submenu/edit.cjs.map +2 -2
  30. package/build/paragraph/deprecated.cjs +1 -0
  31. package/build/paragraph/deprecated.cjs.map +2 -2
  32. package/build/paragraph/edit.cjs +10 -1
  33. package/build/paragraph/edit.cjs.map +3 -3
  34. package/build/playlist/block.json +12 -0
  35. package/build/playlist/edit.cjs +27 -1
  36. package/build/playlist/edit.cjs.map +2 -2
  37. package/build/playlist/save.cjs +8 -1
  38. package/build/playlist/save.cjs.map +2 -2
  39. package/build/playlist/view.cjs +1 -0
  40. package/build/playlist/view.cjs.map +2 -2
  41. package/build/post-featured-image/edit.cjs +6 -4
  42. package/build/post-featured-image/edit.cjs.map +2 -2
  43. package/build/post-time-to-read/index.cjs +1 -1
  44. package/build/post-time-to-read/index.cjs.map +2 -2
  45. package/build/post-time-to-read/variations.cjs +1 -1
  46. package/build/post-time-to-read/variations.cjs.map +2 -2
  47. package/build/pullquote/edit.cjs +2 -7
  48. package/build/pullquote/edit.cjs.map +2 -2
  49. package/build/quote/edit.cjs +4 -9
  50. package/build/quote/edit.cjs.map +2 -2
  51. package/build/shortcode/transforms.cjs +2 -2
  52. package/build/shortcode/transforms.cjs.map +2 -2
  53. package/build/site-logo/edit.cjs +4 -1
  54. package/build/site-logo/edit.cjs.map +2 -2
  55. package/build/utils/waveform-player.cjs +42 -9
  56. package/build/utils/waveform-player.cjs.map +2 -2
  57. package/build/utils/waveform-utils.cjs +6 -4
  58. package/build/utils/waveform-utils.cjs.map +2 -2
  59. package/build/video/edit-common-settings.cjs +3 -6
  60. package/build/video/edit-common-settings.cjs.map +2 -2
  61. package/build-module/columns/transforms.mjs +65 -0
  62. package/build-module/columns/transforms.mjs.map +2 -2
  63. package/build-module/comments/edit/placeholder.mjs +1 -1
  64. package/build-module/comments/edit/placeholder.mjs.map +2 -2
  65. package/build-module/cover/edit/inspector-controls.mjs +16 -4
  66. package/build-module/cover/edit/inspector-controls.mjs.map +2 -2
  67. package/build-module/gallery/edit.mjs +214 -334
  68. package/build-module/gallery/edit.mjs.map +2 -2
  69. package/build-module/gallery/transforms.mjs +43 -0
  70. package/build-module/gallery/transforms.mjs.map +2 -2
  71. package/build-module/heading/edit.mjs +1 -2
  72. package/build-module/heading/edit.mjs.map +2 -2
  73. package/build-module/image/image.mjs +15 -3
  74. package/build-module/image/image.mjs.map +2 -2
  75. package/build-module/image/use-open-image-media-editor-modal.mjs +8 -2
  76. package/build-module/image/use-open-image-media-editor-modal.mjs.map +2 -2
  77. package/build-module/list/edit.mjs +2 -9
  78. package/build-module/list/edit.mjs.map +2 -2
  79. package/build-module/list/ordered-list-settings.mjs +1 -45
  80. package/build-module/list/ordered-list-settings.mjs.map +2 -2
  81. package/build-module/list-item/hooks/use-merge.mjs +48 -25
  82. package/build-module/list-item/hooks/use-merge.mjs.map +2 -2
  83. package/build-module/navigation/edit/index.mjs +16 -33
  84. package/build-module/navigation/edit/index.mjs.map +2 -2
  85. package/build-module/navigation-link/edit.mjs +0 -1
  86. package/build-module/navigation-link/edit.mjs.map +2 -2
  87. package/build-module/navigation-submenu/edit.mjs +2 -1
  88. package/build-module/navigation-submenu/edit.mjs.map +2 -2
  89. package/build-module/paragraph/deprecated.mjs +1 -0
  90. package/build-module/paragraph/deprecated.mjs.map +2 -2
  91. package/build-module/paragraph/edit.mjs +12 -2
  92. package/build-module/paragraph/edit.mjs.map +2 -2
  93. package/build-module/playlist/block.json +12 -0
  94. package/build-module/playlist/edit.mjs +27 -1
  95. package/build-module/playlist/edit.mjs.map +2 -2
  96. package/build-module/playlist/save.mjs +8 -1
  97. package/build-module/playlist/save.mjs.map +2 -2
  98. package/build-module/playlist/view.mjs +1 -0
  99. package/build-module/playlist/view.mjs.map +2 -2
  100. package/build-module/post-featured-image/edit.mjs +6 -4
  101. package/build-module/post-featured-image/edit.mjs.map +2 -2
  102. package/build-module/post-time-to-read/index.mjs +1 -1
  103. package/build-module/post-time-to-read/index.mjs.map +2 -2
  104. package/build-module/post-time-to-read/variations.mjs +2 -2
  105. package/build-module/post-time-to-read/variations.mjs.map +2 -2
  106. package/build-module/pullquote/edit.mjs +2 -7
  107. package/build-module/pullquote/edit.mjs.map +2 -2
  108. package/build-module/quote/edit.mjs +5 -10
  109. package/build-module/quote/edit.mjs.map +2 -2
  110. package/build-module/shortcode/transforms.mjs +2 -2
  111. package/build-module/shortcode/transforms.mjs.map +2 -2
  112. package/build-module/site-logo/edit.mjs +5 -1
  113. package/build-module/site-logo/edit.mjs.map +2 -2
  114. package/build-module/utils/waveform-player.mjs +44 -11
  115. package/build-module/utils/waveform-player.mjs.map +2 -2
  116. package/build-module/utils/waveform-utils.mjs +6 -4
  117. package/build-module/utils/waveform-utils.mjs.map +2 -2
  118. package/build-module/video/edit-common-settings.mjs +4 -7
  119. package/build-module/video/edit-common-settings.mjs.map +2 -2
  120. package/build-style/comment-template/style-rtl.css +1 -0
  121. package/build-style/comment-template/style.css +1 -0
  122. package/build-style/common-rtl.css +30 -10
  123. package/build-style/common.css +30 -10
  124. package/build-style/cover/style-rtl.css +2 -1
  125. package/build-style/cover/style.css +2 -1
  126. package/build-style/editor-rtl.css +22 -11
  127. package/build-style/editor.css +22 -11
  128. package/build-style/form-input/style-rtl.css +2 -0
  129. package/build-style/form-input/style.css +2 -0
  130. package/build-style/gallery/style-rtl.css +4 -2
  131. package/build-style/gallery/style.css +4 -2
  132. package/build-style/media-text/style-rtl.css +2 -1
  133. package/build-style/media-text/style.css +2 -1
  134. package/build-style/playlist/style-rtl.css +3 -0
  135. package/build-style/playlist/style.css +3 -0
  136. package/build-style/query/editor-rtl.css +8 -4
  137. package/build-style/query/editor.css +8 -4
  138. package/build-style/read-more/style-rtl.css +1 -0
  139. package/build-style/read-more/style.css +1 -0
  140. package/build-style/reset-rtl.css +3 -1
  141. package/build-style/reset.css +3 -1
  142. package/build-style/search/style-rtl.css +3 -1
  143. package/build-style/search/style.css +3 -1
  144. package/build-style/site-logo/editor-rtl.css +2 -1
  145. package/build-style/site-logo/editor.css +2 -1
  146. package/build-style/style-rtl.css +53 -17
  147. package/build-style/style.css +53 -17
  148. package/build-style/tab/style-rtl.css +3 -1
  149. package/build-style/tab/style.css +3 -1
  150. package/build-style/template-part/editor-rtl.css +8 -4
  151. package/build-style/template-part/editor.css +8 -4
  152. package/build-style/video/style-rtl.css +2 -1
  153. package/build-style/video/style.css +2 -1
  154. package/package.json +51 -47
  155. package/src/accordion/README.md +97 -0
  156. package/src/accordion-heading/README.md +81 -0
  157. package/src/accordion-item/README.md +85 -0
  158. package/src/accordion-panel/README.md +74 -0
  159. package/src/archives/README.md +56 -0
  160. package/src/audio/README.md +55 -0
  161. package/src/avatar/README.md +74 -0
  162. package/src/block/README.md +56 -0
  163. package/src/breadcrumbs/README.md +67 -0
  164. package/src/button/README.md +93 -0
  165. package/src/buttons/README.md +80 -0
  166. package/src/calendar/README.md +51 -0
  167. package/src/categories/README.md +69 -0
  168. package/src/code/README.md +55 -0
  169. package/src/column/README.md +72 -0
  170. package/src/columns/README.md +90 -0
  171. package/src/columns/test/transforms.js +164 -0
  172. package/src/columns/transforms.js +74 -0
  173. package/src/comment-author-avatar/README.md +63 -0
  174. package/src/comment-author-name/README.md +67 -0
  175. package/src/comment-content/README.md +61 -0
  176. package/src/comment-date/README.md +67 -0
  177. package/src/comment-edit-link/README.md +67 -0
  178. package/src/comment-reply-link/README.md +63 -0
  179. package/src/comment-template/README.md +60 -0
  180. package/src/comments/README.md +88 -0
  181. package/src/comments/edit/placeholder.js +1 -1
  182. package/src/comments-pagination/README.md +77 -0
  183. package/src/comments-pagination-next/README.md +64 -0
  184. package/src/comments-pagination-numbers/README.md +64 -0
  185. package/src/comments-pagination-previous/README.md +64 -0
  186. package/src/comments-title/README.md +70 -0
  187. package/src/common.scss +63 -10
  188. package/src/cover/README.md +111 -0
  189. package/src/cover/edit/inspector-controls.js +61 -45
  190. package/src/cover/test/edit.js +38 -0
  191. package/src/details/README.md +65 -0
  192. package/src/embed/README.md +56 -0
  193. package/src/file/README.md +60 -0
  194. package/src/footnotes/README.md +64 -0
  195. package/src/form/README.md +90 -0
  196. package/src/form-input/README.md +74 -0
  197. package/src/form-submission-notification/README.md +50 -0
  198. package/src/form-submit-button/README.md +54 -0
  199. package/src/freeform/README.md +49 -0
  200. package/src/gallery/README.md +115 -0
  201. package/src/gallery/edit.js +213 -350
  202. package/src/gallery/test/transforms.js +155 -0
  203. package/src/gallery/transforms.js +47 -0
  204. package/src/group/README.md +80 -0
  205. package/src/heading/README.md +60 -0
  206. package/src/heading/edit.js +1 -2
  207. package/src/home-link/README.md +66 -0
  208. package/src/home-link/index.php +3 -15
  209. package/src/html/README.md +48 -0
  210. package/src/icon/README.md +63 -0
  211. package/src/image/README.md +102 -0
  212. package/src/image/image.js +50 -35
  213. package/src/image/index.php +4 -4
  214. package/src/image/test/use-open-image-media-editor-modal.js +41 -0
  215. package/src/image/use-open-image-media-editor-modal.js +7 -1
  216. package/src/latest-comments/README.md +57 -0
  217. package/src/latest-posts/README.md +71 -0
  218. package/src/list/README.md +70 -0
  219. package/src/list/edit.js +2 -9
  220. package/src/list/ordered-list-settings.js +46 -92
  221. package/src/list-item/README.md +71 -0
  222. package/src/list-item/hooks/use-merge.js +53 -46
  223. package/src/loginout/README.md +56 -0
  224. package/src/math/README.md +50 -0
  225. package/src/media-text/README.md +92 -0
  226. package/src/missing/README.md +55 -0
  227. package/src/more/README.md +49 -0
  228. package/src/navigation/README.md +115 -0
  229. package/src/navigation/edit/index.js +10 -30
  230. package/src/navigation-link/README.md +93 -0
  231. package/src/navigation-link/edit.js +0 -1
  232. package/src/navigation-link/index.php +1 -15
  233. package/src/navigation-link/test/__snapshots__/hooks.js.snap +45 -134
  234. package/src/navigation-overlay-close/README.md +48 -0
  235. package/src/navigation-submenu/README.md +84 -0
  236. package/src/navigation-submenu/edit.js +1 -0
  237. package/src/navigation-submenu/index.php +1 -17
  238. package/src/nextpage/README.md +50 -0
  239. package/src/page-list/README.md +84 -0
  240. package/src/page-list/index.php +3 -15
  241. package/src/page-list-item/README.md +77 -0
  242. package/src/paragraph/README.md +70 -0
  243. package/src/paragraph/deprecated.js +1 -0
  244. package/src/paragraph/edit.js +13 -1
  245. package/src/pattern/README.md +45 -0
  246. package/src/playlist/README.md +86 -0
  247. package/src/playlist/block.json +12 -0
  248. package/src/playlist/edit.js +27 -0
  249. package/src/playlist/index.php +10 -3
  250. package/src/playlist/save.js +9 -1
  251. package/src/playlist/style.scss +7 -0
  252. package/src/playlist/view.js +1 -0
  253. package/src/playlist-track/README.md +69 -0
  254. package/src/post-author/README.md +78 -0
  255. package/src/post-author-biography/README.md +59 -0
  256. package/src/post-author-name/README.md +63 -0
  257. package/src/post-author-name/index.php +1 -1
  258. package/src/post-comment/README.md +61 -0
  259. package/src/post-comments-count/README.md +58 -0
  260. package/src/post-comments-form/README.md +59 -0
  261. package/src/post-comments-link/README.md +60 -0
  262. package/src/post-content/README.md +71 -0
  263. package/src/post-date/README.md +65 -0
  264. package/src/post-date/index.php +1 -1
  265. package/src/post-excerpt/README.md +66 -0
  266. package/src/post-featured-image/README.md +85 -0
  267. package/src/post-featured-image/edit.js +15 -10
  268. package/src/post-featured-image/index.php +1 -1
  269. package/src/post-navigation-link/README.md +63 -0
  270. package/src/post-template/README.md +71 -0
  271. package/src/post-terms/README.md +65 -0
  272. package/src/post-time-to-read/README.md +63 -0
  273. package/src/post-time-to-read/index.js +1 -1
  274. package/src/post-time-to-read/variations.js +2 -2
  275. package/src/post-title/README.md +69 -0
  276. package/src/preformatted/README.md +50 -0
  277. package/src/pullquote/README.md +64 -0
  278. package/src/pullquote/edit.js +1 -7
  279. package/src/query/README.md +64 -0
  280. package/src/query-no-results/README.md +65 -0
  281. package/src/query-pagination/README.md +79 -0
  282. package/src/query-pagination-next/README.md +67 -0
  283. package/src/query-pagination-numbers/README.md +65 -0
  284. package/src/query-pagination-previous/README.md +67 -0
  285. package/src/query-title/README.md +65 -0
  286. package/src/query-total/README.md +66 -0
  287. package/src/quote/README.md +75 -0
  288. package/src/quote/edit.js +3 -9
  289. package/src/read-more/README.md +61 -0
  290. package/src/read-more/index.php +2 -2
  291. package/src/rss/README.md +62 -0
  292. package/src/search/README.md +66 -0
  293. package/src/separator/README.md +62 -0
  294. package/src/shortcode/README.md +44 -0
  295. package/src/shortcode/transforms.js +2 -2
  296. package/src/site-logo/README.md +72 -0
  297. package/src/site-logo/edit.js +5 -0
  298. package/src/site-tagline/README.md +56 -0
  299. package/src/site-title/README.md +57 -0
  300. package/src/social-link/README.md +64 -0
  301. package/src/social-links/README.md +98 -0
  302. package/src/spacer/README.md +53 -0
  303. package/src/tab/README.md +69 -0
  304. package/src/tab-list/README.md +79 -0
  305. package/src/tab-panel/README.md +75 -0
  306. package/src/tab-panels/README.md +75 -0
  307. package/src/table/README.md +71 -0
  308. package/src/table-of-contents/README.md +61 -0
  309. package/src/tabs/README.md +83 -0
  310. package/src/tag-cloud/README.md +62 -0
  311. package/src/template-part/README.md +48 -0
  312. package/src/term-count/README.md +59 -0
  313. package/src/term-description/README.md +60 -0
  314. package/src/term-name/README.md +65 -0
  315. package/src/term-template/README.md +65 -0
  316. package/src/terms-query/README.md +58 -0
  317. package/src/text-columns/README.md +51 -0
  318. package/src/utils/test/waveform-player.js +254 -0
  319. package/src/utils/waveform-player.js +90 -18
  320. package/src/utils/waveform-utils.js +15 -11
  321. package/src/verse/README.md +58 -0
  322. package/src/video/README.md +58 -0
  323. package/src/video/edit-common-settings.js +4 -7
  324. package/src/audio/edit.native.js +0 -250
  325. package/src/audio/style.native.scss +0 -13
  326. package/src/audio/test/__snapshots__/edit.native.js.snap +0 -546
  327. package/src/audio/test/__snapshots__/transforms.native.js.snap +0 -25
  328. package/src/audio/test/edit.native.js +0 -132
  329. package/src/audio/test/transforms.native.js +0 -43
  330. package/src/audio/transforms.native.js +0 -12
  331. package/src/block/edit-title.native.js +0 -67
  332. package/src/block/edit.native.js +0 -247
  333. package/src/block/editor.native.scss +0 -125
  334. package/src/block/test/__snapshots__/transforms.native.js.snap +0 -15
  335. package/src/block/test/edit.native.js +0 -262
  336. package/src/block/test/transforms.native.js +0 -40
  337. package/src/button/color-background.native.js +0 -41
  338. package/src/button/edit.native.js +0 -567
  339. package/src/button/editor.native.scss +0 -70
  340. package/src/button/rich-text.android.scss +0 -6
  341. package/src/button/rich-text.ios.scss +0 -6
  342. package/src/buttons/edit.native.js +0 -157
  343. package/src/buttons/editor.native.scss +0 -11
  344. package/src/buttons/test/__snapshots__/edit.native.js.snap +0 -99
  345. package/src/buttons/test/__snapshots__/transforms.native.js.snap +0 -31
  346. package/src/buttons/test/edit.native.js +0 -485
  347. package/src/buttons/test/transforms.native.js +0 -48
  348. package/src/buttons/transforms.native.js +0 -12
  349. package/src/code/edit.native.js +0 -70
  350. package/src/code/test/__snapshots__/edit.native.js.snap +0 -13
  351. package/src/code/test/edit.native.js +0 -65
  352. package/src/code/theme.native.scss +0 -22
  353. package/src/code/transforms.native.js +0 -12
  354. package/src/column/column-preview.native.js +0 -58
  355. package/src/column/edit.native.js +0 -273
  356. package/src/column/editor.native.scss +0 -75
  357. package/src/columns/columnCalculations.native.js +0 -178
  358. package/src/columns/edit.native.js +0 -507
  359. package/src/columns/editor.native.scss +0 -17
  360. package/src/columns/test/__snapshots__/edit.native.js.snap +0 -305
  361. package/src/columns/test/__snapshots__/transforms.native.js.snap +0 -61
  362. package/src/columns/test/edit.native.js +0 -496
  363. package/src/columns/test/transforms.native.js +0 -89
  364. package/src/columns/transforms.native.js +0 -12
  365. package/src/cover/controls.native.js +0 -307
  366. package/src/cover/edit.native.js +0 -708
  367. package/src/cover/focal-point-settings-button.native.js +0 -53
  368. package/src/cover/overlay-color-settings.native.js +0 -106
  369. package/src/cover/style.native.scss +0 -220
  370. package/src/cover/test/__snapshots__/edit.native.js.snap +0 -105
  371. package/src/cover/test/__snapshots__/transforms.native.js.snap +0 -73
  372. package/src/cover/test/edit.native.js +0 -701
  373. package/src/cover/test/transforms.native.js +0 -116
  374. package/src/cover/transforms.native.js +0 -12
  375. package/src/cover/use-cover-is-dark.native.js +0 -51
  376. package/src/embed/edit.native.js +0 -345
  377. package/src/embed/embed-controls.native.js +0 -65
  378. package/src/embed/embed-link-settings.native.js +0 -99
  379. package/src/embed/embed-loading.native.js +0 -29
  380. package/src/embed/embed-no-preview.native.js +0 -230
  381. package/src/embed/embed-placeholder.native.js +0 -178
  382. package/src/embed/embed-preview.native.js +0 -157
  383. package/src/embed/styles.native.scss +0 -196
  384. package/src/embed/test/__snapshots__/index.native.js.snap +0 -191
  385. package/src/embed/test/__snapshots__/transforms.native.js.snap +0 -23
  386. package/src/embed/test/index.native.js +0 -1125
  387. package/src/embed/test/transforms.native.js +0 -44
  388. package/src/embed/transforms.native.js +0 -12
  389. package/src/embed/wp-embed-preview.native.js +0 -80
  390. package/src/file/edit.native.js +0 -605
  391. package/src/file/style.native.scss +0 -79
  392. package/src/file/test/__snapshots__/edit.native.js.snap +0 -580
  393. package/src/file/test/__snapshots__/transforms.native.js.snap +0 -19
  394. package/src/file/test/edit.native.js +0 -93
  395. package/src/file/test/transforms.native.js +0 -43
  396. package/src/file/transforms.native.js +0 -12
  397. package/src/freeform/edit.native.js +0 -13
  398. package/src/freeform/test/__snapshots__/index.native.js.snap +0 -7
  399. package/src/freeform/test/__snapshots__/transforms.native.js.snap +0 -19
  400. package/src/freeform/test/index.native.js +0 -57
  401. package/src/freeform/test/transforms.native.js +0 -39
  402. package/src/gallery/gallery-styles.native.scss +0 -8
  403. package/src/gallery/gallery.native.js +0 -124
  404. package/src/gallery/styles.native.scss +0 -7
  405. package/src/gallery/test/__snapshots__/index.native.js.snap +0 -177
  406. package/src/gallery/test/__snapshots__/transforms.native.js.snap +0 -53
  407. package/src/gallery/test/helpers.native.js +0 -106
  408. package/src/gallery/test/index.native.js +0 -700
  409. package/src/gallery/test/transforms.native.js +0 -53
  410. package/src/gallery/test/use-get-media.native.js +0 -24
  411. package/src/gallery/transforms.native.js +0 -12
  412. package/src/gallery/use-get-media.native.js +0 -49
  413. package/src/group/edit.native.js +0 -137
  414. package/src/group/editor.native.scss +0 -56
  415. package/src/group/test/__snapshots__/edit.native.js.snap +0 -19
  416. package/src/group/test/__snapshots__/transforms.native.js.snap +0 -35
  417. package/src/group/test/edit.native.js +0 -100
  418. package/src/group/test/transforms.native.js +0 -73
  419. package/src/heading/edit.native.js +0 -159
  420. package/src/heading/test/__snapshots__/index.native.js.snap +0 -43
  421. package/src/heading/test/__snapshots__/transforms.native.js.snap +0 -47
  422. package/src/heading/test/index.native.js +0 -257
  423. package/src/heading/test/transforms.native.js +0 -46
  424. package/src/heading/transforms.native.js +0 -12
  425. package/src/html/transforms.native.js +0 -11
  426. package/src/image/edit.native.js +0 -959
  427. package/src/image/styles.native.scss +0 -70
  428. package/src/image/test/__snapshots__/transforms.native.js.snap +0 -49
  429. package/src/image/test/edit.native.js +0 -459
  430. package/src/image/test/transforms.native.js +0 -49
  431. package/src/image/transforms.native.js +0 -12
  432. package/src/index.native.js +0 -274
  433. package/src/latest-posts/edit.native.js +0 -294
  434. package/src/latest-posts/style.native.scss +0 -47
  435. package/src/latest-posts/test/__snapshots__/edit.native.js.snap +0 -3
  436. package/src/latest-posts/test/__snapshots__/transforms.native.js.snap +0 -15
  437. package/src/latest-posts/test/edit.native.js +0 -49
  438. package/src/latest-posts/test/transforms.native.js +0 -61
  439. package/src/list/tag-name.native.js +0 -12
  440. package/src/list/test/__snapshots__/edit.native.js.snap +0 -121
  441. package/src/list/test/__snapshots__/transforms.native.js.snap +0 -85
  442. package/src/list/test/edit.native.js +0 -602
  443. package/src/list/test/transforms.native.js +0 -56
  444. package/src/list/transforms.native.js +0 -12
  445. package/src/list-item/edit.native.js +0 -175
  446. package/src/list-item/hooks/use-enter.native.js +0 -81
  447. package/src/list-item/icons.native.js +0 -34
  448. package/src/list-item/list-style-type.native.js +0 -146
  449. package/src/list-item/style.native.scss +0 -57
  450. package/src/media-text/edit.native.js +0 -417
  451. package/src/media-text/icon-retry.native.js +0 -11
  452. package/src/media-text/media-container.native.js +0 -393
  453. package/src/media-text/style.native.scss +0 -191
  454. package/src/media-text/test/__snapshots__/transforms.native.js.snap +0 -73
  455. package/src/media-text/test/edit.native.js +0 -58
  456. package/src/media-text/test/transforms.native.js +0 -116
  457. package/src/media-text/transforms.native.js +0 -12
  458. package/src/missing/edit.native.js +0 -294
  459. package/src/missing/style.native.scss +0 -79
  460. package/src/missing/test/__snapshots__/edit.native.js.snap +0 -110
  461. package/src/missing/test/edit-integration.native.js +0 -168
  462. package/src/missing/test/edit.native.js +0 -81
  463. package/src/more/edit.native.js +0 -36
  464. package/src/more/editor.native.scss +0 -21
  465. package/src/more/test/__snapshots__/edit.native.js.snap +0 -7
  466. package/src/more/test/__snapshots__/transforms.native.js.snap +0 -19
  467. package/src/more/test/edit.native.js +0 -41
  468. package/src/more/test/transforms.native.js +0 -42
  469. package/src/more/transforms.native.js +0 -12
  470. package/src/navigation-link/shared/build-css-font-sizes.php +0 -43
  471. package/src/nextpage/edit.native.js +0 -58
  472. package/src/nextpage/editor.native.scss +0 -21
  473. package/src/nextpage/test/__snapshots__/transforms.native.js.snap +0 -19
  474. package/src/nextpage/test/transforms.native.js +0 -42
  475. package/src/nextpage/transforms.native.js +0 -12
  476. package/src/paragraph/edit.native.js +0 -116
  477. package/src/paragraph/test/__snapshots__/edit.native.js.snap +0 -88
  478. package/src/paragraph/test/__snapshots__/transforms.native.js.snap +0 -65
  479. package/src/paragraph/test/edit.native.js +0 -999
  480. package/src/paragraph/test/transforms.native.js +0 -51
  481. package/src/paragraph/transforms.native.js +0 -12
  482. package/src/preformatted/edit.native.js +0 -48
  483. package/src/preformatted/styles.native.scss +0 -30
  484. package/src/preformatted/test/__snapshots__/edit.native.js.snap +0 -95
  485. package/src/preformatted/test/__snapshots__/transforms.native.js.snap +0 -37
  486. package/src/preformatted/test/edit.native.js +0 -111
  487. package/src/preformatted/test/transforms.native.js +0 -47
  488. package/src/preformatted/transforms.native.js +0 -12
  489. package/src/pullquote/blockquote.native.js +0 -39
  490. package/src/pullquote/blockquote.native.scss +0 -8
  491. package/src/pullquote/edit.native.js +0 -128
  492. package/src/pullquote/figure.native.js +0 -33
  493. package/src/pullquote/figure.native.scss +0 -16
  494. package/src/pullquote/test/__snapshots__/transforms.native.js.snap +0 -47
  495. package/src/pullquote/test/edit.native.js +0 -73
  496. package/src/pullquote/test/transforms.native.js +0 -46
  497. package/src/pullquote/transforms.native.js +0 -12
  498. package/src/quote/test/__snapshots__/transforms.native.js.snap +0 -49
  499. package/src/quote/test/edit.native.js +0 -94
  500. package/src/quote/test/transforms.native.js +0 -69
  501. package/src/quote/transforms.native.js +0 -12
  502. package/src/search/edit.native.js +0 -486
  503. package/src/search/style.native.scss +0 -99
  504. package/src/search/test/__snapshots__/edit.native.js.snap +0 -827
  505. package/src/search/test/__snapshots__/transforms.native.js.snap +0 -15
  506. package/src/search/test/edit.native.js +0 -170
  507. package/src/search/test/transforms.native.js +0 -40
  508. package/src/separator/separator-settings.native.js +0 -3
  509. package/src/separator/test/__snapshots__/edit.native.js.snap +0 -7
  510. package/src/separator/test/__snapshots__/transforms.native.js.snap +0 -25
  511. package/src/separator/test/edit.native.js +0 -41
  512. package/src/separator/test/transforms.native.js +0 -42
  513. package/src/separator/transforms.native.js +0 -12
  514. package/src/shortcode/edit.native.js +0 -77
  515. package/src/shortcode/style.native.scss +0 -44
  516. package/src/shortcode/test/__snapshots__/edit.native.js.snap +0 -9
  517. package/src/shortcode/test/__snapshots__/transforms.native.js.snap +0 -19
  518. package/src/shortcode/test/edit.native.js +0 -70
  519. package/src/shortcode/test/transforms.native.js +0 -42
  520. package/src/shortcode/transforms.native.js +0 -12
  521. package/src/social-link/edit.native.js +0 -219
  522. package/src/social-link/editor.native.scss +0 -18
  523. package/src/social-links/edit.native.js +0 -147
  524. package/src/social-links/editor.native.scss +0 -25
  525. package/src/social-links/test/__snapshots__/edit.native.js.snap +0 -57
  526. package/src/social-links/test/__snapshots__/transforms.native.js.snap +0 -31
  527. package/src/social-links/test/edit.native.js +0 -266
  528. package/src/social-links/test/transforms.native.js +0 -53
  529. package/src/spacer/controls.native.js +0 -86
  530. package/src/spacer/edit.native.js +0 -110
  531. package/src/spacer/editor.native.scss +0 -18
  532. package/src/spacer/save.native.js +0 -18
  533. package/src/spacer/test/__snapshots__/index.native.js.snap +0 -43
  534. package/src/spacer/test/__snapshots__/transforms.native.js.snap +0 -25
  535. package/src/spacer/test/index.native.js +0 -257
  536. package/src/spacer/test/transforms.native.js +0 -42
  537. package/src/table/transforms.native.js +0 -11
  538. package/src/text-columns/transforms.native.js +0 -12
  539. package/src/utils/init-block.native.js +0 -40
  540. package/src/utils/transformation-categories.native.js +0 -47
  541. package/src/verse/test/__snapshots__/edit.native.js.snap +0 -13
  542. package/src/verse/test/__snapshots__/transforms.native.js.snap +0 -31
  543. package/src/verse/test/edit.native.js +0 -118
  544. package/src/verse/test/transforms.native.js +0 -46
  545. package/src/verse/transforms.native.js +0 -12
  546. package/src/video/edit.native.js +0 -406
  547. package/src/video/icon-retry.native.js +0 -11
  548. package/src/video/style.native.scss +0 -81
  549. package/src/video/test/__snapshots__/transforms.native.js.snap +0 -41
  550. package/src/video/test/edit.native.js +0 -53
  551. package/src/video/test/transforms.native.js +0 -49
  552. package/src/video/transforms.native.js +0 -12
@@ -1,1125 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- import {
5
- getEditorHtml,
6
- initializeEditor,
7
- fireEvent,
8
- waitFor,
9
- waitForModalVisible,
10
- within,
11
- } from 'test/helpers';
12
- import { Platform } from 'react-native';
13
- import Clipboard from '@react-native-clipboard/clipboard';
14
-
15
- /**
16
- * WordPress dependencies
17
- */
18
- import {
19
- getBlockTypes,
20
- setDefaultBlockName,
21
- unregisterBlockType,
22
- } from '@wordpress/blocks';
23
- import fetchRequest from '@wordpress/api-fetch';
24
- import { store as coreStore } from '@wordpress/core-data';
25
- import { dispatch } from '@wordpress/data';
26
- import { requestPreview } from '@wordpress/react-native-bridge';
27
-
28
- /**
29
- * Internal dependencies
30
- */
31
- import { WebView } from 'react-native-webview';
32
-
33
- import * as paragraph from '../../paragraph';
34
- import * as embed from '..';
35
-
36
- // Override modal mock to prevent unmounting it when is not visible.
37
- // This is required to be able to trigger onClose and onDismiss events when
38
- // the modal is dismissed.
39
- jest.mock( 'react-native-modal', () => {
40
- const mockComponent = require( 'react-native/jest/mockComponent' );
41
- return mockComponent( 'react-native-modal' );
42
- } );
43
-
44
- // Mock debounce to prevent potentially belated state updates.
45
- jest.mock( '@wordpress/compose/src/utils/debounce', () => ( {
46
- debounce: ( fn ) => {
47
- fn.cancel = jest.fn();
48
- return fn;
49
- },
50
- } ) );
51
-
52
- const MODAL_DISMISS_EVENT = Platform.OS === 'ios' ? 'onDismiss' : 'onModalHide';
53
-
54
- // OEmbed response mocks.
55
- const RICH_TEXT_EMBED_SUCCESS_RESPONSE = {
56
- url: 'https://twitter.com/notnownikki',
57
- html: '<p>Mock success response.</p>',
58
- type: 'rich',
59
- provider_name: 'Twitter',
60
- provider_url: 'https://twitter.com',
61
- version: '1.0',
62
- };
63
- const VIDEO_EMBED_SUCCESS_RESPONSE = {
64
- url: 'https://www.youtube.com/watch?v=lXMskKTw3Bc',
65
- html: '<iframe width="16" height="9"></iframe>',
66
- type: 'video',
67
- provider_name: 'YouTube',
68
- provider_url: 'https://youtube.com',
69
- version: '1.0',
70
- };
71
- const MOCK_EMBED_PHOTO_SUCCESS_RESPONSE = {
72
- url: 'https://cloudup.com/cQFlxqtY4ob',
73
- html: '<p>Mock success response.</p>',
74
- type: 'photo',
75
- provider_name: 'Cloudup',
76
- provider_url: 'https://cloudup.com',
77
- version: '1.0',
78
- };
79
- const MOCK_BAD_WORDPRESS_RESPONSE = {
80
- code: 'oembed_invalid_url',
81
- message: 'Not Found',
82
- data: {
83
- status: 404,
84
- },
85
- html: false,
86
- };
87
- const MOCK_BAD_EMBED_PROVIDER_RESPONSE = {
88
- url: 'https://youtu.be/BAD_URL',
89
- html: '<p>Mock bad response.</p>',
90
- provider_name: 'Embed Provider',
91
- version: '1.0',
92
- };
93
- const EMBED_NULL_RESPONSE = null;
94
-
95
- // Embed block HTML examples.
96
- const EMPTY_EMBED_HTML = '<!-- wp:embed /-->';
97
- const RICH_TEXT_EMBED_HTML = `<!-- wp:embed {"url":"https://twitter.com/notnownikki","type":"rich","providerNameSlug":"twitter","responsive":true} -->
98
- <figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
99
- https://twitter.com/notnownikki
100
- </div></figure>
101
- <!-- /wp:embed -->`;
102
- const RICH_TEXT_ERROR_EMBED_HTML = `<!-- wp:embed {"url":"https://twitter.com/testing","type":"rich","providerNameSlug":"twitter","responsive":true} -->
103
- <figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
104
- https://twitter.com/testing
105
- </div></figure>
106
- <!-- /wp:embed -->`;
107
- const PHOTO_EMBED_HTML = `<!-- wp:embed {"url":"https://cloudup.com/cQFlxqtY4ob","type":"photo","providerNameSlug":"cloudup","responsive":true} -->
108
- <figure class="wp-block-embed is-type-photo is-provider-cloudup wp-block-embed-cloudup"><div class="wp-block-embed__wrapper">
109
- https://cloudup.com/cQFlxqtY4ob
110
- </div></figure>
111
- <!-- /wp:embed -->`;
112
- const WP_EMBED_HTML = `<!-- wp:embed {"url":"https://wordpress.org/news/2021/07/tatum/","type":"wp-embed","providerNameSlug":"wordpress-news"} -->
113
- <figure class="wp-block-embed is-type-wp-embed is-provider-wordpress-news wp-block-embed-wordpress-news"><div class="wp-block-embed__wrapper">
114
- https://wordpress.org/news/2021/07/tatum/
115
- </div></figure>
116
- <!-- /wp:embed -->`;
117
-
118
- const EMPTY_PARAGRAPH_HTML =
119
- '<!-- wp:paragraph --><p></p><!-- /wp:paragraph -->';
120
-
121
- const MOST_USED_PROVIDERS = embed.settings.variations.filter( ( { name } ) =>
122
- [ 'youtube', 'twitter', 'wordpress', 'vimeo' ].includes( name )
123
- );
124
-
125
- // Return specified mocked responses for the oembed endpoint.
126
- const mockEmbedResponses = ( mockedResponses ) => {
127
- fetchRequest.mockImplementation( async ( req ) => {
128
- const matchedEmbedResponse = mockedResponses.find(
129
- ( mockedResponse ) =>
130
- req.path ===
131
- `/oembed/1.0/proxy?url=${ encodeURIComponent(
132
- mockedResponse.url
133
- ) }`
134
- );
135
-
136
- return matchedEmbedResponse || mockOtherResponses( req );
137
- } );
138
- };
139
-
140
- async function mockOtherResponses( { path } ) {
141
- if ( path.startsWith( '/wp/v2/themes' ) ) {
142
- return [
143
- {
144
- stylesheet: 'test-theme',
145
- theme_supports: { 'responsive-embeds': true },
146
- },
147
- ];
148
- }
149
-
150
- if ( path.startsWith( '/wp/v2/block-patterns/patterns' ) ) {
151
- return [];
152
- }
153
-
154
- if ( path.startsWith( '/wp/v2/block-patterns/categories' ) ) {
155
- return [];
156
- }
157
-
158
- return {};
159
- }
160
-
161
- const insertEmbedBlock = async ( blockTitle = 'Embed' ) => {
162
- const editor = await initializeEditor( { initialHtml: '' } );
163
-
164
- // Open inserter menu.
165
- fireEvent.press( await editor.findByLabelText( 'Add block' ) );
166
-
167
- // Insert embed block.
168
- fireEvent.press( await editor.findByText( blockTitle ) );
169
-
170
- // Return the embed block.
171
- const [ block ] = await editor.findAllByLabelText( /Embed Block\. Row 1/ );
172
-
173
- return { ...editor, block };
174
- };
175
-
176
- const initializeWithEmbedBlock = async ( initialHtml, selectBlock = true ) => {
177
- const editor = await initializeEditor( { initialHtml } );
178
-
179
- const [ block ] = await editor.findAllByLabelText( /Embed Block\. Row 1/ );
180
-
181
- if ( selectBlock ) {
182
- // Select block.
183
- fireEvent.press( block );
184
- }
185
-
186
- return { ...editor, block };
187
- };
188
-
189
- beforeAll( () => {
190
- // Paragraph block needs to be registered because by default a paragraph
191
- // block is added to empty posts.
192
- paragraph.init();
193
- embed.init();
194
- setDefaultBlockName( paragraph.name );
195
- } );
196
-
197
- beforeEach( () => {
198
- // Invalidate all resolutions of core-data to prevent
199
- // caching embed preview and theme supports requests.
200
- dispatch( coreStore ).invalidateResolutionForStore();
201
-
202
- // Mock embed responses.
203
- mockEmbedResponses( [
204
- RICH_TEXT_EMBED_SUCCESS_RESPONSE,
205
- VIDEO_EMBED_SUCCESS_RESPONSE,
206
- MOCK_EMBED_PHOTO_SUCCESS_RESPONSE,
207
- MOCK_BAD_EMBED_PROVIDER_RESPONSE,
208
- ] );
209
-
210
- // Intentionally suppress the expected console logs to reduce noise in the
211
- // test output.
212
- jest.spyOn( console, 'log' ).mockImplementation( () => {} );
213
- } );
214
-
215
- afterAll( () => {
216
- // Clean up registered blocks.
217
- getBlockTypes().forEach( ( block ) => {
218
- unregisterBlockType( block.name );
219
- } );
220
- } );
221
-
222
- describe( 'Embed block', () => {
223
- describe( 'insertion', () => {
224
- it( 'inserts generic embed block', async () => {
225
- const { block } = await insertEmbedBlock();
226
-
227
- const blockName = within( block ).getByText( 'Embed' );
228
-
229
- expect( blockName ).toBeDefined();
230
- expect( getEditorHtml() ).toMatchSnapshot();
231
- } );
232
-
233
- MOST_USED_PROVIDERS.forEach( ( { title } ) =>
234
- it( `inserts ${ title } block`, async () => {
235
- const { block } = await insertEmbedBlock( title );
236
- const blockName = within( block ).getByText( title );
237
-
238
- expect( blockName ).toBeDefined();
239
- expect( getEditorHtml() ).toMatchSnapshot();
240
- } )
241
- );
242
- } );
243
-
244
- describe( 'set URL upon block insertion', () => {
245
- it( 'sets empty URL when dismissing edit URL modal', async () => {
246
- const editor = await insertEmbedBlock();
247
-
248
- // Wait for edit URL modal to be visible.
249
- const embedEditURLModal = editor.getByTestId(
250
- 'link-settings-navigation'
251
- );
252
- await waitForModalVisible( embedEditURLModal );
253
-
254
- // Dismiss the edit URL modal.
255
- fireEvent( embedEditURLModal, 'backdropPress' );
256
- fireEvent( embedEditURLModal, MODAL_DISMISS_EVENT );
257
-
258
- expect( getEditorHtml() ).toMatchSnapshot();
259
- } );
260
-
261
- it( 'sets a valid URL when dismissing edit URL modal', async () => {
262
- const expectedURL = 'https://twitter.com/notnownikki';
263
-
264
- const editor = await insertEmbedBlock();
265
-
266
- // Wait for edit URL modal to be visible.
267
- const embedEditURLModal = editor.getByTestId(
268
- 'link-settings-navigation'
269
- );
270
- await waitForModalVisible( embedEditURLModal );
271
-
272
- // Set an URL.
273
- const linkTextInput = editor.getByPlaceholderText( 'Add link' );
274
- fireEvent( linkTextInput, 'focus' );
275
- fireEvent.changeText( linkTextInput, expectedURL );
276
-
277
- // Dismiss the edit URL modal.
278
- fireEvent( embedEditURLModal, 'backdropPress' );
279
- fireEvent( embedEditURLModal, MODAL_DISMISS_EVENT );
280
-
281
- // Wait until the WebView with the rich preview appears
282
- await waitFor( () => editor.UNSAFE_getByType( WebView ) );
283
- // Wait until responsiveness settings appear, driven by `theme_supports.responsive-embeds`
284
- await editor.findByText( 'Media settings' );
285
-
286
- const blockSettingsModal = await editor.findByTestId(
287
- 'block-settings-modal'
288
- );
289
- // Get Twitter Embed link field.
290
- const twitterLinkField = within(
291
- blockSettingsModal
292
- ).getByLabelText( `Twitter Embed link, ${ expectedURL }` );
293
-
294
- expect( twitterLinkField ).toBeDefined();
295
- expect( getEditorHtml() ).toMatchSnapshot();
296
- } );
297
-
298
- it( 'auto-pastes the URL from clipboard', async () => {
299
- const clipboardURL = 'https://twitter.com/notnownikki';
300
-
301
- // Mock clipboard.
302
- Clipboard.getString.mockResolvedValue( clipboardURL );
303
-
304
- const editor = await insertEmbedBlock();
305
-
306
- // Wait for edit URL modal to be visible.
307
- const embedEditURLModal = editor.getByTestId(
308
- 'link-settings-navigation'
309
- );
310
- await waitForModalVisible( embedEditURLModal );
311
-
312
- // Get embed link with auto-pasted URL.
313
- const autopastedLinkField = await editor.findByText( clipboardURL );
314
-
315
- // Dismiss the edit URL modal.
316
- fireEvent( embedEditURLModal, 'backdropPress' );
317
- fireEvent( embedEditURLModal, MODAL_DISMISS_EVENT );
318
-
319
- await waitFor( () => editor.UNSAFE_getByType( WebView ) );
320
- await editor.findByText( 'Media settings' );
321
-
322
- const blockSettingsModal = await editor.findByTestId(
323
- 'block-settings-modal'
324
- );
325
- // Get Twitter Embed link field.
326
- const twitterLinkField = within(
327
- blockSettingsModal
328
- ).getByLabelText( `Twitter Embed link, ${ clipboardURL }` );
329
-
330
- expect( autopastedLinkField ).toBeDefined();
331
- expect( twitterLinkField ).toBeDefined();
332
- expect( getEditorHtml() ).toMatchSnapshot();
333
-
334
- Clipboard.getString.mockReset();
335
- } );
336
- } );
337
-
338
- describe( 'set URL when empty block', () => {
339
- it( 'sets empty URL when dismissing edit URL modal', async () => {
340
- const editor = await initializeWithEmbedBlock( EMPTY_EMBED_HTML );
341
-
342
- // Edit URL.
343
- fireEvent.press( await editor.findByText( 'Add link' ) );
344
-
345
- // Wait for edit URL modal to be visible.
346
- const embedEditURLModal = editor.getByTestId(
347
- 'link-settings-navigation'
348
- );
349
- await waitForModalVisible( embedEditURLModal );
350
-
351
- // Dismiss the edit URL modal.
352
- fireEvent( embedEditURLModal, 'backdropPress' );
353
- fireEvent( embedEditURLModal, MODAL_DISMISS_EVENT );
354
-
355
- expect( getEditorHtml() ).toMatchSnapshot();
356
- } );
357
-
358
- it( 'sets a valid URL when dismissing edit URL modal', async () => {
359
- const expectedURL = 'https://twitter.com/notnownikki';
360
-
361
- const editor = await initializeWithEmbedBlock( EMPTY_EMBED_HTML );
362
-
363
- // Edit URL.
364
- fireEvent.press( editor.getByText( 'Add link' ) );
365
-
366
- // Wait for edit URL modal to be visible.
367
- const embedEditURLModal = editor.getByTestId(
368
- 'link-settings-navigation'
369
- );
370
- await waitForModalVisible( embedEditURLModal );
371
-
372
- // Set an URL.
373
- const linkTextInput = editor.getByPlaceholderText( 'Add link' );
374
- fireEvent( linkTextInput, 'focus' );
375
- fireEvent.changeText( linkTextInput, expectedURL );
376
-
377
- // Dismiss the edit URL modal.
378
- fireEvent( embedEditURLModal, 'backdropPress' );
379
- fireEvent( embedEditURLModal, MODAL_DISMISS_EVENT );
380
-
381
- await waitFor( () => editor.UNSAFE_getByType( WebView ) );
382
- await editor.findByText( 'Media settings' );
383
-
384
- const blockSettingsModal = await editor.findByTestId(
385
- 'block-settings-modal'
386
- );
387
- // Get Twitter Embed link field.
388
- const twitterLinkField = within(
389
- blockSettingsModal
390
- ).getByLabelText( `Twitter Embed link, ${ expectedURL }` );
391
-
392
- expect( twitterLinkField ).toBeDefined();
393
- expect( getEditorHtml() ).toMatchSnapshot();
394
- } );
395
-
396
- it( 'auto-pastes the URL from clipboard', async () => {
397
- const clipboardURL = 'https://twitter.com/notnownikki';
398
-
399
- // Mock clipboard.
400
- Clipboard.getString.mockResolvedValue( clipboardURL );
401
-
402
- const editor = await initializeWithEmbedBlock( EMPTY_EMBED_HTML );
403
-
404
- // Edit URL.
405
- fireEvent.press( editor.getByText( 'Add link' ) );
406
-
407
- // Wait for edit URL modal to be visible.
408
- const embedEditURLModal = editor.getByTestId(
409
- 'link-settings-navigation'
410
- );
411
- await waitForModalVisible( embedEditURLModal );
412
-
413
- // Get embed link.
414
- const embedLink = await editor.findByText( clipboardURL );
415
-
416
- // Dismiss the edit URL modal.
417
- fireEvent( embedEditURLModal, 'backdropPress' );
418
- fireEvent( embedEditURLModal, MODAL_DISMISS_EVENT );
419
-
420
- await waitFor( () => editor.UNSAFE_getByType( WebView ) );
421
- await editor.findByText( 'Media settings' );
422
-
423
- const blockSettingsModal = await editor.findByTestId(
424
- 'block-settings-modal'
425
- );
426
- // Get Twitter Embed link field.
427
- const twitterLinkField = within(
428
- blockSettingsModal
429
- ).getByLabelText( `Twitter Embed link, ${ clipboardURL }` );
430
-
431
- expect( embedLink ).toBeDefined();
432
- expect( twitterLinkField ).toBeDefined();
433
- expect( getEditorHtml() ).toMatchSnapshot();
434
-
435
- Clipboard.getString.mockReset();
436
- } );
437
- } );
438
-
439
- describe( 'edit URL', () => {
440
- it( 'keeps the previous URL if no URL is set', async () => {
441
- const editor =
442
- await initializeWithEmbedBlock( RICH_TEXT_EMBED_HTML );
443
-
444
- // Open Block Settings.
445
- fireEvent.press( await editor.findByLabelText( 'Open Settings' ) );
446
-
447
- // Wait for Block Settings to be visible.
448
- const blockSettingsModal = editor.getByTestId(
449
- 'block-settings-modal'
450
- );
451
- await waitForModalVisible( blockSettingsModal );
452
-
453
- // Dismiss the Block Settings modal.
454
- fireEvent( blockSettingsModal, 'backdropPress' );
455
- fireEvent( blockSettingsModal, MODAL_DISMISS_EVENT );
456
-
457
- expect( getEditorHtml() ).toMatchSnapshot();
458
- } );
459
-
460
- it( 'replaces URL', async () => {
461
- const initialURL = 'https://twitter.com/notnownikki';
462
- const expectedURL = 'https://www.youtube.com/watch?v=lXMskKTw3Bc';
463
-
464
- const editor =
465
- await initializeWithEmbedBlock( RICH_TEXT_EMBED_HTML );
466
-
467
- // Open Block Settings.
468
- fireEvent.press( await editor.findByLabelText( 'Open Settings' ) );
469
-
470
- // Wait for Block Settings to be visible.
471
- const blockSettingsModal = editor.getByTestId(
472
- 'block-settings-modal'
473
- );
474
- await waitForModalVisible( blockSettingsModal );
475
-
476
- // Start editing Embed link.
477
- fireEvent.press(
478
- within( blockSettingsModal ).getByLabelText(
479
- `Twitter Embed link, ${ initialURL }`
480
- )
481
- );
482
-
483
- // Replace URL.
484
- const linkTextInput = editor.getByDisplayValue( initialURL );
485
- fireEvent( linkTextInput, 'focus' );
486
- fireEvent.changeText( linkTextInput, expectedURL );
487
-
488
- // Dismiss the Block Settings modal.
489
- fireEvent( blockSettingsModal, 'backdropPress' );
490
- fireEvent( blockSettingsModal, MODAL_DISMISS_EVENT );
491
-
492
- await waitFor( () => editor.UNSAFE_getByType( WebView ) );
493
- await editor.findByText( 'Media settings' );
494
-
495
- // Get YouTube Embed link field.
496
- const youtubeLinkField = await within(
497
- blockSettingsModal
498
- ).findByLabelText( `YouTube Embed link, ${ expectedURL }` );
499
-
500
- expect( youtubeLinkField ).toBeDefined();
501
- expect( getEditorHtml() ).toMatchSnapshot();
502
- } );
503
-
504
- it( 'keeps the previous URL if an invalid URL is set', async () => {
505
- const previousURL = 'https://twitter.com/notnownikki';
506
- const invalidURL = 'http://';
507
-
508
- const editor =
509
- await initializeWithEmbedBlock( RICH_TEXT_EMBED_HTML );
510
-
511
- // Open Block Settings.
512
- fireEvent.press( await editor.findByLabelText( 'Open Settings' ) );
513
-
514
- // Wait for Block Settings to be visible.
515
- const blockSettingsModal = editor.getByTestId(
516
- 'block-settings-modal'
517
- );
518
- await waitForModalVisible( blockSettingsModal );
519
-
520
- // Start editing link.
521
- fireEvent.press(
522
- within( blockSettingsModal ).getByLabelText(
523
- `Twitter Embed link, ${ previousURL }`
524
- )
525
- );
526
-
527
- // Replace URL.
528
- const linkTextInput = editor.getByDisplayValue( previousURL );
529
- fireEvent( linkTextInput, 'focus' );
530
- fireEvent.changeText( linkTextInput, invalidURL );
531
-
532
- // Dismiss the Block Settings modal.
533
- fireEvent( blockSettingsModal, 'backdropPress' );
534
- fireEvent( blockSettingsModal, MODAL_DISMISS_EVENT );
535
-
536
- const errorNotice = await editor.findByText(
537
- 'Invalid URL. Please enter a valid URL.'
538
- );
539
-
540
- expect( errorNotice ).toBeDefined();
541
- expect( getEditorHtml() ).toMatchSnapshot();
542
- } );
543
-
544
- it( 'sets empty state when setting an empty URL', async () => {
545
- const previousURL = 'https://twitter.com/notnownikki';
546
-
547
- const editor =
548
- await initializeWithEmbedBlock( RICH_TEXT_EMBED_HTML );
549
-
550
- // Open Block Settings.
551
- fireEvent.press( await editor.findByLabelText( 'Open Settings' ) );
552
-
553
- // Get Block Settings modal.
554
- const blockSettingsModal = editor.getByTestId(
555
- 'block-settings-modal'
556
- );
557
-
558
- // Start editing link.
559
- fireEvent.press(
560
- within( blockSettingsModal ).getByLabelText(
561
- `Twitter Embed link, ${ previousURL }`
562
- )
563
- );
564
-
565
- // Replace URL with empty value.
566
- const linkTextInput = editor.getByDisplayValue( previousURL );
567
- fireEvent( linkTextInput, 'focus' );
568
- fireEvent.changeText( linkTextInput, '' );
569
-
570
- // Dismiss the Block Settings modal.
571
- fireEvent( blockSettingsModal, 'backdropPress' );
572
- fireEvent( blockSettingsModal, MODAL_DISMISS_EVENT );
573
-
574
- // Get empty embed link.
575
- const emptyLinkTextInput =
576
- await editor.findByPlaceholderText( 'Add link' );
577
-
578
- expect( emptyLinkTextInput ).toBeDefined();
579
- expect( getEditorHtml() ).toMatchSnapshot();
580
- } );
581
-
582
- // This test case covers the bug fixed in PR #35460.
583
- it( 'edits URL after dismissing two times the edit URL bottom sheet with empty value', async () => {
584
- const editor = await insertEmbedBlock();
585
-
586
- // Wait for edit URL modal to be visible.
587
- const embedEditURLModal = editor.getByTestId(
588
- 'link-settings-navigation'
589
- );
590
- await waitForModalVisible( embedEditURLModal );
591
-
592
- // Dismiss the edit URL modal.
593
- fireEvent( embedEditURLModal, 'backdropPress' );
594
- fireEvent( embedEditURLModal, MODAL_DISMISS_EVENT );
595
-
596
- // Select block.
597
- fireEvent.press( editor.block );
598
-
599
- // Edit URL.
600
- fireEvent.press( editor.getByText( 'Add link' ) );
601
-
602
- // Wait for edit URL modal to be visible.
603
- await waitForModalVisible( embedEditURLModal );
604
-
605
- // Dismiss the edit URL modal.
606
- fireEvent( embedEditURLModal, 'backdropPress' );
607
- fireEvent( embedEditURLModal, MODAL_DISMISS_EVENT );
608
-
609
- // Edit URL.
610
- fireEvent.press( editor.getByText( 'Add link' ) );
611
-
612
- // Wait for edit URL modal to be visible.
613
- await waitForModalVisible( embedEditURLModal );
614
-
615
- expect( embedEditURLModal.props.isVisible ).toBe( true );
616
- } );
617
-
618
- // This test case covers the bug fixed in PR #35013.
619
- it( 'edits URL when edited after setting a bad URL of a provider', async () => {
620
- const badURL = 'https://youtu.be/BAD_URL';
621
- const expectedURL = 'https://twitter.com/notnownikki';
622
-
623
- const editor = await insertEmbedBlock();
624
-
625
- // Wait for edit URL modal to be visible.
626
- const embedEditURLModal = editor.getByTestId(
627
- 'link-settings-navigation'
628
- );
629
- await waitForModalVisible( embedEditURLModal );
630
-
631
- // Set an bad URL.
632
- let linkTextInput = editor.getByPlaceholderText( 'Add link' );
633
- fireEvent( linkTextInput, 'focus' );
634
- fireEvent.changeText( linkTextInput, badURL );
635
-
636
- // Dismiss the edit URL modal.
637
- fireEvent( embedEditURLModal, 'backdropPress' );
638
- fireEvent( embedEditURLModal, MODAL_DISMISS_EVENT );
639
-
640
- // Open Block Settings.
641
- fireEvent.press( await editor.findByLabelText( 'Open Settings' ) );
642
-
643
- // Wait for Block Settings to be visible.
644
- const blockSettingsModal = editor.getByTestId(
645
- 'block-settings-modal'
646
- );
647
- await waitForModalVisible( blockSettingsModal );
648
-
649
- // Start editing link.
650
- fireEvent.press(
651
- within( blockSettingsModal ).getByLabelText(
652
- `Embed link, ${ badURL }`
653
- )
654
- );
655
-
656
- // Replace URL.
657
- linkTextInput = editor.getByDisplayValue( badURL );
658
- fireEvent( linkTextInput, 'focus' );
659
- fireEvent.changeText( linkTextInput, expectedURL );
660
-
661
- // Dismiss the Block Settings modal.
662
- fireEvent( blockSettingsModal, 'backdropPress' );
663
- fireEvent( blockSettingsModal, MODAL_DISMISS_EVENT );
664
-
665
- // Get Twitter Embed link field.
666
- const twitterLinkField = await within(
667
- blockSettingsModal
668
- ).findByLabelText( `Twitter Embed link, ${ expectedURL }` );
669
-
670
- expect( twitterLinkField ).toBeDefined();
671
- expect( getEditorHtml() ).toMatchSnapshot();
672
- } );
673
- } );
674
-
675
- describe( 'alignment options', () => {
676
- [
677
- 'Align left',
678
- 'Align center',
679
- 'Align right',
680
- 'Wide width',
681
- 'Full width',
682
- ].forEach( ( alignmentOption ) =>
683
- it( `sets ${ alignmentOption } option`, async () => {
684
- const editor =
685
- await initializeWithEmbedBlock( RICH_TEXT_EMBED_HTML );
686
-
687
- // Open alignment options.
688
- fireEvent.press( await editor.findByLabelText( 'Align' ) );
689
-
690
- // Select alignment option.
691
- fireEvent.press( await editor.findByText( alignmentOption ) );
692
-
693
- expect( getEditorHtml() ).toMatchSnapshot();
694
- } )
695
- );
696
- } );
697
-
698
- describe( 'retry', () => {
699
- it( 'retries loading the preview if initial request failed', async () => {
700
- const expectedURL = 'https://twitter.com/notnownikki';
701
-
702
- // Return bad response for the first request to oembed endpoint
703
- // and success response for the rest of requests.
704
- let isFirstEmbedRequest = true;
705
- fetchRequest.mockImplementation( async ( req ) => {
706
- if ( req.path.startsWith( '/oembed/1.0/proxy' ) ) {
707
- if ( isFirstEmbedRequest ) {
708
- isFirstEmbedRequest = false;
709
- return MOCK_BAD_WORDPRESS_RESPONSE;
710
- }
711
- return RICH_TEXT_EMBED_SUCCESS_RESPONSE;
712
- }
713
-
714
- return mockOtherResponses( req );
715
- } );
716
-
717
- const editor =
718
- await initializeWithEmbedBlock( RICH_TEXT_EMBED_HTML );
719
-
720
- await editor.findByText( 'Unable to embed media' );
721
-
722
- // Retry request.
723
- fireEvent.press( editor.getByText( 'More options' ) );
724
- fireEvent.press( editor.getByText( 'Retry' ) );
725
-
726
- await waitFor( () => editor.UNSAFE_getByType( WebView ) );
727
- await editor.findByText( 'Media settings' );
728
-
729
- const blockSettingsModal = await editor.findByTestId(
730
- 'block-settings-modal'
731
- );
732
- // Get Twitter Embed link field.
733
- const twitterLinkField = within(
734
- blockSettingsModal
735
- ).getByLabelText( `Twitter Embed link, ${ expectedURL }` );
736
-
737
- expect( twitterLinkField ).toBeDefined();
738
- expect( getEditorHtml() ).toMatchSnapshot();
739
- } );
740
-
741
- it( 'converts to link if preview request failed', async () => {
742
- // Return bad response for requests to oembed endpoint.
743
- fetchRequest.mockImplementation( async ( req ) => {
744
- if ( req.path.startsWith( '/oembed/1.0/proxy' ) ) {
745
- return MOCK_BAD_WORDPRESS_RESPONSE;
746
- }
747
-
748
- return mockOtherResponses( req );
749
- } );
750
-
751
- const editor =
752
- await initializeWithEmbedBlock( RICH_TEXT_EMBED_HTML );
753
-
754
- // Convert embed to link.
755
- fireEvent.press( editor.getByText( 'More options' ) );
756
- fireEvent.press( editor.getByText( 'Convert to link' ) );
757
-
758
- // Get paragraph block where the link is created.
759
- const [ paragraphBlock ] = await editor.findAllByLabelText(
760
- /Paragraph Block\. Row 1/
761
- );
762
-
763
- expect( paragraphBlock ).toBeDefined();
764
- expect( getEditorHtml() ).toMatchSnapshot();
765
- } );
766
-
767
- it( 'allows editing link if request failed', async () => {
768
- const failURL = 'https://wordpress.org/news/2021/07/tatum/';
769
- const successURL = 'https://twitter.com/notnownikki';
770
-
771
- // Return bad response for WordPress URL and success for Twitter URL.
772
- fetchRequest.mockImplementation( async ( req ) => {
773
- const matchesPath = ( url ) =>
774
- req.path ===
775
- `/oembed/1.0/proxy?url=${ encodeURIComponent( url ) }`;
776
-
777
- if ( matchesPath( failURL ) ) {
778
- return MOCK_BAD_WORDPRESS_RESPONSE;
779
- }
780
-
781
- if ( matchesPath( successURL ) ) {
782
- return RICH_TEXT_EMBED_SUCCESS_RESPONSE;
783
- }
784
-
785
- return mockOtherResponses( req );
786
- } );
787
-
788
- const editor = await initializeWithEmbedBlock( WP_EMBED_HTML );
789
-
790
- fireEvent.press( editor.getByText( 'More options' ) );
791
- fireEvent.press( editor.getByText( 'Edit link' ) );
792
-
793
- // Start editing link.
794
- fireEvent.press(
795
- editor.getByLabelText( `WordPress link, ${ failURL }` )
796
- );
797
-
798
- // Set an URL.
799
- const linkTextInput = editor.getByDisplayValue( failURL );
800
- fireEvent( linkTextInput, 'focus' );
801
- fireEvent.changeText( linkTextInput, successURL );
802
-
803
- // Dismiss the edit URL modal.
804
- const embedEditURLModal = editor.getByTestId(
805
- 'link-settings-navigation'
806
- );
807
- fireEvent( embedEditURLModal, 'backdropPress' );
808
- fireEvent( embedEditURLModal, MODAL_DISMISS_EVENT );
809
-
810
- await waitFor( () => editor.UNSAFE_getByType( WebView ) );
811
-
812
- const blockSettingsModal = await editor.findByTestId(
813
- 'block-settings-modal'
814
- );
815
- // Get Twitter embed link field.
816
- const twitterLinkField = within(
817
- blockSettingsModal
818
- ).getByLabelText( `Twitter Embed link, ${ successURL }` );
819
-
820
- expect( twitterLinkField ).toBeDefined();
821
- expect( getEditorHtml() ).toMatchSnapshot();
822
- } );
823
- } );
824
-
825
- describe( 'preview coming soon', () => {
826
- it( 'previews post for providers which embed preview is not available yet', async () => {
827
- const { getByText, getByTestId } =
828
- await initializeWithEmbedBlock( PHOTO_EMBED_HTML );
829
-
830
- // Try to preview the post.
831
- fireEvent.press( getByText( 'PREVIEW POST' ) );
832
-
833
- // Wait for no preview modal to be visible.
834
- const noPreviewModal = getByTestId( 'embed-no-preview-modal' );
835
- await waitForModalVisible( noPreviewModal );
836
-
837
- // Preview post.
838
- fireEvent.press( getByText( 'Preview post' ) );
839
-
840
- // Dismiss the no preview modal.
841
- fireEvent( noPreviewModal, 'backdropPress' );
842
- fireEvent( noPreviewModal, MODAL_DISMISS_EVENT );
843
-
844
- expect( requestPreview ).toHaveBeenCalled();
845
- } );
846
-
847
- it( 'dismisses no preview modal', async () => {
848
- const { getByText, getByTestId } =
849
- await initializeWithEmbedBlock( PHOTO_EMBED_HTML );
850
-
851
- // Try to preview the post.
852
- fireEvent.press( getByText( 'PREVIEW POST' ) );
853
-
854
- // Wait for no preview modal to be visible.
855
- const noPreviewModal = getByTestId( 'embed-no-preview-modal' );
856
- await waitForModalVisible( noPreviewModal );
857
-
858
- // Dismiss modal.
859
- fireEvent.press( getByText( 'Dismiss' ) );
860
-
861
- // Wait for no preview modal to be not visible.
862
- await waitFor( () =>
863
- expect( noPreviewModal.props.isVisible ).toBe( false )
864
- );
865
-
866
- expect( requestPreview ).not.toHaveBeenCalled();
867
- } );
868
- } );
869
-
870
- describe( 'create by pasting URL', () => {
871
- it( 'creates embed block when pasting URL in paragraph block', async () => {
872
- const expectedURL = 'https://www.youtube.com/watch?v=lXMskKTw3Bc';
873
-
874
- const editor = await initializeEditor( {
875
- initialHtml: EMPTY_PARAGRAPH_HTML,
876
- } );
877
-
878
- // Paste URL in paragraph block.
879
- const paragraphText =
880
- editor.getByPlaceholderText( 'Start writing…' );
881
- fireEvent( paragraphText, 'focus' );
882
- fireEvent( paragraphText, 'paste', {
883
- preventDefault: jest.fn(),
884
- nativeEvent: {
885
- eventCount: 1,
886
- target: undefined,
887
- files: [],
888
- pastedHtml: expectedURL,
889
- pastedText: expectedURL,
890
- },
891
- } );
892
-
893
- // Wait for embed handler picker to be visible.
894
- const embedHandlerPicker = editor.getByTestId(
895
- 'embed-handler-picker'
896
- );
897
- await waitForModalVisible( embedHandlerPicker );
898
-
899
- // Select create embed option.
900
- fireEvent.press( editor.getByText( 'Create embed' ) );
901
- expect( console ).toHaveLoggedWith(
902
- 'Processed HTML piece:\n\n',
903
- `<p>${ expectedURL }</p>`
904
- );
905
-
906
- // Get the created embed block.
907
- const [ embedBlock ] =
908
- await editor.findAllByLabelText( /Embed Block\. Row 1/ );
909
-
910
- expect( embedBlock ).toBeDefined();
911
-
912
- await waitFor( () => editor.UNSAFE_getByType( WebView ) );
913
- await editor.findByText( 'Media settings' );
914
-
915
- expect( getEditorHtml() ).toMatchSnapshot();
916
- } );
917
-
918
- it( 'creates link when pasting URL in paragraph block', async () => {
919
- const expectedURL = 'https://www.youtube.com/watch?v=lXMskKTw3Bc';
920
-
921
- const editor = await initializeEditor( {
922
- initialHtml: EMPTY_PARAGRAPH_HTML,
923
- } );
924
-
925
- // Paste URL in paragraph block.
926
- const paragraphText =
927
- editor.getByPlaceholderText( 'Start writing…' );
928
- fireEvent( paragraphText, 'focus' );
929
- fireEvent( paragraphText, 'paste', {
930
- preventDefault: jest.fn(),
931
- nativeEvent: {
932
- eventCount: 1,
933
- target: undefined,
934
- files: [],
935
- pastedHtml: expectedURL,
936
- pastedText: expectedURL,
937
- },
938
- } );
939
-
940
- // Wait for embed handler picker to be visible.
941
- const embedHandlerPicker = editor.getByTestId(
942
- 'embed-handler-picker'
943
- );
944
- await waitForModalVisible( embedHandlerPicker );
945
-
946
- // Select create link option.
947
- fireEvent.press( editor.getByText( 'Create link' ) );
948
- expect( console ).toHaveLoggedWith(
949
- 'Processed HTML piece:\n\n',
950
- `<p>${ expectedURL }</p>`
951
- );
952
-
953
- // Get the link text.
954
- const linkText = await editor.findByDisplayValue(
955
- `<p><a href="${ expectedURL }">${ expectedURL }</a></p>`
956
- );
957
-
958
- expect( linkText ).toBeDefined();
959
- expect( getEditorHtml() ).toMatchSnapshot();
960
- } );
961
- } );
962
-
963
- describe( 'insert via slash inserter', () => {
964
- it( 'insert generic embed block', async () => {
965
- const embedBlockSlashInserter = '/Embed';
966
- const editor = await initializeEditor( {
967
- initialHtml: EMPTY_PARAGRAPH_HTML,
968
- } );
969
-
970
- const paragraphText =
971
- editor.getByPlaceholderText( 'Start writing…' );
972
- fireEvent( paragraphText, 'focus' );
973
- // Trigger onSelectionChange to update both the current text and text selection.
974
- // This event is required by the autocompleter, as it only displays the slash inserter
975
- // if the text selection is located at the end of the text, for this reason,
976
- // the start and end arguments match the text length.
977
- fireEvent(
978
- paragraphText,
979
- 'onSelectionChange',
980
- embedBlockSlashInserter.length,
981
- embedBlockSlashInserter.length,
982
- embedBlockSlashInserter,
983
- {
984
- nativeEvent: {
985
- eventCount: 1,
986
- target: undefined,
987
- text: embedBlockSlashInserter,
988
- },
989
- }
990
- );
991
-
992
- fireEvent.press( await editor.findByText( 'Embed' ) );
993
-
994
- const [ block ] =
995
- await editor.findAllByLabelText( /Embed Block\. Row 1/ );
996
-
997
- const blockName = within( block ).getByText( 'Embed' );
998
-
999
- expect( blockName ).toBeDefined();
1000
- expect( getEditorHtml() ).toMatchSnapshot();
1001
- } );
1002
-
1003
- MOST_USED_PROVIDERS.forEach( ( { title } ) =>
1004
- it( `inserts ${ title } block`, async () => {
1005
- // Get just the first word of the title ("Twitter") as the full title ("Twitter Embed") breaks the test.
1006
- const embedBlockSlashInserter = `/${ title.split( ' ' )[ 0 ] }`;
1007
- const editor = await initializeEditor( {
1008
- initialHtml: EMPTY_PARAGRAPH_HTML,
1009
- } );
1010
-
1011
- const paragraphText =
1012
- editor.getByPlaceholderText( 'Start writing…' );
1013
- fireEvent( paragraphText, 'focus' );
1014
- // Trigger onSelectionChange to update both the current text and text selection.
1015
- // This event is required by the autocompleter, as it only displays the slash inserter
1016
- // if the text selection is located at the end of the text, for this reason,
1017
- // the start and end arguments match the text length.
1018
- fireEvent(
1019
- paragraphText,
1020
- 'onSelectionChange',
1021
- embedBlockSlashInserter.length,
1022
- embedBlockSlashInserter.length,
1023
- embedBlockSlashInserter,
1024
- {
1025
- nativeEvent: {
1026
- eventCount: 1,
1027
- target: undefined,
1028
- text: embedBlockSlashInserter,
1029
- },
1030
- }
1031
- );
1032
-
1033
- fireEvent.press( await editor.findByText( title ) );
1034
-
1035
- const [ block ] =
1036
- await editor.findAllByLabelText( /Embed Block\. Row 1/ );
1037
-
1038
- const blockName = within( block ).getByText( title );
1039
-
1040
- expect( blockName ).toBeDefined();
1041
- expect( getEditorHtml() ).toMatchSnapshot();
1042
- } )
1043
- );
1044
- } );
1045
-
1046
- it( 'sets block caption', async () => {
1047
- const expectedCaption = 'Caption';
1048
-
1049
- const screen = await initializeWithEmbedBlock( RICH_TEXT_EMBED_HTML );
1050
-
1051
- // Set a caption.
1052
- const captionField = screen.getByPlaceholderText( 'Add caption' );
1053
- fireEvent( captionField, 'focus' );
1054
- fireEvent( captionField, 'onChange', {
1055
- nativeEvent: {
1056
- eventCount: 1,
1057
- target: undefined,
1058
- text: expectedCaption,
1059
- },
1060
- } );
1061
-
1062
- // Get current caption.
1063
- const caption = await screen.findByDisplayValue(
1064
- `<p>${ expectedCaption }</p>`
1065
- );
1066
-
1067
- expect( caption ).toBeDefined();
1068
- expect( getEditorHtml() ).toMatchSnapshot();
1069
- } );
1070
-
1071
- it( 'displays cannot embed on the placeholder if preview data is null', async () => {
1072
- // Return null response for requests to oembed endpoint.
1073
- fetchRequest.mockImplementation( async ( req ) => {
1074
- if ( req.path.startsWith( '/oembed/1.0/proxy' ) ) {
1075
- return EMBED_NULL_RESPONSE;
1076
- }
1077
-
1078
- return mockOtherResponses( req );
1079
- } );
1080
-
1081
- const { getByText } = await initializeWithEmbedBlock(
1082
- RICH_TEXT_ERROR_EMBED_HTML
1083
- );
1084
-
1085
- const cannotEmbedText = getByText( 'Unable to embed media' );
1086
-
1087
- expect( cannotEmbedText ).toBeDefined();
1088
- expect( getEditorHtml() ).toMatchSnapshot();
1089
- } );
1090
-
1091
- describe( 'block settings', () => {
1092
- it( 'toggles resize for smaller devices media settings', async () => {
1093
- const screen =
1094
- await initializeWithEmbedBlock( RICH_TEXT_EMBED_HTML );
1095
-
1096
- // Open Block Settings.
1097
- fireEvent.press( await screen.findByLabelText( 'Open Settings' ) );
1098
-
1099
- // Untoggle resize for smaller devices.
1100
- fireEvent.press(
1101
- await screen.findByText( /Resize for smaller devices/ )
1102
- );
1103
-
1104
- expect( getEditorHtml() ).toMatchSnapshot();
1105
- } );
1106
-
1107
- it( 'does not show media settings panel if responsive is not supported', async () => {
1108
- const screen = await initializeWithEmbedBlock( WP_EMBED_HTML );
1109
-
1110
- // Open Block Settings.
1111
- fireEvent.press( await screen.findByLabelText( 'Open Settings' ) );
1112
-
1113
- // Wait for media settings panel.
1114
- let mediaSettingsPanel;
1115
- try {
1116
- mediaSettingsPanel =
1117
- await screen.findByText( 'Media settings' );
1118
- } catch {
1119
- // NOOP.
1120
- }
1121
-
1122
- expect( mediaSettingsPanel ).not.toBeDefined();
1123
- } );
1124
- } );
1125
- } );