Blocks: Introduce the block parser.

The `WP_Block_Parser` class, and the accompanying `parse_blocks()` helper function, can be used to parse an array of blocks out of a content string.

`WP_Block_Parser` is copied from the `@wordpress/block-serialization-default-parser` package. To ensure it stays in sync with the JavaScript parser, changes should be implemented in the package first, then the package version should be upgraded to include the changes.

See #45109.



git-svn-id: https://develop.svn.wordpress.org/branches/5.0@43751 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Gary Pendergast 2018-10-18 04:39:40 +00:00
parent 56b7476d7a
commit 570fc2a5b0
217 changed files with 2835 additions and 0 deletions

View File

@ -112,3 +112,40 @@ function get_dynamic_block_names() {
return $dynamic_block_names;
}
/**
* Parses blocks out of a content string.
*
* @since 5.0.0
*
* @param string $content Post content.
* @return array Array of parsed block objects.
*/
function parse_blocks( $content ) {
/*
* If there are no blocks in the content, return a single block, rather
* than wasting time trying to parse the string.
*/
if ( ! has_blocks( $content ) ) {
return array(
array(
'blockName' => null,
'attrs' => array(),
'innerBlocks' => array(),
'innerHTML' => $content,
),
);
}
/**
* Filter to allow plugins to replace the server-side block parser
*
* @since 5.0.0
*
* @param string $parser_class Name of block parser class
*/
$parser_class = apply_filters( 'block_parser_class', 'WP_Block_Parser' );
$parser = new $parser_class();
return $parser->parse( $content );
}

View File

@ -0,0 +1,473 @@
<?php
/**
* Class WP_Block_Parser_Block
*
* Holds the block structure in memory
*
* @since 3.8.0
*/
class WP_Block_Parser_Block {
/**
* Name of block
*
* @example "core/paragraph"
*
* @since 3.8.0
* @var string
*/
public $blockName;
/**
* Optional set of attributes from block comment delimiters
*
* @example null
* @example array( 'columns' => 3 )
*
* @since 3.8.0
* @var array|null
*/
public $attrs;
/**
* List of inner blocks (of this same class)
*
* @since 3.8.0
* @var WP_Block_Parser_Block[]
*/
public $innerBlocks;
/**
* Resultant HTML from inside block comment delimiters
* after removing inner blocks
*
* @example "...Just <!-- wp:test /--> testing..." -> "Just testing..."
*
* @since 3.8.0
* @var string
*/
public $innerHTML;
function __construct( $name, $attrs, $innerBlocks, $innerHTML ) {
$this->blockName = $name;
$this->attrs = $attrs;
$this->innerBlocks = $innerBlocks;
$this->innerHTML = $innerHTML;
}
}
/**
* Class WP_Block_Parser_Frame
*
* Holds partial blocks in memory while parsing
*
* @internal
* @since 3.8.0
*/
class WP_Block_Parser_Frame {
/**
* Full or partial block
*
* @since 3.8.0
* @var WP_Block_Parser_Block
*/
public $block;
/**
* Byte offset into document for start of parse token
*
* @since 3.8.0
* @var int
*/
public $token_start;
/**
* Byte length of entire parse token string
*
* @since 3.8.0
* @var int
*/
public $token_length;
/**
* Byte offset into document for after parse token ends
* (used during reconstruction of stack into parse production)
*
* @since 3.8.0
* @var int
*/
public $prev_offset;
/**
* Byte offset into document where leading HTML before token starts
*
* @since 3.8.0
* @var int
*/
public $leading_html_start;
function __construct( $block, $token_start, $token_length, $prev_offset = null, $leading_html_start = null ) {
$this->block = $block;
$this->token_start = $token_start;
$this->token_length = $token_length;
$this->prev_offset = isset( $prev_offset ) ? $prev_offset : $token_start + $token_length;
$this->leading_html_start = $leading_html_start;
}
}
/**
* Class WP_Block_Parser
*
* Parses a document and constructs a list of parsed block objects
*
* @since 3.8.0
* @since 4.0.0 returns arrays not objects, all attributes are arrays
*/
class WP_Block_Parser {
/**
* Input document being parsed
*
* @example "Pre-text\n<!-- wp:paragraph -->This is inside a block!<!-- /wp:paragraph -->"
*
* @since 3.8.0
* @var string
*/
public $document;
/**
* Tracks parsing progress through document
*
* @since 3.8.0
* @var int
*/
public $offset;
/**
* List of parsed blocks
*
* @since 3.8.0
* @var WP_Block_Parser_Block[]
*/
public $output;
/**
* Stack of partially-parsed structures in memory during parse
*
* @since 3.8.0
* @var WP_Block_Parser_Frame[]
*/
public $stack;
/**
* Parses a document and returns a list of block structures
*
* When encountering an invalid parse will return a best-effort
* parse. In contrast to the specification parser this does not
* return an error on invalid inputs.
*
* @since 3.8.0
*
* @param string $document
* @return WP_Block_Parser_Block[]
*/
function parse( $document ) {
$this->document = $document;
$this->offset = 0;
$this->output = array();
$this->stack = array();
do {
// twiddle our thumbs
} while ( $this->proceed() );
return $this->output;
}
/**
* Processes the next token from the input document
* and returns whether to proceed eating more tokens
*
* This is the "next step" function that essentially
* takes a token as its input and decides what to do
* with that token before descending deeper into a
* nested block tree or continuing along the document
* or breaking out of a level of nesting.
*
* @internal
* @since 3.8.0
* @return bool
*/
function proceed() {
$next_token = $this->next_token();
list( $token_type, $block_name, $attrs, $start_offset, $token_length ) = $next_token;
$stack_depth = count( $this->stack );
// we may have some HTML soup before the next block
$leading_html_start = $start_offset > $this->offset ? $this->offset : null;
switch ( $token_type ) {
case 'no-more-tokens':
// if not in a block then flush output
if ( 0 === $stack_depth ) {
$this->add_freeform();
return false;
}
/*
* Otherwise we have a problem
* This is an error
*
* we have options
* - treat it all as freeform text
* - assume an implicit closer (easiest when not nesting)
*/
// for the easy case we'll assume an implicit closer
if ( 1 === $stack_depth ) {
$this->add_block_from_stack();
return false;
}
/*
* for the nested case where it's more difficult we'll
* have to assume that multiple closers are missing
* and so we'll collapse the whole stack piecewise
*/
while ( 0 < count( $this->stack ) ) {
$this->add_block_from_stack();
}
return false;
case 'void-block':
/*
* easy case is if we stumbled upon a void block
* in the top-level of the document
*/
if ( 0 === $stack_depth ) {
if ( isset( $leading_html_start ) ) {
$this->output[] = (array) self::freeform( substr(
$this->document,
$leading_html_start,
$start_offset - $leading_html_start
) );
}
$this->output[] = (array) new WP_Block_Parser_Block( $block_name, $attrs, array(), '' );
$this->offset = $start_offset + $token_length;
return true;
}
// otherwise we found an inner block
$this->add_inner_block(
new WP_Block_Parser_Block( $block_name, $attrs, array(), '' ),
$start_offset,
$token_length
);
$this->offset = $start_offset + $token_length;
return true;
case 'block-opener':
// track all newly-opened blocks on the stack
array_push( $this->stack, new WP_Block_Parser_Frame(
new WP_Block_Parser_Block( $block_name, $attrs, array(), '' ),
$start_offset,
$token_length,
$start_offset + $token_length,
$leading_html_start
) );
$this->offset = $start_offset + $token_length;
return true;
case 'block-closer':
/*
* if we're missing an opener we're in trouble
* This is an error
*/
if ( 0 === $stack_depth ) {
/*
* we have options
* - assume an implicit opener
* - assume _this_ is the opener
* - give up and close out the document
*/
$this->add_freeform();
return false;
}
// if we're not nesting then this is easy - close the block
if ( 1 === $stack_depth ) {
$this->add_block_from_stack( $start_offset );
$this->offset = $start_offset + $token_length;
return true;
}
/*
* otherwise we're nested and we have to close out the current
* block and add it as a new innerBlock to the parent
*/
$stack_top = array_pop( $this->stack );
$stack_top->block->innerHTML .= substr( $this->document, $stack_top->prev_offset, $start_offset - $stack_top->prev_offset );
$stack_top->prev_offset = $start_offset + $token_length;
$this->add_inner_block(
$stack_top->block,
$stack_top->token_start,
$stack_top->token_length,
$start_offset + $token_length
);
$this->offset = $start_offset + $token_length;
return true;
default:
// This is an error
$this->add_freeform();
return false;
}
}
/**
* Scans the document from where we last left off
* and finds the next valid token to parse if it exists
*
* Returns the type of the find: kind of find, block information, attributes
*
* @internal
* @since 3.8.0
* @return array
*/
function next_token() {
$matches = null;
/*
* aye the magic
* we're using a single RegExp to tokenize the block comment delimiters
* we're also using a trick here because the only difference between a
* block opener and a block closer is the leading `/` before `wp:` (and
* a closer has no attributes). we can trap them both and process the
* match back in PHP to see which one it was.
*/
$has_match = preg_match(
'/<!--\s+(?<closer>\/)?wp:(?<namespace>[a-z][a-z0-9_-]*\/)?(?<name>[a-z][a-z0-9_-]*)\s+(?<attrs>{(?:(?!}\s+-->).)+?}\s+)?(?<void>\/)?-->/s',
$this->document,
$matches,
PREG_OFFSET_CAPTURE,
$this->offset
);
// we have no more tokens
if ( 0 === $has_match ) {
return array( 'no-more-tokens', null, null, null, null );
}
list( $match, $started_at ) = $matches[ 0 ];
$length = strlen( $match );
$is_closer = isset( $matches[ 'closer' ] ) && -1 !== $matches[ 'closer' ][ 1 ];
$is_void = isset( $matches[ 'void' ] ) && -1 !== $matches[ 'void' ][ 1 ];
$namespace = $matches[ 'namespace' ];
$namespace = ( isset( $namespace ) && -1 !== $namespace[ 1 ] ) ? $namespace[ 0 ] : 'core/';
$name = $namespace . $matches[ 'name' ][ 0 ];
$has_attrs = isset( $matches[ 'attrs' ] ) && -1 !== $matches[ 'attrs' ][ 1 ];
/*
* Fun fact! It's not trivial in PHP to create "an empty associative array" since all arrays
* are associative arrays. If we use `array()` we get a JSON `[]`
*/
$attrs = $has_attrs
? json_decode( $matches[ 'attrs' ][ 0 ], /* as-associative */ true )
: json_decode( '{}', /* don't ask why, just verify in PHP */ false );
/*
* This state isn't allowed
* This is an error
*/
if ( $is_closer && ( $is_void || $has_attrs ) ) {
// we can ignore them since they don't hurt anything
}
if ( $is_void ) {
return array( 'void-block', $name, $attrs, $started_at, $length );
}
if ( $is_closer ) {
return array( 'block-closer', $name, null, $started_at, $length );
}
return array( 'block-opener', $name, $attrs, $started_at, $length );
}
/**
* Returns a new block object for freeform HTML
*
* @internal
* @since 3.9.0
*
* @param string $innerHTML HTML content of block
* @return WP_Block_Parser_Block freeform block object
*/
static function freeform( $innerHTML ) {
return new WP_Block_Parser_Block( null, array(), array(), $innerHTML );
}
/**
* Pushes a length of text from the input document
* to the output list as a freeform block
*
* @internal
* @since 3.8.0
* @param null $length how many bytes of document text to output
*/
function add_freeform( $length = null ) {
$length = $length ? $length : strlen( $this->document ) - $this->offset;
if ( 0 === $length ) {
return;
}
$this->output[] = (array) self::freeform( substr( $this->document, $this->offset, $length ) );
}
/**
* Given a block structure from memory pushes
* a new block to the output list
*
* @internal
* @since 3.8.0
* @param WP_Block_Parser_Block $block the block to add to the output
* @param int $token_start byte offset into the document where the first token for the block starts
* @param int $token_length byte length of entire block from start of opening token to end of closing token
* @param int|null $last_offset last byte offset into document if continuing form earlier output
*/
function add_inner_block( WP_Block_Parser_Block $block, $token_start, $token_length, $last_offset = null ) {
$parent = $this->stack[ count( $this->stack ) - 1 ];
$parent->block->innerBlocks[] = $block;
$parent->block->innerHTML .= substr( $this->document, $parent->prev_offset, $token_start - $parent->prev_offset );
$parent->prev_offset = $last_offset ? $last_offset : $token_start + $token_length;
}
/**
* Pushes the top block from the parsing stack to the output list
*
* @internal
* @since 3.8.0
* @param int|null $end_offset byte offset into document for where we should stop sending text output as HTML
*/
function add_block_from_stack( $end_offset = null ) {
$stack_top = array_pop( $this->stack );
$prev_offset = $stack_top->prev_offset;
$stack_top->block->innerHTML .= isset( $end_offset )
? substr( $this->document, $prev_offset, $end_offset - $prev_offset )
: substr( $this->document, $prev_offset );
if ( isset( $stack_top->leading_html_start ) ) {
$this->output[] = (array) self::freeform( substr(
$this->document,
$stack_top->leading_html_start,
$stack_top->token_start - $stack_top->leading_html_start
) );
}
$this->output[] = (array) $stack_top->block;
}
}

View File

