aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorNicolas Lœuillet <nicolas@loeuillet.org>2020-04-14 16:01:14 +0200
committerNicolas Lœuillet <nicolas@loeuillet.org>2020-04-14 16:01:14 +0200
commit39676caf83a3d85203a769295d65c8ce32953883 (patch)
tree1c98d8fdcdf8aa6941a21290bcbe883132ea891f
parent2b21cc8869c9a6cbcc14a10aa6f39a10c3b8c4a0 (diff)
downloadwallabag-remove-baggy.tar.gz
wallabag-remove-baggy.tar.zst
wallabag-remove-baggy.zip
Removed old, not so maintained and buggy baggy themeremove-baggy
-rw-r--r--app/DoctrineMigrations/Version20200414120227.php23
-rw-r--r--app/Resources/static/themes/baggy/css/article.scss165
-rw-r--r--app/Resources/static/themes/baggy/css/guide.scss263
-rw-r--r--app/Resources/static/themes/baggy/css/index.scss13
-rw-r--r--app/Resources/static/themes/baggy/css/layout.scss309
-rw-r--r--app/Resources/static/themes/baggy/css/login.scss26
-rwxr-xr-xapp/Resources/static/themes/baggy/css/main.css1353
-rwxr-xr-xapp/Resources/static/themes/baggy/css/media_queries.scss178
-rwxr-xr-xapp/Resources/static/themes/baggy/css/messages.scss50
-rw-r--r--app/Resources/static/themes/baggy/css/pictos.scss210
-rwxr-xr-xapp/Resources/static/themes/baggy/css/print.scss63
-rw-r--r--app/Resources/static/themes/baggy/css/ratatouille.scss226
-rw-r--r--app/Resources/static/themes/baggy/css/save.scss115
-rwxr-xr-xapp/Resources/static/themes/baggy/img/blank.pngbin141 -> 0 bytes
-rw-r--r--app/Resources/static/themes/baggy/img/down.pngbin216 -> 0 bytes
-rwxr-xr-xapp/Resources/static/themes/baggy/img/list.pngbin201 -> 0 bytes
-rwxr-xr-xapp/Resources/static/themes/baggy/img/table.pngbin229 -> 0 bytes
-rw-r--r--app/Resources/static/themes/baggy/img/top.pngbin212 -> 0 bytes
-rwxr-xr-xapp/Resources/static/themes/baggy/index.js266
-rwxr-xr-xapp/Resources/static/themes/baggy/js/autoCompleteTags.js8
-rw-r--r--app/Resources/static/themes/baggy/js/shortcuts/entry.js26
-rw-r--r--app/Resources/static/themes/baggy/js/shortcuts/main.js10
-rw-r--r--app/Resources/static/themes/baggy/js/uiTools.js35
-rw-r--r--app/config/config.yml1
-rw-r--r--app/config/webpack/common.js1
-rw-r--r--src/Wallabag/CoreBundle/Helper/DetectActiveTheme.php9
-rw-r--r--src/Wallabag/CoreBundle/Resources/config/services.yml1
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/index.html.twig433
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/otp_app.html.twig55
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/edit.html.twig7
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig219
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entry.html.twig116
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/new.html.twig7
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/new_form.html.twig14
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/search_form.html.twig17
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Exception/error.html.twig24
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Mail/forgotPassword.txt.twig6
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/README.md3
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/SiteCredential/edit.html.twig60
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/SiteCredential/index.html.twig42
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/SiteCredential/new.html.twig53
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Tag/new_form.html.twig13
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Tag/tags.html.twig40
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/layout.html.twig71
-rwxr-xr-xsrc/Wallabag/CoreBundle/Resources/views/themes/baggy/screenshot.jpgbin256315 -> 0 bytes
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig4
-rw-r--r--tests/Wallabag/CoreBundle/Controller/ConfigControllerTest.php15
-rw-r--r--tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php14
-rw-r--r--tests/Wallabag/UserBundle/EventListener/CreateConfigListenerTest.php4
49 files changed, 42 insertions, 4526 deletions
diff --git a/app/DoctrineMigrations/Version20200414120227.php b/app/DoctrineMigrations/Version20200414120227.php
new file mode 100644
index 00000000..45e4c637
--- /dev/null
+++ b/app/DoctrineMigrations/Version20200414120227.php
@@ -0,0 +1,23 @@
1<?php
2
3namespace Application\Migrations;
4
5use Doctrine\DBAL\Migrations\SkipMigrationException;
6use Doctrine\DBAL\Schema\Schema;
7use Wallabag\CoreBundle\Doctrine\WallabagMigration;
8
9/**
10 * Remove baggy theme
11 */
12final class Version20200414120227 extends WallabagMigration
13{
14 public function up(Schema $schema) : void
15 {
16 $this->addSql('UPDATE ' . $this->getTable('config', true) . ' SET theme = "material" WHERE theme = "baggy";');
17 }
18
19 public function down(Schema $schema) : void
20 {
21 throw new SkipMigrationException('Not possible ... ');
22 }
23}
diff --git a/app/Resources/static/themes/baggy/css/article.scss b/app/Resources/static/themes/baggy/css/article.scss
deleted file mode 100644
index d203ce31..00000000
--- a/app/Resources/static/themes/baggy/css/article.scss
+++ /dev/null
@@ -1,165 +0,0 @@
1
2#article {
3 width: 70%;
4 margin-bottom: 3em;
5 text-align: justify;
6
7 .tags {
8 margin-bottom: 1em;
9 }
10
11 i {
12 font-style: normal;
13 }
14
15 h1 {
16 text-align: left;
17 }
18
19 h2::after {
20 content: none;
21 }
22
23 h2,
24 h3,
25 h4 {
26 text-transform: none;
27 }
28}
29
30blockquote {
31 border: 1px solid #999;
32 background-color: #fff;
33 padding: 1em;
34 margin: 0;
35}
36
37.topPosF {
38 position: fixed;
39 right: 20%;
40 bottom: 2em;
41 font-size: 1.5em;
42}
43
44#article_toolbar {
45 margin-bottom: 1em;
46
47 li {
48 display: inline-block;
49 margin: 3px auto;
50 }
51
52 a {
53 background-color: #000;
54 padding: 0.3em 0.5em 0.2em;
55 color: #fff;
56 text-decoration: none;
57
58 &:hover,
59 &:focus {
60 background-color: #999;
61 }
62 }
63}
64
65#nav-btn-add-tag {
66 cursor: pointer;
67}
68
69.shaarli::before {
70 content: "*";
71}
72
73.return {
74 text-decoration: none;
75 margin-top: 1em;
76 display: block;
77}
78
79.return::before {
80 margin-right: 0.5em;
81}
82
83.notags {
84 font-style: italic;
85 color: #999;
86}
87
88.icon-feed {
89 background-color: #000;
90 color: #fff;
91 padding: 0.2em 0.5em;
92
93 &::before {
94 position: relative;
95 top: 2px;
96 }
97}
98
99.list-tags {
100 li {
101 margin-bottom: 0.5em;
102 }
103
104 .icon-feed:hover,
105 .icon-feed:focus {
106 background-color: #fff;
107 color: #000;
108 text-decoration: none;
109 }
110
111 a {
112 text-decoration: none;
113
114 &:hover,
115 &:focus {
116 text-decoration: underline;
117 }
118 }
119}
120
121pre code {
122 font-family: "Courier New", Courier, monospace;
123}
124
125#filters {
126 position: fixed;
127 width: 20%;
128 height: 100%;
129 top: 0;
130 right: 0;
131 background-color: #fff;
132 padding: 30px 30px 15px 15px;
133 border-left: 1px #333 solid;
134 z-index: 12;
135 min-width: 300px;
136
137 form .filter-group {
138 margin: 5px;
139 }
140}
141
142#download-form {
143 position: fixed;
144 width: 10%;
145 height: 100%;
146 top: 0;
147 right: 0;
148 background-color: #fff;
149 padding: 30px 30px 15px 15px;
150 border-left: 1px #333 solid;
151 z-index: 12;
152 min-width: 200px;
153
154 li {
155 display: block;
156 padding: 0.5em 2em 0.5em 1em;
157 color: #fff;
158 position: relative;
159 text-transform: uppercase;
160 text-decoration: none;
161 font-weight: 400;
162 font-family: PT Sans, sans-serif;
163 transition: all 0.5s ease;
164 }
165}
diff --git a/app/Resources/static/themes/baggy/css/guide.scss b/app/Resources/static/themes/baggy/css/guide.scss
deleted file mode 100644
index afb47c4a..00000000
--- a/app/Resources/static/themes/baggy/css/guide.scss
+++ /dev/null
@@ -1,263 +0,0 @@
1
2::selection {
3 color: #fff;
4 background-color: #000;
5}
6
7.desktopHide {
8 display: none;
9}
10
11.logo {
12 position: fixed;
13 z-index: 20;
14 top: 0.4em;
15 left: 0.6em;
16}
17
18h2,
19h3,
20h4 {
21 font-family: "PT Sans", sans-serif;
22 text-transform: uppercase;
23}
24
25p,
26li,
27label {
28 color: #666;
29}
30
31a {
32 color: #000;
33 font-weight: bold;
34
35 &.nostyle {
36 text-decoration: none;
37 }
38
39 &:hover,
40 &:focus {
41 text-decoration: none;
42 }
43}
44
45form fieldset {
46 border: 0;
47 padding: 0;
48 margin: 0;
49}
50
51form input[type="text"],
52form input[type="number"],
53select,
54form input[type="password"],
55form input[type="url"],
56form input[type="email"] {
57 border: 1px solid #999;
58 padding: 0.5em 1em;
59 min-width: 12em;
60 color: #666;
61}
62
63@media screen and (-webkit-min-device-pixel-ratio: 0) {
64 select {
65 -webkit-appearance: none;
66 border-radius: 0;
67 background: #fff url("../../_global/img/bg-select.png") no-repeat right center;
68 }
69}
70
71.inline {
72 .row {
73 display: inline-block;
74 margin-right: 0.5em;
75 }
76
77 label {
78 min-width: 6em;
79 }
80}
81
82fieldset label {
83 display: inline-block;
84 min-width: 12.5em;
85 color: #666;
86}
87
88label {
89 margin-right: 0.5em;
90}
91
92form .row {
93 margin-bottom: 0.5em;
94}
95
96form button,
97input[type="submit"] {
98 cursor: pointer;
99 background-color: #000;
100 color: #fff;
101 padding: 0.5em 1em;
102 display: inline-block;
103 border: 1px solid #000;
104}
105
106form button:hover,
107form button:focus,
108input[type="submit"]:hover,
109input[type="submit"]:focus {
110 background-color: #fff;
111 color: #000;
112 -webkit-transition: all 0.5s ease;
113 -moz-transition: all 0.5s ease;
114 -ms-transition: all 0.5s ease;
115 -o-transition: all 0.5s ease;
116 transition: all 0.5s ease;
117}
118
119#bookmarklet {
120 cursor: move;
121}
122
123h2::after {
124 content: "";
125 height: 4px;
126 width: 20%;
127 background-color: #000;
128 display: block;
129}
130
131.links {
132 padding: 0;
133 margin: 0;
134
135 li {
136 list-style: none;
137 margin: 0;
138 padding: 0;
139 }
140}
141
142#links {
143 position: fixed;
144 top: 0;
145 width: 10em;
146 left: 0;
147 text-align: right;
148 background-color: #333;
149 padding-top: 9.5em;
150 height: 100%;
151 box-shadow: inset -4px 0 20px rgba(0, 0, 0, 0.6);
152 z-index: 15;
153
154 > li > a {
155 display: block;
156 padding: 0.5em 2em 0.5em 1em;
157 color: #fff;
158 position: relative;
159 text-transform: uppercase;
160 text-decoration: none;
161 font-weight: normal;
162 font-family: "PT Sans", sans-serif;
163 transition: all 0.5s ease;
164
165 &:hover,
166 &:focus {
167 background-color: #999;
168 color: #000;
169 }
170 }
171
172 .current::after {
173 content: "";
174 width: 0;
175 height: 0;
176 position: absolute;
177 border: 10px solid transparent;
178 border-right-color: #eee;
179 right: 0;
180 top: 50%;
181 margin-top: -10px;
182 }
183
184 li:last-child {
185 position: fixed;
186 bottom: 1em;
187 width: 10em;
188
189 a::before {
190 font-size: 1.2em;
191 position: relative;
192 top: 2px;
193 }
194 }
195}
196
197#main {
198 margin-left: 12em;
199 position: relative;
200 z-index: 10;
201 padding-right: 5%;
202 padding-bottom: 1em;
203}
204
205#sort {
206 padding: 0;
207 list-style-type: none;
208 opacity: 0.5;
209 display: inline-block;
210
211 li {
212 display: inline;
213 font-size: 0.9em;
214
215 & + li {
216 margin-left: 10px;
217 }
218 }
219
220 a {
221 padding: 2px 2px 0;
222 vertical-align: middle;
223 }
224
225 img {
226 vertical-align: baseline;
227
228 :hover {
229 cursor: pointer;
230 }
231 }
232}
233
234#display-mode {
235 float: right;
236 margin-top: 10px;
237 margin-bottom: 10px;
238 opacity: 0.5;
239}
240
241#listmode {
242 width: 16px;
243 display: inline-block;
244 text-decoration: none;
245
246 &.tablemode {
247 background: url("../../_global/img/table.png") no-repeat bottom;
248 }
249
250 .listmode {
251 background: url("../../_global/img/list.png") no-repeat bottom;
252 }
253}
254
255#warning_message {
256 position: fixed;
257 background-color: #ff6347;
258 z-index: 1000;
259 bottom: 0;
260 left: 0;
261 width: 100%;
262 color: #000;
263}
diff --git a/app/Resources/static/themes/baggy/css/index.scss b/app/Resources/static/themes/baggy/css/index.scss
deleted file mode 100644
index e7a11963..00000000
--- a/app/Resources/static/themes/baggy/css/index.scss
+++ /dev/null
@@ -1,13 +0,0 @@
1/* Style */
2@import 'guide';
3@import 'layout';
4@import 'article';
5@import 'pictos';
6@import 'login';
7@import 'save';
8@import 'messages';
9
10/* Tools */
11@import 'media_queries';
12@import 'print';
13@import 'ratatouille';
diff --git a/app/Resources/static/themes/baggy/css/layout.scss b/app/Resources/static/themes/baggy/css/layout.scss
deleted file mode 100644
index 0293ebe5..00000000
--- a/app/Resources/static/themes/baggy/css/layout.scss
+++ /dev/null
@@ -1,309 +0,0 @@
1#content {
2 margin-top: 2em;
3 min-height: 30em;
4}
5
6footer {
7 text-align: right;
8 position: relative;
9 bottom: 0;
10 right: 5em;
11 color: #999;
12 font-size: 0.8em;
13 font-style: italic;
14 z-index: 20;
15
16 a {
17 color: #999;
18 font-weight: normal;
19 }
20}
21
22.list-entries {
23 letter-spacing: -5px;
24}
25
26.listmode.entry {
27 width: 100%;
28 height: inherit;
29}
30
31.card-entry-tags {
32 max-height: 2em;
33 overflow-y: hidden;
34 padding: 0;
35 margin: 0;
36}
37
38.card-entry-tags li,
39.card-entry-tags span {
40 display: inline-block;
41 margin: 0 5px;
42 padding: 5px 12px;
43 background-color: rgba(0, 0, 0, 0.6);
44 border-radius: 3px;
45 max-height: 2em;
46 overflow: hidden;
47 text-overflow: ellipsis;
48}
49
50.card-entry-tags a,
51.card-entry-labels a {
52 text-decoration: none;
53 font-weight: normal;
54 color: #fff;
55}
56
57.nav-panel-add-tag {
58 margin-top: 10px;
59}
60
61.list-entries + .results {
62 margin-bottom: 2em;
63}
64
65.reading-time,
66.created-at {
67 color: #999;
68 font-style: italic;
69 font-weight: normal;
70 font-size: 0.9em;
71}
72
73.estimatedTime small {
74 position: relative;
75 top: -1px;
76}
77
78.entry {
79 background-color: #fff;
80 letter-spacing: normal;
81 box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
82 display: inline-block;
83 width: 32%;
84 margin-bottom: 1.5em;
85 vertical-align: top;
86 margin-right: 1%;
87 position: relative;
88 overflow: hidden;
89 padding: 1.5em 0 3em;
90 height: 440px;
91
92 img.preview {
93 width: 100%;
94 object-fit: cover;
95 height: 100%;
96 }
97
98 &::before {
99 content: "";
100 width: 0;
101 height: 0;
102 border: 10px solid transparent;
103 border-bottom-color: #000;
104 position: absolute;
105 bottom: 0.7em;
106 z-index: 10;
107 right: 1.5em;
108 transition: all 0.5s ease;
109 }
110
111 &::after {
112 content: "";
113 position: absolute;
114 height: 7px;
115 width: 100%;
116 bottom: 0;
117 left: 0;
118 background-color: #000;
119 transition: all 0.5s ease;
120 }
121
122 &:hover {
123 box-shadow: 0 3px 10px rgba(0, 0, 0, 1);
124
125 &::after {
126 height: 40px;
127 }
128
129 &::before {
130 bottom: 2.3em;
131 }
132
133 h2 a {
134 color: #666;
135 }
136
137 .tools {
138 bottom: 0;
139 }
140 }
141
142 h2 {
143 text-transform: none;
144 margin-bottom: 0;
145 line-height: 1.2;
146 margin-left: 5px;
147 }
148
149 &::after {
150 content: none;
151 }
152
153 a {
154 display: block;
155 text-decoration: none;
156 color: #000;
157 word-wrap: break-word;
158 transition: all 0.5s ease;
159 }
160
161 p {
162 color: #666;
163 font-size: 0.9em;
164 line-height: 1.7;
165 margin: 5px 5px auto;
166 }
167
168 h2 a::first-letter {
169 text-transform: uppercase;
170 }
171
172 .tools {
173 position: absolute;
174 bottom: -40px;
175 left: 0;
176 background: #000;
177 width: 100%;
178 z-index: 10;
179 padding-right: 0.5em;
180 text-align: right;
181 transition: all 0.5s ease;
182
183 a {
184 color: #666;
185 text-decoration: none;
186 display: block;
187 padding: 0.4em;
188
189 &:hover {
190 color: #fff;
191 }
192 }
193
194 li {
195 display: inline-block;
196 margin-top: 10px;
197 }
198
199 li:first-child {
200 float: left;
201 font-size: 0.9em;
202 max-width: calc(100% - 40px * 4);
203 text-overflow: ellipsis;
204 overflow: hidden;
205 white-space: nowrap;
206 max-height: 2em;
207 margin-left: 10px;
208 }
209 }
210
211 .card-entry-labels {
212 position: absolute;
213 top: 100px;
214 left: -1em;
215 z-index: 90;
216 max-width: 50%;
217 padding-left: 0;
218
219 li {
220 margin: 10px 10px 10px auto;
221 padding: 5px 12px 5px 25px;
222 background-color: rgba(0, 0, 0, 0.6);
223 border-radius: 0 3px 3px 0;
224 color: #fff;
225 cursor: default;
226 max-height: 2em;
227 overflow: hidden;
228 text-overflow: ellipsis;
229 white-space: nowrap;
230
231 a {
232 color: #fff;
233 }
234 }
235 }
236}
237
238.entry:nth-child(3n+1) {
239 margin-left: 0;
240}
241
242.results {
243 letter-spacing: -5px;
244 padding: 0 0 0.5em;
245
246 > * {
247 display: inline-block;
248 vertical-align: top;
249 letter-spacing: normal;
250 width: 50%;
251 text-align: right;
252 }
253}
254
255div.pagination ul {
256 text-align: right;
257}
258
259.nb-results {
260 text-align: left;
261 font-style: italic;
262 color: #999;
263 display: inline-flex;
264}
265
266div.pagination ul {
267 a {
268 color: #999;
269 text-decoration: none;
270
271 &:hover,
272 &:focus {
273 text-decoration: underline;
274 }
275 }
276
277 > * {
278 display: inline-block;
279 margin-left: 0.5em;
280 }
281
282 .prev.disabled,
283 .next.disabled {
284 display: none;
285 }
286
287 .current {
288 height: 25px;
289 padding: 4px 8px;
290 border: 1px solid #d5d5d5;
291 text-decoration: none;
292 font-weight: bold;
293 color: #000;
294 background-color: #ccc;
295 }
296}
297
298.card-tag-form {
299 display: inline-block;
300}
301
302.card-tag-form input[type="text"] {
303 min-width: 20em;
304}
305
306.hide,
307.hidden {
308 display: none;
309}
diff --git a/app/Resources/static/themes/baggy/css/login.scss b/app/Resources/static/themes/baggy/css/login.scss
deleted file mode 100644
index 312df670..00000000
--- a/app/Resources/static/themes/baggy/css/login.scss
+++ /dev/null
@@ -1,26 +0,0 @@
1.login {
2 background-color: #333;
3
4 #main {
5 padding: 0;
6 margin: 0;
7 }
8
9 form {
10 background-color: #fff;
11 padding: 1.5em;
12 box-shadow: 0 1px 8px rgba(0, 0, 0, 0.9);
13 width: 20em;
14 position: absolute;
15 top: 8em;
16 left: 50%;
17 margin-left: -10em;
18 }
19
20 .logo {
21 position: absolute;
22 top: 2em;
23 left: 50%;
24 margin-left: -55px;
25 }
26}
diff --git a/app/Resources/static/themes/baggy/css/main.css b/app/Resources/static/themes/baggy/css/main.css
deleted file mode 100755
index f82c6bee..00000000
--- a/app/Resources/static/themes/baggy/css/main.css
+++ /dev/null
@@ -1,1353 +0,0 @@
1/* ==========================================================================
2 Sommaire
3
4 1 = Style Guide
5 2 = Layout
6 3 = Pictos
7 4 = Messages
8 5 = Article
9 6 = Media queries
10
11 ========================================================================== */
12
13html {
14 min-height: 100%;
15}
16
17body {
18 background-color: #eee;
19}
20
21.login {
22 background-color: #333;
23}
24
25.login #main {
26 padding: 0;
27 margin: 0;
28}
29
30.login form {
31 background-color: #fff;
32 padding: 1.5em;
33 box-shadow: 0 1px 8px rgba(0, 0, 0, 0.9);
34 width: 20em;
35 position: absolute;
36 top: 8em;
37 left: 50%;
38 margin-left: -10em;
39}
40
41.login .logo {
42 position: absolute;
43 top: 2em;
44 left: 50%;
45 margin-left: -55px;
46}
47
48/* ==========================================================================
49 1 = Style Guide
50 ========================================================================== */
51
52::selection {
53 color: #fff;
54 background-color: #000;
55}
56
57.desktopHide {
58 display: none;
59}
60
61.logo {
62 position: fixed;
63 z-index: 20;
64 top: 0.4em;
65 left: 0.6em;
66}
67
68h2,
69h3,
70h4 {
71 font-family: "PT Sans", sans-serif;
72 text-transform: uppercase;
73}
74
75p,
76li,
77label {
78 color: #666;
79}
80
81a {
82 color: #000;
83 font-weight: bold;
84}
85
86a.nostyle {
87 text-decoration: none;
88}
89
90a:hover,
91a:focus {
92 text-decoration: none;
93}
94
95form fieldset {
96 border: 0;
97 padding: 0;
98 margin: 0;
99}
100
101form input[type="text"],
102form input[type="number"],
103select,
104form input[type="password"],
105form input[type="url"],
106form input[type="email"] {
107 border: 1px solid #999;
108 padding: 0.5em 1em;
109 min-width: 12em;
110 color: #666;
111}
112
113@media screen and (-webkit-min-device-pixel-ratio: 0) {
114 select {
115 -webkit-appearance: none;
116 border-radius: 0;
117 background: #fff url("../../_global/img/bg-select.png") no-repeat right center;
118 }
119}
120
121.inline .row {
122 display: inline-block;
123 margin-right: 0.5em;
124}
125
126.inline label {
127 min-width: 6em;
128}
129
130fieldset label {
131 display: inline-block;
132 min-width: 12.5em;
133 color: #666;
134}
135
136label {
137 margin-right: 0.5em;
138}
139
140form .row {
141 margin-bottom: 0.5em;
142}
143
144form button,
145input[type="submit"] {
146 cursor: pointer;
147 background-color: #000;
148 color: #fff;
149 padding: 0.5em 1em;
150 display: inline-block;
151 border: 1px solid #000;
152}
153
154form button:hover,
155form button:focus,
156input[type="submit"]:hover,
157input[type="submit"]:focus {
158 background-color: #fff;
159 color: #000;
160 -webkit-transition: all 0.5s ease;
161 -moz-transition: all 0.5s ease;
162 -ms-transition: all 0.5s ease;
163 -o-transition: all 0.5s ease;
164 transition: all 0.5s ease;
165}
166
167#bookmarklet {
168 cursor: move;
169}
170
171h2::after {
172 content: "";
173 height: 4px;
174 width: 70px;
175 background-color: #000;
176 display: block;
177}
178
179.links {
180 padding: 0;
181 margin: 0;
182}
183
184.links li {
185 list-style: none;
186 margin: 0;
187 padding: 0;
188}
189
190#links {
191 position: fixed;
192 top: 0;
193 width: 10em;
194 left: 0;
195 text-align: right;
196 background-color: #333;
197 padding-top: 9.5em;
198 height: 100%;
199 box-shadow: inset -4px 0 20px rgba(0, 0, 0, 0.6);
200 z-index: 15;
201}
202
203#main {
204 margin-left: 12em;
205 position: relative;
206 z-index: 10;
207 padding-right: 5%;
208 padding-bottom: 1em;
209}
210
211#links > li > a {
212 display: block;
213 padding: 0.5em 2em 0.5em 1em;
214 color: #fff;
215 position: relative;
216 text-transform: uppercase;
217 text-decoration: none;
218 font-weight: normal;
219 font-family: "PT Sans", sans-serif;
220 -webkit-transition: all 0.5s ease;
221 -moz-transition: all 0.5s ease;
222 -ms-transition: all 0.5s ease;
223 -o-transition: all 0.5s ease;
224 transition: all 0.5s ease;
225}
226
227#links > li > a:hover,
228#links > li > a:focus {
229 background-color: #999;
230 color: #000;
231}
232
233#links .current::after {
234 content: "";
235 width: 0;
236 height: 0;
237 position: absolute;
238 border-style: solid;
239 border-width: 10px;
240 border-color: transparent #eee transparent transparent;
241 right: 0;
242 top: 50%;
243 margin-top: -10px;
244}
245
246#links li:last-child {
247 position: fixed;
248 bottom: 1em;
249 width: 10em;
250}
251
252#links li:last-child a::before {
253 font-size: 1.2em;
254 position: relative;
255 top: 2px;
256}
257
258#sort {
259 padding: 0;
260 list-style-type: none;
261 opacity: 0.5;
262 display: inline-block;
263}
264
265#sort li {
266 display: inline;
267 font-size: 0.9em;
268}
269
270#sort li + li {
271 margin-left: 10px;
272}
273
274#sort a {
275 padding: 2px 2px 0;
276 vertical-align: middle;
277}
278
279#sort img {
280 vertical-align: baseline;
281}
282
283#sort img:hover {
284 cursor: pointer;
285}
286
287#display-mode {
288 float: right;
289 margin-top: 10px;
290 margin-bottom: 10px;
291 opacity: 0.5;
292}
293
294#listmode {
295 width: 16px;
296 display: inline-block;
297 text-decoration: none;
298}
299
300#listmode.tablemode {
301 background-image: url("../../_global/img/table.png");
302 background-repeat: no-repeat;
303 background-position: bottom;
304}
305
306#listmode.listmode {
307 background-image: url("../../_global/img/list.png");
308 background-repeat: no-repeat;
309 background-position: bottom;
310}
311
312#warning_message {
313 position: fixed;
314 background-color: #ff6347;
315 z-index: 1000;
316 bottom: 0;
317 left: 0;
318 width: 100%;
319 color: #000;
320}
321
322/* ==========================================================================
323 2 = Layout
324 ========================================================================== */
325
326#content {
327 margin-top: 2em;
328 min-height: 30em;
329}
330
331footer {
332 text-align: right;
333 position: relative;
334 bottom: 0;
335 right: 5em;
336 color: #999;
337 font-size: 0.8em;
338 font-style: italic;
339 z-index: 20;
340}
341
342footer a {
343 color: #999;
344 font-weight: normal;
345}
346
347.list-entries {
348 letter-spacing: -5px;
349}
350
351.listmode.entry {
352 width: 100%;
353 height: inherit;
354}
355
356.card-entry-labels {
357 position: absolute;
358 top: 100px;
359 left: -1em;
360 z-index: 90;
361 max-width: 50%;
362 padding-left: 0;
363}
364
365.card-entry-labels li {
366 margin: 10px 10px 10px auto;
367 padding: 5px 12px 5px 25px;
368 background-color: rgba(0, 0, 0, 0.6);
369 border-radius: 0 3px 3px 0;
370 color: #fff;
371 cursor: default;
372 max-height: 2em;
373 overflow: hidden;
374 text-overflow: ellipsis;
375 white-space: nowrap;
376}
377
378.card-entry-tags {
379 max-height: 2em;
380 overflow-y: hidden;
381 padding: 0;
382 margin: 0;
383}
384
385.card-entry-tags li,
386.card-entry-tags span {
387 display: inline-block;
388 margin: 0 5px;
389 padding: 5px 12px;
390 background-color: rgba(0, 0, 0, 0.6);
391 border-radius: 3px;
392 max-height: 2em;
393 overflow: hidden;
394 text-overflow: ellipsis;
395}
396
397.card-entry-tags a,
398.card-entry-labels a {
399 text-decoration: none;
400 font-weight: normal;
401 color: #fff;
402}
403
404.nav-panel-add-tag {
405 margin-top: 10px;
406}
407
408.list-entries + .results {
409 margin-bottom: 2em;
410}
411
412.reading-time,
413.created-at {
414 color: #999;
415 font-style: italic;
416 font-weight: normal;
417 font-size: 0.9em;
418}
419
420.estimatedTime small {
421 position: relative;
422 top: -1px;
423}
424
425.entry {
426 background-color: #fff;
427 letter-spacing: normal;
428 box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
429 display: inline-block;
430 width: 32%;
431 margin-bottom: 1.5em;
432 vertical-align: top;
433 margin-right: 1%;
434 position: relative;
435 overflow: hidden;
436 padding: 1.5em 1.5em 3em;
437 height: 440px;
438}
439
440.entry::before {
441 content: "";
442 width: 0;
443 height: 0;
444 border-style: solid;
445 border-color: transparent transparent #000;
446 border-width: 10px;
447 position: absolute;
448 bottom: 0.3em;
449 z-index: 10;
450 right: 1.5em;
451 -webkit-transition: all 0.5s ease;
452 -moz-transition: all 0.5s ease;
453 -ms-transition: all 0.5s ease;
454 -o-transition: all 0.5s ease;
455 transition: all 0.5s ease;
456}
457
458.entry::after {
459 content: "";
460 position: absolute;
461 height: 7px;
462 width: 100%;
463 bottom: 0;
464 left: 0;
465 background-color: #000;
466 -webkit-transition: all 0.5s ease;
467 -moz-transition: all 0.5s ease;
468 -ms-transition: all 0.5s ease;
469 -o-transition: all 0.5s ease;
470 transition: all 0.5s ease;
471}
472
473.entry:hover {
474 box-shadow: 0 3px 10px rgba(0, 0, 0, 1);
475}
476
477.entry:hover::after {
478 height: 40px;
479}
480
481.entry:hover::before {
482 bottom: 2.4em;
483}
484
485.entry:hover h2 a {
486 color: #666;
487}
488
489.entry h2 {
490 text-transform: none;
491 margin-bottom: 0;
492 line-height: 1.2;
493}
494
495.entry h2::after {
496 content: none;
497}
498
499.entry h2 a {
500 display: block;
501 text-decoration: none;
502 color: #000;
503 word-wrap: break-word;
504 -webkit-transition: all 0.5s ease;
505 -moz-transition: all 0.5s ease;
506 -ms-transition: all 0.5s ease;
507 -o-transition: all 0.5s ease;
508 transition: all 0.5s ease;
509}
510
511img.preview {
512 max-width: calc(100% + 3em);
513 left: -1.5em;
514 position: relative;
515}
516
517.entry p {
518 color: #666;
519 font-size: 0.9em;
520 line-height: 1.7;
521 margin-top: 5px;
522}
523
524.entry h2 a::first-letter {
525 text-transform: uppercase;
526}
527
528.entry:hover .tools {
529 bottom: 0;
530}
531
532.entry .tools {
533 position: absolute;
534 bottom: -50px;
535 left: 0;
536 width: 100%;
537 z-index: 10;
538 padding-right: 0.5em;
539 text-align: right;
540 -webkit-transition: all 0.5s ease;
541 -moz-transition: all 0.5s ease;
542 -ms-transition: all 0.5s ease;
543 -o-transition: all 0.5s ease;
544 transition: all 0.5s ease;
545}
546
547.entry .tools a {
548 color: #666;
549 text-decoration: none;
550 display: block;
551 padding: 0.4em;
552}
553
554.entry .tools a:hover {
555 color: #fff;
556}
557
558.entry .tools li {
559 display: inline-block;
560}
561
562.entry:nth-child(3n+1) {
563 margin-left: 0;
564}
565
566.results {
567 letter-spacing: -5px;
568 padding: 0 0 0.5em;
569}
570
571.results > * {
572 display: inline-block;
573 vertical-align: top;
574 letter-spacing: normal;
575 width: 50%;
576 text-align: right;
577}
578
579div.pagination ul {
580 text-align: right;
581}
582
583.nb-results {
584 text-align: left;
585 font-style: italic;
586 color: #999;
587 display: inline-flex;
588}
589
590div.pagination ul > * {
591 display: inline-block;
592 margin-left: 0.5em;
593}
594
595div.pagination ul a {
596 color: #999;
597 text-decoration: none;
598}
599
600div.pagination ul a:hover,
601div.pagination ul a:focus {
602 text-decoration: underline;
603}
604
605div.pagination ul .prev.disabled,
606div.pagination ul .next.disabled {
607 display: none;
608}
609
610div.pagination ul .current {
611 height: 25px;
612 padding: 4px 8px;
613 border: 1px solid #d5d5d5;
614 text-decoration: none;
615 font-weight: bold;
616 color: #000;
617 background-color: #ccc;
618}
619
620.hide {
621 display: none;
622}
623
624/* ==========================================================================
625 2.1 = "save a link" related styles
626 ========================================================================== */
627
628.popup-form {
629 background: rgba(0, 0, 0, 0.5);
630 position: absolute;
631 top: 0;
632 left: 10em;
633 z-index: 20;
634 height: 100%;
635 width: 100%;
636 margin: 0;
637 margin-top: -30% !important;
638 padding: 2em;
639 display: none;
640 border-left: 1px #eee solid;
641}
642
643.popup-form form {
644 background-color: #fff;
645 position: absolute;
646 top: 0;
647 left: 0;
648 z-index: 20;
649 border: 10px solid #000;
650 width: 400px;
651 height: 200px;
652 padding: 2em;
653}
654
655#bagit-form-form .addurl {
656 margin-left: 0;
657}
658
659.closeMessage,
660.close-button {
661 background-color: #000;
662 color: #fff;
663 font-size: 1.2em;
664 line-height: 1.6;
665 width: 1.6em;
666 height: 1.6em;
667 text-align: center;
668 text-decoration: none;
669}
670
671.closeMessage:hover,
672.closeMessage:focus,
673.close-button:hover,
674.close-button:focus {
675 background-color: #999;
676 color: #000;
677}
678
679.close-button--popup {
680 display: inline-block;
681 position: absolute;
682 top: 0;
683 right: 0;
684 font-size: 1.4em;
685}
686
687.active-current {
688 background-color: #999;
689}
690
691.active-current::after {
692 content: "";
693 width: 0;
694 height: 0;
695 position: absolute;
696 border-style: solid;
697 border-width: 10px;
698 border-color: transparent #eee transparent transparent;
699 right: 0;
700 top: 50%;
701 margin-top: -10px;
702}
703
704.opacity03 {
705 opacity: 0.3;
706}
707
708.add-to-wallabag-link-after {
709 background-color: #000;
710 color: #fff;
711 padding: 0 3px 2px;
712}
713
714a.add-to-wallabag-link-after {
715 visibility: hidden;
716 position: absolute;
717 opacity: 0;
718 transition-duration: 2s;
719 transition-timing-function: ease-out;
720}
721
722#article article a:hover + a.add-to-wallabag-link-after,
723a.add-to-wallabag-link-after:hover {
724 opacity: 1;
725 visibility: visible;
726 transition-duration: 0.3s;
727 transition-timing-function: ease-in;
728}
729
730a.add-to-wallabag-link-after::after {
731 content: "w";
732}
733
734#add-link-result {
735 font-weight: bold;
736 font-size: 0.9em;
737}
738
739.btn-clickable {
740 cursor: pointer;
741}
742
743/* ==========================================================================
744 3 = Pictos
745 ========================================================================== */
746
747@font-face {
748 font-family: icomoon;
749 src: url("../fonts/IcoMoon-Free.ttf");
750 font-weight: normal;
751 font-style: normal;
752}
753
754@font-face {
755 font-family: 'Material Icons';
756 font-style: normal;
757 font-weight: 400;
758 src: url(../fonts/MaterialIcons-Regular.eot);
759
760 /* For IE6-8 */
761 src: local("Material Icons"), local("MaterialIcons-Regular"), url(../fonts/MaterialIcons-Regular.woff2) format("woff2"), url(../fonts/MaterialIcons-Regular.woff) format("woff"), url(../fonts/MaterialIcons-Regular.ttf) format("truetype");
762}
763
764.material-icons {
765 font-family: 'Material Icons';
766 font-weight: normal;
767 font-style: normal;
768 font-size: 1em; /* Preferred icon size */
769 width: 1em;
770 height: 1em;
771 display: inline-block;
772 line-height: 1;
773 text-transform: none;
774 letter-spacing: normal;
775 word-wrap: normal;
776 white-space: nowrap;
777 direction: ltr;
778
779 /* Support for all WebKit browsers. */
780 -webkit-font-smoothing: antialiased;
781
782 /* Support for Safari and Chrome. */
783 text-rendering: optimizeLegibility;
784
785 /* Support for Firefox. */
786 -moz-osx-font-smoothing: grayscale;
787
788 /* Support for IE. */
789 font-feature-settings: 'liga';
790}
791
792.material-icons.md-18 { font-size: 18px; }
793.material-icons.md-24 { font-size: 24px; }
794.material-icons.md-36 { font-size: 36px; }
795.material-icons.md-48 { font-size: 48px; }
796
797.icon span,
798.icon-image span {
799 position: absolute;
800 top: -9999px;
801}
802
803[class^="icon-"]::before,
804[class*=" icon-"]::before {
805 font-family: icomoon;
806 speak: none;
807 font-style: normal;
808 font-weight: normal;
809 font-variant: normal;
810 text-transform: none;
811 line-height: 1;
812
813 /* Enable Ligatures ================ */
814 letter-spacing: 0;
815 -webkit-font-feature-settings: "liga";
816 -moz-font-feature-settings: "liga=1";
817 -moz-font-feature-settings: "liga";
818 -ms-font-feature-settings: "liga" 1;
819 -o-font-feature-settings: "liga";
820 font-feature-settings: "liga";
821
822 /* Better Font Rendering =========== */
823 -webkit-font-smoothing: antialiased;
824 -moz-osx-font-smoothing: grayscale;
825}
826
827.icon-flattr::before {
828 content: "\ead4";
829}
830
831.icon-mail::before {
832 content: "\ea86";
833}
834
835.icon-up-open::before {
836 content: "\e80b";
837}
838
839.icon-star::before {
840 content: "\e9d9";
841}
842
843.icon-check::before {
844 content: "\ea10";
845}
846
847.icon-link::before {
848 content: "\e9cb";
849}
850
851.icon-reply::before {
852 content: "\e806";
853}
854
855.icon-menu::before {
856 content: "\e9bd";
857}
858
859.icon-clock::before {
860 content: "\e803";
861}
862
863.icon-twitter::before {
864 content: "\ea96";
865}
866
867.icon-down-open::before {
868 content: "\e809";
869}
870
871.icon-trash::before {
872 content: "\e9ac";
873}
874
875.icon-delete::before {
876 content: "\ea0d";
877}
878
879.icon-power::before {
880 content: "\ea14";
881}
882
883.icon-arrow-up-thick::before {
884 content: "\ea3a";
885}
886
887.icon-rss::before {
888 content: "\e808";
889}
890
891.icon-print::before {
892 content: "\e954";
893}
894
895.icon-reload::before {
896 content: "\ea2e";
897}
898
899.icon-price-tags::before {
900 content: "\e936";
901}
902
903.icon-eye::before {
904 content: "\e9ce";
905}
906
907.icon-no-eye::before {
908 content: "\e9d1";
909}
910
911.icon-calendar::before {
912 content: "\e953";
913}
914
915.icon-pencil2::before {
916 content: "\e906";
917}
918
919.icon-users::before {
920 content: "\e972";
921}
922
923.icon-time::before {
924 content: "\e952";
925}
926
927/* .icon-image class, for image-based icons
928 ========================================================================== */
929
930.icon-image {
931 background-size: 16px 16px;
932 background-repeat: no-repeat;
933 background-position: center;
934 padding-right: 1em !important;
935 padding-left: 1em !important;
936}
937
938/* Carrot (http://carrot.org) */
939.icon-image--carrot {
940 background-image: url("../../_global/img/icons/carrot-icon--white.png");
941}
942
943/* Diaspora */
944.icon-image--diaspora {
945 background-image: url("../../_global/img/icons/diaspora-icon--black.png");
946}
947
948/* Unmark.it */
949.icon-image--unmark {
950 background-image: url("../../_global/img/icons/unmark-icon--black.png");
951}
952
953/* shaarli */
954.icon-image--shaarli {
955 background-image: url("../../_global/img/icons/shaarli.png");
956}
957
958/* scuttle */
959.icon-image--scuttle {
960 background-image: url("../../_global/img/icons/scuttle.png");
961}
962
963/* ==========================================================================
964 Icon selected
965 ========================================================================== */
966
967.icon-star.fav::before {
968 color: #fff;
969}
970
971.icon-check.archive::before {
972 color: #fff;
973}
974
975/* ==========================================================================
976 4 = Messages
977 ========================================================================== */
978
979.messages {
980 text-align: left;
981 margin-top: 1em;
982}
983
984.messages > * {
985 display: inline-block;
986}
987
988.warning {
989 font-weight: bold;
990 display: block;
991 width: 100%;
992}
993
994.more-info {
995 font-size: 0.85em;
996 line-height: 1.5;
997 color: #aaa;
998}
999
1000.more-info a {
1001 color: #aaa;
1002}
1003
1004/* ==========================================================================
1005 5 = Article
1006 ========================================================================== */
1007
1008#article {
1009 width: 70%;
1010 margin-bottom: 3em;
1011 text-align: justify;
1012}
1013
1014#article .tags {
1015 margin-bottom: 1em;
1016}
1017
1018#article i {
1019 font-style: normal;
1020}
1021
1022blockquote {
1023 border: 1px solid #999;
1024 background-color: #fff;
1025 padding: 1em;
1026 margin: 0;
1027}
1028
1029#article h1 {
1030 text-align: left;
1031}
1032
1033#article h2,
1034#article h3,
1035#article h4 {
1036 text-transform: none;
1037}
1038
1039#article h2::after {
1040 content: none;
1041}
1042
1043.topPosF {
1044 position: fixed;
1045 right: 20%;
1046 bottom: 2em;
1047 font-size: 1.5em;
1048}
1049
1050#article_toolbar {
1051 margin-bottom: 1em;
1052}
1053
1054#article_toolbar li {
1055 display: inline-block;
1056 margin: 3px auto;
1057}
1058
1059#article_toolbar a {
1060 background-color: #000;
1061 padding: 0.3em 0.5em 0.2em;
1062 color: #fff;
1063 text-decoration: none;
1064}
1065
1066#article_toolbar a:hover,
1067#article_toolbar a:focus {
1068 background-color: #999;
1069}
1070
1071#nav-btn-add-tag {
1072 cursor: pointer;
1073}
1074
1075.shaarli::before {
1076 content: "*";
1077}
1078
1079.scuttle::before {
1080 content: "*";
1081}
1082
1083.return {
1084 text-decoration: none;
1085 margin-top: 1em;
1086 display: block;
1087}
1088
1089.return::before {
1090 margin-right: 0.5em;
1091}
1092
1093.notags {
1094 font-style: italic;
1095 color: #999;
1096}
1097
1098.icon-rss {
1099 background-color: #000;
1100 color: #fff;
1101 padding: 0.2em 0.5em;
1102}
1103
1104.icon-rss::before {
1105 position: relative;
1106 top: 2px;
1107}
1108
1109.list-tags li {
1110 margin-bottom: 0.5em;
1111}
1112
1113.list-tags .icon-rss:hover,
1114.list-tags .icon-rss:focus {
1115 background-color: #fff;
1116 color: #000;
1117 text-decoration: none;
1118}
1119
1120.list-tags a {
1121 text-decoration: none;
1122}
1123
1124.list-tags a:hover,
1125.list-tags a:focus {
1126 text-decoration: underline;
1127}
1128
1129pre code {
1130 font-family: "Courier New", Courier, monospace;
1131}
1132
1133#filters {
1134 position: fixed;
1135 width: 20%;
1136 height: 100%;
1137 top: 0;
1138 right: 0;
1139 background-color: #fff;
1140 padding: 15px;
1141 padding-right: 30px;
1142 padding-top: 30px;
1143 border-left: 1px #333 solid;
1144 z-index: 12;
1145 min-width: 300px;
1146}
1147
1148#filters form .filter-group {
1149 margin: 5px;
1150}
1151
1152#download-form {
1153 position: fixed;
1154 width: 10%;
1155 height: 100%;
1156 top: 0;
1157 right: 0;
1158 background-color: #fff;
1159 padding: 15px;
1160 padding-right: 30px;
1161 padding-top: 30px;
1162 border-left: 1px #333 solid;
1163 z-index: 12;
1164 min-width: 200px;
1165}
1166
1167#download-form li {
1168 display: block;
1169 padding: 0.5em 2em 0.5em 1em;
1170 color: #fff;
1171 position: relative;
1172 text-transform: uppercase;
1173 text-decoration: none;
1174 font-weight: 400;
1175 font-family: PT Sans, sans-serif;
1176 transition: all 0.5s ease;
1177}
1178
1179/* ==========================================================================
1180 6 = Media Queries
1181 ========================================================================== */
1182
1183@media screen and (max-width: 1050px) {
1184 .entry {
1185 width: 49%;
1186 }
1187
1188 .entry:nth-child(3n+1) {
1189 margin-left: 1.5%;
1190 }
1191
1192 .entry:nth-child(2n+1) {
1193 margin-left: 0;
1194 }
1195}
1196
1197@media screen and (max-width: 900px) {
1198 #article {
1199 width: 80%;
1200 }
1201
1202 .topPosF {
1203 right: 2.5em;
1204 }
1205}
1206
1207@media screen and (max-width: 700px) {
1208 .entry {
1209 width: 100%;
1210 margin-left: 0;
1211 }
1212
1213 #display-mode {
1214 display: none;
1215 }
1216}
1217
1218@media screen and (max-height: 770px) {
1219 .menu.users,
1220 .menu.internal,
1221 .menu.developer {
1222 display: none;
1223 }
1224}
1225
1226@media screen and (max-width: 500px) {
1227 .entry {
1228 width: 100%;
1229 margin-left: 0;
1230 }
1231
1232 body > header {
1233 background-color: #333;
1234 position: fixed;
1235 top: 0;
1236 width: 100%;
1237 height: 3em;
1238 z-index: 11;
1239 }
1240
1241 #links li:last-child {
1242 position: static;
1243 width: auto;
1244 }
1245
1246 #links li:last-child a::before {
1247 content: none;
1248 }
1249
1250 .logo {
1251 width: 1.25em;
1252 height: 1.25em;
1253 left: 0;
1254 top: 0;
1255 }
1256
1257 .login > header {
1258 position: static;
1259 }
1260
1261 .login form {
1262 width: 100%;
1263 position: static;
1264 margin-left: 0;
1265 }
1266
1267 .login .logo {
1268 height: auto;
1269 top: 0.5em;
1270 width: 75px;
1271 margin-left: -37.5px;
1272 }
1273
1274 .desktopHide {
1275 display: block;
1276 position: fixed;
1277 z-index: 20;
1278 top: 0;
1279 right: 0;
1280 border: 0;
1281 width: 2.5em;
1282 height: 2.5em;
1283 cursor: pointer;
1284 background-color: #999;
1285 font-size: 1.2em;
1286 }
1287
1288 .desktopHide:hover,
1289 .desktopHide:focus {
1290 background-color: #fff;
1291 }
1292
1293 #links {
1294 display: none;
1295 width: 100%;
1296 height: auto;
1297 padding-top: 3em;
1298 }
1299
1300 #links.menu--open {
1301 display: block;
1302 }
1303
1304 footer {
1305 position: static;
1306 margin-right: 3em;
1307 }
1308
1309 #main {
1310 margin-left: 1.5em;
1311 padding-right: 1.5em;
1312 position: static;
1313 margin-top: 3em;
1314 }
1315
1316 .card-entry-labels {
1317 display: none;
1318 }
1319
1320 #article_toolbar .topPosF {
1321 display: none;
1322 }
1323
1324 #article {
1325 width: 100%;
1326 }
1327
1328 #article h1 {
1329 font-size: 1.5em;
1330 }
1331
1332 #article_toolbar a {
1333 padding: 0.3em 0.4em 0.2em;
1334 }
1335
1336 #display-mode {
1337 display: none;
1338 }
1339
1340 .popup-form,
1341 #bagit-form,
1342 #search-form {
1343 left: 0;
1344 width: 100%;
1345 border-left: none;
1346 }
1347
1348 .popup-form form,
1349 #bagit-form form,
1350 #search-form form {
1351 width: 100%;
1352 }
1353}
diff --git a/app/Resources/static/themes/baggy/css/media_queries.scss b/app/Resources/static/themes/baggy/css/media_queries.scss
deleted file mode 100755
index a08f369f..00000000
--- a/app/Resources/static/themes/baggy/css/media_queries.scss
+++ /dev/null
@@ -1,178 +0,0 @@
1
2@media screen and (max-width: 1050px) {
3 .entry {
4 width: 49%;
5 }
6
7 .entry:nth-child(3n+1) {
8 margin-left: 1.5%;
9 }
10
11 .entry:nth-child(2n+1) {
12 margin-left: 0;
13 }
14}
15
16@media screen and (max-width: 900px) {
17 #article {
18 width: 80%;
19 }
20
21 .topPosF {
22 right: 2.5em;
23 }
24}
25
26@media screen and (max-width: 700px) {
27 .entry {
28 width: 100%;
29 margin-left: 0;
30 }
31
32 #display-mode {
33 display: none;
34 }
35}
36
37@media screen and (max-height: 770px) {
38 .menu.users,
39 .menu.internal,
40 .menu.developer {
41 display: none;
42 }
43}
44
45@media screen and (max-width: 500px) {
46 .entry {
47 width: 100%;
48 margin-left: 0;
49 }
50
51 body > header {
52 background-color: #333;
53 position: fixed;
54 top: 0;
55 width: 100%;
56 height: 3em;
57 z-index: 11;
58 }
59
60 #links li:last-child {
61 position: static;
62 width: auto;
63 }
64
65 #links li:last-child a::before {
66 content: none;
67 }
68
69 .logo {
70 width: 1.25em;
71 height: 1.25em;
72 left: 0;
73 top: 0;
74 }
75
76 .login > header {
77 position: static;
78 }
79
80 .login form {
81 width: 100%;
82 position: static;
83 margin-left: 0;
84 }
85
86 .login .logo {
87 height: auto;
88 top: 0.5em;
89 width: 75px;
90 margin-left: -37.5px;
91 }
92
93 .desktopHide {
94 display: block;
95 position: fixed;
96 z-index: 20;
97 top: 0;
98 right: 0;
99 border: 0;
100 width: 2.5em;
101 height: 2.5em;
102 cursor: pointer;
103 background-color: #999;
104 font-size: 1.2em;
105 }
106
107 .desktopHide:hover,
108 .desktopHide:focus {
109 background-color: #fff;
110 }
111
112 #links {
113 display: none;
114 width: 100%;
115 height: auto;
116 padding-top: 3em;
117 }
118
119 #links.menu--open {
120 display: block;
121 }
122
123 footer {
124 position: static;
125 margin-right: 3em;
126 }
127
128 #main {
129 margin-left: 1.5em;
130 padding-right: 1.5em;
131 position: static;
132 margin-top: 3em;
133 }
134
135 .card-entry-labels {
136 display: none;
137 }
138
139 #article_toolbar .topPosF {
140 display: none;
141 }
142
143 #article {
144 width: 100%;
145 }
146
147 #article h1 {
148 font-size: 1.5em;
149 }
150
151 #article_toolbar a {
152 padding: 0.3em 0.4em 0.2em;
153 }
154
155 #display-mode {
156 display: none;
157 }
158
159 .popup-form,
160 #bagit-form,
161 #search-form {
162 left: 0;
163 width: 100%;
164 border-left: none;
165 }
166
167 .popup-form form,
168 #bagit-form form,
169 #search-form form {
170 width: 100%;
171 }
172}
173
174@media only print {
175 header h1.logo {
176 display: none;
177 }
178}
diff --git a/app/Resources/static/themes/baggy/css/messages.scss b/app/Resources/static/themes/baggy/css/messages.scss
deleted file mode 100755
index a388419e..00000000
--- a/app/Resources/static/themes/baggy/css/messages.scss
+++ /dev/null
@@ -1,50 +0,0 @@
1/* ==========================================================================
2 Messages
3 ========================================================================== */
4
5.messages {
6 text-align: left;
7 width: 60%;
8 margin: auto 17%;
9
10 > * {
11 display: inline-block;
12 }
13
14 .install {
15 text-align: left;
16
17 &.error {
18 border: 1px solid #c42608;
19 color: #c00 !important;
20 background: #fff0ef;
21 }
22
23 &.notice {
24 border: 1px solid #ebcd41;
25 color: #000;
26 background: #fffcd3;
27 }
28
29 &.success {
30 border: 1px solid #6dc70c;
31 background: #e0fbcc !important;
32 }
33 }
34}
35
36.warning {
37 font-weight: bold;
38 display: block;
39 width: 100%;
40}
41
42.more-info {
43 font-size: 0.85em;
44 line-height: 1.5;
45 color: #aaa;
46
47 a {
48 color: #aaa;
49 }
50}
diff --git a/app/Resources/static/themes/baggy/css/pictos.scss b/app/Resources/static/themes/baggy/css/pictos.scss
deleted file mode 100644
index b6ebf311..00000000
--- a/app/Resources/static/themes/baggy/css/pictos.scss
+++ /dev/null
@@ -1,210 +0,0 @@
1/* ==========================================================================
2 Pictos
3 ========================================================================== */
4
5@font-face {
6 font-family: icomoon;
7 src: url('~icomoon-free-npm/Font/IcoMoon-Free.ttf');
8 font-weight: normal;
9 font-style: normal;
10}
11
12.material-icons {
13 font-family: 'Material Icons';
14 font-weight: normal;
15 font-style: normal;
16 font-size: 1em; /* Preferred icon size */
17 width: 1em;
18 height: 1em;
19 display: inline-block;
20 line-height: 1;
21 text-transform: none;
22 letter-spacing: normal;
23 word-wrap: normal;
24 white-space: nowrap;
25 direction: ltr;
26
27 /* Support for all WebKit browsers. */
28 -webkit-font-smoothing: antialiased;
29
30 /* Support for Safari and Chrome. */
31 text-rendering: optimizeLegibility;
32
33 /* Support for Firefox. */
34 -moz-osx-font-smoothing: grayscale;
35
36 /* Support for IE. */
37 font-feature-settings: 'liga';
38
39 .md-18 { font-size: 18px; }
40 .md-24 { font-size: 24px; }
41 .md-36 { font-size: 36px; }
42 .md-48 { font-size: 48px; }
43
44 .vertical-align-middle {
45 vertical-align: middle !important;
46 }
47}
48
49.icon span,
50.icon-image span {
51 position: absolute;
52 top: -9999px;
53}
54
55[class^="icon-"]::before,
56[class*=" icon-"]::before {
57 font-family: icomoon;
58 speak: none;
59 font-style: normal;
60 font-weight: normal;
61 font-variant: normal;
62 text-transform: none;
63 line-height: 1;
64
65 /* Enable Ligatures ================ */
66 letter-spacing: 0;
67 -webkit-font-feature-settings: "liga";
68 -moz-font-feature-settings: "liga=1";
69 -moz-font-feature-settings: "liga";
70 -ms-font-feature-settings: "liga" 1;
71 -o-font-feature-settings: "liga";
72 font-feature-settings: "liga";
73
74 /* Better Font Rendering =========== */
75 -webkit-font-smoothing: antialiased;
76 -moz-osx-font-smoothing: grayscale;
77}
78
79.icon-flattr::before {
80 content: "\ead4";
81}
82
83.icon-mail::before {
84 content: "\ea86";
85}
86
87.icon-up-open::before {
88 content: "\e80b";
89}
90
91.icon-star::before {
92 content: "\e9d9";
93}
94
95.icon-check::before {
96 content: "\ea10";
97}
98
99.icon-link::before {
100 content: "\e9cb";
101}
102
103.icon-reply::before {
104 content: "\e806";
105}
106
107.icon-menu::before {
108 content: "\e9bd";
109}
110
111.icon-clock::before {
112 content: "\e803";
113}
114
115.icon-twitter::before {
116 content: "\ea96";
117}
118
119.icon-down-open::before {
120 content: "\e809";
121}
122
123.icon-trash::before {
124 content: "\e9ac";
125}
126
127.icon-delete::before {
128 content: "\ea0d";
129}
130
131.icon-power::before {
132 content: "\ea14";
133}
134
135.icon-arrow-up-thick::before {
136 content: "\ea3a";
137}
138
139.icon-feed::before {
140 content: "\e808";
141}
142
143.icon-print::before {
144 content: "\e954";
145}
146
147.icon-reload::before {
148 content: "\ea2e";
149}
150
151.icon-price-tags::before {
152 content: "\e936";
153}
154
155.icon-eye::before {
156 content: "\e9ce";
157}
158
159.icon-no-eye::before {
160 content: "\e9d1";
161}
162
163.icon-calendar::before {
164 content: "\e953";
165}
166
167.icon-time::before {
168 content: "\e952";
169}
170
171/* .icon-image class, for image-based icons
172 ========================================================================== */
173
174.icon-image {
175 background: no-repeat center/80%;
176 padding-right: 1em !important;
177 padding-left: 1em !important;
178}
179
180/* Carrot (http://carrot.org) */
181.icon-image--carrot {
182 background-image: url("../../_global/img/icons/carrot-icon--white.png");
183}
184
185/* Diaspora */
186.icon-image--diaspora {
187 background-image: url("../../_global/img/icons/Diaspora-asterisk.svg");
188}
189
190/* Unmark.it */
191.icon-image--unmark {
192 background-image: url("../../_global/img/icons/unmark-icon--black.png");
193}
194
195/* shaarli */
196.icon-image--shaarli {
197 background-image: url("../../_global/img/icons/shaarli.png");
198}
199
200/* ==========================================================================
201 Icon selected
202 ========================================================================== */
203
204.icon-star.fav::before {
205 color: #fff;
206}
207
208.icon-check.archive::before {
209 color: #fff;
210}
diff --git a/app/Resources/static/themes/baggy/css/print.scss b/app/Resources/static/themes/baggy/css/print.scss
deleted file mode 100755
index a63f62e9..00000000
--- a/app/Resources/static/themes/baggy/css/print.scss
+++ /dev/null
@@ -1,63 +0,0 @@
1@media print {
2 /* ### Layout ### */
3
4 body {
5 font-family: Serif;
6 background-color: #fff;
7 }
8
9 @page {
10 margin: 1cm;
11 }
12
13 img {
14 max-width: 100% !important;
15 }
16
17 /* ### Content ### */
18
19 /* Hide useless blocks */
20 body > .logo,
21 #article_toolbar,
22 #links,
23 #sort,
24 body > footer,
25 .top_link,
26 div.tools,
27 header div,
28 .messages,
29 .entrie + .results,
30 #article .mbm a,
31 #article-informations {
32 display: none !important;
33 }
34
35 article {
36 border: none !important;
37 }
38
39 /* Add URL after links */
40 .vieworiginal a::after {
41 content: " (" attr(href) ")";
42 }
43
44 /* Add explanation after abbr */
45 abbr[title]::after {
46 content: " (" attr(title) ")";
47 }
48
49 /* Change border on current pager item */
50 .pagination span.current {
51 border-style: dashed;
52 }
53
54 #main {
55 width: 100%;
56 margin: 0;
57 padding: 0;
58 }
59
60 #article {
61 width: 100%;
62 }
63}
diff --git a/app/Resources/static/themes/baggy/css/ratatouille.scss b/app/Resources/static/themes/baggy/css/ratatouille.scss
deleted file mode 100644
index a6167f34..00000000
--- a/app/Resources/static/themes/baggy/css/ratatouille.scss
+++ /dev/null
@@ -1,226 +0,0 @@
1/*
2 Ratatouille mini Framework css by Thomas LEBEAU
3 Base on KNACSS => www.KNACSS.com (2013-10) @author: Raphael Goetter, Alsacreations
4 and normalize.css
5*/
6
7* {
8 -webkit-box-sizing: border-box;
9 -moz-box-sizing: border-box;
10 box-sizing: border-box;
11}
12
13html {
14 font-family: sans-serif; /* 1 */
15 -ms-text-size-adjust: 100%; /* 2 */
16 -webkit-text-size-adjust: 100%; /* 2 */
17}
18
19body {
20 font-size: 1em;
21 line-height: 1.5;
22 margin: 0;
23}
24
25/* ==========================================================================
26 Mise en forme
27 ========================================================================== */
28
29h1:first-child,
30h2:first-child,
31h3:first-child,
32h4:first-child,
33h5:first-child,
34h6:first-child,
35p:first-child,
36ul:first-child,
37ol:first-child,
38dl:first-child {
39 margin-top: 0;
40}
41
42code,
43kbd,
44pre,
45samp {
46 font-family: monospace, serif;
47}
48
49pre {
50 white-space: pre-wrap;
51}
52
53.upper {
54 text-transform: uppercase;
55}
56
57.bold {
58 font-weight: bold;
59}
60
61.inner {
62 margin: 0 auto;
63 max-width: 61.25em; /* 980px */
64}
65
66table,
67img,
68figure {
69 max-width: 100%;
70 height: auto;
71}
72
73iframe {
74 max-width: 100%;
75}
76
77.fl {
78 float: left;
79}
80
81.fr {
82 float: right;
83}
84
85table {
86 border-collapse: collapse;
87}
88
89figure {
90 margin: 0;
91}
92
93button,
94input,
95select,
96textarea {
97 font-family: inherit;
98 font-size: 100%;
99 margin: 0;
100}
101
102input[type="search"] {
103 -webkit-appearance: textfield;
104}
105
106/* ==========================================================================
107 Mise en page
108 ========================================================================== */
109
110.dib {
111 display: inline-block;
112 vertical-align: middle;
113}
114
115.dnone {
116 display: none;
117}
118
119.dtable {
120 display: table;
121}
122
123.dtable > * {
124 display: table-row;
125}
126
127.dtable > * > * {
128 display: table-cell;
129}
130
131.element-invisible {
132 border: 0;
133 clip: rect(0 0 0 0);
134 height: 1px;
135 margin: -1px;
136 overflow: hidden;
137 padding: 0;
138 position: absolute;
139 width: 1px;
140}
141
142.small {
143 font-size: 0.8em;
144}
145
146.big {
147 font-size: 1.2em;
148}
149
150/* Width */
151
152.w100 {
153 width: 100%;
154}
155
156.w90 {
157 width: 90%;
158}
159
160.w80 {
161 width: 80%;
162}
163
164.w70 {
165 width: 70%;
166}
167
168.w60 {
169 width: 60%;
170}
171
172.w50 {
173 width: 50%;
174}
175
176.w40 {
177 width: 40%;
178}
179
180.w30 {
181 width: 30%;
182}
183
184.w20 {
185 width: 20%;
186}
187
188.w10 {
189 width: 10%;
190}
191
192/* ==========================================================================
193 Internet Explorer
194 ========================================================================== */
195
196/* IE8 and IE9 */
197
198article,
199aside,
200details,
201figcaption,
202figure,
203footer,
204header,
205hgroup,
206main,
207nav,
208section,
209summary {
210 display: block;
211}
212
213/* IE8 and IE9 */
214
215audio,
216canvas,
217video {
218 display: inline-block;
219}
220
221@media screen and (-webkit-min-device-pixel-ratio: 0) {
222 select {
223 -webkit-appearance: none;
224 border-radius: 0;
225 }
226}
diff --git a/app/Resources/static/themes/baggy/css/save.scss b/app/Resources/static/themes/baggy/css/save.scss
deleted file mode 100644
index ade77b40..00000000
--- a/app/Resources/static/themes/baggy/css/save.scss
+++ /dev/null
@@ -1,115 +0,0 @@
1/* ==========================================================================
2 "save a link" related styles
3 ========================================================================== */
4
5.popup-form {
6 background: rgba(0, 0, 0, 0.5);
7 position: absolute;
8 top: 0;
9 left: 10em;
10 z-index: 20;
11 height: 100%;
12 width: 100%;
13 margin: 0;
14 margin-top: -30% !important;
15 padding: 2em;
16 display: none;
17 border-left: 1px #eee solid;
18
19 form {
20 background-color: #fff;
21 position: absolute;
22 top: 0;
23 left: 0;
24 z-index: 20;
25 border: 10px solid #000;
26 width: 400px;
27 height: 200px;
28 padding: 2em;
29 }
30}
31
32#bagit-form-form .addurl {
33 margin-left: 0;
34}
35
36.closeMessage,
37.close-button {
38 background-color: #000;
39 color: #fff;
40 font-size: 1.2em;
41 line-height: 1.6;
42 width: 1.6em;
43 height: 1.6em;
44 text-align: center;
45 text-decoration: none;
46
47 &:hover,
48 &:focus {
49 background-color: #999;
50 color: #000;
51 }
52}
53
54.close-button--popup {
55 display: inline-block;
56 position: absolute;
57 top: 0;
58 right: 0;
59 font-size: 1.4em;
60}
61
62.active-current {
63 background-color: #999;
64
65 &::after {
66 content: "";
67 width: 0;
68 height: 0;
69 position: absolute;
70 border: 10px solid transparent;
71 border-right-color: #eee;
72 right: 0;
73 top: 50%;
74 margin-top: -10px;
75 }
76}
77
78.opacity03 {
79 opacity: 0.3;
80}
81
82.add-to-wallabag-link-after {
83 background-color: #000;
84 color: #fff;
85 padding: 0 3px 2px;
86}
87
88a.add-to-wallabag-link-after {
89 visibility: hidden;
90 position: absolute;
91 opacity: 0;
92 transition-duration: 2s;
93 transition-timing-function: ease-out;
94}
95
96#article article a:hover + a.add-to-wallabag-link-after,
97a.add-to-wallabag-link-after:hover {
98 opacity: 1;
99 visibility: visible;
100 transition-duration: 0.3s;
101 transition-timing-function: ease-in;
102}
103
104a.add-to-wallabag-link-after::after {
105 content: "w";
106}
107
108#add-link-result {
109 font-weight: bold;
110 font-size: 0.9em;
111}
112
113.btn-clickable {
114 cursor: pointer;
115}
diff --git a/app/Resources/static/themes/baggy/img/blank.png b/app/Resources/static/themes/baggy/img/blank.png
deleted file mode 100755
index 63e09844..00000000
--- a/app/Resources/static/themes/baggy/img/blank.png
+++ /dev/null
Binary files differ
diff --git a/app/Resources/static/themes/baggy/img/down.png b/app/Resources/static/themes/baggy/img/down.png
deleted file mode 100644
index b9d536a7..00000000
--- a/app/Resources/static/themes/baggy/img/down.png
+++ /dev/null
Binary files differ
diff --git a/app/Resources/static/themes/baggy/img/list.png b/app/Resources/static/themes/baggy/img/list.png
deleted file mode 100755
index bd5aff5a..00000000
--- a/app/Resources/static/themes/baggy/img/list.png
+++ /dev/null
Binary files differ
diff --git a/app/Resources/static/themes/baggy/img/table.png b/app/Resources/static/themes/baggy/img/table.png
deleted file mode 100755
index 859c4cd8..00000000
--- a/app/Resources/static/themes/baggy/img/table.png
+++ /dev/null
Binary files differ
diff --git a/app/Resources/static/themes/baggy/img/top.png b/app/Resources/static/themes/baggy/img/top.png
deleted file mode 100644
index 954a8c0a..00000000
--- a/app/Resources/static/themes/baggy/img/top.png
+++ /dev/null
Binary files differ
diff --git a/app/Resources/static/themes/baggy/index.js b/app/Resources/static/themes/baggy/index.js
deleted file mode 100755
index 39ad49aa..00000000
--- a/app/Resources/static/themes/baggy/index.js
+++ /dev/null
@@ -1,266 +0,0 @@
1import $ from 'jquery';
2
3/* Global imports */
4import '../_global/index';
5
6/* Shortcuts */
7import './js/shortcuts/main';
8import './js/shortcuts/entry';
9
10/* Tools */
11import toggleSaveLinkForm from './js/uiTools';
12
13/* Theme style */
14import './css/index.scss';
15
16$(document).ready(() => {
17 /* ==========================================================================
18 Menu
19 ========================================================================== */
20
21 $('#menu').click(() => {
22 $('#links').toggleClass('menu--open');
23 const content = $('#content');
24 if (content.hasClass('opacity03')) {
25 content.removeClass('opacity03');
26 }
27 });
28
29 /* ==========================================================================
30 Add tag panel
31 ========================================================================== */
32
33 $('#nav-btn-add-tag').on('click', () => {
34 $('.baggy-add-tag').toggle(100);
35 $('.nav-panel-menu').addClass('hidden');
36 $('#tag_label').focus();
37 return false;
38 });
39
40 /**
41 * Filters & Export
42 */
43 // no display if filters not available
44 if ($('div').is('#filters')) {
45 $('#button_filters').show();
46 $('#clear_form_filters').on('click', () => {
47 $('#filters input').val('');
48 $('#filters :checked').removeAttr('checked');
49 return false;
50 });
51 }
52
53 /**
54 * Close window after adding entry if popup
55 */
56 const currentUrl = window.location.href;
57 if (currentUrl.match('&closewin=true')) {
58 window.close();
59 }
60
61 /**
62 if ($('article').size() > 0) {
63 const waypoint = new Waypoint({
64 element: $('.wallabag-title').get(0),
65 handler: (direction) => {
66 console.log(direction);
67 if (direction === 'down') {
68 $('aside.tags').fadeIn('slow');
69 } else {
70 $('aside.tags').fadeOut('slow');
71 }
72 },
73 offset: 250,
74 });
75 }
76 */
77
78 /**
79 * Tags autocomplete
80 */
81 /**
82 * Not working on v2
83 *
84
85 $('#value').bind('keydown', (event) => {
86 if (event.keyCode === $.ui.keyCode.TAB && $(this).data('ui-autocomplete').menu.active) {
87 event.preventDefault();
88 }
89 }).autocomplete({
90 source: function source(request, response) {
91 $.getJSON('./?view=tags', {
92 term: extractLast(request.term),
93 //id: $(':hidden#entry_id').val()
94 }, response);
95 },
96 search: function search() {
97 // custom minLength
98 const term = extractLast(this.value);
99 return term.length >= 1;
100 },
101 focus: function focus() {
102 // prevent value inserted on focus
103 return false;
104 },
105 select: function select(event, ui) {
106 const terms = split(this.value);
107 // remove the current input
108 terms.pop();
109 // add the selected item
110 terms.push(ui.item.value);
111 // add placeholder to get the comma-and-space at the end
112 terms.push('');
113 this.value = terms.join(', ');
114 return false;
115 },
116 });
117 */
118
119 //---------------------------------------------------------------------------
120 // Close the message box when the user clicks the close icon
121 //---------------------------------------------------------------------------
122 $('a.closeMessage').on('click', () => {
123 $(this).parents('div.messages').slideUp(300, () => { $(this).remove(); });
124 return false;
125 });
126
127 $('#search-form').hide();
128 $('#bagit-form').hide();
129 $('#filters').hide();
130 $('#download-form').hide();
131
132 //---------------------------------------------------------------------------
133 // Toggle the 'Search' popup in the sidebar
134 //---------------------------------------------------------------------------
135 function toggleSearch() {
136 $('#search-form').toggle();
137 $('#search').toggleClass('current');
138 $('#search').toggleClass('active-current');
139 $('#search-arrow').toggleClass('arrow-down');
140 if ($('#search').hasClass('current')) {
141 $('#content').addClass('opacity03');
142 } else {
143 $('#content').removeClass('opacity03');
144 }
145 }
146
147 //---------------------------------------------------------------------------
148 // Toggle the 'Filter' popup on entries list
149 //---------------------------------------------------------------------------
150 function toggleFilter() {
151 $('#filters').toggle();
152 }
153
154 //---------------------------------------------------------------------------
155 // Toggle the 'Download' popup on entries list
156 //---------------------------------------------------------------------------
157 function toggleDownload() {
158 $('#download-form').toggle();
159 }
160
161 //---------------------------------------------------------------------------
162 // Toggle the 'Save a Link' popup in the sidebar
163 //---------------------------------------------------------------------------
164 function toggleBagit() {
165 $('#bagit-form').toggle();
166 $('#bagit').toggleClass('current');
167 $('#bagit').toggleClass('active-current');
168 $('#bagit-arrow').toggleClass('arrow-down');
169 if ($('#bagit').hasClass('current')) {
170 $('#content').addClass('opacity03');
171 } else {
172 $('#content').removeClass('opacity03');
173 }
174 }
175
176 //---------------------------------------------------------------------------
177 // Close all #links popups in the sidebar
178 //---------------------------------------------------------------------------
179 function closePopups() {
180 $('#links .messages').hide();
181 $('#links > li > a').removeClass('active-current');
182 $('#links > li > a').removeClass('current');
183 $('[id$=-arrow]').removeClass('arrow-down');
184 $('#content').removeClass('opacity03');
185 }
186
187 $('#search').click(() => {
188 closePopups();
189 toggleSearch();
190 $('#searchfield').focus();
191 });
192
193 $('.filter-btn').click(() => {
194 closePopups();
195 toggleFilter();
196 });
197
198 $('.download-btn').click(() => {
199 closePopups();
200 toggleDownload();
201 });
202
203 $('#bagit').click(() => {
204 closePopups();
205 toggleBagit();
206 $('#plainurl').focus();
207 });
208
209 $('#search-form-close').click(() => {
210 toggleSearch();
211 });
212
213 $('#filter-form-close').click(() => {
214 toggleFilter();
215 });
216
217 $('#download-form-close').click(() => {
218 toggleDownload();
219 });
220
221 $('#bagit-form-close').click(() => {
222 toggleBagit();
223 });
224
225 const bagitFormForm = $('#bagit-form-form');
226
227 /* ==========================================================================
228 bag it link and close button
229 ========================================================================== */
230
231 // send 'bag it link' form request via ajax
232 bagitFormForm.submit((event) => {
233 $('body').css('cursor', 'wait');
234 $('#add-link-result').empty();
235
236 $.ajax({
237 type: bagitFormForm.attr('method'),
238 url: bagitFormForm.attr('action'),
239 data: bagitFormForm.serialize(),
240 success: function success() {
241 $('#add-link-result').html('Done!');
242 $('#plainurl').val('').blur('');
243 $('body').css('cursor', 'auto');
244 },
245 error: function error() {
246 $('#add-link-result').html('Failed!');
247 $('body').css('cursor', 'auto');
248 },
249 });
250
251 event.preventDefault();
252 });
253
254 /* ==========================================================================
255 Process all links inside an article
256 ========================================================================== */
257
258 $('article a[href^="http"]').after(
259 () => `<a href="${$(this).attr('href')}" class="add-to-wallabag-link-after" title="add to wallabag"></a>`,
260 );
261
262 $('.add-to-wallabag-link-after').click((event) => {
263 toggleSaveLinkForm($(this).attr('href'), event);
264 event.preventDefault();
265 });
266});
diff --git a/app/Resources/static/themes/baggy/js/autoCompleteTags.js b/app/Resources/static/themes/baggy/js/autoCompleteTags.js
deleted file mode 100755
index 64fdaa92..00000000
--- a/app/Resources/static/themes/baggy/js/autoCompleteTags.js
+++ /dev/null
@@ -1,8 +0,0 @@
1function split(val) {
2 return val.split(/,\s*/);
3}
4function extractLast(term) {
5 return split(term).pop();
6}
7
8export default { split, extractLast };
diff --git a/app/Resources/static/themes/baggy/js/shortcuts/entry.js b/app/Resources/static/themes/baggy/js/shortcuts/entry.js
deleted file mode 100644
index c87408b9..00000000
--- a/app/Resources/static/themes/baggy/js/shortcuts/entry.js
+++ /dev/null
@@ -1,26 +0,0 @@
1import Mousetrap from 'mousetrap';
2import $ from 'jquery';
3
4$(document).ready(() => {
5 if ($('#article').length > 0) {
6 /* Article view */
7 Mousetrap.bind('o', () => {
8 $('div#article_toolbar ul.links a.original')[0].click();
9 });
10
11 /* mark as favorite */
12 Mousetrap.bind('f', () => {
13 $('div#article_toolbar ul.links a.favorite')[0].click();
14 });
15
16 /* mark as read */
17 Mousetrap.bind('a', () => {
18 $('div#article_toolbar ul.links a.markasread')[0].click();
19 });
20
21 /* delete */
22 Mousetrap.bind('del', () => {
23 $('div#article_toolbar ul.links a.delete')[0].click();
24 });
25 }
26});
diff --git a/app/Resources/static/themes/baggy/js/shortcuts/main.js b/app/Resources/static/themes/baggy/js/shortcuts/main.js
deleted file mode 100644
index 43ebf3be..00000000
--- a/app/Resources/static/themes/baggy/js/shortcuts/main.js
+++ /dev/null
@@ -1,10 +0,0 @@
1import $ from 'jquery';
2import Mousetrap from 'mousetrap';
3
4$(document).ready(() => {
5 Mousetrap.bind('s', () => {
6 $('#search').trigger('click');
7 $('#search_entry_term').focus();
8 return false;
9 });
10});
diff --git a/app/Resources/static/themes/baggy/js/uiTools.js b/app/Resources/static/themes/baggy/js/uiTools.js
deleted file mode 100644
index 713c53f7..00000000
--- a/app/Resources/static/themes/baggy/js/uiTools.js
+++ /dev/null
@@ -1,35 +0,0 @@
1import $ from 'jquery';
2
3function toggleSaveLinkForm(url, event) {
4 $('#add-link-result').empty();
5
6 const $bagit = $('#bagit');
7 const $bagitForm = $('#bagit-form');
8
9 $bagit.toggleClass('active-current');
10
11 // only if bag-it link is not presented on page
12 if ($bagit.length === 0) {
13 if (event !== 'undefined' && event) {
14 $bagitForm.css({ position: 'absolute', top: event.pageY, left: event.pageX - 200 });
15 } else {
16 $bagitForm.css({ position: 'relative', top: 'auto', left: 'auto' });
17 }
18 }
19
20 const searchForm = $('#search-form');
21 const plainUrl = $('#plainurl');
22 if (searchForm.length !== 0) {
23 $('#search').removeClass('current');
24 $('#search-arrow').removeClass('arrow-down');
25 searchForm.hide();
26 }
27 $bagitForm.toggle();
28 $('#content').toggleClass('opacity03');
29 if (url !== 'undefined' && url) {
30 plainUrl.val(url);
31 }
32 plainUrl.focus();
33}
34
35export default toggleSaveLinkForm;
diff --git a/app/config/config.yml b/app/config/config.yml
index 4eea0531..186524eb 100644
--- a/app/config/config.yml
+++ b/app/config/config.yml
@@ -167,7 +167,6 @@ nelmio_cors:
167liip_theme: 167liip_theme:
168 load_controllers: false 168 load_controllers: false
169 themes: 169 themes:
170 - baggy
171 - material 170 - material
172 autodetect_theme: wallabag_core.helper.detect_active_theme 171 autodetect_theme: wallabag_core.helper.detect_active_theme
173 172
diff --git a/app/config/webpack/common.js b/app/config/webpack/common.js
index 233497fd..c7fd12ac 100644
--- a/app/config/webpack/common.js
+++ b/app/config/webpack/common.js
@@ -8,7 +8,6 @@ module.exports = function () {
8 return { 8 return {
9 entry: { 9 entry: {
10 material: path.join(rootDir, './app/Resources/static/themes/material/index.js'), 10 material: path.join(rootDir, './app/Resources/static/themes/material/index.js'),
11 baggy: path.join(rootDir, './app/Resources/static/themes/baggy/index.js'),
12 public: path.join(rootDir, './app/Resources/static/themes/_global/share.js'), 11 public: path.join(rootDir, './app/Resources/static/themes/_global/share.js'),
13 }, 12 },
14 output: { 13 output: {
diff --git a/src/Wallabag/CoreBundle/Helper/DetectActiveTheme.php b/src/Wallabag/CoreBundle/Helper/DetectActiveTheme.php
index 9f90ee3e..f1d5fdea 100644
--- a/src/Wallabag/CoreBundle/Helper/DetectActiveTheme.php
+++ b/src/Wallabag/CoreBundle/Helper/DetectActiveTheme.php
@@ -16,15 +16,18 @@ class DetectActiveTheme implements DeviceDetectionInterface
16{ 16{
17 protected $tokenStorage; 17 protected $tokenStorage;
18 protected $defaultTheme; 18 protected $defaultTheme;
19 protected $themes;
19 20
20 /** 21 /**
21 * @param TokenStorageInterface $tokenStorage Needed to retrieve the current user 22 * @param TokenStorageInterface $tokenStorage Needed to retrieve the current user
22 * @param string $defaultTheme Default theme when user isn't logged in 23 * @param string $defaultTheme Default theme when user isn't logged in
24 * @param array $themes Themes come from the LiipThemeBundle (liip_theme.themes)
23 */ 25 */
24 public function __construct(TokenStorageInterface $tokenStorage, $defaultTheme) 26 public function __construct(TokenStorageInterface $tokenStorage, $defaultTheme, $themes)
25 { 27 {
26 $this->tokenStorage = $tokenStorage; 28 $this->tokenStorage = $tokenStorage;
27 $this->defaultTheme = $defaultTheme; 29 $this->defaultTheme = $defaultTheme;
30 $this->themes = $themes;
28 } 31 }
29 32
30 public function setUserAgent($userAgent) 33 public function setUserAgent($userAgent)
@@ -60,6 +63,10 @@ class DetectActiveTheme implements DeviceDetectionInterface
60 return $this->defaultTheme; 63 return $this->defaultTheme;
61 } 64 }
62 65
66 if (!in_array($config->getTheme(), $this->themes)) {
67 return $this->defaultTheme;
68 }
69
63 return $config->getTheme(); 70 return $config->getTheme();
64 } 71 }
65} 72}
diff --git a/src/Wallabag/CoreBundle/Resources/config/services.yml b/src/Wallabag/CoreBundle/Resources/config/services.yml
index 3f3d4de7..bbf2a7a0 100644
--- a/src/Wallabag/CoreBundle/Resources/config/services.yml
+++ b/src/Wallabag/CoreBundle/Resources/config/services.yml
@@ -4,6 +4,7 @@ services:
4 arguments: 4 arguments:
5 - "@security.token_storage" 5 - "@security.token_storage"
6 - "%wallabag_core.theme%" 6 - "%wallabag_core.theme%"
7 - "%liip_theme.themes%"
7 8
8 # custom form type 9 # custom form type
9 wallabag_core.form.type.config: 10 wallabag_core.form.type.config:
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/index.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/index.html.twig
deleted file mode 100644
index f719bea2..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/index.html.twig
+++ /dev/null
@@ -1,433 +0,0 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'config.page_title'|trans }}{% endblock %}
4
5{% block content %}
6 <h2>{{ 'config.tab_menu.settings'|trans }}</h2>
7
8 {{ form_start(form.config) }}
9 {{ form_errors(form.config) }}
10
11 <fieldset class="w500p inline">
12 <div class="row">
13 {{ form_label(form.config.theme) }}
14 {{ form_errors(form.config.theme) }}
15 {{ form_widget(form.config.theme) }}
16 </div>
17 <a href="#" title="{{ 'config.form_settings.help_theme'|trans }}">
18 <i class="material-icons">live_help</i>
19 </a>
20 </fieldset>
21
22 <fieldset class="w500p inline">
23 <div class="row">
24 {{ form_label(form.config.items_per_page) }}
25 {{ form_errors(form.config.items_per_page) }}
26 {{ form_widget(form.config.items_per_page) }}
27 </div>
28 <a href="#" title="{{ 'config.form_settings.help_items_per_page'|trans }}">
29 <i class="material-icons">live_help</i>
30 </a>
31 </fieldset>
32
33 <fieldset class="w500p inline">
34 <div class="row">
35 {{ form_label(form.config.reading_speed) }}
36 {{ form_errors(form.config.reading_speed) }}
37 {{ form_widget(form.config.reading_speed) }}
38 <p>
39 {{ 'config.form_settings.reading_speed.help_message'|trans }}
40 <a href="http://www.myreadspeed.com/calculate/">myreadspeed</a>
41 </p>
42 </div>
43 <a href="#" title="{{ 'config.form_settings.help_reading_speed'|trans }}">
44 <i class="material-icons">live_help</i>
45 </a>
46 </fieldset>
47
48 <fieldset class="w500p inline">
49 <div class="row">
50 {{ form_label(form.config.action_mark_as_read) }}
51 {{ form_errors(form.config.action_mark_as_read) }}
52 {{ form_widget(form.config.action_mark_as_read) }}
53 </div>
54 </fieldset>
55
56 <fieldset class="w500p inline">
57 <div class="row">
58 {{ form_label(form.config.language) }}
59 {{ form_errors(form.config.language) }}
60 {{ form_widget(form.config.language) }}
61 </div>
62 <a href="#" title="{{ 'config.form_settings.help_language'|trans }}">
63 <i class="material-icons">live_help</i>
64 </a>
65 </fieldset>
66
67 <fieldset class="w500p inline">
68 <div class="row">
69 {{ form_label(form.config.pocket_consumer_key) }}
70 {{ form_errors(form.config.pocket_consumer_key) }}
71 {{ form_widget(form.config.pocket_consumer_key) }}
72 <p>
73 &raquo;
74 <a href="https://getpocket.com/developer/docs/authentication">https://getpocket.com/developer/docs/authentication</a>
75 </p>
76 </div>
77 <a href="#" title="{{ 'config.form_settings.help_pocket_consumer_key'|trans }}">
78 <i class="material-icons">live_help</i>
79 </a>
80 </fieldset>
81
82 <fieldset class="w500p inline">
83 <div class="row">
84 <h3>{{ 'config.form_settings.android_configuration'|trans }}</h3>
85 <a href="wallabag://{{ app.user.username }}@{{ wallabag_url }}">{{ 'config.form_settings.android_instruction' | trans }}</a>
86 <br/>
87 <img id="androidQrcode" />
88 <script>
89 document.getElementById('androidQrcode').src = jrQrcode.getQrBase64('wallabag://{{ app.user.username }}@{{ wallabag_url }}');
90 </script>
91 </div>
92 </fieldset>
93
94 {{ form_rest(form.config) }}
95 </form>
96
97 <h2>{{ 'config.tab_menu.feed'|trans }}</h2>
98
99 {{ form_start(form.feed) }}
100 {{ form_errors(form.feed) }}
101
102 <div class="row">
103 {{ 'config.form_feed.description'|trans }}
104 </div>
105
106 <fieldset class="w500p inline">
107 <div class="row">
108 <label>{{ 'config.form_feed.token_label'|trans }}</label>
109 {% if feed.token %}
110 {{ feed.token }}
111 {% else %}
112 <em>{{ 'config.form_feed.no_token'|trans }}</em>
113 {% endif %}
114
115 {% if feed.token %}
116 – <a href="{{ path('generate_token') }}">{{ 'config.form_feed.token_reset'|trans }}</a>
117 – <a href="{{ path('revoke_token') }}">{{ 'config.form_feed.token_revoke'|trans }}</a>
118 {% else %}
119 – <a href="{{ path('generate_token') }}">{{ 'config.form_feed.token_create'|trans }}</a>
120 {% endif %}
121 </div>
122 </fieldset>
123
124 {% if feed.token %}
125 <fieldset class="w500p inline">
126 <div class="row">
127 <label>{{ 'config.form_feed.feed_links'|trans }}</label>
128 <ul>
129 <li><a href="{{ path('unread_feed', {'username': feed.username, 'token': feed.token}) }}">{{ 'config.form_feed.feed_link.unread'|trans }}</a></li>
130 <li><a href="{{ path('starred_feed', {'username': feed.username, 'token': feed.token}) }}">{{ 'config.form_feed.feed_link.starred'|trans }}</a></li>
131 <li><a href="{{ path('archive_feed', {'username': feed.username, 'token': feed.token}) }}">{{ 'config.form_feed.feed_link.archive'|trans }}</a></li>
132 <li><a href="{{ path('all_feed', {'username': feed.username, 'token': feed.token}) }}">{{ 'config.form_feed.feed_link.all'|trans }}</a></li>
133 </ul>
134 </div>
135 </fieldset>
136 {% endif %}
137
138 <fieldset class="w500p inline">
139 <div class="row">
140 {{ form_label(form.feed.feed_limit) }}
141 {{ form_errors(form.feed.feed_limit) }}
142 {{ form_widget(form.feed.feed_limit) }}
143 </div>
144 </fieldset>
145
146 {{ form_rest(form.feed) }}
147 </form>
148
149 <h2>{{ 'config.tab_menu.user_info'|trans }}</h2>
150
151 {{ form_start(form.user) }}
152 {{ form_errors(form.user) }}
153 <fieldset class="w500p inline">
154 <div class="row">
155 <label>{{ 'config.form_user.login_label'|trans }}</label>
156 {{ app.user.username }}
157 </div>
158 </fieldset>
159
160 <fieldset class="w500p inline">
161 <div class="row">
162 {{ form_label(form.user.name) }}
163 {{ form_errors(form.user.name) }}
164 {{ form_widget(form.user.name) }}
165 </div>
166 </fieldset>
167
168 <fieldset class="w500p inline">
169 <div class="row">
170 {{ form_label(form.user.email) }}
171 {{ form_errors(form.user.email) }}
172 {{ form_widget(form.user.email) }}
173 </div>
174 </fieldset>
175
176 {{ form_widget(form.user.save) }}
177
178 {% if twofactor_auth %}
179 <h5>{{ 'config.otp.page_title'|trans }}</h5>
180
181 <div class="row">
182 {{ 'config.form_user.two_factor_description'|trans }}
183 </div>
184
185 <table>
186 <thead>
187 <tr>
188 <th>{{ 'config.form_user.two_factor.table_method'|trans }}</th>
189 <th>{{ 'config.form_user.two_factor.table_state'|trans }}</th>
190 <th>{{ 'config.form_user.two_factor.table_action'|trans }}</th>
191 </tr>
192 </thead>
193
194 <tbody>
195 <tr>
196 <td>{{ 'config.form_user.two_factor.emailTwoFactor_label'|trans }}</td>
197 <td>{% if app.user.isEmailTwoFactor %}<b>{{ 'config.form_user.two_factor.state_enabled'|trans }}</b>{% else %}{{ 'config.form_user.two_factor.state_disabled'|trans }}{% endif %}</td>
198 <td><a href="{{ path('config_otp_email') }}" class="waves-effect waves-light btn{% if app.user.isEmailTwoFactor %} disabled{% endif %}">{{ 'config.form_user.two_factor.action_email'|trans }}</a></td>
199 </tr>
200 <tr>
201 <td>{{ 'config.form_user.two_factor.googleTwoFactor_label'|trans }}</td>
202 <td>{% if app.user.isGoogleTwoFactor %}<b>{{ 'config.form_user.two_factor.state_enabled'|trans }}</b>{% else %}{{ 'config.form_user.two_factor.state_disabled'|trans }}{% endif %}</td>
203 <td><a href="{{ path('config_otp_app') }}" class="waves-effect waves-light btn{% if app.user.isGoogleTwoFactor %} disabled{% endif %}">{{ 'config.form_user.two_factor.action_app'|trans }}</a></td>
204 </tr>
205 </tbody>
206 </table>
207
208 {% endif %}
209
210 {{ form_widget(form.user._token) }}
211 </form>
212
213 {% if enabled_users > 1 %}
214 <h2>{{ 'config.form_user.delete.title'|trans }}</h2>
215
216 <p>{{ 'config.form_user.delete.description'|trans }}</p>
217 <a href="{{ path('delete_account') }}" onclick="return confirm('{{ 'config.form_user.delete.confirm'|trans|escape('js') }}')" class="waves-effect waves-light btn red delete-account">
218 {{ 'config.form_user.delete.button'|trans }}
219 </a>
220 {% endif %}
221
222 <h2>{{ 'config.tab_menu.password'|trans }}</h2>
223
224 {{ form_start(form.pwd) }}
225 {{ form_errors(form.pwd) }}
226
227 <div class="row">
228 {{ 'config.form_password.description'|trans }}
229 </div>
230
231 <fieldset class="w500p inline">
232 <div class="row">
233 {{ form_label(form.pwd.old_password) }}
234 {{ form_errors(form.pwd.old_password) }}
235 {{ form_widget(form.pwd.old_password) }}
236 </div>
237 </fieldset>
238
239 <fieldset class="w500p inline">
240 <div class="row">
241 {{ form_label(form.pwd.new_password.first) }}
242 {{ form_errors(form.pwd.new_password.first) }}
243 {{ form_widget(form.pwd.new_password.first) }}
244 </div>
245 </fieldset>
246
247 <fieldset class="w500p inline">
248 <div class="row">
249 {{ form_label(form.pwd.new_password.second) }}
250 {{ form_errors(form.pwd.new_password.second) }}
251 {{ form_widget(form.pwd.new_password.second) }}
252 </div>
253 </fieldset>
254
255 {{ form_rest(form.pwd) }}
256 </form>
257
258 <h2>{{ 'config.tab_menu.rules'|trans }}</h2>
259
260 <ul>
261 {% for tagging_rule in app.user.config.taggingRules %}
262 <li>
263 {{ 'config.form_rules.if_label'|trans }}
264 « {{ tagging_rule.rule }} »
265 {{ 'config.form_rules.then_tag_as_label'|trans }}
266 « {{ tagging_rule.tags|join(', ') }} »
267 <a href="{{ path('edit_tagging_rule', {id: tagging_rule.id}) }}" title="{{ 'config.form_rules.edit_rule_label'|trans }}" class="tool mode_edit">✎</a>
268 <a href="{{ path('delete_tagging_rule', {id: tagging_rule.id}) }}" title="{{ 'config.form_rules.delete_rule_label'|trans }}" class="tool delete icon-trash icon"></a>
269 </li>
270 {% endfor %}
271 </ul>
272
273 {{ form_start(form.new_tagging_rule) }}
274 {{ form_errors(form.new_tagging_rule) }}
275
276 <fieldset class="w500p inline">
277 <div class="row">
278 {{ form_label(form.new_tagging_rule.rule) }}
279 {{ form_errors(form.new_tagging_rule.rule) }}
280 {{ form_widget(form.new_tagging_rule.rule) }}
281 </div>
282 </fieldset>
283
284 <fieldset class="w500p inline">
285 <div class="row">
286 {{ form_label(form.new_tagging_rule.tags) }}
287 {{ form_errors(form.new_tagging_rule.tags) }}
288 {{ form_widget(form.new_tagging_rule.tags) }}
289 </div>
290 </fieldset>
291
292 {{ form_rest(form.new_tagging_rule) }}
293 </form>
294
295 <div class="row">
296 <h3>{{ 'config.form_rules.card.import_tagging_rules'|trans }}</h3>
297 <p>{{ 'config.form_rules.card.import_tagging_rules_detail'|trans }}</p>
298 </div>
299
300 {{ form_start(form.import_tagging_rule) }}
301 {{ form_errors(form.import_tagging_rule) }}
302
303 <fieldset class="w500p inline">
304 <div class="row">
305 {{ form_label(form.import_tagging_rule.file) }}
306 {{ form_errors(form.import_tagging_rule.file) }}
307 {{ form_widget(form.import_tagging_rule.file) }}
308 </div>
309 </fieldset>
310
311 {{ form_rest(form.import_tagging_rule) }}
312 </form>
313
314 {% if app.user.config.taggingRules is not empty %}
315 <div class="row">
316 <h3>{{ 'config.form_rules.card.export_tagging_rules'|trans }}</h3>
317 <p>{{ 'config.form_rules.card.export_tagging_rules_detail'|trans }}</p>
318 <p><a href="{{ path('export_tagging_rule') }}" class="waves-effect waves-light btn">{{ 'config.form_rules.export'|trans }}</a></p>
319 </div>
320 {% endif %}
321
322 <div class="row">
323 <div class="input-field col s12">
324 <h3>{{ 'config.form_rules.faq.title'|trans }}</h3>
325
326 <h4>{{ 'config.form_rules.faq.tagging_rules_definition_title'|trans }}</h4>
327 <p class="help">{{ 'config.form_rules.faq.tagging_rules_definition_description'|trans|raw }}</p>
328
329 <h4>{{ 'config.form_rules.faq.how_to_use_them_title'|trans }}</h4>
330 <p class="help">{{ 'config.form_rules.faq.how_to_use_them_description'|trans|raw }}</p>
331
332 <h4>{{ 'config.form_rules.faq.variables_available_title'|trans }}</h4>
333 <p class="help">
334 {{ 'config.form_rules.faq.variables_available_description'|trans }}
335 </p>
336
337 <table class="bordered">
338 <thead>
339 <tr>
340 <th>{{ 'config.form_rules.faq.variable_description.label'|trans }}</th>
341 <th>{{ 'config.form_rules.faq.meaning'|trans }}</th>
342 <th>{{ 'config.form_rules.faq.operator_description.label'|trans }}</th>
343 <th>{{ 'config.form_rules.faq.meaning'|trans }}</th>
344 </tr>
345 </thead>
346
347 <tbody>
348 <tr>
349 <td>title</td>
350 <td>{{ 'config.form_rules.faq.variable_description.title'|trans }}</td>
351 <td>&lt;=</td>
352 <td>{{ 'config.form_rules.faq.operator_description.less_than'|trans }}</td>
353 </tr>
354 <tr>
355 <td>url</td>
356 <td>{{ 'config.form_rules.faq.variable_description.url'|trans }}</td>
357 <td>&lt;</td>
358 <td>{{ 'config.form_rules.faq.operator_description.strictly_less_than'|trans }}</td>
359 </tr>
360 <tr>
361 <td>isArchived</td>
362 <td>{{ 'config.form_rules.faq.variable_description.isArchived'|trans }}</td>
363 <td>&gt;=</td>
364 <td>{{ 'config.form_rules.faq.operator_description.greater_than'|trans }}</td>
365 </tr>
366 <tr>
367 <td>isStarred</td>
368 <td>{{ 'config.form_rules.faq.variable_description.isStarred'|trans }}</td>
369 <td>&gt;</td>
370 <td>{{ 'config.form_rules.faq.operator_description.strictly_greater_than'|trans }}</td>
371 </tr>
372 <tr>
373 <td>content</td>
374 <td>{{ 'config.form_rules.faq.variable_description.content'|trans }}</td>
375 <td>=</td>
376 <td>{{ 'config.form_rules.faq.operator_description.equal_to'|trans }}</td>
377 </tr>
378 <tr>
379 <td>language</td>
380 <td>{{ 'config.form_rules.faq.variable_description.language'|trans }}</td>
381 <td>!=</td>
382 <td>{{ 'config.form_rules.faq.operator_description.not_equal_to'|trans }}</td>
383 </tr>
384 <tr>
385 <td>mimetype</td>
386 <td>{{ 'config.form_rules.faq.variable_description.mimetype'|trans }}</td>
387 <td>OR</td>
388 <td>{{ 'config.form_rules.faq.operator_description.or'|trans }}</td>
389 </tr>
390 <tr>
391 <td>readingTime</td>
392 <td>{{ 'config.form_rules.faq.variable_description.readingTime'|trans }}</td>
393 <td>AND</td>
394 <td>{{ 'config.form_rules.faq.operator_description.and'|trans }}</td>
395 </tr>
396 <tr>
397 <td>domainName</td>
398 <td>{{ 'config.form_rules.faq.variable_description.domainName'|trans }}</td>
399 <td>matches</td>
400 <td>{{ 'config.form_rules.faq.operator_description.matches'|trans|raw }}</td>
401 </tr>
402 </tbody>
403 </table>
404 </div>
405 </div>
406
407 <h2>{{ 'config.reset.title'|trans }}</h2>
408 <fieldset class="w500p inline">
409 <p>{{ 'config.reset.description'|trans }}</p>
410 <ul>
411 <li>
412 <a href="{{ path('config_reset', { type: 'annotations'}) }}" onclick="return confirm('{{ 'config.reset.confirm'|trans|escape('js') }}')" class="waves-effect waves-light btn red">
413 {{ 'config.reset.annotations'|trans }}
414 </a>
415 </li>
416 <li>
417 <a href="{{ path('config_reset', { type: 'tags'}) }}" onclick="return confirm('{{ 'config.reset.confirm'|trans|escape('js') }}')" class="waves-effect waves-light btn red">
418 {{ 'config.reset.tags'|trans }}
419 </a>
420 </li>
421 <li>
422 <a href="{{ path('config_reset', { type: 'archived'}) }}" onclick="return confirm('{{ 'config.reset.confirm'|trans|escape('js') }}')" class="waves-effect waves-light btn red">
423 {{ 'config.reset.archived'|trans }}
424 </a>
425 </li>
426 <li>
427 <a href="{{ path('config_reset', { type: 'entries'}) }}" onclick="return confirm('{{ 'config.reset.confirm'|trans|escape('js') }}')" class="waves-effect waves-light btn red">
428 {{ 'config.reset.entries'|trans }}
429 </a>
430 </li>
431 </ul>
432 </fieldset>
433{% endblock %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/otp_app.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/otp_app.html.twig
deleted file mode 100644
index 1d3685ae..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/otp_app.html.twig
+++ /dev/null
@@ -1,55 +0,0 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'config.page_title'|trans }} > {{ 'config.otp.page_title'|trans }}{% endblock %}
4
5{% block content %}
6 <h5>{{ 'config.otp.page_title'|trans }}</h5>
7
8 <ol>
9 <li>
10 <p>{{ 'config.otp.app.two_factor_code_description_1'|trans }}</p>
11 <p>{{ 'config.otp.app.two_factor_code_description_2'|trans }}</p>
12
13 <p>
14 <img id="2faQrcode" class="hide-on-med-and-down" />
15 <script>
16 document.getElementById('2faQrcode').src = jrQrcode.getQrBase64('{{ qr_code }}');
17 </script>
18 </p>
19 </li>
20 <li>
21 <p>{{ 'config.otp.app.two_factor_code_description_3'|trans }}</p>
22
23 <p><strong>{{ backupCodes|join("\n")|nl2br }}</strong></p>
24 </li>
25 <li>
26 <p>{{ 'config.otp.app.two_factor_code_description_4'|trans }}</p>
27
28 {% for flashMessage in app.session.flashbag.get("two_factor") %}
29 <div class="card-panel red darken-1 black-text">
30 {{ flashMessage|trans }}
31 </div>
32 {% endfor %}
33
34 <form class="form" action="{{ path("config_otp_app_check") }}" method="post">
35 <div class="card-content">
36 <div class="row">
37 <div class="input-field col s12">
38 <label for="_auth_code">{{ "auth_code"|trans({}, 'SchebTwoFactorBundle') }}</label>
39 <input id="_auth_code" type="text" autocomplete="off" name="_auth_code" />
40 </div>
41 </div>
42 </div>
43 <div class="card-action">
44 <a href="{{ path('config_otp_app_cancel') }}" class="waves-effect waves-light grey btn">
45 {{ 'config.otp.app.cancel'|trans }}
46 </a>
47 <button class="btn waves-effect waves-light" type="submit" name="send">
48 {{ 'config.otp.app.enable'|trans }}
49 <i class="material-icons right">send</i>
50 </button>
51 </div>
52 </form>
53 </li>
54 </ol>
55{% endblock %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/edit.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/edit.html.twig
deleted file mode 100644
index e974fc69..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/edit.html.twig
+++ /dev/null
@@ -1,7 +0,0 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'entry.edit.page_title'|trans }}{% endblock %}
4
5{% block content %}
6 {{ form(form) }}
7{% endblock %}
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
deleted file mode 100644
index 4182628f..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig
+++ /dev/null
@@ -1,219 +0,0 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block head %}
4 {{ parent() }}
5 {% if tag is defined and app.user.config.feedToken %}
6 <link rel="alternate" type="application/atom+xml" href="{{ path('tag_feed', {'username': app.user.username, 'token': app.user.config.feedToken, 'slug': tag.slug}) }}" />
7 {% endif %}
8{% endblock %}
9
10{% block title %}
11 {% set filter = '' %}
12 {% if tag is defined %}
13 {% set filter = tag %}
14 {% endif %}
15 {% if searchTerm is defined and searchTerm is not empty %}
16 {% set filter = searchTerm %}
17 {% endif %}
18 {% include "@WallabagCore/themes/common/Entry/_title.html.twig" with {'filter': filter} %}
19{% endblock %}
20
21{% block content %}
22 {% set currentRoute = app.request.attributes.get('_route') %}
23 {% if currentRoute == 'homepage' %}
24 {% set currentRoute = 'unread' %}
25 {% endif %}
26 {% set listMode = app.user.config.listMode %}
27 <div class="results">
28 <div class="nb-results">{{ 'entry.list.number_on_the_page'|transchoice(entries.count) }}</div>
29 <div class="pagination">
30 <a href="{{ path('switch_view_mode') }}"><i class="listMode-btn material-icons md-24">{% if listMode == 0 %}list{% else %}view_module{% endif %}</i></a>
31 {% if app.user.config.feedToken %}
32 {% include "@WallabagCore/themes/common/Entry/_feed_link.html.twig" %}
33 {% endif %}
34 {% if currentRoute in ['unread', 'starred', 'archive', 'untagged', 'all'] %}
35 <a href="{{ path('random_entry', { 'type': currentRoute }) }}"><i class="btn-clickable material-icons md-24 js-random-action">casino</i></a>
36 {% endif %}
37 <i class="btn-clickable download-btn material-icons md-24 js-export-action">file_download</i>
38 <i class="btn-clickable filter-btn material-icons md-24 js-filters-action">filter_list</i>
39 {% if entries.getNbPages > 1 %}
40 {{ pagerfanta(entries, 'twitter_bootstrap_translated', {'proximity': 1}) }}
41 {% endif %}
42 </div>
43 </div>
44
45 {% for entry in entries %}
46 <div id="entry-{{ entry.id|e }}" class="{% if listMode == 0 %}entry{% else %}listmode entry{% endif %}">
47 <h2><a href="{{ path('view', { 'id': entry.id }) }}" title="{{ entry.title|e|raw }}">{{ entry.title | striptags | truncate(80, true, '…') | default('entry.default_title'|trans) | raw }}</a></h2>
48
49 {% set readingTime = entry.readingTime / app.user.config.readingSpeed * 200 %}
50 <div class="estimatedTime">
51 <span class="tool reading-time">
52 {% if readingTime > 0 %}
53 {{ 'entry.list.reading_time_minutes'|trans({'%readingTime%': readingTime|round}) }}
54 {% else %}
55 {{ 'entry.list.reading_time_less_one_minute'|trans|raw }}
56 {% endif %}
57 </span>
58 <span class="tool created-at">
59 <i class="tool icon icon-calendar" title="{{ 'entry.view.created_at'|trans }}">
60 {{ entry.createdAt|date('Y-m-d') }}
61 </i>
62 </span>
63 </div>
64
65 <ul class="tools links">
66 <li><a href="{{ entry.url|e }}" target="_blank" rel="noopener" title="{{ 'entry.list.original_article'|trans }} : {{ entry.title|e }}"><span>{{ entry.domainName|removeWww }}</span></a></li>
67 <li><a title="{{ 'entry.list.toogle_as_read'|trans }}" class="tool icon {% if entry.isArchived == 0 %}archive-off{% else %}archive{% endif %}" href="{{ path('archive_entry', { 'id': entry.id }) }}"><i class="material-icons md-24 vertical-align-middle">check</i><span>{{ 'entry.list.toogle_as_read'|trans }}</span></a></li>
68 <li><a title="{{ 'entry.list.toogle_as_star'|trans }}" class="tool icon {% if entry.isStarred == 0 %}fav-off{% else %}fav{% endif %}" href="{{ path('star_entry', { 'id': entry.id }) }}"><i class="material-icons md-24 vertical-align-middle">star_rate</i><span>{{ 'entry.list.toogle_as_star'|trans }}</span></a></li>
69 <li><a title="{{ 'entry.list.delete'|trans }}" class="tool icon" onclick="return confirm('{{ 'entry.confirm.delete'|trans|escape('js') }}')" href="{{ path('delete_entry', { 'id': entry.id }) }}"><i class="material-icons md-24 vertical-align-middle">delete</i><span>{{ 'entry.list.delete'|trans }}</span></a></li>
70 </ul>
71 {% if (entry.previewPicture is null or listMode == 1) %}
72 <ul class="card-entry-tags">
73 {% for tag in entry.tags %}
74 <li><a href="{{ path('tag_entries', {'slug': tag.slug}) }}">{{ tag.label }}</a></li>
75 {% endfor %}
76 </ul>
77 <p {% if listMode == 1 %}class="hide"{% endif %}>{{ entry.content|striptags|slice(0, 300) }}&hellip;</p>
78 {% else %}
79 <ul class="card-entry-labels">
80 {% for tag in entry.tags | slice(0, 3) %}
81 <li><a href="{{ path('tag_entries', {'slug': tag.slug}) }}">{{ tag.label }}</a></li>
82 {% endfor %}
83 </ul>
84 <img class="preview" src="{{ entry.previewPicture }}" alt="{{ entry.title|e|raw }}" />
85 {% endif %}
86 </div>
87 {% endfor %}
88
89 {% if entries.getNbPages > 1 %}
90 {{ pagerfanta(entries, 'twitter_bootstrap_translated', {'proximity': 1}) }}
91 {% endif %}
92
93 <!-- Export -->
94 <aside id="download-form">
95 {% set currentTag = null %}
96 {% if tag is defined %}
97 {% set currentTag = tag %}
98 {% endif %}
99 {% set exportSearchTerm = null %}
100 {% if searchTerm is defined %}
101 {% set exportSearchTerm = searchTerm %}
102 {% endif %}
103 {% set previousRoute = app.request.attributes.get('currentRoute') %}
104 <h2>{{ 'entry.list.export_title'|trans }}</h2>
105 <a href="javascript: void(null);" id="download-form-close" class="close-button--popup close-button">&times;</a>
106 <ul>
107 {% if craue_setting('export_epub') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'epub', 'tag' : currentTag, 'search_entry[term]' : exportSearchTerm, 'currentRoute' : previousRoute }) }}">EPUB</a></li>{% endif %}
108 {% if craue_setting('export_mobi') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'mobi', 'tag' : currentTag, 'search_entry[term]' : exportSearchTerm, 'currentRoute' : previousRoute }) }}">MOBI</a></li>{% endif %}
109 {% if craue_setting('export_pdf') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'pdf', 'tag' : currentTag, 'search_entry[term]' : exportSearchTerm, 'currentRoute' : previousRoute }) }}">PDF</a></li>{% endif %}
110 {% if craue_setting('export_json') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'json', 'tag' : currentTag, 'search_entry[term]' : exportSearchTerm, 'currentRoute' : previousRoute }) }}">JSON</a></li>{% endif %}
111 {% if craue_setting('export_csv') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'csv', 'tag' : currentTag, 'search_entry[term]' : exportSearchTerm, 'currentRoute' : previousRoute }) }}">CSV</a></li>{% endif %}
112 {% if craue_setting('export_txt') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'txt', 'tag' : currentTag, 'search_entry[term]' : exportSearchTerm, 'currentRoute' : previousRoute }) }}">TXT</a></li>{% endif %}
113 {% if craue_setting('export_xml') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'xml', 'tag' : currentTag, 'search_entry[term]' : exportSearchTerm, 'currentRoute' : previousRoute }) }}">XML</a></li>{% endif %}
114 </ul>
115 </aside>
116
117 <!-- Filter -->
118 {% if form is not null %}
119 <div id="filters">
120 <form method="get" action="{{ path('all') }}">
121 <h2>{{ 'entry.filters.title'|trans }}</h2>
122 <a href="javascript: void(null);" id="filter-form-close" class="close-button--popup close-button">&times;</a>
123
124 <div id="filter-status" class="filter-group">
125 {% if currentRoute != 'untagged' and nbEntriesUntagged != 0 %}
126 <div class="">
127 <a href="{{ path('untagged') }}">{{ 'tag.list.see_untagged_entries'|trans }} ({{nbEntriesUntagged}})</a>
128 </div>
129 {% endif %}
130
131 <div class="">
132 <label>{{ 'entry.filters.status_label'|trans }}</label>
133 </div>
134 <div class="input-field">
135 {{ form_widget(form.isArchived) }}
136 {{ form_label(form.isArchived) }}
137 </div>
138
139 <div class="input-field">
140 {{ form_widget(form.isStarred) }}
141 {{ form_label(form.isStarred) }}
142 </div>
143
144 <div class="input-field">
145 {{ form_widget(form.isUnread) }}
146 {{ form_label(form.isUnread) }}
147 </div>
148
149 <div class="input-field">
150 {{ form_widget(form.previewPicture) }}
151 {{ form_label(form.previewPicture) }}
152 </div>
153
154 <div class="input-field">
155 {{ form_widget(form.isPublic) }}
156 {{ form_label(form.isPublic) }}
157 </div>
158 </div>
159
160 <div id="filter-language" class="filter-group">
161 {{ form_label(form.language) }}
162 <div class="input-field ">
163 {{ form_widget(form.language) }}
164 </div>
165 </div>
166
167 <div id="filter-http-status" class="filter-group">
168 {{ form_label(form.httpStatus) }}
169 <div class="input-field ">
170 {{ form_widget(form.httpStatus) }}
171 </div>
172 </div>
173
174 <div id="filter-reading-time" class="filter-group">
175 <div class="">
176 {{ form_label(form.readingTime) }}
177 </div>
178 <div class="input-field ">
179 <label for="entry_filter_readingTime_left_number">{{ 'entry.filters.reading_time.from'|trans }}</label>
180 {{ form_widget(form.readingTime.left_number, {'type': 'number'}) }}
181 </div>
182 <div class="input-field ">
183 <label for="entry_filter_readingTime_right_number">{{ 'entry.filters.reading_time.to'|trans }}</label>
184 {{ form_widget(form.readingTime.right_number, {'type': 'number'}) }}
185 </div>
186 </div>
187
188 <div id="filter-domain-name" class="filter-group">
189 {{ form_label(form.domainName) }}
190 <div class="input-field ">
191 {{ form_widget(form.domainName, {'type': 'text', 'attr' : {'placeholder': 'website.com'} }) }}
192 </div>
193 </div>
194
195 <div id="filter-creation-date" class="filter-group">
196 <div class="">
197 {{ form_label(form.createdAt) }}
198 </div>
199 <div class="input-field ">
200 <label for="entry_filter_createdAt_left_date" class="active">{{ 'entry.filters.created_at.from'|trans }}</label>
201 {{ form_widget(form.createdAt.left_date, {'type': 'date', 'attr': {'class': 'datepicker', 'data-value': form.createdAt.left_date.vars.value} }) }}
202 </div>
203 <div class="input-field ">
204 <label for="entry_filter_createdAt_right_date" class="active">{{ 'entry.filters.created_at.to'|trans }}</label>
205 {{ form_widget(form.createdAt.right_date, {'type': 'date', 'attr': {'class': 'datepicker', 'data-value': form.createdAt.right_date.vars.value} }) }}
206 </div>
207 </div>
208
209 <div id="filter-buttons" class="filter-group">
210 <div class="">
211 <a href="#!" class="center waves-effect waves-green btn-flat" id="clear_form_filters">{{ 'entry.filters.action.clear'|trans }}</a>
212 </div>
213
214 <button class="btn waves-effect waves-light" type="submit" id="submit-filter" value="filter">{{ 'entry.filters.action.filter'|trans }}</button>
215 </div>
216 </form>
217 </div>
218 {% endif %}
219{% endblock %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entry.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entry.html.twig
deleted file mode 100644
index c2e69a27..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entry.html.twig
+++ /dev/null
@@ -1,116 +0,0 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ entry.title|e|default('entry.default_title'|trans)|raw }} ({{ entry.domainName|removeWww }}){% endblock %}
4
5{% block content %}
6 <div id="article">
7 <header class="mbm">
8 <h1><span{% if entry.language is defined and entry.language is not null %} lang="{{ entry.getHTMLLanguage() }}"{% endif %}>{{ entry.title|e|default('entry.default_title'|trans)|raw }}</span> <a href="{{ path('edit', { 'id': entry.id }) }}" class="nostyle" title="{{ 'entry.view.edit_title'|trans }}">✎</a></h1>
9 </header>
10
11 <div id="article_toolbar">
12 <ul class="links">
13 <li class="topPosF"><a href="#top" title="{{ 'entry.view.left_menu.back_to_top'|trans }}" class="tool top icon icon-arrow-up-thick"><span>{{ 'entry.view.left_menu.set_as_read'|trans }}</span></a></li>
14 <li><a href="{{ entry.url|e }}" target="_blank" rel="noopener" title="{{ 'entry.view.original_article'|trans }} : {{ entry.title|e }}" class="tool link icon icon-link original"><span>{{ entry.domainName|removeWww }}</span></a></li>
15 <li><a title="{{ 'entry.view.left_menu.re_fetch_content'|trans }}" class="tool icon icon-reload" href="{{ path('reload_entry', { 'id': entry.id }) }}"><span>{{ 'entry.view.left_menu.re_fetch_content'|trans }}</span></a></li>
16
17 {% set markAsReadLabel = 'entry.view.left_menu.set_as_unread' %}
18 {% if entry.isArchived == 0 %}
19 {% set markAsReadLabel = 'entry.view.left_menu.set_as_read' %}
20 {% endif %}
21
22 <li><a title="{{ markAsReadLabel|trans }}" class="tool icon icon-check {% if entry.isArchived == 0 %}archive-off{% else %}archive{% endif %} markasread" href="{{ path('archive_entry', { 'id': entry.id }) }}"><span>{{ markAsReadLabel|trans }}</span></a></li>
23 <li><a title="{{ 'entry.view.left_menu.set_as_starred'|trans }}" class="tool icon icon-star {% if entry.isStarred == 0 %}fav-off{% else %}fav{% endif %} favorite" href="{{ path('star_entry', { 'id': entry.id }) }}"><span>{{ 'entry.view.left_menu.set_as_starred'|trans }}</span></a></li>
24 <li><a id="nav-btn-add-tag" class="tool icon icon-price-tags" title="{{ 'entry.view.left_menu.add_a_tag'|trans }}"><span>{{ 'entry.view.left_menu.add_a_tag'|trans }}</span></a></li>
25 <li><a title="{{ 'entry.view.left_menu.delete'|trans }}" onclick="return confirm('{{ 'entry.confirm.delete'|trans|escape('js') }}')" class="tool delete icon icon-trash" href="{{ path('delete_entry', { 'id': entry.id }) }}"><span>{{ 'entry.view.left_menu.delete'|trans }}</span></a></li>
26 {% if craue_setting('share_public') %}
27 <li><a href="{{ path('share', {'id': entry.id }) }}" target="_blank" class="tool icon icon-eye" title="{{ 'entry.view.left_menu.public_link'|trans }}"><span>{{ 'entry.view.left_menu.public_link'|trans }}</span></a></li>
28 <li><a href="{{ path('delete_share', {'id': entry.id }) }}" class="tool icon icon-no-eye" title="{{ 'entry.view.left_menu.delete_public_link'|trans }}"><span>{{ 'entry.view.left_menu.delete_public_link'|trans }}</span></a></li>
29 {% endif %}
30 {% if craue_setting('share_twitter') %}<li><a href="https://twitter.com/share?text={{entry.title|url_encode}}%20{{ entry.url|url_encode }}%20via%20@wallabagapp" target="_blank" rel="noopener" class="tool twitter icon icon-twitter" title="Tweet"><span>Tweet</span></a></li>{% endif %}
31 {% 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="Email"><span>Email</span></a></li>{% endif %}
32 {% if craue_setting('share_shaarli') %}<li><a href="{{ craue_setting('shaarli_url') }}/index.php?post={{ entry.url|url_encode }}&amp;title={{ entry.title|url_encode }}&amp;tags={{ entry.tags|join(',')|url_encode }}{% if craue_setting('shaarli_share_origin_url') %}&amp;original_url={{ entry.originUrl|url_encode }}{% endif %}" target="_blank" rel="noopener" class="tool icon-image icon-image--shaarli" title="shaarli"><span>shaarli</span></a></li>{% endif %}
33 {% if craue_setting('share_scuttle') %}<li><a href="{{ craue_setting('scuttle_url') }}/bookmarks.php?action=add&amp;address={{ entry.url|url_encode }}&amp;title={{ entry.title|url_encode }}&amp;tags={{ entry.tags|join(',')|url_encode }}" target="_blank" rel="noopener" class="tool icon-image icon-image--scuttle" title="scuttle"><span>scuttle</span></a></li>{% endif %}
34 {% if craue_setting('share_diaspora') %}<li><a href="{{ craue_setting('diaspora_url') }}/bookmarklet?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}&notes=&v=1&noui=1&jump=doclose" target="_blank" rel="noopener" class="tool diaspora icon-image icon-image--diaspora" title="diaspora"><span>diaspora</span></a></li>{% endif %}
35 {% if craue_setting('share_unmark') %}<li><a href="{{ craue_setting('unmark_url') }}/mark/add?url={{ entry.url|url_encode }}&amp;title={{entry.title|url_encode}}&amp;v=6" target="_blank" rel="noopener" class="tool unmark icon-image icon-image--unmark" title="unmark"><span>unmark.it</span></a></li>{% endif %}
36 {% if craue_setting('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" rel="noopener" title="carrot"><span>Carrot</span></a></li>{% endif %}
37 {% if craue_setting('show_printlink') %}<li><a title="{{ 'entry.view.left_menu.print'|trans }}" class="tool icon icon-print" href="javascript: window.print();"><span>{{ 'entry.view.left_menu.print'|trans }}</span></a></li>{% endif %}
38 {% if craue_setting('export_epub') %}<li><a href="{{ path('export_entry', { 'id': entry.id, 'format': 'epub' }) }}" title="Generate ePub file">EPUB</a></li>{% endif %}
39 {% if craue_setting('export_mobi') %}<li><a href="{{ path('export_entry', { 'id': entry.id, 'format': 'mobi' }) }}" title="Generate Mobi file">MOBI</a></li>{% endif %}
40 {% if craue_setting('export_pdf') %}<li><a href="{{ path('export_entry', { 'id': entry.id, 'format': 'pdf' }) }}" title="Generate PDF file">PDF</a></li>{% endif %}
41 <li><a href="mailto:siteconfig@wallabag.org?subject=Wrong%20display%20in%20wallabag&amp;body={{ entry.url|url_encode }}" title="{{ 'entry.view.left_menu.problem.label'|trans }}" class="tool bad-display icon icon-delete"><span>{{ 'entry.view.left_menu.problem.label'|trans }}</span></a></li>
42 </ul>
43 </div>
44
45 <div id="article-informations">
46 <i class="tool icon icon-calendar" title="{{ 'entry.view.created_at'|trans }}">
47 {{ entry.createdAt|date('Y-m-d H:i') }}
48 </i>
49
50 {% if entry.publishedAt is not null %}
51 <i class="tool icon icon-pencil2" title="{{ 'entry.view.published_at'|trans }}">
52 {{ entry.publishedAt|date('Y-m-d H:i') }}
53 </i>
54 {% endif %}
55
56 {% if entry.publishedBy is not empty %}
57 <i class="tool icon icon-users" title="{{ 'entry.view.published_by'|trans }}">
58 {% for author in entry.publishedBy %}
59 {{ author }}{% if not loop.last %}, {% endif %}
60 {% endfor %}
61 </i>
62 {% endif %}
63
64 <i class="tool icon icon-time">
65 {% set readingTime = entry.readingTime / app.user.config.readingSpeed * 200 %}
66 {% if readingTime > 0 %}
67 {{ 'entry.list.reading_time_minutes_short'|trans({'%readingTime%': readingTime|round}) }}
68 {% else %}
69 {{ 'entry.list.reading_time_less_one_minute_short'|trans|raw }}
70 {% endif %}
71 </i>
72
73 <span class="tool link"><i class="material-icons">comment</i> {{ 'entry.view.annotations_on_the_entry'|transchoice(entry.annotations | length) }}</span>
74
75 {% if entry.originUrl is not empty %}
76 <i class="material-icons" title="{{ 'entry.view.provided_by'|trans }}">launch</i>
77 <a href="{{ entry.originUrl|e }}" target="_blank" rel="noopener" class="tool">
78 {{ entry.originUrl|striptags|removeSchemeAndWww|truncate(32) }}
79 </a>
80 {% endif %}
81
82 <aside class="tags">
83 <div class="card-entry-tags">
84 {% for tag in entry.tags %}
85 <span class="label-outline">
86 <i class="material-icons">label_outline</i>
87 <a href="{{ path('tag_entries', {'slug': tag.slug}) }}">{{ tag.label }}</a>
88 <a href="{{ path('remove_tag', { 'entry': entry.id, 'tag': tag.id }) }}" onclick="return confirm('{{ 'entry.confirm.delete_tag'|trans|escape('js') }}')" class="nostyle">
89 <i>✘</i>
90 </a>
91 </span>
92 {% endfor %}
93 </div>
94 <div class="input-field baggy-add-tag" style="display: none">
95 {{ render(controller( "WallabagCoreBundle:Tag:addTagForm", { 'id': entry.id } )) }}
96 </div>
97 </aside>
98 </div>
99 <article{% if entry.language is defined and entry.language is not null %} lang="{{ entry.getHTMLLanguage() }}"{% endif %}>
100 {{ entry.content | raw }}
101 </article>
102 </div>
103
104 <script id="annotationroutes" type="application/json">
105 {
106 "prefix": "",
107 "urls": {
108 "create": "{{ path('annotations_post_annotation', { 'entry': entry.id }) }}",
109 "update": "{{ path('annotations_put_annotation', { 'annotation': 'idAnnotation' }) }}",
110 "destroy": "{{ path('annotations_delete_annotation', { 'annotation': 'idAnnotation' }) }}",
111 "search": "{{ path('annotations_get_annotations', { 'entry': entry.id }) }}"
112 },
113 "entryId": "{{ entry.id }}"
114 }
115 </script>
116{% endblock %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/new.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/new.html.twig
deleted file mode 100644
index 03768a3d..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/new.html.twig
+++ /dev/null
@@ -1,7 +0,0 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'entry.new.page_title'|trans }}{% endblock %}
4
5{% block content %}
6 {{ render(controller( "WallabagCoreBundle:Entry:addEntryForm" )) }}
7{% endblock %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/new_form.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/new_form.html.twig
deleted file mode 100644
index 8c129068..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/new_form.html.twig
+++ /dev/null
@@ -1,14 +0,0 @@
1<form name="entry" method="post" action="{{ path('new_entry')}}">
2 {% if form_errors(form) %}
3 <span class="black-text">{{ form_errors(form) }}</span>
4 {% endif %}
5
6 {% if form_errors(form.url) %}
7 <span class="black-text">{{ form_errors(form.url) }}</span>
8 {% endif %}
9
10 {{ form_label(form.url) }}
11 {{ form_widget(form.url, { 'attr': {'autocomplete': 'off', 'placeholder': 'entry.new.placeholder'} }) }}
12
13 {{ form_rest(form) }}
14</form>
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/search_form.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/search_form.html.twig
deleted file mode 100644
index 20821b6d..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/search_form.html.twig
+++ /dev/null
@@ -1,17 +0,0 @@
1<form name="search" method="GET" action="{{ path('search')}}">
2 <h2>{{ 'menu.left.search'|trans }}</h2>
3 <a href="javascript: void(null);" id="search-form-close" class="close-button--popup close-button">&times;</a>
4 {% if form_errors(form) %}
5 <span class="black-text">{{ form_errors(form) }}</span>
6 {% endif %}
7
8 {% if form_errors(form.term) %}
9 <span class="black-text">{{ form_errors(form.term) }}</span>
10 {% endif %}
11
12 <input type="hidden" name="currentRoute" value="{{ currentRoute }}" />
13
14 {{ form_widget(form.term, { 'attr': {'autocomplete': 'off', 'placeholder': 'entry.search.placeholder'} }) }}
15
16 {{ form_rest(form) }}
17</form>
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Exception/error.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Exception/error.html.twig
deleted file mode 100644
index 9959cc3d..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Exception/error.html.twig
+++ /dev/null
@@ -1,24 +0,0 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'error.page_title'|trans }}{% endblock %}
4
5{% block body_class %}login{% endblock %}
6
7{% block menu %}{% endblock %}
8{% block messages %}{% endblock %}
9{% block header %}{% endblock %}
10
11{% block content %}
12<main class="valign-wrapper">
13 <div class="valign row">
14 <div class="card sw">
15 <div class="center"><img src="{{ asset('wallassets/themes/_global/img/logo-w.png') }}" alt="wallabag logo" /></div>
16 <h2>{{ status_code }}: {{ status_text }}</h2>
17 <p>{{ exception.message }}</p>
18 </div>
19 </div>
20</main>
21{% endblock %}
22
23{% block footer %}
24{% endblock %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Mail/forgotPassword.txt.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Mail/forgotPassword.txt.twig
deleted file mode 100644
index 631bcb88..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Mail/forgotPassword.txt.twig
+++ /dev/null
@@ -1,6 +0,0 @@
1Hello {{username}}!
2
3To reset your password - please visit {{confirmationUrl}}
4
5Regards,
6Wallabag bot
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/README.md b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/README.md
deleted file mode 100644
index 3db07873..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
1# Baggy Theme
2
3theme created by Thomas LEBEAU alias Courgette http://thomaslebeau.fr/
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/SiteCredential/edit.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/SiteCredential/edit.html.twig
deleted file mode 100644
index 882be430..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/SiteCredential/edit.html.twig
+++ /dev/null
@@ -1,60 +0,0 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'site_credential.page_title'|trans }}{% endblock %}
4
5{% block content %}
6
7 <div class="row">
8 <div class="col s12">
9 <div class="card-panel">
10 <div class="row">
11 <div class="input-field col s12">
12 <h4>{{ 'site_credential.edit_site_credential'|trans }}</h4>
13
14 <div id="set6" class="col s12">
15 {{ form_start(edit_form) }}
16 {{ form_errors(edit_form) }}
17
18 <div class="row">
19 <div class="input-field col s12">
20 {{ form_label(edit_form.host) }}
21 {{ form_errors(edit_form.host) }}
22 {{ form_widget(edit_form.host) }}
23 </div>
24 </div>
25
26 <div class="row">
27 <div class="input-field col s12">
28 {{ form_label(edit_form.username) }}
29 {{ form_errors(edit_form.username) }}
30 {{ form_widget(edit_form.username) }}
31 </div>
32 </div>
33
34 <div class="row">
35 <div class="input-field col s12">
36 {{ form_label(edit_form.password) }}
37 {{ form_errors(edit_form.password) }}
38 {{ form_widget(edit_form.password) }}
39 </div>
40 </div>
41
42 <br/>
43
44 {{ form_widget(edit_form.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }}
45 {{ form_widget(edit_form._token) }}
46 </form>
47 <p>
48 {{ form_start(delete_form) }}
49 <button onclick="return confirm('{{ 'site_credential.form.delete_confirm'|trans|escape('js') }}')" type="submit" class="btn waves-effect waves-light red">{{ 'site_credential.form.delete'|trans }}</button>
50 {{ form_end(delete_form) }}
51 </p>
52 <p><a class="waves-effect waves-light btn blue-grey" href="{{ path('site_credentials_index') }}">{{ 'site_credential.form.back_to_list'|trans }}</a></p>
53 </div>
54 </div>
55 </div>
56 </div>
57 </div>
58 </div>
59
60{% endblock %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/SiteCredential/index.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/SiteCredential/index.html.twig
deleted file mode 100644
index 324854ad..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/SiteCredential/index.html.twig
+++ /dev/null
@@ -1,42 +0,0 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'site_credential.page_title'|trans }}{% endblock %}
4
5{% block content %}
6
7 <div class="row">
8 <div class="col s12">
9 <div class="card-panel">
10 <div class="row">
11 <div class="input-field col s12">
12 <p class="help">{{ 'site_credential.description'|trans|raw }}</p>
13
14 <table class="bordered">
15 <thead>
16 <tr>
17 <th>{{ 'site_credential.form.host_label'|trans }}</th>
18 <th>{{ 'site_credential.list.actions'|trans }}</th>
19 </tr>
20 </thead>
21 <tbody>
22 {% for credential in credentials %}
23 <tr>
24 <td>{{ credential.host }}</td>
25 <td>
26 <a href="{{ path('site_credentials_edit', { 'id': credential.id }) }}">{{ 'site_credential.list.edit_action'|trans }}</a>
27 </td>
28 </tr>
29 {% endfor %}
30 </tbody>
31 </table>
32 <br />
33 <p>
34 <a href="{{ path('site_credentials_new') }}" class="waves-effect waves-light btn">{{ 'site_credential.list.create_new_one'|trans }}</a>
35 </p>
36 </div>
37 </div>
38 </div>
39 </div>
40 </div>
41
42{% endblock %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/SiteCredential/new.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/SiteCredential/new.html.twig
deleted file mode 100644
index 3c008cde..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/SiteCredential/new.html.twig
+++ /dev/null
@@ -1,53 +0,0 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'site_credential.page_title'|trans }}{% endblock %}
4
5{% block content %}
6
7 <div class="row">
8 <div class="col s12">
9 <div class="card-panel">
10 <div class="row">
11 <div class="input-field col s12">
12 <h4>{{ 'site_credential.new_site_credential'|trans }}</h4>
13
14 <div id="set6" class="col s12">
15 {{ form_start(form) }}
16 {{ form_errors(form) }}
17
18 <div class="row">
19 <div class="input-field col s12">
20 {{ form_label(form.host) }}
21 {{ form_errors(form.host) }}
22 {{ form_widget(form.host) }}
23 </div>
24 </div>
25
26 <div class="row">
27 <div class="input-field col s12">
28 {{ form_label(form.username) }}
29 {{ form_errors(form.username) }}
30 {{ form_widget(form.username) }}
31 </div>
32 </div>
33
34 <div class="row">
35 <div class="input-field col s12">
36 {{ form_label(form.password) }}
37 {{ form_errors(form.password) }}
38 {{ form_widget(form.password) }}
39 </div>
40 </div>
41
42 {{ form_widget(form.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }}
43 {{ form_rest(form) }}
44 </form>
45 <p><a class="waves-effect waves-light btn blue-grey" href="{{ path('site_credentials_index') }}">{{ 'site_credential.form.back_to_list'|trans }}</a></p>
46 </div>
47 </div>
48 </div>
49 </div>
50 </div>
51 </div>
52
53{% endblock %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Tag/new_form.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Tag/new_form.html.twig
deleted file mode 100644
index 6e552560..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Tag/new_form.html.twig
+++ /dev/null
@@ -1,13 +0,0 @@
1<form name="tag" method="post" action="{{ path('new_tag', { 'entry': entry.id })}}">
2 {% if form_errors(form) %}
3 <span class="black-text">{{ form_errors(form) }}</span>
4 {% endif %}
5
6 {% if form_errors(form.label) %}
7 <span class="black-text">{{ form_errors(form.label) }}</span>
8 {% endif %}
9
10 {{ form_widget(form.label, { 'attr': {'autocomplete': 'off'} }) }}
11
12 {{ form_rest(form) }}
13</form>
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Tag/tags.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Tag/tags.html.twig
deleted file mode 100644
index aa17b842..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Tag/tags.html.twig
+++ /dev/null
@@ -1,40 +0,0 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'tag.page_title'|trans }}{% endblock %}
4
5{% block content %}
6 <div class="results">
7 <div class="nb-results">{{ 'tag.list.number_on_the_page'|transchoice(tags|length) }}</div>
8 </div>
9
10 <ul>
11 {% for tag in tags %}
12 <li id="tag-{{ tag.id|e }}">
13 <a href="{{ path('tag_entries', {'slug': tag.slug}) }}" data-handle="tag-link">{{ tag.label }}&nbsp;({{ tag.nbEntries }})</a>
14
15 {% if renameForms is defined and renameForms[tag.id] is defined %}
16 <form class="card-tag-form hidden" data-handle="tag-rename-form" action="{{ path('tag_rename', {'slug': tag.slug})}}" method="POST">
17 {{ form_widget(renameForms[tag.id].label, {'attr': {'value': tag.label}}) }}
18 {{ form_rest(renameForms[tag.id]) }}
19 </form>
20 <a class="card-tag-rename" data-handler="tag-rename" href="javascript:void(0);">
21 <i class="material-icons">mode_edit</i>
22 </a>
23 {% endif %}
24 {% if app.user.config.feedToken %}
25 <a rel="alternate" type="application/atom+xml" href="{{ path('tag_feed', {'username': app.user.username, 'token': app.user.config.feedToken, 'slug': tag.slug}) }}" class="right">
26 <i class="material-icons md-24">rss_feed</i>
27 </a>
28 {% endif %}
29 </li>
30 {% endfor %}
31 </ul>
32
33 <div>
34 {% if nbEntriesUntagged == 0 %}
35 {{ 'tag.list.no_untagged_entries'|trans }}
36 {% else %}
37 <a href="{{ path('untagged') }}">{{ 'tag.list.see_untagged_entries'|trans }} ({{nbEntriesUntagged}})</a>
38 {% endif %}
39 </div>
40{% endblock %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/layout.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/layout.html.twig
deleted file mode 100644
index 6b1e2bd7..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/layout.html.twig
+++ /dev/null
@@ -1,71 +0,0 @@
1{% extends "WallabagCoreBundle::base.html.twig" %}
2
3{% block css %}
4 {{ parent() }}
5 {% if not app.debug %}
6 <link rel="stylesheet" href="{{ asset('wallassets/baggy.css') }}">
7 {% endif %}
8{% endblock %}
9
10{% block scripts %}
11 {{ parent() }}
12 <script src="{{ asset('wallassets/baggy' ~ (app.debug ? '.dev' : '') ~ '.js') }}"></script>
13{% endblock %}
14
15{% block header %}
16 <header class="w600p center mbm">
17 <h1 class="logo">
18 {% block logo %}
19 <a title="{{ 'menu.left.back_to_unread'|trans }}" href="{{ path('unread') }}">
20 <img width="100" height="100" src="{{ asset('wallassets/themes/_global/img/logo-w.png') }}" alt="wallabag logo" />
21 </a>
22 {% endblock %}
23 </h1>
24 </header>
25{% endblock %}
26
27{% block menu %}
28 <button id="menu" class="icon icon-menu desktopHide"><span>Menu</span></button>
29 <ul id="links" class="links">
30 <li class="menu unread"><a href="{{ path('unread') }}">{{ 'menu.left.unread'|trans }}</a></li>
31 <li class="menu starred"><a href="{{ path('starred') }}">{{ 'menu.left.starred'|trans }}</a></li>
32 <li class="menu archive"><a href="{{ path('archive') }}">{{ 'menu.left.archive'|trans }}</a></li>
33 <li class="menu all"><a href="{{ path('all') }}">{{ 'menu.left.all_articles'|trans }}</a></li>
34 <li class="menu tag"><a href="{{ path('tag') }}">{{ 'menu.left.tags'|trans }}</a></li>
35 <li class="menu new"><a href="{{ path('new') }}">{{ 'menu.left.save_link'|trans }}</a></li>
36 <li style="position: relative;"><a href="javascript: void(null);" id="search">{{ 'menu.left.search'|trans }}</a>
37 <div id="search-form" class="messages info popup-form">
38 {{ render(controller("WallabagCoreBundle:Entry:searchForm", {'currentRoute': app.request.attributes.get('_route')})) }}
39 </div>
40 </li>
41 {% if craue_setting('restricted_access') %}
42 <li class="menu site_credentials"><a href="{{ path('site_credentials_index') }}">{{ 'menu.left.site_credentials'|trans }}</a></li>
43 {% endif %}
44 <li class="menu config"><a href="{{ path('config') }}">{{ 'menu.left.config'|trans }}</a></li>
45 {% if is_granted('ROLE_SUPER_ADMIN') %}
46 <li class="menu users"><a href="{{ path('user_index') }}">{{ 'menu.left.users_management'|trans }}</a></li>
47 <li class="menu internal"><a href="{{ path('craue_config_settings_modify') }}">{{ 'menu.left.internal_settings'|trans }}</a></li>
48 {% endif %}
49 <li class="menu import"><a href="{{ path('import') }}">{{ 'menu.left.import'|trans }}</a></li>
50 <li class="menu howto"><a href="{{ path('howto') }}">{{ 'menu.left.howto'|trans }}</a></li>
51 <li class="menu developer"><a href="{{ path('developer') }}">{{ 'menu.left.developer'|trans }}</a></li>
52 <li class="menu about"><a href="{{ path('about') }}">{{ 'footer.wallabag.about'|trans }}</a></li>
53 <li class="menu quickstart"><a href="{{ path('quickstart') }}">{{ 'menu.left.quickstart'|trans }}</a></li>
54 <li class="menu logout"><a class="icon icon-power" href="{{ path('fos_user_security_logout') }}">{{ 'menu.left.logout'|trans }}</a></li>
55 </ul>
56{% endblock %}
57
58{% block messages %}
59 {% for flashMessage in app.session.flashbag.get('notice') %}
60 <div class="messages success">
61 <a href="#" class="closeMessage">×</a>
62 <p>{{ flashMessage|trans }}</p>
63 </div>
64 {% endfor %}
65{% endblock %}
66
67{% block footer %}
68 <footer class="w600p center mt3 mb3 smaller txtright">
69 <p>{{ 'footer.wallabag.powered_by'|trans }} <a href="http://wallabag.org">wallabag</a></p>
70 </footer>
71{% endblock %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/screenshot.jpg b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/screenshot.jpg
deleted file mode 100755
index 19cd24bb..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/screenshot.jpg
+++ /dev/null
Binary files differ
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig
index d8e9694d..212e08a9 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig
@@ -294,10 +294,10 @@
294 « {{ tagging_rule.rule }} » 294 « {{ tagging_rule.rule }} »
295 {{ 'config.form_rules.then_tag_as_label'|trans }} 295 {{ 'config.form_rules.then_tag_as_label'|trans }}
296 « {{ tagging_rule.tags|join(', ') }} » 296 « {{ tagging_rule.tags|join(', ') }} »
297 <a href="{{ path('edit_tagging_rule', {id: tagging_rule.id}) }}" title="{{ 'config.form_rules.edit_rule_label'|trans }}"> 297 <a class="edit-rule" href="{{ path('edit_tagging_rule', {id: tagging_rule.id}) }}" title="{{ 'config.form_rules.edit_rule_label'|trans }}">
298 <i class="tool grey-text mode_edit material-icons">mode_edit</i> 298 <i class="tool grey-text mode_edit material-icons">mode_edit</i>
299 </a> 299 </a>
300 <a href="{{ path('delete_tagging_rule', {id: tagging_rule.id}) }}" title="{{ 'config.form_rules.delete_rule_label'|trans }}"> 300 <a class="delete-rule" href="{{ path('delete_tagging_rule', {id: tagging_rule.id}) }}" title="{{ 'config.form_rules.delete_rule_label'|trans }}">
301 <i class="tool grey-text delete material-icons">delete</i> 301 <i class="tool grey-text delete material-icons">delete</i>
302 </a> 302 </a>
303 </li> 303 </li>
diff --git a/tests/Wallabag/CoreBundle/Controller/ConfigControllerTest.php b/tests/Wallabag/CoreBundle/Controller/ConfigControllerTest.php
index fa93c9c2..39fa48fe 100644
--- a/tests/Wallabag/CoreBundle/Controller/ConfigControllerTest.php
+++ b/tests/Wallabag/CoreBundle/Controller/ConfigControllerTest.php
@@ -49,7 +49,7 @@ class ConfigControllerTest extends WallabagCoreTestCase
49 $form = $crawler->filter('button[id=config_save]')->form(); 49 $form = $crawler->filter('button[id=config_save]')->form();
50 50
51 $data = [ 51 $data = [
52 'config[theme]' => 'baggy', 52 'config[theme]' => 'material',
53 'config[items_per_page]' => '30', 53 'config[items_per_page]' => '30',
54 'config[reading_speed]' => '100', 54 'config[reading_speed]' => '100',
55 'config[action_mark_as_read]' => '0', 55 'config[action_mark_as_read]' => '0',
@@ -68,7 +68,6 @@ class ConfigControllerTest extends WallabagCoreTestCase
68 public function testChangeReadingSpeed() 68 public function testChangeReadingSpeed()
69 { 69 {
70 $this->logInAs('admin'); 70 $this->logInAs('admin');
71 $this->useTheme('baggy');
72 $client = $this->getClient(); 71 $client = $this->getClient();
73 72
74 $entry = new Entry($this->getLoggedInUser()); 73 $entry = new Entry($this->getLoggedInUser());
@@ -115,7 +114,7 @@ class ConfigControllerTest extends WallabagCoreTestCase
115 { 114 {
116 return [ 115 return [
117 [[ 116 [[
118 'config[theme]' => 'baggy', 117 'config[theme]' => 'material',
119 'config[items_per_page]' => '', 118 'config[items_per_page]' => '',
120 'config[language]' => 'en', 119 'config[language]' => 'en',
121 ]], 120 ]],
@@ -435,7 +434,6 @@ class ConfigControllerTest extends WallabagCoreTestCase
435 public function testTaggingRuleCreation() 434 public function testTaggingRuleCreation()
436 { 435 {
437 $this->logInAs('admin'); 436 $this->logInAs('admin');
438 $this->useTheme('baggy');
439 $client = $this->getClient(); 437 $client = $this->getClient();
440 438
441 $crawler = $client->request('GET', '/config'); 439 $crawler = $client->request('GET', '/config');
@@ -457,7 +455,7 @@ class ConfigControllerTest extends WallabagCoreTestCase
457 455
458 $this->assertContains('flashes.config.notice.tagging_rules_updated', $crawler->filter('body')->extract(['_text'])[0]); 456 $this->assertContains('flashes.config.notice.tagging_rules_updated', $crawler->filter('body')->extract(['_text'])[0]);
459 457
460 $editLink = $crawler->filter('.mode_edit')->last()->link(); 458 $editLink = $crawler->filter('.edit-rule')->last()->link();
461 459
462 $crawler = $client->click($editLink); 460 $crawler = $client->click($editLink);
463 $this->assertSame(302, $client->getResponse()->getStatusCode()); 461 $this->assertSame(302, $client->getResponse()->getStatusCode());
@@ -482,7 +480,7 @@ class ConfigControllerTest extends WallabagCoreTestCase
482 480
483 $this->assertContains('readingTime <= 30', $crawler->filter('body')->extract(['_text'])[0]); 481 $this->assertContains('readingTime <= 30', $crawler->filter('body')->extract(['_text'])[0]);
484 482
485 $deleteLink = $crawler->filter('.delete')->last()->link(); 483 $deleteLink = $crawler->filter('.delete-rule')->last()->link();
486 484
487 $crawler = $client->click($deleteLink); 485 $crawler = $client->click($deleteLink);
488 $this->assertSame(302, $client->getResponse()->getStatusCode()); 486 $this->assertSame(302, $client->getResponse()->getStatusCode());
@@ -966,19 +964,18 @@ class ConfigControllerTest extends WallabagCoreTestCase
966 public function testSwitchViewMode() 964 public function testSwitchViewMode()
967 { 965 {
968 $this->logInAs('admin'); 966 $this->logInAs('admin');
969 $this->useTheme('baggy');
970 $client = $this->getClient(); 967 $client = $this->getClient();
971 968
972 $client->request('GET', '/unread/list'); 969 $client->request('GET', '/unread/list');
973 970
974 $this->assertNotContains('listmode', $client->getResponse()->getContent()); 971 $this->assertNotContains('collection', $client->getResponse()->getContent());
975 972
976 $client->request('GET', '/config/view-mode'); 973 $client->request('GET', '/config/view-mode');
977 $crawler = $client->followRedirect(); 974 $crawler = $client->followRedirect();
978 975
979 $client->request('GET', '/unread/list'); 976 $client->request('GET', '/unread/list');
980 977
981 $this->assertContains('listmode', $client->getResponse()->getContent()); 978 $this->assertContains('collection', $client->getResponse()->getContent());
982 979
983 $client->request('GET', '/config/view-mode'); 980 $client->request('GET', '/config/view-mode');
984 } 981 }
diff --git a/tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php b/tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php
index 8960dd25..dce74551 100644
--- a/tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php
+++ b/tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php
@@ -73,20 +73,6 @@ class EntryControllerTest extends WallabagCoreTestCase
73 $this->assertContains('entry.list.number_on_the_page', $body[0]); 73 $this->assertContains('entry.list.number_on_the_page', $body[0]);
74 } 74 }
75 75
76 public function testGetNew()
77 {
78 $this->logInAs('admin');
79 $this->useTheme('baggy');
80 $client = $this->getClient();
81
82 $crawler = $client->request('GET', '/new');
83
84 $this->assertSame(200, $client->getResponse()->getStatusCode());
85
86 $this->assertCount(1, $crawler->filter('input[type=url]'));
87 $this->assertCount(1, $crawler->filter('form[name=entry]'));
88 }
89
90 public function testPostNewViaBookmarklet() 76 public function testPostNewViaBookmarklet()
91 { 77 {
92 $this->logInAs('admin'); 78 $this->logInAs('admin');
diff --git a/tests/Wallabag/UserBundle/EventListener/CreateConfigListenerTest.php b/tests/Wallabag/UserBundle/EventListener/CreateConfigListenerTest.php
index 8a8ec3cf..9d31fe92 100644
--- a/tests/Wallabag/UserBundle/EventListener/CreateConfigListenerTest.php
+++ b/tests/Wallabag/UserBundle/EventListener/CreateConfigListenerTest.php
@@ -31,7 +31,7 @@ class CreateConfigListenerTest extends TestCase
31 31
32 $this->listener = new CreateConfigListener( 32 $this->listener = new CreateConfigListener(
33 $this->em, 33 $this->em,
34 'baggy', 34 'material',
35 20, 35 20,
36 50, 36 50,
37 'fr', 37 'fr',
@@ -60,7 +60,7 @@ class CreateConfigListenerTest extends TestCase
60 ); 60 );
61 61
62 $config = new Config($user); 62 $config = new Config($user);
63 $config->setTheme('baggy'); 63 $config->setTheme('material');
64 $config->setItemsPerPage(20); 64 $config->setItemsPerPage(20);
65 $config->setFeedLimit(50); 65 $config->setFeedLimit(50);
66 $config->setLanguage('fr'); 66 $config->setLanguage('fr');