diff options
author | Nicolas Lœuillet <nicolas@loeuillet.org> | 2015-04-01 21:08:56 +0200 |
---|---|---|
committer | Nicolas Lœuillet <nicolas@loeuillet.org> | 2015-04-01 21:08:56 +0200 |
commit | 1a93ee423b072ec3bcb0c437cbf9b488bdea245c (patch) | |
tree | 1466dcb1b465f9ead71c4dcbefe380853c5d846b /src/Wallabag/CoreBundle/Resources | |
parent | f98a2a0fc3ae8a5955bb811f083c3d2535f96791 (diff) | |
parent | 7d74a2f32b55fa9c33f5ecff57785e8d9e4de8ae (diff) | |
download | wallabag-1a93ee423b072ec3bcb0c437cbf9b488bdea245c.tar.gz wallabag-1a93ee423b072ec3bcb0c437cbf9b488bdea245c.tar.zst wallabag-1a93ee423b072ec3bcb0c437cbf9b488bdea245c.zip |
Merge pull request #1166 from wallabag/v2-rss
Add RSS feeds
Diffstat (limited to 'src/Wallabag/CoreBundle/Resources')
4 files changed, 145 insertions, 60 deletions
diff --git a/src/Wallabag/CoreBundle/Resources/config/services.yml b/src/Wallabag/CoreBundle/Resources/config/services.yml index 062e1651..0f4db94e 100644 --- a/src/Wallabag/CoreBundle/Resources/config/services.yml +++ b/src/Wallabag/CoreBundle/Resources/config/services.yml | |||
@@ -36,3 +36,10 @@ services: | |||
36 | - @doctrine | 36 | - @doctrine |
37 | tags: | 37 | tags: |
38 | - { name: form.type, alias: forgot_password } | 38 | - { name: form.type, alias: forgot_password } |
39 | |||
40 | wallabag_core.param_converter.username_rsstoken_converter: | ||
41 | class: Wallabag\CoreBundle\ParamConverter\UsernameRssTokenConverter | ||
42 | tags: | ||
43 | - { name: request.param_converter, converter: username_rsstoken_converter } | ||
44 | arguments: | ||
45 | - @doctrine | ||
diff --git a/src/Wallabag/CoreBundle/Resources/views/Config/index.html.twig b/src/Wallabag/CoreBundle/Resources/views/Config/index.html.twig index 1835d26e..f2a98dfb 100644 --- a/src/Wallabag/CoreBundle/Resources/views/Config/index.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/Config/index.html.twig | |||
@@ -5,129 +5,173 @@ | |||
5 | {% block content %} | 5 | {% block content %} |
6 | <h2>{% trans %}Wallabag configuration{% endtrans %}</h2> | 6 | <h2>{% trans %}Wallabag configuration{% endtrans %}</h2> |
7 | 7 | ||
8 | <form action="{{ path('config') }}" method="post" {{ form_enctype(configForm) }}> | 8 | <form action="{{ path('config') }}" method="post" {{ form_enctype(form.config) }}> |
9 | {{ form_errors(configForm) }} | 9 | {{ form_errors(form.config) }} |
10 | 10 | ||
11 | <fieldset class="w500p inline"> | 11 | <fieldset class="w500p inline"> |
12 | <div class="row"> | 12 | <div class="row"> |
13 | {{ form_label(configForm.theme) }} | 13 | {{ form_label(form.config.theme) }} |
14 | {{ form_errors(configForm.theme) }} | 14 | {{ form_errors(form.config.theme) }} |
15 | {{ form_widget(configForm.theme) }} | 15 | {{ form_widget(form.config.theme) }} |
16 | </div> | 16 | </div> |
17 | </fieldset> | 17 | </fieldset> |
18 | 18 | ||
19 | <fieldset class="w500p inline"> | 19 | <fieldset class="w500p inline"> |
20 | <div class="row"> | 20 | <div class="row"> |
21 | {{ form_label(configForm.items_per_page) }} | 21 | {{ form_label(form.config.items_per_page) }} |
22 | {{ form_errors(configForm.items_per_page) }} | 22 | {{ form_errors(form.config.items_per_page) }} |
23 | {{ form_widget(configForm.items_per_page) }} | 23 | {{ form_widget(form.config.items_per_page) }} |
24 | </div> | 24 | </div> |
25 | </fieldset> | 25 | </fieldset> |
26 | 26 | ||
27 | <fieldset class="w500p inline"> | 27 | <fieldset class="w500p inline"> |
28 | <div class="row"> | 28 | <div class="row"> |
29 | {{ form_label(configForm.language) }} | 29 | {{ form_label(form.config.language) }} |
30 | {{ form_errors(configForm.language) }} | 30 | {{ form_errors(form.config.language) }} |
31 | {{ form_widget(configForm.language) }} | 31 | {{ form_widget(form.config.language) }} |
32 | </div> | 32 | </div> |
33 | </fieldset> | 33 | </fieldset> |
34 | 34 | ||
35 | {{ form_rest(configForm) }} | 35 | {{ form_rest(form.config) }} |
36 | </form> | ||
37 | |||
38 | <h2>{% trans %}RSS configuration{% endtrans %}</h2> | ||
39 | |||
40 | <form action="{{ path('config') }}" method="post" {{ form_enctype(form.rss) }}> | ||
41 | {{ form_errors(form.rss) }} | ||
42 | |||
43 | <fieldset class="w500p inline"> | ||
44 | <div class="row"> | ||
45 | <label>Rss token</label> | ||
46 | {% if rss.token %} | ||
47 | {{ rss.token }} | ||
48 | {% else %} | ||
49 | <em>No token</em> | ||
50 | {% endif %} | ||
51 | – | ||
52 | <a href="{{ path('generate_token') }}">Regenerate ?</a> | ||
53 | </div> | ||
54 | </fieldset> | ||
55 | |||
56 | <fieldset class="w500p inline"> | ||
57 | <div class="row"> | ||
58 | <label>Rss links:</label> | ||
59 | {% if rss.token %} | ||
60 | <ul> | ||
61 | <li><a href="{{ path('unread_rss', {'username': rss.username, 'token': rss.token}) }}">unread</a></li> | ||
62 | <li><a href="{{ path('starred_rss', {'username': rss.username, 'token': rss.token}) }}">fav</a></li> | ||
63 | <li><a href="{{ path('archive_rss', {'username': rss.username, 'token': rss.token}) }}">archives</a></li> | ||
64 | </ul> | ||
65 | {% else %} | ||
66 | <strong>You need to generate a token first.</strong> | ||
67 | {% endif %} | ||
68 | </div> | ||
69 | </fieldset> | ||
70 | |||
71 | <fieldset class="w500p inline"> | ||
72 | <div class="row"> | ||
73 | {{ form_label(form.rss.rss_limit) }} | ||
74 | {{ form_errors(form.rss.rss_limit) }} | ||
75 | {{ form_widget(form.rss.rss_limit) }} | ||
76 | </div> | ||
77 | </fieldset> | ||
78 | |||
79 | {{ form_rest(form.rss) }} | ||
36 | </form> | 80 | </form> |
37 | 81 | ||
38 | <h2>{% trans %}User information{% endtrans %}</h2> | 82 | <h2>{% trans %}User information{% endtrans %}</h2> |
39 | 83 | ||
40 | <form action="{{ path('config') }}" method="post" {{ form_enctype(userForm) }}> | 84 | <form action="{{ path('config') }}" method="post" {{ form_enctype(form.user) }}> |
41 | {{ form_errors(userForm) }} | 85 | {{ form_errors(form.user) }} |
42 | 86 | ||
43 | <fieldset class="w500p inline"> | 87 | <fieldset class="w500p inline"> |
44 | <div class="row"> | 88 | <div class="row"> |
45 | {{ form_label(userForm.username) }} | 89 | {{ form_label(form.user.username) }} |
46 | {{ form_errors(userForm.username) }} | 90 | {{ form_errors(form.user.username) }} |
47 | {{ form_widget(userForm.username) }} | 91 | {{ form_widget(form.user.username) }} |
48 | </div> | 92 | </div> |
49 | </fieldset> | 93 | </fieldset> |
50 | 94 | ||
51 | <fieldset class="w500p inline"> | 95 | <fieldset class="w500p inline"> |
52 | <div class="row"> | 96 | <div class="row"> |
53 | {{ form_label(userForm.name) }} | 97 | {{ form_label(form.user.name) }} |
54 | {{ form_errors(userForm.name) }} | 98 | {{ form_errors(form.user.name) }} |
55 | {{ form_widget(userForm.name) }} | 99 | {{ form_widget(form.user.name) }} |
56 | </div> | 100 | </div> |
57 | </fieldset> | 101 | </fieldset> |
58 | 102 | ||
59 | <fieldset class="w500p inline"> | 103 | <fieldset class="w500p inline"> |
60 | <div class="row"> | 104 | <div class="row"> |
61 | {{ form_label(userForm.email) }} | 105 | {{ form_label(form.user.email) }} |
62 | {{ form_errors(userForm.email) }} | 106 | {{ form_errors(form.user.email) }} |
63 | {{ form_widget(userForm.email) }} | 107 | {{ form_widget(form.user.email) }} |
64 | </div> | 108 | </div> |
65 | </fieldset> | 109 | </fieldset> |
66 | 110 | ||
67 | {{ form_rest(userForm) }} | 111 | {{ form_rest(form.user) }} |
68 | </form> | 112 | </form> |
69 | 113 | ||
70 | <h2>{% trans %}Change your password{% endtrans %}</h2> | 114 | <h2>{% trans %}Change your password{% endtrans %}</h2> |
71 | 115 | ||
72 | <form action="{{ path('config') }}" method="post" {{ form_enctype(pwdForm) }}> | 116 | <form action="{{ path('config') }}" method="post" {{ form_enctype(form.pwd) }}> |
73 | {{ form_errors(pwdForm) }} | 117 | {{ form_errors(form.pwd) }} |
74 | 118 | ||
75 | <fieldset class="w500p inline"> | 119 | <fieldset class="w500p inline"> |
76 | <div class="row"> | 120 | <div class="row"> |
77 | {{ form_label(pwdForm.old_password) }} | 121 | {{ form_label(form.pwd.old_password) }} |
78 | {{ form_errors(pwdForm.old_password) }} | 122 | {{ form_errors(form.pwd.old_password) }} |
79 | {{ form_widget(pwdForm.old_password) }} | 123 | {{ form_widget(form.pwd.old_password) }} |
80 | </div> | 124 | </div> |
81 | </fieldset> | 125 | </fieldset> |
82 | 126 | ||
83 | <fieldset class="w500p inline"> | 127 | <fieldset class="w500p inline"> |
84 | <div class="row"> | 128 | <div class="row"> |
85 | {{ form_label(pwdForm.new_password.first) }} | 129 | {{ form_label(form.pwd.new_password.first) }} |
86 | {{ form_errors(pwdForm.new_password.first) }} | 130 | {{ form_errors(form.pwd.new_password.first) }} |
87 | {{ form_widget(pwdForm.new_password.first) }} | 131 | {{ form_widget(form.pwd.new_password.first) }} |
88 | </div> | 132 | </div> |
89 | </fieldset> | 133 | </fieldset> |
90 | 134 | ||
91 | <fieldset class="w500p inline"> | 135 | <fieldset class="w500p inline"> |
92 | <div class="row"> | 136 | <div class="row"> |
93 | {{ form_label(pwdForm.new_password.second) }} | 137 | {{ form_label(form.pwd.new_password.second) }} |
94 | {{ form_errors(pwdForm.new_password.second) }} | 138 | {{ form_errors(form.pwd.new_password.second) }} |
95 | {{ form_widget(pwdForm.new_password.second) }} | 139 | {{ form_widget(form.pwd.new_password.second) }} |
96 | </div> | 140 | </div> |
97 | </fieldset> | 141 | </fieldset> |
98 | 142 | ||
99 | {{ form_rest(pwdForm) }} | 143 | {{ form_rest(form.pwd) }} |
100 | </form> | 144 | </form> |
101 | 145 | ||
102 | <h2>{% trans %}Add a user{% endtrans %}</h2> | 146 | <h2>{% trans %}Add a user{% endtrans %}</h2> |
103 | 147 | ||
104 | <form action="{{ path('config') }}" method="post" {{ form_enctype(newUserForm) }}> | 148 | <form action="{{ path('config') }}" method="post" {{ form_enctype(form.new_user) }}> |
105 | {{ form_errors(newUserForm) }} | 149 | {{ form_errors(form.new_user) }} |
106 | 150 | ||
107 | <fieldset class="w500p inline"> | 151 | <fieldset class="w500p inline"> |
108 | <div class="row"> | 152 | <div class="row"> |
109 | {{ form_label(newUserForm.username) }} | 153 | {{ form_label(form.new_user.username) }} |
110 | {{ form_errors(newUserForm.username) }} | 154 | {{ form_errors(form.new_user.username) }} |
111 | {{ form_widget(newUserForm.username) }} | 155 | {{ form_widget(form.new_user.username) }} |
112 | </div> | 156 | </div> |
113 | </fieldset> | 157 | </fieldset> |
114 | 158 | ||
115 | <fieldset class="w500p inline"> | 159 | <fieldset class="w500p inline"> |
116 | <div class="row"> | 160 | <div class="row"> |
117 | {{ form_label(newUserForm.password) }} | 161 | {{ form_label(form.new_user.password) }} |
118 | {{ form_errors(newUserForm.password) }} | 162 | {{ form_errors(form.new_user.password) }} |
119 | {{ form_widget(newUserForm.password) }} | 163 | {{ form_widget(form.new_user.password) }} |
120 | </div> | 164 | </div> |
121 | </fieldset> | 165 | </fieldset> |
122 | 166 | ||
123 | <fieldset class="w500p inline"> | 167 | <fieldset class="w500p inline"> |
124 | <div class="row"> | 168 | <div class="row"> |
125 | {{ form_label(newUserForm.email) }} | 169 | {{ form_label(form.new_user.email) }} |
126 | {{ form_errors(newUserForm.email) }} | 170 | {{ form_errors(form.new_user.email) }} |
127 | {{ form_widget(newUserForm.email) }} | 171 | {{ form_widget(form.new_user.email) }} |
128 | </div> | 172 | </div> |
129 | </fieldset> | 173 | </fieldset> |
130 | 174 | ||
131 | {{ form_rest(newUserForm) }} | 175 | {{ form_rest(form.new_user) }} |
132 | </form> | 176 | </form> |
133 | {% endblock %} | 177 | {% endblock %} |
diff --git a/src/Wallabag/CoreBundle/Resources/views/Entry/entries.xml.twig b/src/Wallabag/CoreBundle/Resources/views/Entry/entries.xml.twig new file mode 100644 index 00000000..5ec9bc03 --- /dev/null +++ b/src/Wallabag/CoreBundle/Resources/views/Entry/entries.xml.twig | |||
@@ -0,0 +1,34 @@ | |||
1 | <?xml version="1.0" encoding="utf-8"?> | ||
2 | <rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/"> | ||
3 | <channel> | ||
4 | <title>wallabag — {{type}} feed</title> | ||
5 | <link>{{ url('unread') }}</link> | ||
6 | <pubDate>{{ "now"|date('D, d M Y H:i:s') }}</pubDate> | ||
7 | <generator>wallabag</generator> | ||
8 | <description>wallabag {{type}} elements</description> | ||
9 | |||
10 | {% for entry in entries %} | ||
11 | |||
12 | <item> | ||
13 | <title><![CDATA[{{ entry.title }}]]></title> | ||
14 | <source url="{{ url('view', { 'id': entry.id }) }}">wallabag</source> | ||
15 | <link>{{ url('view', { 'id': entry.id }) }}</link> | ||
16 | <guid>{{ url('view', { 'id': entry.id }) }}</guid> | ||
17 | <pubDate>{{ entry.createdAt|date('D, d M Y H:i:s') }}</pubDate> | ||
18 | <description> | ||
19 | <![CDATA[ | ||
20 | {%- if entry.content|readingTime > 0 -%} | ||
21 | {% trans %}estimated reading time :{% endtrans %} {{ entry.content|readingTime }} min | ||
22 | {%- else -%} | ||
23 | {% trans %}estimated reading time :{% endtrans %} < 1 min | ||
24 | {%- endif %} | ||
25 | |||
26 | {{ entry.content|raw -}} | ||
27 | ]]> | ||
28 | </description> | ||
29 | </item> | ||
30 | |||
31 | {% endfor %} | ||
32 | |||
33 | </channel> | ||
34 | </rss> | ||
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/public/css/main.css b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/public/css/main.css index 1df82910..ff1a36a1 100755 --- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/public/css/main.css +++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/public/css/main.css | |||
@@ -7,7 +7,7 @@ | |||
7 | 4 = Messages | 7 | 4 = Messages |
8 | 5 = Article | 8 | 5 = Article |
9 | 6 = Media queries | 9 | 6 = Media queries |
10 | 10 | ||
11 | ========================================================================== */ | 11 | ========================================================================== */ |
12 | 12 | ||
13 | html { | 13 | html { |
@@ -42,17 +42,17 @@ body { | |||
42 | position: absolute; | 42 | position: absolute; |
43 | top: 2em; | 43 | top: 2em; |
44 | left: 50%; | 44 | left: 50%; |
45 | margin-left: -55px; | 45 | margin-left: -55px; |
46 | } | 46 | } |
47 | 47 | ||
48 | /* ========================================================================== | 48 | /* ========================================================================== |
49 | 1 = Style Guide | 49 | 1 = Style Guide |
50 | ========================================================================== */ | 50 | ========================================================================== */ |
51 | 51 | ||
52 | ::selection { | 52 | ::selection { |
53 | color: #FFF; | 53 | color: #FFF; |
54 | background-color: #000; | 54 | background-color: #000; |
55 | } | 55 | } |
56 | 56 | ||
57 | .desktopHide { | 57 | .desktopHide { |
58 | display: none; | 58 | display: none; |
@@ -62,7 +62,7 @@ body { | |||
62 | position: fixed; | 62 | position: fixed; |
63 | z-index: 20; | 63 | z-index: 20; |
64 | top: 0.4em; | 64 | top: 0.4em; |
65 | left: 0.6em; | 65 | left: 0.6em; |
66 | } | 66 | } |
67 | 67 | ||
68 | h2, h3, h4 { | 68 | h2, h3, h4 { |
@@ -89,7 +89,7 @@ form fieldset { | |||
89 | margin: 0; | 89 | margin: 0; |
90 | } | 90 | } |
91 | 91 | ||
92 | form input[type="text"], select, form input[type="password"], form input[type="url"], form input[type="email"] { | 92 | form input[type="text"], form input[type="number"], select, form input[type="password"], form input[type="url"], form input[type="email"] { |
93 | border: 1px solid #999; | 93 | border: 1px solid #999; |
94 | padding: 0.5em 1em; | 94 | padding: 0.5em 1em; |
95 | min-width: 12em; | 95 | min-width: 12em; |
@@ -149,7 +149,7 @@ form button, input[type="submit"] { | |||
149 | 149 | ||
150 | #bookmarklet { | 150 | #bookmarklet { |
151 | cursor: move; | 151 | cursor: move; |
152 | } | 152 | } |
153 | 153 | ||
154 | h2:after { | 154 | h2:after { |
155 | content: ""; | 155 | content: ""; |
@@ -296,7 +296,7 @@ h2:after { | |||
296 | /* ========================================================================== | 296 | /* ========================================================================== |
297 | 2 = Layout | 297 | 2 = Layout |
298 | ========================================================================== */ | 298 | ========================================================================== */ |
299 | 299 | ||
300 | #content { | 300 | #content { |
301 | margin-top: 5em; | 301 | margin-top: 5em; |
302 | min-height: 30em; | 302 | min-height: 30em; |
@@ -653,7 +653,7 @@ a.add-to-wallabag-link-after:after { | |||
653 | /* ========================================================================== | 653 | /* ========================================================================== |
654 | 3 = Pictos | 654 | 3 = Pictos |
655 | ========================================================================== */ | 655 | ========================================================================== */ |
656 | 656 | ||
657 | @font-face { | 657 | @font-face { |
658 | font-family: 'icomoon'; | 658 | font-family: 'icomoon'; |
659 | src:url('../fonts/icomoon.eot?-s0mcsx'); | 659 | src:url('../fonts/icomoon.eot?-s0mcsx'); |
@@ -866,7 +866,7 @@ blockquote { | |||
866 | color: #FFF; | 866 | color: #FFF; |
867 | text-decoration: none; | 867 | text-decoration: none; |
868 | } | 868 | } |
869 | 869 | ||
870 | #article_toolbar a:hover, #article_toolbar a:focus { | 870 | #article_toolbar a:hover, #article_toolbar a:focus { |
871 | background-color: #999; | 871 | background-color: #999; |
872 | } | 872 | } |
@@ -1052,7 +1052,7 @@ pre code { | |||
1052 | #article_toolbar a { | 1052 | #article_toolbar a { |
1053 | padding: 0.3em 0.4em 0.2em; | 1053 | padding: 0.3em 0.4em 0.2em; |
1054 | } | 1054 | } |
1055 | 1055 | ||
1056 | #display-mode { | 1056 | #display-mode { |
1057 | display: none; | 1057 | display: none; |
1058 | } | 1058 | } |