manage assets through npm

first draft

remote assetic totally

work

nearly there

use at least nodejs > 0.12

use proper version of grunt

bump nodejs version for travis

update npm

workaround for materialize

install node 5.0

add grunt-cli

baggy theme & cache node modules

cache bower & npm

make travis build assets on php7 only

exclude installing node & npm if not needed & use bash

clean & try to make icomoon work on baggy

ready

config for travis

rebase

make travis work

more travis work

impove travis & update deps

add missing pixrem deps

add module through oddly lost

ui updates

install latest nodejs

add install_dev.sh, link local binaries for npm/bower/grunt

ui improvements (mostly baggy)

fix travis build

no need to install on travis

Add unread filter to entries pages

Add the ability to filter for unread pages in the filters menu.

Add unread filter test to EntryControllerTest

Add a new test to the EntryControllerTest collection which checks that
only entries which have not been archived (and are treated as "unread")
are retrieved.

Improve English translation

Update FAQ

-Fix grammar
-Add notes about MTA, firewall, and SELinux

Update installation instructions

-Fix grammar
-Add SELinux section

add screenshots of android docu in English

Fix the deletion of Tags/Entries relation when delete an entry
Fix #2121

Move fixtures to the right place

Display a message when saving an entry failed

When saving an entry fail because of database error we previously just returned `false`.
Now we got an error in the log and the displayed notice to the user is updated too.

Change ManyToMany between entry & tag

Following https://gist.github.com/Ocramius/3121916

Be sure to remove the related entity when removing an entity.

Let say you have Entry -> EntryTag -> Tag.
If you remove the entry:

 - before that commit, the EntryTag will stay (at least using SQLite).
 - with that commit, the related entity is removed

Prepare wallabag 2.0.5

enforce older materialize version
This commit is contained in:
Thomas Citharel
2016-03-08 17:02:34 +01:00
parent 9f95b14dec
commit 5ecdfcd041
160 changed files with 2743 additions and 17580 deletions

View File

@ -41,10 +41,6 @@
{% block css %}
{% endblock %}
{% block scripts %}
<script src="{{ asset('bundles/wallabagcore/themes/_global/js/jquery-2.0.3.min.js') }}"></script>
<script src="{{ asset('bundles/wallabagcore/themes/_global/js/jquery.cookie.js') }}"></script>
<script src="{{ asset('bundles/wallabagcore/themes/_global/js/bookmarklet.js') }}"></script>
<script src="{{ asset('bundles/wallabagcore/themes/_global/js/annotator.min.js') }}"></script>
{% endblock %}
<title>wallabag - {% block title %}{% endblock %}</title>

View File

