@automattic/newspack-blocks 1.37.0 → 1.48.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 (292) hide show
  1. package/.cache/babel/00255e6096be9e31ec354db849dfefaa.json.gz +0 -0
  2. package/.cache/babel/0265bee20d709ac92f56456637727f4b.json.gz +0 -0
  3. package/.cache/babel/02986ba19dc461a152ea1c45f3f36a27.json.gz +0 -0
  4. package/.cache/babel/06a1700c1a4a989fc7886c86bf6223f7.json.gz +0 -0
  5. package/.cache/babel/07169c73863508b392f15022920bd0b6.json.gz +0 -0
  6. package/.cache/babel/0a5083e561829e3884cb5c71388adc3f.json.gz +0 -0
  7. package/.cache/babel/0a713997b6e4f45849ed6a4bff79cca5.json.gz +0 -0
  8. package/.cache/babel/0a9506bf649ffbe854e75459cf6b8972.json.gz +0 -0
  9. package/.cache/babel/0c12c4398bbbf2d771b13dd1d0e64097.json.gz +0 -0
  10. package/.cache/babel/0f8c18da204f4cc2777ca3191f10c309.json.gz +0 -0
  11. package/.cache/babel/0fced15ed787cc4239bb53c1d12892e6.json.gz +0 -0
  12. package/.cache/babel/10faf7c74a89e9aa4d8b9528a654913e.json.gz +0 -0
  13. package/.cache/babel/1353b411b65a123b5dc35012db11aa1d.json.gz +0 -0
  14. package/.cache/babel/1729336f326db1cf54b9c1671dc5e36c.json.gz +0 -0
  15. package/.cache/babel/17a433ab631a32d0712f3f75cf85ea99.json.gz +0 -0
  16. package/.cache/babel/1948e72d907f681ff771881ad6800ee1.json.gz +0 -0
  17. package/.cache/babel/1ab4bf44aa14d2eb7e6911900a3b2c12.json.gz +0 -0
  18. package/.cache/babel/1decfd137cac87a75bd83ffbd39c9106.json.gz +0 -0
  19. package/.cache/babel/2143ceff6d186bc13bc902e0f1f33dbf.json.gz +0 -0
  20. package/.cache/babel/23c63332718e167968a7c2a8a5f730eb.json.gz +0 -0
  21. package/.cache/babel/24bf53676e12293cbf88d01e649fd167.json.gz +0 -0
  22. package/.cache/babel/26ba0bb46844575022e54a8819fbf405.json.gz +0 -0
  23. package/.cache/babel/281ca171ce8947f87f574df11059e00b.json.gz +0 -0
  24. package/.cache/babel/28700b83434e4dbfb9a20d7ec0a7e7a4.json.gz +0 -0
  25. package/.cache/babel/29cf8eeea8630ade027e34459f2e49ee.json.gz +0 -0
  26. package/.cache/babel/2b0dd254a46223a93e6259d2b797a7e7.json.gz +0 -0
  27. package/.cache/babel/2da6786ede3ddda4c86eeac524a6a796.json.gz +0 -0
  28. package/.cache/babel/2e7ce10fdee94274b48d528f94c32b34.json.gz +0 -0
  29. package/.cache/babel/2f93fed1706a40d82122281cc3677074.json.gz +0 -0
  30. package/.cache/babel/3a59b710e9745ef93148d6d74ee7d16f.json.gz +0 -0
  31. package/.cache/babel/3b2c440027c793c8f7978d7622cbfca0.json.gz +0 -0
  32. package/.cache/babel/3ca939ace4af88e266942d93837ab37a.json.gz +0 -0
  33. package/.cache/babel/3e671670c4d395cd1804ef4be31955e4.json.gz +0 -0
  34. package/.cache/babel/3e69fe002d9973c0030152a51da9477a.json.gz +0 -0
  35. package/.cache/babel/3f5f8ea603fd57850c6683c750fe53d8.json.gz +0 -0
  36. package/.cache/babel/41abaaadb68b0657a95fa0c356873def.json.gz +0 -0
  37. package/.cache/babel/421ac952d6b472ba18e1cb95ef65f42a.json.gz +0 -0
  38. package/.cache/babel/424185dd50e91d8dee5fdae43086010e.json.gz +0 -0
  39. package/.cache/babel/427a6423ebde76bcb488747127e47351.json.gz +0 -0
  40. package/.cache/babel/43e800659f23430a181fb4fc328eb6ef.json.gz +0 -0
  41. package/.cache/babel/469651017a2b6f3b9f63fda034974b3a.json.gz +0 -0
  42. package/.cache/babel/480d26447b7ee019a37e4e18422403e9.json.gz +0 -0
  43. package/.cache/babel/4b58fad313d90a4c1577a2766e6c924c.json.gz +0 -0
  44. package/.cache/babel/4d2d42fea63650192d1a3a5648b621c5.json.gz +0 -0
  45. package/.cache/babel/4d8c26a76e77fa64d01f30a5f2d62f85.json.gz +0 -0
  46. package/.cache/babel/4f606ce6656565507a74aaac8dc21eea.json.gz +0 -0
  47. package/.cache/babel/505f37592f4c601ccdc1581ca89d9009.json.gz +0 -0
  48. package/.cache/babel/50aaf34aa54b2cd3058518e42850bb62.json.gz +0 -0
  49. package/.cache/babel/51fbf389462feb111228ba7ec64c631d.json.gz +0 -0
  50. package/.cache/babel/51fc90ae5fe129a095172032f304dc2c.json.gz +0 -0
  51. package/.cache/babel/53dbf5484c5601528c2fd8d7fe728b78.json.gz +0 -0
  52. package/.cache/babel/58e4535574062eb2d8fa56d002e7190d.json.gz +0 -0
  53. package/.cache/babel/5aa5e8d1492938c62999de022c4b220e.json.gz +0 -0
  54. package/.cache/babel/5d64e475284e52c104df17e26066b17b.json.gz +0 -0
  55. package/.cache/babel/6333c664d69f13036f42bcf575c8e65d.json.gz +0 -0
  56. package/.cache/babel/635c439786b8522888342779b28ee9ee.json.gz +0 -0
  57. package/.cache/babel/648cffdd5ec4a2446f8935a17b98080b.json.gz +0 -0
  58. package/.cache/babel/64b0dd478e6f2dd51de5ee20e311aee7.json.gz +0 -0
  59. package/.cache/babel/6531721abbc0b3906b28b268ed7914af.json.gz +0 -0
  60. package/.cache/babel/66bf5585c7901a76c7d4014fa9ffed40.json.gz +0 -0
  61. package/.cache/babel/6ef313cb6d3a59f73a6b78e1a729fb13.json.gz +0 -0
  62. package/.cache/babel/6f14eed506421f15710d3dfafe3dcd93.json.gz +0 -0
  63. package/.cache/babel/70f6c01d8c6bc3efc41c97eaf49f7617.json.gz +0 -0
  64. package/.cache/babel/72321dde68f0bb9c334d90d6f4584be8.json.gz +0 -0
  65. package/.cache/babel/76c815fab58595f57e01af6591791d57.json.gz +0 -0
  66. package/.cache/babel/7c10f4d554daa8efe1e0a4457fb6d27b.json.gz +0 -0
  67. package/.cache/babel/7dffccddd9780ab37fb79f809947c2cd.json.gz +0 -0
  68. package/.cache/babel/7e5162e3319cd5d6fca6c0db0516aaeb.json.gz +0 -0
  69. package/.cache/babel/803192c922f7d419648bab7e1201b22e.json.gz +0 -0
  70. package/.cache/babel/81f3f0f896d29cdf88f8543dedb77787.json.gz +0 -0
  71. package/.cache/babel/84c019d3d643195fb37d08110f15f8c9.json.gz +0 -0
  72. package/.cache/babel/853c31db7c4351f2f36d1021c667224d.json.gz +0 -0
  73. package/.cache/babel/88ec99735ea4f314937736f04360ff8c.json.gz +0 -0
  74. package/.cache/babel/8959ab8fcfa783cb56e9418b99c0951c.json.gz +0 -0
  75. package/.cache/babel/8b9624d721f8706682e33fe1853c8287.json.gz +0 -0
  76. package/.cache/babel/8de5c373bbc4b6fbeec373d582935887.json.gz +0 -0
  77. package/.cache/babel/8f24517cff634d2e91c19e51be8816cc.json.gz +0 -0
  78. package/.cache/babel/901e1bb823eca196b594baa35a35a81c.json.gz +0 -0
  79. package/.cache/babel/90dbc666ff9fa3b88f305fe90a9917bf.json.gz +0 -0
  80. package/.cache/babel/91b62dfd9475df7a39dc08fbd43847f9.json.gz +0 -0
  81. package/.cache/babel/956daf27323e3b87bf8bf9bbf58881ed.json.gz +0 -0
  82. package/.cache/babel/959e9b81103c539a9d85ac60955451b9.json.gz +0 -0
  83. package/.cache/babel/963b1e44be998c4dcc6845745c377369.json.gz +0 -0
  84. package/.cache/babel/966b41ac1317b3e03ca1e59f7eb57e8c.json.gz +0 -0
  85. package/.cache/babel/969d5992cc682e3b43761ef02c10b851.json.gz +0 -0
  86. package/.cache/babel/99df128bb528d0f95a56b311801d14c1.json.gz +0 -0
  87. package/.cache/babel/9b33e7d21f3fc4955a536a033cced71b.json.gz +0 -0
  88. package/.cache/babel/9c5ec84f77314a621c01ad77da7ccb58.json.gz +0 -0
  89. package/.cache/babel/9d325af12a88623602a5f8c2fce04847.json.gz +0 -0
  90. package/.cache/babel/a413e4d325543836d0800684bb26ed04.json.gz +0 -0
  91. package/.cache/babel/a5405f86b8d1485e62a125275507e60f.json.gz +0 -0
  92. package/.cache/babel/a7f7461321ca6fd4360df04bb894c106.json.gz +0 -0
  93. package/.cache/babel/a8a6812e1c7b65cc6d0bdebe2a35c8ca.json.gz +0 -0
  94. package/.cache/babel/aa89cfc4c88fcc465b8d74af824e7f6b.json.gz +0 -0
  95. package/.cache/babel/adbaeb5ddf5612b3dcd233a3f6f17bf2.json.gz +0 -0
  96. package/.cache/babel/ae18cd6ec42a3366c73435b62a9f5f70.json.gz +0 -0
  97. package/.cache/babel/aea149ee1ec6fa3ca7839c63f5edd78d.json.gz +0 -0
  98. package/.cache/babel/af1b34067a69854e109c0b0e45d90e43.json.gz +0 -0
  99. package/.cache/babel/b3a335ab950f502914013810b43b0ad5.json.gz +0 -0
  100. package/.cache/babel/b6cfba15cda3404d4b1041df448ed2b2.json.gz +0 -0
  101. package/.cache/babel/ba711530bd319618a0510d8361bebb45.json.gz +0 -0
  102. package/.cache/babel/ba77e682225df6126b636458055601d9.json.gz +0 -0
  103. package/.cache/babel/bab8189a74eee8d72702d1510b52b3b3.json.gz +0 -0
  104. package/.cache/babel/bd8741020db56bb5d999252812d1d717.json.gz +0 -0
  105. package/.cache/babel/beaa874c5e01203d9dbe23cb89405276.json.gz +0 -0
  106. package/.cache/babel/c196c9b8c21953c474acdaa9029b3cbf.json.gz +0 -0
  107. package/.cache/babel/c1e31e6c217023eb3d3fd5d3de486ac3.json.gz +0 -0
  108. package/.cache/babel/c3aa996443e7f377aa423bcc03ffc617.json.gz +0 -0
  109. package/.cache/babel/c481eae84d69b65405a44af442dbfea7.json.gz +0 -0
  110. package/.cache/babel/c4a817d6c4bf6eb3687ffccc5c2df801.json.gz +0 -0
  111. package/.cache/babel/c8b10cf6f706fb669d6dd7564385768d.json.gz +0 -0
  112. package/.cache/babel/caa2f98ba4af6eba0605543f690693c6.json.gz +0 -0
  113. package/.cache/babel/cada4b2cecb2c1fcc48b7a7ecda54907.json.gz +0 -0
  114. package/.cache/babel/d1bed5404789c427c32965ac6ecad0d9.json.gz +0 -0
  115. package/.cache/babel/d395e8c0a9c63680f2dcf90ca0e91d4a.json.gz +0 -0
  116. package/.cache/babel/d4672090e0dd9a73bfb00bd770b23643.json.gz +0 -0
  117. package/.cache/babel/d4c81f65fe6d78cdbdcf1ef901b7ba1b.json.gz +0 -0
  118. package/.cache/babel/d515ddc0797ea256ff7271507737e9ce.json.gz +0 -0
  119. package/.cache/babel/d742848d263503f79168f1a6b8a52097.json.gz +0 -0
  120. package/.cache/babel/d834b41d7028519ecd0cbc8c65d33dde.json.gz +0 -0
  121. package/.cache/babel/d9060b9162e7caf974db0b90b6134727.json.gz +0 -0
  122. package/.cache/babel/d946975b9beac51a39f600461e84b1b6.json.gz +0 -0
  123. package/.cache/babel/daf0af780cff2270b1ae0e4b97a5a4ab.json.gz +0 -0
  124. package/.cache/babel/db5215643b0737dc5245972a5c25f736.json.gz +0 -0
  125. package/.cache/babel/dd57b8d31664b147b9f1e3f5cd18cc2a.json.gz +0 -0
  126. package/.cache/babel/e0c78bdaae19f15e2dd4a773e842422b.json.gz +0 -0
  127. package/.cache/babel/e1a2c7e4fc3afe9cc6e03d60f4e4a23d.json.gz +0 -0
  128. package/.cache/babel/e210ff9aa99df972b8d81c4bda70f642.json.gz +0 -0
  129. package/.cache/babel/e259a73f84d5b92b94e6d094719264c3.json.gz +0 -0
  130. package/.cache/babel/e6ce03a9908c9c4dc2c723531f1073f6.json.gz +0 -0
  131. package/.cache/babel/e8a1501dd8e4b3389ecdc8f722622359.json.gz +0 -0
  132. package/.cache/babel/eb3bb371036da362c42db50248d0b180.json.gz +0 -0
  133. package/.cache/babel/eb854e03c810bdb969497b2a36119bfa.json.gz +0 -0
  134. package/.cache/babel/ec25bb53826070b7f301e64f02355b8c.json.gz +0 -0
  135. package/.cache/babel/edbaca20e4a65f850c3d8321c1945718.json.gz +0 -0
  136. package/.cache/babel/f059f1ca9e49d5c3e655d20339860dce.json.gz +0 -0
  137. package/.cache/babel/f24c559fb42ef906405966598baf5f80.json.gz +0 -0
  138. package/.cache/babel/f2f333c3c546ad711d722d782decd450.json.gz +0 -0
  139. package/.cache/babel/f42c854ce8f1dc1a6e6fe7c510b033a5.json.gz +0 -0
  140. package/.cache/babel/f5211608f22c2e12594eafdbc4e66aa5.json.gz +0 -0
  141. package/.cache/babel/f645b8c88a49718cd778e3595212d4eb.json.gz +0 -0
  142. package/.cache/babel/f66dda5c4e4e9d04eb6b7411fcb12a65.json.gz +0 -0
  143. package/.cache/babel/f9d5b6f3f5438342dba75c2ce6143eef.json.gz +0 -0
  144. package/.cache/babel/fc9c60ee1d2e8783ba4c08db5cf97d40.json.gz +0 -0
  145. package/.cache/babel/fd558798cea72d04fb826468a89d72aa.json.gz +0 -0
  146. package/.cache/babel/fe735cbd0f6e131e28d8b6eb1f39141b.json.gz +0 -0
  147. package/.eslintrc.js +3 -26
  148. package/.nvmrc +1 -0
  149. package/CHANGELOG.md +422 -0
  150. package/babel.config.js +6 -0
  151. package/block-list.json +1 -1
  152. package/composer.json +2 -2
  153. package/composer.lock +446 -161
  154. package/dist/author-list/view.asset.php +1 -0
  155. package/dist/author-list/view.css +1 -0
  156. package/dist/author-list/view.js +1 -0
  157. package/dist/author-list/view.rtl.css +1 -0
  158. package/dist/author-profile/view.asset.php +1 -0
  159. package/dist/author-profile/view.css +1 -0
  160. package/dist/author-profile/view.js +1 -0
  161. package/dist/author-profile/view.rtl.css +1 -0
  162. package/dist/block_styles.asset.php +1 -0
  163. package/dist/block_styles.css +1 -0
  164. package/dist/block_styles.js +1 -0
  165. package/dist/block_styles.rtl.css +1 -0
  166. package/dist/carousel/view.asset.php +1 -0
  167. package/dist/carousel/view.css +1 -0
  168. package/dist/carousel/view.js +1 -0
  169. package/dist/carousel/view.rtl.css +1 -0
  170. package/dist/donate/view.asset.php +1 -0
  171. package/dist/donate/view.css +1 -0
  172. package/dist/donate/view.js +1 -0
  173. package/dist/donate/view.rtl.css +1 -0
  174. package/dist/donateStreamlined.asset.php +1 -0
  175. package/dist/donateStreamlined.css +1 -0
  176. package/dist/donateStreamlined.js +1 -0
  177. package/dist/donateStreamlined.rtl.css +1 -0
  178. package/dist/editor.asset.php +1 -0
  179. package/dist/editor.css +1 -0
  180. package/dist/editor.js +41 -0
  181. package/dist/editor.rtl.css +1 -0
  182. package/dist/homepage-articles/view.asset.php +1 -0
  183. package/dist/homepage-articles/view.css +1 -0
  184. package/dist/homepage-articles/view.js +1 -0
  185. package/dist/homepage-articles/view.rtl.css +1 -0
  186. package/dist/iframe/view.asset.php +1 -0
  187. package/dist/iframe/view.css +1 -0
  188. package/dist/iframe/view.js +1 -0
  189. package/dist/iframe/view.rtl.css +1 -0
  190. package/includes/class-newspack-blocks-api.php +14 -69
  191. package/includes/class-newspack-blocks-patterns.php +4 -1
  192. package/includes/class-newspack-blocks.php +421 -95
  193. package/newspack-blocks.php +26 -2
  194. package/package.json +31 -129
  195. package/postcss.config.js +11 -0
  196. package/src/block-patterns/subscribe-2.php +1 -1
  197. package/src/block-patterns/subscribe-3.php +1 -1
  198. package/src/block-patterns/subscribe-7.php +12 -0
  199. package/src/block-patterns/subscribe-8.php +12 -0
  200. package/src/block-patterns/subscribe-9.php +12 -0
  201. package/src/block-styles/core/columns/editor.scss +5 -8
  202. package/src/block-styles/core/columns/view.scss +83 -42
  203. package/src/blocks/author-list/block.json +82 -0
  204. package/src/blocks/author-list/class-wp-rest-newspack-author-list-controller.php +387 -0
  205. package/src/blocks/author-list/edit.js +527 -0
  206. package/src/blocks/author-list/editor.js +7 -0
  207. package/src/blocks/author-list/editor.scss +1 -0
  208. package/src/blocks/author-list/index.js +45 -0
  209. package/src/blocks/author-list/view.js +5 -0
  210. package/src/blocks/author-list/view.php +175 -0
  211. package/src/blocks/author-list/view.scss +46 -0
  212. package/src/blocks/author-profile/block.json +8 -0
  213. package/src/blocks/author-profile/class-wp-rest-newspack-authors-controller.php +69 -14
  214. package/src/blocks/author-profile/edit.js +212 -189
  215. package/src/blocks/author-profile/editor.scss +1 -1
  216. package/src/blocks/author-profile/single-author.js +100 -0
  217. package/src/blocks/author-profile/view.php +38 -92
  218. package/src/blocks/author-profile/view.scss +120 -1
  219. package/src/blocks/carousel/create-swiper.js +14 -5
  220. package/src/blocks/carousel/edit.js +4 -2
  221. package/src/blocks/carousel/editor.scss +3 -12
  222. package/src/blocks/carousel/view.js +1 -1
  223. package/src/blocks/carousel/view.php +9 -5
  224. package/src/blocks/carousel/view.scss +29 -3
  225. package/src/blocks/donate/class-wp-rest-newspack-donate-controller.php +22 -24
  226. package/src/blocks/donate/edit.js +49 -42
  227. package/src/blocks/donate/editor.scss +27 -3
  228. package/src/blocks/donate/index.js +31 -4
  229. package/src/blocks/donate/streamlined/index.js +248 -0
  230. package/src/blocks/donate/streamlined/index.test.js +125 -0
  231. package/src/blocks/donate/streamlined/style.scss +324 -0
  232. package/src/blocks/donate/streamlined/utils.js +174 -0
  233. package/src/blocks/donate/streamlined/utils.test.js +18 -0
  234. package/src/blocks/donate/view.php +77 -36
  235. package/src/blocks/donate/view.scss +291 -0
  236. package/src/blocks/homepage-articles/block.json +8 -0
  237. package/src/blocks/homepage-articles/class-wp-rest-newspack-articles-controller.php +24 -78
  238. package/src/blocks/homepage-articles/edit.js +26 -0
  239. package/src/blocks/homepage-articles/store.js +11 -1
  240. package/src/blocks/homepage-articles/templates/article.php +31 -3
  241. package/src/blocks/homepage-articles/templates/articles-loop.php +6 -5
  242. package/src/blocks/homepage-articles/utils.js +11 -10
  243. package/src/blocks/homepage-articles/view.php +4 -1
  244. package/src/blocks/homepage-articles/view.scss +69 -24
  245. package/src/blocks/iframe/block.json +34 -0
  246. package/src/blocks/iframe/class-wp-rest-newspack-iframe-controller.php +345 -0
  247. package/src/blocks/iframe/edit.js +252 -0
  248. package/src/blocks/iframe/editor.js +7 -0
  249. package/src/blocks/iframe/editor.scss +84 -0
  250. package/src/blocks/iframe/icons.js +10 -0
  251. package/src/blocks/iframe/iframe-placeholder.js +180 -0
  252. package/src/blocks/iframe/index.js +48 -0
  253. package/src/blocks/iframe/view.js +5 -0
  254. package/src/blocks/iframe/view.php +130 -0
  255. package/src/blocks/iframe/view.scss +9 -0
  256. package/src/blocks/video-playlist/view.php +4 -3
  257. package/src/components/query-controls.js +5 -4
  258. package/src/setup/editor.js +0 -1
  259. package/src/shared/js/utils.js +1 -1
  260. package/src/templates/author-profile-card.php +99 -0
  261. package/vendor/autoload.php +7 -0
  262. package/vendor/composer/ClassLoader.php +572 -0
  263. package/vendor/composer/InstalledVersions.php +350 -0
  264. package/vendor/composer/LICENSE +21 -0
  265. package/vendor/composer/autoload_classmap.php +10 -0
  266. package/vendor/composer/autoload_namespaces.php +9 -0
  267. package/vendor/composer/autoload_psr4.php +9 -0
  268. package/vendor/composer/autoload_real.php +55 -0
  269. package/vendor/composer/autoload_static.php +20 -0
  270. package/vendor/composer/installed.json +5 -0
  271. package/vendor/composer/installed.php +23 -0
  272. package/webpack.config.js +2 -3
  273. package/.circleci/config.yml +0 -96
  274. package/.distignore +0 -36
  275. package/.editorconfig +0 -22
  276. package/.github/ISSUE_TEMPLATE/Bug_report.md +0 -21
  277. package/.github/ISSUE_TEMPLATE/Enhancement.md +0 -17
  278. package/.github/ISSUE_TEMPLATE/Feature_request.md +0 -17
  279. package/.github/PULL_REQUEST_TEMPLATE.md +0 -29
  280. package/.github/workflows/main.yml +0 -15
  281. package/.phpcs.xml.dist +0 -55
  282. package/.prettierrc +0 -10
  283. package/.stylelintrc +0 -21
  284. package/.travis.yml +0 -67
  285. package/phpunit.xml.dist +0 -16
  286. package/src/blocks/author-profile/shared.scss +0 -95
  287. package/src/blocks/donate/streamlined.js +0 -180
  288. package/src/blocks/donate/streamlined.scss +0 -124
  289. package/src/setup/public-path.js +0 -13
  290. package/src/setup/view.js +0 -4
  291. package/tests/bootstrap.php +0 -31
  292. package/tests/test-sample.php +0 -20
