daux.io/libs/Format/Confluence/ContentTypes/Markdown/LinkRenderer.php

59 lines
2.1 KiB
PHP
Raw Normal View History

<?php namespace Todaymade\Daux\Format\Confluence\ContentTypes\Markdown;
2015-06-29 16:16:39 +02:00
2015-10-21 23:26:42 +02:00
use League\CommonMark\ElementRendererInterface;
2017-06-07 23:40:12 +02:00
use League\CommonMark\HtmlElement;
2015-06-29 16:16:39 +02:00
use League\CommonMark\Inline\Element\AbstractInline;
use League\CommonMark\Inline\Element\Link;
2015-07-29 22:31:41 +02:00
class LinkRenderer extends \Todaymade\Daux\ContentTypes\Markdown\LinkRenderer
2015-06-29 16:16:39 +02:00
{
/**
2016-09-15 00:49:48 +02:00
* @param AbstractInline|Link $inline
2015-10-21 23:26:42 +02:00
* @param ElementRendererInterface $htmlRenderer
2015-06-29 16:16:39 +02:00
*
* @return HtmlElement
*/
2015-10-21 23:26:42 +02:00
public function render(AbstractInline $inline, ElementRendererInterface $htmlRenderer)
2015-06-29 16:16:39 +02:00
{
2015-07-20 15:59:52 +02:00
// This can't be in the method type as
// the method is an abstract and should
// have the same interface
if (!$inline instanceof Link) {
throw new \RuntimeException(
2016-07-27 21:32:51 +02:00
'Wrong type passed to ' . __CLASS__ . '::' . __METHOD__ .
2015-07-20 15:59:52 +02:00
" the expected type was 'League\\CommonMark\\Inline\\Element\\Link' but '" .
get_class($inline) . "' was provided"
);
}
2015-06-29 16:16:39 +02:00
// Default handling
$element = parent::render($inline, $htmlRenderer);
2016-09-15 00:49:48 +02:00
2015-06-29 16:16:39 +02:00
$url = $inline->getUrl();
2016-09-15 00:49:48 +02:00
// empty urls, anchors and absolute urls
// should not go through the url resolver
if (!$this->isValidUrl($url) || $this->isExternalUrl($url)) {
2015-06-29 16:16:39 +02:00
return $element;
}
//Internal links
2016-09-15 00:49:48 +02:00
$file = $this->resolveInternalFile($url);
2015-06-29 16:16:39 +02:00
$link_props = [
2016-07-27 21:32:51 +02:00
'ri:content-title' => trim($this->daux['confluence']['prefix']) . ' ' . $file->getTitle(),
'ri:space-key' => $this->daux['confluence']['space_id'],
2015-06-29 16:16:39 +02:00
];
2015-07-17 23:38:06 +02:00
$page = strval(new HtmlElement('ri:page', $link_props, '', true));
2015-10-27 16:03:06 +01:00
$children = $htmlRenderer->renderInlines($inline->children());
2016-07-27 21:32:51 +02:00
if (strpos($children, '<') !== false) {
2015-06-29 16:16:39 +02:00
$children = '<ac:link-body>' . $children . '</ac:link-body>';
} else {
$children = '<ac:plain-text-link-body><![CDATA[' . $children . ']]></ac:plain-text-link-body>';
}
return new HtmlElement('ac:link', [], $page . $children);
}
}