@ -245,6 +245,7 @@ require( ABSPATH . WPINC . '/rest-api/search/class-wp-rest-search-handler.php' )
require( ABSPATH . WPINC . '/rest-api/search/class-wp-rest-post-search-handler.php' );
require( ABSPATH . WPINC . '/class-wp-block-type.php' );
require( ABSPATH . WPINC . '/class-wp-block-type-registry.php' );
require( ABSPATH . WPINC . '/class-wp-block-parser.php' );
require( ABSPATH . WPINC . '/blocks.php' );
$GLOBALS['wp_embed'] = new WP_Embed();

View File

@ -0,0 +1 @@
<!-- wp:core/4-invalid /-->

View File

@ -0,0 +1,12 @@
[
{
"clientId": "_clientId_0",
"name": "core/freeform",
"isValid": true,
"attributes": {
"content": "<p><!-- wp:core/4-invalid /--></p>"
},
"innerBlocks": [],
"originalContent": "<p><!-- wp:core/4-invalid /--></p>"
}
]

View File

@ -0,0 +1,8 @@
[
{
"blockName": null,
"attrs": {},
"innerBlocks": [],
"innerHTML": "<!-- wp:core/4-invalid /-->\n"
}
]

View File

@ -0,0 +1 @@
<p><!-- wp:core/4-invalid /--></p>

View File

@ -0,0 +1 @@
<!-- wp:archives {"displayAsDropdown":false,"showPostCounts":false} /-->

View File

@ -0,0 +1,13 @@
[
{
"clientId": "_clientId_0",
"name": "core/archives",
"isValid": true,
"attributes": {
"displayAsDropdown": false,
"showPostCounts": false
},
"innerBlocks": [],
"originalContent": ""
}
]

View File

@ -0,0 +1,11 @@
[
{
"blockName": "core/archives",
"attrs": {
"displayAsDropdown": false,
"showPostCounts": false
},
"innerBlocks": [],
"innerHTML": ""
}
]

View File

@ -0,0 +1 @@
<!-- wp:archives /-->

View File

@ -0,0 +1 @@
<!-- wp:archives {"displayAsDropdown":false,"showPostCounts":true} /-->

View File

@ -0,0 +1,13 @@
[
{
"clientId": "_clientId_0",
"name": "core/archives",
"isValid": true,
"attributes": {
"displayAsDropdown": false,
"showPostCounts": true
},
"innerBlocks": [],
"originalContent": ""
}
]

View File

@ -0,0 +1,11 @@
[
{
"blockName": "core/archives",
"attrs": {
"displayAsDropdown": false,
"showPostCounts": true
},
"innerBlocks": [],
"innerHTML": ""
}
]

View File

@ -0,0 +1 @@
<!-- wp:archives {"showPostCounts":true} /-->

View File

@ -0,0 +1,5 @@
<!-- wp:core/audio {"align":"right"} -->
<figure class="wp-block-audio alignright">
<audio controls="" src="https://media.simplecast.com/episodes/audio/80564/draft-podcast-51-livePublish2.mp3"></audio>
</figure>
<!-- /wp:core/audio -->

View File

@ -0,0 +1,16 @@
[
{
"clientId": "_clientId_0",
"name": "core/audio",
"isValid": true,
"attributes": {
"src": "https://media.simplecast.com/episodes/audio/80564/draft-podcast-51-livePublish2.mp3",
"caption": "",
"autoplay": false,
"loop": false,
"align": "right"
},
"innerBlocks": [],
"originalContent": "<figure class=\"wp-block-audio alignright\">\n <audio controls=\"\" src=\"https://media.simplecast.com/episodes/audio/80564/draft-podcast-51-livePublish2.mp3\"></audio>\n</figure>"
}
]

View File

@ -0,0 +1,16 @@
[
{
"blockName": "core/audio",
"attrs": {
"align": "right"
},
"innerBlocks": [],
"innerHTML": "\n<figure class=\"wp-block-audio alignright\">\n <audio controls=\"\" src=\"https://media.simplecast.com/episodes/audio/80564/draft-podcast-51-livePublish2.mp3\"></audio>\n</figure>\n"
},
{
"blockName": null,
"attrs": {},
"innerBlocks": [],
"innerHTML": "\n"
}
]

View File

@ -0,0 +1,3 @@
<!-- wp:audio {"align":"right"} -->
<figure class="wp-block-audio alignright"><audio controls src="https://media.simplecast.com/episodes/audio/80564/draft-podcast-51-livePublish2.mp3"></audio></figure>
<!-- /wp:audio -->

View File

@ -0,0 +1 @@
<!-- wp:core/block {"ref":123} /-->

View File

@ -0,0 +1,12 @@
[
{
"clientId": "_clientId_0",
"name": "core/block",
"isValid": true,
"attributes": {
"ref": 123
},
"innerBlocks": [],
"originalContent": ""
}
]

View File

@ -0,0 +1,16 @@
[
{
"blockName": "core/block",
"attrs": {
"ref": 123
},
"innerBlocks": [],
"innerHTML": ""
},
{
"blockName": null,
"attrs": {},
"innerBlocks": [],
"innerHTML": "\n"
}
]

View File

@ -0,0 +1 @@
<!-- wp:block {"ref":123} /-->

View File

@ -0,0 +1,3 @@
<!-- wp:core/button {"align":"center"} -->
<div class="wp-block-button aligncenter"><a class="wp-block-button__link" href="https://github.com/WordPress/gutenberg">Help build Gutenberg</a></div>
<!-- /wp:core/button -->

View File

@ -0,0 +1,14 @@
[
{
"clientId": "_clientId_0",
"name": "core/button",
"isValid": true,
"attributes": {
"url": "https://github.com/WordPress/gutenberg",
"text": "Help build Gutenberg",
"align": "center"
},
"innerBlocks": [],
"originalContent": "<div class=\"wp-block-button aligncenter\"><a class=\"wp-block-button__link\" href=\"https://github.com/WordPress/gutenberg\">Help build Gutenberg</a></div>"
}
]

View File

@ -0,0 +1,16 @@
[
{
"blockName": "core/button",
"attrs": {
"align": "center"
},
"innerBlocks": [],
"innerHTML": "\n<div class=\"wp-block-button aligncenter\"><a class=\"wp-block-button__link\" href=\"https://github.com/WordPress/gutenberg\">Help build Gutenberg</a></div>\n"
},
{
"blockName": null,
"attrs": {},
"innerBlocks": [],
"innerHTML": "\n"
}
]

View File

@ -0,0 +1,3 @@
<!-- wp:button {"align":"center"} -->
<div class="wp-block-button aligncenter"><a class="wp-block-button__link" href="https://github.com/WordPress/gutenberg">Help build Gutenberg</a></div>
<!-- /wp:button -->

View File

@ -0,0 +1 @@
<!-- wp:core/categories {"showPostCounts":false,"displayAsDropdown":false,"showHierarchy":false} /-->

View File

@ -0,0 +1,14 @@
[
{
"clientId": "_clientId_0",
"name": "core/categories",
"isValid": true,
"attributes": {
"showPostCounts": false,
"displayAsDropdown": false,
"showHierarchy": false
},
"innerBlocks": [],
"originalContent": ""
}
]

View File

@ -0,0 +1,18 @@
[
{
"blockName": "core/categories",
"attrs": {
"showPostCounts": false,
"displayAsDropdown": false,
"showHierarchy": false
},
"innerBlocks": [],
"innerHTML": ""
},
{
"blockName": null,
"attrs": {},
"innerBlocks": [],
"innerHTML": "\n"
}
]

View File

@ -0,0 +1 @@
<!-- wp:categories /-->

View File

@ -0,0 +1,5 @@
<!-- wp:core/code -->
<pre class="wp-block-code"><code>export default function MyButton() {
return &lt;Button&gt;Click Me!&lt;/Button&gt;;
}</code></pre>
<!-- /wp:core/code -->

View File

@ -0,0 +1,12 @@
[
{
"clientId": "_clientId_0",
"name": "core/code",
"isValid": true,
"attributes": {
"content": "export default function MyButton() {\n\treturn <Button>Click Me!</Button>;\n}"
},
"innerBlocks": [],
"originalContent": "<pre class=\"wp-block-code\"><code>export default function MyButton() {\n\treturn &lt;Button&gt;Click Me!&lt;/Button&gt;;\n}</code></pre>"
}
]

View File

@ -0,0 +1,14 @@
[
{
"blockName": "core/code",
"attrs": {},
"innerBlocks": [],
"innerHTML": "\n<pre class=\"wp-block-code\"><code>export default function MyButton() {\n\treturn &lt;Button&gt;Click Me!&lt;/Button&gt;;\n}</code></pre>\n"
},
{
"blockName": null,
"attrs": {},
"innerBlocks": [],
"innerHTML": "\n"
}
]

View File

@ -0,0 +1,5 @@
<!-- wp:code -->
<pre class="wp-block-code"><code>export default function MyButton() {
return &lt;Button>Click Me!&lt;/Button>;
}</code></pre>
<!-- /wp:code -->

View File

@ -0,0 +1,10 @@
<!-- wp:column -->
<div class="wp-block-column">
<!-- wp:paragraph -->
<p>Column One, Paragraph One</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>Column One, Paragraph Two</p>
<!-- /wp:paragraph -->
</div>
<!-- /wp:columns -->

View File

@ -0,0 +1,33 @@
[
{
"clientId": "_clientId_0",
"name": "core/column",
"isValid": true,
"attributes": {},
"innerBlocks": [
{
"clientId": "_clientId_0",
"name": "core/paragraph",
"isValid": true,
"attributes": {
"content": "Column One, Paragraph One",
"dropCap": false
},
"innerBlocks": [],
"originalContent": "<p>Column One, Paragraph One</p>"
},
{
"clientId": "_clientId_1",
"name": "core/paragraph",
"isValid": true,
"attributes": {
"content": "Column One, Paragraph Two",
"dropCap": false
},
"innerBlocks": [],
"originalContent": "<p>Column One, Paragraph Two</p>"
}
],
"originalContent": "<div class=\"wp-block-column\">\n\t\n\t\n</div>"
}
]

View File

@ -0,0 +1,27 @@
[
{
"blockName": "core/column",
"attrs": {},
"innerBlocks": [
{
"blockName": "core/paragraph",
"attrs": {},
"innerBlocks": [],
"innerHTML": "\n\t<p>Column One, Paragraph One</p>\n\t"
},
{
"blockName": "core/paragraph",
"attrs": {},
"innerBlocks": [],
"innerHTML": "\n\t<p>Column One, Paragraph Two</p>\n\t"
}
],
"innerHTML": "\n<div class=\"wp-block-column\">\n\t\n\t\n</div>\n"
},
{
"blockName": null,
"attrs": {},
"innerBlocks": [],
"innerHTML": "\n"
}
]

View File

@ -0,0 +1,9 @@
<!-- wp:column -->
<div class="wp-block-column"><!-- wp:paragraph -->
<p>Column One, Paragraph One</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>Column One, Paragraph Two</p>
<!-- /wp:paragraph --></div>
<!-- /wp:column -->

View File

@ -0,0 +1,24 @@
<!-- wp:columns {"columns":3} -->
<div class="wp-block-columns has-3-columns">
<!-- wp:column -->
<div class="wp-block-column">
<!-- wp:paragraph -->
<p>Column One, Paragraph One</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>Column One, Paragraph Two</p>
<!-- /wp:paragraph -->
</div>
<!-- /wp:column -->
<!-- wp:column -->
<div class="wp-block-column">
<!-- wp:paragraph -->
<p>Column Two, Paragraph One</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>Column Three, Paragraph One</p>
<!-- /wp:paragraph -->
</div>
<!-- /wp:column -->
</div>
<!-- /wp:columns -->

View File

@ -0,0 +1,75 @@
[
{
"clientId": "_clientId_0",
"name": "core/columns",
"isValid": true,
"attributes": {
"columns": 3
},
"innerBlocks": [
{
"clientId": "_clientId_0",
"name": "core/column",
"isValid": true,
"attributes": {},
"innerBlocks": [
{
"clientId": "_clientId_0",
"name": "core/paragraph",
"isValid": true,
"attributes": {
"content": "Column One, Paragraph One",
"dropCap": false
},
"innerBlocks": [],
"originalContent": "<p>Column One, Paragraph One</p>"
},
{
"clientId": "_clientId_1",
"name": "core/paragraph",
"isValid": true,
"attributes": {
"content": "Column One, Paragraph Two",
"dropCap": false
},
"innerBlocks": [],
"originalContent": "<p>Column One, Paragraph Two</p>"
}
],
"originalContent": "<div class=\"wp-block-column\">\n\t\t\n\t\t\n\t</div>"
},
{
"clientId": "_clientId_1",
"name": "core/column",
"isValid": true,
"attributes": {},
"innerBlocks": [
{
"clientId": "_clientId_0",
"name": "core/paragraph",
"isValid": true,
"attributes": {
"content": "Column Two, Paragraph One",
"dropCap": false
},
"innerBlocks": [],
"originalContent": "<p>Column Two, Paragraph One</p>"
},
{
"clientId": "_clientId_1",
"name": "core/paragraph",
"isValid": true,
"attributes": {
"content": "Column Three, Paragraph One",
"dropCap": false
},
"innerBlocks": [],
"originalContent": "<p>Column Three, Paragraph One</p>"
}
],
"originalContent": "<div class=\"wp-block-column\">\n\t\t\n\t\t\n\t</div>"
}
],
"originalContent": "<div class=\"wp-block-columns has-3-columns\">\n\t\n\t\n</div>"
}
]

View File

