From 9e219cbf5014c8f4f52f3ca6722f7a20cdcc13dd Mon Sep 17 00:00:00 2001 From: Marien Fressinaud Date: Sun, 12 May 2013 19:21:39 +0200 Subject: Fix issue #70 : lorsqu'on rencontre un problème avec un flux, on l'indique à l'utilisateur (couleur rouge) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/layout/aside_feed.phtml | 2 +- app/layout/aside_flux.phtml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'app/layout') diff --git a/app/layout/aside_feed.phtml b/app/layout/aside_feed.phtml index 158f012d0..4c56d12fc 100644 --- a/app/layout/aside_feed.phtml +++ b/app/layout/aside_feed.phtml @@ -43,7 +43,7 @@ feeds)) { ?> feeds as $feed) { ?> -
  • +
  • name (); ?> diff --git a/app/layout/aside_flux.phtml b/app/layout/aside_flux.phtml index d1fe6b759..449ffaff4 100644 --- a/app/layout/aside_flux.phtml +++ b/app/layout/aside_flux.phtml @@ -62,7 +62,7 @@ diff --git a/app/models/Log.php b/app/models/Log.php new file mode 100644 index 000000000..5c280fa7a --- /dev/null +++ b/app/models/Log.php @@ -0,0 +1,47 @@ +date; + } + public function level () { + return $this->level; + } + public function info () { + return $this->information; + } + public function _date ($date) { + $this->date = $date; + } + public function _level ($level) { + $this->level = $level; + } + public function _info ($information) { + $this->information = $information; + } +} + +class LogDAO extends Model_txt { + public function __construct () { + parent::__construct (LOG_PATH . '/application.log', 'r+'); + } + + public function lister () { + $logs = array (); + + $i = 0; + while (($line = $this->readLine ()) !== false) { + $logs[$i] = new Log_Model (); + $logs[$i]->_date (preg_replace ("'\[(.*?)\] \[(.*?)\] --- (.*?)'U", "\\1", $line)); + $logs[$i]->_level (preg_replace ("'\[(.*?)\] \[(.*?)\] --- (.*?)'U", "\\2", $line)); + $logs[$i]->_info (preg_replace ("'\[(.*?)\] \[(.*?)\] --- (.*?)'U", "\\3", $line)); + $i++; + } + + return $logs; + } +} \ No newline at end of file diff --git a/app/views/helpers/logs_pagination.phtml b/app/views/helpers/logs_pagination.phtml new file mode 100755 index 000000000..0088dabc6 --- /dev/null +++ b/app/views/helpers/logs_pagination.phtml @@ -0,0 +1,47 @@ + + +nbPage > 1) { ?> + + diff --git a/app/views/index/logs.phtml b/app/views/index/logs.phtml new file mode 100644 index 000000000..c72a84c86 --- /dev/null +++ b/app/views/index/logs.phtml @@ -0,0 +1,21 @@ +
    + + +

    + + logsPaginator->items (); ?> + + +
    + logsPaginator->render ('logs_pagination.phtml', 'page'); ?> + + +
    date ())); ?>info (); ?>
    + + + logsPaginator->render ('logs_pagination.phtml','page'); ?> +
    + +

    + +
    \ No newline at end of file diff --git a/lib/minz/View.php b/lib/minz/View.php index 5c329c159..2bb747aa9 100755 --- a/lib/minz/View.php +++ b/lib/minz/View.php @@ -71,7 +71,7 @@ class View { } else { Log::record ('File doesn\'t exist : `' . $this->view_filename . '`', - Log::WARNING); + Log::NOTICE); } } diff --git a/lib/minz/dao/Model_txt.php b/lib/minz/dao/Model_txt.php index ad15c8b36..c9d5cfe77 100755 --- a/lib/minz/dao/Model_txt.php +++ b/lib/minz/dao/Model_txt.php @@ -27,7 +27,7 @@ class Model_txt { */ public function __construct ($nameFile, $mode = 'a+') { $this->filename = $nameFile; - $this->file = fopen ($this->filename, $mode); + $this->file = @fopen ($this->filename, $mode); if (!$this->file) { throw new FileNotExistException ( diff --git a/public/theme/freshrss.css b/public/theme/freshrss.css index f5d4f6a83..4919639af 100644 --- a/public/theme/freshrss.css +++ b/public/theme/freshrss.css @@ -349,14 +349,29 @@ } .pagination .item { display: table-cell; - border-top: 1px solid #aaa; line-height: 40px; } + .pagination .item.pager-current { + font-weight: bold; + font-size: 140%; + } + .pagination .item.pager-first, + .pagination .item.pager-previous, + .pagination .item.pager-next, + .pagination .item.pager-last { + width: 100px; + } .pagination .item a { display: block; color: #333; font-style: italic; } + .pagination:first-child .item { + border-bottom: 1px solid #aaa; + } + .pagination:last-child .item { + border-top: 1px solid #aaa; + } .loading { background: url("loader.gif") center center no-repeat; font-size: 0; @@ -421,6 +436,33 @@ vertical-align: middle; } +.logs { + border: 1px solid #aaa; +} + .logs .log { + padding: 5px 2%; + overflow: auto; + background: #fafafa; + border-bottom: 1px solid #999; + color: #333; + font-size: 90%; + } + .logs .log .date { + display: block; + } + .logs .log.error { + background: #fdd; + color: #844; + } + .logs .log.warning { + background: #ffe; + color: #c95; + } + .logs .log.notice { + background: #f4f4f4; + color: #aaa; + } + @media(max-width: 840px) { .header, .aside .btn-important, -- cgit v1.2.3 From d3078fb726639eed478a2a449b0a9043af04a756 Mon Sep 17 00:00:00 2001 From: Marien Fressinaud Date: Sat, 15 Jun 2013 19:42:02 +0200 Subject: Mise en place de la structure pour les différentes vues MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/i18n/en.php | 3 + app/i18n/fr.php | 3 + app/layout/nav_menu.phtml | 67 +++++++++++++------ app/views/helpers/global_view.phtml | 5 ++ app/views/helpers/normal_view.phtml | 114 ++++++++++++++++++++++++++++++++ app/views/helpers/reader_view.phtml | 5 ++ app/views/helpers/rss.phtml | 30 --------- app/views/helpers/rss_view.phtml | 30 +++++++++ app/views/index/index.phtml | 128 ++---------------------------------- lib/lib_text.php | 8 +++ public/theme/freshrss.css | 7 +- 11 files changed, 228 insertions(+), 172 deletions(-) create mode 100644 app/views/helpers/global_view.phtml create mode 100644 app/views/helpers/normal_view.phtml create mode 100644 app/views/helpers/reader_view.phtml delete mode 100755 app/views/helpers/rss.phtml create mode 100755 app/views/helpers/rss_view.phtml (limited to 'app/layout') diff --git a/app/i18n/en.php b/app/i18n/en.php index e40be045a..4dbfde715 100644 --- a/app/i18n/en.php +++ b/app/i18n/en.php @@ -37,6 +37,9 @@ return array ( 'before_one_day' => 'Before one day', 'before_one_week' => 'Before one week', 'display' => 'Display', + 'normal_view' => 'Normal view', + 'reader_view' => 'Reading view', + 'global_view' => 'Global view', 'show_all_articles' => 'Show all articles', 'show_not_reads' => 'Show only unread', 'older_first' => 'Oldest first', diff --git a/app/i18n/fr.php b/app/i18n/fr.php index 69c7a8ffe..7a58b984c 100644 --- a/app/i18n/fr.php +++ b/app/i18n/fr.php @@ -37,6 +37,9 @@ return array ( 'before_one_day' => 'Antérieurs à 1 jour', 'before_one_week' => 'Antérieurs à 1 semaine', 'display' => 'Affichage', + 'normal_view' => 'Vue normale', + 'reader_view' => 'Vue lecture', + 'global_view' => 'Vue globale', 'show_all_articles' => 'Afficher tous les articles', 'show_not_reads' => 'Afficher les non lus', 'older_first' => 'Plus anciens en premier', diff --git a/app/layout/nav_menu.phtml b/app/layout/nav_menu.phtml index 3411f344b..dbe597985 100644 --- a/app/layout/nav_menu.phtml +++ b/app/layout/nav_menu.phtml @@ -59,43 +59,72 @@ diff --git a/app/views/helpers/global_view.phtml b/app/views/helpers/global_view.phtml new file mode 100644 index 000000000..b666fe620 --- /dev/null +++ b/app/views/helpers/global_view.phtml @@ -0,0 +1,5 @@ +partial ('nav_menu'); +?> + +Non implémenté \ No newline at end of file diff --git a/app/views/helpers/normal_view.phtml b/app/views/helpers/normal_view.phtml new file mode 100644 index 000000000..515084047 --- /dev/null +++ b/app/views/helpers/normal_view.phtml @@ -0,0 +1,114 @@ +partial ('aside_flux'); +$this->partial ('nav_menu'); + +if (isset ($this->entryPaginator) && !$this->entryPaginator->isEmpty ()) { + $items = $this->entryPaginator->items (); +?> + +
    + + + + isDay (Days::TODAY)) { ?> +
    -
    + + isDay (Days::YESTERDAY)) { ?> +
    -
    + + isDay (Days::BEFORE_YESTERDAY)) { ?> +
    + + +
    +
      + conf) || is_logged ()) { ?> +
    • + isRead ()) { ?> +   + +   + + + isFavorite ()) { ?> +   + +   + +
    • + + feed (true); ?> +
    • name (); ?>
    • +
    • title (); ?>
    • +
    • date (); ?>
    • + +
    + +
    +
    +

    title (); ?>

    + author (); ?> + ' . Translate::t ('by_author', $author) . '
    ' : ''; ?> + conf->lazyload() == 'yes') { + echo lazyimg($item->content ()); + } else { + echo $item->content(); + } + ?> +
    + +
      +
    • + +
    • + tags(); ?> + +
    • + +
    • + +
    +
    +
    + + + entryPaginator->render ('pagination.phtml', 'next'); ?> + + + +
    + +
    + \ No newline at end of file diff --git a/app/views/helpers/reader_view.phtml b/app/views/helpers/reader_view.phtml new file mode 100644 index 000000000..b666fe620 --- /dev/null +++ b/app/views/helpers/reader_view.phtml @@ -0,0 +1,5 @@ +partial ('nav_menu'); +?> + +Non implémenté \ No newline at end of file diff --git a/app/views/helpers/rss.phtml b/app/views/helpers/rss.phtml deleted file mode 100755 index 83de6de2e..000000000 --- a/app/views/helpers/rss.phtml +++ /dev/null @@ -1,30 +0,0 @@ -'; ?> - - - <?php echo View::title(); ?> - - - - GMT - -entryPaginator->items (); -foreach ($items as $item) { -?> - - <?php echo htmlspecialchars(html_entity_decode($item->title ())); ?> - link (); ?> - author (); ?> - - - - content (); -?>]]> - date (true)); ?> - id (); ?> - - - - - diff --git a/app/views/helpers/rss_view.phtml b/app/views/helpers/rss_view.phtml new file mode 100755 index 000000000..83de6de2e --- /dev/null +++ b/app/views/helpers/rss_view.phtml @@ -0,0 +1,30 @@ +'; ?> + + + <?php echo View::title(); ?> + + + + GMT + +entryPaginator->items (); +foreach ($items as $item) { +?> + + <?php echo htmlspecialchars(html_entity_decode($item->title ())); ?> + link (); ?> + author (); ?> + + + + content (); +?>]]> + date (true)); ?> + id (); ?> + + + + + diff --git a/app/views/index/index.phtml b/app/views/index/index.phtml index 30df591eb..46ff33b3a 100644 --- a/app/views/index/index.phtml +++ b/app/views/index/index.phtml @@ -1,127 +1,13 @@ /i', - '', - $content - ); -} $output = Request::param ('output', 'normal'); if ($output == 'rss') { - $this->renderHelper ('rss'); + $this->renderHelper ('rss_view'); +} elseif($output == 'reader') { + $this->renderHelper ('reader_view'); +} elseif($output == 'global') { + $this->renderHelper ('global_view'); } else { - $this->partial ('aside_flux'); - $this->partial ('nav_menu'); - - if (isset ($this->entryPaginator) && !$this->entryPaginator->isEmpty ()) { - $items = $this->entryPaginator->items (); -?> - -
    - - - - isDay (Days::TODAY)) { ?> -
    -
    - - isDay (Days::YESTERDAY)) { ?> -
    -
    - - isDay (Days::BEFORE_YESTERDAY)) { ?> -
    - - -
    -
      - conf) || is_logged ()) { ?> -
    • - isRead ()) { ?> -   - -   - - - isFavorite ()) { ?> -   - -   - -
    • - - feed (true); ?> -
    • name (); ?>
    • -
    • title (); ?>
    • -
    • date (); ?>
    • - -
    - -
    -
    -

    title (); ?>

    - author (); ?> - ' . Translate::t ('by_author', $author) . '
    ' : ''; ?> - conf->lazyload() == 'yes') { - echo lazyimg($item->content ()); - } else { - echo $item->content(); - } - ?> -
    - -
      -
    • - -
    • - tags(); ?> - -
    • - -
    • - -
    -
    -
    - - - entryPaginator->render ('pagination.phtml', 'next'); ?> - - - -
    - -
    - - + $this->renderHelper ('normal_view'); +} \ No newline at end of file diff --git a/lib/lib_text.php b/lib/lib_text.php index 6e8f7b2bf..9792e191e 100644 --- a/lib/lib_text.php +++ b/lib/lib_text.php @@ -86,3 +86,11 @@ function parse_tags ($desc) { return $desc_parse; } + +function lazyimg($content) { + return preg_replace( + '//i', + '', + $content + ); +} \ No newline at end of file diff --git a/public/theme/freshrss.css b/public/theme/freshrss.css index 636f9e09d..26bb21d8f 100644 --- a/public/theme/freshrss.css +++ b/public/theme/freshrss.css @@ -245,11 +245,10 @@ line-height: 40px; } .flux_header .item.website .favicon { - padding: 12px; + padding: 5px; } .flux_header .item.website a { display: block; - padding: 0; height: 40px; } .flux_header .item.title { @@ -293,6 +292,7 @@ padding: 20px 10px; line-height: 170%; font-family: 'OpenSans'; + word-wrap: break-word; } .content .title { margin: 0 0 5px; @@ -480,6 +480,9 @@ width: 40px; text-align: center; } + .flux_header .item.website .favicon { + padding: 12px; + } .content { font-size: 120%; -- cgit v1.2.3 From e3b3fa39d8b51bb571d2d15dafcfc94d4ab28787 Mon Sep 17 00:00:00 2001 From: Marien Fressinaud Date: Sat, 15 Jun 2013 20:14:13 +0200 Subject: Première version de la vue lecture (issue #67) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/layout/nav_menu.phtml | 2 +- app/views/helpers/reader_view.phtml | 43 +++++++++++++++++++++++++++++++++++-- app/views/javascript/main.phtml | 2 +- public/theme/freshrss.css | 12 +++++++++++ 4 files changed, 55 insertions(+), 4 deletions(-) (limited to 'app/layout') diff --git a/app/layout/nav_menu.phtml b/app/layout/nav_menu.phtml index dbe597985..d36814bee 100644 --- a/app/layout/nav_menu.phtml +++ b/app/layout/nav_menu.phtml @@ -61,7 +61,7 @@
  • diff --git a/app/views/helpers/reader_view.phtml b/app/views/helpers/reader_view.phtml index b666fe620..f702a4b91 100644 --- a/app/views/helpers/reader_view.phtml +++ b/app/views/helpers/reader_view.phtml @@ -1,5 +1,44 @@ partial ('nav_menu'); + +if (isset ($this->entryPaginator) && !$this->entryPaginator->isEmpty ()) { + $items = $this->entryPaginator->items (); ?> -Non implémenté \ No newline at end of file +
    + + +
    +
    +
    + feed (true); ?> + + name (); ?> + +

    title (); ?>

    + +
    + author (); ?> + + date (); ?> +
    + + conf->lazyload() == 'yes') { + echo lazyimg($item->content ()); + } else { + echo $item->content(); + } + ?> +
    +
    +
    + + + entryPaginator->render ('pagination.phtml', 'next'); ?> +
    + + +
    + +
    + \ No newline at end of file diff --git a/app/views/javascript/main.phtml b/app/views/javascript/main.phtml index 28bb0dfd9..5b325ac8d 100644 --- a/app/views/javascript/main.phtml +++ b/app/views/javascript/main.phtml @@ -117,7 +117,7 @@ function init_posts () { if (hide_posts) { - $(".flux:not(.active) .flux_content").hide (); + $("#stream:not(.reader) .flux:not(.active) .flux_content").hide (); } $(".flux_header .item.title, .flux_header .item.date").click (function () { diff --git a/public/theme/freshrss.css b/public/theme/freshrss.css index 26bb21d8f..60498ad5b 100644 --- a/public/theme/freshrss.css +++ b/public/theme/freshrss.css @@ -286,6 +286,18 @@ text-decoration: none; } +#stream.reader .flux { + padding: 0 0 30px; + border: none; + background: #f0f0f0; + color: #333; +} + #stream.reader .flux .author { + margin: 0 0 10px; + font-size: 90%; + color: #666; + } + .content { max-width: 550px; margin: 0 auto; -- cgit v1.2.3 From dff85f9a304a6ff2ede764a8f62024e7b4ff074e Mon Sep 17 00:00:00 2001 From: Marien Fressinaud Date: Sun, 23 Jun 2013 15:05:39 +0200 Subject: Ajout d'une barre de navigation en version mobile MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix issue #57 : pas d'effet de slide (effet trop bling-bling) mais ajout d'une barre de navigation permettant d'aller à l'article suivant / précédent ou de remonter en haut de la page --- app/layout/nav_entries.phtml | 5 +++ app/views/helpers/normal_view.phtml | 2 ++ app/views/javascript/main.phtml | 64 ++++++++++++++++++++++-------------- public/theme/freshrss.css | 33 +++++++++++++++++++ public/theme/global.css | 8 +++++ public/theme/icons/next.png | Bin 0 -> 373 bytes public/theme/icons/next.svg | 31 +++++++++++++++++ public/theme/icons/previous.png | Bin 0 -> 395 bytes public/theme/icons/previous.svg | 31 +++++++++++++++++ 9 files changed, 150 insertions(+), 24 deletions(-) create mode 100644 app/layout/nav_entries.phtml create mode 100644 public/theme/icons/next.png create mode 100644 public/theme/icons/next.svg create mode 100644 public/theme/icons/previous.png create mode 100644 public/theme/icons/previous.svg (limited to 'app/layout') diff --git a/app/layout/nav_entries.phtml b/app/layout/nav_entries.phtml new file mode 100644 index 000000000..101e7443e --- /dev/null +++ b/app/layout/nav_entries.phtml @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/app/views/helpers/normal_view.phtml b/app/views/helpers/normal_view.phtml index 2ca365552..eaf1e4276 100644 --- a/app/views/helpers/normal_view.phtml +++ b/app/views/helpers/normal_view.phtml @@ -107,6 +107,8 @@ if (isset ($this->entryPaginator) && !$this->entryPaginator->isEmpty ()) { entryPaginator->render ('pagination.phtml', 'next'); ?> +partial ('nav_entries'); ?> +
    diff --git a/app/views/javascript/main.phtml b/app/views/javascript/main.phtml index e290e02d3..e51cf978e 100644 --- a/app/views/javascript/main.phtml +++ b/app/views/javascript/main.phtml @@ -105,6 +105,32 @@ function mark_favorite (active) { }); } +function prev_entry() { + old_active = $(".flux.active"); + last_active = $(".flux:last"); + new_active = old_active.prevAll (".flux:first"); + + if (new_active.hasClass("flux")) { + toggleContent (new_active, old_active); + } else if (old_active[0] === undefined && + new_active[0] === undefined) { + toggleContent (last_active, old_active); + } +} + +function next_entry() { + old_active = $(".flux.active"); + first_active = $(".flux:first"); + new_active = old_active.nextAll (".flux:first"); + + if (new_active.hasClass("flux")) { + toggleContent (new_active, old_active); + } else if (old_active[0] === undefined && + new_active[0] === undefined) { + toggleContent (first_active, old_active); + } +} + function init_img () { $(".flux_content .content img").each (function () { if ($(this).width () > ($(".flux_content .content").width()) / 2) { @@ -206,18 +232,7 @@ function init_shortcuts () { }); // Touches de navigation - shortcut.add("", function () { - old_active = $(".flux.active"); - last_active = $(".flux:last"); - new_active = old_active.prevAll (".flux:first"); - - if (new_active.hasClass("flux")) { - toggleContent (new_active, old_active); - } else if (old_active[0] === undefined && - new_active[0] === undefined) { - toggleContent (last_active, old_active); - } - }, { + shortcut.add("", prev_entry, { 'disable_in_input':true }); shortcut.add("shift+", function () { @@ -230,18 +245,7 @@ function init_shortcuts () { }, { 'disable_in_input':true }); - shortcut.add("", function () { - old_active = $(".flux.active"); - first_active = $(".flux:first"); - new_active = old_active.nextAll (".flux:first"); - - if (new_active.hasClass("flux")) { - toggleContent (new_active, old_active); - } else if (old_active[0] === undefined && - new_active[0] === undefined) { - toggleContent (first_active, old_active); - } - }, { + shortcut.add("", next_entry, { 'disable_in_input':true }); shortcut.add("shift+", function () { @@ -281,6 +285,17 @@ function init_shortcuts () { }); } +function init_nav_entries() { + $('.nav_entries a.previous_entry').click(function() { + prev_entry(); + return false; + }); + $('.nav_entries a.next_entry').click(function() { + next_entry(); + return false; + }); +} + $(document).ready (function () { if(is_reader_mode()) { hide_posts = false; @@ -288,4 +303,5 @@ $(document).ready (function () { init_posts (); init_column_categories (); init_shortcuts (); + init_nav_entries(); }); diff --git a/public/theme/freshrss.css b/public/theme/freshrss.css index 613a6f037..178472ac9 100644 --- a/public/theme/freshrss.css +++ b/public/theme/freshrss.css @@ -426,6 +426,11 @@ .pagination:last-child .item { border-top: 1px solid #aaa; } + +.nav_entries { + display: none; +} + .loading { background: url("loader.gif") center center no-repeat; font-size: 0; @@ -538,6 +543,9 @@ font-size: 120%; } + .pagination { + margin: 0 0 40px; + } .pagination .pager-previous, .pagination .pager-next { width: 100px; } @@ -574,4 +582,29 @@ .aside .categories { margin: 30px 0; } + + .nav_entries { + display: table; + width: 100%; + height: 40px; + position: fixed; + bottom: 0; + margin: 0; + background: #fff; + border-top: 1px solid #ddd; + text-align: center; + line-height: 40px; + table-layout: fixed; + } + .nav_entries .item { + display: table-cell; + width: 30%; + } + .nav_entries .item a { + display: block; + } + .nav_entries .item .icon.i_up { + margin: 5px 0 0; + vertical-align: top; + } } diff --git a/public/theme/global.css b/public/theme/global.css index 4c504db63..b1fd01436 100644 --- a/public/theme/global.css +++ b/public/theme/global.css @@ -517,6 +517,14 @@ input, select, textarea { background-image: url("icons/up.png"); background-image: url("icons/up.svg"); } + .icon.i_next { + background-image: url("icons/next.png"); + background-image: url("icons/next.svg"); + } + .icon.i_prev { + background-image: url("icons/previous.png"); + background-image: url("icons/previous.svg"); + } .icon.i_help { background-image: url("icons/help.png"); background-image: url("icons/help.svg"); diff --git a/public/theme/icons/next.png b/public/theme/icons/next.png new file mode 100644 index 000000000..ab3490c3b Binary files /dev/null and b/public/theme/icons/next.png differ diff --git a/public/theme/icons/next.svg b/public/theme/icons/next.svg new file mode 100644 index 000000000..72637b4e6 --- /dev/null +++ b/public/theme/icons/next.svg @@ -0,0 +1,31 @@ + + + + + + + + image/svg+xml + + Gnome Symbolic Icon Theme + + + + + + + Gnome Symbolic Icon Theme + + + + + + + + + + + + + + diff --git a/public/theme/icons/previous.png b/public/theme/icons/previous.png new file mode 100644 index 000000000..10e40669e Binary files /dev/null and b/public/theme/icons/previous.png differ diff --git a/public/theme/icons/previous.svg b/public/theme/icons/previous.svg new file mode 100644 index 000000000..67685c50c --- /dev/null +++ b/public/theme/icons/previous.svg @@ -0,0 +1,31 @@ + + + + + + + + image/svg+xml + + Gnome Symbolic Icon Theme + + + + + + + Gnome Symbolic Icon Theme + + + + + + + + + + + + + + -- cgit v1.2.3