mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2026-08-12 21:00:21 +00:00
HTML API: Fix finding bookmarks set on closing tag WP_HTML_Tag_Processor.
Setting a bookmark on a tag should set its "start" position before the opening "<", e.g.:
{{{
<div> Testing a <b>Bookmark</b>
----------------^
}}}
The previous calculation assumed this is always one byte to the left from `$tag_name_starts_at`.
However, in a closing tag that index points to a solidus symbol "/":
{{{
<div> Testing a <b>Bookmark</b>
----------------------------^
}}}
The bookmark should therefore start two bytes before the tag name:
{{{
<div> Testing a <b>Bookmark</b>
---------------------------^
}}}
This changeset achieves this by:
* Using the correct starting index for closing tag bookmarks.
* Adding `array( 'tag_closers' => 'visit' )` in `WP_HTML_Tag_Processor::seek()`.
Follow-up to [55203].
Props zieladam, dmsnell, flixos90.
Fixes #57787.
See #57575.
git-svn-id: https://develop.svn.wordpress.org/trunk@55407 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
@@ -722,7 +722,7 @@ class WP_HTML_Tag_Processor {
|
||||
}
|
||||
|
||||
$this->bookmarks[ $name ] = new WP_HTML_Span(
|
||||
$this->tag_name_starts_at - 1,
|
||||
$this->tag_name_starts_at - ( $this->is_closing_tag ? 2 : 1 ),
|
||||
$this->tag_ends_at
|
||||
);
|
||||
|
||||
@@ -1504,7 +1504,7 @@ class WP_HTML_Tag_Processor {
|
||||
$this->bytes_already_parsed = $this->bookmarks[ $bookmark_name ]->start;
|
||||
$this->bytes_already_copied = $this->bytes_already_parsed;
|
||||
$this->output_buffer = substr( $this->html, 0, $this->bytes_already_copied );
|
||||
return $this->next_tag();
|
||||
return $this->next_tag( array( 'tag_closers' => 'visit' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -63,6 +63,28 @@ class Tests_HtmlApi_wpHtmlTagProcessor_Bookmark extends WP_UnitTestCase {
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 57787
|
||||
*
|
||||
* @covers WP_HTML_Tag_Processor::seek
|
||||
*/
|
||||
public function test_seeks_to_tag_closer_bookmark() {
|
||||
$p = new WP_HTML_Tag_Processor( '<div>First</div><span>Second</span>' );
|
||||
$p->next_tag( array( 'tag_closers' => 'visit' ) );
|
||||
$p->set_bookmark( 'first' );
|
||||
$p->next_tag( array( 'tag_closers' => 'visit' ) );
|
||||
$p->set_bookmark( 'second' );
|
||||
|
||||
$p->seek( 'first' );
|
||||
$p->seek( 'second' );
|
||||
|
||||
$this->assertSame(
|
||||
'DIV',
|
||||
$p->get_tag(),
|
||||
'Did not seek to the intended bookmark location'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* WP_HTML_Tag_Processor used to test for the diffs affecting
|
||||
* the adjusted bookmark position while simultaneously adjusting
|
||||
|
||||
Reference in New Issue
Block a user