@ -204,6 +204,90 @@
{{ form_rest(form.new_tagging_rule) }}
</form>
<div class="row">
<div class="input-field col s12">
<h4>{{ 'config.form_rules.faq.title'|trans }}</h4>
<h5>{{ 'config.form_rules.faq.tagging_rules_definition_title'|trans }}</h5>
<p class="help">{{ 'config.form_rules.faq.tagging_rules_definition_description'|trans|raw }}</p>
<h5>{{ 'config.form_rules.faq.how_to_use_them_title'|trans }}</h5>
<p class="help">{{ 'config.form_rules.faq.how_to_use_them_description'|trans|raw }}</p>
<h5>{{ 'config.form_rules.faq.variables_available_title'|trans }}</h5>
<p class="help">
{{ 'config.form_rules.faq.variables_available_description'|trans }}
<table class="bordered">
<thead>
<tr>
<th>{{ 'config.form_rules.faq.variable_description.label'|trans }}</th>
<th>{{ 'config.form_rules.faq.meaning'|trans }}</th>
<th>{{ 'config.form_rules.faq.operator_description.label'|trans }}</th>
<th>{{ 'config.form_rules.faq.meaning'|trans }}</th>
</tr>
</thead>
<tbody>
<tr>
<td>title</td>
<td>{{ 'config.form_rules.faq.variable_description.title'|trans }}</td>
<td>&lt;=</td>
<td>{{ 'config.form_rules.faq.operator_description.less_than'|trans }}</td>
</tr>
<tr>
<td>url</td>
<td>{{ 'config.form_rules.faq.variable_description.url'|trans }}</td>
<td>&lt;</td>
<td>{{ 'config.form_rules.faq.operator_description.strictly_less_than'|trans }}</td>
</tr>
<tr>
<td>isArchived</td>
<td>{{ 'config.form_rules.faq.variable_description.isArchived'|trans }}</td>
<td>=&gt;</td>
<td>{{ 'config.form_rules.faq.operator_description.greater_than'|trans }}</td>
</tr>
<tr>
<td>isStarred</td>
<td>{{ 'config.form_rules.faq.variable_description.isStarred'|trans }}</td>
<td>&gt;</td>
<td>{{ 'config.form_rules.faq.operator_description.strictly_greater_than'|trans }}</td>
</tr>
<tr>
<td>content</td>
<td>{{ 'config.form_rules.faq.variable_description.content'|trans }}</td>
<td>=</td>
<td>{{ 'config.form_rules.faq.operator_description.equal_to'|trans }}</td>
</tr>
<tr>
<td>language</td>
<td>{{ 'config.form_rules.faq.variable_description.language'|trans }}</td>
<td>!=</td>
<td>{{ 'config.form_rules.faq.operator_description.not_equal_to'|trans }}</td>
</tr>
<tr>
<td>mimetype</td>
<td>{{ 'config.form_rules.faq.variable_description.mimetype'|trans }}</td>
<td>OR</td>
<td>{{ 'config.form_rules.faq.operator_description.or'|trans }}</td>
</tr>
<tr>
<td>readingTime</td>
<td>{{ 'config.form_rules.faq.variable_description.readingTime'|trans }}</td>
<td>AND</td>
<td>{{ 'config.form_rules.faq.operator_description.and'|trans }}</td>
</tr>
<tr>
<td>domainName</td>
<td>{{ 'config.form_rules.faq.variable_description.domainName'|trans }}</td>
<td>matches</td>
<td>{{ 'config.form_rules.faq.operator_description.matches'|trans|raw }}</td>
</tr>
</tbody>
</table>
</p>
</div>
</div>
<div class="row">
<div class="input-field col s12">

View File

@ -34,7 +34,27 @@
</div>
{% endfor %}
<aside id="filter-form" class="">
<!-- Export -->
<aside id="download-form">
{% set currentRoute = app.request.attributes.get('_route') %}
{% if currentRoute == 'homepage' %}
{% set currentRoute = 'unread' %}
{% endif %}
<h2>{{ 'entry.list.export_title'|trans }}</h2>
<a href="javascript: void(null);" id="download-form-close" class="close-button--popup close-button">&times;</a>
<ul>
{% if craue_setting('export_epub') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'epub' }) }}">EPUB</a></li>{% endif %}
{% if craue_setting('export_mobi') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'mobi' }) }}">MOBI</a></li>{% endif %}
{% if craue_setting('export_pdf') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'pdf' }) }}">PDF</a></li>{% endif %}
{% if craue_setting('export_csv') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'json' }) }}">JSON</a></li>{% endif %}
{% if craue_setting('export_json') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'csv' }) }}">CSV</a></li>{% endif %}
{% if craue_setting('export_txt') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'txt' }) }}">TXT</a></li>{% endif %}
{% if craue_setting('export_xml') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'xml' }) }}">XML</a></li>{% endif %}
</ul>
</aside>
<!-- Filter -->
<aside id="filter-form">
<form method="get" action="{{ path('all') }}">
<h2>{{ 'entry.filters.title'|trans }}</h2>
<a href="javascript: void(null);" id="filter-form-close" class="close-button--popup close-button">&times;</a>
@ -53,6 +73,11 @@
{{ form_label(form.isStarred) }}
</div>
<div class="input-field">
{{ form_widget(form.isUnread) }}
{{ form_label(form.isUnread) }}
</div>
<div class="input-field">
{{ form_widget(form.previewPicture) }}
{{ form_label(form.previewPicture) }}

