the browser-facing portion of osu!
at master 39 lines 1.3 kB view raw
1<?php 2 3// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the GNU Affero General Public License v3.0. 4// See the LICENCE file in the repository root for full licence text. 5 6namespace App\Libraries\Markdown\Osu\Renderers; 7 8use InvalidArgumentException; 9use League\CommonMark\Extension\Table\Table; 10use League\CommonMark\Extension\Table\TableRenderer as BaseTableRenderer; 11use League\CommonMark\Node\Node; 12use League\CommonMark\Renderer\ChildNodeRendererInterface; 13use League\CommonMark\Renderer\NodeRendererInterface; 14use League\CommonMark\Util\HtmlElement; 15 16class TableRenderer implements NodeRendererInterface 17{ 18 private BaseTableRenderer $baseRenderer; 19 20 public function __construct() 21 { 22 $this->baseRenderer = new BaseTableRenderer(); 23 } 24 25 public function render(Node $node, ChildNodeRendererInterface $childRenderer) 26 { 27 Table::assertInstanceOf($node); 28 29 $baseTable = $this->baseRenderer->render($node, $childRenderer); 30 31 if (!($baseTable instanceof HtmlElement)) { 32 throw new InvalidArgumentException('Invalid element type: '.get_class($baseTable)); 33 } 34 35 $table = new HtmlElement('table', [], $baseTable->getContents()); 36 37 return new HtmlElement('div', $baseTable->getAllAttributes(), $table); 38 } 39}