@ -0,0 +1,55 @@
[
{
"blockName": "core/columns",
"attrs": {
"columns": 3
},
"innerBlocks": [
{
"blockName": "core/column",
"attrs": {},
"innerBlocks": [
{
"blockName": "core/paragraph",
"attrs": {},
"innerBlocks": [],
"innerHTML": "\n\t\t<p>Column One, Paragraph One</p>\n\t\t"
},
{
"blockName": "core/paragraph",
"attrs": {},
"innerBlocks": [],
"innerHTML": "\n\t\t<p>Column One, Paragraph Two</p>\n\t\t"
}
],
"innerHTML": "\n\t<div class=\"wp-block-column\">\n\t\t\n\t\t\n\t</div>\n\t"
},
{
"blockName": "core/column",
"attrs": {},
"innerBlocks": [
{
"blockName": "core/paragraph",
"attrs": {},
"innerBlocks": [],
"innerHTML": "\n\t\t<p>Column Two, Paragraph One</p>\n\t\t"
},
{
"blockName": "core/paragraph",
"attrs": {},
"innerBlocks": [],
"innerHTML": "\n\t\t<p>Column Three, Paragraph One</p>\n\t\t"
}
],
"innerHTML": "\n\t<div class=\"wp-block-column\">\n\t\t\n\t\t\n\t</div>\n\t"
}
],
"innerHTML": "\n<div class=\"wp-block-columns has-3-columns\">\n\t\n\t\n</div>\n"
},
{
"blockName": null,
"attrs": {},
"innerBlocks": [],
"innerHTML": "\n"
}
]

View File

@ -0,0 +1,21 @@
<!-- wp:columns {"columns":3} -->
<div class="wp-block-columns has-3-columns"><!-- wp:column -->
<div class="wp-block-column"><!-- wp:paragraph -->
<p>Column One, Paragraph One</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>Column One, Paragraph Two</p>
<!-- /wp:paragraph --></div>
<!-- /wp:column -->
<!-- wp:column -->
<div class="wp-block-column"><!-- wp:paragraph -->
<p>Column Two, Paragraph One</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>Column Three, Paragraph One</p>
<!-- /wp:paragraph --></div>
<!-- /wp:column --></div>
<!-- /wp:columns -->

View File

@ -0,0 +1,5 @@
<!-- wp:core/cover-image {"url":"https://cldup.com/uuUqE_dXzy.jpg","dimRatio":40} -->
<div class="wp-block-cover-image has-background-dim-40 has-background-dim" style="background-image:url(https://cldup.com/uuUqE_dXzy.jpg)">
<p class="wp-block-cover-image-text">Guten Berg!</p>
</div>
<!-- /wp:core/cover-image -->

View File

@ -0,0 +1,16 @@
[
{
"clientId": "_clientId_0",
"name": "core/cover-image",
"isValid": true,
"attributes": {
"title": "Guten Berg!",
"url": "https://cldup.com/uuUqE_dXzy.jpg",
"contentAlign": "center",
"hasParallax": false,
"dimRatio": 40
},
"innerBlocks": [],
"originalContent": "<div class=\"wp-block-cover-image has-background-dim-40 has-background-dim\" style=\"background-image:url(https://cldup.com/uuUqE_dXzy.jpg)\">\n <p class=\"wp-block-cover-image-text\">Guten Berg!</p>\n</div>"
}
]

View File

@ -0,0 +1,17 @@
[
{
"blockName": "core/cover-image",
"attrs": {
"url": "https://cldup.com/uuUqE_dXzy.jpg",
"dimRatio": 40
},
"innerBlocks": [],
"innerHTML": "\n<div class=\"wp-block-cover-image has-background-dim-40 has-background-dim\" style=\"background-image:url(https://cldup.com/uuUqE_dXzy.jpg)\">\n <p class=\"wp-block-cover-image-text\">Guten Berg!</p>\n</div>\n"
},
{
"blockName": null,
"attrs": {},
"innerBlocks": [],
"innerHTML": "\n"
}
]

View File

@ -0,0 +1,3 @@
<!-- wp:cover-image {"url":"https://cldup.com/uuUqE_dXzy.jpg","dimRatio":40} -->
<div class="wp-block-cover-image has-background-dim-40 has-background-dim" style="background-image:url(https://cldup.com/uuUqE_dXzy.jpg)"><p class="wp-block-cover-image-text">Guten Berg!</p></div>
<!-- /wp:cover-image -->

View File

@ -0,0 +1,8 @@
<!-- wp:core/embed {"url":"https://example.com/"} -->
<figure class="wp-block-embed">
<div class="wp-block-embed__wrapper">
https://example.com/
</div>
<figcaption>Embedded content from an example URL</figcaption>
</figure>
<!-- /wp:core/embed -->

View File

@ -0,0 +1,14 @@
[
{
"clientId": "_clientId_0",
"name": "core/embed",
"isValid": true,
"attributes": {
"url": "https://example.com/",
"caption": "Embedded content from an example URL",
"allowResponsive": true
},
"innerBlocks": [],
"originalContent": "<figure class=\"wp-block-embed\">\n <div class=\"wp-block-embed__wrapper\">\n https://example.com/\n </div>\n <figcaption>Embedded content from an example URL</figcaption>\n</figure>"
}
]

View File

@ -0,0 +1,16 @@
[
{
"blockName": "core/embed",
"attrs": {
"url": "https://example.com/"
},
"innerBlocks": [],
"innerHTML": "\n<figure class=\"wp-block-embed\">\n <div class=\"wp-block-embed__wrapper\">\n https://example.com/\n </div>\n <figcaption>Embedded content from an example URL</figcaption>\n</figure>\n"
},
{
"blockName": null,
"attrs": {},
"innerBlocks": [],
"innerHTML": "\n"
}
]

View File

@ -0,0 +1,5 @@
<!-- wp:embed {"url":"https://example.com/"} -->
<figure class="wp-block-embed"><div class="wp-block-embed__wrapper">
https://example.com/
</div><figcaption>Embedded content from an example URL</figcaption></figure>
<!-- /wp:embed -->

View File

@ -0,0 +1,3 @@
<!-- wp:file {"href":"http://localhost:8888/wp-content/uploads/2018/05/keycodes.js","showDownloadButton":true,"id":176} -->
<div class="wp-block-file"><a href="http://localhost:8888/wp-content/uploads/2018/05/keycodes.js" target="_blank" rel="noreferrer noopener">6546</a><a href="http://localhost:8888/wp-content/uploads/2018/05/keycodes.js" class="wp-block-file__button" download="6546">Download</a></div>
<!-- /wp:file -->

View File