View File

@ -5,7 +5,7 @@
{% block content %}
<div id="article">
<header class="mbm">
<h1>{{ entry.title|raw }} <a href="{{ path('edit', { 'id': entry.id }) }}" title="{{ 'entry.view.edit_title'|trans }}">✎</a></h1>
<h1>{{ entry.title|raw }} <a href="{{ path('edit', { 'id': entry.id }) }}" class="nostyle" title="{{ 'entry.view.edit_title'|trans }}">✎</a></h1>
</header>
<div id="article_toolbar">
@ -30,10 +30,10 @@
</ul>
</div>
{% set nbAnnotations = entry.annotations | length %}
<span class="tool link mdi-communication-comment"> {{ 'entry.view.annotations_on_the_entry'|transchoice(entry.annotations | length) }}</span>
<span class="tool link"><i class="material-icons link">comment</i> {{ 'entry.view.annotations_on_the_entry'|transchoice(entry.annotations | length) }}</span>
<aside class="tags">
{% for tag in entry.tags %}
<span class="mdi-action-label-outline">{{ tag.label }}</span> <a href="{{ path('remove_tag', { 'entry': entry.id, 'tag': tag.id }) }}"><i>✘</i></a>
<span class="label-outline"><i class="material-icons">label_outline</i> {{ tag.label }}</span> <a href="{{ path('remove_tag', { 'entry': entry.id, 'tag': tag.id }) }}"class="nostyle"><i>✘</i></a>
{% endfor %}
<div class="input-field nav-panel-add-tag" style="display: none">
{{ render(controller( "WallabagCoreBundle:Tag:addTagForm", { 'id': entry.id } )) }}
@ -46,87 +46,16 @@
{{ entry.content | raw }}
</article>
</div>
<script src="{{ asset('bundles/wallabagcore/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: '{{ path('archive_entry', { 'id': entry.id }) }}' }).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: '{{ path('star_entry', { 'id': entry.id }) }}' }).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 }}, scrollPercentRounded);
});
retrievePercent({{ entry.id }});
$(window).resize(function(){
retrievePercent({{ entry.id }});
});
});
var app = new annotator.App();
app.include(annotator.ui.main, {
element: document.querySelector('article')
});
app.include(annotator.storage.http, {
prefix: '',
urls: {
create: '{{ path('annotations_post_annotation', { 'entry': entry.id }) }}',
update: '{{ path('annotations_put_annotation', { 'annotation': 'idAnnotation' }) }}',
destroy: '{{ path('annotations_delete_annotation', { 'annotation': 'idAnnotation' }) }}',
search: '{{ path('annotations_get_annotations', { 'entry': entry.id }) }}'
}
});
app
.start()
.then(function () {
app.annotations.load({entry: {{ entry.id }}});
});
<script id="annotationroutes" type="application/json">
{
"prefix": "",
"urls": {
"create": "{{ path('annotations_post_annotation', { 'entry': entry.id }) }}",
"update": "{{ path('annotations_put_annotation', { 'annotation': 'idAnnotation' }) }}",
"destroy": "{{ path('annotations_delete_annotation', { 'annotation': 'idAnnotation' }) }}",
"search": "{{ path('annotations_get_annotations', { 'entry': entry.id }) }}"
},
"entryId": "{{ entry.id }}"
}
</script>
{% endblock %}

View File

@ -2,7 +2,8 @@
<div class="results">
<div class="nb-results">{{ 'entry.list.number_on_the_page'|transchoice(entries.count) }}</div>
<div class="pagination">
<a href="#" id="filter">{{ 'entry.filters.title'|trans }}</a>
<i class="btn-clickable download-btn material-icons md-36">file_download</i>
<i class="btn-clickable filter-btn material-icons md-36">filter_list</i>
{% if entries.getNbPages > 1 %}
{{ pagerfanta(entries, 'twitter_bootstrap_translated', {'proximity': 1}) }}
{% endif %}

