article view, fav list, archive list

This commit is contained in:
Nicolas Lœuillet 2015-01-22 21:11:22 +01:00
parent 9d50517cea
commit bd9f08157c
7 changed files with 232 additions and 29 deletions

View file

@ -29,6 +29,21 @@ framework:
twig: twig:
debug: "%kernel.debug%" debug: "%kernel.debug%"
strict_variables: "%kernel.debug%" strict_variables: "%kernel.debug%"
globals:
share_twitter: %share_twitter%
share_mail: %share_mail%
share_shaarli: %share_shaarli%
shaarli_url: %shaarli_url%
share_diaspora: %share_diaspora%
diaspora_url: %diaspora_url%
flattr: %flattr%
flattrable: 1
flattred: 2
carrot: %carrot%
show_printlink: %show_printlink%
export_epub: %export_epub%
export_mobi: %export_mobi%
export_pdf: %export_pdf%
# Assetic Configuration # Assetic Configuration
assetic: assetic:

View file

@ -11,7 +11,7 @@ class EntryController extends Controller
/** /**
* @Route("/unread", name="unread") * @Route("/unread", name="unread")
*/ */
public function unreadAction() public function showUnreadAction()
{ {
$repository = $this->getDoctrine()->getRepository('WallabagBundle:Entries'); $repository = $this->getDoctrine()->getRepository('WallabagBundle:Entries');
$entries = $repository->findUnreadByUser(1); $entries = $repository->findUnreadByUser(1);
@ -22,4 +22,49 @@ class EntryController extends Controller
); );
} }
/**
* @Route("/archive", name="archive")
*/
public function showArchiveAction()
{
$repository = $this->getDoctrine()->getRepository('WallabagBundle:Entries');
$entries = $repository->findArchiveByUser(1);
return $this->render(
'WallabagBundle:Entry:entries.html.twig',
array('entries' => $entries)
);
}
/**
* @Route("/starred", name="starred")
*/
public function showStarredAction()
{
$repository = $this->getDoctrine()->getRepository('WallabagBundle:Entries');
$entries = $repository->findStarredByUser(1);
return $this->render(
'WallabagBundle:Entry:entries.html.twig',
array('entries' => $entries)
);
}
/**
* @Route("/view/{id}", requirements={"id" = "\d+"}, name="view")
*/
public function viewAction($id)
{
$repository = $this->getDoctrine()->getRepository('WallabagBundle:Entries');
$entry = $repository->find($id);
return $this->render(
'WallabagBundle:Entry:entry.html.twig',
array('entry' => $entry)
);
}
} }

View file

@ -13,14 +13,6 @@ use Doctrine\ORM\EntityRepository;
*/ */
class EntriesRepository extends EntityRepository class EntriesRepository extends EntityRepository
{ {
/* public function findUnreadByUser($userId)
{
return $this->createQueryBuilder('e')
->where('e.is_read = 0')
->andWhere('e.user_id = :userId')
->setParameter('userId', $userId)
->getQuery();
}*/
public function findUnreadByUser($userId) public function findUnreadByUser($userId)
{ {
$qb = $this->createQueryBuilder('e') $qb = $this->createQueryBuilder('e')
@ -32,4 +24,28 @@ class EntriesRepository extends EntityRepository
return $qb; return $qb;
} }
public function findArchiveByUser($userId)
{
$qb = $this->createQueryBuilder('e')
->select('e')
->where('e.isRead = 1')
->andWhere('e.userId =:userId')->setParameter('userId', $userId)
->getQuery()
->getResult(Query::HYDRATE_ARRAY);
return $qb;
}
public function findStarredByUser($userId)
{
$qb = $this->createQueryBuilder('e')
->select('e')
->where('e.isFav = 1')
->andWhere('e.userId =:userId')->setParameter('userId', $userId)
->getQuery()
->getResult(Query::HYDRATE_ARRAY);
return $qb;
}
} }

View file

@ -2,12 +2,18 @@
{% block title "Unread" %} {% block title "Unread" %}
{% block content_header '' %} {% block menu %}
{% include "WallabagBundle::_menu.html.twig" %}
{% endblock %}
{% block content %} {% block content %}
{% if entries is empty %}
<div class="messages warning"><p>{% trans %}No articles found.{% endtrans %}</p></div>
{% else %}
{% for entry in entries %} {% for entry in entries %}
<div id="entry-{{ entry.id|e }}" class="entrie"> <div id="entry-{{ entry.id|e }}" class="entrie">
<h2><a href="index.php?view=view&amp;id={{ entry.id|e }}">{{ entry.title|raw }}</a></h2> <h2><a href="{{ path('view', { 'id': entry.id }) }}">{{ entry.title|raw }}</a></h2>
{% if entry.content| readingTime > 0 %} {% if entry.content| readingTime > 0 %}
<div class="estimatedTime"><span class="tool reading-time">{% trans %}estimated reading time :{% endtrans %} {{ entry.content| readingTime }} min</span></div> <div class="estimatedTime"><span class="tool reading-time">{% trans %}estimated reading time :{% endtrans %} {{ entry.content| readingTime }} min</span></div>
{% else %} {% else %}
@ -23,4 +29,5 @@
<p>{{ entry.content|striptags|slice(0, 300) }}...</p> <p>{{ entry.content|striptags|slice(0, 300) }}...</p>
</div> </div>
{% endfor %} {% endfor %}
{% endif %}
{% endblock %} {% endblock %}

