diff --git a/plugins/Oembed/OembedPlugin.php b/plugins/Oembed/OembedPlugin.php index cb59bb21e5..65d71f39c8 100644 --- a/plugins/Oembed/OembedPlugin.php +++ b/plugins/Oembed/OembedPlugin.php @@ -143,6 +143,11 @@ class OembedPlugin extends Plugin return true; } + public function onEndShowStylesheets(Action $action) { + $action->cssLink($this->path('css/oembed.css')); + return true; + } + /** * Save embedding information for a File, if applicable. * @@ -224,6 +229,63 @@ class OembedPlugin extends Plugin } return true; } + + public function onStartShowAttachmentRepresentation(HTMLOutputter $out, File $file) + { + try { + $oembed = File_oembed::getByFile($file); + } catch (NoResultException $e) { + return true; + } + + $out->elementStart('article', ['class'=>'oembed-item']); + $out->elementStart('header'); + try { + $thumb = $file->getThumbnail(128, 128); + $out->element('img', $thumb->getHtmlAttrs(['class'=>'oembed-thumb'])); + unset($thumb); + } catch (Exception $e) { + $out->element('div', ['class'=>'error'], $e->getMessage()); + } + $out->elementStart('h5', ['class'=>'oembed-title']); + $out->element('a', ['href'=>$file->getUrl()], $oembed->title); + $out->elementEnd('h5'); + $out->elementStart('div', ['class'=>'oembed-source']); + if (!empty($oembed->author_name)) { + // TRANS: text before the author name of oEmbed attachment representation + // FIXME: The whole "By x from y" should be i18n because of different language constructions. + $out->text(_('By ')); + $attrs = ['class'=>'h-card']; + if (!empty($oembed->author_url)) { + $attrs['href'] = $oembed->author_url; + $tag = 'a'; + } else { + $tag = 'span'; + } + $out->element($tag, $attrs, $oembed->author_name); + } + if (!empty($oembed->provider)) { + // TRANS: text between the oEmbed author name and provider url + // FIXME: The whole "By x from y" should be i18n because of different language constructions. + $out->text(_(' from ')); + $attrs = ['class'=>'h-card']; + if (!empty($oembed->provider_url)) { + $attrs['href'] = $oembed->provider_url; + $tag = 'a'; + } else { + $tag = 'span'; + } + $out->element($tag, $attrs, $oembed->provider); + } + $out->elementEnd('div'); + $out->elementEnd('header'); + $out->element('div', ['class'=>'oembed-item-body'], common_purify($oembed->html)); + $out->elementStart('footer'); + $out->elementEnd('footer'); + $out->elementEnd('article'); + + return false; + } public function onShowUnsupportedAttachmentRepresentation(HTMLOutputter $out, File $file) {