@ -0,0 +1,18 @@
[
{
"clientId": "_clientId_0",
"name": "core/file",
"isValid": true,
"attributes": {
"id": 176,
"href": "http://localhost:8888/wp-content/uploads/2018/05/keycodes.js",
"fileName": "6546",
"textLinkHref": "http://localhost:8888/wp-content/uploads/2018/05/keycodes.js",
"textLinkTarget": "_blank",
"showDownloadButton": true,
"downloadButtonText": "Download"
},
"innerBlocks": [],
"originalContent": "<div class=\"wp-block-file\"><a href=\"http://localhost:8888/wp-content/uploads/2018/05/keycodes.js\" target=\"_blank\" rel=\"noreferrer noopener\">6546</a><a href=\"http://localhost:8888/wp-content/uploads/2018/05/keycodes.js\" class=\"wp-block-file__button\" download=\"6546\">Download</a></div>"
}
]

View File

@ -0,0 +1,18 @@
[
{
"blockName": "core/file",
"attrs": {
"href": "http://localhost:8888/wp-content/uploads/2018/05/keycodes.js",
"showDownloadButton": true,
"id": 176
},
"innerBlocks": [],
"innerHTML": "\n<div class=\"wp-block-file\"><a href=\"http://localhost:8888/wp-content/uploads/2018/05/keycodes.js\" target=\"_blank\" rel=\"noreferrer noopener\">6546</a><a href=\"http://localhost:8888/wp-content/uploads/2018/05/keycodes.js\" class=\"wp-block-file__button\" download=\"6546\">Download</a></div>\n"
},
{
"blockName": null,
"attrs": {},
"innerBlocks": [],
"innerHTML": "\n"
}
]

View File

@ -0,0 +1,3 @@
<!-- wp:file {"id":176,"href":"http://localhost:8888/wp-content/uploads/2018/05/keycodes.js"} -->
<div class="wp-block-file"><a href="http://localhost:8888/wp-content/uploads/2018/05/keycodes.js" target="_blank" rel="noreferrer noopener">6546</a><a href="http://localhost:8888/wp-content/uploads/2018/05/keycodes.js" class="wp-block-file__button" download="6546">Download</a></div>
<!-- /wp:file -->

View File

@ -0,0 +1,3 @@
<!-- wp:file {"href":"http://localhost:8888/wp-content/uploads/2018/05/keycodes.js","showDownloadButton":false,"id":176} -->
<div class="wp-block-file"><a href="http://localhost:8888/?attachment_id=176">lkjfijwef</a></div>
<!-- /wp:file -->

View File

@ -0,0 +1,17 @@
[
{
"clientId": "_clientId_0",
"name": "core/file",
"isValid": true,
"attributes": {
"id": 176,
"href": "http://localhost:8888/wp-content/uploads/2018/05/keycodes.js",
"fileName": "lkjfijwef",
"textLinkHref": "http://localhost:8888/?attachment_id=176",
"showDownloadButton": false,
"downloadButtonText": ""
},
"innerBlocks": [],
"originalContent": "<div class=\"wp-block-file\"><a href=\"http://localhost:8888/?attachment_id=176\">lkjfijwef</a></div>"
}
]

View File

@ -0,0 +1,18 @@
[
{
"blockName": "core/file",
"attrs": {
"href": "http://localhost:8888/wp-content/uploads/2018/05/keycodes.js",
"showDownloadButton": false,
"id": 176
},
"innerBlocks": [],
"innerHTML": "\n<div class=\"wp-block-file\"><a href=\"http://localhost:8888/?attachment_id=176\">lkjfijwef</a></div>\n"
},
{
"blockName": null,
"attrs": {},
"innerBlocks": [],
"innerHTML": "\n"
}
]

View File

@ -0,0 +1,3 @@
<!-- wp:file {"id":176,"href":"http://localhost:8888/wp-content/uploads/2018/05/keycodes.js","showDownloadButton":false} -->
<div class="wp-block-file"><a href="http://localhost:8888/?attachment_id=176">lkjfijwef</a></div>
<!-- /wp:file -->

View File

@ -0,0 +1,3 @@
<!-- wp:file {"href":"http://localhost:8888/wp-content/uploads/2018/05/keycodes.js","showDownloadButton":true,"id":176} -->
<div class="wp-block-file"><a href="http://localhost:8888/wp-content/uploads/2018/05/keycodes.js" class="wp-block-file__button" download="">Download</a></div>
<!-- /wp:file -->

View File

@ -0,0 +1,16 @@
[
{
"clientId": "_clientId_0",
"name": "core/file",
"isValid": true,
"attributes": {
"id": 176,
"href": "http://localhost:8888/wp-content/uploads/2018/05/keycodes.js",
"fileName": "",
"showDownloadButton": true,
"downloadButtonText": "Download"
},
"innerBlocks": [],
"originalContent": "<div class=\"wp-block-file\"><a href=\"http://localhost:8888/wp-content/uploads/2018/05/keycodes.js\" class=\"wp-block-file__button\" download=\"\">Download</a></div>"
}
]

View File

@ -0,0 +1,18 @@
[
{
"blockName": "core/file",
"attrs": {
"href": "http://localhost:8888/wp-content/uploads/2018/05/keycodes.js",
"showDownloadButton": true,
"id": 176
},
"innerBlocks": [],
"innerHTML": "\n<div class=\"wp-block-file\"><a href=\"http://localhost:8888/wp-content/uploads/2018/05/keycodes.js\" class=\"wp-block-file__button\" download=\"\">Download</a></div>\n"
},
{
"blockName": null,
"attrs": {},
"innerBlocks": [],
"innerHTML": "\n"
}
]

View File

@ -0,0 +1,3 @@
<!-- wp:file {"id":176,"href":"http://localhost:8888/wp-content/uploads/2018/05/keycodes.js"} -->
<div class="wp-block-file"><a href="http://localhost:8888/wp-content/uploads/2018/05/keycodes.js" class="wp-block-file__button" download="">Download</a></div>
<!-- /wp:file -->

View File

@ -0,0 +1,6 @@
<!-- wp:core/freeform -->
Testing freeform block with some
<div class="wp-some-class">
HTML <span style="color: red;">content</span>
</div>
<!-- /wp:core/freeform -->

View File

@ -0,0 +1,12 @@
[
{
"clientId": "_clientId_0",
"name": "core/freeform",
"isValid": true,
"attributes": {
"content": "<p>Testing freeform block with some\n</p><div class=\"wp-some-class\">\n\tHTML <span style=\"color: red;\">content</span>\n</div>"
},
"innerBlocks": [],
"originalContent": "<p>Testing freeform block with some\n<div class=\"wp-some-class\">\n\tHTML <span style=\"color: red;\">content</span>\n</div>"
}
]

View File

@ -0,0 +1,14 @@
[
{
"blockName": "core/freeform",
"attrs": {},
"innerBlocks": [],
"innerHTML": "\nTesting freeform block with some\n<div class=\"wp-some-class\">\n\tHTML <span style=\"color: red;\">content</span>\n</div>\n"
},
{
"blockName": null,
"attrs": {},
"innerBlocks": [],
"innerHTML": "\n"
}
]

View File

