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:
Jeremy Benoist 2016-11-08 22:17:46 +01:00
parent e9490a3443
commit 8d7b4f0eff
No known key found for this signature in database
GPG key ID: BCA73962457ACC3C
10 changed files with 164 additions and 97 deletions

View file

@ -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;

View file

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

View file

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

View file

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

View file

@ -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 }}&hellip;</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>

View file

@ -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 }}&hellip;</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>

View file

@ -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 }}&hellip;</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 }}&hellip;</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