oEmbed neatifying (inspired by Qvitter)

This commit is contained in:
Mikael Nordfeldth 2016-03-17 00:31:45 +01:00
parent 99a2230fdb
commit 102f7ab059
1 changed files with 62 additions and 0 deletions

View File

@ -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)
{