View File

@ -37,7 +37,6 @@
<p>{{ 'about.helping.description'|trans }}</p>
<dl>
<dt>{{ 'about.helping.description'|trans }}</dt>
<dd>{{ 'about.helping.by_contributing_2'|trans }} <a href="https://github.com/wallabag/wallabag/issues/1254">{{ 'about.helping.by_contributing'|trans }}</a></dd>
<dd><a href="{{ paypal_url }}">{{ 'about.helping.by_paypal'|trans }}</a></dd>
</dl>

View File

@ -2,29 +2,19 @@
{% block css %}
{{ parent() }}
<link rel="stylesheet" href="{{ asset('bundles/wallabagcore/themes/baggy/css/ratatouille.css') }}" media="all">
<link rel="stylesheet" href="{{ asset('bundles/wallabagcore/themes/baggy/css/font.css') }}" media="all">
<link rel="stylesheet" href="{{ asset('bundles/wallabagcore/themes/baggy/css/main.css') }}" media="all">
<link rel="stylesheet" href="{{ asset('bundles/wallabagcore/themes/baggy/css/messages.css') }}" media="all">
<link rel="stylesheet" href="{{ asset('bundles/wallabagcore/themes/baggy/css/print.css') }}" media="print">
<link rel="stylesheet" href="{{ asset('bundles/wallabagcore/themes/baggy/css/style.min.css') }}" media="screen,projection,print"/>
{% endblock %}
{% block scripts %}
{{ parent() }}
<script src="{{ asset('bundles/wallabagcore/themes/baggy/js/init.js') }}"></script>
<script src="{{ asset('bundles/wallabagcore/themes/baggy/js/closeMessage.js') }}"></script>
<script src="{{ asset('bundles/wallabagcore/themes/baggy/js/autoClose.js') }}"></script>
<script src="{{ asset('bundles/wallabagcore/themes/baggy/js/saveLink.js') }}"></script>
<script src="{{ asset('bundles/wallabagcore/themes/baggy/js/popupForm.js') }}"></script>
<script src="{{ asset('bundles/wallabagcore/themes/baggy/js/baggy.min.js') }}"></script>
{% endblock %}
{% block header %}
<header class="w600p center mbm">
<h1 class="logo">
{% block logo %}
<img width="100" height="100" src="{{ asset('bundles/wallabagcore/themes/baggy/img/logo-w.png') }}" alt="wallabag logo" />
<img width="100" height="100" src="{{ asset('bundles/wallabagcore/themes/_global/img/logo-w.png') }}" alt="wallabag logo" />
{% endblock %}
</h1>
</header>

View File

@ -206,7 +206,7 @@
{{ 'config.form_rules.then_tag_as_label'|trans }}
« {{ tagging_rule.tags|join(', ') }} »
<a href="{{ path('delete_tagging_rule', {id: tagging_rule.id}) }}" title="{{ 'config.form_rules.delete_rule_label'|trans }}">
<i class="tool grey-text delete mdi-action-delete"></i>
<i class="tool grey-text delete material-icons">delete</i>
</a>
</li>
{% endfor %}

View File