@@ -1,5 +1,3 @@
1
- /* eslint-disable jsx-a11y/anchor-is-valid */
2
-
3
1
  /**
4
2
  * WordPress dependencies
5
3
  */
@@ -25,13 +23,115 @@ import { Icon, edit, postAuthor, pullLeft, pullRight } from '@wordpress/icons';
25
23
  import { __, sprintf } from '@wordpress/i18n';
26
24
  import { addQueryArgs } from '@wordpress/url';
27
25
 
26
+ /**
27
+ * Internal dependencies
28
+ */
29
+ import { SingleAuthor } from './single-author';
30
+
28
31
  /**
29
32
  * External dependencies
30
33
  */
31
34
  import { AutocompleteWithSuggestions } from 'newspack-components';
32
- import classnames from 'classnames';
33
35
 
34
- export default ( { attributes, setAttributes } ) => {
36
+ // Available units for avatarBorderRadius option.
37
+ export const units = [
38
+ {
39
+ value: '%',
40
+ label: '%',
41
+ },
42
+ {
43
+ value: 'px',
44
+ label: 'px',
45
+ },
46
+ {
47
+ value: 'em',
48
+ label: 'em',
49
+ },
50
+ {
51
+ value: 'rem',
52
+ label: 'rem',
53
+ },
54
+ ];
55
+
56
+ // Textsize options.
57
+ export const textSizeOptions = [
58
+ {
59
+ value: 'small',
60
+ label: /* translators: label for small text size option */ __( 'Small', 'newspack-blocks' ),
61
+ shortName: /* translators: abbreviation for small text size option */ __(
62
+ 'S',
63
+ 'newspack-blocks'
64
+ ),
65
+ },
66
+ {
67
+ value: 'medium',
68
+ label: /* translators: label for medium text size option */ __( 'Medium', 'newspack-blocks' ),
69
+ shortName: /* translators: abbreviation for medium text size option */ __(
70
+ 'M',
71
+ 'newspack-blocks'
72
+ ),
73
+ },
74
+ {
75
+ value: 'large',
76
+ label: /* translators: label for small text size option */ __( 'Large', 'newspack-blocks' ),
77
+ shortName: /* translators: abbreviation for large text size option */ __(
78
+ 'L',
79
+ 'newspack-blocks'
80
+ ),
81
+ },
82
+ {
83
+ value: 'extra-large',
84
+ label: /* translators: label for extra-large text size option */ __(
85
+ 'Extra Large',
86
+ 'newspack-blocks'
87
+ ),
88
+ shortName: /* translators: abbreviation for small text size option */ __(
89
+ 'XL',
90
+ 'newspack-blocks'
91
+ ),
92
+ },
93
+ ];
94
+
95
+ // Avatar size options.
96
+ export const avatarSizeOptions = [
97
+ {
98
+ value: 72,
99
+ label: /* translators: label for small avatar size option */ __( 'Small', 'newspack-blocks' ),
100
+ shortName: /* translators: abbreviation for small avatar size option */ __(
101
+ 'S',
102
+ 'newspack-blocks'
103
+ ),
104
+ },
105
+ {
106
+ value: 128,
107
+ label: /* translators: label for medium avatar size option */ __( 'Medium', 'newspack-blocks' ),
108
+ shortName: /* translators: abbreviation for medium avatar size option */ __(
109
+ 'M',
110
+ 'newspack-blocks'
111
+ ),
112
+ },
113
+ {
114
+ value: 192,
115
+ label: /* translators: label for large avatar size option */ __( 'Large', 'newspack-blocks' ),
116
+ shortName: /* translators: abbreviation for large avatar size option */ __(
117
+ 'L',
118
+ 'newspack-blocks'
119
+ ),
120
+ },
121
+ {
122
+ value: 256,
123
+ label: /* translators: label for extra-large avatar size option */ __(
124
+ 'Extra-large',
125
+ 'newspack-blocks'
126
+ ),
127
+ shortName: /* translators: abbreviation for extra-large avatar size option */ __(
128
+ 'XL',
129
+ 'newspack-blocks'
130
+ ),
131
+ },
132
+ ];
133
+
134
+ const AuthorProfile = ( { attributes, setAttributes } ) => {
35
135
  const [ author, setAuthor ] = useState( null );
36
136
  const [ error, setError ] = useState( null );
37
137
  const [ isLoading, setIsLoading ] = useState( false );
@@ -42,27 +142,35 @@ export default ( { attributes, setAttributes } ) => {
42
142
  showSocial,
43
143
  showEmail,
44
144
  showArchiveLink,
145
+ textSize,
45
146
  showAvatar,
46
147
  avatarAlignment,
47
148
  avatarBorderRadius,
48
149
  avatarSize,
150
+ avatarHideDefault,
49
151
  } = attributes;
50
152
 
51
153
  useEffect( () => {
52
154
  if ( 0 !== authorId ) {
53
155
  getAuthorById();
54
156
  }
55
- }, [ authorId ] );
157
+ }, [ authorId, avatarHideDefault ] );
56
158
 
