diff options
| -rwxr-xr-x | app/controllers/configureController.php | 32 | ||||
| -rw-r--r-- | app/i18n/en.php | 3 | ||||
| -rw-r--r-- | app/i18n/fr.php | 3 | ||||
| -rwxr-xr-x | app/models/RSSConfiguration.php | 121 | ||||
| -rw-r--r-- | app/views/configure/display.phtml | 36 | ||||
| -rw-r--r-- | app/views/helpers/view/normal_view.phtml | 59 | ||||
| -rw-r--r-- | public/themes/default/freshrss.css | 27 | ||||
| -rw-r--r-- | public/themes/flat-design/freshrss.css | 26 |
8 files changed, 254 insertions, 53 deletions
diff --git a/app/controllers/configureController.php b/app/controllers/configureController.php index a63ebe31d..6295ca8e6 100755 --- a/app/controllers/configureController.php +++ b/app/controllers/configureController.php @@ -168,6 +168,16 @@ class configureController extends ActionController { $scroll = Request::param ('mark_scroll', 'no'); $urlShaarli = Request::param ('shaarli', ''); $theme = Request::param ('theme', 'default'); + $topline_read = Request::param ('topline_read', 'no'); + $topline_favorite = Request::param ('topline_favorite', 'no'); + $topline_date = Request::param ('topline_date', 'no'); + $topline_link = Request::param ('topline_link', 'no'); + $bottomline_read = Request::param ('bottomline_read', 'no'); + $bottomline_favorite = Request::param ('bottomline_favorite', 'no'); + $bottomline_sharing = Request::param ('bottomline_sharing', 'no'); + $bottomline_tags = Request::param ('bottomline_tags', 'no'); + $bottomline_date = Request::param ('bottomline_date', 'no'); + $bottomline_link = Request::param ('bottomline_link', 'no'); $this->view->conf->_language ($language); $this->view->conf->_postsPerPage (intval ($nb)); @@ -189,6 +199,16 @@ class configureController extends ActionController { )); $this->view->conf->_urlShaarli ($urlShaarli); $this->view->conf->_theme ($theme); + $this->view->conf->_topline_read ($topline_read); + $this->view->conf->_topline_favorite ($topline_favorite); + $this->view->conf->_topline_date ($topline_date); + $this->view->conf->_topline_link ($topline_link); + $this->view->conf->_bottomline_read ($bottomline_read); + $this->view->conf->_bottomline_favorite ($bottomline_favorite); + $this->view->conf->_bottomline_sharing ($bottomline_sharing); + $this->view->conf->_bottomline_tags ($bottomline_tags); + $this->view->conf->_bottomline_date ($bottomline_date); + $this->view->conf->_bottomline_link ($bottomline_link); $values = array ( 'language' => $this->view->conf->language (), @@ -206,7 +226,17 @@ class configureController extends ActionController { 'token' => $this->view->conf->token (), 'mark_when' => $this->view->conf->markWhen (), 'url_shaarli' => $this->view->conf->urlShaarli (), - 'theme' => $this->view->conf->theme () + 'theme' => $this->view->conf->theme (), + 'topline_read' => $this->view->conf->toplineRead () ? 'yes' : 'no', + 'topline_favorite' => $this->view->conf->toplineFavorite () ? 'yes' : 'no', + 'topline_date' => $this->view->conf->toplineDate () ? 'yes' : 'no', + 'topline_link' => $this->view->conf->toplineLink () ? 'yes' : 'no', + 'bottomline_read' => $this->view->conf->bottomlineRead () ? 'yes' : 'no', + 'bottomline_favorite' => $this->view->conf->bottomlineFavorite () ? 'yes' : 'no', + 'bottomline_sharing' => $this->view->conf->bottomlineSharing () ? 'yes' : 'no', + 'bottomline_tags' => $this->view->conf->bottomlineTags () ? 'yes' : 'no', + 'bottomline_date' => $this->view->conf->bottomlineDate () ? 'yes' : 'no', + 'bottomline_link' => $this->view->conf->bottomlineLink () ? 'yes' : 'no', ); $confDAO = new RSSConfigurationDAO (); diff --git a/app/i18n/en.php b/app/i18n/en.php index 590030684..bf4d3f550 100644 --- a/app/i18n/en.php +++ b/app/i18n/en.php @@ -162,6 +162,9 @@ return array ( 'display_articles_unfolded' => 'Show articles unfolded by default', 'after_onread' => 'After marked as read,', 'jump_next' => 'jump to next unread sibling', + 'reading_icons' => 'Reading icons', + 'top_line' => 'Top line', + 'bottom_line' => 'Bottom line', 'img_with_lazyload' => 'Use "lazy load" mode to load pictures', 'auto_read_when' => 'Mark as read when', 'article_selected' => 'article is selected', diff --git a/app/i18n/fr.php b/app/i18n/fr.php index 90ecbb8bb..aaf7ce697 100644 --- a/app/i18n/fr.php +++ b/app/i18n/fr.php @@ -162,6 +162,9 @@ return array ( 'display_articles_unfolded' => 'Afficher les articles dépliés par défaut', 'after_onread' => 'Après marqué comme lu,', 'jump_next' => 'sauter au prochain voisin non lu', + 'reading_icons' => 'Icônes de lecture', + 'top_line' => 'Ligne du haut', + 'bottom_line' => 'Ligne du bas', 'img_with_lazyload' => 'Utiliser le mode “lazy load” pour charger les images', 'auto_read_when' => 'Marquer comme lu lorsque', 'article_selected' => 'l’article est sélectionné', diff --git a/app/models/RSSConfiguration.php b/app/models/RSSConfiguration.php index 038ce2a2c..4a99dfd2e 100755 --- a/app/models/RSSConfiguration.php +++ b/app/models/RSSConfiguration.php @@ -22,6 +22,16 @@ class RSSConfiguration extends Model { private $anon_access; private $token; private $auto_load_more; + private $topline_read; + private $topline_favorite; + private $topline_date; + private $topline_link; + private $bottomline_read; + private $bottomline_favorite; + private $bottomline_sharing; + private $bottomline_tags; + private $bottomline_date; + private $bottomline_link; public function __construct () { $confDAO = new RSSConfigurationDAO (); @@ -42,6 +52,16 @@ class RSSConfiguration extends Model { $this->_anonAccess ($confDAO->anon_access); $this->_token ($confDAO->token); $this->_autoLoadMore ($confDAO->auto_load_more); + $this->_topline_read ($confDAO->topline_read); + $this->_topline_favorite ($confDAO->topline_favorite); + $this->_topline_date ($confDAO->topline_date); + $this->_topline_link ($confDAO->topline_link); + $this->_bottomline_read ($confDAO->bottomline_read); + $this->_bottomline_favorite ($confDAO->bottomline_favorite); + $this->_bottomline_sharing ($confDAO->bottomline_sharing); + $this->_bottomline_tags ($confDAO->bottomline_tags); + $this->_bottomline_date ($confDAO->bottomline_date); + $this->_bottomline_link ($confDAO->bottomline_link); } public function availableLanguages () { @@ -107,6 +127,36 @@ class RSSConfiguration extends Model { public function autoLoadMore () { return $this->auto_load_more; } + public function toplineRead () { + return $this->topline_read; + } + public function toplineFavorite () { + return $this->topline_favorite; + } + public function toplineDate () { + return $this->topline_date; + } + public function toplineLink () { + return $this->topline_link; + } + public function bottomlineRead () { + return $this->bottomline_read; + } + public function bottomlineFavorite () { + return $this->bottomline_favorite; + } + public function bottomlineSharing () { + return $this->bottomline_sharing; + } + public function bottomlineTags () { + return $this->bottomline_tags; + } + public function bottomlineDate () { + return $this->bottomline_date; + } + public function bottomlineLink () { + return $this->bottomline_link; + } public function _language ($value) { if (!isset ($this->available_languages[$value])) { @@ -223,6 +273,36 @@ class RSSConfiguration extends Model { $this->auto_load_more = 'no'; } } + public function _topline_read ($value) { + $this->topline_read = $value === 'yes'; + } + public function _topline_favorite ($value) { + $this->topline_favorite = $value === 'yes'; + } + public function _topline_date ($value) { + $this->topline_date = $value === 'yes'; + } + public function _topline_link ($value) { + $this->topline_link = $value === 'yes'; + } + public function _bottomline_read ($value) { + $this->bottomline_read = $value === 'yes'; + } + public function _bottomline_favorite ($value) { + $this->bottomline_favorite = $value === 'yes'; + } + public function _bottomline_sharing ($value) { + $this->bottomline_sharing = $value === 'yes'; + } + public function _bottomline_tags ($value) { + $this->bottomline_tags = $value === 'yes'; + } + public function _bottomline_date ($value) { + $this->bottomline_date = $value === 'yes'; + } + public function _bottomline_link ($value) { + $this->bottomline_link = $value === 'yes'; + } } class RSSConfigurationDAO extends Model_array { @@ -253,6 +333,16 @@ class RSSConfigurationDAO extends Model_array { public $anon_access = 'no'; public $token = ''; public $auto_load_more = 'no'; + public $topline_read = 'yes'; + public $topline_favorite = 'yes'; + public $topline_date = 'yes'; + public $topline_link = 'yes'; + public $bottomline_read = 'yes'; + public $bottomline_favorite = 'yes'; + public $bottomline_sharing = 'yes'; + public $bottomline_tags = 'yes'; + public $bottomline_date = 'yes'; + public $bottomline_link = 'yes'; public function __construct () { parent::__construct (PUBLIC_PATH . '/data/Configuration.array.php'); @@ -309,6 +399,37 @@ class RSSConfigurationDAO extends Model_array { if (isset ($this->array['auto_load_more'])) { $this->auto_load_more = $this->array['auto_load_more']; } + + if (isset ($this->array['topline_read'])) { + $this->topline_read = $this->array['topline_read']; + } + if (isset ($this->array['topline_favorite'])) { + $this->topline_favorite = $this->array['topline_favorite']; + } + if (isset ($this->array['topline_date'])) { + $this->topline_date = $this->array['topline_date']; + } + if (isset ($this->array['topline_link'])) { + $this->topline_link = $this->array['topline_link']; + } + if (isset ($this->array['bottomline_read'])) { + $this->bottomline_read = $this->array['bottomline_read']; + } + if (isset ($this->array['bottomline_favorite'])) { + $this->bottomline_favorite = $this->array['bottomline_favorite']; + } + if (isset ($this->array['bottomline_sharing'])) { + $this->bottomline_sharing = $this->array['bottomline_sharing']; + } + if (isset ($this->array['bottomline_tags'])) { + $this->bottomline_tags = $this->array['bottomline_tags']; + } + if (isset ($this->array['bottomline_date'])) { + $this->bottomline_date = $this->array['bottomline_date']; + } + if (isset ($this->array['bottomline_link'])) { + $this->bottomline_link = $this->array['bottomline_link']; + } } public function update ($values) { diff --git a/app/views/configure/display.phtml b/app/views/configure/display.phtml index 0f89437ac..687a84499 100644 --- a/app/views/configure/display.phtml +++ b/app/views/configure/display.phtml @@ -156,6 +156,42 @@ </div> </div> + <legend><?php echo Translate::t ('reading_icons'); ?></legend> + <div class="form-group"> + <table> + <thead> + <tr> + <th> </th> + <th><a class="read" title="<?php echo Translate::t ('mark_read'); ?>"> </span></th> + <th><a class="bookmark" title="<?php echo Translate::t ('mark_favorite'); ?>"> </span></th> + <th><?php echo Translate::t ('sharing'); ?></th> + <th><?php echo Translate::t ('related_tags'); ?></th> + <th><?php echo Translate::t ('publication_date'); ?></th> + <th class="item link"><a> </a></th> + </tr> + </thead> + <tbody> + <tr> + <th><?php echo Translate::t ('top_line'); ?></th> + <td><input type="checkbox" name="topline_read" value="yes"<?php echo $this->conf->toplineRead () ? ' checked="checked"' : ''; ?> /></td> + <td><input type="checkbox" name="topline_favorite" value="yes"<?php echo $this->conf->toplineFavorite () ? ' checked="checked"' : ''; ?> /></td> + <td><input type="checkbox" disabled="disabled" /></td> + <td><input type="checkbox" disabled="disabled" /></td> + <td><input type="checkbox" name="topline_date" value="yes"<?php echo $this->conf->toplineDate () ? ' checked="checked"' : ''; ?> /></td> + <td><input type="checkbox" name="topline_link" value="yes"<?php echo $this->conf->toplineLink () ? ' checked="checked"' : ''; ?> /></td> + </tr><tr> + <th><?php echo Translate::t ('bottom_line'); ?></th> + <td><input type="checkbox" name="bottomline_read" value="yes"<?php echo $this->conf->bottomlineRead () ? ' checked="checked"' : ''; ?> /></td> + <td><input type="checkbox" name="bottomline_favorite" value="yes"<?php echo $this->conf->bottomlineFavorite () ? ' checked="checked"' : ''; ?> /></td> + <td><input type="checkbox" name="bottomline_sharing" value="yes"<?php echo $this->conf->bottomlineSharing () ? ' checked="checked"' : ''; ?> /></td> + <td><input type="checkbox" name="bottomline_tags" value="yes"<?php echo $this->conf->bottomlineTags () ? ' checked="checked"' : ''; ?> /></td> + <td><input type="checkbox" name="bottomline_date" value="yes"<?php echo $this->conf->bottomlineDate () ? ' checked="checked"' : ''; ?> /></td> + <td><input type="checkbox" name="bottomline_link" value="yes"<?php echo $this->conf->bottomlineLink () ? ' checked="checked"' : ''; ?> /></td> + </tr> + </tbody> + </table> + </div> + <legend><?php echo Translate::t ('sharing'); ?></legend> <div class="form-group"> <label class="group-name" for="shaarli"><?php echo Translate::t ('your_shaarli'); ?></label> diff --git a/app/views/helpers/view/normal_view.phtml b/app/views/helpers/view/normal_view.phtml index d940e0dda..88fc602f6 100644 --- a/app/views/helpers/view/normal_view.phtml +++ b/app/views/helpers/view/normal_view.phtml @@ -39,36 +39,25 @@ if (isset ($this->entryPaginator) && !$this->entryPaginator->isEmpty ()) { <div class="flux<?php echo !$item->isRead () ? ' not_read' : ''; ?><?php echo $item->isFavorite () ? ' favorite' : ''; ?>" id="flux_<?php echo $item->id (); ?>"> <ul class="horizontal-list flux_header"> <?php if (!login_is_conf ($this->conf) || is_logged ()) { ?> - <li class="item manage"> - <?php if (!$item->isRead ()) { ?> - <a class="read" href="<?php echo _url ('entry', 'read', 'id', $item->id (), 'is_read', 1); ?>"> </a> - <?php } else { ?> - <a class="read" href="<?php echo _url ('entry', 'read', 'id', $item->id (), 'is_read', 0); ?>"> </a> - <?php } ?> - - <?php if (!$item->isFavorite ()) { ?> - <a class="bookmark" href="<?php echo _url ('entry', 'bookmark', 'id', $item->id (), 'is_favorite', 1); ?>"> </a> - <?php } else { ?> - <a class="bookmark" href="<?php echo _url ('entry', 'bookmark', 'id', $item->id (), 'is_favorite', 0); ?>"> </a> - <?php } ?> - </li> - <?php } ?> + <?php if ($this->conf->toplineRead ()) { ?><li class="item manage"><a class="read" href="<?php echo _url ('entry', 'read', 'id', $item->id (), 'is_read', $item->isRead () ? 0 : 1); ?>"> </a></li><?php } ?> + <?php if ($this->conf->toplineFavorite ()) { ?><li class="item manage"><a class="bookmark" href="<?php echo _url ('entry', 'bookmark', 'id', $item->id (), 'is_favorite', $item->isFavorite () ? 0 : 1); ?>"> </a></li><?php } ?> <?php + } $feed = HelperCategory::findFeed($this->cat_aside, $item->feed ()); //We most likely already have the feed object in cache if (empty($feed)) $feed = $item->feed (true); ?> <li class="item website"><a href="<?php echo _url ('index', 'index', 'get', 'f_' . $feed->id ()); ?>"><img class="favicon" src="<?php echo $feed->favicon (); ?>" alt="" /> <span><?php echo $feed->name (); ?></span></a></li> <li class="item title"><a target="_blank" href="<?php echo $item->link (); ?>"><?php echo $item->title (); ?></a></li> - <li class="item date"><?php echo $item->date (); ?></li> - <li class="item link"><a target="_blank" href="<?php echo $item->link (); ?>"> </a></li> + <?php if ($this->conf->toplineDate ()) { ?><li class="item date"><?php echo $item->date (); ?> </li><?php } ?> + <?php if ($this->conf->toplineLink ()) { ?><li class="item link"><a target="_blank" href="<?php echo $item->link (); ?>"> </a></li><?php } ?> </ul> <div class="flux_content"> <div class="content"> <h1 class="title"><?php echo $item->title (); ?></h1> - <?php $author = $item->author (); ?> - <?php echo $author != '' ? '<div class="author">' . Translate::t ('by_author', $author) . '</div>' : ''; ?> <?php + $author = $item->author (); + echo $author != '' ? '<div class="author">' . Translate::t ('by_author', $author) . '</div>' : ''; if($this->conf->lazyload() == 'yes') { echo lazyimg($item->content ()); } else { @@ -79,23 +68,15 @@ if (isset ($this->entryPaginator) && !$this->entryPaginator->isEmpty ()) { <ul class="horizontal-list bottom"> <?php if (!login_is_conf ($this->conf) || is_logged ()) { ?> - <li class="item manage"> - <?php if (!$item->isRead ()) { ?> - <a class="read" href="<?php echo _url ('entry', 'read', 'id', $item->id (), 'is_read', 1); ?>"> </a> - <?php } else { ?> - <a class="read" href="<?php echo _url ('entry', 'read', 'id', $item->id (), 'is_read', 0); ?>"> </a> - <?php } ?> - - <?php if (!$item->isFavorite ()) { ?> - <a class="bookmark" href="<?php echo _url ('entry', 'bookmark', 'id', $item->id (), 'is_favorite', 1); ?>"> </a> - <?php } else { ?> - <a class="bookmark" href="<?php echo _url ('entry', 'bookmark', 'id', $item->id (), 'is_favorite', 0); ?>"> </a> - <?php } ?> - </li> + <?php if ($this->conf->bottomlineRead ()) { ?><li class="item manage"><a class="read" href="<?php echo _url ('entry', 'read', 'id', $item->id (), 'is_read', $item->isRead () ? 0 : 1); ?>"> </a></li><?php } ?> + <?php if ($this->conf->bottomlineFavorite ()) { ?><li class="item manage"><a class="bookmark" href="<?php echo _url ('entry', 'bookmark', 'id', $item->id (), 'is_favorite', $item->isFavorite () ? 0 : 1); ?>"> </a></li><?php } ?> <?php } ?> <li class="item"> - <?php $link = urlencode ($item->link ()); ?> - <?php $title = urlencode ($item->title () . ' - ' . $feed->name ()); ?> + <?php + if ($this->conf->bottomlineSharing ()) { + $link = urlencode ($item->link ()); + $title = urlencode ($item->title () . ' - ' . $feed->name ()); + ?> <div class="dropdown"> <div id="dropdown-share-<?php echo $item->id ();?>" class="dropdown-target"></div> <i class="icon i_share"></i> <a class="dropdown-toggle" href="#dropdown-share-<?php echo $item->id ();?>"><?php echo Translate::t ('share'); ?></a> @@ -134,10 +115,12 @@ if (isset ($this->entryPaginator) && !$this->entryPaginator->isEmpty ()) { </a> </li> </ul> - </div> + </div><?php } ?> </li> - <?php $tags = $item->tags(); ?> - <?php if(!empty($tags)) { ?> + <?php + $tags = $this->conf->bottomlineTags () ? $item->tags() : null; + if (!empty($tags)) { + ?> <li class="item"> <div class="dropdown"> <div id="dropdown-tags-<?php echo $item->id ();?>" class="dropdown-target"></div> @@ -153,8 +136,8 @@ if (isset ($this->entryPaginator) && !$this->entryPaginator->isEmpty ()) { </div> </li> <?php } ?> - <li class="item date"><?php echo $item->date (); ?></li> - <li class="item link"><a target="_blank" href="<?php echo $item->link (); ?>"> </a></li> + <?php if ($this->conf->bottomlineDate ()) { ?><li class="item date"><?php echo $item->date (); ?> </li><?php } ?> + <?php if ($this->conf->bottomlineLink ()) { ?><li class="item link"><a target="_blank" href="<?php echo $item->link (); ?>"> </a></li><?php } ?> </ul> </div> </div> diff --git a/public/themes/default/freshrss.css b/public/themes/default/freshrss.css index e464b9fe4..bf4b0ab09 100644 --- a/public/themes/default/freshrss.css +++ b/public/themes/default/freshrss.css @@ -240,12 +240,12 @@ border-top: 1px solid #ddd; } .item.manage { - width: 80px; + width: 40px; white-space: nowrap; font-size: 0px; text-align: center; } - .item.manage .read { + .read { display: inline-block; width: 40px; height: 40px; @@ -253,14 +253,14 @@ background: url("icons/read.svg") center center no-repeat; vertical-align: middle; } - .item.manage .read:hover { + .read:hover { text-decoration: none; } - .flux.not_read .item.manage .read { + .flux.not_read .read { background: url("icons/unread.png") center center no-repeat; background: url("icons/unread.svg") center center no-repeat; } - .item.manage .bookmark { + .bookmark { display: inline-block; width: 40px; height: 40px; @@ -268,10 +268,10 @@ background: url("icons/non-starred.svg") center center no-repeat; vertical-align: middle; } - .item.manage .bookmark:hover { + .bookmark:hover { text-decoration: none; } - .flux.favorite .item.manage .bookmark { + .flux.favorite .bookmark { background: url("icons/starred.png") center center no-repeat; background: url("icons/starred.svg") center center no-repeat; } @@ -308,6 +308,7 @@ .item.date { width: 200px; overflow: hidden; + padding:0 5px 0 0; white-space: nowrap; text-overflow: ellipsis; text-align: right; @@ -637,6 +638,18 @@ color: #aaa; } +.form-group table { + border-collapse:collapse; + margin:10px 0 0 220px; + text-align:center; +} + +.form-group tr, .form-group th, .form-group td { + border:1px solid #DDD; + font-weight:normal; + padding:.5em; +} + @media(max-width: 840px) { .header, .aside .btn-important, diff --git a/public/themes/flat-design/freshrss.css b/public/themes/flat-design/freshrss.css index 49533f017..ede188ccb 100644 --- a/public/themes/flat-design/freshrss.css +++ b/public/themes/flat-design/freshrss.css @@ -227,12 +227,12 @@ body { border-top: 1px solid #ecf0f1; } .item.manage { - width: 80px; + width: 40px; white-space: nowrap; font-size: 0px; text-align: center; } - .item.manage .read { + .read { display: inline-block; width: 40px; height: 40px; @@ -240,14 +240,14 @@ body { background: url("icons/read.svg") center center no-repeat; vertical-align: middle; } - .item.manage .read:hover { + .read:hover { text-decoration: none; } - .flux.not_read .item.manage .read { + .flux.not_read .read { background: url("icons/unread.png") center center no-repeat; background: url("icons/unread.svg") center center no-repeat; } - .item.manage .bookmark { + .bookmark { display: inline-block; width: 40px; height: 40px; @@ -255,10 +255,10 @@ body { background: url("icons/non-starred.svg") center center no-repeat; vertical-align: middle; } - .item.manage .bookmark:hover { + .bookmark:hover { text-decoration: none; } - .flux.favorite .item.manage .bookmark { + .flux.favorite .bookmark { background: url("icons/starred.png") center center no-repeat; background: url("icons/starred.svg") center center no-repeat; } @@ -295,6 +295,7 @@ body { .item.date { width: 200px; overflow: hidden; + padding:0 5px 0 0; white-space: nowrap; text-overflow: ellipsis; text-align: right; @@ -642,6 +643,17 @@ body { background: #ecf0f1; } +.form-group table { + border-collapse:collapse; + margin:10px 0 0 220px; + text-align:center; +} + +.form-group tr, .form-group th, .form-group td { + font-weight:normal; + padding:.5em; +} + @media(max-width: 840px) { .header, .aside .btn-important, |
