PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 12.3.2
Jetpack – WP Security, Backup, Speed, & Growth v12.3.2
12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-a.5 16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / extensions / blocks / ai-assistant / lib / utils / block-content.ts
jetpack / extensions / blocks / ai-assistant / lib / utils Last commit date
block-content.ts 3 years ago
block-content.ts
144 lines
1 /**
2 * External dependencies
3 */
4 import { getBlockContent } from '@wordpress/blocks';
5 import { serialize } from '@wordpress/blocks';
6 import { select } from '@wordpress/data';
7 import TurndownService from 'turndown';
8
9 // Turndown instance
10 const turndownService = new TurndownService();
11
12 const HTML_JOIN_CHARACTERS = '<br />';
13
14 /**
15 * Returns partial content from the beginning of the post
16 * to the current block, based on the given block clientId.
17 *
18 * @param {string} clientId - The current block clientId.
19 * @returns {string} The partial content.
20 */
21 export function getPartialContentToBlock( clientId: string ): string {
22 if ( ! clientId ) {
23 return '';
24 }
25
26 const editor = select( 'core/block-editor' );
27 const index = editor.getBlockIndex( clientId );
28 const blocks = editor.getBlocks().slice( 0, index ) ?? [];
29
30 if ( ! blocks?.length ) {
31 return '';
32 }
33
34 return turndownService.turndown( serialize( blocks ) );
35 }
36
37 /**
38 * Returns content from all blocks,
39 * by inspecting the blocks `content` attributes
40 *
41 * @returns {string} The content.
42 */
43 export function getContentFromBlocks(): string {
44 const editor = select( 'core/block-editor' );
45 const blocks = editor.getBlocks();
46
47 if ( ! blocks?.length ) {
48 return '';
49 }
50
51 return turndownService.turndown( serialize( blocks ) );
52 }
53
54 type GetTextContentFromBlocksProps = {
55 count: number;
56 clientIds: string[];
57 content: string;
58 };
59
60 /**
61 * Returns the text content from all selected blocks.
62 *
63 * @returns {GetTextContentFromBlocksProps} The text content.
64 */
65
66 export function getTextContentFromSelectedBlocks(): GetTextContentFromBlocksProps {
67 const clientIds = select( 'core/block-editor' ).getSelectedBlockClientIds();
68 const defaultContent = {
69 count: 0,
70 clientIds: [],
71 content: '',
72 };
73
74 if ( ! clientIds?.length ) {
75 return defaultContent;
76 }
77
78 const blocks = select( 'core/block-editor' ).getBlocksByClientId( clientIds );
79 if ( ! blocks?.length ) {
80 return defaultContent;
81 }
82
83 return {
84 count: blocks.length,
85 clientIds,
86 content: blocks
87 ? blocks
88 .filter( block => block !== null && block !== undefined ) // Safeguard against null or undefined blocks
89 .map( block => getBlockTextContent( block.clientId ) )
90 .join( HTML_JOIN_CHARACTERS )
91 : '',
92 };
93 }
94
95 /**
96 * Return the block content from the given block clientId.
97 *
98 * It will try to get the content from the block `content` attribute.
99 * Otherwise, it will try to get the content
100 * by using the `getBlockContent` function.
101 *
102 * @param {string} clientId - The block clientId.
103 * @returns {string} The block content.
104 */
105 export function getBlockTextContent( clientId: string ): string {
106 if ( ! clientId ) {
107 return '';
108 }
109
110 const editor = select( 'core/block-editor' );
111 const block = editor.getBlock( clientId );
112
113 /*
114 * In some context, the block can be undefined,
115 * for instance, when previewing the block.
116 */
117 if ( ! block ) {
118 return '';
119 }
120
121 // Attempt to pick the content from the block `content` attribute.
122 if ( block?.attributes?.content ) {
123 return block.attributes.content;
124 }
125
126 return getBlockContent( block );
127 }
128
129 /**
130 * Extract raw text from HTML content
131 *
132 * @param {string} htmlString - The HTML content.
133 * @returns {string} The raw text.
134 */
135 export function getRawTextFromHTML( htmlString: string ): string {
136 if ( ! htmlString?.length ) {
137 return '';
138 }
139
140 const tempDomContainer = document.createElement( 'div' );
141 tempDomContainer.innerHTML = htmlString;
142 return tempDomContainer.textContent || tempDomContainer.innerText || '';
143 }
144