From 3e665bcf9aefe40499b5d16e901d0c7427e367af Mon Sep 17 00:00:00 2001 From: Alexis Degrugillier Date: Sat, 12 Apr 2014 11:51:44 -0400 Subject: Delete favorite button I extract drop-down menu actions to make them as button action in the page header. I removed the favorite button on the category list because it is a duplicate from the button action. Now button action act as filters and you can combine them. It is a test to see if we can keep it like that. There is still work to do to extract other actions from the drop-down list. I did not want to change everything if we don't keep it. See #376 and #277 --- app/layout/aside_flux.phtml | 9 ---- app/layout/nav_menu.phtml | 102 ++++++++++++++++++++++++++++---------------- 2 files changed, 65 insertions(+), 46 deletions(-) (limited to 'app/layout') diff --git a/app/layout/aside_flux.phtml b/app/layout/aside_flux.phtml index 817dae676..0542e6b66 100644 --- a/app/layout/aside_flux.phtml +++ b/app/layout/aside_flux.phtml @@ -28,15 +28,6 @@ -
  • - -
  • - cat_aside as $cat) { $feeds = $cat->feeds (); diff --git a/app/layout/nav_menu.phtml b/app/layout/nav_menu.phtml index ffdc95b24..129647607 100644 --- a/app/layout/nav_menu.phtml +++ b/app/layout/nav_menu.phtml @@ -11,6 +11,70 @@ loginOk) { ?> + url; + if ($this->state & FreshRSS_Configuration::STATE_READ) { + $url_state['params']['state'] = $this->state - FreshRSS_Configuration::STATE_READ; + $checked = 'true'; + } else { + $url_state['params']['state'] = $this->state + FreshRSS_Configuration::STATE_READ; + $checked = 'false'; + } + ?> + + + + state & FreshRSS_Configuration::STATE_NOT_READ) { + $url_state['params']['state'] = $this->state - FreshRSS_Configuration::STATE_NOT_READ; + $checked = 'true'; + } else { + $url_state['params']['state'] = $this->state + FreshRSS_Configuration::STATE_NOT_READ; + $checked = 'false'; + } + ?> + + + + state & FreshRSS_Configuration::STATE_FAVORITE) { + $url_state['params']['state'] = $this->state - FreshRSS_Configuration::STATE_FAVORITE; + $checked = 'true'; + } else { + $url_state['params']['state'] = $this->state + FreshRSS_Configuration::STATE_FAVORITE; + $checked = 'false'; + } + ?> + + + + state & FreshRSS_Configuration::STATE_NOT_FAVORITE) { + $url_state['params']['state'] = $this->state - FreshRSS_Configuration::STATE_NOT_FAVORITE; + $checked = 'true'; + } else { + $url_state['params']['state'] = $this->state + FreshRSS_Configuration::STATE_NOT_FAVORITE; + $checked = 'false'; + } + ?> + + + -
  • +
  • today; @@ -132,42 +196,6 @@
  • - url; - $url_state['params']['state'] = 'all'; - ?> - - - - - - - - -
  • -
  • url; -- cgit v1.2.3 From e251247efb36488c95d57ed40f9ab9dc938e0bcd Mon Sep 17 00:00:00 2001 From: Alexis Degrugillier Date: Sat, 12 Apr 2014 22:13:17 -0400 Subject: Fix DOM ids --- app/layout/nav_menu.phtml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'app/layout') diff --git a/app/layout/nav_menu.phtml b/app/layout/nav_menu.phtml index 129647607..600d6dfa8 100644 --- a/app/layout/nav_menu.phtml +++ b/app/layout/nav_menu.phtml @@ -20,7 +20,7 @@ $checked = 'false'; } ?> - - - - Date: Sat, 12 Apr 2014 22:46:35 -0400 Subject: Extract RSS feed from menu The RSS action has now its own button. I also reorganized the button display order to be more natural. I did not find an appropriate Unicode replacement for the Rss icon. --- app/Models/Themes.php | 1 + app/layout/nav_menu.phtml | 22 +++++++++------------- p/themes/Flat/icons/rss.svg | 6 ++++++ p/themes/icons/rss.svg | 2 +- 4 files changed, 17 insertions(+), 14 deletions(-) create mode 100644 p/themes/Flat/icons/rss.svg (limited to 'app/layout') diff --git a/app/Models/Themes.php b/app/Models/Themes.php index ed746b7e9..898595016 100644 --- a/app/Models/Themes.php +++ b/app/Models/Themes.php @@ -85,6 +85,7 @@ class FreshRSS_Themes extends Minz_Model { 'non-starred' => '☆', 'prev' => '⏪', 'read' => '☑', + 'rss' => '0', 'unread' => '☐', 'refresh' => '🔃', //↻ 'search' => '🔍', diff --git a/app/layout/nav_menu.phtml b/app/layout/nav_menu.phtml index 600d6dfa8..67539c747 100644 --- a/app/layout/nav_menu.phtml +++ b/app/layout/nav_menu.phtml @@ -6,10 +6,6 @@ - loginOk || Minz_Configuration::allowAnonymousRefresh()) { ?> - - - loginOk) { ?> url; if ($this->state & FreshRSS_Configuration::STATE_READ) { @@ -214,15 +210,6 @@
  • - -
  • - -
  • - - - - -
  • @@ -247,4 +234,13 @@ + + + + + + + loginOk || Minz_Configuration::allowAnonymousRefresh()) { ?> + + diff --git a/p/themes/Flat/icons/rss.svg b/p/themes/Flat/icons/rss.svg new file mode 100644 index 000000000..4d4faf7ae --- /dev/null +++ b/p/themes/Flat/icons/rss.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/p/themes/icons/rss.svg b/p/themes/icons/rss.svg index 6db5b3eae..2a8713be3 100644 --- a/p/themes/icons/rss.svg +++ b/p/themes/icons/rss.svg @@ -1,5 +1,5 @@ - + -- cgit v1.2.3 From 3a736e902c5af7f215bbf91dc54be00bf82f8df3 Mon Sep 17 00:00:00 2001 From: Alexis Degrugillier Date: Sun, 13 Apr 2014 08:16:43 -0400 Subject: Move state constants from Configuration to Entry --- app/Controllers/importExportController.php | 4 ++-- app/Controllers/indexController.php | 10 +++++----- app/Models/Configuration.php | 10 ++-------- app/Models/Entry.php | 5 +++++ app/Models/EntryDAO.php | 18 +++++++++--------- app/layout/nav_menu.phtml | 24 ++++++++++++------------ app/views/configure/reading.phtml | 4 ++-- p/api/greader.php | 8 ++++---- 8 files changed, 41 insertions(+), 42 deletions(-) (limited to 'app/layout') diff --git a/app/Controllers/importExportController.php b/app/Controllers/importExportController.php index b8253b7bd..3cd791781 100644 --- a/app/Controllers/importExportController.php +++ b/app/Controllers/importExportController.php @@ -370,7 +370,7 @@ class FreshRSS_importExport_Controller extends Minz_ActionController { $this->view->type = 'starred'; $unread_fav = $this->entryDAO->countUnreadReadFavorites(); $this->view->entries = $this->entryDAO->listWhere( - 's', '', FreshRSS_Configuration::STATE_ALL, 'ASC', + 's', '', FreshRSS_Entry::STATE_ALL, 'ASC', $unread_fav['all'] ); } elseif ($type == 'feed' && !is_null($feed)) { @@ -379,7 +379,7 @@ class FreshRSS_importExport_Controller extends Minz_ActionController { ); $this->view->type = 'feed/' . $feed->id(); $this->view->entries = $this->entryDAO->listWhere( - 'f', $feed->id(), FreshRSS_Configuration::STATE_ALL, 'ASC', + 'f', $feed->id(), FreshRSS_Entry::STATE_ALL, 'ASC', $this->view->conf->posts_per_page ); $this->view->feed = $feed; diff --git a/app/Controllers/indexController.php b/app/Controllers/indexController.php index 52dd01e0a..3445c0bd4 100755 --- a/app/Controllers/indexController.php +++ b/app/Controllers/indexController.php @@ -85,13 +85,13 @@ class FreshRSS_index_Controller extends Minz_ActionController { $state_param = Minz_Request::param ('state', null); $filter = Minz_Request::param ('search', ''); if (!empty($filter)) { - $state = FreshRSS_Configuration::STATE_ALL; //Search always in read and unread articles + $state = FreshRSS_Entry::STATE_ALL; //Search always in read and unread articles } $this->view->order = $order = Minz_Request::param ('order', $this->view->conf->sort_order); $nb = Minz_Request::param ('nb', $this->view->conf->posts_per_page); $first = Minz_Request::param ('next', ''); - if ($state === FreshRSS_Configuration::STATE_NOT_READ) { //Any unread article in this category at all? + if ($state === FreshRSS_Entry::STATE_NOT_READ) { //Any unread article in this category at all? switch ($getType) { case 'a': $hasUnread = $this->view->nb_not_read > 0; @@ -112,7 +112,7 @@ class FreshRSS_index_Controller extends Minz_ActionController { break; } if (!$hasUnread && ($state_param === null)) { - $this->view->state = $state = FreshRSS_Configuration::STATE_ALL; + $this->view->state = $state = FreshRSS_Entry::STATE_ALL; } } @@ -129,9 +129,9 @@ class FreshRSS_index_Controller extends Minz_ActionController { // Si on a récupéré aucun article "non lus" // on essaye de récupérer tous les articles - if ($state === FreshRSS_Configuration::STATE_NOT_READ && empty($entries) && ($state_param === null)) { + if ($state === FreshRSS_Entry::STATE_NOT_READ && empty($entries) && ($state_param === null)) { Minz_Log::record ('Conflicting information about nbNotRead!', Minz_Log::DEBUG); - $this->view->state = FreshRSS_Configuration::STATE_ALL; + $this->view->state = FreshRSS_Entry::STATE_ALL; $entries = $entryDAO->listWhere($getType, $getId, $this->view->state, $order, $nb, $first, $filter, $date_min, true, $keepHistoryDefault); } diff --git a/app/Models/Configuration.php b/app/Models/Configuration.php index e693542e0..4b52fa05b 100644 --- a/app/Models/Configuration.php +++ b/app/Models/Configuration.php @@ -1,12 +1,6 @@ '', //CRYPT_BLOWFISH 'posts_per_page' => 20, 'view_mode' => 'normal', - 'default_view' => self::STATE_NOT_READ, + 'default_view' => FreshRSS_Entry::STATE_NOT_READ, 'auto_load_more' => true, 'display_posts' => false, 'onread_jump_next' => true, @@ -137,7 +131,7 @@ class FreshRSS_Configuration { } } public function _default_view ($value) { - $this->data['default_view'] = $value === self::STATE_ALL ? self::STATE_ALL : self::STATE_NOT_READ; + $this->data['default_view'] = $value === FreshRSS_Entry::STATE_ALL ? FreshRSS_Entry::STATE_ALL : FreshRSS_Entry::STATE_NOT_READ; } public function _display_posts ($value) { $this->data['display_posts'] = ((bool)$value) && $value !== 'no'; diff --git a/app/Models/Entry.php b/app/Models/Entry.php index a6c67221b..fa9066d5b 100644 --- a/app/Models/Entry.php +++ b/app/Models/Entry.php @@ -1,6 +1,11 @@ listByType: [' . $type . ']!'); } - if ($state & FreshRSS_Configuration::STATE_NOT_READ) { - if (!($state & FreshRSS_Configuration::STATE_READ)) { + if ($state & FreshRSS_Entry::STATE_NOT_READ) { + if (!($state & FreshRSS_Entry::STATE_READ)) { $where .= 'AND e1.is_read = 0 '; } } - if ($state & FreshRSS_Configuration::STATE_READ) { - if (!($state & FreshRSS_Configuration::STATE_NOT_READ)) { + if ($state & FreshRSS_Entry::STATE_READ) { + if (!($state & FreshRSS_Entry::STATE_NOT_READ)) { $where .= 'AND e1.is_read = 1 '; } } - if ($state & FreshRSS_Configuration::STATE_NOT_FAVORITE) { - if (!($state & FreshRSS_Configuration::STATE_FAVORITE)) { + if ($state & FreshRSS_Entry::STATE_NOT_FAVORITE) { + if (!($state & FreshRSS_Entry::STATE_FAVORITE)) { $where .= 'AND e1.is_favorite = 0 '; } } - if ($state & FreshRSS_Configuration::STATE_FAVORITE) { - if (!($state & FreshRSS_Configuration::STATE_NOT_FAVORITE)) { + if ($state & FreshRSS_Entry::STATE_FAVORITE) { + if (!($state & FreshRSS_Entry::STATE_NOT_FAVORITE)) { $where .= 'AND e1.is_favorite = 1 '; } } diff --git a/app/layout/nav_menu.phtml b/app/layout/nav_menu.phtml index 67539c747..8b1ca1f6f 100644 --- a/app/layout/nav_menu.phtml +++ b/app/layout/nav_menu.phtml @@ -8,11 +8,11 @@ loginOk) { ?> url; - if ($this->state & FreshRSS_Configuration::STATE_READ) { - $url_state['params']['state'] = $this->state - FreshRSS_Configuration::STATE_READ; + if ($this->state & FreshRSS_Entry::STATE_READ) { + $url_state['params']['state'] = $this->state - FreshRSS_Entry::STATE_READ; $checked = 'true'; } else { - $url_state['params']['state'] = $this->state + FreshRSS_Configuration::STATE_READ; + $url_state['params']['state'] = $this->state + FreshRSS_Entry::STATE_READ; $checked = 'false'; } ?> @@ -24,11 +24,11 @@ state & FreshRSS_Configuration::STATE_NOT_READ) { - $url_state['params']['state'] = $this->state - FreshRSS_Configuration::STATE_NOT_READ; + if ($this->state & FreshRSS_Entry::STATE_NOT_READ) { + $url_state['params']['state'] = $this->state - FreshRSS_Entry::STATE_NOT_READ; $checked = 'true'; } else { - $url_state['params']['state'] = $this->state + FreshRSS_Configuration::STATE_NOT_READ; + $url_state['params']['state'] = $this->state + FreshRSS_Entry::STATE_NOT_READ; $checked = 'false'; } ?> @@ -40,11 +40,11 @@ state & FreshRSS_Configuration::STATE_FAVORITE) { - $url_state['params']['state'] = $this->state - FreshRSS_Configuration::STATE_FAVORITE; + if ($this->state & FreshRSS_Entry::STATE_FAVORITE) { + $url_state['params']['state'] = $this->state - FreshRSS_Entry::STATE_FAVORITE; $checked = 'true'; } else { - $url_state['params']['state'] = $this->state + FreshRSS_Configuration::STATE_FAVORITE; + $url_state['params']['state'] = $this->state + FreshRSS_Entry::STATE_FAVORITE; $checked = 'false'; } ?> @@ -56,11 +56,11 @@ state & FreshRSS_Configuration::STATE_NOT_FAVORITE) { - $url_state['params']['state'] = $this->state - FreshRSS_Configuration::STATE_NOT_FAVORITE; + if ($this->state & FreshRSS_Entry::STATE_NOT_FAVORITE) { + $url_state['params']['state'] = $this->state - FreshRSS_Entry::STATE_NOT_FAVORITE; $checked = 'true'; } else { - $url_state['params']['state'] = $this->state + FreshRSS_Configuration::STATE_NOT_FAVORITE; + $url_state['params']['state'] = $this->state + FreshRSS_Entry::STATE_NOT_FAVORITE; $checked = 'false'; } ?> diff --git a/app/views/configure/reading.phtml b/app/views/configure/reading.phtml index b277397b1..456ab9522 100644 --- a/app/views/configure/reading.phtml +++ b/app/views/configure/reading.phtml @@ -32,11 +32,11 @@ diff --git a/p/api/greader.php b/p/api/greader.php index 9836f2f02..8a8623966 100644 --- a/p/api/greader.php +++ b/p/api/greader.php @@ -353,10 +353,10 @@ function streamContents($path, $include_target, $start_time, $count, $order, $ex switch ($exclude_target) { case 'user/-/state/com.google/read': - $state = FreshRSS_Configuration::STATE_NOT_READ; + $state = FreshRSS_Entry::STATE_NOT_READ; break; default: - $state = FreshRSS_Configuration::STATE_ALL; + $state = FreshRSS_Entry::STATE_ALL; break; } @@ -451,10 +451,10 @@ function streamContentsItemsIds($streamId, $start_time, $count, $order, $exclude switch ($exclude_target) { case 'user/-/state/com.google/read': - $state = FreshRSS_Configuration::STATE_NOT_READ; + $state = FreshRSS_Entry::STATE_NOT_READ; break; default: - $state = FreshRSS_Configuration::STATE_ALL; + $state = FreshRSS_Entry::STATE_ALL; break; } -- cgit v1.2.3 From 245c71ebe561aa70f674ed467f7bd169ca5a55d2 Mon Sep 17 00:00:00 2001 From: Alexis Degrugillier Date: Sun, 13 Apr 2014 16:50:29 -0400 Subject: Add active class on filter buttons --- app/layout/nav_menu.phtml | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'app/layout') diff --git a/app/layout/nav_menu.phtml b/app/layout/nav_menu.phtml index 8b1ca1f6f..b316b090b 100644 --- a/app/layout/nav_menu.phtml +++ b/app/layout/nav_menu.phtml @@ -11,13 +11,15 @@ if ($this->state & FreshRSS_Entry::STATE_READ) { $url_state['params']['state'] = $this->state - FreshRSS_Entry::STATE_READ; $checked = 'true'; + $class = 'active'; } else { $url_state['params']['state'] = $this->state + FreshRSS_Entry::STATE_READ; $checked = 'false'; + $class = ''; } ?> @@ -27,13 +29,15 @@ if ($this->state & FreshRSS_Entry::STATE_NOT_READ) { $url_state['params']['state'] = $this->state - FreshRSS_Entry::STATE_NOT_READ; $checked = 'true'; + $class = 'active'; } else { $url_state['params']['state'] = $this->state + FreshRSS_Entry::STATE_NOT_READ; $checked = 'false'; + $class = ''; } ?> @@ -43,13 +47,15 @@ if ($this->state & FreshRSS_Entry::STATE_FAVORITE) { $url_state['params']['state'] = $this->state - FreshRSS_Entry::STATE_FAVORITE; $checked = 'true'; + $class = 'active'; } else { $url_state['params']['state'] = $this->state + FreshRSS_Entry::STATE_FAVORITE; $checked = 'false'; + $class = ''; } ?> @@ -59,13 +65,15 @@ if ($this->state & FreshRSS_Entry::STATE_NOT_FAVORITE) { $url_state['params']['state'] = $this->state - FreshRSS_Entry::STATE_NOT_FAVORITE; $checked = 'true'; + $class = 'active'; } else { $url_state['params']['state'] = $this->state + FreshRSS_Entry::STATE_NOT_FAVORITE; $checked = 'false'; + $class = ''; } ?> -- cgit v1.2.3 From dd1055c35de6f50eaf3e229ddc79ab8edcbc22db Mon Sep 17 00:00:00 2001 From: Alexis Degrugillier Date: Sun, 13 Apr 2014 17:05:16 -0400 Subject: Add sort button --- app/layout/nav_menu.phtml | 38 +++++++++++++++++--------------------- 1 file changed, 17 insertions(+), 21 deletions(-) (limited to 'app/layout') diff --git a/app/layout/nav_menu.phtml b/app/layout/nav_menu.phtml index b316b090b..eaa564023 100644 --- a/app/layout/nav_menu.phtml +++ b/app/layout/nav_menu.phtml @@ -197,27 +197,6 @@ - -
  • - -
  • - url; - if ($this->order === 'DESC') { - $url_order['params']['order'] = 'ASC'; - ?> - - - - - - - - -
  • @@ -243,6 +222,23 @@ + order === 'DESC') { + $order = 'ASC'; + $icon = 'up'; + $title = 'older_first'; + } else { + $order = 'DESC'; + $icon = 'down'; + $title = 'newer_first'; + } + $url_order = $this->url; + $url_order['params']['order'] = $order; + ?> + + + + -- cgit v1.2.3 From 6323311cb4f2c89c695feb747566a05b5cb8044a Mon Sep 17 00:00:00 2001 From: Alexis Degrugillier Date: Sun, 13 Apr 2014 18:06:11 -0400 Subject: Add div.stick to collapse button space --- app/layout/nav_menu.phtml | 124 +++++++++++++++++++++++----------------------- 1 file changed, 63 insertions(+), 61 deletions(-) (limited to 'app/layout') diff --git a/app/layout/nav_menu.phtml b/app/layout/nav_menu.phtml index eaa564023..58e561754 100644 --- a/app/layout/nav_menu.phtml +++ b/app/layout/nav_menu.phtml @@ -18,67 +18,69 @@ $class = ''; } ?> - - - - state & FreshRSS_Entry::STATE_NOT_READ) { - $url_state['params']['state'] = $this->state - FreshRSS_Entry::STATE_NOT_READ; - $checked = 'true'; - $class = 'active'; - } else { - $url_state['params']['state'] = $this->state + FreshRSS_Entry::STATE_NOT_READ; - $checked = 'false'; - $class = ''; - } - ?> - - - - state & FreshRSS_Entry::STATE_FAVORITE) { - $url_state['params']['state'] = $this->state - FreshRSS_Entry::STATE_FAVORITE; - $checked = 'true'; - $class = 'active'; - } else { - $url_state['params']['state'] = $this->state + FreshRSS_Entry::STATE_FAVORITE; - $checked = 'false'; - $class = ''; - } - ?> - - - - state & FreshRSS_Entry::STATE_NOT_FAVORITE) { - $url_state['params']['state'] = $this->state - FreshRSS_Entry::STATE_NOT_FAVORITE; - $checked = 'true'; - $class = 'active'; - } else { - $url_state['params']['state'] = $this->state + FreshRSS_Entry::STATE_NOT_FAVORITE; - $checked = 'false'; - $class = ''; - } - ?> - - - +
    + + + + state & FreshRSS_Entry::STATE_NOT_READ) { + $url_state['params']['state'] = $this->state - FreshRSS_Entry::STATE_NOT_READ; + $checked = 'true'; + $class = 'active'; + } else { + $url_state['params']['state'] = $this->state + FreshRSS_Entry::STATE_NOT_READ; + $checked = 'false'; + $class = ''; + } + ?> + + + + state & FreshRSS_Entry::STATE_FAVORITE) { + $url_state['params']['state'] = $this->state - FreshRSS_Entry::STATE_FAVORITE; + $checked = 'true'; + $class = 'active'; + } else { + $url_state['params']['state'] = $this->state + FreshRSS_Entry::STATE_FAVORITE; + $checked = 'false'; + $class = ''; + } + ?> + + + + state & FreshRSS_Entry::STATE_NOT_FAVORITE) { + $url_state['params']['state'] = $this->state - FreshRSS_Entry::STATE_NOT_FAVORITE; + $checked = 'true'; + $class = 'active'; + } else { + $url_state['params']['state'] = $this->state + FreshRSS_Entry::STATE_NOT_FAVORITE; + $checked = 'false'; + $class = ''; + } + ?> + + + +
    Date: Mon, 14 Apr 2014 18:34:24 -0400 Subject: Revert delete favorite button --- app/i18n/en.php | 1 + app/i18n/fr.php | 1 + app/layout/aside_flux.phtml | 9 +++++++++ 3 files changed, 11 insertions(+) (limited to 'app/layout') diff --git a/app/i18n/en.php b/app/i18n/en.php index 01f31eca7..b41fb4281 100644 --- a/app/i18n/en.php +++ b/app/i18n/en.php @@ -27,6 +27,7 @@ return array ( 'subscription_management' => 'Subscriptions management', 'main_stream' => 'Main stream', 'all_feeds' => 'All feeds', + 'favorite_feeds' => 'Favourites (%d)', 'not_read' => '%d unread', 'not_reads' => '%d unread', diff --git a/app/i18n/fr.php b/app/i18n/fr.php index 299d4d242..e7d61f313 100644 --- a/app/i18n/fr.php +++ b/app/i18n/fr.php @@ -27,6 +27,7 @@ return array ( 'subscription_management' => 'Gestion des abonnements', 'main_stream' => 'Flux principal', 'all_feeds' => 'Tous les flux', + 'favorite_feeds' => 'Favoris (%d)', 'not_read' => '%d non lu', 'not_reads' => '%d non lus', diff --git a/app/layout/aside_flux.phtml b/app/layout/aside_flux.phtml index 0542e6b66..817dae676 100644 --- a/app/layout/aside_flux.phtml +++ b/app/layout/aside_flux.phtml @@ -28,6 +28,15 @@ +
  • + +
  • + cat_aside as $cat) { $feeds = $cat->feeds (); -- cgit v1.2.3