- 5.5
- 5.6
- 7.0
+ - 7.1
- nightly
- - hhvm
+node_js:
+ - "5"
+
env:
- - DB=mysql
- - DB=pgsql
- - DB=sqlite
+ - DB=mysql ASSETS=nobuild
+ - DB=pgsql ASSETS=nobuild
+ - DB=sqlite ASSETS=nobuild
matrix:
fast_finish: true
include:
+ # driver for PostgreSQL currently unsupported by HHVM, requires 3rd party dependency
+ - php: hhvm-3.12
+ sudo: required
+ dist: trusty
+ group: edge
+ env: DB=mysql
+ addons:
+ apt:
+ packages:
+ - mysql-server-5.6
+ - mysql-client-core-5.6
+ - mysql-client-5.6
+ services:
+ - mysql
+ - php: hhvm-3.12
+ sudo: required
+ dist: trusty
+ group: edge
+ env: DB=sqlite
- php: 7.0
- env: CS_FIXER=run VALIDATE_TRANSLATION_FILE=run DB=sqlite
+ env: CS_FIXER=run VALIDATE_TRANSLATION_FILE=run DB=sqlite ASSETS=nobuild
+ - php: 7.0
+ env: DB=sqlite ASSETS=build
- exclude:
- - php: hhvm
- env: DB=pgsql # driver for PostgreSQL currently unsupported by HHVM, requires 3rd party dependency
allow_failures:
- - php: hhvm
+ - php: hhvm-3.12
+ - php: nightly
# exclude v1 branches
branches:
- legacy
before_script:
- - if [[ $TRAVIS_PHP_VERSION != hhvm ]]; then echo "memory_limit=-1" >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini; fi;
- - if [[ $TRAVIS_PHP_VERSION != hhvm ]]; then phpenv config-rm xdebug.ini; fi;
- - if [ "$TRAVIS_PHP_VERSION" = "5.5" ]; then composer require "phpunit/phpunit:4.*" --no-update; fi;
+ - PHP=$TRAVIS_PHP_VERSION
+ - if [[ ! $PHP = hhvm* ]]; then echo "memory_limit=-1" >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini; fi;
+ # xdebug isn't enable for PHP 7.1
+ - if [[ ! $PHP = hhvm* ]]; then phpenv config-rm xdebug.ini || echo "xdebug not available"; fi
++ - if [[ $PHP = 5.5 ]]; then composer require "phpunit/phpunit:4.*" --no-update; fi;
- composer self-update --no-progress
- if [[ "$DB" = "pgsql" ]]; then psql -c 'create database wallabag_test;' -U postgres; fi;
.inner {
margin: 0 auto;
- max-width: 61.25em;/*980px*/
+ max-width: 61.25em; /* 980px */
}
- table,
- img {
+ table, img, figure {
max-width: 100%;
- height :auto;
+ height: auto;
}
iframe {
--- /dev/null
- #article img {
+/* ==========================================================================
+ Sommaire
+
+ 0 = Common
+ 1 = Nav
+ 2 = Side-nav
+ 3 = Filters slider
+ 4 = Cards
+ 5 = Article
+ 6 = Media queries
+ 7 = Font
+ 8 = Others
+
+ ========================================================================== */
+
+/* ==========================================================================
+ 0 = Common
+ ========================================================================== */
+
+@font-face {
+ font-family: icomoon;
+ src: url("../fonts/icomoon.eot");
+ src:
+ url("../fonts/icomoon.eot#iefix") format("embedded-opentype"),
+ url("../fonts/icomoon.ttf") format("truetype"),
+ url("../fonts/icomoon.woff") format("woff"),
+ url("../fonts/icomoon.svg#icomoon") format("svg");
+ font-weight: normal;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: 'Material Icons';
+ font-style: normal;
+ font-weight: 400;
+ src: url(../fonts/MaterialIcons-Regular.eot);
+
+ /* For IE6-8 */
+ src: local("Material Icons"), local("MaterialIcons-Regular"), url(../fonts/MaterialIcons-Regular.woff2) format("woff2"), url(../fonts/MaterialIcons-Regular.woff) format("woff"), url(../fonts/MaterialIcons-Regular.ttf) format("truetype");
+}
+
+.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';
+}
+
+[class^="icon-"],
+[class*=" icon-"] {
+ font-family: icomoon;
+ speak: none;
+ font-style: normal;
+ font-weight: normal;
+ font-variant: normal;
+ text-transform: none;
+ line-height: 1;
+
+ /* Better Font Rendering =========== */
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+body {
+ display: flex;
+ min-height: 100vh;
+ flex-direction: column;
+ background: #f0f0f0;
+}
+
+body.login main {
+ padding: 0;
+}
+
+.border-bottom {
+ border-bottom: 1px solid #ddd;
+}
+
+nav,
+main,
+footer {
+ padding-left: 240px;
+}
+
+main,
+#content,
+.valign-wrapper {
+ height: 100%;
+}
+
+#main {
+ flex: 1 0 auto;
+}
+
+.results {
+ height: 1em;
+ line-height: 30px;
+}
+
+.results .nb-results,
+.results .pagination {
+ margin: 15px;
+ margin-bottom: 0;
+}
+
+.pagination {
+ float: right;
+}
+
+.pagination ul {
+ margin: 0 !important;
+}
+
+.pagination li {
+ padding: 0;
+}
+
+.pagination a {
+ padding: 0 10px;
+ height: 30px;
+ display: block;
+}
+
+.pagination .disabled {
+ margin-right: 10px;
+ margin-left: 10px;
+}
+
+div.pagination ul .prev.disabled,
+div.pagination ul .next.disabled {
+ display: none;
+}
+
+.pagination li.active span {
+ padding: 0 10px;
+ height: 30px;
+ display: block;
+ color: #fff;
+}
+
+.page-footer .footer-copyright p {
+ display: inline;
+}
+
+.hidden {
+ display: none;
+}
+
+.picker__date-display {
+ display: none;
+}
+
+footer.page-footer {
+ margin-top: 10px;
+ padding-top: 10px;
+}
+
+footer .row {
+ margin-bottom: 10px;
+}
+
+/* ==========================================================================
+ 1 = Nav
+ ========================================================================== */
+
+nav input {
+ color: #aaa;
+}
+
+.nav-wrapper .button-collapse {
+ padding: 0 15px;
+}
+
+.nav-input {
+ display: none;
+}
+
+.nav-panels {
+ overflow: hidden;
+}
+
+.nav-panel-buttom li {
+ max-height: 64px;
+}
+
+.nav-panels {
+ transition: background 0.2s ease;
+}
+
+.nav-panel-add .add,
+.nav-panel-search .search,
+.nav-panels .close {
+ color: #444 !important;
+}
+
+.nav-panels .action {
+ padding-left: 0.75rem;
+ font-size: 2.1rem;
+ white-space: nowrap;
+}
+
+.nav-panels .input-field input {
+ display: block;
+ line-height: inherit;
+ padding-left: 4rem !important;
+ width: calc(100% - 8rem);
+}
+
+.nav-panels .input-field input:focus {
+ background-color: #fff;
+ border: 0;
+ box-shadow: none;
+ color: #444;
+}
+
+.input-field.nav-panel-add label {
+ left: 1rem;
+}
+
+.input-field.nav-panel-add .close {
+ position: absolute;
+ top: 0;
+ right: 1rem;
+ color: transparent;
+ cursor: pointer;
+ font-size: 2rem;
+ transition: 0.3s color;
+}
+
+#button_filters {
+ display: none;
+}
+
+#button_export {
+ display: none;
+}
+
+/* ==========================================================================
+ 2 = Side-nav
+ ========================================================================== */
+
+.side-nav.fixed a {
+ font-size: 13px;
+ line-height: 44px;
+ height: 44px;
+}
+
+.side-nav .collapsible-header,
+.side-nav.fixed .collapsible-header {
+ height: 45px;
+ line-height: 44px;
+ padding: 0 20px;
+}
+
+.bold > a {
+ font-weight: bold;
+}
+
+.side-nav > li.logo {
+ line-height: 0;
+ text-align: center;
+}
+
+#main .logo a {
+ height: 100pt;
+}
+
+#main .logo img {
+ height: 100pt;
+ width: 100pt;
+}
+
+#main .logo:hover {
+ background: transparent;
+}
+
+.side-nav li {
+ padding: 0;
+}
+
+.side-nav a {
+ margin: 0 1rem;
+}
+
+/* ==========================================================================
+ * 3 = Filters slider
+ * ========================================================================== */
+
+#filters button {
+ padding: 0;
+ width: 100%;
+}
+
+.side-nav.fixed.right-aligned {
+ right: -250px;
+ left: auto !important;
+ overflow-y: visible;
+}
+
+#filters div.with-checkbox {
+ height: 3rem;
+ margin-top: 0;
+}
+
+/* ==========================================================================
+ 4 = Cards
+ ========================================================================== */
+
+main #content {
+ padding: 0 0.5rem;
+}
+
+main ul.row {
+ padding: 0 0.75rem;
+}
+
+.data .card .card-body {
+ height: 22em;
+ overflow: hidden;
+}
+
+.card .card-content .card-title {
+ line-height: 32px;
+}
+
+.card .card-entry-labels {
+ position: absolute;
+ top: 10px;
+ z-index: 90;
+ max-width: 50%;
+}
+
+.card .card-entry-labels li {
+ margin: 10px 10px 10px auto;
+ padding: 5px 12px 5px 16px;
+ background-color: rgba(0, 151, 167, 0.85);
+ border-radius: 0 3px 3px 0;
+ color: #fff;
+ cursor: default;
+ max-height: 2em;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.card .card-entry-labels-hidden {
+ margin-top: 5px;
+}
+
+.card .card-entry-labels-hidden li {
+ display: inline-block;
+ background-color: rgba(0, 151, 167, 0.85);
+ 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 .card-content .estimatedTime {
+ margin-bottom: 10px;
+}
+
+.card .card-action .original {
+ line-height: 24px;
+}
+
+.card .card-action ul.links {
+ margin: 0;
+ font-size: 24px;
+ line-height: 24px;
+}
+
+.card .card-action a {
+ color: #fff;
+ margin: 0;
+}
+
+.card .card-action a:hover {
+ color: #fff;
+}
+
+.settings .div_tabs {
+ padding-bottom: 15px;
+}
+
+.card.sw {
+ max-width: 370px;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.card .card-image {
+ height: 14em;
+}
+
+.card .card-image .preview {
+ height: 14em;
+ background-size: cover;
+ background-repeat: no-repeat;
+ background-position: 50%;
+}
+
+/* ==========================================================================
+ 5 = Article
+ ========================================================================== */
+
+#article {
+ font-size: 20px;
+ margin: 0 auto;
+ max-width: 40em;
+}
+
++#article img,
++#article figure {
+ max-width: 100%;
+ height: auto;
+}
+
+#article > header > h1 {
+ font-size: 2em;
+}
+
+.reader-mode {
+ width: 95px !important;
+ transition: width 0.2s ease;
+}
+
+.reader-mode:hover {
+ width: 240px !important;
+}
+
+.reader-mode .collapsible-body {
+ height: 0;
+ overflow: hidden;
+}
+
+.reader-mode:hover .collapsible-body {
+ height: auto;
+}
+
+.reader-mode span {
+ opacity: 0;
+ transition: opacity 0.2s ease;
+}
+
+.reader-mode:hover span {
+ opacity: 1;
+}
+
+.progress {
+ position: fixed;
+ top: 0;
+ width: 100%;
+ height: 3px;
+ margin: 0;
+ z-index: 9999;
+}
+
+#article aside .link {
+ color: #000;
+ font-size: 0.8em;
+ text-decoration: none;
+}
+
+#article aside #list {
+ float: right;
+ margin: 0 15px 10px;
+}
+
+#article aside .chip {
+ background-color: rgba(0, 151, 167, 0.85);
+ color: #fff;
+ padding: 0 15px 0 10px;
+}
+
+#article aside .chip i {
+ color: #fff;
+}
+
+/* ==========================================================================
+ 6 = Media queries
+ ========================================================================== */
+
+@media only screen and (max-width: 992px) {
+ header,
+ main,
+ footer {
+ padding-left: 0;
+ }
+ nav,
+ main,
+ footer {
+ padding-left: 0;
+ }
+ .pagination {
+ width: auto;
+ }
+ .reader-mode {
+ width: 240px !important;
+ }
+ .reader-mode span {
+ opacity: 1;
+ }
+ .tabs {
+ display: inline-block;
+ height: auto;
+ }
+ .tab {
+ min-width: 100%;
+ }
+ .indicator {
+ display: none;
+ }
+ .pagination li.prev,
+ .pagination li.next {
+ width: auto;
+ }
+}
+
+@media only screen and (min-width: 400px) {
+ .nav-panel-buttom {
+ float: right;
+ }
+}
+
+@media only screen and (min-width: 993px) and (max-width: 1180px) {
+ .row .col.l1 {
+ width: 25%;
+ margin-left: 0;
+ }
+ .row .col.l2 {
+ width: 33.33333%;
+ margin-left: 0;
+ }
+ .row .col.l3 {
+ width: 41.66667%;
+ margin-left: 0;
+ }
+ .row .col.l4 {
+ width: 50%;
+ margin-left: 0;
+ }
+ .row .col.l5 {
+ width: 58.33333%;
+ margin-left: 0;
+ }
+ .row .col.l6 {
+ width: 66.66667%;
+ margin-left: 0;
+ }
+ .row .col.l7 {
+ width: 75%;
+ margin-left: 0;
+ }
+ .row .col.l8 {
+ width: 83.33333%;
+ margin-left: 0;
+ }
+ .row .col.l9 {
+ width: 91.66667%;
+ margin-left: 0;
+ }
+ .row .col.l10 {
+ width: 100%;
+ margin-left: 0;
+ }
+}
+
+@media only screen and (max-width: 350px) {
+ .nb-results {
+ display: none;
+ }
+}
+
+/* ==========================================================================
+ 7 = Font
+ ========================================================================== */
+
+.icon-google-plus2::before {
+ content: "\ea89";
+}
+
+.icon-facebook2::before {
+ content: "\ea8d";
+}
+
+.icon-twitter::before {
+ content: "\ea91";
+}
+
+.icon-apple::before {
+ content: "\eabf";
+}
+
+.icon-android::before {
+ content: "\eac1";
+}
+
+.icon-chrome::before {
+ content: "\eae5";
+}
+
+.icon-firefox::before {
+ content: "\eae6";
+}
+
+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);
+}
+
+/* ==========================================================================
+ 8 = Others
+ ========================================================================== */
+
+/* force height on non-input field in the settings page */
+div.settings div.input-field div,
+div.settings div.input-field ul {
+ margin-top: 40px;
+}
+
+/* but avoid to kill all file input */
+div.settings div.file-field div {
+ margin-top: inherit;
+}
reading_time: 'estimeret læsetid'
reading_time_minutes: 'estimeret læsetid: %readingTime% min'
reading_time_less_one_minute: 'estimeret læsetid: <small class="inferieur"><</small> 1 min'
+ # number_of_tags: '{1}and one other tag|]1,Inf[and %count% other tags'
+ reading_time_minutes_short: '%readingTime% min'
+ reading_time_less_one_minute_short: '<small class="inferieur"><</small> 1 min'
original_article: 'original'
toogle_as_read: 'Marker som læst'
toogle_as_star: 'Skift favoritstatus'
reading_time: 'geschätzte Lesezeit'
reading_time_minutes: 'geschätzte Lesezeit: %readingTime% min'
reading_time_less_one_minute: 'geschätzte Lesezeit: <small class="inferieur"><</small> 1 min'
+ # number_of_tags: '{1}and one other tag|]1,Inf[and %count% other tags'
+ reading_time_minutes_short: '%readingTime% min'
+ reading_time_less_one_minute_short: '<small class="inferieur"><</small> 1 min'
original_article: 'original'
toogle_as_read: 'Gelesen-Status ändern'
toogle_as_star: 'Favoriten-Status ändern'
reading_time: 'estimated reading time'
reading_time_minutes: 'estimated reading time: %readingTime% min'
reading_time_less_one_minute: 'estimated reading time: <small class="inferieur"><</small> 1 min'
+ number_of_tags: '{1}and one other tag|]1,Inf[and %count% other tags'
+ reading_time_minutes_short: '%readingTime% min'
+ reading_time_less_one_minute_short: '<small class="inferieur"><</small> 1 min'
original_article: 'original'
toogle_as_read: 'Toggle mark as read'
- toogle_as_star: 'Toggle favorite'
+ toogle_as_star: 'Toggle starred'
delete: 'Delete'
export_title: 'Export'
filters:
reading_time: 'tiempo estimado de lectura'
reading_time_minutes: 'tiempo estimado de lectura: %readingTime% min'
reading_time_less_one_minute: 'tiempo estimado de lectura: <small class="inferieur"><</small> 1 min'
+ # number_of_tags: '{1}and one other tag|]1,Inf[and %count% other tags'
+ reading_time_minutes_short: '%readingTime% min'
+ reading_time_less_one_minute_short: '<small class="inferieur"><</small> 1 min'
original_article: 'original'
toogle_as_read: 'Marcar como leído/ no leído'
toogle_as_star: 'Marcar como favorito/ no favorito'
reading_time: 'زمان تخمینی برای خواندن'
reading_time_minutes: 'زمان تخمینی برای خواندن: %readingTime% min'
reading_time_less_one_minute: 'زمان تخمینی برای خواندن: <small class="inferieur"><</small> 1 min'
+ # number_of_tags: '{1}and one other tag|]1,Inf[and %count% other tags'
+ reading_time_minutes_short: '%readingTime% min'
+ reading_time_less_one_minute_short: '<small class="inferieur"><</small> 1 min'
original_article: 'original'
toogle_as_read: 'خواندهشده/خواندهنشده'
toogle_as_star: 'برگزیده/نابرگزیده'
reading_time: 'durée de lecture'
reading_time_minutes: 'durée de lecture: %readingTime% min'
reading_time_less_one_minute: 'durée de lecture: <small class="inferieur"><</small> 1 min'
+ number_of_tags: '{1}et un autre tag|]1,Inf[et %count% autres tags'
+ reading_time_minutes_short: '%readingTime% min'
+ reading_time_less_one_minute_short: '<small class="inferieur"><</small> 1 min'
original_article: 'original'
toogle_as_read: 'Marquer comme lu/non lu'
toogle_as_star: 'Marquer comme favori'
reading_time: 'tempo di lettura stimato'
reading_time_minutes: 'tempo di lettura stimato: %readingTime% min'
reading_time_less_one_minute: 'tempo di lettura stimato: <small class="inferieur"><</small> 1 min'
+ # number_of_tags: '{1}and one other tag|]1,Inf[and %count% other tags'
+ reading_time_minutes_short: '%readingTime% min'
+ reading_time_less_one_minute_short: '<small class="inferieur"><</small> 1 min'
original_article: 'originale'
toogle_as_read: 'Segna come da leggere'
toogle_as_star: 'Segna come non preferito'
reading_time: 'durada de lectura'
reading_time_minutes: 'durada de lectura : %readingTime% min'
reading_time_less_one_minute: 'durada de lectura : <small class="inferieur"><</small> 1 min'
+ # number_of_tags: '{1}and one other tag|]1,Inf[and %count% other tags'
+ reading_time_minutes_short: '%readingTime% min'
+ reading_time_less_one_minute_short: '<small class="inferieur"><</small> 1 min'
original_article: 'original'
toogle_as_read: 'Marcar coma legit/pas legit'
toogle_as_star: 'Marcar coma favorit'
reading_time: 'szacunkowy czas czytania'
reading_time_minutes: 'szacunkowy czas czytania: %readingTime% min'
reading_time_less_one_minute: 'szacunkowy czas czytania: <small class="inferieur"><</small> 1 min'
+ # number_of_tags: '{1}and one other tag|]1,Inf[and %count% other tags'
+ reading_time_minutes_short: '%readingTime% min'
+ reading_time_less_one_minute_short: '<small class="inferieur"><</small> 1 min'
original_article: 'oryginał'
toogle_as_read: 'Oznacz jako przeczytane'
toogle_as_star: 'Oznacz jako ulubione'
reading_time: 'timp estimat de citire'
reading_time_minutes: 'timp estimat de citire: %readingTime% min'
reading_time_less_one_minute: 'timp estimat de citire: <small class="inferieur"><</small> 1 min'
+ # number_of_tags: '{1}and one other tag|]1,Inf[and %count% other tags'
+ reading_time_minutes_short: '%readingTime% min'
+ reading_time_less_one_minute_short: '<small class="inferieur"><</small> 1 min'
original_article: 'original'
toogle_as_read: 'Comută marcat ca citit'
toogle_as_star: 'Comută marcat ca favorit'
reading_time: 'tahmini okuma süresi'
reading_time_minutes: 'tahmini okuma süresi: %readingTime% min'
reading_time_less_one_minute: 'tahmini okuma süresi: <small class="inferieur"><</small> 1 min'
+ # number_of_tags: '{1}and one other tag|]1,Inf[and %count% other tags'
+ reading_time_minutes_short: '%readingTime% min'
+ reading_time_less_one_minute_short: '<small class="inferieur"><</small> 1 min'
original_article: 'orijinal'
toogle_as_read: 'Okundu/okunmadı olarak işaretle'
toogle_as_star: 'Favorilere ekle/çıkar'
</header>
<div id="article_toolbar">
-- <ul class="links">
-- <li class="topPosF"><a href="#top" title="{{ 'entry.view.left_menu.back_to_top'|trans }}" class="tool top icon icon-arrow-up-thick"><span>{{ 'entry.view.left_menu.set_as_read'|trans }}</span></a></li>
-- <li><a href="{{ entry.url|e }}" target="_blank" title="{{ 'entry.view.original_article'|trans }} : {{ entry.title|e }}" class="tool link icon icon-link"><span>{{ entry.domainName|removeWww }}</span></a></li>
-- <li><a title="{{ 'entry.view.left_menu.re_fetch_content'|trans }}" class="tool icon icon-reload" href="{{ path('reload_entry', { 'id': entry.id }) }}"><span>{{ 'entry.view.left_menu.re_fetch_content'|trans }}</span></a></li>
-- <li><a title="{% if entry.isArchived == 0 %}{{ 'entry.view.left_menu.set_as_read'|trans }}{% else %}{{ 'entry.view.left_menu.set_as_unread'|trans }}{% endif %}" class="tool icon icon-check {% if entry.isArchived == 0 %}archive-off{% else %}archive{% endif %}" href="{{ path('archive_entry', { 'id': entry.id }) }}"><span>{% if entry.isArchived == 0 %}{{ 'entry.view.left_menu.set_as_read'|trans }}{% else %}{{ 'entry.view.left_menu.set_as_unread'|trans }}{% endif %}</span></a></li>
- <li><a title="{{ 'entry.view.left_menu.set_as_favorite'|trans }}" class="tool icon icon-star {% if entry.isStarred == 0 %}fav-off{% else %}fav{% endif %}" href="{{ path('star_entry', { 'id': entry.id }) }}"><span>{{ 'entry.view.left_menu.set_as_favorite'|trans }}</span></a></li>
- <li><a title="{{ 'entry.view.left_menu.set_as_starred'|trans }}" class="tool icon icon-star {% if entry.isStarred == 0 %}fav-off{% else %}fav{% endif %}" href="{{ path('star_entry', { 'id': entry.id }) }}"><span>{{ 'entry.view.left_menu.set_as_starred'|trans }}</span></a></li>
-- <li><a id="nav-btn-add-tag" title="{{ 'entry.view.left_menu.add_a_tag'|trans }}"><span>{{ 'entry.view.left_menu.add_a_tag'|trans }}</span></a></li>
-- <li><a title="{{ 'entry.view.left_menu.delete'|trans }}" class="tool delete icon icon-trash" href="{{ path('delete_entry', { 'id': entry.id }) }}"><span>{{ 'entry.view.left_menu.delete'|trans }}</span></a></li>
-- {% if craue_setting('share_twitter') %}<li><a href="https://twitter.com/home?status={{entry.title|url_encode}}%20{{ entry.url|url_encode }}%20via%20@wallabagapp" target="_blank" class="tool twitter icon icon-twitter" title="Tweet"><span>Tweet</span></a></li>{% endif %}
-- {% if craue_setting('share_mail') %}<li><a href="mailto:?subject={{ entry.title|url_encode }}&body={{ entry.url|url_encode }}%20via%20@wallabagapp" class="tool email icon icon-mail" title="Email"><span>Email</span></a></li>{% endif %}
-- {% if craue_setting('share_shaarli') %}<li><a href="{{ craue_setting('shaarli_url') }}/index.php?post={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}" target="_blank" class="tool shaarli" title="shaarli"><span>shaarli</span></a></li>{% endif %}
-- {% if craue_setting('share_diaspora') %}<li><a href="{{ craue_setting('diaspora_url') }}/bookmarklet?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}¬es=&v=1&noui=1&jump=doclose" target="_blank" class="tool diaspora icon-image icon-image--diaspora" title="diaspora"><span>diaspora</span></a></li>{% endif %}
-- {% if craue_setting('carrot') %}<li><a href="https://secure.carrot.org/GiveAndGetBack.do?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}" class="tool carrot icon-image icon-image--carrot" target="_blank" title="carrot"><span>Carrot</span></a></li>{% endif %}
-- {% if craue_setting('show_printlink') %}<li><a title="{{ 'entry.view.left_menu.print'|trans }}" class="tool icon icon-print" href="javascript: window.print();"><span>{{ 'entry.view.left_menu.print'|trans }}</span></a></li>{% endif %}
-- {% if craue_setting('export_epub') %}<li><a href="?epub&method=id&value={{ entry.id }}" title="Generate ePub file">EPUB</a></li>{% endif %}
-- {% if craue_setting('export_mobi') %}<li><a href="?mobi&method=id&value={{ entry.id }}" title="Generate Mobi file">MOBI</a></li>{% endif %}
-- {% if craue_setting('export_pdf') %}<li><a href="?pdf&method=id&value={{ entry.id }}" title="Generate PDF file">PDF</a></li>{% endif %}
-- <li><a href="mailto:hello@wallabag.org?subject=Wrong%20display%20in%20wallabag&body={{ entry.url|url_encode }}" title="{{ 'entry.view.left_menu.problem.label'|trans }}" class="tool bad-display icon icon-delete"><span>{{ 'entry.view.left_menu.problem.label'|trans }}</span></a></li>
-- </ul>
-- </div>
++ <ul class="links">
++ <li class="topPosF"><a href="#top" title="{{ 'entry.view.left_menu.back_to_top'|trans }}" class="tool top icon icon-arrow-up-thick"><span>{{ 'entry.view.left_menu.set_as_read'|trans }}</span></a></li>
++ <li><a href="{{ entry.url|e }}" target="_blank" title="{{ 'entry.view.original_article'|trans }} : {{ entry.title|e }}" class="tool link icon icon-link"><span>{{ entry.domainName|removeWww }}</span></a></li>
++ <li><a title="{{ 'entry.view.left_menu.re_fetch_content'|trans }}" class="tool icon icon-reload" href="{{ path('reload_entry', { 'id': entry.id }) }}"><span>{{ 'entry.view.left_menu.re_fetch_content'|trans }}</span></a></li>
++ <li><a title="{% if entry.isArchived == 0 %}{{ 'entry.view.left_menu.set_as_read'|trans }}{% else %}{{ 'entry.view.left_menu.set_as_unread'|trans }}{% endif %}" class="tool icon icon-check {% if entry.isArchived == 0 %}archive-off{% else %}archive{% endif %}" href="{{ path('archive_entry', { 'id': entry.id }) }}"><span>{% if entry.isArchived == 0 %}{{ 'entry.view.left_menu.set_as_read'|trans }}{% else %}{{ 'entry.view.left_menu.set_as_unread'|trans }}{% endif %}</span></a></li>
++ <li><a title="{{ 'entry.view.left_menu.set_as_starred'|trans }}" class="tool icon icon-star {% if entry.isStarred == 0 %}fav-off{% else %}fav{% endif %}" href="{{ path('star_entry', { 'id': entry.id }) }}"><span>{{ 'entry.view.left_menu.set_as_starred'|trans }}</span></a></li>
++ <li><a id="nav-btn-add-tag" title="{{ 'entry.view.left_menu.add_a_tag'|trans }}"><span>{{ 'entry.view.left_menu.add_a_tag'|trans }}</span></a></li>
++ <li><a title="{{ 'entry.view.left_menu.delete'|trans }}" class="tool delete icon icon-trash" href="{{ path('delete_entry', { 'id': entry.id }) }}"><span>{{ 'entry.view.left_menu.delete'|trans }}</span></a></li>
++ {% if craue_setting('share_twitter') %}<li><a href="https://twitter.com/home?status={{entry.title|url_encode}}%20{{ entry.url|url_encode }}%20via%20@wallabagapp" target="_blank" class="tool twitter icon icon-twitter" title="Tweet"><span>Tweet</span></a></li>{% endif %}
++ {% if craue_setting('share_mail') %}<li><a href="mailto:?subject={{ entry.title|url_encode }}&body={{ entry.url|url_encode }}%20via%20@wallabagapp" class="tool email icon icon-mail" title="Email"><span>Email</span></a></li>{% endif %}
++ {% if craue_setting('share_shaarli') %}<li><a href="{{ craue_setting('shaarli_url') }}/index.php?post={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}" target="_blank" class="tool shaarli" title="shaarli"><span>shaarli</span></a></li>{% endif %}
++ {% if craue_setting('share_diaspora') %}<li><a href="{{ craue_setting('diaspora_url') }}/bookmarklet?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}¬es=&v=1&noui=1&jump=doclose" target="_blank" class="tool diaspora icon-image icon-image--diaspora" title="diaspora"><span>diaspora</span></a></li>{% endif %}
++ {% if craue_setting('carrot') %}<li><a href="https://secure.carrot.org/GiveAndGetBack.do?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}" class="tool carrot icon-image icon-image--carrot" target="_blank" title="carrot"><span>Carrot</span></a></li>{% endif %}
++ {% if craue_setting('show_printlink') %}<li><a title="{{ 'entry.view.left_menu.print'|trans }}" class="tool icon icon-print" href="javascript: window.print();"><span>{{ 'entry.view.left_menu.print'|trans }}</span></a></li>{% endif %}
++ {% if craue_setting('export_epub') %}<li><a href="?epub&method=id&value={{ entry.id }}" title="Generate ePub file">EPUB</a></li>{% endif %}
++ {% if craue_setting('export_mobi') %}<li><a href="?mobi&method=id&value={{ entry.id }}" title="Generate Mobi file">MOBI</a></li>{% endif %}
++ {% if craue_setting('export_pdf') %}<li><a href="?pdf&method=id&value={{ entry.id }}" title="Generate PDF file">PDF</a></li>{% endif %}
++ <li><a href="mailto:hello@wallabag.org?subject=Wrong%20display%20in%20wallabag&body={{ entry.url|url_encode }}" title="{{ 'entry.view.left_menu.problem.label'|trans }}" class="tool bad-display icon icon-delete"><span>{{ 'entry.view.left_menu.problem.label'|trans }}</span></a></li>
++ </ul>
++ </div>
+ <div class="link mdi-action-today">
+ {{ 'entry.view.created_at'|trans }}: {{ entry.createdAt|date('Y-m-d') }}
+ </div>
+
+ <div class="link mdi-action-query-builder">
+ {% set readingTime = entry.readingTime / app.user.config.readingSpeed %}
+ {% if readingTime > 0 %}
+ {{ 'entry.list.reading_time_minutes'|trans({'%readingTime%': readingTime|round})|capitalize }}
+ {% else %}
+ {{ 'entry.list.reading_time_less_one_minute'|trans|raw }}
+ {% endif %}
+ </div>
+
{% set nbAnnotations = entry.annotations | length %}
- <span class="tool link mdi-communication-comment"> {{ 'entry.view.annotations_on_the_entry'|transchoice(entry.annotations | length) }}</span>
+ <span class="tool link"><i class="material-icons link">comment</i> {{ 'entry.view.annotations_on_the_entry'|transchoice(entry.annotations | length) }}</span>
<aside class="tags">
{% for tag in entry.tags %}
- <span class="mdi-action-label-outline">{{ tag.label }}</span> <a href="{{ path('remove_tag', { 'entry': entry.id, 'tag': tag.id }) }}"><i>✘</i></a>
+ <span class="label-outline"><i class="material-icons">label_outline</i> {{ tag.label }}</span> <a href="{{ path('remove_tag', { 'entry': entry.id, 'tag': tag.id }) }}"class="nostyle"><i>✘</i></a>
{% endfor %}
<div class="input-field nav-panel-add-tag" style="display: none">
{{ render(controller( "WallabagCoreBundle:Tag:addTagForm", { 'id': entry.id } )) }}
{{ entry.content | raw }}
</article>
</div>
-
- // toggle read property of current article
- /* $('#markAsRead').click(function(){
- $("body").css("cursor", "wait");
- $.ajax( { url: '{{ path('archive_entry', { 'id': entry.id }) }}' }).done(
- function( data ) {
- if ( data == '1' ) {
- if ( $('#markAsRead').hasClass("archive-off") ) {
- $('#markAsRead').removeClass("archive-off");
- $('#markAsRead').addClass("archive");
- }
- else {
- $('#markAsRead').removeClass("archive");
- $('#markAsRead').addClass("archive-off");
- }
- }
- else {
- alert('Error! Pls check if you are logged in.');
- }
- });
- $("body").css("cursor", "auto");
- });*/
-
- // toggle starred property of current article
- /* $('#setFav').click(function(){
- $("body").css("cursor", "wait");
- $.ajax( { url: '{{ path('star_entry', { 'id': entry.id }) }}' }).done(
- function( data ) {
- if ( data == '1' ) {
- if ( $('#setFav').hasClass("fav-off") ) {
- $('#setFav').removeClass("fav-off");
- $('#setFav').addClass("fav");
- }
- else {
- $('#setFav').removeClass("fav");
- $('#setFav').addClass("fav-off");
- }
- }
- else {
- alert('Error! Pls check if you are logged in.');
- }
- });
- $("body").css("cursor", "auto");
- });*/
-
++
+ <script id="annotationroutes" type="application/json">
+ {
+ "prefix": "",
+ "urls": {
+ "create": "{{ path('annotations_post_annotation', { 'entry': entry.id }) }}",
+ "update": "{{ path('annotations_put_annotation', { 'annotation': 'idAnnotation' }) }}",
+ "destroy": "{{ path('annotations_delete_annotation', { 'annotation': 'idAnnotation' }) }}",
+ "search": "{{ path('annotations_get_annotations', { 'entry': entry.id }) }}"
+ },
+ "entryId": "{{ entry.id }}"
+ }
+ </script>
+ <script src="{{ asset('bundles/wallabagcore/themes/_global/js/restoreScroll.js')}}"></script>
+ <script type="text/javascript">
+ $(document).ready(function() {
-
- var app = new annotator.App();
- app.include(annotator.ui.main, {
- element: document.querySelector('article')
- });
- app.include(annotator.storage.http, {
- prefix: '',
- urls: {
- create: '{{ path('annotations_post_annotation', { 'entry': entry.id }) }}',
- update: '{{ path('annotations_put_annotation', { 'annotation': 'idAnnotation' }) }}',
- destroy: '{{ path('annotations_delete_annotation', { 'annotation': 'idAnnotation' }) }}',
- search: '{{ path('annotations_get_annotations', { 'entry': entry.id }) }}'
- }
- });
- app
- .start()
- .then(function () {
- app.annotations.load({entry: {{ entry.id }}});
- });
+ $(window).scroll(function(e){
+ var scrollTop = $(window).scrollTop();
+ var docHeight = $(document).height();
+ var scrollPercent = (scrollTop) / (docHeight);
+ var scrollPercentRounded = Math.round(scrollPercent*100)/100;
+ savePercent({{ entry.id }}, scrollPercentRounded);
+ });
+
+ retrievePercent({{ entry.id }});
+
+ $(window).resize(function(){
+ retrievePercent({{ entry.id }});
+ });
+ });
-
+ </script>
{% endblock %}
<a href="{{ entry.url|e }}" target="_blank" title="{{ 'entry.list.original_article'|trans }}: {{ entry.title|e }} - {{ entry.domainName|removeWww }}" class="tool original grey-text"><span>{{ entry.domainName|removeWww|truncate(18) }}</span></a>
</bold>
- <ul class="tools links right">
+ <ul class="tools right">
<li>
- <a title="{{ 'entry.list.toogle_as_read'|trans }}" class="tool grey-text {% if entry.isArchived == 0 %}mdi-action-done{% else %}mdi-content-redo{% endif %}" href="{{ path('archive_entry', { 'id': entry.id }) }}"></a>
- <a title="{{ 'entry.list.toogle_as_star'|trans }}" class="tool grey-text {% if entry.isStarred == 0 %}mdi-toggle-star-outline{% else %}mdi-toggle-star{% endif %}" href="{{ path('star_entry', { 'id': entry.id }) }}"></a>
- <a title="{{ 'entry.list.delete'|trans }}" class="tool grey-text delete mdi-action-delete " href="{{ path('delete_entry', { 'id': entry.id }) }}"></a>
+ <a title="{{ 'entry.list.toogle_as_read'|trans }}" class="tool grey-text" href="{{ path('archive_entry', { 'id': entry.id }) }}"><i class="material-icons">{% if entry.isArchived == 0 %}done{% else %}redo{% endif %}</i></a>
- <a title="{{ 'entry.list.toogle_as_star'|trans }}" class="tool grey-text" href="{{ path('star_entry', { 'id': entry.id }) }}"><i class="material-icons">{% if entry.isStarred == 0 %}favorite_border{% else %}favorite{% endif %}</i></a>
++ <a title="{{ 'entry.list.toogle_as_star'|trans }}" class="tool grey-text" href="{{ path('star_entry', { 'id': entry.id }) }}"><i class="material-icons">{% if entry.isStarred == 0 %}star_border{% else %}star{% endif %}</i></a>
+ <a title="{{ 'entry.list.delete'|trans }}" class="tool grey-text delete" href="{{ path('delete_entry', { 'id': entry.id }) }}"><i class="material-icons">delete</i></a>
</li>
</ul>
</div>
</a>
</li>
<li>
- <a class="waves-effect" title="{{ 'entry.view.left_menu.set_as_favorite'|trans }}" href="{{ path('star_entry', { 'id': entry.id }) }}" id="setFav">
- <i class="material-icons small">{% if entry.isStarred == 0 %}favorite_outline{% else %}favorite{% endif %}</i>
+ <a class="waves-effect" title="{{ 'entry.view.left_menu.set_as_starred'|trans }}" href="{{ path('star_entry', { 'id': entry.id }) }}" id="setFav">
- <i class="{% if entry.isStarred == 0 %}mdi-toggle-star-outline{% else %}mdi-toggle-star{% endif %} small"></i>
++ <i class="material-icons small">{% if entry.isStarred == 0 %}star_outline{% else %}star{% endif %}</i>
</a>
</li>
<li>
</li>
<li class="bold hide-on-med-and-down">
- <a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.set_as_favorite'|trans }}" href="{{ path('star_entry', { 'id': entry.id }) }}" id="setFav">
- <i class="material-icons spall">{% if entry.isStarred == 0 %}favorite_outline{% else %}favorite{% endif %}</i>
- <span>{{ 'entry.view.left_menu.set_as_favorite'|trans }}</span>
+ <a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.set_as_starred'|trans }}" href="{{ path('star_entry', { 'id': entry.id }) }}" id="setFav">
- <i class="{% if entry.isStarred == 0 %}mdi-toggle-star-outline{% else %}mdi-toggle-star{% endif %} small"></i>
++ <i class="material-icons spall">{% if entry.isStarred == 0 %}star_outline{% else %}star{% endif %}</i>
+ <span>{{ 'entry.view.left_menu.set_as_starred'|trans }}</span>
</a>
<div class="collapsible-body"></div>
</li>
<h1>{{ entry.title|raw }} <a href="{{ path('edit', { 'id': entry.id }) }}" title="{{ 'entry.view.edit_title'|trans }}">✎</a></h1>
</header>
<aside>
- <span class="link mdi-action-today" title="{{ 'entry.view.created_at'|trans }}"> {{ entry.createdAt|date('Y-m-d') }}</span>
+ {% set readingTime = entry.readingTime / app.user.config.readingSpeed %}
+ <span class="link mdi-action-query-builder">
+ {% if readingTime > 0 %}
+ {{ 'entry.list.reading_time_minutes_short'|trans({'%readingTime%': readingTime|round}) }}
+ {% else %}
+ {{ 'entry.list.reading_time_less_one_minute_short'|trans|raw }}
+ {% endif %}
+ </span>
- <a href="{{ entry.url|e }}" target="_blank" title="{{ 'entry.view.original_article'|trans }} : {{ entry.title|e }}" class="tool link mdi-content-link"> <span>{{ entry.domainName|removeWww }}</span></a>
- <span class="tool link mdi-communication-comment"> {{ 'entry.view.annotations_on_the_entry'|transchoice(entry.annotations | length) }}</span>
++ <span class="link mdi-action-today" title="{{ 'entry.view.created_at'|trans }}"> {{ entry.createdAt|date('Y-m-d') }}</span>
+ <a href="{{ entry.url|e }}" target="_blank" title="{{ 'entry.view.original_article'|trans }} : {{ entry.title|e }}" class="tool">
+ <span class="link"><i class="material-icons link">link</i> {{ entry.domainName|removeWww }}</span></a>
+ <span class="tool link"><i class="material-icons link">comment</i> {{ 'entry.view.annotations_on_the_entry'|transchoice(entry.annotations | length) }}</span>
<div id="list">
{% for tag in entry.tags %}
<div class="chip">
<ul id="slide-out" class="side-nav fixed">
{% block logo %}
<li class="logo border-bottom">
- <a title="{% trans %}Back to unread articles{% endtrans %}" href="{{ path('unread') }}">
+ <a title="{{ 'menu.left.back_to_unread'|trans }}" href="{{ path('unread') }}">
- <img src="{{ asset('bundles/wallabagcore/themes/material/img/logo-square.png') }}" alt="wallabag logo" />
+ <img src="{{ asset('bundles/wallabagcore/themes/_global/img/logo-square.png') }}" alt="wallabag logo" />
</a>
</li>
{% endblock %}