@ -32,7 +32,7 @@
<div class="card-content">
{% if not entry.previewPicture is null %}
<i class="card-title grey-text text-darken-4 activator mdi-navigation-more-horiz right"></i>
<i class="card-title grey-text text-darken-4 activator material-icons right">more_vert</i>
{% endif %}
<span class="card-title"><a href="{{ path('view', { 'id': entry.id }) }}" title="{{ entry.title|raw }}">{{ entry.title|striptags|slice(0, 42)|raw }}</a></span>
@ -56,7 +56,7 @@
{% if not entry.previewPicture is null %}
<div class="card-reveal">
<i class="card-title grey-text text-darken-4 mdi-card-close right"></i>
<i class="card-title grey-text text-darken-4 material-icons right">clear</i>
<span class="card-title"><a href="{{ path('view', { 'id': entry.id }) }}">{{ entry.title|raw }}</a></span>
<div class="estimatedTime grey-text">
@ -74,11 +74,11 @@
<a href="{{ entry.url|e }}" target="_blank" title="{{ 'entry.list.original_article'|trans }}: {{ entry.title|e }} - {{ entry.domainName|removeWww }}" class="tool original grey-text"><span>{{ entry.domainName|removeWww|truncate(18) }}</span></a>
</bold>
<ul class="tools links right">
<ul class="tools right">
<li>
<a title="{{ 'entry.list.toogle_as_read'|trans }}" class="tool grey-text {% if entry.isArchived == 0 %}mdi-action-done{% else %}mdi-content-redo{% endif %}" href="{{ path('archive_entry', { 'id': entry.id }) }}"></a>
<a title="{{ 'entry.list.toogle_as_star'|trans }}" class="tool grey-text {% if entry.isStarred == 0 %}mdi-action-favorite-outline{% else %}mdi-action-favorite{% endif %}" href="{{ path('star_entry', { 'id': entry.id }) }}"></a>
<a title="{{ 'entry.list.delete'|trans }}" class="tool grey-text delete mdi-action-delete " href="{{ path('delete_entry', { 'id': entry.id }) }}"></a>
<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 %}favorite_border{% else %}favorite{% 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>
@ -126,6 +126,11 @@
{{ form_label(form.isStarred) }}
</div>
<div class="input-field col s6 with-checkbox">
{{ form_widget(form.isUnread) }}
{{ form_label(form.isUnread) }}
</div>
<div class="col s12">
<label>{{ 'entry.filters.preview_picture_help'|trans }}</label>
</div>

View File

@ -13,24 +13,24 @@
<ul>
<li>
<a class="waves-effect" href="{{ path('homepage') }}">
<i class="mdi-action-exit-to-app"></i>
<i class="material-icons">exit_to_app</i>
</a>
</li>
</ul>
<ul class="right">
<li>
<a class="waves-effect" title="{{ 'entry.view.left_menu.set_as_read'|trans }}" href="{{ path('archive_entry', { 'id': entry.id }) }}" id="markAsRead">
<i class="{% if entry.isArchived == 0 %}mdi-action-done{% else %}mdi-content-redo{% endif %} small"></i>
<i class="material-icons small">{% if entry.isArchived == 0 %}done{% else %}redo{% endif %}"</i>
</a>
</li>
<li>
<a class="waves-effect" title="{{ 'entry.view.left_menu.set_as_favorite'|trans }}" href="{{ path('star_entry', { 'id': entry.id }) }}" id="setFav">
<i class="{% if entry.isStarred == 0 %}mdi-action-favorite-outline{% else %}mdi-action-favorite{% endif %} small"></i>
<i class="material-icons small">{% if entry.isStarred == 0 %}favorite_outline{% else %}favorite{% endif %}</i>
</a>
</li>
<li>
<a href="#" data-activates="slide-out" class="button-collapse right">
<i class="mdi-navigation-menu"></i>
<i class="material-icons">navigation_menu</i>
</a>
</li>
</ul>
@ -39,7 +39,7 @@
<ul id="slide-out" class="collapsible side-nav fixed reader-mode" data-collapsible="accordion">
<li class="bold border-bottom hide-on-med-and-down">
<a class="waves-effect collapsible-header" href="{{ path('homepage') }}">
<i class="mdi-action-exit-to-app small"></i>
<i class="material-icons small">exit_to_app</i>
<span>{{ 'entry.view.left_menu.back_to_homepage'|trans }}</span>
</a>
<div class="collapsible-body"></div>
@ -47,7 +47,7 @@
<li class="bold border-bottom hide-on-med-and-down">
<a class="waves-effect collapsible-header" href="{{ entry.url|e }}">
<i class="mdi-content-link small"></i>
<i class="material-icons small">link</i>
<span>{{ 'entry.view.left_menu.view_original_article'|trans }}</span>
</a>
<div class="collapsible-body"></div>
@ -55,7 +55,7 @@
<li class="bold hide-on-med-and-down">
<a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.re_fetch_content'|trans }}" href="{{ path('reload_entry', { 'id': entry.id }) }}" id="reload">
<i class="mdi-action-autorenew small"></i>
<i class="material-icons small">autorenew</i>
<span>{{ 'entry.view.left_menu.re_fetch_content'|trans }}</span>
</a>
<div class="collapsible-body"></div>
@ -63,7 +63,7 @@
<li class="bold hide-on-med-and-down">
<a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.set_as_read'|trans }}" href="{{ path('archive_entry', { 'id': entry.id }) }}" id="markAsRead">
<i class="{% if entry.isArchived == 0 %}mdi-action-done{% else %}mdi-content-redo{% endif %} small"></i>
<i class="material-icons small">{% if entry.isArchived == 0 %}done{% else %}redo{% endif %}</i>
<span>{% if entry.isArchived == 0 %}{{ 'entry.view.left_menu.set_as_read'|trans }}{% else %}{{ 'entry.view.left_menu.set_as_unread'|trans }}{% endif %}</span>
</a>
<div class="collapsible-body"></div>
@ -71,14 +71,14 @@
<li class="bold hide-on-med-and-down">
<a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.set_as_favorite'|trans }}" href="{{ path('star_entry', { 'id': entry.id }) }}" id="setFav">
<i class="{% if entry.isStarred == 0 %}mdi-action-favorite-outline{% else %}mdi-action-favorite{% endif %} small"></i>
<i class="material-icons spall">{% if entry.isStarred == 0 %}favorite_outline{% else %}favorite{% endif %}</i>
<span>{{ 'entry.view.left_menu.set_as_favorite'|trans }}</span>
</a>
<div class="collapsible-body"></div>
</li>
<li class="bold border-bottom hide-on-med-and-down">
<a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.delete'|trans }}" href="{{ path('delete_entry', { 'id': entry.id }) }}">
<i class="mdi-action-delete small"></i>
<i class="material-icons small">delete</i>
<span>{{ 'entry.view.left_menu.delete'|trans }}</span>
</a>
<div class="collapsible-body"></div>
@ -86,7 +86,7 @@
<li class="bold border-bottom hide-on-med-and-down">
<a class="waves-effect collapsible-header" id="nav-btn-add-tag">
<i class="mdi-action-label-outline small"></i>
<i class="material-icons small">label_outline</i>
<span>{{ 'entry.view.left_menu.add_a_tag'|trans }}</span>
</a>
<div class="collapsible-body"></div>
@ -94,7 +94,7 @@
<li class="bold">
<a class="waves-effect collapsible-header">
<i class="mdi-social-share small"></i>
<i class="material-icons small">share</i>
<span>{{ 'entry.view.left_menu.share_content'|trans }}</span>
</a>
<div class="collapsible-body">
@ -129,7 +129,8 @@
{% endif %}
{% if craue_setting('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="{{ 'entry.view.left_menu.share_email_label'|trans }}">
<a href="mailto:?subject={{ entry.title|url_encode }}&amp;body={{ entry.url|url_encode }}%20via%20@wallabagapp" title="{{ 'entry.view.left_menu.share_email_label'|trans }}">
<i class="material-icons">email</i>
<span>{{ 'entry.view.left_menu.share_email_label'|trans }}</span>
</a>
</li>
@ -141,7 +142,7 @@
{% if craue_setting('show_printlink') %}
<li class="bold border-bottom hide-on-med-and-down">
<a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.print'|trans }}" href="javascript: window.print();">
<i class="mdi-action-print small"></i>
<i class="material-icons small">print</i>
<span>{{ 'entry.view.left_menu.print'|trans }}</span>
</a>
<div class="collapsible-body"></div>
@ -151,7 +152,7 @@
<li class="bold">
<a class="waves-effect collapsible-header">
<i class="mdi-file-file-download small"></i>
<i class="material-icons small">file_download</i>
<span>{{ 'entry.view.left_menu.download'|trans }}</span>
</a>
<div class="collapsible-body">
@ -169,7 +170,7 @@
<li class="bold hide-on-large-only">
<a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.delete'|trans }}" href="{{ path('delete_entry', { 'id': entry.id }) }}">
<i class="mdi-action-delete small"></i>
<i class="material-icons small">delete</i>
<span>{{ 'entry.view.left_menu.delete'|trans }}</span>
</a>
<div class="collapsible-body"></div>
@ -177,7 +178,7 @@
<li class="bold">
<a class="waves-effect collapsible-header" href="mailto:hello@wallabag.org?subject=Wrong%20display%20in%20wallabag&amp;body={{ entry.url|url_encode }}" title="{{ 'entry.view.left_menu.problem.description'|trans }}">
<i class="mdi-alert-error small"></i>
<i class="material-icons small">error</i>
<span>{{ 'entry.view.left_menu.problem.label'|trans }}</span>
</a>
<div class="collapsible-body"></div>
@ -193,12 +194,13 @@
<h1>{{ entry.title|raw }} <a href="{{ path('edit', { 'id': entry.id }) }}" title="{{ 'entry.view.edit_title'|trans }}">✎</a></h1>
</header>
<aside>
<a href="{{ entry.url|e }}" target="_blank" title="{{ 'entry.view.original_article'|trans }} : {{ entry.title|e }}" class="tool link mdi-content-link"> <span>{{ entry.domainName|removeWww }}</span></a>
<span class="tool link mdi-communication-comment"> {{ 'entry.view.annotations_on_the_entry'|transchoice(entry.annotations | length) }}</span>
<a href="{{ entry.url|e }}" target="_blank" title="{{ 'entry.view.original_article'|trans }} : {{ entry.title|e }}" class="tool">
<span class="link"><i class="material-icons link">link</i> {{ entry.domainName|removeWww }}</span></a>
<span class="tool link"><i class="material-icons link">comment</i> {{ 'entry.view.annotations_on_the_entry'|transchoice(entry.annotations | length) }}</span>
<div id="list">
{% for tag in entry.tags %}
<div class="chip">
{{ tag.label }} <a href="{{ path('remove_tag', { 'entry': entry.id, 'tag': tag.id }) }}"><i class="mdi-action-delete"></i></a>
{{ tag.label }} <a href="{{ path('remove_tag', { 'entry': entry.id, 'tag': tag.id }) }}"><i class="material-icons">delete</i></a>
</div>
{% endfor %}
</div>
@ -217,27 +219,17 @@
</article>
</div>
<script type="text/javascript">
var app = new annotator.App();
app.include(annotator.ui.main, {
element: document.querySelector('article')
});
app.include(annotator.storage.http, {
prefix: '',
urls: {
create: '{{ path('annotations_post_annotation', { 'entry': entry.id }) }}',
update: '{{ path('annotations_put_annotation', { 'annotation': 'idAnnotation' }) }}',
destroy: '{{ path('annotations_delete_annotation', { 'annotation': 'idAnnotation' }) }}',
search: '{{ path('annotations_get_annotations', { 'entry': entry.id }) }}'
}
});
app
.start()
.then(function () {
app.annotations.load({entry: {{ entry.id }}});
});
</script>
<script id="annotationroutes" type="application/json">
{
"prefix": "",
"urls": {
"create": "{{ path('annotations_post_annotation', { 'entry': entry.id }) }}",
"update": "{{ path('annotations_put_annotation', { 'annotation': 'idAnnotation' }) }}",
"destroy": "{{ path('annotations_delete_annotation', { 'annotation': 'idAnnotation' }) }}",
"search": "{{ path('annotations_get_annotations', { 'entry': entry.id }) }}"
},
"entryId": "{{ entry.id }}"
}</script>
{% endblock %}

View File

@ -2,17 +2,12 @@
{% block css %}
{{ parent() }}
<link rel="stylesheet" href="{{ asset('bundles/wallabagcore/themes/material/css/materialize.min.css') }}" media="screen,projection"/>
<link rel="stylesheet" href="{{ asset('bundles/wallabagcore/themes/material/css/main.css') }}" media="all">
<link rel="stylesheet" href="{{ asset('bundles/wallabagcore/themes/material/css/print.css') }}" media="print">
<link rel="stylesheet" href="{{ asset('bundles/wallabagcore/themes/material/css/style.min.css') }}" media="screen,projection,print"/>
{% endblock %}
{% block scripts %}
{{ parent() }}
<script src="{{ asset('bundles/wallabagcore/themes/material/js/materialize.min.js') }}"></script>
<script src="{{ asset('bundles/wallabagcore/themes/material/js/init.js') }}"></script>
<script src="{{ asset('bundles/wallabagcore/themes/material/js/material.min.js') }}"></script>
{% endblock %}
{% block header %}
@ -31,8 +26,8 @@
<ul id="slide-out" class="side-nav fixed">
{% block logo %}
<li class="logo border-bottom">
<a title="{{ 'menu.left.back_to_unread'|trans }}" href="{{ path('unread') }}">
<img src="{{ asset('bundles/wallabagcore/themes/material/img/logo-square.png') }}" alt="wallabag logo" />
<a title="{% trans %}Back to unread articles{% endtrans %}" href="{{ path('unread') }}">
<img src="{{ asset('bundles/wallabagcore/themes/_global/img/logo-square.png') }}" alt="wallabag logo" />
</a>
</li>
{% endblock %}
@ -76,7 +71,7 @@
</li>
</ul>
<div class="nav-wrapper nav-panels">
<a href="#" data-activates="slide-out" class="nav-panel-menu button-collapse"><i class="mdi-navigation-menu"></i></a>
<a href="#" data-activates="slide-out" class="nav-panel-menu button-collapse"><i class="material-icons">menu</i></a>
<div class="left action">
{% block title %}
{% endblock %}
@ -85,22 +80,22 @@
<ul>
<li class="bold">
<a title="{{ 'menu.top.add_new_entry'|trans }}" class="waves-effect" href="{{ path('new') }}" id="nav-btn-add">
<i class="mdi-content-add"></i>
<i class="material-icons">add</i>
</a>
</li>
<!--<li>
<a title="{{ 'menu.top.search'|trans }}" class="waves-effect" href="javascript: void(null);" id="nav-btn-search">
<i class="mdi-action-search"></i>
<i class="material-icons">search</i>
</a>
</li>-->
<li id="button_filters">
<a title="{{ 'menu.top.filter_entries'|trans }}" href="#" data-activates="filters" class="nav-panel-menu button-collapse-right">
<i class="mdi-content-filter-list"></i>
<i class="material-icons">filter_list</i>
</a>
</li>
<li id="button_export">
<a title="{{ 'menu.top.export'|trans }}" class="nav-panel-menu button-collapse-right" href="#" data-activates="export" class="nav-panel-menu button-collapse-right">
<i class="mdi-file-file-download"></i>
<a title="{{ 'menu.top.export'|trans }}" class="nav-panel-menu button-collapse-right" href="#" data-activates="export">
<i class="material-icons">file_download</i>
</a>
</li>
</ul>
@ -108,14 +103,14 @@
<form method="get" action="index.php">
<div class="input-field nav-panel-search" style="display: none">
<input name="search" id="searchfield" type="search" required placeholder="{{ 'menu.search_form.input_label'|trans }}">
<label for="search"><i class="mdi-action-search"></i></label>
<i class="mdi-navigation-close"></i>
<label for="search"><i class="material-icons search">search</i></label>
<i class="material-icons close">clear</i>
</div>
</form>
<div class="input-field nav-panel-add" style="display: none">
{{ render(controller("WallabagCoreBundle:Entry:addEntryForm")) }}
<label for="add" class="active"><i class="mdi-content-add"></i></label>
<i class="mdi-navigation-close"></i>
<label for="add" class="active"><i class="material-icons add">add</i></label>
<i class="material-icons close">clear</i>
</div>
</div>
</nav>