@ -0,0 +1,4 @@
<p>Testing freeform block with some
</p><div class="wp-some-class">
HTML <span style="color: red;">content</span>
</div>

View File

@ -0,0 +1,4 @@
Testing freeform block with some
<div class="wp-some-class">
HTML <span style="color: red;">content</span>
</div>

View File

@ -0,0 +1,12 @@
[
{
"clientId": "_clientId_0",
"name": "core/freeform",
"isValid": true,
"attributes": {
"content": "<p>Testing freeform block with some\n</p><div class=\"wp-some-class\">\n\tHTML <span style=\"color: red;\">content</span>\n</div>"
},
"innerBlocks": [],
"originalContent": "<p>Testing freeform block with some\n<div class=\"wp-some-class\">\n\tHTML <span style=\"color: red;\">content</span>\n</div>"
}
]

View File

@ -0,0 +1,8 @@
[
{
"attrs": {},
"blockName": null,
"innerBlocks": [],
"innerHTML": "Testing freeform block with some\n<div class=\"wp-some-class\">\n\tHTML <span style=\"color: red;\">content</span>\n</div>\n"
}
]

View File

@ -0,0 +1,4 @@
<p>Testing freeform block with some
</p><div class="wp-some-class">
HTML <span style="color: red;">content</span>
</div>

View File

@ -0,0 +1,14 @@
<!-- wp:core/gallery -->
<ul class="wp-block-gallery columns-2 is-cropped">
<li class="blocks-gallery-item">
<figure>
<img src="https://cldup.com/uuUqE_dXzy.jpg" alt="title" />
</figure>
</li>
<li class="blocks-gallery-item">
<figure>
<img src="http://google.com/hi.png" alt="title" />
</figure>
</li>
</ul>
<!-- /wp:core/gallery -->

View File

@ -0,0 +1,25 @@
[
{
"clientId": "_clientId_0",
"name": "core/gallery",
"isValid": true,
"attributes": {
"images": [
{
"url": "https://cldup.com/uuUqE_dXzy.jpg",
"alt": "title",
"caption": ""
},
{
"url": "http://google.com/hi.png",
"alt": "title",
"caption": ""
}
],
"imageCrop": true,
"linkTo": "none"
},
"innerBlocks": [],
"originalContent": "<ul class=\"wp-block-gallery columns-2 is-cropped\">\n\t<li class=\"blocks-gallery-item\">\n\t\t<figure>\n\t\t\t<img src=\"https://cldup.com/uuUqE_dXzy.jpg\" alt=\"title\" />\n\t\t</figure>\n\t</li>\n\t<li class=\"blocks-gallery-item\">\n\t\t<figure>\n\t\t\t<img src=\"http://google.com/hi.png\" alt=\"title\" />\n\t\t</figure>\n\t</li>\n</ul>"
}
]

View File

@ -0,0 +1,14 @@
[
{
"blockName": "core/gallery",
"attrs": {},
"innerBlocks": [],
"innerHTML": "\n<ul class=\"wp-block-gallery columns-2 is-cropped\">\n\t<li class=\"blocks-gallery-item\">\n\t\t<figure>\n\t\t\t<img src=\"https://cldup.com/uuUqE_dXzy.jpg\" alt=\"title\" />\n\t\t</figure>\n\t</li>\n\t<li class=\"blocks-gallery-item\">\n\t\t<figure>\n\t\t\t<img src=\"http://google.com/hi.png\" alt=\"title\" />\n\t\t</figure>\n\t</li>\n</ul>\n"
},
{
"blockName": null,
"attrs": {},
"innerBlocks": [],
"innerHTML": "\n"
}
]

View File

@ -0,0 +1,3 @@
<!-- wp:gallery -->
<ul class="wp-block-gallery columns-2 is-cropped"><li class="blocks-gallery-item"><figure><img src="https://cldup.com/uuUqE_dXzy.jpg" alt="title"/></figure></li><li class="blocks-gallery-item"><figure><img src="http://google.com/hi.png" alt="title"/></figure></li></ul>
<!-- /wp:gallery -->

View File

@ -0,0 +1,14 @@
<!-- wp:core/gallery {"columns":1} -->
<ul class="wp-block-gallery columns-1 is-cropped">
<li class="blocks-gallery-item">
<figure>
<img src="https://cldup.com/uuUqE_dXzy.jpg" alt="title" />
</figure>
</li>
<li class="blocks-gallery-item">
<figure>
<img src="http://google.com/hi.png" alt="title" />
</figure>
</li>
</ul>
<!-- /wp:core/gallery -->

View File

@ -0,0 +1,26 @@
[
{
"clientId": "_clientId_0",
"name": "core/gallery",
"isValid": true,
"attributes": {
"images": [
{
"url": "https://cldup.com/uuUqE_dXzy.jpg",
"alt": "title",
"caption": ""
},
{
"url": "http://google.com/hi.png",
"alt": "title",
"caption": ""
}
],
"columns": 1,
"imageCrop": true,
"linkTo": "none"
},
"innerBlocks": [],
"originalContent": "<ul class=\"wp-block-gallery columns-1 is-cropped\">\n\t<li class=\"blocks-gallery-item\">\n\t\t<figure>\n\t\t\t<img src=\"https://cldup.com/uuUqE_dXzy.jpg\" alt=\"title\" />\n\t\t</figure>\n\t</li>\n\t<li class=\"blocks-gallery-item\">\n\t\t<figure>\n\t\t\t<img src=\"http://google.com/hi.png\" alt=\"title\" />\n\t\t</figure>\n\t</li>\n</ul>"
}
]

View File

@ -0,0 +1,16 @@
[
{
"blockName": "core/gallery",
"attrs": {
"columns": 1
},
"innerBlocks": [],
"innerHTML": "\n<ul class=\"wp-block-gallery columns-1 is-cropped\">\n\t<li class=\"blocks-gallery-item\">\n\t\t<figure>\n\t\t\t<img src=\"https://cldup.com/uuUqE_dXzy.jpg\" alt=\"title\" />\n\t\t</figure>\n\t</li>\n\t<li class=\"blocks-gallery-item\">\n\t\t<figure>\n\t\t\t<img src=\"http://google.com/hi.png\" alt=\"title\" />\n\t\t</figure>\n\t</li>\n</ul>\n"
},
{
"blockName": null,
"attrs": {},
"innerBlocks": [],
"innerHTML": "\n"
}
]

View File

@ -0,0 +1,3 @@
<!-- wp:gallery {"columns":1} -->
<ul class="wp-block-gallery columns-1 is-cropped"><li class="blocks-gallery-item"><figure><img src="https://cldup.com/uuUqE_dXzy.jpg" alt="title"/></figure></li><li class="blocks-gallery-item"><figure><img src="http://google.com/hi.png" alt="title"/></figure></li></ul>
<!-- /wp:gallery -->

View File

