From 64f81bc31699ed239e4becec1cfa7ebc0bef2b5a Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Fri, 31 Mar 2017 20:21:41 +0200 Subject: [PATCH] Adds Webpack support and removes the use for Grunt Signed-off-by: Thomas Citharel use scss Signed-off-by: Thomas Citharel fix build, add babel, fix annotations fixes (and improvements !) for baggy add live reload & environments & eslint & theme fixes --- .babelrc | 5 + .gitignore | 1 + .travis.yml | 2 +- Gruntfile.js | 230 - app/AppKernel.php | 9 + .../static/themes/_global/global.scss | 13 + .../_global/img/icons/Diaspora-asterisk.svg | 334 + app/Resources/static/themes/_global/index.js | 52 + .../static/themes/_global/js/tools.js | 23 +- .../static/themes/baggy/css/article.scss | 165 + .../static/themes/baggy/css/font.css | 6 - .../static/themes/baggy/css/guide.scss | 263 + .../static/themes/baggy/css/index.scss | 13 + .../static/themes/baggy/css/layout.scss | 300 + .../static/themes/baggy/css/login.scss | 26 + .../themes/baggy/css/media_queries.scss | 172 + .../static/themes/baggy/css/messages.css | 19 - .../static/themes/baggy/css/messages.scss | 50 + .../static/themes/baggy/css/pictos.scss | 210 + .../baggy/css/{print.css => print.scss} | 7 +- .../css/{ratatouille.css => ratatouille.scss} | 0 .../static/themes/baggy/css/save.scss | 115 + .../static/themes/baggy/font/icomoon.eot | Bin 97236 -> 0 bytes .../static/themes/baggy/font/icomoon.svg | 501 - .../static/themes/baggy/font/icomoon.ttf | Bin 97072 -> 0 bytes .../static/themes/baggy/font/icomoon.woff | Bin 97148 -> 0 bytes .../themes/baggy/{js/init.js => index.js} | 128 +- .../static/themes/baggy/js/shortcuts/main.js | 3 + .../static/themes/material/css/article.scss | 174 + .../static/themes/material/css/cards.scss | 186 + .../static/themes/material/css/entries.scss | 87 + .../static/themes/material/css/filters.scss | 15 + .../static/themes/material/css/fonts.scss | 13 + .../static/themes/material/css/icons.scss | 185 + .../static/themes/material/css/index.scss | 17 + .../static/themes/material/css/layout.scss | 50 + .../themes/material/css/media_queries.scss | 149 + .../static/themes/material/css/nav.scss | 106 + .../material/css/{print.css => print.scss} | 5 +- .../static/themes/material/css/sidenav.scss | 41 + .../static/themes/material/css/variables.scss | 5 + .../static/themes/material/css/various.scss | 24 + .../themes/material/{js/init.js => index.js} | 56 +- .../static/themes/material/js/tools.js | 24 + app/config/config.yml | 3 + app/config/config_prod.yml | 6 +- app/config/webpack/common.js | 40 + app/config/webpack/dev.js | 62 + app/config/webpack/prod.js | 99 + docs/en/developer/front_end.rst | 33 + docs/fr/developer/front-end.rst | 33 + package.json | 110 +- postcss.config.js | 7 + .../themes/baggy/Entry/entries.html.twig | 14 +- .../views/themes/baggy/Entry/entry.html.twig | 2 +- .../views/themes/baggy/layout.html.twig | 6 +- .../themes/material/Entry/entries.html.twig | 4 +- .../themes/material/Entry/entry.html.twig | 15 +- .../views/themes/material/layout.html.twig | 10 +- web/bundles/wallabagcore/baggy.css | 2 + web/bundles/wallabagcore/baggy.css.map | 1 + web/bundles/wallabagcore/baggy.js | 1 + .../{themes/baggy => }/fonts/IcoMoon-Free.ttf | Bin .../fonts/MaterialIcons-Regular.eot | Bin .../fonts/MaterialIcons-Regular.ttf | Bin .../fonts/MaterialIcons-Regular.woff | Bin .../fonts/MaterialIcons-Regular.woff2 | Bin .../wallabagcore/fonts/Roboto-Bold.woff | Bin 0 -> 90308 bytes .../wallabagcore/fonts/Roboto-Bold.woff2 | Bin 0 -> 64800 bytes .../wallabagcore/fonts/Roboto-Light.woff | Bin 0 -> 89672 bytes .../wallabagcore/fonts/Roboto-Light.woff2 | Bin 0 -> 64268 bytes .../wallabagcore/fonts/Roboto-Medium.woff | Bin 0 -> 90560 bytes .../wallabagcore/fonts/Roboto-Medium.woff2 | Bin 0 -> 65412 bytes .../wallabagcore/fonts/Roboto-Regular.woff | Bin 0 -> 89828 bytes .../wallabagcore/fonts/Roboto-Regular.woff2 | Bin 0 -> 64832 bytes .../wallabagcore/fonts/Roboto-Thin.woff | Bin 0 -> 88132 bytes .../wallabagcore/fonts/Roboto-Thin.woff2 | Bin 0 -> 63056 bytes .../wallabagcore/fonts/lato-black-italic.woff | Bin 0 -> 310776 bytes .../fonts/lato-black-italic.woff2 | Bin 0 -> 185544 bytes .../wallabagcore/fonts/lato-black.woff | Bin 0 -> 297272 bytes .../wallabagcore/fonts/lato-black.woff2 | Bin 0 -> 176748 bytes .../wallabagcore/fonts/lato-bold-italic.woff | Bin 0 -> 323344 bytes .../wallabagcore/fonts/lato-bold-italic.woff2 | Bin 0 -> 193308 bytes web/bundles/wallabagcore/fonts/lato-bold.woff | Bin 0 -> 309728 bytes .../wallabagcore/fonts/lato-bold.woff2 | Bin 0 -> 184912 bytes .../fonts/lato-hairline-italic.woff | Bin 0 -> 293900 bytes .../fonts/lato-hairline-italic.woff2 | Bin 0 -> 173948 bytes .../wallabagcore/fonts/lato-hairline.woff | Bin 0 -> 274692 bytes .../wallabagcore/fonts/lato-hairline.woff2 | Bin 0 -> 161672 bytes .../wallabagcore/fonts/lato-heavy-italic.woff | Bin 0 -> 322780 bytes .../fonts/lato-heavy-italic.woff2 | Bin 0 -> 194272 bytes .../wallabagcore/fonts/lato-heavy.woff | Bin 0 -> 309924 bytes .../wallabagcore/fonts/lato-heavy.woff2 | Bin 0 -> 184520 bytes .../wallabagcore/fonts/lato-light-italic.woff | Bin 0 -> 325296 bytes .../fonts/lato-light-italic.woff2 | Bin 0 -> 192916 bytes .../wallabagcore/fonts/lato-light.woff | Bin 0 -> 310884 bytes .../wallabagcore/fonts/lato-light.woff2 | Bin 0 -> 181500 bytes .../fonts/lato-medium-italic.woff | Bin 0 -> 325936 bytes .../fonts/lato-medium-italic.woff2 | Bin 0 -> 194608 bytes .../wallabagcore/fonts/lato-medium.woff | Bin 0 -> 305920 bytes .../wallabagcore/fonts/lato-medium.woff2 | Bin 0 -> 182144 bytes .../fonts/lato-normal-italic.woff | Bin 0 -> 328412 bytes .../fonts/lato-normal-italic.woff2 | Bin 0 -> 195704 bytes .../wallabagcore/fonts/lato-normal.woff | Bin 0 -> 309192 bytes .../wallabagcore/fonts/lato-normal.woff2 | Bin 0 -> 182708 bytes .../fonts/lato-semibold-italic.woff | Bin 0 -> 327188 bytes .../fonts/lato-semibold-italic.woff2 | Bin 0 -> 195128 bytes .../wallabagcore/fonts/lato-semibold.woff | Bin 0 -> 312952 bytes .../wallabagcore/fonts/lato-semibold.woff2 | Bin 0 -> 184076 bytes .../wallabagcore/fonts/lato-thin-italic.woff | Bin 0 -> 323532 bytes .../wallabagcore/fonts/lato-thin-italic.woff2 | Bin 0 -> 191804 bytes web/bundles/wallabagcore/fonts/lato-thin.woff | Bin 0 -> 306060 bytes .../wallabagcore/fonts/lato-thin.woff2 | Bin 0 -> 180576 bytes .../wallabagcore/img/Diaspora-asterisk.svg | 334 + .../img/annotator-glyph-sprite.png | Bin 0 -> 5085 bytes .../img/annotator-icon-sprite.png | Bin 0 -> 7184 bytes web/bundles/wallabagcore/img/bg-select.png | Bin 0 -> 1095 bytes .../wallabagcore/img/carrot-icon--black.png | Bin 0 -> 1538 bytes .../wallabagcore/img/carrot-icon--white.png | Bin 0 -> 1605 bytes .../wallabagcore/img/diaspora-icon--black.png | Bin 0 -> 1555 bytes web/bundles/wallabagcore/img/list.png | Bin 0 -> 201 bytes web/bundles/wallabagcore/img/shaarli.png | Bin 0 -> 2143 bytes web/bundles/wallabagcore/img/table.png | Bin 0 -> 229 bytes .../wallabagcore/img/unmark-icon--black.png | Bin 0 -> 926 bytes web/bundles/wallabagcore/manifest.json | 70 + web/bundles/wallabagcore/material.css | 2 + web/bundles/wallabagcore/material.css.map | 1 + web/bundles/wallabagcore/material.js | 1 + .../themes/baggy/fonts/ptsansbold.woff | Bin 32308 -> 0 bytes .../wallabagcore/themes/baggy/js/baggy.min.js | 20 - .../material/font/roboto/Roboto-Black.eot | Bin 21963 -> 0 bytes .../material/font/roboto/Roboto-Black.svg | 10968 --------------- .../material/font/roboto/Roboto-Black.ttf | Bin 180092 -> 0 bytes .../material/font/roboto/Roboto-Black.woff | Bin 90116 -> 0 bytes .../material/font/roboto/Roboto-Black.woff2 | Bin 65060 -> 0 bytes .../font/roboto/Roboto-BlackItalic.eot | Bin 26585 -> 0 bytes .../font/roboto/Roboto-BlackItalic.svg | 11086 --------------- .../font/roboto/Roboto-BlackItalic.ttf | Bin 185460 -> 0 bytes .../font/roboto/Roboto-BlackItalic.woff | Bin 98896 -> 0 bytes .../font/roboto/Roboto-BlackItalic.woff2 | Bin 72612 -> 0 bytes .../material/font/roboto/Roboto-Bold.eot | Bin 22302 -> 0 bytes .../material/font/roboto/Roboto-Bold.svg | 11010 --------------- .../material/font/roboto/Roboto-Bold.ttf | Bin 169964 -> 0 bytes .../material/font/roboto/Roboto-Bold.woff | Bin 89208 -> 0 bytes .../material/font/roboto/Roboto-Bold.woff2 | Bin 63596 -> 0 bytes .../font/roboto/Roboto-BoldItalic.eot | Bin 26973 -> 0 bytes .../font/roboto/Roboto-BoldItalic.svg | 11096 --------------- .../font/roboto/Roboto-BoldItalic.ttf | Bin 174372 -> 0 bytes .../font/roboto/Roboto-BoldItalic.woff | Bin 94400 -> 0 bytes .../font/roboto/Roboto-BoldItalic.woff2 | Bin 68556 -> 0 bytes .../material/font/roboto/Roboto-Light.eot | Bin 21893 -> 0 bytes .../material/font/roboto/Roboto-Light.svg | 10564 --------------- .../material/font/roboto/Roboto-Light.ttf | Bin 179192 -> 0 bytes .../material/font/roboto/Roboto-Light.woff | Bin 89220 -> 0 bytes .../material/font/roboto/Roboto-Light.woff2 | Bin 64160 -> 0 bytes .../font/roboto/Roboto-LightItalic.eot | Bin 27816 -> 0 bytes .../font/roboto/Roboto-LightItalic.svg | 10646 --------------- .../font/roboto/Roboto-LightItalic.ttf | Bin 183252 -> 0 bytes .../font/roboto/Roboto-LightItalic.woff | Bin 95332 -> 0 bytes .../font/roboto/Roboto-LightItalic.woff2 | Bin 69836 -> 0 bytes .../material/font/roboto/Roboto-Medium.eot | Bin 22488 -> 0 bytes .../material/font/roboto/Roboto-Medium.svg | 10999 --------------- .../material/font/roboto/Roboto-Medium.ttf | Bin 179296 -> 0 bytes .../material/font/roboto/Roboto-Medium.woff | Bin 89724 -> 0 bytes .../material/font/roboto/Roboto-Medium.woff2 | Bin 64808 -> 0 bytes .../font/roboto/Roboto-MediumItalic.eot | Bin 27581 -> 0 bytes .../font/roboto/Roboto-MediumItalic.svg | 11100 ---------------- .../font/roboto/Roboto-MediumItalic.ttf | Bin 185744 -> 0 bytes .../font/roboto/Roboto-MediumItalic.woff | Bin 97516 -> 0 bytes .../font/roboto/Roboto-MediumItalic.woff2 | Bin 71608 -> 0 bytes .../material/font/roboto/Roboto-Regular.eot | Bin 22093 -> 0 bytes .../material/font/roboto/Roboto-Regular.svg | 10520 --------------- .../material/font/roboto/Roboto-Regular.ttf | Bin 170564 -> 0 bytes .../material/font/roboto/Roboto-Regular.woff | Bin 89432 -> 0 bytes .../material/font/roboto/Roboto-Regular.woff2 | Bin 64184 -> 0 bytes .../font/roboto/Roboto-RegularItalic.eot | Bin 26885 -> 0 bytes .../font/roboto/Roboto-RegularItalic.svg | 10629 --------------- .../font/roboto/Roboto-RegularItalic.ttf | Bin 172168 -> 0 bytes .../font/roboto/Roboto-RegularItalic.woff | Bin 94580 -> 0 bytes .../font/roboto/Roboto-RegularItalic.woff2 | Bin 69276 -> 0 bytes .../material/font/roboto/Roboto-Thin.eot | Bin 21239 -> 0 bytes .../material/font/roboto/Roboto-Thin.svg | 10617 --------------- .../material/font/roboto/Roboto-Thin.ttf | Bin 179784 -> 0 bytes .../material/font/roboto/Roboto-Thin.woff | Bin 87804 -> 0 bytes .../material/font/roboto/Roboto-Thin.woff2 | Bin 62824 -> 0 bytes .../font/roboto/Roboto-ThinItalic.eot | Bin 27851 -> 0 bytes .../font/roboto/Roboto-ThinItalic.svg | 10726 --------------- .../font/roboto/Roboto-ThinItalic.ttf | Bin 185004 -> 0 bytes .../font/roboto/Roboto-ThinItalic.woff | Bin 94032 -> 0 bytes .../font/roboto/Roboto-ThinItalic.woff2 | Bin 68140 -> 0 bytes .../themes/material/fonts/IcoMoon-Free.ttf | Bin 130416 -> 0 bytes .../material/fonts/MaterialIcons-Regular.eot | Bin 143258 -> 0 bytes .../material/fonts/MaterialIcons-Regular.ttf | Bin 128180 -> 0 bytes .../material/fonts/MaterialIcons-Regular.woff | Bin 57620 -> 0 bytes .../fonts/MaterialIcons-Regular.woff2 | Bin 44300 -> 0 bytes webpack.config.js | 8 + yarn.lock | 5083 +++++++ 197 files changed, 8709 insertions(+), 131003 deletions(-) create mode 100644 .babelrc delete mode 100644 Gruntfile.js create mode 100644 app/Resources/static/themes/_global/global.scss create mode 100644 app/Resources/static/themes/_global/img/icons/Diaspora-asterisk.svg create mode 100644 app/Resources/static/themes/_global/index.js create mode 100644 app/Resources/static/themes/baggy/css/article.scss delete mode 100755 app/Resources/static/themes/baggy/css/font.css create mode 100644 app/Resources/static/themes/baggy/css/guide.scss create mode 100644 app/Resources/static/themes/baggy/css/index.scss create mode 100644 app/Resources/static/themes/baggy/css/layout.scss create mode 100644 app/Resources/static/themes/baggy/css/login.scss create mode 100755 app/Resources/static/themes/baggy/css/media_queries.scss delete mode 100755 app/Resources/static/themes/baggy/css/messages.css create mode 100755 app/Resources/static/themes/baggy/css/messages.scss create mode 100644 app/Resources/static/themes/baggy/css/pictos.scss rename app/Resources/static/themes/baggy/css/{print.css => print.scss} (91%) rename app/Resources/static/themes/baggy/css/{ratatouille.css => ratatouille.scss} (100%) create mode 100644 app/Resources/static/themes/baggy/css/save.scss delete mode 100644 app/Resources/static/themes/baggy/font/icomoon.eot delete mode 100644 app/Resources/static/themes/baggy/font/icomoon.svg delete mode 100644 app/Resources/static/themes/baggy/font/icomoon.ttf delete mode 100644 app/Resources/static/themes/baggy/font/icomoon.woff rename app/Resources/static/themes/baggy/{js/init.js => index.js} (69%) create mode 100644 app/Resources/static/themes/material/css/article.scss create mode 100644 app/Resources/static/themes/material/css/cards.scss create mode 100644 app/Resources/static/themes/material/css/entries.scss create mode 100644 app/Resources/static/themes/material/css/filters.scss create mode 100644 app/Resources/static/themes/material/css/fonts.scss create mode 100644 app/Resources/static/themes/material/css/icons.scss create mode 100644 app/Resources/static/themes/material/css/index.scss create mode 100755 app/Resources/static/themes/material/css/layout.scss create mode 100644 app/Resources/static/themes/material/css/media_queries.scss create mode 100644 app/Resources/static/themes/material/css/nav.scss rename app/Resources/static/themes/material/css/{print.css => print.scss} (94%) create mode 100644 app/Resources/static/themes/material/css/sidenav.scss create mode 100644 app/Resources/static/themes/material/css/variables.scss create mode 100644 app/Resources/static/themes/material/css/various.scss rename app/Resources/static/themes/material/{js/init.js => index.js} (57%) create mode 100644 app/Resources/static/themes/material/js/tools.js create mode 100644 app/config/webpack/common.js create mode 100644 app/config/webpack/dev.js create mode 100644 app/config/webpack/prod.js create mode 100644 docs/en/developer/front_end.rst create mode 100644 docs/fr/developer/front-end.rst create mode 100644 postcss.config.js create mode 100644 web/bundles/wallabagcore/baggy.css create mode 100644 web/bundles/wallabagcore/baggy.css.map create mode 100644 web/bundles/wallabagcore/baggy.js rename web/bundles/wallabagcore/{themes/baggy => }/fonts/IcoMoon-Free.ttf (100%) rename web/bundles/wallabagcore/{themes/baggy => }/fonts/MaterialIcons-Regular.eot (100%) rename web/bundles/wallabagcore/{themes/baggy => }/fonts/MaterialIcons-Regular.ttf (100%) rename web/bundles/wallabagcore/{themes/baggy => }/fonts/MaterialIcons-Regular.woff (100%) rename web/bundles/wallabagcore/{themes/baggy => }/fonts/MaterialIcons-Regular.woff2 (100%) create mode 100644 web/bundles/wallabagcore/fonts/Roboto-Bold.woff create mode 100644 web/bundles/wallabagcore/fonts/Roboto-Bold.woff2 create mode 100644 web/bundles/wallabagcore/fonts/Roboto-Light.woff create mode 100644 web/bundles/wallabagcore/fonts/Roboto-Light.woff2 create mode 100644 web/bundles/wallabagcore/fonts/Roboto-Medium.woff create mode 100644 web/bundles/wallabagcore/fonts/Roboto-Medium.woff2 create mode 100644 web/bundles/wallabagcore/fonts/Roboto-Regular.woff create mode 100644 web/bundles/wallabagcore/fonts/Roboto-Regular.woff2 create mode 100644 web/bundles/wallabagcore/fonts/Roboto-Thin.woff create mode 100644 web/bundles/wallabagcore/fonts/Roboto-Thin.woff2 create mode 100644 web/bundles/wallabagcore/fonts/lato-black-italic.woff create mode 100644 web/bundles/wallabagcore/fonts/lato-black-italic.woff2 create mode 100644 web/bundles/wallabagcore/fonts/lato-black.woff create mode 100644 web/bundles/wallabagcore/fonts/lato-black.woff2 create mode 100644 web/bundles/wallabagcore/fonts/lato-bold-italic.woff create mode 100644 web/bundles/wallabagcore/fonts/lato-bold-italic.woff2 create mode 100644 web/bundles/wallabagcore/fonts/lato-bold.woff create mode 100644 web/bundles/wallabagcore/fonts/lato-bold.woff2 create mode 100644 web/bundles/wallabagcore/fonts/lato-hairline-italic.woff create mode 100644 web/bundles/wallabagcore/fonts/lato-hairline-italic.woff2 create mode 100644 web/bundles/wallabagcore/fonts/lato-hairline.woff create mode 100644 web/bundles/wallabagcore/fonts/lato-hairline.woff2 create mode 100644 web/bundles/wallabagcore/fonts/lato-heavy-italic.woff create mode 100644 web/bundles/wallabagcore/fonts/lato-heavy-italic.woff2 create mode 100644 web/bundles/wallabagcore/fonts/lato-heavy.woff create mode 100644 web/bundles/wallabagcore/fonts/lato-heavy.woff2 create mode 100644 web/bundles/wallabagcore/fonts/lato-light-italic.woff create mode 100644 web/bundles/wallabagcore/fonts/lato-light-italic.woff2 create mode 100644 web/bundles/wallabagcore/fonts/lato-light.woff create mode 100644 web/bundles/wallabagcore/fonts/lato-light.woff2 create mode 100644 web/bundles/wallabagcore/fonts/lato-medium-italic.woff create mode 100644 web/bundles/wallabagcore/fonts/lato-medium-italic.woff2 create mode 100644 web/bundles/wallabagcore/fonts/lato-medium.woff create mode 100644 web/bundles/wallabagcore/fonts/lato-medium.woff2 create mode 100644 web/bundles/wallabagcore/fonts/lato-normal-italic.woff create mode 100644 web/bundles/wallabagcore/fonts/lato-normal-italic.woff2 create mode 100644 web/bundles/wallabagcore/fonts/lato-normal.woff create mode 100644 web/bundles/wallabagcore/fonts/lato-normal.woff2 create mode 100644 web/bundles/wallabagcore/fonts/lato-semibold-italic.woff create mode 100644 web/bundles/wallabagcore/fonts/lato-semibold-italic.woff2 create mode 100644 web/bundles/wallabagcore/fonts/lato-semibold.woff create mode 100644 web/bundles/wallabagcore/fonts/lato-semibold.woff2 create mode 100644 web/bundles/wallabagcore/fonts/lato-thin-italic.woff create mode 100644 web/bundles/wallabagcore/fonts/lato-thin-italic.woff2 create mode 100644 web/bundles/wallabagcore/fonts/lato-thin.woff create mode 100644 web/bundles/wallabagcore/fonts/lato-thin.woff2 create mode 100644 web/bundles/wallabagcore/img/Diaspora-asterisk.svg create mode 100644 web/bundles/wallabagcore/img/annotator-glyph-sprite.png create mode 100644 web/bundles/wallabagcore/img/annotator-icon-sprite.png create mode 100644 web/bundles/wallabagcore/img/bg-select.png create mode 100644 web/bundles/wallabagcore/img/carrot-icon--black.png create mode 100644 web/bundles/wallabagcore/img/carrot-icon--white.png create mode 100644 web/bundles/wallabagcore/img/diaspora-icon--black.png create mode 100644 web/bundles/wallabagcore/img/list.png create mode 100644 web/bundles/wallabagcore/img/shaarli.png create mode 100644 web/bundles/wallabagcore/img/table.png create mode 100644 web/bundles/wallabagcore/img/unmark-icon--black.png create mode 100644 web/bundles/wallabagcore/manifest.json create mode 100644 web/bundles/wallabagcore/material.css create mode 100644 web/bundles/wallabagcore/material.css.map create mode 100644 web/bundles/wallabagcore/material.js delete mode 100644 web/bundles/wallabagcore/themes/baggy/fonts/ptsansbold.woff delete mode 100644 web/bundles/wallabagcore/themes/baggy/js/baggy.min.js delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-Black.eot delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-Black.svg delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-Black.ttf delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-Black.woff delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-Black.woff2 delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-BlackItalic.eot delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-BlackItalic.svg delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-BlackItalic.ttf delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-BlackItalic.woff delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-BlackItalic.woff2 delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-Bold.eot delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-Bold.svg delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-Bold.ttf delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-Bold.woff delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-Bold.woff2 delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-BoldItalic.eot delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-BoldItalic.svg delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-BoldItalic.ttf delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-BoldItalic.woff delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-BoldItalic.woff2 delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-Light.eot delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-Light.svg delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-Light.ttf delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-Light.woff delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-Light.woff2 delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-LightItalic.eot delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-LightItalic.svg delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-LightItalic.ttf delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-LightItalic.woff delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-LightItalic.woff2 delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-Medium.eot delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-Medium.svg delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-Medium.ttf delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-Medium.woff delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-Medium.woff2 delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-MediumItalic.eot delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-MediumItalic.svg delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-MediumItalic.ttf delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-MediumItalic.woff delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-MediumItalic.woff2 delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-Regular.eot delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-Regular.svg delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-Regular.ttf delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-Regular.woff delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-Regular.woff2 delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-RegularItalic.eot delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-RegularItalic.svg delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-RegularItalic.ttf delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-RegularItalic.woff delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-RegularItalic.woff2 delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-Thin.eot delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-Thin.svg delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-Thin.ttf delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-Thin.woff delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-Thin.woff2 delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-ThinItalic.eot delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-ThinItalic.svg delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-ThinItalic.ttf delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-ThinItalic.woff delete mode 100644 web/bundles/wallabagcore/themes/material/font/roboto/Roboto-ThinItalic.woff2 delete mode 100644 web/bundles/wallabagcore/themes/material/fonts/IcoMoon-Free.ttf delete mode 100644 web/bundles/wallabagcore/themes/material/fonts/MaterialIcons-Regular.eot delete mode 100644 web/bundles/wallabagcore/themes/material/fonts/MaterialIcons-Regular.ttf delete mode 100644 web/bundles/wallabagcore/themes/material/fonts/MaterialIcons-Regular.woff delete mode 100644 web/bundles/wallabagcore/themes/material/fonts/MaterialIcons-Regular.woff2 create mode 100644 webpack.config.js create mode 100644 yarn.lock diff --git a/.babelrc b/.babelrc new file mode 100644 index 00000000..cd38bcca --- /dev/null +++ b/.babelrc @@ -0,0 +1,5 @@ +{ + "presets": [ + ["env", {"modules": false}] + ] +} diff --git a/.gitignore b/.gitignore index 0bcbabb8..709f78cf 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,7 @@ web/bundles/* !web/bundles/wallabagcore /web/assets/images/* !web/assets/images/.gitkeep +web/bundles/wallabagcore/*.dev.js # Build /app/build diff --git a/.travis.yml b/.travis.yml index 77872f49..8d900d27 100644 --- a/.travis.yml +++ b/.travis.yml @@ -74,4 +74,4 @@ script: - if [[ $VALIDATE_TRANSLATION_FILE = run ]]; then php bin/console lint:yaml src/Wallabag/CoreBundle/Resources/translations -v ; fi; - if [[ $VALIDATE_TRANSLATION_FILE = run ]]; then php bin/console lint:yaml app/Resources/CraueConfigBundle/translations -v ; fi; - if [[ $VALIDATE_TRANSLATION_FILE = run ]]; then php bin/console lint:yaml src/Wallabag/UserBundle/Resources/translations -v ; fi; - - if [[ $ASSETS = build ]]; then ./node_modules/grunt-cli/bin/grunt tests; fi; + - if [[ $ASSETS = build ]]; then ./node_modules/webpack/bin/webpack.js; fi; diff --git a/Gruntfile.js b/Gruntfile.js deleted file mode 100644 index 72473b21..00000000 --- a/Gruntfile.js +++ /dev/null @@ -1,230 +0,0 @@ -module.exports = function (grunt) { - require('load-grunt-tasks')(grunt); - - grunt.initConfig({ - appDir: 'app/Resources/static', - buildDir: 'app/Resources/build', - modulesDir: 'node_modules', - releaseDir: 'web/bundles/wallabagcore', - - postcss: { - material: { - options: { - processors: [ - require('pixrem')(), - require('autoprefixer')({ browsers: 'last 2 versions' }), - require('cssnano')(), - ], - }, - src: '<%= buildDir %>/material.css', - dest: '<%= releaseDir %>/themes/material/css/style.min.css', - }, - baggy: { - options: { - processors: [ - require('pixrem')(), - require('autoprefixer')({ browsers: 'last 2 versions' }), - require('cssnano')(), - ], - }, - src: '<%= buildDir %>/baggy.css', - dest: '<%= releaseDir %>/themes/baggy/css/style.min.css', - }, - }, - concat: { - options: { - separator: ';', - }, - cssMaterial: { - src: [ - 'node_modules/materialize-css/bin/materialize.css', - '<%= appDir %>/themes/material/css/*.css', - ], - dest: '<%= buildDir %>/material.css', - }, - cssBaggy: { - src: [ - '<%= appDir %>/themes/baggy/css/*.css', - ], - dest: '<%= buildDir %>/baggy.css', - }, - }, - browserify: { - dist: { - files: { - '<%= buildDir %>/material.browser.js': ['<%= appDir %>/themes/material/js/init.js'], - '<%= buildDir %>/baggy.browser.js': ['<%= appDir %>/themes/baggy/js/init.js'] - } - }, - options: { - sourceType: "module", - transform: [ - ["babelify", { - presets: ["es2015"] - }], ["browserify-shim", { - "jquery": { - "exports": "$" - }, - "materialize": "materialize", - "jquery-ui": { - "depends": "jquery", - "exports": null - } - }] - ], - browserifyOptions: { - browser: { - "jQuery": "./node_modules/jquery/dist/jquery.js", - "jquery.tinydot": "./node_modules/jquery.tinydot/src/jquery.tinydot.js", - "jquery.ui": "./node_modules/jquery-ui-browserify/dist/jquery-ui.js" - } - } - } - - }, - uglify: { - material: { - files: { - '<%= releaseDir %>/themes/material/js/material.min.js': - ['<%= buildDir %>/material.browser.js'], - } - }, - baggy: { - files: { - '<%= releaseDir %>/themes/baggy/js/baggy.min.js': - ['<%= buildDir %>/baggy.browser.js'], - } - }, - }, - copy: { - pickerjs: { - expand: true, - cwd: '<%= modulesDir %>/pickadate/lib', - src: 'picker.js', - dest: '<%= buildDir %>', - }, - annotator: { - expand: true, - cwd: '<%= modulesDir %>/annotator/pkg', - src: 'annotator.min.js', - dest: '<%= buildDir %>/themes/_global/js/', - }, - baggyfonts: { - files: [ - { - expand: true, - cwd: '<%= modulesDir %>/icomoon-free-npm/Font', - src: 'IcoMoon-Free.ttf', - dest: '<%= releaseDir %>/themes/baggy/fonts/', - }, - { - expand: true, - cwd: '<%= modulesDir %>/ptsans-npm-webfont/fonts', - src: 'ptsansbold.woff', - dest: '<%= releaseDir %>/themes/baggy/fonts/', - }, - { - expand: true, - cwd: '<%= modulesDir %>/material-design-icons-iconfont/dist/fonts/', - src: ['MaterialIcons-Regular.eot', 'MaterialIcons-Regular.woff2', 'MaterialIcons-Regular.woff', 'MaterialIcons-Regular.ttf'], - dest: '<%= releaseDir %>/themes/baggy/fonts/', - }, - ], - }, - materialfonts: { - files: [ - { - expand: true, - overwrite: true, - cwd: '<%= modulesDir %>/icomoon-free-npm/Font', - src: 'IcoMoon-Free.ttf', - dest: '<%= releaseDir %>/themes/material/fonts', - }, - { - expand: true, - overwrite: true, - cwd: '<%= modulesDir %>/roboto-fontface/fonts/Roboto', - src: '*', - dest: '<%= releaseDir %>/themes/material/font/roboto', - }, - { - expand: true, - overwrite: true, - cwd: '<%= modulesDir %>/material-design-icons-iconfont/dist/fonts/', - src: ['MaterialIcons-Regular.eot', 'MaterialIcons-Regular.woff2', 'MaterialIcons-Regular.woff', 'MaterialIcons-Regular.ttf'], - dest: '<%= releaseDir %>/themes/material/fonts/', - }, - ], - }, - }, - symlink: { - pics: { - files: [ - { - expand: true, - overwrite: true, - cwd: '<%= appDir %>/themes/_global/', - src: 'img', - dest: '<%= releaseDir %>/themes/_global/', - }, - ], - }, - }, - clean: { - css: { - src: ['<%= buildDir %>/**/*.css'], - }, - js: { - src: ['<%= buildDir %>/**/*.js', '<%= buildDir %>/**/*.map'], - }, - all: { - src: ['./<%= buildDir %>'], - }, - release: { - src: ['./<%= releaseDir %>/*'], - } - }, - eslint: { - target: ['<%= appDir %>/themes/material/js/init.js', '<%= appDir %>/themes/baggy/js/init.js'] - }, - stylelint: { - target: ['<%= appDir %>/themes/material/css/*.css', '<%= appDir %>/themes/baggy/css/*.css'] - }, - watch: { - files: ['<%= appDir %>/**/*.css', '<%= appDir %>/**/*.js'], - tasks: ['css', 'js'] - } - }); - - grunt.registerTask( - 'fonts', - 'Install fonts', - ['copy:baggyfonts', 'copy:materialfonts'] - ); - - grunt.registerTask( - 'js', - 'Build and install js files', - ['clean:js', 'copy:pickerjs', 'browserify', 'uglify'] - ); - - grunt.registerTask( - 'default', - 'Build and install everything', - ['clean', 'copy:pickerjs', 'concat', 'browserify', 'uglify', 'postcss', 'copy', 'symlink'] - ); - - grunt.registerTask( - 'css', - 'Compiles the stylesheets.', - ['clean:css', 'concat:cssMaterial', 'concat:cssBaggy', 'postcss'] - ); - - grunt.registerTask( - 'tests', - 'Test css and js style conformity', - ['eslint', 'stylelint', 'default'] - ), - - grunt.loadNpmTasks('grunt-contrib-watch'); -}; diff --git a/app/AppKernel.php b/app/AppKernel.php index c8382d5f..b9293498 100644 --- a/app/AppKernel.php +++ b/app/AppKernel.php @@ -71,5 +71,14 @@ class AppKernel extends Kernel public function registerContainerConfiguration(LoaderInterface $loader) { $loader->load($this->getRootDir().'/config/config_'.$this->getEnvironment().'.yml'); + $loader->load(function ($container) { + if ($container->getParameter('use_webpack_dev_server')) { + $container->loadFromExtension('framework', [ + 'assets' => [ + 'base_url' => 'http://localhost:8080/', + ], + ]); + } + }); } } diff --git a/app/Resources/static/themes/_global/global.scss b/app/Resources/static/themes/_global/global.scss new file mode 100644 index 00000000..0e877efb --- /dev/null +++ b/app/Resources/static/themes/_global/global.scss @@ -0,0 +1,13 @@ +/* Rules for sizing the icon. */ +.material-icons.md-18 { font-size: 18px; } +.material-icons.md-24 { font-size: 24px; } +.material-icons.md-36 { font-size: 36px; } +.material-icons.md-48 { font-size: 48px; } + +/* Rules for using icons as black on a light background. */ +.material-icons.md-dark { color: rgba(0, 0, 0, 0.54); } +.material-icons.md-dark.md-inactive { color: rgba(0, 0, 0, 0.26); } + +/* Rules for using icons as white on a dark background. */ +.material-icons.md-light { color: rgba(255, 255, 255, 1); } +.material-icons.md-light.md-inactive { color: rgba(255, 255, 255, 0.3); } diff --git a/app/Resources/static/themes/_global/img/icons/Diaspora-asterisk.svg b/app/Resources/static/themes/_global/img/icons/Diaspora-asterisk.svg new file mode 100644 index 00000000..91764b60 --- /dev/null +++ b/app/Resources/static/themes/_global/img/icons/Diaspora-asterisk.svg @@ -0,0 +1,334 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/app/Resources/static/themes/_global/index.js b/app/Resources/static/themes/_global/index.js new file mode 100644 index 00000000..00410754 --- /dev/null +++ b/app/Resources/static/themes/_global/index.js @@ -0,0 +1,52 @@ +/* jQuery */ +import $ from 'jquery'; + +/* Annotations */ +import annotator from 'annotator'; + +/* Fonts */ +import 'material-design-icons-iconfont/dist/material-design-icons.css'; +import 'lato-font/css/lato-font.css'; +import './global.scss'; + +/* Shortcuts*/ +import './js/shortcuts/entry'; +import './js/shortcuts/main'; + +import { savePercent, retrievePercent } from './js/tools'; + + +/* ========================================================================== + Annotations & Remember position + ========================================================================== */ + +$(document).ready(() => { + if ($('article').length) { + const app = new annotator.App(); + + app.include(annotator.ui.main, { + element: document.querySelector('article'), + }); + + const x = JSON.parse($('#annotationroutes').html()); + app.include(annotator.storage.http, x); + + app.start().then(() => { + app.annotations.load({ entry: x.entryId }); + }); + + $(window).scroll(() => { + const scrollTop = $(window).scrollTop(); + const docHeight = $(document).height(); + const scrollPercent = (scrollTop) / (docHeight); + const scrollPercentRounded = Math.round(scrollPercent * 100) / 100; + savePercent(x.entryId, scrollPercentRounded); + }); + + retrievePercent(x.entryId); + + $(window).resize(() => { + retrievePercent(x.entryId); + }); + } +}); diff --git a/app/Resources/static/themes/_global/js/tools.js b/app/Resources/static/themes/_global/js/tools.js index cee84fa8..774f4539 100644 --- a/app/Resources/static/themes/_global/js/tools.js +++ b/app/Resources/static/themes/_global/js/tools.js @@ -31,25 +31,4 @@ function retrievePercent(id) { return true; } -function initFilters() { - // no display if filters not available - if ($('div').is('#filters')) { - $('#button_filters').show(); - $('.js-filters-action').sideNav({ edge: 'right' }); - $('#clear_form_filters').on('click', () => { - $('#filters input').val(''); - $('#filters :checked').removeAttr('checked'); - return false; - }); - } -} - -function initExport() { - // no display if export not available - if ($('div').is('#export')) { - $('#button_export').show(); - $('.js-export-action').sideNav({ edge: 'right' }); - } -} - -export { savePercent, retrievePercent, initFilters, initExport }; +export { savePercent, retrievePercent }; diff --git a/app/Resources/static/themes/baggy/css/article.scss b/app/Resources/static/themes/baggy/css/article.scss new file mode 100644 index 00000000..9094ad55 --- /dev/null +++ b/app/Resources/static/themes/baggy/css/article.scss @@ -0,0 +1,165 @@ + +#article { + width: 70%; + margin-bottom: 3em; + text-align: justify; + + .tags { + margin-bottom: 1em; + } + + i { + font-style: normal; + } + + h1 { + text-align: left; + } + + h2::after { + content: none; + } + + h2, + h3, + h4 { + text-transform: none; + } +} + +blockquote { + border: 1px solid #999; + background-color: #fff; + padding: 1em; + margin: 0; +} + +.topPosF { + position: fixed; + right: 20%; + bottom: 2em; + font-size: 1.5em; +} + +#article_toolbar { + margin-bottom: 1em; + + li { + display: inline-block; + margin: 3px auto; + } + + a { + background-color: #000; + padding: 0.3em 0.5em 0.2em; + color: #fff; + text-decoration: none; + + &:hover, + &:focus { + background-color: #999; + } + } +} + +#nav-btn-add-tag { + cursor: pointer; +} + +.shaarli::before { + content: "*"; +} + +.return { + text-decoration: none; + margin-top: 1em; + display: block; +} + +.return::before { + margin-right: 0.5em; +} + +.notags { + font-style: italic; + color: #999; +} + +.icon-rss { + background-color: #000; + color: #fff; + padding: 0.2em 0.5em; + + &::before { + position: relative; + top: 2px; + } +} + +.list-tags { + li { + margin-bottom: 0.5em; + } + + .icon-rss:hover, + .icon-rss:focus { + background-color: #fff; + color: #000; + text-decoration: none; + } + + a { + text-decoration: none; + + &:hover, + &:focus { + text-decoration: underline; + } + } +} + +pre code { + font-family: "Courier New", Courier, monospace; +} + +#filters { + position: fixed; + width: 20%; + height: 100%; + top: 0; + right: 0; + background-color: #fff; + padding: 30px 30px 15px 15px; + border-left: 1px #333 solid; + z-index: 12; + min-width: 300px; + + form .filter-group { + margin: 5px; + } +} + +#download-form { + position: fixed; + width: 10%; + height: 100%; + top: 0; + right: 0; + background-color: #fff; + padding: 30px 30px 15px 15px; + border-left: 1px #333 solid; + z-index: 12; + min-width: 200px; + + li { + display: block; + padding: 0.5em 2em 0.5em 1em; + color: #fff; + position: relative; + text-transform: uppercase; + text-decoration: none; + font-weight: 400; + font-family: PT Sans, sans-serif; + transition: all 0.5s ease; + } +} diff --git a/app/Resources/static/themes/baggy/css/font.css b/app/Resources/static/themes/baggy/css/font.css deleted file mode 100755 index 47edcb83..00000000 --- a/app/Resources/static/themes/baggy/css/font.css +++ /dev/null @@ -1,6 +0,0 @@ -@font-face { - font-family: "PT Sans"; - font-style: normal; - font-weight: 700; - src: local("PT Sans Bold"), local("PTSans-Bold"), url("../fonts/ptsansbold.woff") format("woff"); -} diff --git a/app/Resources/static/themes/baggy/css/guide.scss b/app/Resources/static/themes/baggy/css/guide.scss new file mode 100644 index 00000000..afb47c4a --- /dev/null +++ b/app/Resources/static/themes/baggy/css/guide.scss @@ -0,0 +1,263 @@ + +::selection { + color: #fff; + background-color: #000; +} + +.desktopHide { + display: none; +} + +.logo { + position: fixed; + z-index: 20; + top: 0.4em; + left: 0.6em; +} + +h2, +h3, +h4 { + font-family: "PT Sans", sans-serif; + text-transform: uppercase; +} + +p, +li, +label { + color: #666; +} + +a { + color: #000; + font-weight: bold; + + &.nostyle { + text-decoration: none; + } + + &:hover, + &:focus { + text-decoration: none; + } +} + +form fieldset { + border: 0; + padding: 0; + margin: 0; +} + +form input[type="text"], +form input[type="number"], +select, +form input[type="password"], +form input[type="url"], +form input[type="email"] { + border: 1px solid #999; + padding: 0.5em 1em; + min-width: 12em; + color: #666; +} + +@media screen and (-webkit-min-device-pixel-ratio: 0) { + select { + -webkit-appearance: none; + border-radius: 0; + background: #fff url("../../_global/img/bg-select.png") no-repeat right center; + } +} + +.inline { + .row { + display: inline-block; + margin-right: 0.5em; + } + + label { + min-width: 6em; + } +} + +fieldset label { + display: inline-block; + min-width: 12.5em; + color: #666; +} + +label { + margin-right: 0.5em; +} + +form .row { + margin-bottom: 0.5em; +} + +form button, +input[type="submit"] { + cursor: pointer; + background-color: #000; + color: #fff; + padding: 0.5em 1em; + display: inline-block; + border: 1px solid #000; +} + +form button:hover, +form button:focus, +input[type="submit"]:hover, +input[type="submit"]:focus { + background-color: #fff; + color: #000; + -webkit-transition: all 0.5s ease; + -moz-transition: all 0.5s ease; + -ms-transition: all 0.5s ease; + -o-transition: all 0.5s ease; + transition: all 0.5s ease; +} + +#bookmarklet { + cursor: move; +} + +h2::after { + content: ""; + height: 4px; + width: 20%; + background-color: #000; + display: block; +} + +.links { + padding: 0; + margin: 0; + + li { + list-style: none; + margin: 0; + padding: 0; + } +} + +#links { + position: fixed; + top: 0; + width: 10em; + left: 0; + text-align: right; + background-color: #333; + padding-top: 9.5em; + height: 100%; + box-shadow: inset -4px 0 20px rgba(0, 0, 0, 0.6); + z-index: 15; + + > li > a { + display: block; + padding: 0.5em 2em 0.5em 1em; + color: #fff; + position: relative; + text-transform: uppercase; + text-decoration: none; + font-weight: normal; + font-family: "PT Sans", sans-serif; + transition: all 0.5s ease; + + &:hover, + &:focus { + background-color: #999; + color: #000; + } + } + + .current::after { + content: ""; + width: 0; + height: 0; + position: absolute; + border: 10px solid transparent; + border-right-color: #eee; + right: 0; + top: 50%; + margin-top: -10px; + } + + li:last-child { + position: fixed; + bottom: 1em; + width: 10em; + + a::before { + font-size: 1.2em; + position: relative; + top: 2px; + } + } +} + +#main { + margin-left: 12em; + position: relative; + z-index: 10; + padding-right: 5%; + padding-bottom: 1em; +} + +#sort { + padding: 0; + list-style-type: none; + opacity: 0.5; + display: inline-block; + + li { + display: inline; + font-size: 0.9em; + + & + li { + margin-left: 10px; + } + } + + a { + padding: 2px 2px 0; + vertical-align: middle; + } + + img { + vertical-align: baseline; + + :hover { + cursor: pointer; + } + } +} + +#display-mode { + float: right; + margin-top: 10px; + margin-bottom: 10px; + opacity: 0.5; +} + +#listmode { + width: 16px; + display: inline-block; + text-decoration: none; + + &.tablemode { + background: url("../../_global/img/table.png") no-repeat bottom; + } + + .listmode { + background: url("../../_global/img/list.png") no-repeat bottom; + } +} + +#warning_message { + position: fixed; + background-color: #ff6347; + z-index: 1000; + bottom: 0; + left: 0; + width: 100%; + color: #000; +} diff --git a/app/Resources/static/themes/baggy/css/index.scss b/app/Resources/static/themes/baggy/css/index.scss new file mode 100644 index 00000000..e7a11963 --- /dev/null +++ b/app/Resources/static/themes/baggy/css/index.scss @@ -0,0 +1,13 @@ +/* Style */ +@import 'guide'; +@import 'layout'; +@import 'article'; +@import 'pictos'; +@import 'login'; +@import 'save'; +@import 'messages'; + +/* Tools */ +@import 'media_queries'; +@import 'print'; +@import 'ratatouille'; diff --git a/app/Resources/static/themes/baggy/css/layout.scss b/app/Resources/static/themes/baggy/css/layout.scss new file mode 100644 index 00000000..cb14e62d --- /dev/null +++ b/app/Resources/static/themes/baggy/css/layout.scss @@ -0,0 +1,300 @@ +#content { + margin-top: 2em; + min-height: 30em; +} + +footer { + text-align: right; + position: relative; + bottom: 0; + right: 5em; + color: #999; + font-size: 0.8em; + font-style: italic; + z-index: 20; + + a { + color: #999; + font-weight: normal; + } +} + +.list-entries { + letter-spacing: -5px; +} + +.listmode.entry { + width: 100%; + height: inherit; +} + +.card-entry-tags { + max-height: 2em; + overflow-y: hidden; + padding: 0; + margin: 0; +} + +.card-entry-tags li, +.card-entry-tags span { + display: inline-block; + margin: 0 5px; + padding: 5px 12px; + background-color: rgba(0, 0, 0, 0.6); + border-radius: 3px; + max-height: 2em; + overflow: hidden; + text-overflow: ellipsis; +} + +.card-entry-tags a, +.card-entry-labels a { + text-decoration: none; + font-weight: normal; + color: #fff; +} + +.nav-panel-add-tag { + margin-top: 10px; +} + +.list-entries + .results { + margin-bottom: 2em; +} + +.reading-time, +.created-at { + color: #999; + font-style: italic; + font-weight: normal; + font-size: 0.9em; +} + +.estimatedTime small { + position: relative; + top: -1px; +} + +.entry { + background-color: #fff; + letter-spacing: normal; + box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + display: inline-block; + width: 32%; + margin-bottom: 1.5em; + vertical-align: top; + margin-right: 1%; + position: relative; + overflow: hidden; + padding: 1.5em 0 3em; + height: 440px; + + img.preview { + width: 100%; + object-fit: cover; + height: 100%; + } + + &::before { + content: ""; + width: 0; + height: 0; + border: 10px solid transparent; + border-bottom-color: #000; + position: absolute; + bottom: 0.7em; + z-index: 10; + right: 1.5em; + transition: all 0.5s ease; + } + + &::after { + content: ""; + position: absolute; + height: 7px; + width: 100%; + bottom: 0; + left: 0; + background-color: #000; + transition: all 0.5s ease; + } + + &:hover { + box-shadow: 0 3px 10px rgba(0, 0, 0, 1); + + &::after { + height: 40px; + } + + &::before { + bottom: 2.3em; + } + + h2 a { + color: #666; + } + + .tools { + bottom: 0; + } + } + + h2 { + text-transform: none; + margin-bottom: 0; + line-height: 1.2; + margin-left: 5px; + } + + &::after { + content: none; + } + + a { + display: block; + text-decoration: none; + color: #000; + word-wrap: break-word; + transition: all 0.5s ease; + } + + p { + color: #666; + font-size: 0.9em; + line-height: 1.7; + margin: 5px 5px auto; + } + + h2 a::first-letter { + text-transform: uppercase; + } + + .tools { + position: absolute; + bottom: -40px; + left: 0; + background: #000; + width: 100%; + z-index: 10; + padding-right: 0.5em; + text-align: right; + transition: all 0.5s ease; + + a { + color: #666; + text-decoration: none; + display: block; + padding: 0.4em; + + &:hover { + color: #fff; + } + } + + li { + display: inline-block; + margin-top: 10px; + } + + li:first-child { + float: left; + font-size: 0.9em; + max-width: calc(100% - 40px * 4); + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + max-height: 2em; + margin-left: 10px; + } + } + + .card-entry-labels { + position: absolute; + top: 100px; + left: -1em; + z-index: 90; + max-width: 50%; + padding-left: 0; + + li { + margin: 10px 10px 10px auto; + padding: 5px 12px 5px 25px; + background-color: rgba(0, 0, 0, 0.6); + border-radius: 0 3px 3px 0; + color: #fff; + cursor: default; + max-height: 2em; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + + a { + color: #fff; + } + } + } +} + +.entry:nth-child(3n+1) { + margin-left: 0; +} + +.results { + letter-spacing: -5px; + padding: 0 0 0.5em; + + > * { + display: inline-block; + vertical-align: top; + letter-spacing: normal; + width: 50%; + text-align: right; + } +} + +div.pagination ul { + text-align: right; +} + +.nb-results { + text-align: left; + font-style: italic; + color: #999; + display: inline-flex; +} + +div.pagination ul { + a { + color: #999; + text-decoration: none; + + &:hover, + &:focus { + text-decoration: underline; + } + } + + > * { + display: inline-block; + margin-left: 0.5em; + } + + .prev.disabled, + .next.disabled { + display: none; + } + + .current { + height: 25px; + padding: 4px 8px; + border: 1px solid #d5d5d5; + text-decoration: none; + font-weight: bold; + color: #000; + background-color: #ccc; + } +} + +.hide { + display: none; +} diff --git a/app/Resources/static/themes/baggy/css/login.scss b/app/Resources/static/themes/baggy/css/login.scss new file mode 100644 index 00000000..312df670 --- /dev/null +++ b/app/Resources/static/themes/baggy/css/login.scss @@ -0,0 +1,26 @@ +.login { + background-color: #333; + + #main { + padding: 0; + margin: 0; + } + + form { + background-color: #fff; + padding: 1.5em; + box-shadow: 0 1px 8px rgba(0, 0, 0, 0.9); + width: 20em; + position: absolute; + top: 8em; + left: 50%; + margin-left: -10em; + } + + .logo { + position: absolute; + top: 2em; + left: 50%; + margin-left: -55px; + } +} diff --git a/app/Resources/static/themes/baggy/css/media_queries.scss b/app/Resources/static/themes/baggy/css/media_queries.scss new file mode 100755 index 00000000..c33db0b3 --- /dev/null +++ b/app/Resources/static/themes/baggy/css/media_queries.scss @@ -0,0 +1,172 @@ + +@media screen and (max-width: 1050px) { + .entry { + width: 49%; + } + + .entry:nth-child(3n+1) { + margin-left: 1.5%; + } + + .entry:nth-child(2n+1) { + margin-left: 0; + } +} + +@media screen and (max-width: 900px) { + #article { + width: 80%; + } + + .topPosF { + right: 2.5em; + } +} + +@media screen and (max-width: 700px) { + .entry { + width: 100%; + margin-left: 0; + } + + #display-mode { + display: none; + } +} + +@media screen and (max-height: 770px) { + .menu.users, + .menu.internal, + .menu.developer { + display: none; + } +} + +@media screen and (max-width: 500px) { + .entry { + width: 100%; + margin-left: 0; + } + + body > header { + background-color: #333; + position: fixed; + top: 0; + width: 100%; + height: 3em; + z-index: 11; + } + + #links li:last-child { + position: static; + width: auto; + } + + #links li:last-child a::before { + content: none; + } + + .logo { + width: 1.25em; + height: 1.25em; + left: 0; + top: 0; + } + + .login > header { + position: static; + } + + .login form { + width: 100%; + position: static; + margin-left: 0; + } + + .login .logo { + height: auto; + top: 0.5em; + width: 75px; + margin-left: -37.5px; + } + + .desktopHide { + display: block; + position: fixed; + z-index: 20; + top: 0; + right: 0; + border: 0; + width: 2.5em; + height: 2.5em; + cursor: pointer; + background-color: #999; + font-size: 1.2em; + } + + .desktopHide:hover, + .desktopHide:focus { + background-color: #fff; + } + + #links { + display: none; + width: 100%; + height: auto; + padding-top: 3em; + } + + #links.menu--open { + display: block; + } + + footer { + position: static; + margin-right: 3em; + } + + #main { + margin-left: 1.5em; + padding-right: 1.5em; + position: static; + margin-top: 3em; + } + + .card-entry-labels { + display: none; + } + + #article_toolbar .topPosF { + display: none; + } + + #article { + width: 100%; + } + + #article h1 { + font-size: 1.5em; + } + + #article_toolbar a { + padding: 0.3em 0.4em 0.2em; + } + + #display-mode { + display: none; + } + + .popup-form, + #bagit-form, + #search-form { + left: 0; + width: 100%; + border-left: none; + } + + .popup-form form, + #bagit-form form, + #search-form form { + width: 100%; + } +} diff --git a/app/Resources/static/themes/baggy/css/messages.css b/app/Resources/static/themes/baggy/css/messages.css deleted file mode 100755 index bfaf1448..00000000 --- a/app/Resources/static/themes/baggy/css/messages.css +++ /dev/null @@ -1,19 +0,0 @@ -.messages.error.install { - border: 1px solid #c42608; - color: #c00 !important; - background: #fff0ef; - text-align: left; -} - -.messages.notice.install { - border: 1px solid #ebcd41; - color: #000; - background: #fffcd3; - text-align: left; -} - -.messages.success.install { - border: 1px solid #6dc70c; - background: #e0fbcc !important; - text-align: left; -} diff --git a/app/Resources/static/themes/baggy/css/messages.scss b/app/Resources/static/themes/baggy/css/messages.scss new file mode 100755 index 00000000..a388419e --- /dev/null +++ b/app/Resources/static/themes/baggy/css/messages.scss @@ -0,0 +1,50 @@ +/* ========================================================================== + Messages + ========================================================================== */ + +.messages { + text-align: left; + width: 60%; + margin: auto 17%; + + > * { + display: inline-block; + } + + .install { + text-align: left; + + &.error { + border: 1px solid #c42608; + color: #c00 !important; + background: #fff0ef; + } + + &.notice { + border: 1px solid #ebcd41; + color: #000; + background: #fffcd3; + } + + &.success { + border: 1px solid #6dc70c; + background: #e0fbcc !important; + } + } +} + +.warning { + font-weight: bold; + display: block; + width: 100%; +} + +.more-info { + font-size: 0.85em; + line-height: 1.5; + color: #aaa; + + a { + color: #aaa; + } +} diff --git a/app/Resources/static/themes/baggy/css/pictos.scss b/app/Resources/static/themes/baggy/css/pictos.scss new file mode 100644 index 00000000..2ff01937 --- /dev/null +++ b/app/Resources/static/themes/baggy/css/pictos.scss @@ -0,0 +1,210 @@ +/* ========================================================================== + Pictos + ========================================================================== */ + +@font-face { + font-family: icomoon; + src: url('~icomoon-free-npm/Font/IcoMoon-Free.ttf'); + font-weight: normal; + font-style: normal; +} + +.material-icons { + font-family: 'Material Icons'; + font-weight: normal; + font-style: normal; + font-size: 1em; /* Preferred icon size */ + width: 1em; + height: 1em; + display: inline-block; + line-height: 1; + text-transform: none; + letter-spacing: normal; + word-wrap: normal; + white-space: nowrap; + direction: ltr; + + /* Support for all WebKit browsers. */ + -webkit-font-smoothing: antialiased; + + /* Support for Safari and Chrome. */ + text-rendering: optimizeLegibility; + + /* Support for Firefox. */ + -moz-osx-font-smoothing: grayscale; + + /* Support for IE. */ + font-feature-settings: 'liga'; + + .md-18 { font-size: 18px; } + .md-24 { font-size: 24px; } + .md-36 { font-size: 36px; } + .md-48 { font-size: 48px; } + + .vertical-align-middle { + vertical-align: middle !important; + } +} + +.icon span, +.icon-image span { + position: absolute; + top: -9999px; +} + +[class^="icon-"]::before, +[class*=" icon-"]::before { + font-family: icomoon; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + + /* Enable Ligatures ================ */ + letter-spacing: 0; + -webkit-font-feature-settings: "liga"; + -moz-font-feature-settings: "liga=1"; + -moz-font-feature-settings: "liga"; + -ms-font-feature-settings: "liga" 1; + -o-font-feature-settings: "liga"; + font-feature-settings: "liga"; + + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-flattr::before { + content: "\ead4"; +} + +.icon-mail::before { + content: "\ea86"; +} + +.icon-up-open::before { + content: "\e80b"; +} + +.icon-star::before { + content: "\e9d9"; +} + +.icon-check::before { + content: "\ea10"; +} + +.icon-link::before { + content: "\e9cb"; +} + +.icon-reply::before { + content: "\e806"; +} + +.icon-menu::before { + content: "\e9bd"; +} + +.icon-clock::before { + content: "\e803"; +} + +.icon-twitter::before { + content: "\ea96"; +} + +.icon-down-open::before { + content: "\e809"; +} + +.icon-trash::before { + content: "\e9ac"; +} + +.icon-delete::before { + content: "\ea0d"; +} + +.icon-power::before { + content: "\ea14"; +} + +.icon-arrow-up-thick::before { + content: "\ea3a"; +} + +.icon-rss::before { + content: "\e808"; +} + +.icon-print::before { + content: "\e954"; +} + +.icon-reload::before { + content: "\ea2e"; +} + +.icon-price-tags::before { + content: "\e936"; +} + +.icon-eye::before { + content: "\e9ce"; +} + +.icon-no-eye::before { + content: "\e9d1"; +} + +.icon-calendar::before { + content: "\e953"; +} + +.icon-time::before { + content: "\e952"; +} + +/* .icon-image class, for image-based icons + ========================================================================== */ + +.icon-image { + background: no-repeat center/80%; + padding-right: 1em !important; + padding-left: 1em !important; +} + +/* Carrot (http://carrot.org) */ +.icon-image--carrot { + background-image: url("../../_global/img/icons/carrot-icon--white.png"); +} + +/* Diaspora */ +.icon-image--diaspora { + background-image: url("../../_global/img/icons/Diaspora-asterisk.svg"); +} + +/* Unmark.it */ +.icon-image--unmark { + background-image: url("../../_global/img/icons/unmark-icon--black.png"); +} + +/* shaarli */ +.icon-image--shaarli { + background-image: url("../../_global/img/icons/shaarli.png"); +} + +/* ========================================================================== + Icon selected + ========================================================================== */ + +.icon-star.fav::before { + color: #fff; +} + +.icon-check.archive::before { + color: #fff; +} diff --git a/app/Resources/static/themes/baggy/css/print.css b/app/Resources/static/themes/baggy/css/print.scss similarity index 91% rename from app/Resources/static/themes/baggy/css/print.css rename to app/Resources/static/themes/baggy/css/print.scss index f7f6a8ad..a63f62e9 100755 --- a/app/Resources/static/themes/baggy/css/print.css +++ b/app/Resources/static/themes/baggy/css/print.scss @@ -17,7 +17,7 @@ /* ### Content ### */ /* Hide useless blocks */ - body > header, + body > .logo, #article_toolbar, #links, #sort, @@ -53,11 +53,8 @@ #main { width: 100%; - padding: 0; margin: 0; - margin-left: 0; - padding-right: 0; - padding-bottom: 0; + padding: 0; } #article { diff --git a/app/Resources/static/themes/baggy/css/ratatouille.css b/app/Resources/static/themes/baggy/css/ratatouille.scss similarity index 100% rename from app/Resources/static/themes/baggy/css/ratatouille.css rename to app/Resources/static/themes/baggy/css/ratatouille.scss diff --git a/app/Resources/static/themes/baggy/css/save.scss b/app/Resources/static/themes/baggy/css/save.scss new file mode 100644 index 00000000..ade77b40 --- /dev/null +++ b/app/Resources/static/themes/baggy/css/save.scss @@ -0,0 +1,115 @@ +/* ========================================================================== + "save a link" related styles + ========================================================================== */ + +.popup-form { + background: rgba(0, 0, 0, 0.5); + position: absolute; + top: 0; + left: 10em; + z-index: 20; + height: 100%; + width: 100%; + margin: 0; + margin-top: -30% !important; + padding: 2em; + display: none; + border-left: 1px #eee solid; + + form { + background-color: #fff; + position: absolute; + top: 0; + left: 0; + z-index: 20; + border: 10px solid #000; + width: 400px; + height: 200px; + padding: 2em; + } +} + +#bagit-form-form .addurl { + margin-left: 0; +} + +.closeMessage, +.close-button { + background-color: #000; + color: #fff; + font-size: 1.2em; + line-height: 1.6; + width: 1.6em; + height: 1.6em; + text-align: center; + text-decoration: none; + + &:hover, + &:focus { + background-color: #999; + color: #000; + } +} + +.close-button--popup { + display: inline-block; + position: absolute; + top: 0; + right: 0; + font-size: 1.4em; +} + +.active-current { + background-color: #999; + + &::after { + content: ""; + width: 0; + height: 0; + position: absolute; + border: 10px solid transparent; + border-right-color: #eee; + right: 0; + top: 50%; + margin-top: -10px; + } +} + +.opacity03 { + opacity: 0.3; +} + +.add-to-wallabag-link-after { + background-color: #000; + color: #fff; + padding: 0 3px 2px; +} + +a.add-to-wallabag-link-after { + visibility: hidden; + position: absolute; + opacity: 0; + transition-duration: 2s; + transition-timing-function: ease-out; +} + +#article article a:hover + a.add-to-wallabag-link-after, +a.add-to-wallabag-link-after:hover { + opacity: 1; + visibility: visible; + transition-duration: 0.3s; + transition-timing-function: ease-in; +} + +a.add-to-wallabag-link-after::after { + content: "w"; +} + +#add-link-result { + font-weight: bold; + font-size: 0.9em; +} + +.btn-clickable { + cursor: pointer; +} diff --git a/app/Resources/static/themes/baggy/font/icomoon.eot b/app/Resources/static/themes/baggy/font/icomoon.eot deleted file mode 100644 index 248758fbd8f366f2a42a8547af4ef5fde8f35e8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97236 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 Uui`3D6Q}^n$gLk~6FlttUrX|hQ~&?~ diff --git a/app/Resources/static/themes/baggy/font/icomoon.svg b/app/Resources/static/themes/baggy/font/icomoon.svg deleted file mode 100644 index b1b9c92a..00000000 --- a/app/Resources/static/themes/baggy/font/icomoon.svg +++ /dev/null @@ -1,501 +0,0 @@ - - - -Generated by IcoMoon - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/Resources/static/themes/baggy/font/icomoon.ttf b/app/Resources/static/themes/baggy/font/icomoon.ttf deleted file mode 100644 index c03770c6c6b652eed7c943913c14b4bb2d24aee9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97072 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 diff --git a/app/Resources/static/themes/baggy/font/icomoon.woff b/app/Resources/static/themes/baggy/font/icomoon.woff deleted file mode 100644 index 121e0bddbc22d641341dc737b893fd3c6246fc8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97148 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

