mirror of
https://github.com/wallabag/wallabag.git
synced 2025-09-15 18:57:05 +00:00
Merge pull request #2562 from wallabag/image-bigger
Bigger image preview in case of only image content
This commit is contained in:
commit
d37081e50b
12 changed files with 176 additions and 99 deletions
|
@ -8,6 +8,7 @@ use Wallabag\CoreBundle\Entity\Entry;
|
|||
use Wallabag\CoreBundle\Entity\Tag;
|
||||
use Wallabag\CoreBundle\Tools\Utils;
|
||||
use Wallabag\CoreBundle\Repository\TagRepository;
|
||||
use Symfony\Component\HttpFoundation\File\MimeType\MimeTypeExtensionGuesser;
|
||||
|
||||
/**
|
||||
* This kind of proxy class take care of getting the content from an url
|
||||
|
@ -19,6 +20,7 @@ class ContentProxy
|
|||
protected $tagger;
|
||||
protected $logger;
|
||||
protected $tagRepository;
|
||||
protected $mimeGuesser;
|
||||
|
||||
public function __construct(Graby $graby, RuleBasedTagger $tagger, TagRepository $tagRepository, Logger $logger)
|
||||
{
|
||||
|
@ -26,6 +28,7 @@ class ContentProxy
|
|||
$this->tagger = $tagger;
|
||||
$this->logger = $logger;
|
||||
$this->tagRepository = $tagRepository;
|
||||
$this->mimeGuesser = new MimeTypeExtensionGuesser();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -79,6 +82,11 @@ class ContentProxy
|
|||
$entry->setPreviewPicture($content['open_graph']['og_image']);
|
||||
}
|
||||
|
||||
// if content is an image define as a preview too
|
||||
if (in_array($this->mimeGuesser->guess($content['content_type']), ['jpeg', 'jpg', 'gif', 'png'], true)) {
|
||||
$entry->setPreviewPicture($content['url']);
|
||||
}
|
||||
|
||||
try {
|
||||
$this->tagger->tag($entry);
|
||||
} catch (\Exception $e) {
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
<div class="card-action">
|
||||
<span class="reading-time grey-text">
|
||||
<i class="material-icons" title="{{ 'entry.list.reading_time'|trans }}">timer</i>
|
||||
{{ entry.readingTime / app.user.config.readingSpeed|round }} min
|
||||
</span>
|
||||
|
||||
<ul class="tools right">
|
||||
<li>
|
||||
<a title="{{ 'entry.list.toogle_as_read'|trans }}" class="tool grey-text" href="{{ path('archive_entry', { 'id': entry.id }) }}"><i class="material-icons">{% if entry.isArchived == 0 %}done{% else %}redo{% endif %}</i></a>
|
||||
<a title="{{ 'entry.list.toogle_as_star'|trans }}" class="tool grey-text" href="{{ path('star_entry', { 'id': entry.id }) }}"><i class="material-icons">{% if entry.isStarred == 0 %}star_border{% else %}star{% endif %}</i></a>
|
||||
<a title="{{ 'entry.list.delete'|trans }}" class="tool grey-text delete" href="{{ path('delete_entry', { 'id': entry.id }) }}"><i class="material-icons">delete</i></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
|
@ -0,0 +1,28 @@
|
|||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div class="card-fullimage">
|
||||
<ul class="card-entry-labels">
|
||||
{% for tag in entry.tags | slice(0, 3) %}
|
||||
<li><a href="{{ path('tag_entries', {'slug': tag.slug}) }}">{{ tag.label }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="preview activator" style="background-image: url({{ entry.previewPicture }})"></div>
|
||||
</div>
|
||||
|
||||
<div class="card-content">
|
||||
<span class="card-title dot-ellipsis dot-resize-update">
|
||||
<a href="{{ path('view', { 'id': entry.id }) }}" title="{{ entry.title | raw | striptags }}">
|
||||
{{ entry.title | raw | striptags | truncate(80, true, '…') }}
|
||||
</a>
|
||||
</span>
|
||||
|
||||
<div class="original grey-text">
|
||||
<a href="{{ entry.url|e }}" target="_blank" title="{{ entry.domainName|removeWww }}" class="tool original grey-text">
|
||||
<span>{{ entry.domainName|removeWww }}</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% include "@WallabagCore/themes/material/Entry/_card_actions.html.twig" with {'entry': entry} only %}
|
||||
</div>
|
|
@ -0,0 +1,26 @@
|
|||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div class="card-content">
|
||||
<span class="card-title dot-ellipsis dot-resize-update">
|
||||
<a href="{{ path('view', { 'id': entry.id }) }}" title="{{ entry.title | raw | striptags }}">
|
||||
{{ entry.title | raw | striptags | truncate(80, true, '…') }}
|
||||
</a>
|
||||
</span>
|
||||
|
||||
<div class="original grey-text">
|
||||
<a href="{{ entry.url|e }}" target="_blank" title="{{ entry.domainName|removeWww }}" class="tool original grey-text">
|
||||
<span>{{ entry.domainName|removeWww }}</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<p>{{ entry.content|striptags|slice(0, 250)|raw }}…</p>
|
||||
<ul class="card-entry-labels-hidden">
|
||||
{% for tag in entry.tags | slice(0, 2) %}
|
||||
<li><a href="{{ path('tag_entries', {'slug': tag.slug}) }}">{{ tag.label }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% include "@WallabagCore/themes/material/Entry/_card_actions.html.twig" with {'entry': entry} only %}
|
||||
</div>
|
|
@ -0,0 +1,47 @@
|
|||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div class="card-image waves-effect waves-block waves-light">
|
||||
<ul class="card-entry-labels">
|
||||
{% for tag in entry.tags | slice(0, 3) %}
|
||||
<li><a href="{{ path('tag_entries', {'slug': tag.slug}) }}">{{ tag.label }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="preview activator" style="background-image: url({{ entry.previewPicture }})"></div>
|
||||
</div>
|
||||
|
||||
<div class="card-content">
|
||||
<i class="grey-text text-darken-4 activator material-icons right">more_vert</i>
|
||||
|
||||
<span class="card-title dot-ellipsis dot-resize-update">
|
||||
<a href="{{ path('view', { 'id': entry.id }) }}" title="{{ entry.title | raw | striptags }}">
|
||||
{{ entry.title| striptags | truncate(80, true, '…') | raw }}
|
||||
</a>
|
||||
</span>
|
||||
|
||||
<div class="original grey-text">
|
||||
<a href="{{ entry.url|e }}" target="_blank" title="{{ entry.domainName|removeWww }}" class="tool original grey-text">
|
||||
<span>{{ entry.domainName|removeWww }}</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-reveal">
|
||||
<i class="card-title activator grey-text text-darken-4 material-icons right">clear</i>
|
||||
<span class="card-title">
|
||||
<a href="{{ path('view', { 'id': entry.id }) }}" title="{{ entry.title | raw | striptags }}">
|
||||
{{ entry.title | raw | striptags | truncate(80, true, '…') }}
|
||||
</a>
|
||||
</span>
|
||||
|
||||
<p>{{ entry.content|striptags|slice(0, 250)|raw }}…</p>
|
||||
|
||||
<ul class="card-entry-labels-hidden">
|
||||
{% for tag in entry.tags %}
|
||||
<li><a href="{{ path('tag_entries', {'slug': tag.slug}) }}">{{ tag.label }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
{% include "@WallabagCore/themes/material/Entry/_card_actions.html.twig" with {'entry': entry} only %}
|
||||
</div>
|
|
@ -22,74 +22,13 @@
|
|||
<ul class="row data">
|
||||
{% for entry in entries %}
|
||||
<li id="entry-{{ entry.id|e }}" class="col l3 m6 s12">
|
||||
<div class="card">
|
||||
|
||||
<div class="card-body">
|
||||
{% if not entry.previewPicture is null %}
|
||||
<div class="card-image waves-effect waves-block waves-light">
|
||||
<ul class="card-entry-labels">
|
||||
{% for tag in entry.tags | slice(0, 3) %}
|
||||
<li><a href="{{ path('tag_entries', {'slug': tag.slug}) }}">{{ tag.label }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="preview activator" style="background-image: url({{ entry.previewPicture }})"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="card-content">
|
||||
{% if not entry.previewPicture is null %}
|
||||
<i class="grey-text text-darken-4 activator material-icons right">more_vert</i>
|
||||
{% endif %}
|
||||
|
||||
<span class="card-title dot-ellipsis dot-resize-update"><a href="{{ path('view', { 'id': entry.id }) }}" title="{{ entry.title | raw | striptags }}">{{ entry.title| striptags | truncate(80, true, '…') | raw }}</a></span>
|
||||
|
||||
<div class="original grey-text">
|
||||
<a href="{{ entry.url|e }}" target="_blank" title="{{ entry.domainName|removeWww }}" class="tool original grey-text">
|
||||
<span>{{ entry.domainName|removeWww }}</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
{% if entry.previewPicture is null %}
|
||||
<p>{{ entry.content|striptags|slice(0, 250)|raw }}…</p>
|
||||
<ul class="card-entry-labels-hidden">
|
||||
{% for tag in entry.tags | slice(0, 2) %}
|
||||
<li><a href="{{ path('tag_entries', {'slug': tag.slug}) }}">{{ tag.label }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if not entry.previewPicture is null %}
|
||||
<div class="card-reveal">
|
||||
<i class="card-title activator grey-text text-darken-4 material-icons right">clear</i>
|
||||
<span class="card-title" title="{{ entry.title | raw | striptags }}"><a href="{{ path('view', { 'id': entry.id }) }}">{{ entry.title | raw | striptags | truncate(90, true, '…') }}</a></span>
|
||||
|
||||
<p>{{ entry.content|striptags|slice(0, 250)|raw }}…</p>
|
||||
|
||||
<ul class="card-entry-labels-hidden">
|
||||
{% for tag in entry.tags %}
|
||||
<li><a href="{{ path('tag_entries', {'slug': tag.slug}) }}">{{ tag.label }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="card-action">
|
||||
<span class="reading-time grey-text">
|
||||
<i class="material-icons" title="{{ 'entry.list.reading_time'|trans }}">timer</i>
|
||||
{{ entry.readingTime / app.user.config.readingSpeed|round }} min
|
||||
</span>
|
||||
|
||||
<ul class="tools right">
|
||||
<li>
|
||||
<a title="{{ 'entry.list.toogle_as_read'|trans }}" class="tool grey-text" href="{{ path('archive_entry', { 'id': entry.id }) }}"><i class="material-icons">{% if entry.isArchived == 0 %}done{% else %}redo{% endif %}</i></a>
|
||||
<a title="{{ 'entry.list.toogle_as_star'|trans }}" class="tool grey-text" href="{{ path('star_entry', { 'id': entry.id }) }}"><i class="material-icons">{% if entry.isStarred == 0 %}star_border{% else %}star{% endif %}</i></a>
|
||||
<a title="{{ 'entry.list.delete'|trans }}" class="tool grey-text delete" href="{{ path('delete_entry', { 'id': entry.id }) }}"><i class="material-icons">delete</i></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
{% if entry.previewPicture is null %}
|
||||
{% include "@WallabagCore/themes/material/Entry/_card_no_preview.html.twig" with {'entry': entry} only %}
|
||||
{% elseif not entry.previewPicture is null and entry.mimetype starts with 'image/' %}
|
||||
{% include "@WallabagCore/themes/material/Entry/_card_full_image.html.twig" with {'entry': entry} only %}
|
||||
{% elseif not entry.previewPicture is null %}
|
||||
{% include "@WallabagCore/themes/material/Entry/_card_preview.html.twig" with {'entry': entry} only %}
|
||||
{% endif %}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue