mirror of
https://github.com/wallabag/wallabag.git
synced 2024-12-29 19:10:29 +00:00
Display a bigger image in case of image content
If the content is only an image, we can display a bigger preview image because we won’t have text to display. Also, split different card view to avoid too much complexity in the entries.html.twig
This commit is contained in:
parent
e9490a3443
commit
8d7b4f0eff
10 changed files with 164 additions and 97 deletions
|
@ -568,7 +568,12 @@ a.original {
|
|||
height: 10em;
|
||||
}
|
||||
|
||||
.card .card-image .preview {
|
||||
.card .card-fullimage {
|
||||
height: 13.5em;
|
||||
}
|
||||
|
||||
.card .card-image .preview,
|
||||
.card .card-fullimage .preview {
|
||||
height: 14em;
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
|
|
|
@ -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>
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue