aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/Wallabag
diff options
context:
space:
mode:
authorNicolas Lœuillet <nicolas@loeuillet.org>2016-11-28 16:47:41 +0100
committerGitHub <noreply@github.com>2016-11-28 16:47:41 +0100
commitad51d77146494f04466c288b05b57b0d96113fd5 (patch)
tree278c6a17d808bd3d9aa132d9ef93d7e54842de58 /src/Wallabag
parent34ea7be6228c633ef8da703994eed034026e9c18 (diff)
parent9aa991281ddd315f607cabcfc3b917401d3d2104 (diff)
downloadwallabag-ad51d77146494f04466c288b05b57b0d96113fd5.tar.gz
wallabag-ad51d77146494f04466c288b05b57b0d96113fd5.tar.zst
wallabag-ad51d77146494f04466c288b05b57b0d96113fd5.zip
Merge pull request #2662 from wallabag/add-list-view
Add list view
Diffstat (limited to 'src/Wallabag')
-rw-r--r--src/Wallabag/CoreBundle/Controller/ConfigController.php21
-rw-r--r--src/Wallabag/CoreBundle/Entity/Config.php27
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig8
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/_card_list.html.twig18
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig8
5 files changed, 77 insertions, 5 deletions
diff --git a/src/Wallabag/CoreBundle/Controller/ConfigController.php b/src/Wallabag/CoreBundle/Controller/ConfigController.php
index 52a03070..68f30f6e 100644
--- a/src/Wallabag/CoreBundle/Controller/ConfigController.php
+++ b/src/Wallabag/CoreBundle/Controller/ConfigController.php
@@ -363,4 +363,25 @@ class ConfigController extends Controller
363 363
364 return $this->redirect($this->generateUrl('fos_user_security_login')); 364 return $this->redirect($this->generateUrl('fos_user_security_login'));
365 } 365 }
366
367 /**
368 * Switch view mode for current user.
369 *
370 * @Route("/config/view-mode", name="switch_view_mode")
371 *
372 * @param Request $request
373 *
374 * @return \Symfony\Component\HttpFoundation\RedirectResponse
375 */
376 public function changeViewModeAction(Request $request)
377 {
378 $user = $this->getUser();
379 $user->getConfig()->setListMode(!$user->getConfig()->getListMode());
380
381 $em = $this->getDoctrine()->getManager();
382 $em->persist($user);
383 $em->flush();
384
385 return $this->redirect($request->headers->get('referer'));
386 }
366} 387}
diff --git a/src/Wallabag/CoreBundle/Entity/Config.php b/src/Wallabag/CoreBundle/Entity/Config.php
index e04f0a7b..0b75270d 100644
--- a/src/Wallabag/CoreBundle/Entity/Config.php
+++ b/src/Wallabag/CoreBundle/Entity/Config.php
@@ -98,6 +98,13 @@ class Config
98 private $actionMarkAsRead; 98 private $actionMarkAsRead;
99 99
100 /** 100 /**
101 * @var int
102 *
103 * @ORM\Column(name="list_mode", type="integer", nullable=true)
104 */
105 private $listMode;
106
107 /**
101 * @ORM\OneToOne(targetEntity="Wallabag\UserBundle\Entity\User", inversedBy="config") 108 * @ORM\OneToOne(targetEntity="Wallabag\UserBundle\Entity\User", inversedBy="config")
102 */ 109 */
103 private $user; 110 private $user;
@@ -340,6 +347,26 @@ class Config
340 } 347 }
341 348
342 /** 349 /**
350 * @return int
351 */
352 public function getListMode()
353 {
354 return $this->listMode;
355 }
356
357 /**
358 * @param int $listMode
359 *
360 * @return Config
361 */
362 public function setListMode($listMode)
363 {
364 $this->listMode = $listMode;
365
366 return $this;
367 }
368
369 /**
343 * @param TaggingRule $rule 370 * @param TaggingRule $rule
344 * 371 *
345 * @return Config 372 * @return Config
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig
index a13fe903..a4a56e46 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig
@@ -13,9 +13,11 @@
13 13
14{% block content %} 14{% block content %}
15 15
16 {% set listMode = app.user.config.listMode %}
16 <div class="results"> 17 <div class="results">
17 <div class="nb-results">{{ 'entry.list.number_on_the_page'|transchoice(entries.count) }}</div> 18 <div class="nb-results">{{ 'entry.list.number_on_the_page'|transchoice(entries.count) }}</div>
18 <div class="pagination"> 19 <div class="pagination">
20 <a href="{{ path('switch_view_mode') }}"><i class="listMode-btn material-icons md-36">{% if listMode == 0 %}list{% else %}view_module{% endif %}</i></a>
19 <i class="btn-clickable download-btn material-icons md-36">file_download</i> 21 <i class="btn-clickable download-btn material-icons md-36">file_download</i>
20 <i class="btn-clickable filter-btn material-icons md-36">filter_list</i> 22 <i class="btn-clickable filter-btn material-icons md-36">filter_list</i>
21 {% if entries.getNbPages > 1 %} 23 {% if entries.getNbPages > 1 %}
@@ -25,7 +27,7 @@
25 </div> 27 </div>
26 28
27 {% for entry in entries %} 29 {% for entry in entries %}
28 <div id="entry-{{ entry.id|e }}" class="entry"> 30 <div id="entry-{{ entry.id|e }}" class="{% if listMode == 0 %}entry{% else %}listmode entry{% endif %}">
29 <h2><a href="{{ path('view', { 'id': entry.id }) }}" title="{{ entry.title|raw }}">{{ entry.title|raw }}</a></h2> 31 <h2><a href="{{ path('view', { 'id': entry.id }) }}" title="{{ entry.title|raw }}">{{ entry.title|raw }}</a></h2>
30 32
31 {% set readingTime = entry.readingTime / app.user.config.readingSpeed %} 33 {% set readingTime = entry.readingTime / app.user.config.readingSpeed %}
@@ -50,13 +52,13 @@
50 <li><a title="{{ 'entry.list.delete'|trans }}" class="tool delete icon-trash icon" href="{{ path('delete_entry', { 'id': entry.id }) }}"><span>{{ 'entry.list.delete'|trans }}</span></a></li> 52 <li><a title="{{ 'entry.list.delete'|trans }}" class="tool delete icon-trash icon" href="{{ path('delete_entry', { 'id': entry.id }) }}"><span>{{ 'entry.list.delete'|trans }}</span></a></li>
51 <li><a href="{{ entry.url|e }}" target="_blank" title="{{ 'entry.list.original_article'|trans }} : {{ entry.title|e }}" class="tool link icon-link icon"><span>{{ entry.domainName|removeWww }}</span></a></li> 53 <li><a href="{{ entry.url|e }}" target="_blank" title="{{ 'entry.list.original_article'|trans }} : {{ entry.title|e }}" class="tool link icon-link icon"><span>{{ entry.domainName|removeWww }}</span></a></li>
52 </ul> 54 </ul>
53 {% if entry.previewPicture is null %} 55 {% if (entry.previewPicture is null or listMode == 1) %}
54 <ul class="card-entry-tags"> 56 <ul class="card-entry-tags">
55 {% for tag in entry.tags %} 57 {% for tag in entry.tags %}
56 <li><a href="{{ path('tag_entries', {'slug': tag.slug}) }}">{{ tag.label }}</a></li> 58 <li><a href="{{ path('tag_entries', {'slug': tag.slug}) }}">{{ tag.label }}</a></li>
57 {% endfor %} 59 {% endfor %}
58 </ul> 60 </ul>
59 <p>{{ entry.content|striptags|slice(0, 300) }}&hellip;</p> 61 <p {% if listMode == 1 %}class="hide"{% endif %}>{{ entry.content|striptags|slice(0, 300) }}&hellip;</p>
60 {% else %} 62 {% else %}
61 <ul class="card-entry-labels"> 63 <ul class="card-entry-labels">
62 {% for tag in entry.tags | slice(0, 3) %} 64 {% for tag in entry.tags | slice(0, 3) %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/_card_list.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/_card_list.html.twig
new file mode 100644
index 00000000..bb9b64ce
--- /dev/null
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/_card_list.html.twig
@@ -0,0 +1,18 @@
1<div class="card">
2 <div class="card-stacked">
3 <div class="card-content">
4 <span class="card-title dot-ellipsis dot-resize-update">
5 <a href="{{ path('view', { 'id': entry.id }) }}" title="{{ entry.title | raw | striptags }}">
6 {{ entry.title| striptags | truncate(120, true, '…') | raw }}
7 </a>
8 </span>
9 <ul class="tools-list right">
10 <li>
11 <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>
12 <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>
13 <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>
14 </li>
15 </ul>
16 </div>
17 </div>
18</div>
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig
index 00e8bf63..5fca53ae 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig
@@ -12,9 +12,11 @@
12{% endblock %} 12{% endblock %}
13 13
14{% block content %} 14{% block content %}
15 {% set listMode = app.user.config.listMode %}
15 <div class="results clearfix"> 16 <div class="results clearfix">
16 <div class="nb-results left"> 17 <div class="nb-results left">
17 {{ 'entry.list.number_on_the_page'|transchoice(entries.count) }} 18 {{ 'entry.list.number_on_the_page'|transchoice(entries.count) }}
19 <a href="{{ path('switch_view_mode') }}"><i class="material-icons">{% if listMode == 0 %}view_list{% else %}view_module{% endif %}</i></a>
18 </div> 20 </div>
19 {% if entries.getNbPages > 1 %} 21 {% if entries.getNbPages > 1 %}
20 {{ pagerfanta(entries, 'twitter_bootstrap_translated', {'proximity': 1}) }} 22 {{ pagerfanta(entries, 'twitter_bootstrap_translated', {'proximity': 1}) }}
@@ -24,8 +26,10 @@
24 <br /> 26 <br />
25 <ul class="row data"> 27 <ul class="row data">
26 {% for entry in entries %} 28 {% for entry in entries %}
27 <li id="entry-{{ entry.id|e }}" class="col l3 m6 s12"> 29 <li id="entry-{{ entry.id|e }}" class="col {% if listMode == 0 %}l3 m6{% endif %} s12">
28 {% if entry.previewPicture is null %} 30 {% if listMode == 1 %}
31 {% include "@WallabagCore/themes/material/Entry/_card_list.html.twig" with {'entry': entry} only %}
32 {% elseif entry.previewPicture is null %}
29 {% include "@WallabagCore/themes/material/Entry/_card_no_preview.html.twig" with {'entry': entry} only %} 33 {% include "@WallabagCore/themes/material/Entry/_card_no_preview.html.twig" with {'entry': entry} only %}
30 {% elseif not entry.previewPicture is null and entry.mimetype starts with 'image/' %} 34 {% elseif not entry.previewPicture is null and entry.mimetype starts with 'image/' %}
31 {% include "@WallabagCore/themes/material/Entry/_card_full_image.html.twig" with {'entry': entry} only %} 35 {% include "@WallabagCore/themes/material/Entry/_card_full_image.html.twig" with {'entry': entry} only %}