View file

@ -0,0 +1,104 @@
{% extends "WallabagBundle::layout.html.twig" %}
{% block title %}{{ entry.title|raw }} ({{ entry.url | e | domainName }}){% endblock %}
{% block menu %}
{% include "WallabagBundle::_menu.html.twig" %}
{% endblock %}
{% block content %}
<div id="article_toolbar">
<ul class="links">
<li class="topPosF"><a href="#top" title="{% trans %}Back to top{% endtrans %}" class="tool top icon icon-arrow-up-thick"><span>{% trans %}Back to top{% endtrans %}</span></a></li>
<li><a href="{{ entry.url|e }}" target="_blank" title="{% trans %}original{% endtrans %} : {{ entry.title|e }}" class="tool link icon icon-link"><span>{{ entry.url | e | domainName }}</span></a></li>
<li><a title="{% trans %}Mark as read{% endtrans %}" class="tool icon icon-check {% if entry.isRead == 0 %}archive-off{% else %}archive{% endif %}" href="javascript: void(null);" id="markAsRead"><span>{% trans %}Toggle mark as read{% endtrans %}</span></a></li>
<li><a title="{% trans %}Favorite{% endtrans %}" class="tool icon icon-star {% if entry.isFav == 0 %}fav-off{% else %}fav{% endif %}" href="javascript: void(null);" id="setFav"><span>{% trans %}Toggle favorite{% endtrans %}</span></a></li>
<li><a title="{% trans %}Delete{% endtrans %}" class="tool delete icon icon-trash" href="./?action=delete&amp;id={{ entry.id|e }}"><span>{% trans %}Delete{% endtrans %}</span></a></li>
{% if share_twitter %}<li><a href="https://twitter.com/home?status={{entry.title|url_encode}}%20{{ entry.url|url_encode }}%20via%20@wallabagapp" target="_blank" class="tool twitter icon icon-twitter" title="{% trans %}Tweet{% endtrans %}"><span>{% trans %}Tweet{% endtrans %}</span></a></li>{% endif %}
{% if share_mail %}<li><a href="mailto:?subject={{ entry.title|url_encode }}&amp;body={{ entry.url|url_encode }}%20via%20@wallabagapp" class="tool email icon icon-mail" title="{% trans %}Email{% endtrans %}"><span>{% trans %}Email{% endtrans %}</span></a></li>{% endif %}
{% if share_shaarli %}<li><a href="{{ shaarli_url }}/index.php?post={{ entry.url|url_encode }}&amp;title={{ entry.title|url_encode }}" target="_blank" class="tool shaarli" title="{% trans %}shaarli{% endtrans %}"><span>{% trans %}shaarli{% endtrans %}</span></a></li>{% endif %}
{% if share_diaspora %}<li><a href="{{ diaspora_url }}/bookmarklet?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}&notes=&v=1&noui=1&jump=doclose" target="_blank" class="tool diaspora icon-image icon-image--diaspora" title="{% trans %}diaspora{% endtrans %}"><span>{% trans %}diaspora{% endtrans %}</span></a></li>{% endif %}
{# {% if flattr %}{% if flattr.status == flattrable %}<li><a href="http://flattr.com/submit/auto?url={{ entry.url }}" class="tool flattr icon icon-flattr" target="_blank" title="{% trans %}flattr{% endtrans %}"><span>{% trans %}flattr{% endtrans %}</span></a></li>{% elseif flattr.status == flattred %}<li><a href="{{ flattr.flattrItemURL }}" class="tool flattr icon icon-flattr" target="_blank" title="{% trans %}flattr{% endtrans %}><span>{% trans %}flattr{% endtrans %}</span> ({{ flattr.numFlattrs }})</a></li>{% endif %}{% endif %} #}
{% if carrot %}<li><a href="https://secure.carrot.org/GiveAndGetBack.do?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}" class="tool carrot icon-image icon-image--carrot" target="_blank" title="{% trans %}carrot{% endtrans %}"><span>Carrot</span></a></li>{% endif %}
{% if show_printlink %}<li><a title="{% trans %}Print{% endtrans %}" class="tool icon icon-print" href="javascript: window.print();"><span>{% trans %}Print{% endtrans %}</span></a></li>{% endif %}
{% if export_epub %}<li><a href="./?epub&amp;method=id&amp;value={{ entry.id|e }}" title="Generate ePub file">EPUB</a></li>{% endif %}
{% if export_mobi %}<li><a href="./?mobi&amp;method=id&amp;value={{ entry.id|e }}" title="Generate Mobi file">MOBI</a></li>{% endif %}
{% if export_pdf %}<li><a href="./?pdf&amp;method=id&amp;value={{ entry.id|e }}" title="Generate PDF file">PDF</a></li>{% endif %}
<li><a href="mailto:hello@wallabag.org?subject=Wrong%20display%20in%20wallabag&amp;body={{ entry.url|url_encode }}" title="{% trans %}Does this article appear wrong?{% endtrans %}" class="tool bad-display icon icon-delete"><span>{% trans %}Does this article appear wrong?{% endtrans %}</span></a></li>
</ul>
</div>
<div id="article">
<header class="mbm">
<h1>{{ entry.title|raw }}</h1>
</header>
<aside class="tags">
tags: {# {% for tag in tags %}<a href="./?view=tag&amp;id={{ tag.id }}">{{ tag.value }}</a> {% endfor %}<a href="./?view=edit-tags&amp;id={{ entry.id|e }}" title="{% trans %}Edit tags{% endtrans %}">✎</a> #}
</aside>
<article>
{{ entry.content | raw }}
</article>
</div>
<script src="{{ asset('themes/_global/js/restoreScroll.js')}}"></script>
<script type="text/javascript">
$(document).ready(function() {
// toggle read property of current article
$('#markAsRead').click(function(){
$("body").css("cursor", "wait");
$.ajax( { url: './?action=toggle_archive&id={{ entry.id|e }}' }).done(
function( data ) {
if ( data == '1' ) {
if ( $('#markAsRead').hasClass("archive-off") ) {
$('#markAsRead').removeClass("archive-off");
$('#markAsRead').addClass("archive");
}
else {
$('#markAsRead').removeClass("archive");
$('#markAsRead').addClass("archive-off");
}
}
else {
alert('Error! Pls check if you are logged in.');
}
});
$("body").css("cursor", "auto");
});
// toggle favorite property of current article
$('#setFav').click(function(){
$("body").css("cursor", "wait");
$.ajax( { url: './?action=toggle_fav&id={{ entry.id|e }}' }).done(
function( data ) {
if ( data == '1' ) {
if ( $('#setFav').hasClass("fav-off") ) {
$('#setFav').removeClass("fav-off");
$('#setFav').addClass("fav");
}
else {
$('#setFav').removeClass("fav");
$('#setFav').addClass("fav-off");
}
}
else {
alert('Error! Pls check if you are logged in.');
}
});
$("body").css("cursor", "auto");
});
$(window).scroll(function(e){
var scrollTop = $(window).scrollTop();
var docHeight = $(document).height();
var scrollPercent = (scrollTop) / (docHeight);
var scrollPercentRounded = Math.round(scrollPercent*100)/100;
savePercent({{ entry.id|e }}, scrollPercentRounded);
});
retrievePercent({{ entry.id|e }});
$(window).resize(function(){
retrievePercent({{ entry.id|e }});
});
});
</script>
{% endblock %}

View file

@ -0,0 +1,17 @@
<button id="menu" class="icon icon-menu desktopHide"><span>Menu</span></button>
<ul id="links" class="links">
<li><a href="{{ path('unread') }}">{% trans %}unread{% endtrans %}</a></li>
<li><a href="{{ path('starred') }}">{% trans %}favorites{% endtrans %}</a></li>
<li><a href="{{ path('archive') }}"}>{% trans %}archive{% endtrans %}</a></li>
<li><a href="./?view=tags">{% trans %}tags{% endtrans %}</a></li>
<li style="position: relative;"><a href="javascript: void(null);" id="bagit">{% trans %}save a link{% endtrans %}</a>
</li>
<li style="position: relative;"><a href="javascript: void(null);" id="search">{% trans %}search{% endtrans %}</a>
</li>
<li><a href="./?view=config">{% trans %}config{% endtrans %}</a></li>
<li><a href="./?view=about">{% trans %}about{% endtrans %}</a></li>
<li><a class="icon icon-power" href="./?logout" title="{% trans %}logout{% endtrans %}">{% trans %}logout{% endtrans %}</a></li>
</ul>

View file

@ -1,6 +1,5 @@
<header class="w600p center mbm"> <header class="w600p center mbm">
<h1> <h1>
{% block logo %}<img width="100" height="100" src="{{ asset('themes/baggy/img/logo-other_themes.png') }}" alt="wallabag logo" />{% endblock %} {% block logo %}<img width="100" height="100" src="{{ asset('themes/baggy/img/logo-w.png') }}" alt="wallabag logo" />{% endblock %}
</h1> </h1>
</header> </header>