[ICODE=rich] does not round-trip after editing a post as expected.

Xon

Well-known member
Affected version
2.2.15
If you have the bb-code:
[ICODE=rich][COLOR=rgb(0, 255, 255)]Test[/COLOR][/ICODE]
It is rendered in the editor as:
<p><code><span style="color: rgb(0, 255, 255);">Test</span></code></p>
And then edit the post it gets saved as:
[ICODE][COLOR=rgb(0, 255, 255)]Test[/COLOR][/ICODE]

The problem is XF\BbCode\Renderer\EditorHtml::addDefaultTags has the following code:
PHP:
$this->addTag('icode', ['replace' => ['<code>', '</code>']]);
And XF\Html\Renderer\BbCode::handleTagCode just outputs [ICODE]/[code] without any css handling.

Something like the following will work:

In XF\Html\Renderer\BbCode::handleTagCode:
PHP:
public function handleTagCode($text, Tag $tag)
{
    if (preg_match('/[\r\n]/', $text))
    {
....
    }
    else
    {
        return '[ICODE'.($tag->hasClass('bbCodeInline--rich') ? '=rich' : '').']' . $text . '[/ICODE]';
    }

Then in XF\BbCode\Renderer\EditorHtml; remove the $this->addTag('icode', ['replace' => ['<code>', '</code>']]); line and specialize renderTagInlineCode in EditorHtml:
PHP:
public function renderTagInlineCode(array $children, $option, array $tag, array $options)
{
    $class = $option === 'rich' ? 'bbCodeInline--rich' : '';
    $content = $this->renderSubTree($children, $options);

    return $this->wrapHtml('<code class="'.$class.'">', $content, '</code>');
}

Probably can be cleaned up a little but it works
 
Top Bottom