@ -0,0 +1,3 @@
<!-- wp:core/heading -->
<h2>The <em>Inserter</em> Tool</h2>
<!-- /wp:core/heading -->

View File

@ -0,0 +1,13 @@
[
{
"clientId": "_clientId_0",
"name": "core/heading",
"isValid": true,
"attributes": {
"content": "The <em>Inserter</em> Tool",
"level": 2
},
"innerBlocks": [],
"originalContent": "<h2>The <em>Inserter</em> Tool</h2>"
}
]

View File

@ -0,0 +1,14 @@
[
{
"blockName": "core/heading",
"attrs": {},
"innerBlocks": [],
"innerHTML": "\n<h2>The <em>Inserter</em> Tool</h2>\n"
},
{
"blockName": null,
"attrs": {},
"innerBlocks": [],
"innerHTML": "\n"
}
]

View File

@ -0,0 +1,3 @@
<!-- wp:heading -->
<h2>The <em>Inserter</em> Tool</h2>
<!-- /wp:heading -->

View File

@ -0,0 +1,3 @@
<!-- wp:core/heading -->
<h2>A picture is worth a thousand words, or so the saying goes</h2>
<!-- /wp:core/heading -->

View File

@ -0,0 +1,13 @@
[
{
"clientId": "_clientId_0",
"name": "core/heading",
"isValid": true,
"attributes": {
"content": "A picture is worth a thousand words, or so the saying goes",
"level": 2
},
"innerBlocks": [],
"originalContent": "<h2>A picture is worth a thousand words, or so the saying goes</h2>"
}
]

View File

@ -0,0 +1,14 @@
[
{
"blockName": "core/heading",
"attrs": {},
"innerBlocks": [],
"innerHTML": "\n<h2>A picture is worth a thousand words, or so the saying goes</h2>\n"
},
{
"blockName": null,
"attrs": {},
"innerBlocks": [],
"innerHTML": "\n"
}
]

View File

@ -0,0 +1,3 @@
<!-- wp:heading -->
<h2>A picture is worth a thousand words, or so the saying goes</h2>
<!-- /wp:heading -->

View File

@ -0,0 +1,4 @@
<!-- wp:core/html -->
<h1>Some HTML code</h1>
<marquee>This text will scroll from right to left</marquee>
<!-- /wp:core/html -->

View File

@ -0,0 +1,12 @@
[
{
"clientId": "_clientId_0",
"name": "core/html",
"isValid": true,
"attributes": {
"content": "<h1>Some HTML code</h1>\n<marquee>This text will scroll from right to left</marquee>"
},
"innerBlocks": [],
"originalContent": "<h1>Some HTML code</h1>\n<marquee>This text will scroll from right to left</marquee>"
}
]

View File

@ -0,0 +1,14 @@
[
{
"blockName": "core/html",
"attrs": {},
"innerBlocks": [],
"innerHTML": "\n<h1>Some HTML code</h1>\n<marquee>This text will scroll from right to left</marquee>\n"
},
{
"blockName": null,
"attrs": {},
"innerBlocks": [],
"innerHTML": "\n"
}
]

View File

@ -0,0 +1,4 @@
<!-- wp:html -->
<h1>Some HTML code</h1>
<marquee>This text will scroll from right to left</marquee>
<!-- /wp:html -->

View File

@ -0,0 +1,3 @@
<!-- wp:core/image -->
<figure class="wp-block-image"><img src="https://cldup.com/uuUqE_dXzy.jpg" alt="" /></figure>
<!-- /wp:core/image -->

View File

@ -0,0 +1,15 @@
[
{
"clientId": "_clientId_0",
"name": "core/image",
"isValid": true,
"attributes": {
"url": "https://cldup.com/uuUqE_dXzy.jpg",
"alt": "",
"caption": "",
"linkDestination": "none"
},
"innerBlocks": [],
"originalContent": "<figure class=\"wp-block-image\"><img src=\"https://cldup.com/uuUqE_dXzy.jpg\" alt=\"\" /></figure>"
}
]

View File

@ -0,0 +1,14 @@
[
{
"blockName": "core/image",
"attrs": {},
"innerBlocks": [],
"innerHTML": "\n<figure class=\"wp-block-image\"><img src=\"https://cldup.com/uuUqE_dXzy.jpg\" alt=\"\" /></figure>\n"
},
{
"blockName": null,
"attrs": {},
"innerBlocks": [],
"innerHTML": "\n"
}
]

View File

@ -0,0 +1,3 @@
<!-- wp:image -->
<figure class="wp-block-image"><img src="https://cldup.com/uuUqE_dXzy.jpg" alt=""/></figure>
<!-- /wp:image -->

View File

@ -0,0 +1,3 @@
<!-- wp:core/image {"linkDestination":"attachment"} -->
<figure class="wp-block-image"><a href="http://localhost:8888/?attachment_id=7"><img src="https://cldup.com/uuUqE_dXzy.jpg" alt="" /></a></figure>
<!-- /wp:core/image -->

View File

@ -0,0 +1,16 @@
[
{
"clientId": "_clientId_0",
"name": "core/image",
"isValid": true,
"attributes": {
"url": "https://cldup.com/uuUqE_dXzy.jpg",
"alt": "",
"caption": "",
"href": "http://localhost:8888/?attachment_id=7",
"linkDestination": "attachment"
},
"innerBlocks": [],
"originalContent": "<figure class=\"wp-block-image\"><a href=\"http://localhost:8888/?attachment_id=7\"><img src=\"https://cldup.com/uuUqE_dXzy.jpg\" alt=\"\" /></a></figure>"
}
]

View File

@ -0,0 +1,16 @@
[
{
"blockName": "core/image",
"attrs": {
"linkDestination": "attachment"
},
"innerBlocks": [],
"innerHTML": "\n<figure class=\"wp-block-image\"><a href=\"http://localhost:8888/?attachment_id=7\"><img src=\"https://cldup.com/uuUqE_dXzy.jpg\" alt=\"\" /></a></figure>\n"
},
{
"blockName": null,
"attrs": {},
"innerBlocks": [],
"innerHTML": "\n"
}
]

View File

@ -0,0 +1,3 @@
<!-- wp:image {"linkDestination":"attachment"} -->
<figure class="wp-block-image"><a href="http://localhost:8888/?attachment_id=7"><img src="https://cldup.com/uuUqE_dXzy.jpg" alt=""/></a></figure>
<!-- /wp:image -->

View File

@ -0,0 +1,3 @@
<!-- wp:core/image {"align":"center"} -->
<div class="wp-block-image"><figure class="aligncenter"><img src="https://cldup.com/YLYhpou2oq.jpg" alt="" /><figcaption>Give it a try. Press the &quot;really wide&quot; button on the image toolbar.</figcaption></figure></div>
<!-- /wp:core/image -->

Some files were not shown because too many files have changed in this diff Show More