D?mPL+}bC#;*Gnsj|vTZ%!KsD`7|_m>8P}* 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 XF)MJd;3`lRtN_Z$tsiL { - const $listmode = $('#listmode'); - const $listentries = $('#list-entries'); +/* Theme style */ +import './css/index.scss'; +$(document).ready(() => { /* ========================================================================== Menu ========================================================================== */ @@ -38,45 +26,12 @@ $.fn.ready(() => { } }); - /* ========================================================================== - List mode or Table Mode - ========================================================================== */ - - $listmode.click(() => { - if ($.cookie('listmode') === 1) { - // Cookie - $.removeCookie('listmode'); - - $listentries.removeClass('listmode'); - $listmode.removeClass('tablemode'); - $listmode.addClass('listmode'); - } else { - // Cookie - $.cookie('listmode', 1, { expires: 365 }); - - $listentries.addClass('listmode'); - $listmode.removeClass('listmode'); - $listmode.addClass('tablemode'); - } - }); - - /* ========================================================================== - Cookie listmode - ========================================================================== */ - - if ($.cookie('listmode') === 1) { - $listentries.addClass('listmode'); - $listmode.removeClass('listmode'); - $listmode.addClass('tablemode'); - } - /* ========================================================================== Add tag panel ========================================================================== */ - $('#nav-btn-add-tag').on('click', () => { - $('.nav-panel-add-tag').toggle(100); + $('.baggy-add-tag').toggle(100); $('.nav-panel-menu').addClass('hidden'); $('#tag_label').focus(); return false; @@ -95,39 +50,6 @@ $.fn.ready(() => { }); } - /* ========================================================================== - Annotations & Remember position - ========================================================================== */ - - if ($('article').length) { - const app = new annotator.App(); - - app.include(annotator.ui.main, { - element: document.querySelector('article'), - }); - - const x = JSON.parse($('#annotationroutes').html()); - app.include(annotator.storage.http, x); - - app.start().then(() => { - app.annotations.load({ entry: x.entryId }); - }); - - $(window).scroll(() => { - const scrollTop = $(window).scrollTop(); - const docHeight = $(document).height(); - const scrollPercent = (scrollTop) / (docHeight); - const scrollPercentRounded = Math.round(scrollPercent * 100) / 100; - savePercent(x.entryId, scrollPercentRounded); - }); - - retrievePercent(x.entryId); - - $(window).resize(() => { - retrievePercent(x.entryId); - }); - } - /** * Close window after adding entry if popup */ @@ -136,6 +58,23 @@ $.fn.ready(() => { window.close(); } + /** + if ($('article').size() > 0) { + const waypoint = new Waypoint({ + element: $('.wallabag-title').get(0), + handler: (direction) => { + console.log(direction); + if (direction === 'down') { + $('aside.tags').fadeIn('slow'); + } else { + $('aside.tags').fadeOut('slow'); + } + }, + offset: 250, + }); + } + */ + /** * Tags autocomplete */ @@ -283,25 +222,24 @@ $.fn.ready(() => { toggleBagit(); }); - const $bagitFormForm = $('#bagit-form-form'); + const bagitFormForm = $('#bagit-form-form'); /* ========================================================================== bag it link and close button ========================================================================== */ // send 'bag it link' form request via ajax - $bagitFormForm.submit((event) => { + bagitFormForm.submit((event) => { $('body').css('cursor', 'wait'); $('#add-link-result').empty(); $.ajax({ - type: $bagitFormForm.attr('method'), - url: $bagitFormForm.attr('action'), - data: $bagitFormForm.serialize(), + type: bagitFormForm.attr('method'), + url: bagitFormForm.attr('action'), + data: bagitFormForm.serialize(), success: function success() { $('#add-link-result').html('Done!'); - $('#plainurl').val(''); - $('#plainurl').blur(''); + $('#plainurl').val('').blur(''); $('body').css('cursor', 'auto'); }, error: function error() { @@ -319,7 +257,7 @@ $.fn.ready(() => { $('article a[href^="http"]').after( () => `' + 'title="add to wallabag">', ); $('.add-to-wallabag-link-after').click((event) => { diff --git a/app/Resources/static/themes/baggy/js/shortcuts/main.js b/app/Resources/static/themes/baggy/js/shortcuts/main.js index aed09aee..43ebf3be 100644 --- a/app/Resources/static/themes/baggy/js/shortcuts/main.js +++ b/app/Resources/static/themes/baggy/js/shortcuts/main.js @@ -1,3 +1,6 @@ +import $ from 'jquery'; +import Mousetrap from 'mousetrap'; + $(document).ready(() => { Mousetrap.bind('s', () => { $('#search').trigger('click'); diff --git a/app/Resources/static/themes/material/css/article.scss b/app/Resources/static/themes/material/css/article.scss new file mode 100644 index 00000000..7d0bdac7 --- /dev/null +++ b/app/Resources/static/themes/material/css/article.scss @@ -0,0 +1,174 @@ +/* ========================================================================== + Article + ========================================================================== */ + +#article { + font-size: 20px; + margin: 0 auto; + max-width: 45em; + + article { + color: #424242; + font-size: 18px; + line-height: 1.7em; + + h1, + h2, + h3, + h4, + h5, + h6 { + color: #212121; + + strong { + font-weight: 500; + } + } + + h6 { + font-size: 1.2rem; + } + + h5 { + font-size: 1.6rem; + } + + h4 { + font-size: 1.9rem; + } + + h3 { + font-size: 2.2rem; + } + + h2 { + font-size: 2.5rem; + } + + h1 { + font-size: 2.7rem; + } + + a { + border-bottom: 1px dotted #03a9f4; + text-decoration: none; + } + + a:hover { + border-bottom-style: solid; + } + + ul { + padding-left: 30px; + } + + ul, + ul li { + list-style-type: disc; + } + + blockquote { + font-style: italic; + } + + strong { + font-weight: bold; + } + } + + img, + figure { + max-width: 100%; + height: auto; + } + + pre { + box-sizing: border-box; + margin: 0 0 1.75em; + border: #e3f2fd 1px solid; + width: 100%; + padding: 10px; + font-family: monospace; + font-size: 0.8em; + white-space: pre; + overflow: auto; + background: #f5f5f5; + border-radius: 3px; + } + + > header > h1 { + font-size: 2em; + margin: 2.1rem 0 0.68rem; + } + + aside { + .tools { + font-size: 0.8em; + display: flex; + flex-flow: row wrap; + margin: 0 auto; + + li { + display: inline-flex; + vertical-align: middle; + } + + a { + color: #000; + text-decoration: none; + } + } + + #list { + float: right; + margin: 0 15px 10px; + } + + .chip { + background-color: $blueAccentColor; + padding: 0 15px 0 10px; + margin: auto 2px; + + a, + i { + color: #fff; + } + } + } +} + +.reader-mode { + width: 95px !important; + transition: width 0.2s ease; + + .collapsible-body { + height: 0; + overflow: hidden; + } + + span { + opacity: 0; + transition: opacity 0.2s ease; + } +} + +.reader-mode:hover { + width: 240px !important; + + .collapsible-body { + height: auto; + } + + span { + opacity: 1; + } +} + +.progress { + position: fixed; + top: 0; + width: 100%; + height: 3px; + margin: 0; + z-index: 9999; +} diff --git a/app/Resources/static/themes/material/css/cards.scss b/app/Resources/static/themes/material/css/cards.scss new file mode 100644 index 00000000..18ef6e60 --- /dev/null +++ b/app/Resources/static/themes/material/css/cards.scss @@ -0,0 +1,186 @@ +/* ========================================================================== + Cards + ========================================================================== */ + +main { + #content { + padding: 0 0.5rem; + } + + ul.row { + padding: 0 0.75rem; + } +} + +.data .card .card-body { + height: 19em; + overflow: hidden; +} + +.card { + .card-content .card-title, + .card-reveal .card-title { + line-height: 22.8px; + max-height: 80px; + font-size: 19px; + font-family: roberto, "Helvetica Neue", Helvetica, Arial, sans-serif; + color: #313131; + } + + .card-content .activator, + .card-reveal .activator { + cursor: pointer; + font-family: "Material Icons"; + } + + .card-content i.right, + .card-reveal i.right { + margin-left: 0; + } + + .card-content .original { + line-height: 24px; + font-size: 15px; + } + + .card-entry-labels { + position: absolute; + top: 10px; + z-index: 90; + max-width: 50%; + } + + .card-entry-labels-hidden { + margin: 2.5px auto; + } + + .card-entry-labels-hidden li { + display: inline-block; + background-color: $blueAccentColor; + margin: 0 5px; + padding: 5px 12px; + border-radius: 3px; + color: #fff; + max-height: 2em; + max-width: calc(100% - 15px); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + .card-entry-labels-hidden li { + display: inline-block; + background-color: $blueAccentColor; + margin: 0 5px; + padding: 5px 12px; + border-radius: 3px; + color: #fff; + max-height: 2em; + max-width: calc(100% - 15px); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + .card-content .estimatedTime { + margin-bottom: 10px; + } + + .card-action { + padding: 10px 5px 10px 15px; + + ul.links { + margin: 0; + font-size: 24px; + line-height: 24px; + } + + a { + color: #fff; + margin: 0; + } + + a:hover { + color: #fff; + } + + ul.tools li a.tool { + margin-right: 5px !important; + } + + .reading-time { + display: inline-flex; + vertical-align: middle; + } + } + + .card-entry-labels li, + .card-tag-labels li { + margin: 10px 10px 10px auto; + padding: 5px 12px 5px 16px !important; + background-color: $blueAccentColor; + border-radius: 0 3px 3px 0; + color: #fff; + cursor: default; + max-height: 2em; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + .card-image { + height: 10em; + } + + .card-fullimage { + height: 13.5em; + } + + .card-image .preview, + .card-fullimage .preview { + height: 14em; + background: no-repeat 50%/cover; + } + + &.sw { + max-width: 370px; + margin-left: auto; + margin-right: auto; + } +} + +a.original { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + display: block; +} + +.card-entry-tags a, +.card-entry-labels a, +.card-tag-labels a, +.card-entry-labels-hidden a, +#list .chip a { + text-decoration: none; + font-weight: normal; + color: #fff; +} + +.card-stacked { + &:hover ul.tools-list { + display: block; + } + + ul.tools-list { + display: none; + } +} + +.quickstart .card .card-action a, +.quickstart .card .card-action a:hover { + color: #fff !important; +} + +.settings .div_tabs { + padding-bottom: 15px; +} diff --git a/app/Resources/static/themes/material/css/entries.scss b/app/Resources/static/themes/material/css/entries.scss new file mode 100644 index 00000000..b6a46a9e --- /dev/null +++ b/app/Resources/static/themes/material/css/entries.scss @@ -0,0 +1,87 @@ +/* ========================================================================== + * Entries + * ========================================================================== */ + +.results { + height: 1em; + + .nb-results, + .pagination { + margin: 15px 15px 0; + } + + .nb-results { + display: inline-flex; + } + + a { + color: #444; + } +} + +.pagination { + float: right; + + ul { + margin: 0 !important; + + .prev.disabled, + .next.disabled { + display: none; + } + } + + li { + padding: 0; + } + + a { + padding: 0 10px; + height: 30px; + display: block; + } + + .disabled { + margin-right: 10px; + margin-left: 10px; + } + + li.active span { + padding: 0 10px; + height: 30px; + display: block; + color: #fff; + } +} + +.page-footer .footer-copyright { + min-width: 50px; + height: auto !important; + line-height: 1em !important; + + p { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + display: block; + } +} + +.hidden { + display: none; +} + +.picker__date-display { + display: none; +} + +footer { + &.page-footer { + margin-top: 10px; + padding-top: 0; + } + + .row { + margin-bottom: 10px; + } +} diff --git a/app/Resources/static/themes/material/css/filters.scss b/app/Resources/static/themes/material/css/filters.scss new file mode 100644 index 00000000..299dad3d --- /dev/null +++ b/app/Resources/static/themes/material/css/filters.scss @@ -0,0 +1,15 @@ +/* ========================================================================== + * Filters slider + * ========================================================================== */ + +#filters { + button { + padding: 0; + width: 100%; + } + + div.with-checkbox { + height: 3rem; + margin-top: 0; + } +} diff --git a/app/Resources/static/themes/material/css/fonts.scss b/app/Resources/static/themes/material/css/fonts.scss new file mode 100644 index 00000000..743f1a84 --- /dev/null +++ b/app/Resources/static/themes/material/css/fonts.scss @@ -0,0 +1,13 @@ +/* ========================================================================== + * Fonts + * ========================================================================== */ + +/** + * Icomoon + */ +@font-face { + font-family: icomoon; + src: url("~icomoon-free-npm/Font/IcoMoon-Free.ttf"); + font-weight: normal; + font-style: normal; +} diff --git a/app/Resources/static/themes/material/css/icons.scss b/app/Resources/static/themes/material/css/icons.scss new file mode 100644 index 00000000..268e6dca --- /dev/null +++ b/app/Resources/static/themes/material/css/icons.scss @@ -0,0 +1,185 @@ +/* ========================================================================== + * Icons + * ========================================================================== */ + +/** + * + * Material icons + * + */ +.material-icons { + font-family: 'Material Icons'; + font-weight: normal; + font-style: normal; + font-size: 24px; /* Preferred icon size */ + width: 1em; + height: 1em; + display: inline-block; + line-height: 1; + text-transform: none; + letter-spacing: normal; + word-wrap: normal; + white-space: nowrap; + direction: ltr; + + /* Support for all WebKit browsers. */ + -webkit-font-smoothing: antialiased; + + /* Support for Safari and Chrome. */ + text-rendering: optimizeLegibility; + + /* Support for Firefox. */ + -moz-osx-font-smoothing: grayscale; + + /* Support for IE. */ + font-feature-settings: 'liga'; + + .md-18 { + font-size: 18px; + } + + .md-24 { + font-size: 24px; + } + + .md-36 { + font-size: 36px; + } + + .md-48 { + font-size: 48px; + } + + .md-dark { + color: rgba(0, 0, 0, 0.54); + + .md-inactive { + color: rgba(0, 0, 0, 0.26); + } + } + + .md-light { + color: rgba(255, 255, 255, 1); + + .md-inactive { + color: rgba(255, 255, 255, 0.3); + } + } +} + +/** + * + * Icomoon icons + * + */ +[class^="icon-"]::before, +[class*=" icon-"]::before { + font-family: icomoon; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + background-size: 24px; + + /* Enable Ligatures ================ */ + letter-spacing: 0; + font-feature-settings: "liga"; +} + +.icon-eye::before { + content: "\e9ce"; +} + +.icon-no-eye::before { + content: "\e9d1"; +} + +.icon-calendar::before { + content: "\e953"; +} + +.icon-mail::before { + content: "\ea86"; +} + +.icon-time::before { + content: "\e952"; +} + +a.icon-image { + background-repeat: no-repeat; + padding-right: 0.4em !important; + padding-left: 1em !important; + margin-left: 25px; + + &::before { + content: ""; + display: block; + width: 24px; + height: 24px; + float: left; + margin: 0 6px 0 0; + } + + &.carrot::before { + background: url("../../_global/img/icons/carrot-icon--black.png") no-repeat center/90%; + } + + &.diaspora::before { + background: url("../../_global/img/icons/diaspora-icon--black.png") no-repeat center/80%; + } + + &.unmark::before { + background: url("../../_global/img/icons/unmark-icon--black.png") no-repeat center/80%; + } + + &.shaarli::before { + background: url("../../_global/img/icons/shaarli.png") no-repeat center/80%; + } +} + +.icon-google-plus2::before { + content: "\ea89"; +} + +.icon-facebook2::before { + content: "\ea8d"; +} + +.icon-twitter::before { + content: "\ea96"; +} + +.icon-apple::before { + content: "\eabf"; +} + +.icon-android::before { + content: "\eac1"; +} + +.icon-chrome::before { + content: "\eae5"; +} + +.icon-firefox::before { + content: "\eae6"; +} + +.icon-link::before { + content: "\e9cb"; +} + +footer [class^="icon-"], +footer [class*=" icon-"] { + font-size: 2em; + transition: text-shadow 0.2s ease; + padding-right: 10px; +} + +footer [class^="icon-"]:hover, +footer [class*=" icon-"]:hover { + text-shadow: 0 0 10px rgba(0, 0, 0, 0.3); +} diff --git a/app/Resources/static/themes/material/css/index.scss b/app/Resources/static/themes/material/css/index.scss new file mode 100644 index 00000000..285a6504 --- /dev/null +++ b/app/Resources/static/themes/material/css/index.scss @@ -0,0 +1,17 @@ +@import 'variables'; + +/* Style */ +@import 'article'; +@import 'cards'; +@import 'entries'; +@import 'filters'; +@import 'layout'; +@import 'nav'; +@import 'sidenav'; +@import 'various'; + +/* Tools */ +@import 'fonts'; +@import 'icons'; +@import 'print'; +@import 'media_queries'; diff --git a/app/Resources/static/themes/material/css/layout.scss b/app/Resources/static/themes/material/css/layout.scss new file mode 100755 index 00000000..8b8b06e6 --- /dev/null +++ b/app/Resources/static/themes/material/css/layout.scss @@ -0,0 +1,50 @@ +/* ========================================================================== + Layout + ========================================================================== */ + +body { + display: flex; + min-height: 100vh; + flex-direction: column; + background: #fafafa; + + &.login main { + padding: 0; + min-height: 100vh; + } +} + +.border-bottom { + border-bottom: 1px solid #ddd; +} + +nav, +main, +footer { + padding-left: 240px; +} + +main, +#content, +.valign-wrapper { + height: 100%; +} + +#main { + flex: 1 0 auto; + + .logo { + a { + height: 100pt; + } + + img { + height: 100pt; + width: 100pt; + } + + &:hover { + background: transparent; + } + } +} diff --git a/app/Resources/static/themes/material/css/media_queries.scss b/app/Resources/static/themes/material/css/media_queries.scss new file mode 100644 index 00000000..96f34494 --- /dev/null +++ b/app/Resources/static/themes/material/css/media_queries.scss @@ -0,0 +1,149 @@ +/* ========================================================================== + Media queries + ========================================================================== */ + +@media only screen and (max-width: 992px) { + header, + main, + footer { + padding-left: 0; + } + + nav, + main, + footer { + padding-left: 0; + } + + .pagination { + width: auto; + } + + .nav-panels .action { + padding-right: 0.75rem; + } + + .nav-panel-buttom { + justify-content: space-around; + } + + #article { + max-width: 35em; + margin-left: auto; + margin-right: auto; + font-size: 18px; + + > header > h1 { + font-size: 1.33em; + } + } + + .reader-mode { + width: 240px !important; + + span { + opacity: 1; + } + } + + .tabs { + display: inline-block; + height: auto; + } + + .tab { + min-width: 100%; + } + + .indicator { + display: none; + } + + .pagination li.prev, + .pagination li.next { + width: auto; + } + + .drag-target + .drag-target { + height: 50%; + } + + .drag-target + .drag-target + .drag-target { + top: 50%; + } +} + +@media only screen and (min-width: 1200px) and (max-width: 1650px) { + .row .col.l3 { + width: 33.33333%; + margin-left: 0; + } +} + +@media only screen and (min-width: 993px) and (max-width: 1200px) { + .row { + .col.l1 { + width: 25%; + margin-left: 0; + } + + .col.l2 { + width: 33.33333%; + margin-left: 0; + } + + .col.l3 { + width: 41.66667%; + margin-left: 0; + } + + .col.l4 { + width: 50%; + margin-left: 0; + } + + .col.l5 { + width: 58.33333%; + margin-left: 0; + } + + .col.l6 { + width: 66.66667%; + margin-left: 0; + } + + .col.l7 { + width: 75%; + margin-left: 0; + } + + .col.l8 { + width: 83.33333%; + margin-left: 0; + } + + .col.l9 { + width: 91.66667%; + margin-left: 0; + } + + .col.l10 { + width: 100%; + margin-left: 0; + } + } +} + +@media only screen and (max-width: 350px) { + .nb-results { + display: none; + } + + main ul.row { + padding: 0; + } + + .row .col { + padding: 0; + } +} diff --git a/app/Resources/static/themes/material/css/nav.scss b/app/Resources/static/themes/material/css/nav.scss new file mode 100644 index 00000000..1a25a5be --- /dev/null +++ b/app/Resources/static/themes/material/css/nav.scss @@ -0,0 +1,106 @@ + +/* ========================================================================== + Nav + ========================================================================== */ + +nav { + height: auto; + + input { + color: #aaa; + } + + ul a:hover { + background-color: initial; + } +} + +.nav-wrapper { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + min-height: 64px; + + .button-collapse { + padding: 0 15px; + } +} + +.nav-input { + display: none; +} + +.nav-panel-buttom { + display: flex; + flex-grow: 1; + justify-content: flex-end; + + li { + max-height: 64px; + } +} + +.nav-panel-add .add, +.nav-panel-search .search, +.nav-panels .close { + color: #444 !important; +} + +.nav-panels { + transition: background 0.2s ease; + + .action { + padding-left: 0.75rem; + font-size: 2.1rem; + white-space: nowrap; + } + + .input-field input { + display: block; + line-height: inherit; + padding-left: 4rem !important; + width: calc(100% - 8rem); + height: 4.1rem; + } + + .input-field input:focus { + background-color: #fff; + border: 0; + box-shadow: none; + color: #444; + } +} + +.input-field { + &.nav-panel-add label, + &.nav-panel-search label { + left: 1rem; + } + + &.nav-panel-add .close, + &.nav-panel-search .close { + position: absolute; + top: 0; + right: 1rem; + color: transparent; + cursor: pointer; + font-size: 2rem; + transition: 0.3s color; + } + + &.nav-panel-add, + &.nav-panel-add form, + &.nav-panel-search, + &.nav-panel-search form { + display: flex; + flex: 1; + } +} + +#button_filters { + display: none; +} + +#button_export { + display: none; +} diff --git a/app/Resources/static/themes/material/css/print.css b/app/Resources/static/themes/material/css/print.scss similarity index 94% rename from app/Resources/static/themes/material/css/print.css rename to app/Resources/static/themes/material/css/print.scss index 98505aae..967a8c2b 100755 --- a/app/Resources/static/themes/material/css/print.css +++ b/app/Resources/static/themes/material/css/print.scss @@ -64,11 +64,8 @@ #main { width: 100%; - padding: 0; margin: 0; - margin-left: 0; - padding-right: 0; - padding-bottom: 0; + padding: 0; } #article { diff --git a/app/Resources/static/themes/material/css/sidenav.scss b/app/Resources/static/themes/material/css/sidenav.scss new file mode 100644 index 00000000..b430077e --- /dev/null +++ b/app/Resources/static/themes/material/css/sidenav.scss @@ -0,0 +1,41 @@ +/* ========================================================================== + Side-nav + ========================================================================== */ + +.side-nav { + width: 240px; + + li { + padding: 0; + } + + a { + margin: 0 1rem; + } + + &.fixed a { + font-size: 13px; + line-height: 44px; + height: 44px; + } + + .collapsible-header, + &.fixed .collapsible-header { + height: 45px; + line-height: 44px; + padding: 0 20px; + } + + > li.logo { + line-height: 0; + text-align: center; + } +} + +.bold > a { + font-weight: bold; +} + +span.numberItems { + float: right; +} diff --git a/app/Resources/static/themes/material/css/variables.scss b/app/Resources/static/themes/material/css/variables.scss new file mode 100644 index 00000000..25e22aca --- /dev/null +++ b/app/Resources/static/themes/material/css/variables.scss @@ -0,0 +1,5 @@ +/* ========================================================================== + Variables + ========================================================================== */ + +$blueAccentColor: rgba(0, 151, 167, 0.85); diff --git a/app/Resources/static/themes/material/css/various.scss b/app/Resources/static/themes/material/css/various.scss new file mode 100644 index 00000000..6a6f52f9 --- /dev/null +++ b/app/Resources/static/themes/material/css/various.scss @@ -0,0 +1,24 @@ +/* ========================================================================== + * Various + * ========================================================================== */ + +div.settings div.file-field { + /* force height on non-input field in the settings page */ + div, + ul { + margin-top: 40px; + } + + /* but avoid to kill all file input */ + div { + margin-top: inherit; + } +} + +.input-field label.active { + font-size: 1rem; +} + +nav .input-field input { + margin: 0; +} diff --git a/app/Resources/static/themes/material/js/init.js b/app/Resources/static/themes/material/index.js similarity index 57% rename from app/Resources/static/themes/material/js/init.js rename to app/Resources/static/themes/material/index.js index 0b2832c0..d6afbb8a 100755 --- a/app/Resources/static/themes/material/js/init.js +++ b/app/Resources/static/themes/material/index.js @@ -1,21 +1,21 @@ -/* jQuery */ import $ from 'jquery'; -/* Annotations */ -import annotator from 'annotator'; +/* Materialize imports */ +import 'materialize-css/dist/css/materialize.css'; +import 'materialize-css/dist/js/materialize'; + +/* Global imports */ +import '../_global/index'; /* Tools */ -import { savePercent, retrievePercent, initFilters, initExport } from '../../_global/js/tools'; +import { initExport, initFilters } from './js/tools'; /* Import shortcuts */ -import './shortcuts/main'; -import './shortcuts/entry'; -import '../../_global/js/shortcuts/main'; -import '../../_global/js/shortcuts/entry'; - -require('materialize'); // eslint-disable-line +import './js/shortcuts/main'; +import './js/shortcuts/entry'; -global.jQuery = $; +/* Theme style */ +import './css/index.scss'; $(document).ready(() => { // sideNav @@ -30,6 +30,7 @@ $(document).ready(() => { formatSubmit: 'dd/mm/yyyy', hiddenName: true, format: 'dd/mm/yyyy', + container: 'body', }); initFilters(); initExport(); @@ -74,37 +75,4 @@ $(document).ready(() => { const scrollPercent = (s / (d - c)) * 100; $('.progress .determinate').css('width', `${scrollPercent}%`); }); - -/* ========================================================================== - Annotations & Remember position - ========================================================================== */ - - if ($('article').length) { - const app = new annotator.App(); - const x = JSON.parse($('#annotationroutes').html()); - - app.include(annotator.ui.main, { - element: document.querySelector('article'), - }); - - app.include(annotator.storage.http, x); - - app.start().then(() => { - app.annotations.load({ entry: x.entryId }); - }); - - $(window).scroll(() => { - const scrollTop = $(window).scrollTop(); - const docHeight = $(document).height(); - const scrollPercent = (scrollTop) / (docHeight); - const scrollPercentRounded = Math.round(scrollPercent * 100) / 100; - savePercent(x.entryId, scrollPercentRounded); - }); - - retrievePercent(x.entryId); - - $(window).resize(() => { - retrievePercent(x.entryId); - }); - } }); diff --git a/app/Resources/static/themes/material/js/tools.js b/app/Resources/static/themes/material/js/tools.js new file mode 100644 index 00000000..39398fd8 --- /dev/null +++ b/app/Resources/static/themes/material/js/tools.js @@ -0,0 +1,24 @@ +import $ from 'jquery'; + +function initFilters() { + // no display if filters not available + if ($('div').is('#filters')) { + $('#button_filters').show(); + $('.js-filters-action').sideNav({ edge: 'right' }); + $('#clear_form_filters').on('click', () => { + $('#filters input').val(''); + $('#filters :checked').removeAttr('checked'); + return false; + }); + } +} + +function initExport() { + // no display if export not available + if ($('div').is('#export')) { + $('#button_export').show(); + $('.js-export-action').sideNav({ edge: 'right' }); + } +} + +export { initExport, initFilters }; diff --git a/app/config/config.yml b/app/config/config.yml index 4f4fb900..e0d6b860 100644 --- a/app/config/config.yml +++ b/app/config/config.yml @@ -3,6 +3,9 @@ imports: - { resource: security.yml } - { resource: services.yml } +parameters: + use_webpack_dev_server: true + framework: #esi: ~ translator: diff --git a/app/config/config_prod.yml b/app/config/config_prod.yml index 5a4dd69e..65b02d66 100644 --- a/app/config/config_prod.yml +++ b/app/config/config_prod.yml @@ -1,9 +1,9 @@ imports: - { resource: config.yml } -#framework: -# cache: -# system: cache.adapter.apcu +framework: + assets: + # json_manifest_path: '%kernel.root_dir%/../web/bundles/wallabagcore/manifest.json' #doctrine: # orm: diff --git a/app/config/webpack/common.js b/app/config/webpack/common.js new file mode 100644 index 00000000..4f5739f0 --- /dev/null +++ b/app/config/webpack/common.js @@ -0,0 +1,40 @@ +const path = require('path'); +const webpack = require('webpack'); +const StyleLintPlugin = require('stylelint-webpack-plugin'); + +const rootDir = path.resolve(__dirname, '../../../'); + +module.exports = function() { + return { + entry: { + material: path.join(rootDir, './app/Resources/static/themes/material/index.js'), + baggy: path.join(rootDir, './app/Resources/static/themes/baggy/index.js'), + }, + + output: { + filename: '[name].js', + path: path.resolve(rootDir, 'web/bundles/wallabagcore'), + publicPath: '/bundles/wallabagcore/', + }, + plugins: [ + new webpack.ProvidePlugin({ + $: 'jquery', + jQuery: 'jquery', + 'window.$': 'jquery', + 'window.jQuery': 'jquery' + }), + new StyleLintPlugin({ + configFile: '.stylelintrc', + failOnError: false, + quiet: false, + context: 'app/Resources/static/themes', + files: '**/*.scss', + }), + ], + resolve: { + alias: { + jquery: path.join(rootDir, 'node_modules/jquery/dist/jquery.js') + } + }, + }; +}; diff --git a/app/config/webpack/dev.js b/app/config/webpack/dev.js new file mode 100644 index 00000000..771df65b --- /dev/null +++ b/app/config/webpack/dev.js @@ -0,0 +1,62 @@ +const webpackMerge = require('webpack-merge'); +const webpack = require('webpack'); +const path = require('path'); +const commonConfig = require('./common.js'); + +module.exports = function () { + return webpackMerge(commonConfig(), { + devtool: 'eval-source-map', + output: { + filename: '[name].dev.js' + }, + + devServer: { + hot: true, + // enable HMR on the server + + contentBase: './web', + // match the output path + }, + plugins: [ + new webpack.HotModuleReplacementPlugin(), + ], + module: { + rules: [ + { + enforce: 'pre', + test: /\.js$/, + loader: 'eslint-loader', + exclude: /node_modules/, + }, + { + test: /\.js$/, + exclude: /(node_modules)/, + use: { + loader: 'babel-loader', + options: { + presets: ['env'] + } + } + }, + { + test: /\.(s)?css$/, + use: [ + 'style-loader', + { + loader: 'css-loader', + options: { + importLoaders: 1, + } + }, + 'postcss-loader', + 'sass-loader' + ] + }, + { + test: /\.(jpg|png|gif|svg|eot|ttf|woff|woff2)$/, + use: 'url-loader' + }, + ] + }, + }) +}; diff --git a/app/config/webpack/prod.js b/app/config/webpack/prod.js new file mode 100644 index 00000000..ef41ab99 --- /dev/null +++ b/app/config/webpack/prod.js @@ -0,0 +1,99 @@ +const webpack = require('webpack'); +const webpackMerge = require('webpack-merge'); +const ExtractTextPlugin = require('extract-text-webpack-plugin'); +const ManifestPlugin = require('webpack-manifest-plugin'); + +const commonConfig = require('./common.js'); + +module.exports = function() { + return webpackMerge(commonConfig(), { + output: { + filename: '[name].js' + }, + devtool: 'source-map', + plugins: [ + new webpack.DefinePlugin({ + 'process.env': { + 'NODE_ENV': JSON.stringify('production') + } + }), + new webpack.optimize.UglifyJsPlugin({ + beautify: false, + mangle: { + screw_ie8: true, + keep_fnames: true + }, + compress: { + screw_ie8: true, + warnings: false + }, + comments: false + }), + new ExtractTextPlugin('[name].css'), + new ManifestPlugin({ + fileName: 'manifest.json', + }) + ], + module: { + rules: [ + { + enforce: 'pre', + test: /\.js$/, + loader: 'eslint-loader', + exclude: /node_modules/, + }, + { + test: /\.js$/, + exclude: /(node_modules)/, + use: { + loader: 'babel-loader', + options: { + presets: ['env'] + } + } + }, + { + test: /\.(s)?css$/, + use: ExtractTextPlugin.extract({ + fallback: 'style-loader', + use: [ + { + loader: 'css-loader', + options: { + importLoaders: 1, + minimize: { + discardComments: { + removeAll: true + }, + core: true, + minifyFontValues: true + } + } + }, + 'postcss-loader', + 'sass-loader' + ] + }) + }, + { + test: /\.(jpg|png|gif|svg)$/, + use: { + loader: 'file-loader', + options: { + name: 'img/[name].[ext]', + } + } + }, + { + test: /\.(eot|ttf|woff|woff2)$/, + use: { + loader: 'file-loader', + options: { + name: 'fonts/[name].[ext]', + } + } + } + ] + }, + }) +}; diff --git a/docs/en/developer/front_end.rst b/docs/en/developer/front_end.rst new file mode 100644 index 00000000..40f18a42 --- /dev/null +++ b/docs/en/developer/front_end.rst @@ -0,0 +1,33 @@ +Tips for front-end developers +============================= + +Starting from version 2.3, wallabag uses webpack to bundle its assets. + +Dev mode +-------- + +If the server runs in dev mode, you need to run ``yarn run build:dev`` to generate the outputted javascript files for each theme. These are named ``%theme%.dev.js`` and are ignored by git. You need to relaunch ``yarn run build:dev`` for each change made to one of the assets files (js, css, pictures, fonts,...). + +Live reload +----------- + +Webpack brings support for live reload, which means you don't need to regenerate the assets file for each change neither reload the page manually. Changes are applied automatically in the web page. Just set the ``use_webpack_dev_server`` setting to ``true`` in ``app/config/config.yml`` and run ``yarn run watch`` and you're good to go. + +.. note:: + + Don't forget to put back ``use_webpack_dev_server`` to ``false`` when not using the live reload feature. + +Production builds +----------------- + +When you want to commit your changes, build them in production environment by using ``yarn run build:prod``. This will build all the assets needed for wallabag. To test that it properly works, you'll need to have a server in production mode, for instance with ``bin/console server:run -e=prod``. + +.. note:: + + Don't forget to generate production builds before committing ! + + +Code style +---------- + +Code style is checked by two tools : stylelint for (S)CSS and eslint for JS. ESlint config is based on the Airbnb base preset. diff --git a/docs/fr/developer/front-end.rst b/docs/fr/developer/front-end.rst new file mode 100644 index 00000000..714df08b --- /dev/null +++ b/docs/fr/developer/front-end.rst @@ -0,0 +1,33 @@ +Conseils pour développeurs front-end +==================================== + +Depuis la version 2.3, wallabag utilise webpack pour générer ses assets. + +Mode développeur +---------------- + +Si le serveur fonctionne en mode dev, vous devez lancer la commande ``yarn run build:dev`` pour générer les fichiers de sortie javascript pour chaque thème. Ils sont nommés ``%theme%.dev.js`` et sont ignorés par git. Vous devez relancer la commande ``yarn run build:dev`` pour chaque changement que vous effectuez dans les fichiers assets (js, css, images, polices,...). + +Live reload +----------- + +Webpack apporte le support pour la fonctionnalité de live reload, ce qui signifie que vous n'avez pas besoin de regénérer manuellement le fichier de sortie javascript ni de rafraichir la page dans votre navigateur. Les changements sont appliqués automatiquement. Vous avez juste besoin de mettre le paramètre ``use_webpack_dev_server`` à ``true`` dans ``app/config/config.yml`` et de lancer ``yarn run watch`` pour que cela soit actif. + +.. note:: + + N'oubliez pas de remettre ``use_webpack_dev_server`` à ``false`` lorsque vous n'utilisez pas la fonctionnalité de live reload. + +Production builds +----------------- + +Lorsque vous committez vos changements, vous devez les compiler dans un environnement de production en exécutant ``yarn run build:prod``. Cela compilera tous les assets nécessaires pour wallabag. Pour tester que cela fonctionne proprement, vous devrez avoir un serveur en mode de production, par exemple avec ``bin/console server:run -e=prod``. + +.. note:: + + N'oubliez pas de générer des fichiers en mode production avant de committer ! + + +Code style +---------- + +Le style de code est vérifié par deux outils : stylelint pour le (S)CSS et eslint pour le JS. La configuration ESlint config est basée sur le preset Airbnb base. diff --git a/package.json b/package.json index 209c46c6..8b81f89b 100644 --- a/package.json +++ b/package.json @@ -1,34 +1,13 @@ { "name": "wallabag", - "version": "2.1.0", + "version": "2.2.2", "description": "wallabag is a self hostable application for saving web pages", - "main": "index.js", "private": true, "directories": { "doc": "docs" }, "engines": { - "node": ">0.12" - }, - "browser": { - "jquery": "./node_modules/jquery/dist/jquery.js", - "jQuery": "./node_modules/jquery/dist/jquery.js", - "materialize": "./node_modules/materialize-css/bin/materialize.js" - }, - "browserify-shim": { - "jquery": { - "exports": "$" - }, - "materialize": "materialize", - "jquery-ui": { - "depends": "jquery", - "exports": null - } - }, - "browserify": { - "transform": [ - "browserify-shim" - ] + "node": ">4.8" }, "repository": { "type": "git", @@ -57,52 +36,49 @@ "url": "https://github.com/wallabag/wallabag/issues" }, "devDependencies": { + "autoprefixer": "^6.7.7", + "babel-core": "^6.24.1", + "babel-eslint": "^7.2.3", + "babel-loader": "^7.0.0", + "babel-preset-env": "^1.4.0", + "css-loader": "^0.28.0", + "eslint": "^3.19.0", + "eslint-config-airbnb-base": "^11.1.3", + "eslint-loader": "^1.7.1", + "eslint-plugin-import": "^2.2.0", + "extract-text-webpack-plugin": "^2.1.0", + "file-loader": "^0.11.0", + "lato-font": "^3.0.0", + "node-sass": "^4.5.2", + "postcss-loader": "^1.3.3", + "sass-loader": "^6.0.3", + "style-loader": "^0.16.1", + "stylelint": "^7.9.0", + "stylelint-config-standard": "^16.0.0", + "stylelint-webpack-plugin": "^0.7.0", + "url-loader": "^0.5.8", + "webpack": "^2.3.2", + "webpack-dev-server": "^2.4.4", + "webpack-manifest-plugin": "^1.1.0", + "webpack-merge": "^4.1.0" + }, + "dependencies": { "annotator": "git://github.com/wallabag/annotator.git#0f076c7d371ed25eb0793346f46982d90f2c4c85", - "autoprefixer": "^6.3.6", - "babel-eslint": "^6.1.2", - "babel-preset-es2015": "^6.14.0", - "babelify": "^7.3.0", - "browserify": "^13.0.0", - "browserify-shim": "^3.8.12", - "cssnano": "^3.5.2", - "es6-promise": "^3.2.1", - "eslint": "^3.7.1", - "eslint-config-airbnb-base": "^8.0.0", - "eslint-plugin-import": "^1.16.0", - "grunt": ">=0.4.0", - "grunt-browserify": "^5.0.0", - "grunt-cli": "^1.2.0", - "grunt-contrib-clean": "^1.0.0", - "grunt-contrib-concat": "^1.0.0", - "grunt-contrib-copy": "^1.0.0", - "grunt-contrib-symlink": "^1.0.0", - "grunt-contrib-uglify": "^1.0.0", - "grunt-contrib-watch": "^1.0.0", - "grunt-eslint": "^19.0.0", - "grunt-postcss": "^0.8.0", - "grunt-stylelint": "^0.6.0", - "hammerjs": "^2.0.6", - "icomoon-free-npm": "0.0.0", - "jquery": "^2.2.4", - "jquery-ui-browserify": "^1.11.0-pre-seelio", + "hammerjs": "^2.0.8", + "icomoon-free-npm": "^0.0.0", + "jquery": "^2.1.4", "jquery.cookie": "^1.4.1", - "jquery.tinydot": "^0.2.1", - "load-grunt-tasks": "^3.4.1", - "material-design-icons-iconfont": "^3.0.0", - "materialize-css": "0.97.5", - "npm": "^3.8.3", - "pickadate": "^3.5.6", - "pixrem": "^3.0.0", - "postcss-cssnext": "^2.5.1", - "prismjs": "^1.4.1", - "ptsans-npm-webfont": "0.0.4", - "roboto-fontface": "^0.6.0", - "stylelint": "^7.3.1", - "stylelint-config-standard": "^13.0.2", - "through": "^2.3.8" + "jr-qrcode": "^1.0.7", + "material-design-icons-iconfont": "^3.0.3", + "materialize-css": "^0.98.1", + "mousetrap": "^1.6.0", + "ptsans-npm-webfont": "^0.0.4", + "roboto-fontface": "^0.7.0", + "waypoints": "^4.0.1" }, - "dependencies": { - "jr-qrcode": "^1.0.5", - "mousetrap": "^1.6.0" + "scripts": { + "watch": "./node_modules/.bin/webpack-dev-server --env=dev", + "build:dev": "./node_modules/.bin/webpack --env=dev", + "build:prod": "./node_modules/.bin/webpack --env=prod" } } diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 00000000..5d146314 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,7 @@ +module.exports = { + plugins: function () { + return [ + require('autoprefixer'), + ]; + } +}; diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig index 859b166b..bdd44b54 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig @@ -17,9 +17,9 @@

{{ 'entry.list.number_on_the_page'|transchoice(entries.count) }}
{% if (entry.previewPicture is null or listMode == 1) %}
-