Sfoglia il codice sorgente

Options pour personnaliser les icônes de lecture

Nouvelles options pour choisir d'afficher ou pas les icônes pour marquer
comme lu/non-lu, favoris, lien vers l'article, ainsi que les champs
partage, tags...
Légères simplifications CSS et PHP au passage.

(Note pour plus tard : Il serait peut-être souhaitable de simplifier le
mécanisme des options en PHP, par exemple en utilisant un tableau de
propriétés. Actuellement, il y a un attribut par option accompagné d'un
accesseur privé, un accesseur public, et idem dans le système de
chargement/écriture du fichier de configuration, ce qui fait beaucoup de
code PHP par option)
Alexandre Alapetite 12 anni fa
parent
commit
a689037825

+ 31 - 1
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 ();

+ 3 - 0
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',

+ 3 - 0
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é',

+ 121 - 0
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) {

+ 36 - 0
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>&nbsp;</th>
+						<th><a class="read" title="<?php echo Translate::t ('mark_read'); ?>">&nbsp;</span></th>
+						<th><a class="bookmark" title="<?php echo Translate::t ('mark_favorite'); ?>">&nbsp;</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>&nbsp;</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>

+ 21 - 38
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); ?>">&nbsp;</a>
-				<?php } else { ?>
-				<a class="read" href="<?php echo _url ('entry', 'read', 'id', $item->id (), 'is_read', 0); ?>">&nbsp;</a>
-				<?php } ?>
-
-				<?php if (!$item->isFavorite ()) { ?>
-				<a class="bookmark" href="<?php echo _url ('entry', 'bookmark', 'id', $item->id (), 'is_favorite', 1); ?>">&nbsp;</a>
-				<?php } else { ?>
-				<a class="bookmark" href="<?php echo _url ('entry', 'bookmark', 'id', $item->id (), 'is_favorite', 0); ?>">&nbsp;</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); ?>">&nbsp;</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); ?>">&nbsp;</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 (); ?>">&nbsp;</a></li>
+			<?php if ($this->conf->toplineDate ()) { ?><li class="item date"><?php echo $item->date (); ?>&nbsp;</li><?php } ?>
+			<?php if ($this->conf->toplineLink ()) { ?><li class="item link"><a target="_blank" href="<?php echo $item->link (); ?>">&nbsp;</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); ?>">&nbsp;</a>
-					<?php } else { ?>
-					<a class="read" href="<?php echo _url ('entry', 'read', 'id', $item->id (), 'is_read', 0); ?>">&nbsp;</a>
-					<?php } ?>
-
-					<?php if (!$item->isFavorite ()) { ?>
-					<a class="bookmark" href="<?php echo _url ('entry', 'bookmark', 'id', $item->id (), 'is_favorite', 1); ?>">&nbsp;</a>
-					<?php } else { ?>
-					<a class="bookmark" href="<?php echo _url ('entry', 'bookmark', 'id', $item->id (), 'is_favorite', 0); ?>">&nbsp;</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); ?>">&nbsp;</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); ?>">&nbsp;</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 (); ?>">&nbsp;</a></li>
+				<?php if ($this->conf->bottomlineDate ()) { ?><li class="item date"><?php echo $item->date (); ?>&nbsp;</li><?php } ?>
+				<?php if ($this->conf->bottomlineLink ()) { ?><li class="item link"><a target="_blank" href="<?php echo $item->link (); ?>">&nbsp;</a></li><?php } ?>
 			</ul>
 		</div>
 	</div>

+ 20 - 7
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,

+ 19 - 7
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,