57
159
  const getAuthorById = async () => {
58
160
  setError( null );
59
161
  setIsLoading( true );
60
162
  try {
163
+ const params = {
164
+ authorId,
165
+ fields: 'id,name,bio,email,social,avatar,url',
166
+ };
167
+
168
+ if ( avatarHideDefault ) {
169
+ params.avatarHideDefault = 1;
170
+ }
171
+
61
172
  const response = await apiFetch( {
62
- path: addQueryArgs( '/newspack-blocks/v1/authors', {
63
- author_id: authorId,
64
- fields: 'id,name,bio,email,social,avatar,url',
65
- } ),
173
+ path: addQueryArgs( '/newspack-blocks/v1/authors', params ),
66
174
  } );
67
175
 
68
176
  const _author = response.pop();
@@ -97,82 +205,37 @@ export default ( { attributes, setAttributes } ) => {
97
205
  delete socialLinks.email;
98
206
  }
99
207
 
100
- // Show a link to the author's post archive page, if available.
101
- const MaybeLink = ( { children } ) =>
102
- showArchiveLink && author && author.url ? (
103
- <a href="#" className="no-op">
104
- { children }
105
- </a>
106
- ) : (
107
- <>{ children }</>
108
- );
109
-
110
- // Available units for avatarBorderRadius option.
111
- const units = [
112
- {
113
- value: '%',
114
- label: '%',
115
- },
116
- {
117
- value: 'px',
118
- label: 'px',
119
- },
120
- {
121
- value: 'em',
122
- label: 'em',
123
- },
124
- {
125
- value: 'rem',
126
- label: 'rem',
127
- },
128
- ];
129
-
130
- // Avatar size options.
131
- const avatarSizeOptions = [
132
- {
133
- value: 72,
134
- label: /* translators: label for small avatar size option */ __( 'Small', 'newspack-blocks' ),
135
- shortName: /* translators: abbreviation for small avatar size option */ __(
136
- 'S',
137
- 'newspack-blocks'
138
- ),
139
- },
140
- {
141
- value: 128,
142
- label: /* translators: label for medium avatar size option */ __(
143
- 'Medium',
144
- 'newspack-blocks'
145
- ),
146
- shortName: /* translators: abbreviation for medium avatar size option */ __(
147
- 'M',
148
- 'newspack-blocks'
149
- ),
150
- },
151
- {
152
- value: 192,
153
- label: /* translators: label for large avatar size option */ __( 'Large', 'newspack-blocks' ),
154
- shortName: /* translators: abbreviation for large avatar size option */ __(
155
- 'L',
156
- 'newspack-blocks'
157
- ),
158
- },
159
- {
160
- value: 256,
161
- label: /* translators: label for extra-large avatar size option */ __(
162
- 'Extra-large',
163
- 'newspack-blocks'
164
- ),
165
- shortName: /* translators: abbreviation for extra-large avatar size option */ __(
166
- 'XL',
167
- 'newspack-blocks'
168
- ),
169
- },
170
- ];
171
-
172
208
  return (
173
209
  <>
174
210
  <InspectorControls>
175
211
  <PanelBody title={ __( 'Author Profile Settings', 'newspack-blocks' ) }>
212
+ <BaseControl
213
+ label={ __( 'Text Size', 'newspack-blocks' ) }
214
+ id="newspack-blocks__text-size-control"
215
+ >
216
+ <PanelRow>
217
+ <ButtonGroup
218
+ id="newspack-blocks__text-size-control-buttons"
219
+ aria-label={ __( 'Text Size', 'newspack-blocks' ) }
220
+ >
221
+ { textSizeOptions.map( option => {
222
+ const isCurrent = textSize === option.value;
223
+ return (
224
+ <Button
225
+ isLarge
226
+ isPrimary={ isCurrent }
227
+ aria-pressed={ isCurrent }
228
+ aria-label={ option.label }
229
+ key={ option.value }
230
+ onClick={ () => setAttributes( { textSize: option.value } ) }
231
+ >
232
+ { option.shortName }
233
+ </Button>
234
+ );
235
+ } ) }
236
+ </ButtonGroup>
237
+ </PanelRow>
238
+ </BaseControl>
176
239
  <PanelRow>
177
240
  <ToggleControl
178
241
  label={ __( 'Display biographical info', 'newspack-blocks' ) }
@@ -210,6 +273,15 @@ export default ( { attributes, setAttributes } ) => {
210
273
  onChange={ () => setAttributes( { showAvatar: ! showAvatar } ) }
211
274
  />
212
275
  </PanelRow>
276
+ { showAvatar && (
277
+ <PanelRow>
278
+ <ToggleControl
279
+ label={ __( 'Hide default avatar', 'newspack-blocks' ) }
280
+ checked={ avatarHideDefault }
281
+ onChange={ () => setAttributes( { avatarHideDefault: ! avatarHideDefault } ) }
282
+ />
283
+ </PanelRow>
284
+ ) }
213
285
  { showAvatar && (
214
286
  <BaseControl
215
287
  label={ __( 'Avatar size', 'newspack-blocks' ) }
@@ -289,119 +361,70 @@ export default ( { attributes, setAttributes } ) => {
289
361
  />
290
362
  </BlockControls>
291
363
  ) }
292
- <div
293
- className={ classnames(
294
- 'wp-block-newspack-blocks-author-profile',
295
- 'avatar-' + avatarAlignment,
296
- attributes.className
297
- ) }
298
- >
299
- { ! isLoading && ! error && author && (
300
- <>
301
- { showAvatar && author.avatar && (
302
- <div className="wp-block-newspack-blocks-author-profile__avatar">
303
- <figure
304
- style={ { borderRadius: avatarBorderRadius, width: `${ avatarSize }px` } }
305
- dangerouslySetInnerHTML={ { __html: author.avatar } }
306
- />
307
- </div>
308
- ) }
309
- <div className="wp-block-newspack-blocks-author-profile__bio">
310
- <h3>
311
- <MaybeLink>{ author.name }</MaybeLink>
312
- </h3>
313
- { showBio && author.bio && (
314
- <p>
315
- { author.bio }{ ' ' }
316
- { showArchiveLink && (
317
- <a href="#" className="no-op">
318
- { __( 'More by', 'newspack-blocks' ) + ' ' + author.name }
319
- </a>
320
- ) }
321
- </p>
322
- ) }
323
- { ( showEmail || showSocial ) && (
324
- <ul className="wp-block-newspack-blocks-author-profile__social-links">
325
- { Object.keys( socialLinks ).map( service => (
326
- <li key={ service }>
327
- <a href="#" className="no-op">
328
- { socialLinks[ service ].svg && (
329
- <span
330
- dangerouslySetInnerHTML={ { __html: socialLinks[ service ].svg } }
331
- />
332
- ) }
333
- <span className={ socialLinks[ service ].svg ? 'hidden' : 'visible' }>
334
- { service }
335
- </span>
336
- </a>
337
- </li>
338
- ) ) }
339
- </ul>
340
- ) }
364
+ { author ? (
365
+ <SingleAuthor author={ author } attributes={ attributes } />
366
+ ) : (
367
+ <Placeholder
368
+ icon={ <Icon icon={ postAuthor } /> }
369
+ label={ __( 'Author Profile', 'newspack-blocks' ) }
370
+ >
371
+ { error && (
372
+ <Notice status="error" isDismissible={ false }>
373
+ { error }
374
+ </Notice>
375
+ ) }
376
+ { isLoading && (
377
+ <div className="is-loading">
378
+ { __( 'Fetching author info…', 'newspack-blocks' ) }
379
+ <Spinner />
341
380
  </div>
342
- </>
343
- ) }
344
- { ! author && (
345
- <Placeholder
346
- icon={ <Icon icon={ postAuthor } /> }
347
- label={ __( 'Author Profile', 'newspack-blocks' ) }
348
- >
349
- { error && (
350
- <Notice status="error" isDismissible={ false }>
351
- { error }
352
- </Notice>
353
- ) }
354
- { isLoading && (
355
- <div className="is-loading">
356
- { __( 'Fetching author info…', 'newspack-blocks' ) }
357
- <Spinner />
358
- </div>
359
- ) }
360
- { ! isLoading && (
361
- <AutocompleteWithSuggestions
362
- label={ __( 'Search for an author to display', 'newspack-blocks' ) }
363
- help={ __(
364
- 'Begin typing name, click autocomplete result to select.',
365
- 'newspack=blocks'
366
- ) }
367
- fetchSuggestions={ async ( search = null, offset = 0 ) => {
368
- // If we already have a selected author, no need to fetch suggestions.
369
- if ( authorId ) {
370
- return [];
371
- }
381
+ ) }
382
+ { ! isLoading && (
383
+ <AutocompleteWithSuggestions
384
+ label={ __( 'Search for an author to display', 'newspack-blocks' ) }
385
+ help={ __(
386
+ 'Begin typing name, click autocomplete result to select.',
387
+ 'newspack-blocks'
388
+ ) }
389
+ fetchSuggestions={ async ( search = null, offset = 0 ) => {
390
+ // If we already have a selected author, no need to fetch suggestions.
391
+ if ( authorId ) {
392
+ return [];
393
+ }
372
394
 
373
- const response = await apiFetch( {
374
- parse: false,
375
- path: addQueryArgs( '/newspack-blocks/v1/authors', {
376
- search,
377
- offset,
378
- fields: 'id,name',
379
- } ),
380
- } );
395
+ const response = await apiFetch( {
396
+ parse: false,
397
+ path: addQueryArgs( '/newspack-blocks/v1/authors', {
398
+ search,
399
+ offset,
400
+ fields: 'id,name',
401
+ } ),
402
+ } );
381
403
 
382
- const total = parseInt( response.headers.get( 'x-wp-total' ) || 0 );
383
- const authors = await response.json();
404
+ const total = parseInt( response.headers.get( 'x-wp-total' ) || 0 );
405
+ const authors = await response.json();
384
406
 
385
- // Set max items for "load more" functionality in suggestions list.
386
- if ( ! maxItemsToSuggest && ! search ) {
387
- setMaxItemsToSuggest( total );
388
- }
407
+ // Set max items for "load more" functionality in suggestions list.
408
+ if ( ! maxItemsToSuggest && ! search ) {
409
+ setMaxItemsToSuggest( total );
410
+ }
389
411
 
390
- return authors.map( _author => ( {
391
- value: _author.id,
392
- label: decodeEntities( _author.name ) || __( '(no name)', 'newspack' ),
393
- } ) );
394
- } }
395
- maxItemsToSuggest={ maxItemsToSuggest }
396
- onChange={ items => setAttributes( { authorId: parseInt( items[ 0 ].value ) } ) }
397
- postTypeLabel={ __( 'author', 'newspack-blocks' ) }
398
- postTypeLabelPlural={ __( 'authors', 'newspack-blocks' ) }
399
- selectedItems={ [] }
400
- />
401
- ) }
402
- </Placeholder>
403
- ) }
404
- </div>
412
+ return authors.map( _author => ( {
413
+ value: _author.id,
414
+ label: decodeEntities( _author.name ) || __( '(no name)', 'newspack' ),
415
+ } ) );
416
+ } }
417
+ maxItemsToSuggest={ maxItemsToSuggest }
418
+ onChange={ items => setAttributes( { authorId: parseInt( items[ 0 ].value ) } ) }
419
+ postTypeLabel={ __( 'author', 'newspack-blocks' ) }
420
+ postTypeLabelPlural={ __( 'authors', 'newspack-blocks' ) }
421
+ selectedItems={ [] }
422
+ />
423
+ ) }
424
+ </Placeholder>
425
+ ) }
405
426
  </>
406
427
  );
407
428
  };
429
+
430
+ export default AuthorProfile;
@@ -1,4 +1,4 @@
1
- @import './shared';
1
+ @import './view';
2
2
 
3
3
  .editor-styles-wrapper {
4
4
  .wp-block-newspack-blocks-author-profile {
@@ -0,0 +1,100 @@
1
+ /* eslint-disable jsx-a11y/anchor-is-valid */
2
+
3
+ /**
4
+ * WordPress dependencies
5
+ */
6
+ import { __ } from '@wordpress/i18n';
7
+
8
+ /**
9
+ * External dependencies
10
+ */
11
+ import classnames from 'classnames';
12
+
13
+ // Show a link to the author's post archive page, if available.
14
+ const MaybeLink = ( { author, children, showArchiveLink } ) =>
15
+ showArchiveLink && author && author.url ? (
16
+ <a href="#" className="no-op">
17
+ { children }
18
+ </a>
19
+ ) : (
20
+ <>{ children }</>
21
+ );
22
+
23
+ export const SingleAuthor = ( { author, attributes } ) => {
24
+ const {
25
+ showBio,
26
+ showSocial,
27
+ showEmail,
28
+ showArchiveLink,
29
+ showAvatar,
30
+ textSize,
31
+ avatarAlignment,
32
+ avatarBorderRadius,
33
+ avatarSize,
34
+ } = attributes;
35
+
36
+ // Combine social links and email, which are shown together.
37
+ const socialLinks = ( showSocial && author && author.social ) || {};
38
+ if ( showEmail && author && author.email ) {
39
+ socialLinks.email = author.email;
40
+ } else {
41
+ delete socialLinks.email;
42
+ }
43
+
44
+ return (
45
+ <div
46
+ className={ classnames(
47
+ 'wp-block-newspack-blocks-author-profile',
48
+ 'avatar-' + avatarAlignment,
49
+ 'text-size-' + textSize,
50
+ { 'is-style-center': 'is-style-center' === attributes.className }
51
+ ) }
52
+ >
53
+ { showAvatar && author.avatar && (
54
+ <div className="wp-block-newspack-blocks-author-profile__avatar">
55
+ <figure
56
+ style={ {
57
+ borderRadius: avatarBorderRadius,
58
+ height: `${ avatarSize }px`,
59
+ width: `${ avatarSize }px`,
60
+ } }
61
+ dangerouslySetInnerHTML={ { __html: author.avatar } }
62
+ />
63
+ </div>
64
+ ) }
65
+ <div className="wp-block-newspack-blocks-author-profile__bio">
66
+ <h3>
67
+ <MaybeLink author={ author } showArchiveLink={ showArchiveLink }>
68
+ { author.name }
69
+ </MaybeLink>
70
+ </h3>
71
+ { showBio && author.bio && (
72
+ <p>
73
+ { author.bio }{ ' ' }
74
+ { showArchiveLink && (
75
+ <a href="#" className="no-op">
76
+ { __( 'More by', 'newspack-blocks' ) + ' ' + author.name }
77
+ </a>
78
+ ) }
79
+ </p>
80
+ ) }
81
+ { ( showEmail || showSocial ) && (
82
+ <ul className="wp-block-newspack-blocks-author-profile__social-links">
83
+ { Object.keys( socialLinks ).map( service => (
84
+ <li key={ service }>
85
+ <a href="#" className="no-op">
86
+ { socialLinks[ service ].svg && (
87
+ <span dangerouslySetInnerHTML={ { __html: socialLinks[ service ].svg } } />
88
+ ) }
89
+ <span className={ socialLinks[ service ].svg ? 'hidden' : 'visible' }>
90
+ { service }
91
+ </span>
92
+ </a>
93
+ </li>
94
+ ) ) }
95
+ </ul>
96
+ ) }
97
+ </div>
98
+ </div>
99
+ );
100
+ };