]> git.immae.eu Git - github/wallabag/wallabag.git/commitdiff
Merge branch 'dev' into register
authorThomas Citharel <tcit@tcit.fr>
Fri, 13 Feb 2015 18:15:31 +0000 (19:15 +0100)
committerThomas Citharel <tcit@tcit.fr>
Fri, 13 Feb 2015 18:15:31 +0000 (19:15 +0100)
41 files changed:
inc/3rdparty/site_config/standard/gist.github.com.txt
inc/3rdparty/site_config/standard/jungle-world.com.txt [new file with mode: 0644]
inc/3rdparty/site_config/standard/toolinux.com.txt [new file with mode: 0755]
inc/poche/Database.class.php
inc/poche/Poche.class.php
inc/poche/Routing.class.php
inc/poche/WallabagEBooks.class.php
inc/poche/config.inc.default.php
install/index.php
install/install_functions.php [new file with mode: 0644]
install/wallabag_compatibility_test.php [deleted file]
locale/de_DE.utf8/LC_MESSAGES/de_DE.utf8.mo
locale/de_DE.utf8/LC_MESSAGES/de_DE.utf8.po
locale/en_GB.utf8/LC_MESSAGES/en_GB.utf8.mo [new file with mode: 0644]
locale/en_GB.utf8/LC_MESSAGES/en_GB.utf8.po [new file with mode: 0644]
locale/en_US.utf8/LC_MESSAGES/en_US.utf8.mo
locale/en_US.utf8/LC_MESSAGES/en_US.utf8.po
locale/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.mo
locale/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.po
themes/_global/img/icons/evernote-icon--black.svg [new file with mode: 0644]
themes/_global/js/saveLink.js
themes/baggy/_pocheit-form.twig
themes/baggy/about.twig
themes/baggy/config.twig
themes/baggy/css/main.css
themes/baggy/fonts/icomoon.eot
themes/baggy/fonts/icomoon.svg
themes/baggy/fonts/icomoon.ttf
themes/baggy/fonts/icomoon.woff
themes/baggy/home.twig
themes/baggy/view.twig
themes/default/_pocheit-form.twig
themes/default/about.twig
themes/default/config.twig
themes/default/css/style-default.css
themes/default/css/style.css
themes/default/home.twig
themes/default/img/default/dice.png [new file with mode: 0644]
themes/default/img/default/reload.png [new file with mode: 0644]
themes/default/img/default/tags.png [new file with mode: 0644]
themes/default/view.twig

index 902078627e3a0fb140ef334840e710d21edb71c6..f11b7b426d3e01591d0f9832c09f099e31ad5e3e 100755 (executable)
@@ -1,6 +1,4 @@
-body: //div[@class="highlight"]/pre
 
-prune: no
-tidy: no
-
-test_url: https://gist.github.com/1258908
\ No newline at end of file
+title: //div[contains(@class,'gist-description')]
+body: //div[contains(@class,'blob-wrapper')]
+test_url: https://gist.github.com/staltz/868e7e9bc2a7b8c1f754
diff --git a/inc/3rdparty/site_config/standard/jungle-world.com.txt b/inc/3rdparty/site_config/standard/jungle-world.com.txt
new file mode 100644 (file)
index 0000000..61e0087
--- /dev/null
@@ -0,0 +1,3 @@
+title: //h1
+body: //div[contains(@class,'story')]
+test_url: http://jungle-world.com/artikel/2015/02/51207.html
diff --git a/inc/3rdparty/site_config/standard/toolinux.com.txt b/inc/3rdparty/site_config/standard/toolinux.com.txt
new file mode 100755 (executable)
index 0000000..3f1a840
--- /dev/null
@@ -0,0 +1,5 @@
+title: //h2[contains(@class,'news')]
+body: //div[contains(@class,'articleContent')]
+date: substring-after(//div[@class = 'SupaDate']/text(), 'le')
+
+test_url: http://www.toolinux.com/Wi-Fi-Linksys-WRT-la-legende-de
index f6ba47089e8b1cb5b5a87d08787cf0b30397aefc..6bac0f5d0e76d54b186d3b7fb33682ff150bd220 100755 (executable)
@@ -293,7 +293,7 @@ class Database {
             $sql_limit = "LIMIT ".$limit." OFFSET 0";
         }
 
-        $sql        = "SELECT * FROM entries WHERE (content = '' OR content IS NULL) AND title LIKE 'Untitled - Import%' AND user_id=? ORDER BY id " . $sql_limit;
+        $sql        = "SELECT * FROM entries WHERE (content = '' OR content IS NULL) AND title LIKE '%Import%' AND user_id=? ORDER BY id " . $sql_limit;
         $query      = $this->executeQuery($sql, array($user_id));
         $entries    = $query->fetchAll();
 
@@ -302,7 +302,7 @@ class Database {
 
     public function retrieveUnfetchedEntriesCount($user_id)
     {
-      $sql        = "SELECT count(*) FROM entries WHERE (content = '' OR content IS NULL) AND title LIKE 'Untitled - Import%' AND user_id=?";
+      $sql        = "SELECT count(*) FROM entries WHERE (content = '' OR content IS NULL) AND title LIKE '%Import%' AND user_id=?";
       $query      = $this->executeQuery($sql, array($user_id));
       list($count) = $query->fetch();
 
index 36c8693c15380d75940d6e2485682e4cbcfd548b..cd7578e3401ad4966e6f74ac013b9714c8717f5b 100755 (executable)
@@ -74,7 +74,7 @@ class Poche
     /**
      * Creates a new user
      */
-    public function createNewUser($username, $password, $email = "")
+    public function createNewUser($username, $password, $email = "", $internalRegistration = false)
     {
         Tools::logm('Trying to create a new user...');
         if (!empty($username) && !empty($password)){
@@ -82,9 +82,43 @@ class Poche
             $email = filter_var($email, FILTER_SANITIZE_STRING);
             if (!$this->store->userExists($newUsername)){
                 if ($this->store->install($newUsername, Tools::encodeString($password . $newUsername), $email)) {
-                    Tools::logm('The new user ' . $newUsername . ' has been installed');
-                    $this->messages->add('s', sprintf(_('The new user %s has been installed. Do you want to <a href="?logout">logout ?</a>'), $newUsername));
-                    Tools::redirect();
+                    if ($email != "") { // if email is filled
+                        if (SEND_CONFIRMATION_EMAIL && function_exists('mail')) {
+
+                            // if internal registration
+                            $body_internal = _('Hi,') . "\r\n\r\n" . sprintf(_('Someone just created a wallabag account for you on %1$s.'), Tools::getPocheUrl()) . 
+                            "\r\n\r\n" . sprintf(_('Your login is %1$s.'), $newUsername) ."\r\n\r\n" .
+                            _('Note : The password has been chosen by the person who created your account. Get in touch with that person to know your password and change it as soon as possible') . "\r\n\r\n" .
+                            _('Have fun with it !') . "\r\n\r\n" .
+                            _('This is an automatically generated message, no one will answer if you respond to it.');
+                            
+                            // if external (public) registration
+                            $body = "Hi, " . $newUsername . "\r\n\r\nYou've just created a wallabag account on " . Tools::getPocheUrl() . ".\r\nHave fun with it !";
+                            $body = $internalRegistration ? $body_internal : $body;
+
+                            $body = wordwrap($body, 70, "\r\n"); // cut lines with more than 70 caracters (MIME standard)
+                            if (mail($email, sprintf(_('Your new wallabag account on %1$s'), Tools::getPocheUrl()), $body, 
+                                'X-Mailer: PHP/' . phpversion() .  "\r\n" . 
+                                'Content-type: text/plain; charset=UTF-8' . "\r\n" .
+                                "From: " . $newUsername . "@" . gethostname() . "\r\n")) {
+                                Tools::logm('The user ' . $newUsername . ' has been emailed');
+                                $this->messages->add('i', sprintf(_('The new user %1$s has been sent an email at %2$s. You may have to check spam folder.'), $newUsername, $email));
+                                
+                            } else {
+                                Tools::logm('A problem has been encountered while sending an email');
+                                $this->messages->add('e', _('A problem has been encountered while sending an email'));
+                            }
+                        } else {
+                            Tools::logm('The user has been created, but the server did not authorize sending emails');
+                            $this->messages->add('i', _('The server did not authorize sending a confirmation email'));
+                        }
+                } else {
+                    Tools::logm('The user has been created, but no email was saved, so no confimation email was sent');
+                    $this->messages->add('i', _('The user was created, but no email was sent because email was not filled in'));
+                }
+                Tools::logm('The new user ' . $newUsername . ' has been installed');
+                $this->messages->add('s', sprintf(_('The new user %s has been installed. Do you want to <a href="?logout">logout ?</a>'), $newUsername));
+                Tools::redirect();
                 }
                 else {
                     Tools::logm('error during adding new user');
@@ -199,9 +233,9 @@ class Poche
                 }
 
                 if ($autoclose == TRUE) {
-                  Tools::redirect('?view=home');
+                    Tools::redirect('?view=home&closewin=true');
                 } else {
-                  Tools::redirect('?view=home&closewin=true');
+                    Tools::redirect('?view=home');
                 }
                 return $last_id;
                 break;
@@ -341,6 +375,27 @@ class Poche
                 $this->messages->add('s', _('The tag has been successfully deleted'));
                 Tools::redirect();
                 break;
+
+            case 'reload_article' :
+                Tools::logm('reload article');
+                $id = $_GET['id'];
+                $entry = $this->store->retrieveOneById($id, $this->user->getId());
+                Tools::logm('reload url ' . $entry['url']);
+                $url = new Url(base64_encode($entry['url']));
+                $this->action('add', $url);
+                break;
+                
+            /* For some unknown reason I can't get displayView() to work here (it redirects to home view afterwards). So here's a dirty fix which redirects directly to URL */
+            case 'random':
+                $id = 0;
+                while ($this->store->retrieveOneById($id,$this->user->getId()) == null) {
+                    $count = $this->store->getEntriesByViewCount($view, $this->user->getId());
+                    $id = rand(1,$count);
+                }
+                Tools::logm('get a random article');
+                Tools::redirect('?view=view&id=' . $id);
+                //$this->displayView('view', $id);
+                break;
             default:
                 break;
         }
@@ -723,17 +778,23 @@ class Poche
                 $purifier = $this->_getPurifier();
                 foreach($items as $item) {
                     $url = new Url(base64_encode($item['url']));
-                    Tools::logm('Fetching article ' . $item['id']);
-                    $content = Tools::getPageContent($url);
-                    $title = (($content['rss']['channel']['item']['title'] != '') ? $content['rss']['channel']['item']['title'] : _('Untitled'));
-                    $body = (($content['rss']['channel']['item']['description'] != '') ? $content['rss']['channel']['item']['description'] : _('Undefined'));
-
-                    // clean content to prevent xss attack
-
-                    $title = $purifier->purify($title);
-                    $body = $purifier->purify($body);
-                    $this->store->updateContentAndTitle($item['id'], $title, $body, $this->user->getId());
-                    Tools::logm('Article ' . $item['id'] . ' updated.');
+                    if( $url->isCorrect() )
+                    {
+                        Tools::logm('Fetching article ' . $item['id']);
+                        $content = Tools::getPageContent($url);
+                        $title = (($content['rss']['channel']['item']['title'] != '') ? $content['rss']['channel']['item']['title'] : _('Untitled'));
+                        $body = (($content['rss']['channel']['item']['description'] != '') ? $content['rss']['channel']['item']['description'] : _('Undefined'));
+
+                        // clean content to prevent xss attack
+
+                        $title = $purifier->purify($title);
+                        $body = $purifier->purify($body);
+                        $this->store->updateContentAndTitle($item['id'], $title, $body, $this->user->getId());
+                        Tools::logm('Article ' . $item['id'] . ' updated.');
+                    } else
+                    {
+                        Tools::logm('Unvalid URL (' . $item['url'] .')  to fetch for article ' . $item['id']);
+                    }
                 }
             }
         }
index 8d6abefde615b931e7cde4a351095653286f9542..e9b67771791c59ce1ffd0f4616da489b491a8e13 100755 (executable)
@@ -33,6 +33,7 @@ class Routing
         $this->view         = Tools::checkVar('view', 'home');
         $this->action       = Tools::checkVar('action');
         $this->id           = Tools::checkVar('id');
+        $this->autoclose    = Tools::checkVar('autoclose',FALSE);
         $_SESSION['sort']   = Tools::checkVar('sort', 'id');
         $this->url          = new Url((isset ($_GET['url'])) ? $_GET['url'] : '');
     }
@@ -64,7 +65,7 @@ class Routing
         $tplVars = array();
 
         if (\Session::isLogged()) {
-            $this->wallabag->action($this->action, $this->url, $this->id);
+            $this->wallabag->action($this->action, $this->url, $this->id, FALSE, $this->autoclose);
             $tplFile = Tools::getTplFile($this->view);
             $tplVars = array_merge($this->vars, $this->wallabag->displayView($this->view, $this->id));
         } elseif(ALLOW_REGISTER && isset($_GET['registerform'])) {
@@ -124,7 +125,7 @@ class Routing
                 // update password
                 $this->wallabag->updatePassword($_POST['password'], $_POST['password_repeat']);
             } elseif (isset($_GET['newuser'])) {
-                $this->wallabag->createNewUser($_POST['newusername'], $_POST['password4newuser']);
+                $this->wallabag->createNewUser($_POST['newusername'], $_POST['password4newuser'], $_POST['newuseremail'], true);
             } elseif (isset($_GET['deluser'])) {
                 $this->wallabag->deleteUser($_POST['password4deletinguser']);
             } elseif (isset($_GET['epub'])) {
index d31939a1ba70fbdcd6b6a857f8d8b71ec6eb752c..558315719f336e50bc32b21a4a41bb5c137de328 100644 (file)
@@ -202,6 +202,9 @@ class WallabagMobi extends WallabagEBooks
         }
         $mobi->setContentProvider($content);
 
+        // the browser inside Kindle Devices doesn't likes special caracters either, we limit to A-z/0-9
+        $this->bookFileName = preg_replace('/[^A-Za-z0-9\-]/', '', $this->bookFileName);
+
         // we offer file to download
         $mobi->download($this->bookFileName.'.mobi');
         Tools::logm('Mobi file produced');
index 000faf1c5e62f0a2547808362a6dc0e1f4e813a5..e569dddd692c8c34e28f556fab120f50bf3309a4 100755 (executable)
@@ -46,6 +46,7 @@
 @define ('SHARE_MAIL', TRUE);
 @define ('SHARE_SHAARLI', FALSE);
 @define ('SHAARLI_URL', 'http://myshaarliurl.com');
+@define ('SHARE_EVERNOTE', FALSE);
 @define ('SHARE_DIASPORA', FALSE);
 @define ('DIASPORA_URL', 'http://diasporapod.com'); # Don't add a / at the end
 @define ('FLATTR', TRUE);
 @define ('MOBI', FALSE);
 @define ('PDF', FALSE);
 
+// registration
+@define ('SEND_CONFIRMATION_EMAIL', TRUE); // TO BE CHANGED DEPENDING ON POLL
+
 // display or not print link in article view
 @define ('SHOW_PRINTLINK', '1');
 // display or not percent of read in article view. Affects only default theme.
 @define ('SHOW_READPERCENT', '1');
+@define ('RELOAD_ARTICLE', TRUE);
 @define ('ABS_PATH', 'assets/');
 
 @define ('DEFAULT_THEME', 'baggy');
index ec5041608acf2faa1a6a9982150237b2fca39b5b..46638f8f02331c4391412c084d67dce25cf28ce3 100755 (executable)
 $errors = array();
 $successes = array();
 
-/* Function taken from at http://php.net/manual/en/function.rmdir.php#110489
- * Idea : nbari at dalmp dot com
- * Rights unknown
- * Here in case of .gitignore files
- */
-function delTree($dir) {
-    $files = array_diff(scandir($dir), array('.','..'));
-    foreach ($files as $file) {
-      (is_dir("$dir/$file")) ? delTree("$dir/$file") : unlink("$dir/$file");
-    }
-    return rmdir($dir);
-  }
+$final = false;
+
+require_once('install_functions.php');
 
 if (isset($_GET['clean'])) {
     if (is_dir('install')){
@@ -58,136 +49,116 @@ if (isset($_POST['download'])) {
 else if (isset($_POST['install'])) {
     if (!is_dir('vendor')) {
         $errors[] = 'You must install twig before.';
-    }
-    else {
+    } else {
         $continue = true;
-        // Create config.inc.php
-        if (!copy('inc/poche/config.inc.default.php', 'inc/poche/config.inc.php')) {
-            $errors[] = 'Installation aborted, impossible to create inc/poche/config.inc.php file. Maybe you don\'t have write access to create it.';
-            $continue = false;
-        }
-        else {
-            function generate_salt() {
-                mt_srand(microtime(true)*100000 + memory_get_usage(true));
-                return md5(uniqid(mt_rand(), true));
-            }
-
-            $content = file_get_contents('inc/poche/config.inc.php');
-            $salt = generate_salt();
-            $content = str_replace("define ('SALT', '');", "define ('SALT', '".$salt."');", $content);
-            file_put_contents('inc/poche/config.inc.php', $content);
-        }
+        $salt = generate_salt();
+        $content = file_get_contents('inc/poche/config.inc.default.php');
 
-        if ($continue) {
+        // User informations
+        $username = trim($_POST['username']);
+        $password = trim($_POST['password']);
+        $salted_password = sha1($password . $username . $salt);
 
-            // User informations
-            $username = trim($_POST['username']);
-            $password = trim($_POST['password']);
-            $salted_password = sha1($password . $username . $salt);
+        // Database informations
+        $moreQueries = array();
 
-            // Database informations
-            $moreQueries = array();
-            if ($_POST['db_engine'] == 'sqlite') {
-                if (!copy('install/poche.sqlite', 'db/poche.sqlite')) {
-                    $errors[] = 'Impossible to create inc/poche/config.inc.php file.';
-                    $continue = false;
-                }
-                else {
-                    $db_path = 'sqlite:' . realpath('') . '/db/poche.sqlite';
-                    $handle = new PDO($db_path);
-                    $sql_structure = "";
-                }
+        if ($_POST['db_engine'] == 'sqlite') {
+            if (!copy('install/poche.sqlite', 'db/poche.sqlite')) {
+                $errors[] = 'Impossible to create the SQLite database file.';
             }
             else {
-                $content = file_get_contents('inc/poche/config.inc.php');
+                $db_path = 'sqlite:' . realpath('') . '/db/poche.sqlite';
+                $handle = new PDO($db_path);
+                $handle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
+                $sql_structure = "";
+            }
+        } else {
+            // MySQL and Postgre
+            try {
 
-                if ($_POST['db_engine'] == 'mysql') {
+            if ($_POST['db_engine'] == 'mysql') {
+                if (isset($_POST['mysql_utf8_mb4'])) {
+                    //with UTF8-MB4
                     $db_path = 'mysql:host=' . $_POST['mysql_server'] . ';dbname=' . $_POST['mysql_database'] . ';charset=utf8mb4';
-                    $content = str_replace("define ('STORAGE_SERVER', 'localhost');", "define ('STORAGE_SERVER', '".$_POST['mysql_server']."');", $content);
-                    $content = str_replace("define ('STORAGE_DB', 'poche');", "define ('STORAGE_DB', '".$_POST['mysql_database']."');", $content);
-                    $content = str_replace("define ('STORAGE_USER', 'poche');", "define ('STORAGE_USER', '".$_POST['mysql_user']."');", $content);
-                    $content = str_replace("define ('STORAGE_PASSWORD', 'poche');", "define ('STORAGE_PASSWORD', '".$_POST['mysql_password']."');", $content);
                     $handle = new PDO($db_path, $_POST['mysql_user'], $_POST['mysql_password'], array(
                         PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4',
                     ));
+                } else { // regular UTF8
+                    $db_path = 'mysql:host=' . $_POST['mysql_server'] . ';dbname=' . $_POST['mysql_database'];
+                    $handle = new PDO($db_path, $_POST['mysql_user'], $_POST['mysql_password']);
+                }
+                $content = str_replace("define ('STORAGE_SERVER', 'localhost');", "define ('STORAGE_SERVER', '".$_POST['mysql_server']."');", $content);
+                $content = str_replace("define ('STORAGE_DB', 'poche');", "define ('STORAGE_DB', '".$_POST['mysql_database']."');", $content);
+                $content = str_replace("define ('STORAGE_USER', 'poche');", "define ('STORAGE_USER', '".$_POST['mysql_user']."');", $content);
+                $content = str_replace("define ('STORAGE_PASSWORD', 'poche');", "define ('STORAGE_PASSWORD', '".$_POST['mysql_password']."');", $content);
 
-                    $moreQueries[] = "INSERT INTO `entries` (`id`, `title`, `url`, `is_read`, `is_fav`, `content`, `user_id`) VALUES
+                $moreQueries[] = "INSERT INTO `entries` (`id`, `title`, `url`, `is_read`, `is_fav`, `content`, `user_id`) VALUES
 (1, 'Framabag, un nouveau service libre et gratuit', 'http://www.framablog.org/index.php/post/2014/02/05/Framabag-service-libre-gratuit-interview-developpeur', 0, 0, 0x0a3c68323e556e6520696e74657276696577206465204e69636f6c61732c20736f6e2064c3a976656c6f70706575722e3c2f68323e0a3c703e3c656d3e496c206e6520766f757320612073c3bb72656d656e742070617320c3a96368617070c3a920717565206e6f74726520636f6e736f6d6d6174696f6e20646520636f6e74656e75732064752057656220657374207465727269626c656d656e74206368726f6e6f706861676520657420706172746963756c69c3a872656d656e7420667275737472616e746520746f757420c3a0206c6120666f6973c2a03a206e6f6e207365756c656d656e74206e6f757320706173736f6e732062656175636f7570202874726f70c2a03f292064652074656d707320656e206c69676e6520c3a0206578706c6f726572206c6573206d696e6573206175726966c3a8726573206465206c6120746f696c652c20792064c3a974656374616e742070c3a970697465732065742066696c6f6e732c206d616973206e6f757320736f6d6d657320737572746f757420636f6e7374616d6d656e7420656e206d616e7175652e204dc3aa6d65207369206e6f7573206e6520736f6d6d6573207061732064616e73206c65207a617070696e67206672c3a96ec3a9746971756520736920666163696c656d656e742064c3a96e6f6e63c3a920706172206c657320646f637465732070737963686f6c6f677565732071756920706f6e74696669656e7420737572206c65732064616e67657273206475206e756dc3a9726971756520706f7572206c6573206a65756e65732063657276656c6c65732c20696c206e6f7573207669656e7420736f7576656e74206c6520676fc3bb7420616d6572206465206ce28099696e6163686576c3a9c2a03a20706173206c652074656d707320646520746f7574206c69726520283c6120687265663d22687474703a2f2f66722e77696b74696f6e6172792e6f72672f77696b692f544c4452223e544c3b44523c2f613e2065737420646576656e75206c6520636c696e2064e28099c593696c206d692d6669677565206d692d72616973696e2064e28099756e652067c3a96ec3a9726174696f6e206465206c65637465757273207072657373c3a973292c207061732074726f70206c652074656d70732064652072c3a9666cc3a963686972206e6f6e20706c75732068c3a96c61732c20706173206c652074656d707320646520737569767265206c6120726962616d62656c6c65206465206c69656e73206173736f6369c3a97320c3a020756e2061727469636c65e280a63c6272202f3e3c2f656d3e3c2f703e0a3c703e3c656d3e506f7572206e6f757320646f6e6e657220626f6e6e6520636f6e736369656e63652c206e6f75732072616e67656f6e73207363727570756c657573656d656e7420756e206d61727175652d7061676520646520706c75732064616e7320756e20736f75732d646f73736965722071756920656e20636f6d706f7274652064c3a96ac3a0203235362c206e6f7573206e6f746f6e7320756e20c3a96cc3a96d656e7420646520706c75732064616e73206c6120746f756a6f757273207269646963756c656d656e74206c6f6e67756520746f75646f756c697374652c2062726566206e6f75732072656d6574746f6e7320c3a020706c757320746172642c2063e280996573742dc3a02d64697265206c6520706c757320736f7576656e742061757820696e74726f757661626c65732063616c656e6465732067726563717565732c206c6520736f696e206465206c69726520767261696d656e7420756e2061727469636c65206a7567c3a920696e74c3a972657373616e742c20646520726567617264657220756e6520766964c3a96f207369676e616cc3a96520706172206c65732072c3a97a6f73736f63696f732c206465206c69726520756e20636861706974726520656e746965722064e28099756e206f75767261676520646973706f6e69626c6520656e206c69676e65e280a63c6272202f3e3c2f656d3e3c2f703e0a3c703e3c656d3e416c6f7273206269656e2073c3bb722c20c3a02064c3a966617574206465206e6f757320646f6e6e657220746f7574206c652074656d70732071756920736572616974206ec3a963657373616972652c2064657320736f6c7574696f6e73206578697374656e7420706f7572206e6f7573207065726d657474726520646520c2abc2a06c69726520706c75732074617264c2a0c2bb20656e20736175766567617264616e74206c65207072c3a9636965757820706f6c6c656e206465206e6f7320627574696e61676573206465207369746520656e20736974652c2065742064e28099656e20666169726520756c74c3a97269657572656d656e7420766f747265206d69656cc2a03b2063e280996573742062656c20657420626f6e206d616973206c65732072756368657320736f6e7420756e207065752064697374616e7465732c20c3a7612073e28099617070656c6c65206c6520636c6f756420286e6f7320616d69732074656368696573206de280996f6e74206269656e206578706c697175c3a9206d616973206ae280996169207365756c656d656e7420636f6d70726973207175652064657320747275637320c3a0206d6f6920736f6e742073757220646573206d616368696e6573206c6f696e7461696e65732c20c3a761206e65206d652072617373757265207061732074726f702920657420656c6c657320736f6e7420736f7576656e742070726f707269c3a97461697265732c206e65206c61697373616e7420656e7472657220717565206c6573203c733e7574696c69736174657572733c2f733e20636f6e736f6d6d61746575727320706179616e74732065742071756920636f6e73656e74656e7420c3a0206c6575727320636f6e646974696f6e732e2053616e7320636f6d70746572207175652064652067726f7320626f7572646f6e73207669656e6e656e742070726f666974657220706c7573206f75206d6f696e73206469736372c3a874656d656e7420646520746f757465732063657320747261636573206465206e6f75732d6dc3aa6d657320717569207065726d657474656e74206465206d6f6ec3a97469736572206e6f7472652070726f66696cc2a03a207369206a6520636f6c6c65637465207375722063657320736572766963657320286e65206c6573206e6f6d6d6f6e73207061732c206a757374656d656e742920756e652073c3a97269652064e2809961727469636c657320737572206ce280996964c3a965206465204e6174757265206368657a2044696465726f742c206a6520726563657672616920646976657273657320736f6c6c696369746174696f6e7320706f757220646576656e697220636c69656e74206465206c6120626f757469717565204e61747572652026616d703b2044c3a9636f75766572746520647520626f756c65766172642044696465726f742e2045742073692064e280996176656e74757265206c65732070726f6772616d6d6573206465206c61204e5341206d6f756c696e656e7420737572206c6520736572766963652c206a6520736572616920706575742dc3aa74726520756e206a6f75722064616e7320756e65206c6973746520646573206d696c6974616e7473206e61747572697374657320696e64c3a973697261626c657320737572206c657320766f6c73206465206c612050616e416d20286a65206e65207361697320706c75732074726f70207369206a6520706c616973616e7465206cc3a02c2066696e616c656d656e74e280a6293c6272202f3e3c2f656d3e3c2f703e0a3c703e3c656d3e4c6120626f6e6e65206964c3a965c2a03a20c2abc2a0736520636f6e7374697475657220756e2072c3a9736572766f697220646520646f63756d656e74732073c3a96c656374696f6e6ec3a97320c3a020706172636f7572697220706c75732074617264c2a0c2bb20617070656c61697420646f6e6320756e6520617574726520626f6e6e65206964c3a9652c2063656c6c652064e2809961766f6972206c6520636f6e7472c3b46c652064652063652072c3a9736572766f69722c206465206e6f74726520636f6c6c656374696f6e20706572736f6e6e656c6c652e2043e28099657374204e69636f6c6173204cc59375696c6c65742c2063692d646573736f757320696e74657276696577c3a92c207175692073e28099792065737420636f6c6cc3a9206176656320756e652062656c6c65206170706c69636174696f6e20617070656cc3a96520657568e280a6206f75692c20617070656cc3a9652057616c6c616261672e3c6272202f3e3c2f656d3e3c2f703e0a3c703e3c656d3e4672616d61736f667420736f757469656e742064e28099617574616e7420706c757320736f6e20696e6974696174697665207175e280993c6120687265663d22687474703a2f2f7777772e6672616d61626c6f672e6f72672f696e6465782e7068702f706f73742f323031342f30312f33312f4765656b74696f6e6e6572642d57616c6c61626167223e6f6e206c7569206120636865726368c3a920646573206d6973c3a872657320706f757220756e6520686973746f697265206465206e6f6d3c2f613e206574207175e28099696c2065737420706f737369626c652064e28099696e7374616c6c657220736f692d6dc3aa6d6520756e6520636f7069652064652057616c6c616261672073757220736f6e2070726f70726520736974652e3c6272202f3e3c2f656d3e3c2f703e0a3c703e3c656d3e4c6520706574697420706c7573206465204672616d61736f66742c2072c3a97365617520746f756a6f7572732064c3a973697265757820646520766f75732070726f706f7365722064657320616c7465726e617469766573206c6962c3a972617472696365732c2063e2809965737420646520766f75732070726f706f736572202873757220696e736372697074696f6e207072c3a9616c61626c652920756e20616363c3a873206175204672616d616261672c2061757472656d656e742064697420766f7472652057616c6c616261672073757220756e2073657276657572204672616d612a2061766563206e6f74726520676172616e74696520646520636f6e666964656e7469616c6974c3a92e20436f6d6d6520706f7572206c65204672616d616e6577732c206e6f757320766f7573206163637565696c6c6f6e7320766f6c6f6e74696572732064616e73206c61206c696d697465206465206e6f732063617061636974c3a9732c20656e20766f757320696e766974616e7420c3a020766f7573206c616e6365722064616e7320766f747265206175746f2d68c3a962657267656d656e742064652057616c6c616261672e3c6272202f3e4365742061727469636c65206573742074726f70206c6f6e67c2a03f204d657474657a2d6c652064616e73203c6120687265663d22687474703a2f2f7777772e6672616d616261672e6f72672f696e6465782e706870223e766f747265204672616d616261673c2f613e20657420686f702e3c6272202f3e3c2f656d3e3c2f703e0a3c703e3c656d3e4672616d61626c6f67c2a03a2053616c7574204e69636f6c6173e280a62054752070657578207465207072c3a973656e74657220627269c3a876656d656e74c2a03f3c6272202f3e3c2f656d3e3c2f703e0a3c703e53616c7574c2a0212044c3a976656c6f70706575722050485020646570756973207175656c7175657320616e6ec3a96573206d61696e74656e616e742028313020616e73292c206ae28099616920766f756c75206d652072656d657474726520c3a0206e697665617520746563686e697175656d656e74207061726c616e742028646570756973203320616e732c206ae28099616920706173206d616c206cc3a26368c3a9206c6520636c6176696572292e20506f7572206d6573206265736f696e7320706572736f732c206ae28099616920646f6e63206372c3a9c3a920756e2070657469742070726f6a657420706f75722072656d706c6163657220756e6520736f6c7574696f6e2070726f707269c3a97461697265206578697374616e74652e2053616e7320617563756e65207072c3a974656e74696f6e2c206ae2809961692068c3a962657267c3a92063652070726f6a6574207375722047697468756220657420636f6d6d652063e28099657374206c61207365756c6520736f6c7574696f6e203c656d3e6f70656e20736f757263653c2f656d3e20646520636520747970652c206c65206e6f6d62726520646520706572736f6e6e657320696e74c3a972657373c3a965732061206175676d656e74c3a920e280a63c2f703e0a3c703e3c656d3e4c6573207574696c6973617465757273206465207365727669636573204672616d61736f6674206e65206c6520736176656e742070617320666f7263c3a96d656e742c206d6169732074752061732064c3a96ac3a020706173206d616c207061727469636970c3a920c3a0206c61204672616d6147616c617869652c206e6f6ec2a03f3c6272202f3e3c2f656d3e3c2f703e0a3c703e456e2065666665742e204ae28099616920636f6d6d656e63c3a920756e20706c7567696e20706f7572204672616d616e6577732c203c6120687265663d2268747470733a2f2f6769746875622e636f6d2f6e69636f736f6d622f74747273732d70757267652d6163636f756e7473223e74747273732d70757267652d6163636f756e74733c2f613e2c20717569207065726d6574206465206e6574746f796572206c61206261736520646520646f6e6ec3a9657320646520636f6d7074657320706c7573207574696c6973c3a9732e204d616973206365203c656d3e706c7567696e3c2f656d3e2061206265736f696e2064e28099c3aa747265207465726d696ec3a920c3a0203130302520706f757220c3aa74726520696e74c3a96772c3a9206175207365696e206465204672616d616e6577732028657420646f6e632064652054696e792054696e7920525353292c207369207175656c7175e28099756e20736f756861697465206de2809961696465722c20696c206ee2809979206120617563756e20736f7563692e3c6272202f3e4ae28099616920617573736920666169742031206f7520322061707061726974696f6e732064616e73206465732074726164756374696f6e7320706f7572204672616d61626c6f672e205269656e2064e2809965787472616f7264696e616972652c206a65206e652073756973207061732062696c696e6775652c20c3a761206d65207065726d6574206465206de28099656e747261c3ae6e65722e3c2f703e0a3c703e3c656d3e5061726c6f6e73206465207375697465206465206365207175692066c3a2636865c2a03a20746f6e206170706c69636174696f6e2057616c6c616261672c20656c6c652073e28099617070656c6c6169742070617320e2809c506f636865e2809d2c206176616e74c2a03f205475206e6f7573207261636f6e746573206ce28099686973746f697265c2a03f3c6272202f3e3c2f656d3e3c2f703e0a3c703e45756820656e20656666657420e280a62044c3a96ac3a02c20706f757271756f69203c656d3e706f6368653c2f656d3ec2a03f20506172636520717565206ce28099756e206465732074726f697320c2abc2a074c3a96e6f7273c2a0c2bb20737572206c65206d61726368c3a92073e28099617070656c6c65203c656d3e506f636b65743c2f656d3e2e20436f6d6d65206d6f6e206170706c69206ee28099c3a9746169742064657374696ec3a965207175e28099c3a0206d6f6e20757361676520706572736f6e6e656c2061752064c3a9706172742c206a65206e65206d6520737569732070617320746f72747572c3a9206269656e206c6f6e6774656d70732e3c2f703e0a3c703e43657420c3a974c3a92c206f6e2061206661696c6c69206368616e676572206465206e6f6d2c207175616e6420696c2079206120657520646520706c757320656e20706c75732064e280997574696c69736174657572732e2045742070756973206f6e2073e28099657374206469742071756520706f6368652c2063e28099c3a97461697420706173206d616c2c20c3a76120736f6e6e616974206269656e206672616ec3a761697320657420707569732061766563206c6573207175656c717565732064697a61696e65732064e280997574696c69736174657572732c206f6e206e652067c3aa6e657261697420706572736f6e6e652e3c2f703e0a3c703e43e280996573742073616e7320636f6d707465722061766563206c657320736f6369c3a974c3a97320616dc3a972696361696e6573206574206c6575722066c3a2636865757365206d616e696520646520766f756c6f697220656e766f796572206c657572732061766f6361747320c3a020746f757420626f7574206465206368616d702e204c65203233206a616e766965722c206ae280996169207265c3a77520756e20656d61696c206465206c61207061727420647520636162696e65742064e2809961766f6361747320646520506f636b6574206d652064656d616e64616e74206465206368616e676572206c65206e6f6d2c206c65206c6f676f2c206465206e6520706c7573207574696c69736572206c65207465726d6520e2809c726561642d69742d6c61746572e2809d2028c2abc2a06c6973657a206c6520706c75732074617264c2a0c2bb29206574206465206e6520706c757320646972652071756520506f636b6574206ee280996573742070617320677261747569742028746f7574206573742070617274692064e280993c6120687265663d2268747470733a2f2f747769747465722e636f6d2f77616c6c616261676170702f7374617475732f343233373836333635393434323235373932223e756e2074776565743c2f613e206fc3b9206a65207175616c6966696520506f636b657420646520c2abc2a06e6f6e2066726565c2a0c2bb20c3a0207361766f6972206e6f6e206c69627265292e20427265662c206dc3aa6d65207369206a652073656d626c6169732064616e73206d6f6e2064726f69742c206ae280996169207175616e64206dc3aa6d652070726973206c612064c3a9636973696f6e206465206368616e676572206465206e6f6d2065742057616c6c6162616720657374206ec3a92c20737569746520617578203c6120687265663d22687474703a2f2f6672616d61646174652e6f72672f73747564732e7068703f736f6e646167653d6c6c6370366f6a70796339706b6c6861223e64697a61696e65732064652070726f706f736974696f6e73206465206e6f6d207265c3a77565733c2f613e2e2043e2809965737420756e206dc3a96c616e676520656e747265206c652077616c6c61627920286465206c612066616d696c6c6520646573206b616e676f75726f75732c207175692073746f636b656e742064616e73206c65757220706f63686520636520717569206c65757220657374206368657229206574203c656d3e6261673c2f656d3e20286c6573207465726d657320736163202f207361636f636865202f2062657361636520736f6e7420c3a96e6f726dc3a96d656e7420726576656e7573292e204d616973206d61696e74656e616e742c206f6e207661206465206ce280996176616e742c20706c75732064652074656d707320c3a020706572647265206176656320c3a7612c206f6e2061206475207061696e20737572206c6120706c616e6368652e3c6272202f3e3c696d67207372633d22687474703a2f2f7777772e6672616d61626c6f672e6f72672f7075626c69632f5f696d672f6672616d61626c6f672f77616c6c6162795f626162792e6a70672220616c743d2277616c6c61627920617665632062c3a962c3a92064616e7320736120706f6368652220636c6173733d22633122207469746c653d2277616c6c61627920617665632062c3a962c3a92064616e7320736120706f63686522202f3e206372c3a96469742070686f746f203c6120687265663d22687474703a2f2f7777772e666c69636b722e636f6d2f70686f746f732f3236373832383634404e30302f353032373230323233342f696e2f70686f746f6c6973742d3845654a35412d6831544c36762d4e454c38312d636e4e6b536f2d39594d3174762d374b636736622d387a70416f612d61315a4c4d4e2d39594d3339722d3768355341442d38456548664c2d3845654677752d647456776e4d2d38756f4d45312d4a457a58652d47713471792d3932564a50522d43786531762d38483344324a2d61315a464e732d395937324b362d38456547784c2d354c353346782d354e6b454e732d3555384354592d354e6b7373682d6e6b6176462d3943726777502d3773644341612d647566324b682d685a65707a792d685a645531652d685a656f66462d685a656b44672d685a656741592d685a654d5a6e2d6a61486741662d3850383744322d354e677152762d6154343851422d685a645634592d685a654336342d45526770732d3556594747642d3556594a42312d354e6b72466b2d364a786837682d3768395075512d4552664d782d6831553169682d683155534278223e57696c6c69616d2057617262793c2f613e20717569206175746f72697365206578706c69636974656d656e7420746f7574652072c3a97574696c69736174696f6e2e3c2f703e0a3c703e3c656d3e426f6e2c20616c6f7273206578706c697175652d6d6f6920636520717565206a65207661697320706f75766f69722066616972652061766563204672616d61626167e280a63c6272202f3e3c2f656d3e3c2f703e0a3c703e416c6f7273204672616d616261672c20c3a761207465207065726d6574206465207465206372c3a9657220756e20636f6d7074652067726174756974656d656e74206574206c696272656d656e7420706f757220706f75766f6972207574696c697365722057616c6c616261672e205365756c6520746f6e206164726573736520656d61696c20657374206ec3a963657373616972652c206f6e207365206368617267652064e28099696e7374616c6c6572206574206465206d657474726520c3a0206a6f75722057616c6c6162616720706f757220746f692e20547520706575782064e2809961696c6c657572732070726f6669746572203c6120687265663d22687474703a2f2f7777772e6672616d61736f66742e6e65742f23746f705067436c6f7564223e64e280996175747265732073657276696365732070726f706f73c3a97320706172204672616d61736f6674206963693c2f613e2e3c2f703e0a3c703ec380206365206a6f75722c20696c207920612038333420636f6d70746573206372c3a9c3a97320737572204672616d616261672e3c2f703e0a3c703e3c656d3e566f7573206176657a20767261696d656e7420636f6ec3a7752063652073657276696365206166696e207175e280996f6e20707569737365206ce280997574696c69736572206176656320756e206d6178696d756d2064e280996f7574696c732c206e6f6ec2a03f3c6272202f3e3c2f656d3e3c2f703e0a3c703e4175746f7572206465206ce280996170706c69636174696f6e207765622c20696c206578697374652064c3a96ac3a020646573206170706c69636174696f6e7320706f757220736d61727470686f6e65732028416e64726f69642065742057696e646f77732050686f6e65292c2064657320657874656e73696f6e732046697265666f7820657420476f6f676c65204368726f6d652e3c2f703e0a3c703e436f6d6d652057616c6c6162616720706f7373c3a864652064657320666c7578205253532c2063e2809965737420666163696c65206465206c697265206c65732061727469636c657320736175766567617264c3a97320737572207361206c697365757365202873692063656c6c652d6369207065726d6574206465206c6972652064657320666c757820525353292e2043616c696272652028c2abc2a06c6f67696369656c206465206c6563747572652c2064652067657374696f6e206465206269626c696f7468c3a87175657320657420646520636f6e76657273696f6e206465206669636869657273206e756dc3a972697175657320646520747970652065626f6f6b206f75206c6976726520c3a96c656374726f6e69717565c2a0c2bb2c6e6f757320646974207562756e74752d66722e6f72672920696e74c3a867726520646570756973207175656c717565732073656d61696e6573206d61696e74656e616e74206c6120706f73736962696c6974c3a92064652072c3a9637570c3a9726572206c65732061727469636c6573206e6f6e206c75732c20707261746971756520706f757220666169726520756e20666963686965722065507562c2a0213c2f703e0a3c703e44e28099617574726573206170706c69636174696f6e7320776562207065726d657474656e74206ce28099696e74c3a967726174696f6e20617665632057616c6c61626167202846726573685253532c204c6565642065742054696e792054696e792052535320706f7572206c657320616772c3a96761746575727320646520666c7578292e204ce2809941504920717569207365726120646973706f6e69626c652064616e73206c612070726f636861696e652076657273696f6e2064652057616c6c61626167207065726d657474726120656e636f726520706c75732064e28099696e74657261637469766974c3a92e3c2f703e0a3c703e3c656d3e5920612d742d696c20756e206d6f6465206465206c65637475726520686f7273206c69676e65206f75206573742d6365207175652063e28099657374207072c3a9767520706f7572206c65732070726f636861696e65732076657273696f6e73c2a03f3c6272202f3e3c2f656d3e3c2f703e0a3c703e496c2079206120756e2070736575646f206d6f646520686f7273206c69676e652c20646973706f6e69626c652061766563206ce280996170706c69636174696f6e20416e64726f69642e204f6e20706575742072c3a9637570c3a9726572202876696120756e20666c75782052535329206c65732061727469636c6573206e6f6e206c757320717565206ce280996f6e206120736175766567617264c3a9732e20556e6520666f69732064c3a9636f6e6e656374c3a92c206f6e207065757420636f6e74696e75657220c3a0206c6972652073757220736f6e20736d61727470686f6e65206f75207361207461626c65747465206c65732061727469636c65732e2050617220636f6e7472652c20696c206d616e7175652064657320666f6e6374696f6e6e616c6974c3a973c2a03a207175616e64207475206d61727175657320756e2061727469636c6520636f6d6d65206c752c206365206ee28099657374207061732073796e6368726f6e6973c3a92061766563206c612076657273696f6e207765622064652057616c6c616261672e204ae28099657370c3a8726520717565206a652073756973207072657371756520636c6169722064616e73206d6573206578706c69636174696f6e732e3c2f703e0a3c703e506f7572206c612076322c20717569206573742064c3a96ac3a020656e20636f7572732064652064c3a976656c6f7070656d656e742c206fc3b9206a652073756973206269656e20616964c3a9207061722056696e63656e74204a6f757373652c206f6e2061757261206c6120706f73736962696c6974c3a92064e2809961766f697220756e2076726169206d6f646520686f7273206c69676e652e3c2f703e0a3c703e3c656d3e416c6f7273207369206f6e2076657574206169646572202f2070617274696369706572202f20747269666f75696c6c6572206c6520636f6465202f20766f757320656e766f79657220646573207265746f7572732c206f6e206661697420636f6d6d656e74c2a03f3c6272202f3e3c2f656d3e3c2f703e0a3c703e4f6e207065757420616964657220646520706c75736965757273206661c3a76f6e73c2a03a3c2f703e0a3c756c3e3c6c693e7574696c697365722077616c6c61626167206574206e6f75732072656d6f6e746572206c65732070726f626cc3a86d65732072656e636f6e7472c3a973c2a03b3c2f6c693e0a3c6c693e706172746963697065722061752064c3a976656c6f7070656d656e74206465206ce280996170706c69636174696f6e2068747470733a2f2f6769746875622e636f6d2f77616c6c616261672f77616c6c616261672053692053696c6578202f2053796d666f6e7932202f2048544d4c35202f206574632e207465207061726c656e742c206ee2809968c3a97369746520706173c2a0213c2f6c693e0a3c6c693e636f6d6d6520746f75742070726f6a65742c206c652067726f7320706f696e74206e6f697220657374206c65206d616e71756520646520646f63756d656e746174696f6e2e203c6120687265663d22687474703a2f2f646f632e77616c6c616261672e6f7267223e456c6c652065737420646973706f206963693c2f613e206d61697320696c206d616e71756520706c65696e2064652063686f73657320657420746f7574206ee280996573742070617320c3a0206a6f7572c2a03b3c2f6c693e0a3c6c693e7061726c65722064652057616c6c61626167206175746f757220646520766f7573c2a03b3c2f6c693e0a3c6c693e696c20657869737465203c6120687265663d2268747470733a2f2f666c617474722e636f6d2f7468696e672f313236353438302f706f6368652d612d726561642d69742d6c617465722d6f70656e2d736f757263652d73797374656d223e756e20636f6d70746520466c617474723c2f613e2e3c2f6c693e0a3c2f756c3e3c703e3c656d3e4c65206d6f74206465206c612066696ee280a63f3c6272202f3e3c2f656d3e3c2f703e0a3c703e4d6572636920c3a0204672616d61736f66742064e280996163637565696c6c697220657420646520736f7574656e69722057616c6c61626167c2a0213c2f703e0a3c703e4c6120726f7574652065737420656e636f7265206269656e206c6f6e67756520706f7572206e6520706c7573207574696c6973657220646520736f6c7574696f6e732070726f707269c3a97461697265732c206d616973206f6e2064657672616974207920617272697665722c206e6f6ec2a03f3c2f703e0a3c703e3c696d67207372633d22687474703a2f2f7777772e6672616d61626c6f672e6f72672f7075626c69632f5f696d672f6672616d61626c6f672f706c65696e4c6573506f636865732e706e672220616c743d226672616d61736f667420706c65696e206c657320706f636865732220636c6173733d22633122207469746c653d226672616d61736f667420706c65696e206c657320706f6368657322202f3e3c6272202f3e3c6120687265663d22687474703a2f2f6672616d616c61622e6f72672f676b6e642d63726561746f722f223e6861636b657a2047c3a967c3a9c2a0213c2f613e3c2f703e0a, 1),
 (2, 'wallabag/wallabag', 'https://github.com/wallabag/wallabag', 0, 0, 0x3c7370616e20636c6173733d226e616d65223e524541444d452e6d643c2f7370616e3e3c703e77616c6c6162616720697320612073656c6620686f737461626c65206170706c69636174696f6e20616c6c6f77696e6720796f7520746f206e6f74206d69737320616e7920636f6e74656e7420616e796d6f72652e20436c69636b2c20736176652c2072656164206974207768656e20796f752063616e2e20497420657874726163747320636f6e74656e7420736f207468617420796f752063616e2072656164206974207768656e20796f7520686176652074696d652e3c2f703e0a3c703e4d6f726520696e666f726d6174696f6e73206f6e206f757220776562736974653a203c6120687265663d22687474703a2f2f77616c6c616261672e6f7267223e77616c6c616261672e6f72673c2f613e3c2f703e0a3c68323e3c6120636c6173733d22616e63686f722220687265663d2268747470733a2f2f6769746875622e636f6d2f77616c6c616261672f77616c6c61626167236c6963656e7365223e3c2f613e4c6963656e73653c2f68323e0a3c703e436f7079726967687420c2a920323031302d32303134204e69636f6c6173204cc59375696c6c6574203c6120687265663d226d61696c746f3a6e69636f6c6173406c6f6575696c6c65742e6f7267223e6e69636f6c6173406c6f6575696c6c65742e6f72673c2f613e205468697320776f726b20697320667265652e20596f752063616e2072656469737472696275746520697420616e642f6f72206d6f6469667920697420756e64657220746865207465726d73206f662074686520446f205768617420546865204675636b20596f752057616e7420546f205075626c6963204c6963656e73652c2056657273696f6e20322c206173207075626c69736865642062792053616d20486f63657661722e205365652074686520434f5059494e472066696c6520666f72206d6f72652064657461696c732e3c2f703e0a, 1),
 (3, 'a self hostable application for saving web pages | wallabag', 'https://www.wallabag.org/', 0, 1, 0x0a3c64697620636c6173733d22726f77223e0a3c64697620636c6173733d22636f6c2d6c672d3820636f6c2d6d642d313220636f6c2d78732d313220636f6c2d736d2d3132223e0a3c703e77616c6c616261672028666f726d65726c7920706f636865292069732061203c7374726f6e673e73656c6620686f737461626c65206170706c69636174696f6e20666f7220736176696e67207765622070616765733c2f7374726f6e673e2e20556e6c696b65206f746865722073657276696365732cc2a077616c6c6162616720697320667265652028617320696e2066726565646f6d2920616e64206f70656e20736f757263652e3c2f703e0a3c2f6469763e0a0a3c2f6469763e0a3c64697620636c6173733d22726f77223e0a3c64697620636c6173733d22636f6c2d6c672d3820636f6c2d6d642d313220636f6c2d78732d313220636f6c2d736d2d3132223e0a3c703e576974682074686973206170706c69636174696f6e20796f752077696c6c206e6f74206d69737320636f6e74656e7420616e796d6f72652e203c7374726f6e673e436c69636b2c20736176652c2072656164206974207768656e20796f752077616e743c2f7374726f6e673e2e2049742073617665732074686520636f6e74656e7420796f752073656c65637420736f207468617420796f752063616e2072656164206974207768656e20796f7520686176652074696d652e3c2f703e0a3c2f6469763e0a0a3c2f6469763e0a3c64697620636c6173733d22726f77223e0a3c64697620636c6173733d22636f6c2d6c672d3620636f6c2d6d642d313220636f6c2d78732d313220636f6c2d736d2d3132223e0a3c68323e486f7720697420776f726b733c2f68323e0a3c703e5468616e6b7320746f2074686520626f6f6b6d61726b6c6574206f72203c61207469746c653d22446f776e6c6f6164732220687265663d22687474703a2f2f7777772e77616c6c616261672e6f72672f646f776e6c6f6164732f223e74686972642d7061727479206170706c69636174696f6e733c2f613e2c20796f75207361766520616e2061727469636c6520696e20796f7572c2a077616c6c6162616720746f2072656164206974206c617465722e205468656e2c207768656e20796f75206f70656e20796f75722077616c6c616261672c203c7374726f6e673e796f752063616e20636f6d666f727461626c79207265616420796f75722061727469636c65733c2f7374726f6e673e2e3c2f703e0a3c68323e486f7720746f207573652077616c6c616261673c2f68323e0a3c703e5468657265206172652074776f207761797320746f207573652077616c6c616261673a20796f752063616e203c6120687265663d22687474703a2f2f7777772e77616c6c616261672e6f72672f6672657175656e746c792d61736b65642d7175657374696f6e732f23486f775f63616e5f495f696e7374616c6c5f77616c6c616261675f616e645f776861745f6172655f7468655f726571756972656d656e7473223e696e7374616c6c2069743c2f613ec2a06f6e20796f75722077656220736572766572206f7220796f752063616ec2a03c6120687265663d22687474703a2f2f6170702e696e746865706f6368652e636f6d223e63726561746520616e206163636f756e743c2f613ec2a06174204672616d616261672028776520696e7374616c6c20616e642075706772616465c2a077616c6c6162616720666f7220796f75292e3c2f703e0a3c2f6469763e0a0a3c2f6469763e0a, 1);";
-                    $moreQueries[] = "INSERT INTO `tags` (`id`, `value`) VALUES (1, 'opensource');";
-                    $moreQueries[] = "INSERT INTO `tags_entries` (`id`, `entry_id`, `tag_id`) VALUES (1, 2, 1);";
+                $moreQueries[] = "INSERT INTO `tags` (`id`, `value`) VALUES (1, 'opensource');";
+                $moreQueries[] = "INSERT INTO `tags_entries` (`id`, `entry_id`, `tag_id`) VALUES (1, 2, 1);";
 
-                    $sql_structure = file_get_contents('install/mysql.sql');
-                }
-                else if ($_POST['db_engine'] == 'postgres') {
-                    $db_path = 'pgsql:host=' . $_POST['pg_server'] . ';dbname=' . $_POST['pg_database'];
-                    $content = str_replace("define ('STORAGE_SERVER', 'localhost');", "define ('STORAGE_SERVER', '".$_POST['pg_server']."');", $content);
-                    $content = str_replace("define ('STORAGE_DB', 'poche');", "define ('STORAGE_DB', '".$_POST['pg_database']."');", $content);
-                    $content = str_replace("define ('STORAGE_USER', 'poche');", "define ('STORAGE_USER', '".$_POST['pg_user']."');", $content);
-                    $content = str_replace("define ('STORAGE_PASSWORD', 'poche');", "define ('STORAGE_PASSWORD', '".$_POST['pg_password']."');", $content);
-                    $handle = new PDO($db_path, $_POST['pg_user'], $_POST['pg_password']);
-                    
-                    $moreQueries[] = "INSERT INTO entries (title, url, is_read, is_fav, content, user_id) VALUES
+                $sql_structure = file_get_contents('install/mysql.sql');
+            }
+            else if ($_POST['db_engine'] == 'postgres') {
+                $db_path = 'pgsql:host=' . $_POST['pg_server'] . ';dbname=' . $_POST['pg_database'];
+                $content = str_replace("define ('STORAGE_SERVER', 'localhost');", "define ('STORAGE_SERVER', '".$_POST['pg_server']."');", $content);
+                $content = str_replace("define ('STORAGE_DB', 'poche');", "define ('STORAGE_DB', '".$_POST['pg_database']."');", $content);
+                $content = str_replace("define ('STORAGE_USER', 'poche');", "define ('STORAGE_USER', '".$_POST['pg_user']."');", $content);
+                $content = str_replace("define ('STORAGE_PASSWORD', 'poche');", "define ('STORAGE_PASSWORD', '".$_POST['pg_password']."');", $content);
+                $handle = new PDO($db_path, $_POST['pg_user'], $_POST['pg_password']);
+                
+                $moreQueries[] = "INSERT INTO entries (title, url, is_read, is_fav, content, user_id) VALUES
 ('Framabag, un nouveau service libre et gratuit', 'http://www.framablog.org/index.php/post/2014/02/05/Framabag-service-libre-gratuit-interview-developpeur', false, false, convert_from(decode('3c68323e556e6520696e74657276696577206465204e69636f6c61732c20736f6e2064c3a976656c6f70706575722e3c2f68323e0a3c703e3c656d3e496c206e6520766f757320612073c3bb72656d656e742070617320c3a96368617070c3a920717565206e6f74726520636f6e736f6d6d6174696f6e20646520636f6e74656e75732064752057656220657374207465727269626c656d656e74206368726f6e6f706861676520657420706172746963756c69c3a872656d656e7420667275737472616e746520746f757420c3a0206c6120666f6973c2a03a206e6f6e207365756c656d656e74206e6f757320706173736f6e732062656175636f7570202874726f70c2a03f292064652074656d707320656e206c69676e6520c3a0206578706c6f726572206c6573206d696e6573206175726966c3a8726573206465206c6120746f696c652c20792064c3a974656374616e742070c3a970697465732065742066696c6f6e732c206d616973206e6f757320736f6d6d657320737572746f757420636f6e7374616d6d656e7420656e206d616e7175652e204dc3aa6d65207369206e6f7573206e6520736f6d6d6573207061732064616e73206c65207a617070696e67206672c3a96ec3a9746971756520736920666163696c656d656e742064c3a96e6f6e63c3a920706172206c657320646f637465732070737963686f6c6f677565732071756920706f6e74696669656e7420737572206c65732064616e67657273206475206e756dc3a9726971756520706f7572206c6573206a65756e65732063657276656c6c65732c20696c206e6f7573207669656e7420736f7576656e74206c6520676fc3bb7420616d6572206465206ce28099696e6163686576c3a9c2a03a20706173206c652074656d707320646520746f7574206c69726520283c6120687265663d22687474703a2f2f66722e77696b74696f6e6172792e6f72672f77696b692f544c4452223e544c3b44523c2f613e2065737420646576656e75206c6520636c696e2064e28099c593696c206d692d6669677565206d692d72616973696e2064e28099756e652067c3a96ec3a9726174696f6e206465206c65637465757273207072657373c3a973292c207061732074726f70206c652074656d70732064652072c3a9666cc3a963686972206e6f6e20706c75732068c3a96c61732c20706173206c652074656d707320646520737569767265206c6120726962616d62656c6c65206465206c69656e73206173736f6369c3a97320c3a020756e2061727469636c65e280a63c6272202f3e3c2f656d3e3c2f703e0a3c703e3c656d3e506f7572206e6f757320646f6e6e657220626f6e6e6520636f6e736369656e63652c206e6f75732072616e67656f6e73207363727570756c657573656d656e7420756e206d61727175652d7061676520646520706c75732064616e7320756e20736f75732d646f73736965722071756920656e20636f6d706f7274652064c3a96ac3a0203235362c206e6f7573206e6f746f6e7320756e20c3a96cc3a96d656e7420646520706c75732064616e73206c6120746f756a6f757273207269646963756c656d656e74206c6f6e67756520746f75646f756c697374652c2062726566206e6f75732072656d6574746f6e7320c3a020706c757320746172642c2063e280996573742dc3a02d64697265206c6520706c757320736f7576656e742061757820696e74726f757661626c65732063616c656e6465732067726563717565732c206c6520736f696e206465206c69726520767261696d656e7420756e2061727469636c65206a7567c3a920696e74c3a972657373616e742c20646520726567617264657220756e6520766964c3a96f207369676e616cc3a96520706172206c65732072c3a97a6f73736f63696f732c206465206c69726520756e20636861706974726520656e746965722064e28099756e206f75767261676520646973706f6e69626c6520656e206c69676e65e280a63c6272202f3e3c2f656d3e3c2f703e0a3c703e3c656d3e416c6f7273206269656e2073c3bb722c20c3a02064c3a966617574206465206e6f757320646f6e6e657220746f7574206c652074656d70732071756920736572616974206ec3a963657373616972652c2064657320736f6c7574696f6e73206578697374656e7420706f7572206e6f7573207065726d657474726520646520c2abc2a06c69726520706c75732074617264c2a0c2bb20656e20736175766567617264616e74206c65207072c3a9636965757820706f6c6c656e206465206e6f7320627574696e61676573206465207369746520656e20736974652c2065742064e28099656e20666169726520756c74c3a97269657572656d656e7420766f747265206d69656cc2a03b2063e280996573742062656c20657420626f6e206d616973206c65732072756368657320736f6e7420756e207065752064697374616e7465732c20c3a7612073e28099617070656c6c65206c6520636c6f756420286e6f7320616d69732074656368696573206de280996f6e74206269656e206578706c697175c3a9206d616973206ae280996169207365756c656d656e7420636f6d70726973207175652064657320747275637320c3a0206d6f6920736f6e742073757220646573206d616368696e6573206c6f696e7461696e65732c20c3a761206e65206d652072617373757265207061732074726f702920657420656c6c657320736f6e7420736f7576656e742070726f707269c3a97461697265732c206e65206c61697373616e7420656e7472657220717565206c6573203c733e7574696c69736174657572733c2f733e20636f6e736f6d6d61746575727320706179616e74732065742071756920636f6e73656e74656e7420c3a0206c6575727320636f6e646974696f6e732e2053616e7320636f6d70746572207175652064652067726f7320626f7572646f6e73207669656e6e656e742070726f666974657220706c7573206f75206d6f696e73206469736372c3a874656d656e7420646520746f757465732063657320747261636573206465206e6f75732d6dc3aa6d657320717569207065726d657474656e74206465206d6f6ec3a97469736572206e6f7472652070726f66696cc2a03a207369206a6520636f6c6c65637465207375722063657320736572766963657320286e65206c6573206e6f6d6d6f6e73207061732c206a757374656d656e742920756e652073c3a97269652064e2809961727469636c657320737572206ce280996964c3a965206465204e6174757265206368657a2044696465726f742c206a6520726563657672616920646976657273657320736f6c6c696369746174696f6e7320706f757220646576656e697220636c69656e74206465206c6120626f757469717565204e61747572652026616d703b2044c3a9636f75766572746520647520626f756c65766172642044696465726f742e2045742073692064e280996176656e74757265206c65732070726f6772616d6d6573206465206c61204e5341206d6f756c696e656e7420737572206c6520736572766963652c206a6520736572616920706575742dc3aa74726520756e206a6f75722064616e7320756e65206c6973746520646573206d696c6974616e7473206e61747572697374657320696e64c3a973697261626c657320737572206c657320766f6c73206465206c612050616e416d20286a65206e65207361697320706c75732074726f70207369206a6520706c616973616e7465206cc3a02c2066696e616c656d656e74e280a6293c6272202f3e3c2f656d3e3c2f703e0a3c703e3c656d3e4c6120626f6e6e65206964c3a965c2a03a20c2abc2a0736520636f6e7374697475657220756e2072c3a9736572766f697220646520646f63756d656e74732073c3a96c656374696f6e6ec3a97320c3a020706172636f7572697220706c75732074617264c2a0c2bb20617070656c61697420646f6e6320756e6520617574726520626f6e6e65206964c3a9652c2063656c6c652064e2809961766f6972206c6520636f6e7472c3b46c652064652063652072c3a9736572766f69722c206465206e6f74726520636f6c6c656374696f6e20706572736f6e6e656c6c652e2043e28099657374204e69636f6c6173204cc59375696c6c65742c2063692d646573736f757320696e74657276696577c3a92c207175692073e28099792065737420636f6c6cc3a9206176656320756e652062656c6c65206170706c69636174696f6e20617070656cc3a96520657568e280a6206f75692c20617070656cc3a9652057616c6c616261672e3c6272202f3e3c2f656d3e3c2f703e0a3c703e3c656d3e4672616d61736f667420736f757469656e742064e28099617574616e7420706c757320736f6e20696e6974696174697665207175e280993c6120687265663d22687474703a2f2f7777772e6672616d61626c6f672e6f72672f696e6465782e7068702f706f73742f323031342f30312f33312f4765656b74696f6e6e6572642d57616c6c61626167223e6f6e206c7569206120636865726368c3a920646573206d6973c3a872657320706f757220756e6520686973746f697265206465206e6f6d3c2f613e206574207175e28099696c2065737420706f737369626c652064e28099696e7374616c6c657220736f692d6dc3aa6d6520756e6520636f7069652064652057616c6c616261672073757220736f6e2070726f70726520736974652e3c6272202f3e3c2f656d3e3c2f703e0a3c703e3c656d3e4c6520706574697420706c7573206465204672616d61736f66742c2072c3a97365617520746f756a6f7572732064c3a973697265757820646520766f75732070726f706f7365722064657320616c7465726e617469766573206c6962c3a972617472696365732c2063e2809965737420646520766f75732070726f706f736572202873757220696e736372697074696f6e207072c3a9616c61626c652920756e20616363c3a873206175204672616d616261672c2061757472656d656e742064697420766f7472652057616c6c616261672073757220756e2073657276657572204672616d612a2061766563206e6f74726520676172616e74696520646520636f6e666964656e7469616c6974c3a92e20436f6d6d6520706f7572206c65204672616d616e6577732c206e6f757320766f7573206163637565696c6c6f6e7320766f6c6f6e74696572732064616e73206c61206c696d697465206465206e6f732063617061636974c3a9732c20656e20766f757320696e766974616e7420c3a020766f7573206c616e6365722064616e7320766f747265206175746f2d68c3a962657267656d656e742064652057616c6c616261672e3c6272202f3e4365742061727469636c65206573742074726f70206c6f6e67c2a03f204d657474657a2d6c652064616e73203c6120687265663d22687474703a2f2f7777772e6672616d616261672e6f72672f696e6465782e706870223e766f747265204672616d616261673c2f613e20657420686f702e3c6272202f3e3c2f656d3e3c2f703e0a3c703e3c656d3e4672616d61626c6f67c2a03a2053616c7574204e69636f6c6173e280a62054752070657578207465207072c3a973656e74657220627269c3a876656d656e74c2a03f3c6272202f3e3c2f656d3e3c2f703e0a3c703e53616c7574c2a0212044c3a976656c6f70706575722050485020646570756973207175656c7175657320616e6ec3a96573206d61696e74656e616e742028313020616e73292c206ae28099616920766f756c75206d652072656d657474726520c3a0206e697665617520746563686e697175656d656e74207061726c616e742028646570756973203320616e732c206ae28099616920706173206d616c206cc3a26368c3a9206c6520636c6176696572292e20506f7572206d6573206265736f696e7320706572736f732c206ae28099616920646f6e63206372c3a9c3a920756e2070657469742070726f6a657420706f75722072656d706c6163657220756e6520736f6c7574696f6e2070726f707269c3a97461697265206578697374616e74652e2053616e7320617563756e65207072c3a974656e74696f6e2c206ae2809961692068c3a962657267c3a92063652070726f6a6574207375722047697468756220657420636f6d6d652063e28099657374206c61207365756c6520736f6c7574696f6e203c656d3e6f70656e20736f757263653c2f656d3e20646520636520747970652c206c65206e6f6d62726520646520706572736f6e6e657320696e74c3a972657373c3a965732061206175676d656e74c3a920e280a63c2f703e0a3c703e3c656d3e4c6573207574696c6973617465757273206465207365727669636573204672616d61736f6674206e65206c6520736176656e742070617320666f7263c3a96d656e742c206d6169732074752061732064c3a96ac3a020706173206d616c207061727469636970c3a920c3a0206c61204672616d6147616c617869652c206e6f6ec2a03f3c6272202f3e3c2f656d3e3c2f703e0a3c703e456e2065666665742e204ae28099616920636f6d6d656e63c3a920756e20706c7567696e20706f7572204672616d616e6577732c203c6120687265663d2268747470733a2f2f6769746875622e636f6d2f6e69636f736f6d622f74747273732d70757267652d6163636f756e7473223e74747273732d70757267652d6163636f756e74733c2f613e2c20717569207065726d6574206465206e6574746f796572206c61206261736520646520646f6e6ec3a9657320646520636f6d7074657320706c7573207574696c6973c3a9732e204d616973206365203c656d3e706c7567696e3c2f656d3e2061206265736f696e2064e28099c3aa747265207465726d696ec3a920c3a0203130302520706f757220c3aa74726520696e74c3a96772c3a9206175207365696e206465204672616d616e6577732028657420646f6e632064652054696e792054696e7920525353292c207369207175656c7175e28099756e20736f756861697465206de2809961696465722c20696c206ee2809979206120617563756e20736f7563692e3c6272202f3e4ae28099616920617573736920666169742031206f7520322061707061726974696f6e732064616e73206465732074726164756374696f6e7320706f7572204672616d61626c6f672e205269656e2064e2809965787472616f7264696e616972652c206a65206e652073756973207061732062696c696e6775652c20c3a761206d65207065726d6574206465206de28099656e747261c3ae6e65722e3c2f703e0a3c703e3c656d3e5061726c6f6e73206465207375697465206465206365207175692066c3a2636865c2a03a20746f6e206170706c69636174696f6e2057616c6c616261672c20656c6c652073e28099617070656c6c6169742070617320e2809c506f636865e2809d2c206176616e74c2a03f205475206e6f7573207261636f6e746573206ce28099686973746f697265c2a03f3c6272202f3e3c2f656d3e3c2f703e0a3c703e45756820656e20656666657420e280a62044c3a96ac3a02c20706f757271756f69203c656d3e706f6368653c2f656d3ec2a03f20506172636520717565206ce28099756e206465732074726f697320c2abc2a074c3a96e6f7273c2a0c2bb20737572206c65206d61726368c3a92073e28099617070656c6c65203c656d3e506f636b65743c2f656d3e2e20436f6d6d65206d6f6e206170706c69206ee28099c3a9746169742064657374696ec3a965207175e28099c3a0206d6f6e20757361676520706572736f6e6e656c2061752064c3a9706172742c206a65206e65206d6520737569732070617320746f72747572c3a9206269656e206c6f6e6774656d70732e3c2f703e0a3c703e43657420c3a974c3a92c206f6e2061206661696c6c69206368616e676572206465206e6f6d2c207175616e6420696c2079206120657520646520706c757320656e20706c75732064e280997574696c69736174657572732e2045742070756973206f6e2073e28099657374206469742071756520706f6368652c2063e28099c3a97461697420706173206d616c2c20c3a76120736f6e6e616974206269656e206672616ec3a761697320657420707569732061766563206c6573207175656c717565732064697a61696e65732064e280997574696c69736174657572732c206f6e206e652067c3aa6e657261697420706572736f6e6e652e3c2f703e0a3c703e43e280996573742073616e7320636f6d707465722061766563206c657320736f6369c3a974c3a97320616dc3a972696361696e6573206574206c6575722066c3a2636865757365206d616e696520646520766f756c6f697220656e766f796572206c657572732061766f6361747320c3a020746f757420626f7574206465206368616d702e204c65203233206a616e766965722c206ae280996169207265c3a77520756e20656d61696c206465206c61207061727420647520636162696e65742064e2809961766f6361747320646520506f636b6574206d652064656d616e64616e74206465206368616e676572206c65206e6f6d2c206c65206c6f676f2c206465206e6520706c7573207574696c69736572206c65207465726d6520e2809c726561642d69742d6c61746572e2809d2028c2abc2a06c6973657a206c6520706c75732074617264c2a0c2bb29206574206465206e6520706c757320646972652071756520506f636b6574206ee280996573742070617320677261747569742028746f7574206573742070617274692064e280993c6120687265663d2268747470733a2f2f747769747465722e636f6d2f77616c6c616261676170702f7374617475732f343233373836333635393434323235373932223e756e2074776565743c2f613e206fc3b9206a65207175616c6966696520506f636b657420646520c2abc2a06e6f6e2066726565c2a0c2bb20c3a0207361766f6972206e6f6e206c69627265292e20427265662c206dc3aa6d65207369206a652073656d626c6169732064616e73206d6f6e2064726f69742c206ae280996169207175616e64206dc3aa6d652070726973206c612064c3a9636973696f6e206465206368616e676572206465206e6f6d2065742057616c6c6162616720657374206ec3a92c20737569746520617578203c6120687265663d22687474703a2f2f6672616d61646174652e6f72672f73747564732e7068703f736f6e646167653d6c6c6370366f6a70796339706b6c6861223e64697a61696e65732064652070726f706f736974696f6e73206465206e6f6d207265c3a77565733c2f613e2e2043e2809965737420756e206dc3a96c616e676520656e747265206c652077616c6c61627920286465206c612066616d696c6c6520646573206b616e676f75726f75732c207175692073746f636b656e742064616e73206c65757220706f63686520636520717569206c65757220657374206368657229206574203c656d3e6261673c2f656d3e20286c6573207465726d657320736163202f207361636f636865202f2062657361636520736f6e7420c3a96e6f726dc3a96d656e7420726576656e7573292e204d616973206d61696e74656e616e742c206f6e207661206465206ce280996176616e742c20706c75732064652074656d707320c3a020706572647265206176656320c3a7612c206f6e2061206475207061696e20737572206c6120706c616e6368652e3c6272202f3e3c696d67207372633d22687474703a2f2f7777772e6672616d61626c6f672e6f72672f7075626c69632f5f696d672f6672616d61626c6f672f77616c6c6162795f626162792e6a70672220616c743d2277616c6c61627920617665632062c3a962c3a92064616e7320736120706f6368652220636c6173733d22633122207469746c653d2277616c6c61627920617665632062c3a962c3a92064616e7320736120706f63686522202f3e206372c3a96469742070686f746f203c6120687265663d22687474703a2f2f7777772e666c69636b722e636f6d2f70686f746f732f3236373832383634404e30302f353032373230323233342f696e2f70686f746f6c6973742d3845654a35412d6831544c36762d4e454c38312d636e4e6b536f2d39594d3174762d374b636736622d387a70416f612d61315a4c4d4e2d39594d3339722d3768355341442d38456548664c2d3845654677752d647456776e4d2d38756f4d45312d4a457a58652d47713471792d3932564a50522d43786531762d38483344324a2d61315a464e732d395937324b362d38456547784c2d354c353346782d354e6b454e732d3555384354592d354e6b7373682d6e6b6176462d3943726777502d3773644341612d647566324b682d685a65707a792d685a645531652d685a656f66462d685a656b44672d685a656741592d685a654d5a6e2d6a61486741662d3850383744322d354e677152762d6154343851422d685a645634592d685a654336342d45526770732d3556594747642d3556594a42312d354e6b72466b2d364a786837682d3768395075512d4552664d782d6831553169682d683155534278223e57696c6c69616d2057617262793c2f613e20717569206175746f72697365206578706c69636974656d656e7420746f7574652072c3a97574696c69736174696f6e2e3c2f703e0a3c703e3c656d3e426f6e2c20616c6f7273206578706c697175652d6d6f6920636520717565206a65207661697320706f75766f69722066616972652061766563204672616d61626167e280a63c6272202f3e3c2f656d3e3c2f703e0a3c703e416c6f7273204672616d616261672c20c3a761207465207065726d6574206465207465206372c3a9657220756e20636f6d7074652067726174756974656d656e74206574206c696272656d656e7420706f757220706f75766f6972207574696c697365722057616c6c616261672e205365756c6520746f6e206164726573736520656d61696c20657374206ec3a963657373616972652c206f6e207365206368617267652064e28099696e7374616c6c6572206574206465206d657474726520c3a0206a6f75722057616c6c6162616720706f757220746f692e20547520706575782064e2809961696c6c657572732070726f6669746572203c6120687265663d22687474703a2f2f7777772e6672616d61736f66742e6e65742f23746f705067436c6f7564223e64e280996175747265732073657276696365732070726f706f73c3a97320706172204672616d61736f6674206963693c2f613e2e3c2f703e0a3c703ec380206365206a6f75722c20696c207920612038333420636f6d70746573206372c3a9c3a97320737572204672616d616261672e3c2f703e0a3c703e3c656d3e566f7573206176657a20767261696d656e7420636f6ec3a7752063652073657276696365206166696e207175e280996f6e20707569737365206ce280997574696c69736572206176656320756e206d6178696d756d2064e280996f7574696c732c206e6f6ec2a03f3c6272202f3e3c2f656d3e3c2f703e0a3c703e4175746f7572206465206ce280996170706c69636174696f6e207765622c20696c206578697374652064c3a96ac3a020646573206170706c69636174696f6e7320706f757220736d61727470686f6e65732028416e64726f69642065742057696e646f77732050686f6e65292c2064657320657874656e73696f6e732046697265666f7820657420476f6f676c65204368726f6d652e3c2f703e0a3c703e436f6d6d652057616c6c6162616720706f7373c3a864652064657320666c7578205253532c2063e2809965737420666163696c65206465206c697265206c65732061727469636c657320736175766567617264c3a97320737572207361206c697365757365202873692063656c6c652d6369207065726d6574206465206c6972652064657320666c757820525353292e2043616c696272652028c2abc2a06c6f67696369656c206465206c6563747572652c2064652067657374696f6e206465206269626c696f7468c3a87175657320657420646520636f6e76657273696f6e206465206669636869657273206e756dc3a972697175657320646520747970652065626f6f6b206f75206c6976726520c3a96c656374726f6e69717565c2a0c2bb2c6e6f757320646974207562756e74752d66722e6f72672920696e74c3a867726520646570756973207175656c717565732073656d61696e6573206d61696e74656e616e74206c6120706f73736962696c6974c3a92064652072c3a9637570c3a9726572206c65732061727469636c6573206e6f6e206c75732c20707261746971756520706f757220666169726520756e20666963686965722065507562c2a0213c2f703e0a3c703e44e28099617574726573206170706c69636174696f6e7320776562207065726d657474656e74206ce28099696e74c3a967726174696f6e20617665632057616c6c61626167202846726573685253532c204c6565642065742054696e792054696e792052535320706f7572206c657320616772c3a96761746575727320646520666c7578292e204ce2809941504920717569207365726120646973706f6e69626c652064616e73206c612070726f636861696e652076657273696f6e2064652057616c6c61626167207065726d657474726120656e636f726520706c75732064e28099696e74657261637469766974c3a92e3c2f703e0a3c703e3c656d3e5920612d742d696c20756e206d6f6465206465206c65637475726520686f7273206c69676e65206f75206573742d6365207175652063e28099657374207072c3a9767520706f7572206c65732070726f636861696e65732076657273696f6e73c2a03f3c6272202f3e3c2f656d3e3c2f703e0a3c703e496c2079206120756e2070736575646f206d6f646520686f7273206c69676e652c20646973706f6e69626c652061766563206ce280996170706c69636174696f6e20416e64726f69642e204f6e20706575742072c3a9637570c3a9726572202876696120756e20666c75782052535329206c65732061727469636c6573206e6f6e206c757320717565206ce280996f6e206120736175766567617264c3a9732e20556e6520666f69732064c3a9636f6e6e656374c3a92c206f6e207065757420636f6e74696e75657220c3a0206c6972652073757220736f6e20736d61727470686f6e65206f75207361207461626c65747465206c65732061727469636c65732e2050617220636f6e7472652c20696c206d616e7175652064657320666f6e6374696f6e6e616c6974c3a973c2a03a207175616e64207475206d61727175657320756e2061727469636c6520636f6d6d65206c752c206365206ee28099657374207061732073796e6368726f6e6973c3a92061766563206c612076657273696f6e207765622064652057616c6c616261672e204ae28099657370c3a8726520717565206a652073756973207072657371756520636c6169722064616e73206d6573206578706c69636174696f6e732e3c2f703e0a3c703e506f7572206c612076322c20717569206573742064c3a96ac3a020656e20636f7572732064652064c3a976656c6f7070656d656e742c206fc3b9206a652073756973206269656e20616964c3a9207061722056696e63656e74204a6f757373652c206f6e2061757261206c6120706f73736962696c6974c3a92064e2809961766f697220756e2076726169206d6f646520686f7273206c69676e652e3c2f703e0a3c703e3c656d3e416c6f7273207369206f6e2076657574206169646572202f2070617274696369706572202f20747269666f75696c6c6572206c6520636f6465202f20766f757320656e766f79657220646573207265746f7572732c206f6e206661697420636f6d6d656e74c2a03f3c6272202f3e3c2f656d3e3c2f703e0a3c703e4f6e207065757420616964657220646520706c75736965757273206661c3a76f6e73c2a03a3c2f703e0a3c756c3e3c6c693e7574696c697365722077616c6c61626167206574206e6f75732072656d6f6e746572206c65732070726f626cc3a86d65732072656e636f6e7472c3a973c2a03b3c2f6c693e0a3c6c693e706172746963697065722061752064c3a976656c6f7070656d656e74206465206ce280996170706c69636174696f6e2068747470733a2f2f6769746875622e636f6d2f77616c6c616261672f77616c6c616261672053692053696c6578202f2053796d666f6e7932202f2048544d4c35202f206574632e207465207061726c656e742c206ee2809968c3a97369746520706173c2a0213c2f6c693e0a3c6c693e636f6d6d6520746f75742070726f6a65742c206c652067726f7320706f696e74206e6f697220657374206c65206d616e71756520646520646f63756d656e746174696f6e2e203c6120687265663d22687474703a2f2f646f632e77616c6c616261672e6f7267223e456c6c652065737420646973706f206963693c2f613e206d61697320696c206d616e71756520706c65696e2064652063686f73657320657420746f7574206ee280996573742070617320c3a0206a6f7572c2a03b3c2f6c693e0a3c6c693e7061726c65722064652057616c6c61626167206175746f757220646520766f7573c2a03b3c2f6c693e0a3c6c693e696c20657869737465203c6120687265663d2268747470733a2f2f666c617474722e636f6d2f7468696e672f313236353438302f706f6368652d612d726561642d69742d6c617465722d6f70656e2d736f757263652d73797374656d223e756e20636f6d70746520466c617474723c2f613e2e3c2f6c693e0a3c2f756c3e3c703e3c656d3e4c65206d6f74206465206c612066696ee280a63f3c6272202f3e3c2f656d3e3c2f703e0a3c703e4d6572636920c3a0204672616d61736f66742064e280996163637565696c6c697220657420646520736f7574656e69722057616c6c61626167c2a0213c2f703e0a3c703e4c6120726f7574652065737420656e636f7265206269656e206c6f6e67756520706f7572206e6520706c7573207574696c6973657220646520736f6c7574696f6e732070726f707269c3a97461697265732c206d616973206f6e2064657672616974207920617272697665722c206e6f6ec2a03f3c2f703e0a3c703e3c696d67207372633d22687474703a2f2f7777772e6672616d61626c6f672e6f72672f7075626c69632f5f696d672f6672616d61626c6f672f706c65696e4c6573506f636865732e706e672220616c743d226672616d61736f667420706c65696e206c657320706f636865732220636c6173733d22633122207469746c653d226672616d61736f667420706c65696e206c657320706f6368657322202f3e3c6272202f3e3c6120687265663d22687474703a2f2f6672616d616c61622e6f72672f676b6e642d63726561746f722f223e6861636b657a2047c3a967c3a9c2a0213c2f613e3c2f703e0a', 'hex'), 'UTF8'), 1),
 ('wallabag/wallabag', 'https://github.com/wallabag/wallabag', false, false, convert_from(decode('3c7370616e20636c6173733d226e616d65223e524541444d452e6d643c2f7370616e3e3c703e77616c6c6162616720697320612073656c6620686f737461626c65206170706c69636174696f6e20616c6c6f77696e6720796f7520746f206e6f74206d69737320616e7920636f6e74656e7420616e796d6f72652e20436c69636b2c20736176652c2072656164206974207768656e20796f752063616e2e20497420657874726163747320636f6e74656e7420736f207468617420796f752063616e2072656164206974207768656e20796f7520686176652074696d652e3c2f703e0a3c703e4d6f726520696e666f726d6174696f6e73206f6e206f757220776562736974653a203c6120687265663d22687474703a2f2f77616c6c616261672e6f7267223e77616c6c616261672e6f72673c2f613e3c2f703e0a3c68323e3c6120636c6173733d22616e63686f722220687265663d2268747470733a2f2f6769746875622e636f6d2f77616c6c616261672f77616c6c61626167236c6963656e7365223e3c2f613e4c6963656e73653c2f68323e0a3c703e436f7079726967687420c2a920323031302d32303134204e69636f6c6173204cc59375696c6c6574203c6120687265663d226d61696c746f3a6e69636f6c6173406c6f6575696c6c65742e6f7267223e6e69636f6c6173406c6f6575696c6c65742e6f72673c2f613e205468697320776f726b20697320667265652e20596f752063616e2072656469737472696275746520697420616e642f6f72206d6f6469667920697420756e64657220746865207465726d73206f662074686520446f205768617420546865204675636b20596f752057616e7420546f205075626c6963204c6963656e73652c2056657273696f6e20322c206173207075626c69736865642062792053616d20486f63657661722e205365652074686520434f5059494e472066696c6520666f72206d6f72652064657461696c732e3c2f703e0a', 'hex'), 'UTF8'), 1),
 ('a self hostable application for saving web pages | wallabag', 'https://www.wallabag.org/', false, true, convert_from(decode('3c64697620636c6173733d22726f77223e0a3c64697620636c6173733d22636f6c2d6c672d3820636f6c2d6d642d313220636f6c2d78732d313220636f6c2d736d2d3132223e0a3c703e77616c6c616261672028666f726d65726c7920706f636865292069732061203c7374726f6e673e73656c6620686f737461626c65206170706c69636174696f6e20666f7220736176696e67207765622070616765733c2f7374726f6e673e2e20556e6c696b65206f746865722073657276696365732cc2a077616c6c6162616720697320667265652028617320696e2066726565646f6d2920616e64206f70656e20736f757263652e3c2f703e0a3c2f6469763e0a0a3c2f6469763e0a3c64697620636c6173733d22726f77223e0a3c64697620636c6173733d22636f6c2d6c672d3820636f6c2d6d642d313220636f6c2d78732d313220636f6c2d736d2d3132223e0a3c703e576974682074686973206170706c69636174696f6e20796f752077696c6c206e6f74206d69737320636f6e74656e7420616e796d6f72652e203c7374726f6e673e436c69636b2c20736176652c2072656164206974207768656e20796f752077616e743c2f7374726f6e673e2e2049742073617665732074686520636f6e74656e7420796f752073656c65637420736f207468617420796f752063616e2072656164206974207768656e20796f7520686176652074696d652e3c2f703e0a3c2f6469763e0a0a3c2f6469763e0a3c64697620636c6173733d22726f77223e0a3c64697620636c6173733d22636f6c2d6c672d3620636f6c2d6d642d313220636f6c2d78732d313220636f6c2d736d2d3132223e0a3c68323e486f7720697420776f726b733c2f68323e0a3c703e5468616e6b7320746f2074686520626f6f6b6d61726b6c6574206f72203c61207469746c653d22446f776e6c6f6164732220687265663d22687474703a2f2f7777772e77616c6c616261672e6f72672f646f776e6c6f6164732f223e74686972642d7061727479206170706c69636174696f6e733c2f613e2c20796f75207361766520616e2061727469636c6520696e20796f7572c2a077616c6c6162616720746f2072656164206974206c617465722e205468656e2c207768656e20796f75206f70656e20796f75722077616c6c616261672c203c7374726f6e673e796f752063616e20636f6d666f727461626c79207265616420796f75722061727469636c65733c2f7374726f6e673e2e3c2f703e0a3c68323e486f7720746f207573652077616c6c616261673c2f68323e0a3c703e5468657265206172652074776f207761797320746f207573652077616c6c616261673a20796f752063616e203c6120687265663d22687474703a2f2f7777772e77616c6c616261672e6f72672f6672657175656e746c792d61736b65642d7175657374696f6e732f23486f775f63616e5f495f696e7374616c6c5f77616c6c616261675f616e645f776861745f6172655f7468655f726571756972656d656e7473223e696e7374616c6c2069743c2f613ec2a06f6e20796f75722077656220736572766572206f7220796f752063616ec2a03c6120687265663d22687474703a2f2f6170702e696e746865706f6368652e636f6d223e63726561746520616e206163636f756e743c2f613ec2a06174204672616d616261672028776520696e7374616c6c20616e642075706772616465c2a077616c6c6162616720666f7220796f75292e3c2f703e0a3c2f6469763e0a0a3c2f6469763e0a', 'hex'), 'UTF8'), 1)";
-                    $moreQueries[] = "INSERT INTO tags (value) VALUES ('opensource')";
-                    $moreQueries[] = "INSERT INTO tags_entries (entry_id, tag_id) VALUES (2, 1)";
+                $moreQueries[] = "INSERT INTO tags (value) VALUES ('opensource')";
+                $moreQueries[] = "INSERT INTO tags_entries (entry_id, tag_id) VALUES (2, 1)";
 
-                    $sql_structure = file_get_contents('install/postgres.sql');
-                }
-
-                $content = str_replace("define ('STORAGE', 'sqlite');", "define ('STORAGE', '".$_POST['db_engine']."');", $content);
-                file_put_contents('inc/poche/config.inc.php', $content);
+                $sql_structure = file_get_contents('install/postgres.sql');
             }
+            // create database structure
+            $query = $handle->exec($sql_structure);
+        } catch (PDOException $e) {
+            $errors[] = $e->getMessage();
+            $continue = false;
+        }
+        }
+    }
+    if ($continue) {
+        $sql = "INSERT INTO users (username, password, name, email) VALUES (?, ?, ?, '')";
+        $params = array($username, $salted_password, $username);
+        $query = executeQuery($handle, $sql, $params);
 
-            if ($continue) {
-
-                function executeQuery($handle, $sql, $params) {
-                    try
-                    {
-                        $query = $handle->prepare($sql);
-                        $query->execute($params);
-                        return $query->fetchAll();
-                    }
-                    catch (Exception $e)
-                    {
-                        return FALSE;
-                    }
-                }
-
-                if ($_POST['db_engine'] != "sqlite") {
-                    // create database structure
-                    $query = $handle->exec($sql_structure);
-                }
-
-                // Create user
-                $handle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
-
-                $sql = "INSERT INTO users (username, password, name, email) VALUES (?, ?, ?, '')";
-                $params = array($username, $salted_password, $username);
-                $query = executeQuery($handle, $sql, $params);
-
-                $id_user = (int)$handle->lastInsertId('users_id_seq');
+        $id_user = (int)$handle->lastInsertId('users_id_seq');
 
-                $sql = 'INSERT INTO users_config ( user_id, name, value ) VALUES (?, ?, ?)';
-                $params = array($id_user, 'pager', '10');
-                $query = executeQuery($handle, $sql, $params);
+        $sql = 'INSERT INTO users_config ( user_id, name, value ) VALUES (?, ?, ?)';
+        $params = array($id_user, 'pager', '10');
+        $query = executeQuery($handle, $sql, $params);
 
-                $sql = 'INSERT INTO users_config ( user_id, name, value ) VALUES (?, ?, ?)';
-                $params = array($id_user, 'language', 'en_EN.UTF8');
-                $query = executeQuery($handle, $sql, $params);
+        $sql = 'INSERT INTO users_config ( user_id, name, value ) VALUES (?, ?, ?)';
+        $params = array($id_user, 'language', 'en_EN.UTF8');
+        $query = executeQuery($handle, $sql, $params);
 
-                foreach ($moreQueries as $query) {
-                    executeQuery($handle, $query, array());
-                }
+        foreach ($moreQueries as $query) {
+            executeQuery($handle, $query, array());
+        }
+        
 
-                $successes[] = 'wallabag is now installed. You can now <a href="index.php?clean=0">access it !</a>';
-            }
+    if (!copy('inc/poche/config.inc.default.php', 'inc/poche/config.inc.php')) {
+        $errors[] = 'Installation aborted, impossible to create inc/poche/config.inc.php file. Maybe you don\'t have write access to create it.';
+    } else {
+        if ($_POST['db_engine'] != 'sqlite') {
+            $content = str_replace("define ('STORAGE', 'sqlite');", "define ('STORAGE', '".$_POST['db_engine']."');", $content);
+            file_put_contents('inc/poche/config.inc.php', $content);
         }
+        $content = str_replace("define ('SALT', '');", "define ('SALT', '".$salt."');", $content);
+        file_put_contents('inc/poche/config.inc.php', $content);
+        $final = true;
     }
 }
+}
 ?>
 <!DOCTYPE html>
 <html>
@@ -210,6 +181,175 @@ else if (isset($_POST['install'])) {
         <link rel="stylesheet" href="themes/baggy/css/print.css" media="print">
         <script src="themes/_global/js/jquery-2.0.3.min.js"></script>
         <script src="themes/baggy/js/init.js"></script>
+
+
+        <style type="text/css">
+a {
+color:#000;
+text-decoration:underline;
+padding:0 1px;
+}
+a:hover {
+color:#fff;
+background-color:#333;
+text-decoration:none;
+padding:0 1px;
+}
+p {
+margin:0;
+padding:5px 0;
+}
+em {
+font-style:normal;
+background-color:#ffc;
+padding: 0.1em 0;
+}
+ul, ol {
+margin:10px 0 10px 20px;
+padding:0 0 0 15px;
+}
+ul li, ol li {
+margin:0 0 7px 0;
+padding:0 0 0 3px;
+}
+h2 {
+font-size:18px;
+padding:0;
+}
+h3 {
+font-size:16px;
+padding:0;
+margin:20px 0 5px 0;
+}
+h4 {
+font-size:14px;
+padding:0;
+margin:15px 0 5px 0;
+}
+code {
+font-size:1.1em;
+background-color:#f3f3ff;
+color:#000;
+}
+em strong {
+text-transform: uppercase;
+}
+table#chart {
+border-collapse:collapse;
+}
+table#chart th {
+background-color:#eee;
+padding:2px 3px;
+border:1px solid #fff;
+}
+table#chart td {
+text-align:center;
+padding:2px 3px;
+border:1px solid #eee;
+}
+table#chart tr.enabled td {
+/* Leave this alone */
+}
+table#chart tr.disabled td,
+table#chart tr.disabled td a {
+}
+table#chart tr.disabled td a {
+text-decoration:underline;
+}
+div.chunk {
+margin:20px 0 0 0;
+padding:0 0 10px 0;
+border-bottom:1px solid #ccc;
+}
+.footnote,
+.footnote a {
+font:10px/12px verdana, sans-serif;
+color:#aaa;
+}
+.footnote em {
+background-color:transparent;
+font-style:italic;
+}
+.good{
+background-color:#52CC5B;
+}
+.bad{
+background-color:#F74343;
+font-style:italic;
+font-weight: bold;
+}
+.pass{
+background-color:#FF9500;
+}
+.detail {
+cursor: pointer;
+}
+.descriptions {
+    margin-left: 10%;
+    position: relative;
+    top: 50%;
+}
+.database_inputs {
+    float: left;
+    width: 50%
+}
+.database_info {
+    width: 100%;
+    overflow: auto;
+}
+.compatibity_result {
+       margin: auto;
+       max-width: 350px;
+       min-height: 50px;
+       line-height: 50px;
+       text-align: center;
+   margin-bottom: 30px;
+   border-radius: 3px;
+}
+
+h2, legend {
+       font-size: 30px;
+       text-transform: uppercase;
+       font-family: "PT Sans",sans-serif;
+}
+
+legend:after {
+    content: "";
+    height: 4px;
+    width: 70px;
+    background-color: #000;
+    display: block;
+}
+#reloadpage {
+cursor: pointer;
+background-color: #000;
+color: #FFF;
+padding: 0.5em 1em;
+display: inline-block;
+border: 1px solid #000;
+}
+#reloadpage:hover {
+    background-color: #FFF;
+    color: #000;
+}
+.final {
+   margin-top: 10%;
+   margin-left: 30%;
+   max-width: 400px;
+   text-align: center;
+   border-radius: 6px;
+}
+.final h1 {
+   line-height: 50px;
+}
+
+.final em {
+   margin-top: 40px;
+   font-size: 12px;
+}
+
+</style>
+
     </head>
     <body>
         <header class="w600p center mbm">
@@ -220,11 +360,12 @@ else if (isset($_POST['install'])) {
         <div id="main">
             <button id="menu" class="icon icon-menu desktopHide"><span>Menu</span></button>
             <ul id="links" class="links">
-                <li><a href="http://www.wallabag.org/frequently-asked-questions/">FAQ</a></li>
-                <li><a href="http://doc.wallabag.org/">doc</a></li>
-                <li><a href="http://www.wallabag.org/help/">help</a></li>
-                <li><a href="http://www.wallabag.org/">wallabag.org</a></li>
-            </ul> 
+                <li><a href="docs/" target="_blank">Offline Doc</a></li>
+                <li><a href="http://doc.wallabag.org/" target="_blank">Online doc</a></li>
+                <li><a href="http://support.wallabag.org/" target="_blank">help</a></li>
+                <li><a href="http://www.wallabag.org/" target="_blank">wallabag.org</a></li>
+            </ul>
+            <?php if (!$final) : ?>
             <?php if (!empty($errors)) : ?>
                 <div class='messages error install'>
                     <p>Errors during installation:</p>
@@ -258,56 +399,269 @@ else if (isset($_POST['install'])) {
                 <?php endif; ?>    
             <?php endif; ?>
             <p>To install wallabag, you just have to fill the following fields. That's all.</p>
-            <p>If you need help, you can read the doc: <a href="docs/" target="_blank">offline documentation</a> and <a href="http://doc.wallabag.org" target="_blank">online one</a> (already up-to-date).</p>
-            <p>Don't forget to check your server compatibility <a href="install/wallabag_compatibility_test.php?from=install">here</a>.</p>
-            <form method="post">
-                <fieldset>
-                    <legend><strong>Technical settings</strong></legend>
-                    <?php if (!is_dir('vendor')) : ?>
-                        <div class='messages notice install'>wallabag needs twig, a template engine (<a href="http://twig.sensiolabs.org/">?</a>). Two ways to install it:<br />
-                        <ul>
-                            <li>automatically download and extract vendor.zip into your wallabag folder. 
-                            <p><input type="submit" name="download" value="Download vendor.zip" /></p>
-                            <?php if (!extension_loaded('zip')) : ?>
-                                <b>Be careful, zip extension is not enabled in your PHP configuration. You'll have to unzip vendor.zip manually.</b>
-                            <?php endif; ?>
-                                <em>This method is mainly recommended if you don't have a dedicated server.</em></li>
-                            <li>use <a href="http://getcomposer.org/">Composer</a> :<pre><code>curl -s http://getcomposer.org/installer | php
-php composer.phar install</code></pre></li>
-                        </ul>
-                        </div>
-                    <?php endif; ?>
+            
+            <div>
+                   <h2>Server compatibility test</h2>
+                   <?php if (isOkay()) { ?>
+                       <div class="compatibity_result detail good">All good</div>
+                           <?php } elseif (isPassing()) { ?>
+                           <div class="compatibity_result detail pass">Some warnings, but the minimum is here !</div>
+                           <?php } else  { ?>
+                           <div class="compatibity_result detail bad">Bad news : you can't run wallabag</div>
+                           <?php } $status = status(); $pdo_drivers = pdoDrivers(); ?>
+            </div>
+
+            <div class="details">
+                <div>
+                    <hr>
+                    <h2 style="text-align:center;"><?php echo $status['app_name']; ?>: Compatibility Test</h2>
+                    <table cellpadding="0" cellspacing="0" border="0" width="100%" id="chart">
+                        <thead>
+                            <tr>
+                                <th>Test</th>
+                                <th>Should Be</th>
+                                <th>What You Have</th>
+                                <th>What it means</th>
+                            </tr>
+                        </thead>
+                        <tbody>
+                            <tr class="<?php echo ($status['php']) ? 'enabled' : 'disabled'; ?>">
+                                <td>PHP</td>
+                                <td>5.3.3 or higher</td>
+                                <td class="<?php echo ($status['php']) ? 'good' : 'disabled'; ?>"><?php echo phpversion(); ?></td>
+                                <td><?php echo ($status['php']) ? '<strong>PHP:</strong> You are running a supported version of PHP.' : '<strong>PHP:</strong> You are running an unsupported version of PHP. <strong>' . $status['app_name'] . ' will not work here.</strong>' ;?></td>
+                            </tr>
+                            <tr class="<?php echo ($status['pdo']) ? 'enabled' : 'disabled'; ?>">
+                                <td><a href="http://php.net/manual/en/book.pdo.php">PDO</a></td>
+                                <td>Enabled</td>
+                                <?php echo ($status['pdo']) ? '<td class="good">Enabled</span>' : '<td class="bad">Disabled'; ?></td>
+                                <td><?php echo ($status['pdo']) ? '<strong>PDO:</strong> You have PDO support enabled.' : '<strong>PDO:</strong> Your PHP installation doesn\'t support PHP PDO. <strong>' . $status['app_name'] . ' will not work here.</strong>' ?></td>
+                            </tr>
+                            <tr class="<?php echo ($status['pdo_drivers_passing']) ? 'enabled' : 'disabled'; ?>">
+                               <td>PDO Drivers</td>
+                               <td>One of the PDO drivers must be installed</td>
+                               <?php echo ($status['pdo_drivers_passing']) ? '<td class="good">At least one driver is enabled</span>' : '<td class="bad">No driver available'; ?></td>
+                               <td><?php echo ($status['pdo_drivers_passing']) ? '<strong>PDO:</strong> You have at least one PDO driver installed.' : '<strong>PDO Drivers:</strong> Your PHP installation doesn\'t have any PDO driver installed. <strong>' . $status['app_name'] . ' will not work here.</strong>' ?></td>
+                            </tr>
+                            <tr class="<?php echo ($status['xml']) ? 'enabled' : 'disabled'; ?>">
+                                <td><a href="http://php.net/xml">XML</a></td>
+                                <td>Enabled</td>
+                                <?php echo ($status['xml']) ? '<td class="good">Enabled, and sane</span>' : '<td class="bad">Disabled, or broken'; ?></td>
+                                <td><?php echo ($status['xml']) ? '<strong>XML:</strong> You have XMLReader support or a version of XML support that isn\'t broken installed.' : '<strong>XML:</strong> Your PHP installation doesn\'t support XML parsing. <strong>' . $status['app_name'] . ' will not work here.</strong>' ?></td>
+                            </tr>
+                            <tr class="<?php echo ($status['pcre']) ? 'enabled' : 'disabled'; ?>">
+                                <td><a href="http://php.net/pcre">PCRE</a></td>
+                                <td>Enabled</td>
+                                <?php echo ($status['pcre']) ? '<td class="good">Enabled' : '<td class="bad">Disabled'; ?></td>
+                                <td><?php echo ($status['pcre']) ? '<strong>PCRE:</strong> You have PCRE support installed.' : '<strong>PCRE:</strong> Your PHP installation doesn\'t support Perl-Compatible Regular Expressions. <strong>' . $status['app_name'] .' will not work here.</strong>' ?></td>
+                            </tr>
+                            <tr class="<?php echo ($status['zlib']) ? 'enabled' : 'disabled'; ?>">
+                                <td><a href="http://php.net/zlib">Zlib</a></td>
+                                <td>Enabled</td>
+                                <?php echo ($status['zlib']) ? '<td class="good">Enabled' : '<td class="bad">Disabled'; ?></td>
+                                <td><?php echo ($status['zlib']) ? '<strong>Zlib:</strong> You have <code>Zlib</code> enabled.  This allows SimplePie to support GZIP-encoded pages.' : '<strong>Zlib:</strong> The <code>Zlib</code> extension is not available.  SimplePie will ignore any GZIP-encoding, and instead handle pages as uncompressed text.' ?></td>
+                            </tr>
+                            <tr class="<?php echo ($status['mbstring']) ? 'enabled' : 'disabled'; ?>">
+                                <td><a href="http://php.net/mbstring">mbstring</a></td>
+                                <td>Enabled</td>
+                                <?php echo ($status['mbstring']) ? '<td class="good">Enabled' : '<td class="bad">Disabled'; ?></td>
+                                <td rowspan="2"><?php if(($status['mbstring']) && ($status['iconv'])) { ?><strong>mbstring and iconv:</strong> You have both <code>mbstring</code> and <code>iconv</code> installed!  This will allow <?php echo $status['app_name']; ?> to handle the greatest number of languages.
+                                <?php } elseif ($status['mbstring']) { ?><strong>mbstring:</strong> <code>mbstring</code> is installed, but <code>iconv</code> is not.
+                                <?php } elseif ($status['iconv']) { ?><strong>iconv:</strong> <code>iconv</code> is installed, but <code>mbstring</code> is not.
+                                <?php } else { ?><strong>mbstring and iconv:</strong> <em>You do not have either of the extensions installed.</em> This will significantly impair your ability to read non-English pages, as well as even some English ones.
+                                <?php } ?>
+                                </td>
+                            </tr>
+                            <tr class="<?php echo ($status['iconv']) ? 'enabled' : 'disabled'; ?>">
+                                <td><a href="http://php.net/iconv">iconv</a></td>
+                                <td>Enabled</td>
+                                <?php echo ($status['iconv']) ? '<td class="good">Enabled' : '<td class="bad">Disabled'; ?></td>
+                            </tr>
+                            <tr class="<?php echo ($status['dom']) ? 'enabled' : 'disabled'; ?>">
+                                <td><a href="http://php.net/manual/en/book.dom.php">DOM / XML extension</a></td>
+                                <td>Enabled</td>
+                                <?php echo ($status['dom']) ? '<td class="good">Enabled' : '<td class="bad">Disabled'; ?></td>
+                                <td><?php echo ($status['dom']) ? '<strong>DOM/XML:</strong> You can parse <em>ini</em> files.' : '<strong>DOM/XML:</strong> Your PHP configuration isn\'t standard, you\'re missing PHP-DOM.  You may try to install a package or recompile PHP. <strong>' . $status['app_name'] . ' will not work here.</strong>'; ?></td>
+                            </tr>
+                            <tr class="<?php echo ($status['filter']) ? 'enabled' : 'disabled'; ?>">
+                                <td><a href="http://uk.php.net/manual/en/book.filter.php">Data filtering</a></td>
+                                <td>Enabled</td>
+                                <?php echo ($status['filter']) ? '<td class="good">Enabled' : '<td class="pass">Disabled'; ?></td>
+                                <td><?php echo ($status['filter']) ? '<strong>Data filtering:</strong> You can use the PHP build-in DOM to operate on XML documents.' : '<strong>Data filtering:</strong> Your PHP configuration has the filter extension disabled.  <strong>' . $status['app_name'] . ' will not work here.</strong>' ?></td>
+                            </tr>
+                            <tr class="<?php echo ($status['gd']) ? 'enabled' : 'disabled'; ?>">
+                                <td><a href="http://php.net/manual/en/book.image.php">GD</a></td>
+                                <td>Enabled</td>
+                                <?php echo ($status['gd']) ? '<td class="good">Enabled' : '<td class="pass">Disabled'; ?></td>
+                                <td><?php echo($status['gd']) ? '<strong>GD:</strong> You have <code>GD</code> support installed.' : '<strong>GD:</strong> The <code>GD</code> extension is not available.  ' . $status['app_name'] . ' will not be able to download pictures locally on your server.' ?></td>
+                            </tr>                   
+                            <tr class="<?php echo ($status['tidy']) ? 'enabled' : 'disabled'; ?>">
+                                <td><a href="http://php.net/tidy">Tidy</a></td>
+                                <td>Enabled</td>
+                                <?php echo ($status['tidy']) ? '<td class="good">Enabled' : '<td class="pass">Disabled'; ?></td>
+                                <td><?php echo ($status['tidy']) ? '<strong>Tidy:</strong> You have <code>Tidy</code> support installed.' : '<strong>Tidy:</strong> The <code>Tidy</code> extension is not available.' . $status['app_name'] . ' should still work with most pages, but you may experience problems with some. You can install it with <code>sudo apt-get install php5-tidy</code> and then reload Apache <code>sudo service apache2 reload</code>.' ; ?></td>
+                            </tr>
+                            <tr class="<?php echo ($status['curl']) ? 'enabled' : 'disabled'; ?>">
+                                <td><a href="http://php.net/curl">cURL</a></td>
+                                <td>Enabled</td>
+                                <?php echo (extension_loaded('curl')) ? '<td class="good">Enabled' : '<td class="pass">Disabled'; ?></td>
+                                <td><?php echo ($status['curl']) ? '<strong>cURL:</strong> You have <code>cURL</code> support installed.' : '<strong>cURL:</strong> The <code>cURL</code> extension is not available.  SimplePie will use <code>fsockopen()</code> instead.' ?></td>
+                            </tr>
+                            <tr class="<?php echo ($status['parse_ini']) ? 'enabled' : 'disabled'; ?>">
+                                <td><a href="http://uk.php.net/manual/en/function.parse-ini-file.php">Parse ini file</td>
+                                <td>Enabled</td>
+                                <?php echo ($status['parse_ini']) ? '<td class="good">Enabled' : '<td class="bad">Disabled'; ?></td>
+                                <td><?php echo ($status['parse_ini']) ? '<strong>Parse ini:</strong> You can parse <em>ini</em> files.' : '<strong>Parse ini files function :</strong> Bad luck : your webhost has decided to block the use of the <em>parse_ini_file</em> function. <strong>' . $status['app_name'] . ' will not work here.' ?></td>
+                            </tr>
+                            <tr class="<?php echo ($status['parallel']) ? 'enabled' : 'disabled'; ?>">
+                                <td>Parallel URL fetching</td>
+                                <td>Enabled</td>
+                                <?php echo ($status['parallel']) ? '<td class="good">Enabled' : '<td class="pass">Disabled'; ?></td>
+                                <td><?php echo ($status['parallel']) ? '<strong>Parallel URL fetching:</strong> You have <code>HttpRequestPool</code> or <code>curl_multi</code> support installed.' : '<strong>Parallel URL fetching:</strong> <code>HttpRequestPool</code> or <code>curl_multi</code> support is not available. ' . $status['app_name'] . ' will use <code>file_get_contents()</code> instead to fetch URLs sequentially rather than in parallel.' ?></td>
+                            </tr>
+                            <tr class="<?php echo ($status['allow_url_fopen']) ? 'enabled' : 'disabled'; ?>">
+                                <td><a href="http://www.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen">allow_url_fopen</a></td>
+                                <td>Enabled</td>
+                                <?php if ($status['allow_url_fopen']) { ?>
+                                <td class="good">Enabled</td>
+                                <td><strong>allow_url_fopen:</strong> You have allow_url_fopen enabled.
+                                <?php } elseif ($status['curl']) { ?>
+                                <td class="pass">Disabled</td>
+                                <td><strong>allow_url_fopen</strong> is disabled, but curl is supported, so it should be ok.</td>
+                                <?php } else { ?>
+                                <td class="bad">Disabled</td>
+                                <td><strong>allow_url_fopen:</strong> Your PHP configuration has allow_url_fopen disabled.
+                                <strong><?php echo $status['app_name']; ?>  will not work here.</strong><?php } ?></td>
+                            </tr>
+                            <tr class="<?php echo ($status['gettext']) ? 'enabled' : 'disabled'; ?>">
+                                <td><a href="http://php.net/manual/en/book.gettext.php">gettext</a></td>
+                                <td>Enabled</td>
+                                <?php echo ($status['gettext']) ? '<td class="good">Enabled' : '<td class="bad">Disabled'; ?></td>
+                                <td><?php echo ($status['gettext']) ? '<strong>Gettext:</strong> You have <code>gettext</code> enabled.</em>' : '<strong>GetText:</strong> The <code>gettext</code> extension is not available. The system we use to display wallabag in various languages is not available. <strong>' . $status['app_name'] .' will not work here.</strong>' ?></td>
+                            </tr>
+                        </tbody>
+                    </table>
+                    <hr>
+                </div>
+                <div class="details">
+                    <?php //if ($status['php'] && $status['xml'] && $status['pcre'] && $status['mbstring'] && $status['iconv'] && $status['filter'] && $status['allow_url_fopen']) { ?>
+                    <?php if (isOkay()) { ?>
+                        <h3>Bottom Line: Yes, you can run <?php echo $status['app_name']; ?> !</h3>
+                        <p><em>Your webhost has its act together!</em></p>
+                        <p><strong>Note</strong>: Passing this test does not guarantee that <?php echo $status['app_name']; ?> will run on your webhost &mdash; it only ensures that the basic requirements have been addressed. If you experience any problems, please let us know.</p>
+                    <?php //} else if ($status['php'] && $status['xml'] && $status['pcre'] && $status['mbstring'] && $status['allow_url_fopen'] && $status['filter']) { ?>
+                    <?php } else if (!isOkay() && isPassing()) { ?>
+                        <h3>Bottom Line: Yes, you can run <?php echo $status['app_name']; ?> !</h3>
+                        <p><em>For most pages, it'll run with no problems.</em> There are certain languages that you might have a hard time with though.</p>
+                        <p><strong>Note</strong>: Passing this test does not guarantee that <?php echo $status['app_name']; ?> will run on your webhost &mdash; it only ensures that the basic requirements have been addressed. If you experience any problems, please let us know.</p>
+                    <?php } else { ?>
+                        <h3>Bottom Line: We're sorry…</h3>
+                        <p><em>Your webhost does not support the minimum requirements for <?php echo $status['app_name']; ?>.</em>  It may be a good idea to contact your webhost and point them to the results of this test. They may be able to enable/install the required components.</p>
+                        <p>If this is your own server and you think you have all the requirements installed, please get in touch with us.</p>
+                    <?php } ?>
+                </div>
+
+                       <div class="chunk">
+                           <p class="footnote">This compatibility test has been borrowed (and slightly adapted by <a href="http://fivefilters.org/content-only/">fivefilters.org</a>) from the one supplied by <a href="http://simplepie.org/">SimplePie.org</a>.</a></p>
+                       </div>
+                </div>
+            <form method="post" class="technical">
+            <hr>
+            <div class='twig'>
+                <h2>Twig installation</h2>
+                <?php if (!is_dir('vendor')) : ?>
+                    
+                    <p>wallabag needs twig, a template engine (<a href="http://twig.sensiolabs.org/">?</a>). Two ways to install it:</p>
+                    <ul>
+                        <li>automatically download and extract vendor.zip into your wallabag folder. 
+                        <p><input type="submit" name="download" value="Download vendor.zip" /></p>
+                        <?php if (!extension_loaded('zip')) : ?>
+                            <b>Be careful, zip extension is not enabled in your PHP configuration. You'll have to unzip vendor.zip manually.</b>
+                        <?php endif; ?>
+                            <em>This method is mainly recommended if you don't have a dedicated server.</em></li>
+                        <li>use <a href="http://getcomposer.org/">Composer</a> in your wallabag folder :<pre><code>curl -s http://getcomposer.org/installer | php
+php composer.phar install</code></pre>
+                        <span id="reloadpage">Reload to check</span>
+                        </li>
+                    </ul>
+                    
+                <?php else : ?>
+                    Twig is properly installed.
+                <?php endif; ?>
+                </div>
+                <div class="database_info">
+                <hr>
+                <fieldset class="database_inputs">
+                    <legend><strong>Database settings</strong></legend>
                     <p>
                         Database engine:
                         <ul>
-                            <li><label for="sqlite">SQLite</label> <input name="db_engine" type="radio" checked="" id="sqlite" value="sqlite" />
-                            <div id="pdo_sqlite" class='messages error install'>
-                                <p>You have to enable <a href="http://php.net/manual/ref.pdo-sqlite.php">pdo_sqlite extension</a>.</p>
-                            </div>
-                            </li>
-                            <li>
-                                <label for="mysql">MySQL</label> <input name="db_engine" type="radio" id="mysql" value="mysql" />
-                                <ul id="mysql_infos">
-                                    <li><label for="mysql_server">Server</label> <input type="text" placeholder="localhost" id="mysql_server" name="mysql_server" /></li>
-                                    <li><label for="mysql_database">Database</label> <input type="text" placeholder="wallabag" id="mysql_database" name="mysql_database" /></li>
-                                    <li><label for="mysql_user">User</label> <input type="text" placeholder="user" id="mysql_user" name="mysql_user" /></li>
-                                    <li><label for="mysql_password">Password</label> <input type="password" placeholder="p4ssw0rd" id="mysql_password" name="mysql_password" /></li>
-                                </ul>
-                            </li>
-                            <li>
-                                <label for="postgres">PostgreSQL</label> <input name="db_engine" type="radio" id="postgres" value="postgres" />
-                                <ul id="pg_infos">
+                           <li>
+                              <?php if ($pdo_drivers['sqlite']) { ?>
+                               <label for="sqlite">SQLite</label> <input name="db_engine" type="radio" checked="" id="sqlite" value="sqlite" />
+                               <?php } else { ?>
+                                 <div class="messages notice">
+                                          <p>You have to enable <a href="http://php.net/manual/ref.pdo-sqlite.php">pdo_sqlite extension</a> to use SQLite.</p>
+                                   </div>
+                              <?php } ?>
+                           </li>
+                           <li>
+                              <?php if ($pdo_drivers['mysql']) { ?>
+                              <label for="mysql">MySQL</label> <input name="db_engine" type="radio" id="mysql" value="mysql" />
+                              <div id="pdo_mysql" class='messages notice install'>
+                                 <p>All fields have to be filled.</p>
+                              </div>
+                              <ul id="mysql_infos">
+                                 <li><label for="mysql_server">Server</label> <input type="text" placeholder="localhost" id="mysql_server" name="mysql_server" /></li>
+                                 <li><label for="mysql_database">Database</label> <input type="text" placeholder="wallabag" id="mysql_database" name="mysql_database" /></li>
+                                 <li><label for="mysql_user">User</label> <input type="text" placeholder="user" id="mysql_user" name="mysql_user" /></li>
+                                 <li><label for="mysql_password">Password</label> <input type="password" placeholder="p4ssw0rd" id="mysql_password" name="mysql_password" /></li>
+                                 <li><label for="mysql_utf8_mb4">Use UTF-8 MB4</label> <input id="mysql_utf8_mb4" type="checkbox" name="mysql_utf8_mb4">
+                                 <div id="utf8_mb4_infos"><em>Warning :</em> UTF-8 MB4 is used to fully support unicode characters. It is available only with MySQL starting with version 5.5.3. 
+                                    Install will failed if you check this while using an older MySQL server.</div></li>
+                              </ul>
+                              <?php } else { ?>
+                                 <div class="messages notice">
+                                    <p>You have to enable <a href="http://php.net/manual/ref.pdo-mysql.php">pdo_mysql extension</a> to use MySQL.</p>
+                                 </div>
+                              <?php } ?>
+                           </li>
+                           <li>
+                              <?php if ($pdo_drivers['postgres']) { ?>
+                                 <label for="postgres">PostgreSQL</label> <input name="db_engine" type="radio" id="postgres" value="postgres" />
+                                 <div id="pdo_postgres" class='messages notice install'>
+                                    <p>All fields have to be filled.</p>
+                                 </div>
+                                 <ul id="pg_infos">
                                     <li><label for="pg_server">Server</label> <input type="text" placeholder="localhost" id="pg_server" name="pg_server" /></li>
                                     <li><label for="pg_database">Database</label> <input type="text" placeholder="wallabag" id="pg_database" name="pg_database" /></li>
                                     <li><label for="pg_user">User</label> <input type="text" placeholder="user" id="pg_user" name="pg_user" /></li>
                                     <li><label for="pg_password">Password</label> <input type="password" placeholder="p4ssw0rd" id="pg_password" name="pg_password" /></li>
-                                </ul>
-                            </li>
+                                 </ul>
+                              <?php } else { ?>
+                                 <div class="messages notice">
+                                    <p>You have to enable <a href="https://php.net/manual/ref.pdo-pgsql.php">pdo_pgsql extension</a> to use PostgreSQL.</p>
+                                 </div>
+                              <?php } ?>
+                           </li>
                         </ul>
                     </p>
                 </fieldset>
-
-                <fieldset>
+                <div class="descriptions">
+                    <div id="sqlite_description">
+                        SQLite is the most simple database system of all three. It is therefore recommended for people who don't want or know how to configure other database systems.
+                    </div>
+                    <div id="mysql_description">
+                        MySQL (also called MariaDB) is one of the most popular database systems. It comes with most shared hosting plans.
+                    </div>
+                    <div id="postgres_description">
+                        PostgreSQL. Because some people prefer it to MySQL. With reasons.
+                    </div>
+                </div>
+                </div>
+                <hr>
+                <div class="usersettings">
+                <fieldset style="clear: both">
                     <legend><strong>User settings</strong></legend>
                     <p>
                         <label for="username">Username</label>
@@ -323,53 +677,100 @@ php composer.phar install</code></pre></li>
                         <input type="email" id="email" name="email" />
                     </p>
                 </fieldset>
-
                 <input type="submit" id="install_button" value="Install wallabag" name="install" />
+                </div>
             </form>
         </div>
+     <?php else : ?>
+         <div class="final good">
+            <h1>wallabag is now installed ! :-) </h1>
+            <a href="index.php?clean=0">Click here to access the login form</a><br />
+            <em>The installation will now try to delete the install directory. If this fails, delete it manually.</em></div>
+     <?php endif; ?>
         <script>
+            <?php if (!is_dir('vendor')) : ?>
+            $(".database_info").hide();
+            $(".usersettings").hide();
+            <?php endif ?>
+            /* 
+             * Database showing/hiding
+             */ 
             $("#mysql_infos").hide();
+            $("#mysql_description").hide();
             $("#pg_infos").hide();
+            $("#postgres_description").hide();
+            $("#sqlite_description").show();
+            $("#pdo_postgres").hide();
+            $("#pdo_mysql").hide();
+
+            /*
+             * Details hiding
+             */
+
+            $(".details").hide();
+            $("#utf8_mb4_infos").hide();
 
             <?php
-            if (!extension_loaded('pdo_sqlite')) : ?>
-            $("#install_button").hide();
+            if (!isPassing()) : ?>
+                $('.technical').hide();
             <?php
             else :
             ?>
-            $("#pdo_sqlite").hide();
+                $('.technical').show();
             <?php
             endif;
             ?>
 
+            $("#mysql_utf8_mb4").click(function() {
+                $("#utf8_mb4_infos").toggle();
+            });
+
             $("input[name=db_engine]").click(function() 
                 {
                     if ( $("#mysql").prop('checked')) {
                         $("#mysql_infos").show();
+                        $("#pdo_mysql").show();
                         $("#pg_infos").hide();
+                        $("#pdo_postgres").hide();
                         $("#pdo_sqlite").hide();
-                        $("#install_button").show();
+                        $("#sqlite_description").hide();
+                        $("#postgres_description").hide();
+                        $("#mysql_description").show();
+                        $("#install_button").show();        
                     }
                     else {
                         if ( $("#postgres").prop('checked')) {
                             $("#mysql_infos").hide();
+                            $("#pdo_mysql").hide();
                             $("#pg_infos").show();
+                            $("#pdo_postgres").show();
                             $("#pdo_sqlite").hide();
+                            $("#sqlite_description").hide();
+                            $("#mysql_description").hide();
+                            $("#postgres_description").show();
                             $("#install_button").show();
                         }
                         else {
                             $("#mysql_infos").hide();
                             $("#pg_infos").hide();
-                            <?php
-                            if (!extension_loaded('pdo_sqlite')) : ?>
-                            $("#pdo_sqlite").show();
-                            $("#install_button").hide();
-                            <?php
-                            endif;
-                            ?>
+                            $("#pdo_postgres").hide();
+                            $("#pdo_mysql").hide();
+                            $("#sqlite_description").show();
+                            $("#mysql_description").hide();
+                            $("#postgres_description").hide();
                         }
                     }
                 });
+
+            $(".detail").click(function()
+            {
+                $('.details').toggle();
+            });
+            $("#reloadpage").click(function()
+            {
+                 location.reload();
+            });
+
         </script>
     </body>
 </html>
diff --git a/install/install_functions.php b/install/install_functions.php
new file mode 100644 (file)
index 0000000..a483056
--- /dev/null
@@ -0,0 +1,107 @@
+<?php
+/**
+ * wallabag, self hostable application allowing you to not miss any content anymore
+ *
+ * @category   wallabag
+ * @author     Nicolas Lœuillet <nicolas@loeuillet.org>
+ * @copyright  2013
+ * @license    http://opensource.org/licenses/MIT see COPYING file
+ */
+
+function status() {
+$app_name = 'wallabag';
+
+$php_ok = (function_exists('version_compare') && version_compare(phpversion(), '5.3.3', '>='));
+$pdo_ok = class_exists('PDO');
+$pcre_ok = extension_loaded('pcre');
+$zlib_ok = extension_loaded('zlib');
+$mbstring_ok = extension_loaded('mbstring');
+$dom_ok = extension_loaded('DOM');
+$iconv_ok = extension_loaded('iconv');
+$tidy_ok = function_exists('tidy_parse_string');
+$curl_ok = function_exists('curl_exec');
+$parse_ini_ok = function_exists('parse_ini_file');
+$parallel_ok = ((extension_loaded('http') && class_exists('HttpRequestPool')) || ($curl_ok && function_exists('curl_multi_init')));
+$allow_url_fopen_ok = (bool)ini_get('allow_url_fopen');
+$filter_ok = extension_loaded('filter');
+$gettext_ok = function_exists("gettext");
+$gd_ok = extension_loaded('gd');
+$pdo_drivers = pdoDrivers();
+$pdo_drivers_passing = $pdo_drivers['sqlite'] || $pdo_drivers['mysql'] || $pdo_drivers['postgres'];
+$urlfetching = $curl_ok || $allow_url_fopen_ok;
+
+
+
+if (extension_loaded('xmlreader')) {
+       $xml_ok = true;
+} elseif (extension_loaded('xml')) {
+       $parser_check = xml_parser_create();
+       xml_parse_into_struct($parser_check, '<foo>&amp;</foo>', $values);
+       xml_parser_free($parser_check);
+       $xml_ok = isset($values[0]['value']);
+} else {
+       $xml_ok = false;
+}
+
+$status = array('app_name' => $app_name, 'php' => $php_ok, 'pdo' => $pdo_ok, 
+  'pdo_drivers_passing' => $pdo_drivers_passing, 'xml' => $xml_ok, 'pcre' => $pcre_ok,
+  'zlib' => $zlib_ok, 'mbstring' => $mbstring_ok, 'dom' => $dom_ok, 'iconv' => $iconv_ok, 'tidy' => $tidy_ok, 'curl' => $curl_ok,
+   'parse_ini' => $parse_ini_ok, 'parallel' => $parallel_ok, 'allow_url_fopen' => $allow_url_fopen_ok, 'filter' => $filter_ok,
+    'gettext' => $gettext_ok, 'gd' => $gd_ok, 'urlfetching' => $urlfetching);
+
+return $status;
+}
+function isOkay() {
+       return !in_array(false, status());
+}
+
+function isPassing() {
+       $status = status();
+       unset($status['curl'], $status['parallel'], $status['tidy'], $status['gd'], $status['filter'], $status['allow_url_fopen']);
+       return !in_array(false, $status);
+}
+
+function pdoDrivers() {
+    $pdo_driver_sqlite = extension_loaded('pdo_sqlite');
+    $pdo_driver_mysql = extension_loaded('pdo_mysql');
+    $pdo_driver_postgres = extension_loaded('pdo_pgsql');
+
+    $pdo_drivers = array('sqlite' => $pdo_driver_sqlite, 'mysql' => $pdo_driver_mysql,
+        'postgres' => $pdo_driver_postgres);
+
+    return $pdo_drivers;
+}
+
+/* Function taken from at http://php.net/manual/en/function.rmdir.php#110489
+ * Idea : nbari at dalmp dot com
+ * Rights unknown
+ * Here in case of .gitignore files
+ */
+
+function delTree($dir) {
+    $files = array_diff(scandir($dir), array('.','..'));
+    foreach ($files as $file) {
+      (is_dir("$dir/$file")) ? delTree("$dir/$file") : unlink("$dir/$file");
+    }
+    return rmdir($dir);
+  }
+
+function generate_salt() {
+       mt_srand(microtime(true)*100000 + memory_get_usage(true));
+    return md5(uniqid(mt_rand(), true));
+}
+
+function executeQuery($handle, $sql, $params) {
+    try
+    {
+        $query = $handle->prepare($sql);
+        $query->execute($params);
+        return $query->fetchAll();
+    }
+    catch (Exception $e)
+    {
+        return FALSE;
+    }
+}
+
+?>
\ No newline at end of file
diff --git a/install/wallabag_compatibility_test.php b/install/wallabag_compatibility_test.php
deleted file mode 100644 (file)
index 61a8e99..0000000
+++ /dev/null
@@ -1,427 +0,0 @@
-<?php
-/**
- * wallabag, self hostable application allowing you to not miss any content anymore
- *
- * @category   wallabag
- * @author     Nicolas Lœuillet <nicolas@loeuillet.org>
- * @copyright  2013
- * @license    http://opensource.org/licenses/MIT see COPYING file
- */
-
-$app_name = 'wallabag';
-
-$php_ok = (function_exists('version_compare') && version_compare(phpversion(), '5.3.3', '>='));
-$pcre_ok = extension_loaded('pcre');
-$zlib_ok = extension_loaded('zlib');
-$mbstring_ok = extension_loaded('mbstring');
-$dom_ok = extension_loaded('DOM');
-$iconv_ok = extension_loaded('iconv');
-$tidy_ok = function_exists('tidy_parse_string');
-$curl_ok = function_exists('curl_exec');
-$parse_ini_ok = function_exists('parse_ini_file');
-$parallel_ok = ((extension_loaded('http') && class_exists('HttpRequestPool')) || ($curl_ok && function_exists('curl_multi_init')));
-$allow_url_fopen_ok = (bool)ini_get('allow_url_fopen');
-$filter_ok = extension_loaded('filter');
-$gettext_ok = function_exists("gettext");
-$gd_ok = extension_loaded('gd');
-
-
-if (extension_loaded('xmlreader')) {
-       $xml_ok = true;
-} elseif (extension_loaded('xml')) {
-       $parser_check = xml_parser_create();
-       xml_parse_into_struct($parser_check, '<foo>&amp;</foo>', $values);
-       xml_parser_free($parser_check);
-       $xml_ok = isset($values[0]['value']);
-} else {
-       $xml_ok = false;
-}
-
-header('Content-type: text/html; charset=UTF-8');
-
-?><!DOCTYPE html>
-
-<html lang="en">
-<head>
-<title><?php echo $app_name; ?>: Server Compatibility Test</title>
-
-<style type="text/css">
-body {
-       font:14px/1.4em "Lucida Grande", Verdana, Arial, Helvetica, Clean, Sans, sans-serif;
-       letter-spacing:0px;
-       color:#333;
-       margin:0;
-       padding:0;
-       background:#fff;
-}
-
-div#site {
-       width:550px;
-       margin:20px auto 0 auto;
-}
-
-a {
-       color:#000;
-       text-decoration:underline;
-       padding:0 1px;
-}
-
-a:hover {
-       color:#fff;
-       background-color:#333;
-       text-decoration:none;
-       padding:0 1px;
-}
-
-p {
-       margin:0;
-       padding:5px 0;
-}
-
-em {
-       font-style:normal;
-       background-color:#ffc;
-       padding: 0.1em 0;
-}
-
-ul, ol {
-       margin:10px 0 10px 20px;
-       padding:0 0 0 15px;
-}
-
-ul li, ol li {
-       margin:0 0 7px 0;
-       padding:0 0 0 3px;
-}
-
-h2 {
-       font-size:18px;
-       padding:0;
-       margin:30px 0 20px 0;
-}
-
-h3 {
-       font-size:16px;
-       padding:0;
-       margin:20px 0 5px 0;
-}
-
-h4 {
-       font-size:14px;
-       padding:0;
-       margin:15px 0 5px 0;
-}
-
-code {
-       font-size:1.1em;
-       background-color:#f3f3ff;
-       color:#000;
-}
-
-em strong {
-    text-transform: uppercase;
-}
-
-table#chart {
-       border-collapse:collapse;
-}
-
-table#chart th {
-       background-color:#eee;
-       padding:2px 3px;
-       border:1px solid #fff;
-}
-
-table#chart td {
-       text-align:center;
-       padding:2px 3px;
-       border:1px solid #eee;
-}
-
-table#chart tr.enabled td {
-       /* Leave this alone */
-}
-
-table#chart tr.disabled td, 
-table#chart tr.disabled td a {
-}
-
-table#chart tr.disabled td a {
-       text-decoration:underline;
-}
-
-div.chunk {
-       margin:20px 0 0 0;
-       padding:0 0 10px 0;
-       border-bottom:1px solid #ccc;
-}
-
-.footnote,
-.footnote a {
-       font:10px/12px verdana, sans-serif;
-       color:#aaa;
-}
-
-.footnote em {
-       background-color:transparent;
-       font-style:italic;
-}
-
-.good{
-background-color:#52CC5B;
-}
-.bad{
-background-color:#F74343;
-font-style:italic;
-font-weight: bold;
-}
-.pass{
-background-color:#FF9500;
-}
-
-</style>
-
-</head>
-
-<body>
-<?php
-$frominstall = false;
-if (isset($_GET['from'])){
-       if ($_GET['from'] == 'install'){
-               $frominstall = true;
-               }}
-?>
-<div id="site">
-       <div id="content">
-
-               <div class="chunk">
-                       <h2 style="text-align:center;"><?php echo $app_name; ?>: Compatibility Test</h2>
-                       <table cellpadding="0" cellspacing="0" border="0" width="100%" id="chart">
-                               <thead>
-                                       <tr>
-                                               <th>Test</th>
-                                               <th>Should Be</th>
-                                               <th>What You Have</th>
-                                       </tr>
-                               </thead>
-                               <tbody>
-                                       <tr class="<?php echo ($php_ok) ? 'enabled' : 'disabled'; ?>">
-                                               <td>PHP</td>
-                                               <td>5.3.3 or higher</td>
-                                               <td class="<?php echo ($php_ok) ? 'good' : 'disabled'; ?>"><?php echo phpversion(); ?></td>
-                                       </tr>
-                                       <tr class="<?php echo ($xml_ok) ? 'enabled' : 'disabled'; ?>">
-                                               <td><a href="http://php.net/xml">XML</a></td>
-                                               <td>Enabled</td>
-                                               <?php echo ($xml_ok) ? '<td class="good">Enabled, and sane</span>' : '<td class="bad">Disabled, or broken'; ?></td>
-                                       </tr>
-                                       <tr class="<?php echo ($pcre_ok) ? 'enabled' : 'disabled'; ?>">
-                                               <td><a href="http://php.net/pcre">PCRE</a></td>
-                                               <td>Enabled</td>
-                                               <?php echo ($pcre_ok) ? '<td class="good">Enabled' : '<td class="bad">Disabled'; ?></td>
-                                       </tr>
-<!--                                   <tr class="<?php echo ($zlib_ok) ? 'enabled' : 'disabled'; ?>">
-                                               <td><a href="http://php.net/zlib">Zlib</a></td>
-                                               <td>Enabled</td>
-                                               <?php echo ($zlib_ok) ? '<td class="good">Enabled' : '<td class="bad">Disabled'; ?></td>
-                                       </tr> -->
-<!--                                   <tr class="<?php echo ($mbstring_ok) ? 'enabled' : 'disabled'; ?>">
-                                               <td><a href="http://php.net/mbstring">mbstring</a></td>
-                                               <td>Enabled</td>
-                                               <?php echo ($mbstring_ok) ? '<td class="good">Enabled' : '<td class="bad">Disabled'; ?></td>
-                                       </tr> -->
-<!--                                   <tr class="<?php echo ($iconv_ok) ? 'enabled' : 'disabled'; ?>">
-                                               <td><a href="http://php.net/iconv">iconv</a></td>
-                                               <td>Enabled</td>
-                                               <?php echo ($iconv_ok) ? '<td class="good">Enabled' : '<td class="bad">Disabled'; ?></td>
-                                       </tr> -->
-                                       <tr class="<?php echo ($dom_ok) ? 'enabled' : 'disabled'; ?>">
-                                               <td><a href="http://php.net/manual/en/book.dom.php">DOM / XML extension</a></td>
-                                               <td>Enabled</td>
-                                               <?php echo ($dom_ok) ? '<td class="good">Enabled' : '<td class="bad">Disabled'; ?></td>
-                                       </tr>
-                                       <tr class="<?php echo ($filter_ok) ? 'enabled' : 'disabled'; ?>">
-                                               <td><a href="http://uk.php.net/manual/en/book.filter.php">Data filtering</a></td>
-                                               <td>Enabled</td>
-                                               <?php echo ($filter_ok) ? '<td class="good">Enabled' : '<td class="pass">Disabled'; ?></td>
-                                       </tr>
-                                       <tr class="<?php echo ($gd_ok) ? 'enabled' : 'disabled'; ?>">
-                                               <td><a href="http://php.net/manual/en/book.image.php">GD</a></td>
-                                               <td>Enabled</td>
-                                               <?php echo ($gd_ok) ? '<td class="good">Enabled' : '<td class="pass">Disabled'; ?></td>
-                                       </tr>                                   
-                                       <tr class="<?php echo ($tidy_ok) ? 'enabled' : 'disabled'; ?>">
-                                               <td><a href="http://php.net/tidy">Tidy</a></td>
-                                               <td>Enabled</td>
-                                               <?php echo ($tidy_ok) ? '<td class="good">Enabled' : '<td class="pass">Disabled'; ?></td>
-                                       </tr>
-                                       <tr class="<?php echo ($curl_ok) ? 'enabled' : 'disabled'; ?>">
-                                               <td><a href="http://php.net/curl">cURL</a></td>
-                                               <td>Enabled</td>
-                                               <?php echo (extension_loaded('curl')) ? '<td class="good">Enabled' : '<td class="pass">Disabled'; ?></td>
-                                       </tr>
-                    <tr class="<?php echo ($parse_ini_ok) ? 'enabled' : 'disabled'; ?>">
-                        <td><a href="http://uk.php.net/manual/en/function.parse-ini-file.php">Parse ini file</td>
-                        <td>Enabled</td>
-                        <?php echo ($parse_ini_ok) ? '<td class="good">Enabled' : '<td class="bad">Disabled'; ?></td>
-                    </tr>
-                                       <tr class="<?php echo ($parallel_ok) ? 'enabled' : 'disabled'; ?>">
-                                               <td>Parallel URL fetching</td>
-                                               <td>Enabled</td>
-                                               <?php echo ($parallel_ok) ? '<td class="good">Enabled' : '<td class="pass">Disabled'; ?></td>
-                                       </tr>
-                                       <tr class="<?php echo ($allow_url_fopen_ok) ? 'enabled' : 'disabled'; ?>">
-                                               <td><a href="http://www.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen">allow_url_fopen</a></td>
-                                               <td>Enabled</td>
-                                               <?php echo ($allow_url_fopen_ok) ? '<td class="good">Enabled' : '<td class="bad">Disabled'; ?></td>
-                                       </tr>
-                                       <tr class="<?php echo ($gettext_ok) ? 'enabled' : 'disabled'; ?>">
-                                               <td><a href="http://php.net/manual/en/book.gettext.php">gettext</a></td>
-                                               <td>Enabled</td>
-                                               <?php echo ($gettext_ok) ? '<td class="good">Enabled' : '<td class="bad">Disabled'; ?></td>
-                                       </tr>
-                               </tbody>
-                       </table>
-               </div>
-
-               <div class="chunk">
-                       <h3>What does this mean?</h3>
-                       <ol>
-                               <?php //if ($php_ok && $xml_ok && $pcre_ok && $mbstring_ok && $iconv_ok && $filter_ok && $zlib_ok && $tidy_ok && $curl_ok && $parallel_ok && $allow_url_fopen_ok): ?>
-                               <?php if ($php_ok && $xml_ok && $pcre_ok && $dom_ok && $filter_ok && $gd_ok && $tidy_ok && $curl_ok && $parallel_ok && $allow_url_fopen_ok && $gettext_ok && $parse_ini_ok): ?>
-                               <li><em>You have everything you need to run <?php echo $app_name; ?> properly!  Congratulations!</em></li>
-                               <?php else: ?>
-                                       <?php if ($php_ok): ?>
-                                               <li><strong>PHP:</strong> You are running a supported version of PHP.  <em>No problems here.</em></li>
-                                               <?php if ($xml_ok): ?>
-                                                       <li><strong>XML:</strong> You have XMLReader support or a version of XML support that isn't broken installed.  <em>No problems here.</em></li>
-                                                       <?php if ($pcre_ok): ?>
-                                                               <li><strong>PCRE:</strong> You have PCRE support installed. <em>No problems here.</em></li>
-                                                               
-                                                               <?php if ($allow_url_fopen_ok): ?>
-                                                                       <li><strong>allow_url_fopen:</strong> You have allow_url_fopen enabled. <em>No problems here.</em></li>
-                                                                       
-                                                                       <?php if ($gettext_ok): ?>
-                                                                               <li><strong>Gettext:</strong> You have <code>gettext</code> enabled. <em>No problems here.</em></li>
-                                        
-                                        <?php if ($parse_ini_ok): ?>
-                                               <li><strong>Parse ini:</strong> You can parse <em>ini</em> files. <em>No problems here.</em></li>
-
-                                               <?php if ($dom_ok): ?>
-                                                       <li><strong>DOM/XML:</strong> You can parse <em>ini</em> files. <em>No problems here.</em></li>
-                                        
-                                                   <?php if ($filter_ok): ?>
-                                                       <li><strong>Data filtering:</strong> You can use the PHP build-in DOM to operate on XML documents. <em>No problems here.</em></li>
-               
-                                                       <?php if ($zlib_ok): ?>
-                                                           <li><strong>Zlib:</strong> You have <code>Zlib</code> enabled.  This allows SimplePie to support GZIP-encoded feeds.  <em>No problems here.</em></li>
-                                                       <?php else: ?>
-                                                           <li><strong>Zlib:</strong> The <code>Zlib</code> extension is not available.  SimplePie will ignore any GZIP-encoding, and instead handle feeds as uncompressed text.</li>
-                                                       <?php endif; ?>
-                                                       
-                                                       <?php if ($mbstring_ok && $iconv_ok): ?>
-                                                           <li><strong>mbstring and iconv:</strong> You have both <code>mbstring</code> and <code>iconv</code> installed!  This will allow <?php echo $app_name; ?> to handle the greatest number of languages. <em>No problems here.</em></li>
-                                                       <?php elseif ($mbstring_ok): ?>
-                                                           <li><strong>mbstring:</strong> <code>mbstring</code> is installed, but <code>iconv</code> is not.</li>
-                                                       <?php elseif ($iconv_ok): ?>
-                                                           <li><strong>iconv:</strong> <code>iconv</code> is installed, but <code>mbstring</code> is not.</li>
-                                                       <?php else: ?>
-                                                           <li><strong>mbstring and iconv:</strong> <em>You do not have either of the extensions installed.</em> This will significantly impair your ability to read non-English feeds, as well as even some English ones.</li>
-                                                       <?php endif; ?>
-
-                                                       <?php if ($gd_ok): ?>
-                                                           <li><strong>GD:</strong> You have <code>GD</code> support installed.  <em>No problems here.</em></li>
-                                                       <?php else: ?>
-                                                           <li><strong>GD:</strong> The <code>GD</code> extension is not available.  <?php echo $app_name; ?> will not be able to download pictures locally on your server.</li>
-                                                       <?php endif; ?>
-
-                                                       <?php if ($tidy_ok): ?>
-                                                           <li><strong>Tidy:</strong> You have <code>Tidy</code> support installed.  <em>No problems here.</em></li>
-                                                       <?php else: ?>
-                                                           <li><strong>Tidy:</strong> The <code>Tidy</code> extension is not available.  <?php echo $app_name; ?> should still work with most feeds, but you may experience problems with some. You can install it with <code>sudo apt-get install php5-tidy</code> and then reload Apache <code>sudo service apache2 reload</code>.</li>
-                                                       <?php endif; ?>
-                                                   
-                                                       <?php if ($curl_ok): ?>
-                                                           <li><strong>cURL:</strong> You have <code>cURL</code> support installed.  <em>No problems here.</em></li>
-                                                       <?php else: ?>
-                                                           <li><strong>cURL:</strong> The <code>cURL</code> extension is not available.  SimplePie will use <code>fsockopen()</code> instead.</li>
-                                                       <?php endif; ?>
-                       
-                                                       <?php if ($parallel_ok): ?>
-                                                           <li><strong>Parallel URL fetching:</strong> You have <code>HttpRequestPool</code> or <code>curl_multi</code> support installed.  <em>No problems here.</em></li>
-                                                       <?php else: ?>
-                                                           <li><strong>Parallel URL fetching:</strong> <code>HttpRequestPool</code> or <code>curl_multi</code> support is not available.  <?php echo $app_name; ?> will use <code>file_get_contents()</code> instead to fetch URLs sequentially rather than in parallel.</li>
-                                                       <?php endif; ?>
-
-                                                       <?php else: ?>
-                                                           <li><strong>Data filtering:</strong> Your PHP configuration has the filter extension disabled.  <strong><?php echo $app_name; ?> will not work here.</strong></li>
-                                                       <?php endif; ?>
-
-                                                   <?php else: ?>
-                                                       <li><strong>DOM/XML:</strong> Your PHP configuration isn't standard, you're missing PHP-DOM.  You may try to install a package or recompile PHP. <strong><?php echo $app_name; ?> will not work here.</strong></li>
-                                               <?php endif; ?>
-
-                                        <?php else : ?>
-                                            <li><strong>Parse ini files function :</strong> Bad luck : your webhost has decided to block the use of the <em>parse_ini_file</em> function. <strong><?php echo $app_name; ?> will not work here.</strong>
-                                        <?php endif; ?>
-                                                                               
-                                                                       <?php else: ?>
-                                                                               <li><strong>GetText:</strong> The <code>gettext</code> extension is not available. The system we use to display wallabag in various languages is not available. <strong><?php echo $app_name; ?> will not work here.</strong></li>
-                                                                       <?php endif; ?>
-                                                                               
-                                                               <?php else: ?>
-                                                                       <li><strong>allow_url_fopen:</strong> Your PHP configuration has allow_url_fopen disabled.  <strong><?php echo $app_name; ?> will not work here.</strong></li>
-                                                               <?php endif; ?>
-                                                                       
-                                                       <?php else: ?>
-                                                               <li><strong>PCRE:</strong> Your PHP installation doesn't support Perl-Compatible Regular Expressions.  <strong><?php echo $app_name; ?> will not work here.</strong></li>
-                                                       <?php endif; ?>
-                                               <?php else: ?>
-                                                       <li><strong>XML:</strong> Your PHP installation doesn't support XML parsing.  <strong><?php echo $app_name; ?> will not work here.</strong></li>
-                                               <?php endif; ?>
-                                       <?php else: ?>
-                                               <li><strong>PHP:</strong> You are running an unsupported version of PHP.  <strong><?php echo $app_name; ?> will not work here.</strong></li>
-                                       <?php endif; ?>
-                               <?php endif; ?>
-                       </ol>
-               </div>
-
-               <div class="chunk">
-                       <?php //if ($php_ok && $xml_ok && $pcre_ok && $mbstring_ok && $iconv_ok && $filter_ok && $allow_url_fopen_ok) { ?>
-                       <?php if ($php_ok && $xml_ok && $pcre_ok && $filter_ok && $allow_url_fopen_ok && $gettext_ok && $parse_ini_ok) { ?>
-                               <h3>Bottom Line: Yes, you can!</h3>
-                               <p><em>Your webhost has its act together!</em></p>
-                               <?php if (!$frominstall) { ?>
-                               <p>You can download the latest version of <?php echo $app_name; ?> from <a href="http://wallabag.org/download">wallabag.org</a>.</p>
-                               <p>If you already have done that, you should access <a href="index.php">the index.php file</a> of your installation to configure and/or start using wallabag</p>
-                               <?php } else { ?>
-                               <p>You can now <a href="../index.php">return to the installation section</a>.</p>
-                               <?php } ?>
-                               <p><strong>Note</strong>: Passing this test does not guarantee that <?php echo $app_name; ?> will run on your webhost &mdash; it only ensures that the basic requirements have been addressed. If you experience any problems, please let us know.</p>
-                       <?php //} else if ($php_ok && $xml_ok && $pcre_ok && $mbstring_ok && $allow_url_fopen_ok && $filter_ok) { ?>
-                       <?php } else if ($php_ok && $xml_ok && $pcre_ok && $allow_url_fopen_ok && $filter_ok && $gettext_ok && $parse_ini_ok) { ?>
-                               <h3>Bottom Line: Yes, you can!</h3>
-                               <p><em>For most feeds, it'll run with no problems.</em> There are certain languages that you might have a hard time with though.</p>
-                               <?php if (!$frominstall) { ?>
-                               <p>You can download the latest version of <?php echo $app_name; ?> from <a href="http://wallabag.org/download">wallabag.org</a>.</p>
-                               <p>If you already have done that, you should access <a href="index.php">the index.php file</a> of your installation to configure and/or start using wallabag</p>
-                               <?php } else { ?>
-                               <p>You can now <a href="../index.php">return to the installation section</a>.</p>
-                               <?php } ?>
-                               <p><strong>Note</strong>: Passing this test does not guarantee that <?php echo $app_name; ?> will run on your webhost &mdash; it only ensures that the basic requirements have been addressed. If you experience any problems, please let us know.</p>
-                       <?php } else { ?>
-                               <h3>Bottom Line: We're sorry…</h3>
-                               <p><em>Your webhost does not support the minimum requirements for <?php echo $app_name; ?>.</em>  It may be a good idea to contact your webhost and point them to the results of this test. They may be able to enable/install the required components.</p>
-                       <?php } ?>
-               </div>
-
-               <div class="chunk">
-                       <p class="footnote">This compatibility test has been borrowed (and slightly adapted by <a href="http://fivefilters.org/content-only/">fivefilters.org</a>) from the one supplied by <a href="http://simplepie.org/">SimplePie.org</a>.</a></p>
-               </div>
-
-       </div>
-
-</div>
-
-</body>
-</html>
index bd18817fbc80bb572c1e7e0808680b94eaac6af7..3add116cc30a5f98dc4dff0aa1eabc1c451c9c56 100644 (file)
Binary files a/locale/de_DE.utf8/LC_MESSAGES/de_DE.utf8.mo and b/locale/de_DE.utf8/LC_MESSAGES/de_DE.utf8.mo differ
index 8b82721d95da7f530bdb342dd2a30e53dba109e2..47801007424181db98720a0adc32d41095ed0b90 100644 (file)
@@ -1,18 +1,26 @@
 msgid ""
 msgstr ""
-"Project-Id-Version: Wallabag\n"
+"Project-Id-Version: wallabag\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-03-27 13:41+0100\n"
+"POT-Creation-Date: 2014-02-25 15:17+0300\n"
 "PO-Revision-Date: \n"
-"Last-Translator: Kevin Meyer <wallabag@kevin-meyer.de>\n"
+"Last-Translator: Julian Oster <wallabag@jlnostr.de>\n"
 "Language-Team: \n"
-"Language: de\n"
+"Language: de_DE\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.6.4\n"
+"X-Generator: Poedit 1.7.3\n"
 "X-Poedit-Basepath: .\n"
-"X-Poedit-SearchPath-0: /Users/kevinmeyer/Dropbox/dev_web/wallabag-dev\n"
+
+msgid "wallabag, a read it later open source system"
+msgstr "wallabag, ein \"Read-it-later\"-Open-Source-System"
+
+msgid "login failed: user doesn't exist"
+msgstr "Anmeldung fehlgeschlagen: Benutzer existiert nicht"
+
+msgid "return home"
+msgstr "Auf Startseite zurückkehren"
 
 msgid "config"
 msgstr "Konfiguration"
@@ -21,13 +29,19 @@ msgid "Saving articles"
 msgstr "Artikel speichern"
 
 msgid "There are several ways to save an article:"
-msgstr "Es gibt viele Methoden um Artikel zu speichern:"
+msgstr "Es gibt mehrere Wege, um einen Artikel zu speichern:"
 
 msgid "read the documentation"
-msgstr "Die Dokumentation lesen"
+msgstr "Dokumentation lesen"
 
 msgid "download the extension"
-msgstr "installiere die Erweiterung"
+msgstr "Erweiterung herunterladen"
+
+msgid "Firefox Add-On"
+msgstr "Firefox-Addon"
+
+msgid "Chrome Extension"
+msgstr "Chrome-Erweiterung"
 
 msgid "via F-Droid"
 msgstr "via F-Droid"
@@ -39,16 +53,16 @@ msgid "via Google Play"
 msgstr "via Google Play"
 
 msgid "download the application"
-msgstr "lade die App"
+msgstr "App herunterladen"
 
 msgid "By filling this field"
-msgstr "Durch Ausfüllen dieses Feldes"
+msgstr "Durch das Ausfüllen dieses Feldes"
 
 msgid "bag it!"
 msgstr "bag it!"
 
 msgid "Bookmarklet: drag & drop this link to your bookmarks bar"
-msgstr "Bookmarklet: Ziehe diesen Link in deine Lesezeichen-Leiste"
+msgstr "Bookmarklet: Ziehe diesen Link in deine Lesezeichen"
 
 msgid "Upgrading wallabag"
 msgstr "wallabag aktualisieren"
@@ -57,58 +71,46 @@ msgid "Installed version"
 msgstr "Installierte Version"
 
 msgid "Latest stable version"
-msgstr "Neuste stabile Version"
+msgstr "Letzte stabile Version"
 
 msgid "A more recent stable version is available."
-msgstr "Eine neuere stabile Version ist verfügbar."
+msgstr "Eine neuere Version ist verfügbar."
 
 msgid "You are up to date."
-msgstr "Du bist auf den neuesten Stand."
-
-msgid "Last check:"
-msgstr "Zuletzt geprüft:"
+msgstr "Du bist auf dem aktuellsten Stand."
 
 msgid "Latest dev version"
-msgstr "Neuste Entwicklungsversion"
+msgstr "Letzte Entwickler-Version"
 
 msgid "A more recent development version is available."
-msgstr "Eine neuere Entwicklungsversion ist verfügbar."
+msgstr "Eine neuere Entwickler-Version ist verfügbar."
 
 msgid "You can clear cache to check the latest release."
-msgstr "Leere den Cache um die neueste Version zu prüfen."
+msgstr "Du kannst den <a href=\"#cache\">Cache leeren</a>, um nach neueren Versionen zu suchen."
 
 msgid "Feeds"
 msgstr "Feeds"
 
-msgid ""
-"Your feed token is currently empty and must first be generated to enable "
-"feeds. Click <a href='?feed&amp;action=generate'>here to generate it</a>."
-msgstr ""
-"Dein Feed Token ist noch nicht vorhanden und muss zunächst generiert werden, "
-"um deine Feeds zu aktivieren. Klicke <a href='?feed&amp;"
-"action=generate'>hier um ihn zu generieren</a>."
+msgid "Your feed token is currently empty and must first be generated to enable feeds. Click <a href='?feed&amp;action=generate'>here to generate it</a>."
+msgstr "Dein Feed-Token ist momentan leer und muss generiert werden, um die Feeds zu aktivieren. Klicke  <a href='?feed&amp;action=generate'>hier, um ihn zu erstellen</a>."
 
 msgid "Unread feed"
-msgstr "Ungelesen Feed"
+msgstr "Feed für Ungelesenes"
 
 msgid "Favorites feed"
-msgstr "Favoriten Feed"
+msgstr "Feed für Favoriten"
 
 msgid "Archive feed"
-msgstr "Archiv Feed"
+msgstr "Archiv-Feed"
 
 msgid "Your token:"
 msgstr "Dein Token:"
 
 msgid "Your user id:"
-msgstr "Deine User ID:"
+msgstr "Deine Benutzer-ID:"
 
-msgid ""
-"You can regenerate your token: <a href='?feed&amp;action=generate'>generate!"
-"</a>."
-msgstr ""
-"Hier kannst du dein Token erzeugen: <a href='?feed&amp;"
-"action=generate'>Generieren!</a>."
+msgid "You can regenerate your token: <a href='?feed&amp;action=generate'>generate!</a>."
+msgstr "Du kannst deinen Token regenerieren: <a href='?feed&amp;action=generate'>generieren!</a>."
 
 msgid "Change your theme"
 msgstr "Theme ändern"
@@ -138,76 +140,58 @@ msgid "Repeat your new password:"
 msgstr "Neues Passwort wiederholen:"
 
 msgid "Import"
-msgstr "Import"
+msgstr "Importieren"
 
-msgid ""
-"Importing from other services can be quite long, and webservers default "
-"configuration often prevents long scripts execution time, so it must be done "
-"in multiple parts."
-msgstr ""
-"Der Import von anderen Diensten kann sehr lange dauern. Deswegen bricht der "
-"Webserver diesen in vielen Konfigurationen ab. Daher muss der Import in "
-"mehrere Teile aufgeteilt werden."
+msgid "You can import your Pocket, Readability, Instapaper, Wallabag or any data in appropriate json or html format."
+msgstr "Du kannst aus Pocket, Readability, Instapaper, wallabag oder einer beliebigen Datei in angebrachtem JSON- oder HTML-Format importieren."
+
+msgid "Please execute the import script locally as it can take a very long time."
+msgstr "Führe das Import-Skript lokal aus, da der Import sehr lange dauern kann."
 
-msgid "First, select the export file on your computer and upload it."
-msgstr "Wähle eine Datei von deinem Computer aus und lade sie hoch."
+msgid "Please select export file on your computer and press \"Import\" button below. Wallabag will parse your file, insert all URLs and start fetching of articles if required."
+msgstr ""
+"Wähle die Export-Datei auf deinem Computer aus und drücke den \"Import\"-Button unten. Wallabag wird deine Datei durchsuchen, alle URLs in der Datenbank speichern und die Artikel "
+"herunterladen, sofern dies erforderlich ist."
 
-msgid "File:"
-msgstr "Datei:"
+msgid "You can click here to fetch content for articles with no content."
+msgstr "Du kannst hier klicken, um den Inhalt für Artikel ohne Inhalt herunterzuladen."
 
-msgid "Upload"
-msgstr "Hochladen"
+msgid "More info in the official documentation:"
+msgstr "Mehr Infos in der offiziellen Dokumentation:"
 
-msgid "Then, click on the right link below."
-msgstr "Klicke dann unten auf den entsprechenden Link."
+msgid "(<a href=\"http://doc.wallabag.org/en/User_documentation/Save_your_first_article\" target=\"_blank\" title=\"Documentation\">?</a>)"
+msgstr "(<a href=\"http://doc.wallabag.org/de/Anwender/Den_ersten_Artikel_speichern\" target=\"_blank\" title=\"Dokumentation\">?</a>)"
 
 msgid "Import from Pocket"
-msgstr "Import aus Pocket"
+msgstr "Aus Pocket importieren"
 
 #, php-format
-msgid "(after uploaded %s file)"
-msgstr "(nach Upload der Datei %s)"
+msgid "(you must have a %s file on your server)"
+msgstr "(du solltest eine %s Datei auf deinem Server haben)"
 
 msgid "Import from Readability"
-msgstr "Import aus Readability"
+msgstr "Aus Readability importieren"
 
 msgid "Import from Instapaper"
-msgstr "Import aus Instapaper"
+msgstr "Aus Instapaper importieren"
 
 msgid "Import from wallabag"
-msgstr "Import aus Readability"
+msgstr "Aus wallabag importieren"
 
-msgid ""
-"3. Your feed token is currently empty and must first be generated to fetch "
-"content. Click <a href='?feed&amp;action=generate'>here to generate it</a>."
-msgstr ""
-"3. Dein Feed Token ist noch nicht vorhanden und muss zunächst generiert "
-"werden, um Inhalt abrufen zu können. Klicke <a href='?feed&amp;"
-"action=generate'>hier um ihn zu generieren</a>."
-
-msgid "Finally, you have to fetch content for imported items."
-msgstr "Jetzt musst du den Inhalt der importierten Artikel abrufen."
+msgid "Export your wallabag data"
+msgstr "Deine wallabag-Daten exportieren"
 
 msgid "Click here"
-msgstr "Klicke hier"
-
-msgid "to fetch content for 10 articles"
-msgstr "um den Inhalt von 10 Artikeln abzurufen"
-
-msgid ""
-"If you have console access to your server, you can also create a cron task:"
-msgstr ""
-"Wenn du Konsolenzugang zu deinem Server hast kannst du auch einen cron "
-"erstellen:"
-
-msgid "Export your wallabag data"
-msgstr "Exportieren deine wallabag Daten"
+msgstr "Hier klicken, "
 
 msgid "to download your database."
-msgstr "um deine Datenbank herunterzuladen"
+msgstr "um die Datenbank herunterzuladen."
 
 msgid "to export your wallabag data."
-msgstr "um deine Daten aus wallabag zu exportieren."
+msgstr "um die wallabag-Daten zu exportieren."
+
+msgid "Export JSON"
+msgstr "JSON exportieren"
 
 msgid "Cache"
 msgstr "Cache"
@@ -215,444 +199,437 @@ msgstr "Cache"
 msgid "to delete cache."
 msgstr "um den Cache zu löschen."
 
-msgid "Tags"
-msgstr "Tags"
+msgid "Delete Cache"
+msgstr "Cache löschen, "
+
+msgid "You can enter multiple tags, separated by commas."
+msgstr "Du kannst mehrere Schlagworte, getrennt von einem Komma, hinzufügen."
+
+msgid "Add tags:"
+msgstr "Schlagworte hinzufügen:"
+
+msgid "no tags"
+msgstr "keine schlagworte"
+
+msgid "The tag has been applied successfully"
+msgstr "Das Schlagwort wurde erfolgreich übernommen."
+
+msgid "interview"
+msgstr "interview"
+
+msgid "editorial"
+msgstr "editorial"
+
+msgid "video"
+msgstr "video"
+
+msgid "return to article"
+msgstr "zum artikel zurückkehren"
+
+msgid "plop"
+msgstr "plop"
+
+msgid "You can <a href='wallabag_compatibility_test.php'>check your configuration here</a>."
+msgstr "Du kannst deine <a href='wallabag_compatibility_test.php'>Konfiguration hier überprüfen</a>."
+
+msgid "favoris"
+msgstr "Favoriten"
+
+msgid "archive"
+msgstr "archiv"
+
+msgid "unread"
+msgstr "ungelesen"
 
 msgid "by date asc"
-msgstr "nach Datum aufsteigend"
+msgstr "nach Datum, aufsteigend"
 
 msgid "by date"
 msgstr "nach Datum"
 
 msgid "by date desc"
-msgstr "nach Datum absteigend"
+msgstr "nach Datum, absteigend"
 
 msgid "by title asc"
-msgstr "nach Titel aufsteigend"
+msgstr "nach Titel, aufsteigend"
 
 msgid "by title"
 msgstr "nach Titel"
 
 msgid "by title desc"
-msgstr "nach Titel absteigend"
-
-#, fuzzy
-msgid "toggle view mode"
-msgstr "Favorit"
+msgstr "nach Titel, absteigend"
 
-msgid "home"
-msgstr "Start"
+msgid "Tag"
+msgstr "Schlagwort"
 
-msgid "favorites"
-msgstr "Favoriten"
+msgid "No articles found."
+msgstr "Keine Artikel gefunden."
 
-msgid "archive"
-msgstr "Archiv"
+msgid "Toggle mark as read"
+msgstr "Als gelesen/ungelesen markieren"
 
-msgid "tags"
-msgstr "Tags"
+msgid "toggle favorite"
+msgstr "favorisieren"
 
-msgid "save a link"
-msgstr "Speichere einen Link"
+msgid "delete"
+msgstr "löschen"
 
-msgid "search"
-msgstr "Suche"
+msgid "original"
+msgstr "original"
 
-msgid "logout"
-msgstr "Logout"
+msgid "estimated reading time:"
+msgstr "Geschätzte Lesezeit:"
 
-msgid "return home"
-msgstr "Zurück zum Start"
+msgid "mark all the entries as read"
+msgstr "Alle Einträge als gelesen markieren"
 
-#, fuzzy
-msgid "Search"
-msgstr "Archiv"
+msgid "results"
+msgstr "Ergebnisse"
 
-msgid "powered by"
-msgstr "bereitgestellt von"
+msgid "installation"
+msgstr "installation"
 
-msgid "debug mode is on so cache is off."
-msgstr "Debug Modus ist aktiviert, das Caching ist somit deaktiviert"
+msgid "install your wallabag"
+msgstr "deine wallabag installieren"
 
-msgid "your wallabag version:"
-msgstr "Deine wallabag Version"
+msgid "wallabag is still not installed. Please fill the below form to install it. Don't hesitate to <a href='http://doc.wallabag.org/'>read the documentation on wallabag website</a>."
+msgstr ""
+"wallabag ist noch nicht installiert. Fülle das untenstehende Formular aus, um wallabag zu installieren. Scheue dich nicht davor, die <a href='http://doc.wallabag.org/de'>Dokumentation "
+"auf der wallabag-Webseite</a> zur Hilfe zu ziehen."
 
-msgid "storage:"
-msgstr "Speicher:"
+msgid "Login"
+msgstr "Anmelden"
 
-msgid "Save a link"
-msgstr "Speichere einen Link"
+msgid "Repeat your password"
+msgstr "Passwort wiederholen"
 
-msgid "save link!"
-msgstr "Link speichern!"
+msgid "Install"
+msgstr "Installieren"
 
-msgid "unread"
-msgstr "ungelesen"
+msgid "login to your wallabag"
+msgstr "Melde dich in deiner wallabag an"
 
-msgid "Tag"
-msgstr "Tag"
+msgid "Login to wallabag"
+msgstr "In wallabag anmelden"
 
-msgid "No articles found."
-msgstr "Keine Artikel gefunden."
+msgid "you are in demo mode, some features may be disabled."
+msgstr "Du bist im Demo-Modus, einige Features sind möglicherweise deaktiviert."
 
-msgid "estimated reading time:"
-msgstr "geschätzte Lesezeit:"
+msgid "Username"
+msgstr "Benutzername"
 
-msgid "estimated reading time :"
-msgstr "geschätzte Lesezeit:"
+msgid "Stay signed in"
+msgstr "Angemeldet bleiben"
 
-msgid "Toggle mark as read"
-msgstr "Als gelesen markieren"
+msgid "(Do not check on public computers)"
+msgstr "(nicht auf öffentlichen Computern ankreuzen)"
 
-msgid "toggle favorite"
-msgstr "Favorit"
+msgid "Sign in"
+msgstr "Anmelden"
 
-msgid "delete"
-msgstr "Löschen"
+msgid "favorites"
+msgstr "favoriten"
 
-msgid "original"
-msgstr "Original"
+msgid "estimated reading time :"
+msgstr "Geschätzte Lesezeit:"
 
 msgid "Mark all the entries as read"
-msgstr "Markiere alle als gelesen"
+msgstr "Alle Einträge als gelesen markieren"
 
-msgid "results"
-msgstr "Ergebnisse"
+msgid "Return home"
+msgstr "Zur Startseite zurückkehren"
 
-msgid "Uh, there is a problem with the cron."
-msgstr "Oh, es gab ein Problem mit dem cron."
+msgid "Back to top"
+msgstr "Nach oben scrollen"
 
-msgid "Untitled"
-msgstr "Ohne Titel"
-
-msgid "the link has been added successfully"
-msgstr "Speichern des Links erfolgreich"
-
-msgid "error during insertion : the link wasn't added"
-msgstr "Fehler beim Einfügen: Der Link wurde nicht hinzugefügt"
-
-msgid "the link has been deleted successfully"
-msgstr "Löschen des Links erfolgreich"
-
-msgid "the link wasn't deleted"
-msgstr "Der Link wurde nicht entfernt"
+msgid "Mark as read"
+msgstr "Als gelesen markieren"
 
-msgid "Article not found!"
-msgstr "Artikel nicht gefunden!"
+msgid "Favorite"
+msgstr "Favorisieren"
 
-msgid "previous"
-msgstr "vorherige"
+msgid "Toggle favorite"
+msgstr "favorisieren"
 
-msgid "next"
-msgstr "nächste"
+msgid "Delete"
+msgstr "Löschen"
 
-msgid "in demo mode, you can't update your password"
-msgstr "im Demo-Modus kann das Passwort nicht geändert werden"
+msgid "Tweet"
+msgstr "Twittern"
 
-msgid "your password has been updated"
-msgstr "Dein Passwort wurde geändert"
+msgid "Email"
+msgstr "Email"
 
-msgid ""
-"the two fields have to be filled & the password must be the same in the two "
-"fields"
-msgstr "Beide Felder müssen mit selbem Inhalt ausgefüllt sein"
+msgid "shaarli"
+msgstr "shaarli"
 
-msgid "still using the \""
-msgstr "nutze immernoch die \""
+msgid "flattr"
+msgstr "flattr"
 
-msgid "that theme does not seem to be installed"
-msgstr "dieses Theme scheint nicht installiert zu sein"
+msgid "Does this article appear wrong?"
+msgstr "Erscheint dieser Artikel nicht richtig?"
 
-msgid "you have changed your theme preferences"
-msgstr "Du hast deine Theme Einstellungen geändert"
+msgid "tags:"
+msgstr "schlagworte:"
 
-msgid "that language does not seem to be installed"
-msgstr "Diese Sprache scheint nicht installiert zu sein"
+msgid "Edit tags"
+msgstr "Schlagworte bearbeiten"
 
-msgid "you have changed your language preferences"
-msgstr "Du hast deine Spracheinstellungen geändert"
+msgid "save link!"
+msgstr "link speichern!"
 
-msgid "login failed: you have to fill all fields"
-msgstr "Anmeldung fehlgeschlagen: Alle Felder müssen ausgefüllt werden"
+msgid "home"
+msgstr "start"
 
-msgid "welcome to your wallabag"
-msgstr "Willkommen bei deiner wallabag"
+msgid "tags"
+msgstr "schlagworte"
 
-msgid "login failed: bad login or password"
-msgstr "Anmeldung fehlgeschlagen: Falscher Benutzername oder Passwort"
+msgid "logout"
+msgstr "abmelden"
 
-msgid ""
-"import from instapaper completed. You have to execute the cron to fetch "
-"content."
-msgstr ""
-"Import aus Instapaper vollständig. Führe den cronjob aus um den Inhalt "
-"abzurufen."
+msgid "powered by"
+msgstr "Angetrieben von"
 
-msgid ""
-"import from pocket completed. You have to execute the cron to fetch content."
-msgstr ""
-"Import aus Pocket vollständig. Führe den cronjob aus um den Inhalt abzurufen."
+msgid "debug mode is on so cache is off."
+msgstr "Der Debug-Modus ist aktiviert, also ist der Cache deaktiviert."
 
-msgid ""
-"import from Readability completed. You have to execute the cron to fetch "
-"content."
-msgstr ""
-"Import aus Readability vollständig. Führe den cronjob aus um den Inhalt "
-"abzurufen."
+msgid "your wallabag version:"
+msgstr "Deine wallabag-Version:"
 
-msgid ""
-"import from Poche completed. You have to execute the cron to fetch content."
-msgstr ""
-"Import aus Poche vollständig. Führe den cronjob aus um den Inhalt abzurufen."
+msgid "storage:"
+msgstr "speicher:"
 
-msgid "Unknown import provider."
-msgstr "Unbekannter Import Anbieter."
+msgid "save a link"
+msgstr "einen link speichern"
 
-msgid "Could not find required \""
-msgstr "Nicht gefunden: \""
+msgid "back to home"
+msgstr "zurück zur startseite"
 
-msgid "File uploaded. You can now execute import."
-msgstr "Datei hochgeladen. Du kannst nun importieren."
+msgid "toggle mark as read"
+msgstr "als gelesen/ungelesen markieren"
 
-msgid "Error while importing file. Do you have access to upload it?"
-msgstr "Fehler beim Importieren. Hast du das Recht zum Hochladen?"
+msgid "tweet"
+msgstr "tweet"
 
-msgid "User with this id ("
-msgstr "Nutzer mit dieser id ("
+msgid "email"
+msgstr "email"
 
-msgid "Uh, there is a problem while generating feeds."
-msgstr "Oh, es gab ein Problem beim Erstellen des Feeds."
+msgid "this article appears wrong?"
+msgstr "dieser artikel erscheint falsch?"
 
-msgid "Cache deleted."
-msgstr "Cache gelöscht"
+msgid "No link available here!"
+msgstr "Kein Link verfügbar!"
 
-msgid "Oops, it seems you don't have PHP 5."
-msgstr "Oops, es scheint als würde PHP 5 fehlen."
+msgid "Poching a link"
+msgstr "Link speichern"
 
-msgid "wallabag, a read it later open source system"
-msgstr "wallabag, ein Später-Lesen Open Source System"
+msgid "by filling this field"
+msgstr "mit dem Ausfüllen dieses Feldes"
 
-msgid "login failed: user doesn't exist"
-msgstr "Anmeldung fehlgeschlagen: Benutzer existiert nicht"
+msgid "bookmarklet: drag & drop this link to your bookmarks bar"
+msgstr "Bookmarklet: Drag & drop diesen Link in deine Lesezeichen"
 
-#~ msgid "You can enter multiple tags, separated by commas."
-#~ msgstr "Du kannst mehrere Tags, durch Kommata getrennt, eingeben."
+msgid "Drag &amp; drop this link to your bookmarks bar:"
+msgstr "Drag &amp; drop diesen Link in deine Lesezeichen:"
 
-#~ msgid "return to article"
-#~ msgstr "zurück zum Artikel"
+msgid "your version"
+msgstr "deine Version"
 
-#, fuzzy
-#~ msgid "favoris"
-#~ msgstr "Favoriten"
+msgid "latest stable version"
+msgstr "letzte stabile Version"
 
-#~ msgid "mark all the entries as read"
-#~ msgstr "Markiere alle als gelesen"
+msgid "a more recent stable version is available."
+msgstr "Eine aktuellere Version ist verfügbar."
 
-#~ msgid "Back to top"
-#~ msgstr "Nach Oben"
+msgid "you are up to date."
+msgstr "Du bist auf dem aktuellsten Stand."
 
-#~ msgid "Mark as read"
-#~ msgstr "Als gelesen markieren"
+msgid "latest dev version"
+msgstr "Letzte Entwickler-Version"
 
-#~ msgid "Favorite"
-#~ msgstr "Favoriten"
+msgid "a more recent development version is available."
+msgstr "Eine neuere Entwickler-Version ist verfügbar."
 
-#~ msgid "Toggle favorite"
-#~ msgstr "Favorit"
+msgid "Please execute the import script locally, it can take a very long time."
+msgstr "Führe das Import-Skript lokal aus, da der Import sehr lange dauern kann."
 
-#~ msgid "Delete"
-#~ msgstr "Löschen"
+msgid "More infos in the official doc:"
+msgstr "Mehr Informationen in der offiziellen Dokumentation:"
 
-#~ msgid "Tweet"
-#~ msgstr "Twittern"
+msgid "import from Pocket"
+msgstr "Aus Pocket importieren"
 
-#~ msgid "Email"
-#~ msgstr "per E-Mail senden"
+msgid "import from Readability"
+msgstr "Aus Readability importieren"
 
-#~ msgid "shaarli"
-#~ msgstr "Shaarli"
+msgid "import from Instapaper"
+msgstr "Aus Instapaper importieren"
 
-#~ msgid "flattr"
-#~ msgstr "flattr"
+msgid "Tags"
+msgstr "Schlagworte"
 
-#~ msgid "Does this article appear wrong?"
-#~ msgstr "Erscheint dieser Artikel falsch?"
+msgid "Untitled"
+msgstr "Untitled"
 
-#~ msgid "Edit tags"
-#~ msgstr "Tags bearbeiten"
+msgid "the link has been added successfully"
+msgstr "Der Link wurde erfolgreich hinzugefügt"
 
-#~ msgid "Start typing for auto complete."
-#~ msgstr "Beginne zu tippen für die Autovervollständigung."
+msgid "error during insertion : the link wasn't added"
+msgstr "Fehler während des Imports: Der Link wurde nicht hinzugefügt."
 
-#~ msgid "Return home"
-#~ msgstr "Zurück zum Start"
+msgid "the link has been deleted successfully"
+msgstr "Der Link wurde erfolgreich gelöscht"
 
-#~ msgid "tags:"
-#~ msgstr "Tags:"
+msgid "the link wasn't deleted"
+msgstr "Der Link wurde nicht gelöscht."
 
-#~ msgid "login to your wallabag"
-#~ msgstr "Bei wallabag anmelden"
+msgid "Article not found!"
+msgstr "Artikel nicht gefunden!"
 
-#~ msgid "you are in demo mode, some features may be disabled."
-#~ msgstr ""
-#~ "Du befindest dich im Demomodus, einige Funktionen könnten deaktiviert "
-#~ "sein."
+msgid "previous"
+msgstr "vorherige"
 
-#~ msgid "Login"
-#~ msgstr "Benutzername"
+msgid "next"
+msgstr "nächste"
 
-#~ msgid "Stay signed in"
-#~ msgstr "Angemeldet bleiben"
+msgid "in demo mode, you can't update your password"
+msgstr "Im Demo-Modus kannst du as Kennwort nicht aktualisieren."
 
-#~ msgid "(Do not check on public computers)"
-#~ msgstr "(nicht auf einem öffentlichen Computer anhaken)"
+msgid "your password has been updated"
+msgstr "Dein Passwort wurde aktualisiert"
 
-#~ msgid "plop"
-#~ msgstr "plop"
+msgid "the two fields have to be filled & the password must be the same in the two fields"
+msgstr "Beide Felder müssen ausgefüllt sein und das gleiche Passwort beinhalten"
 
-#~ msgid "Login to wallabag"
-#~ msgstr "Bei wallabag anmelden"
+msgid "still using the \""
+msgstr "nutze immernoch die \""
 
-#~ msgid "Username"
-#~ msgstr "Benutzername"
+msgid "that theme does not seem to be installed"
+msgstr "Dieses Theme scheint nicht installiert zu sein."
 
-#~ msgid "Sign in"
-#~ msgstr "Einloggen"
+msgid "you have changed your theme preferences"
+msgstr "Du hast deine Theme-Einstellungen geändert"
 
-#~ msgid "Enter your search here"
-#~ msgstr "Gib hier deine Suchanfrage ein"
+msgid "that language does not seem to be installed"
+msgstr "Diese Sprache scheint nicht installiert zu sein"
 
-#~ msgid "installation"
-#~ msgstr "Installieren"
+msgid "you have changed your language preferences"
+msgstr "Du hast deine Spracheinstellungen geändert"
 
-#~ msgid "install your wallabag"
-#~ msgstr "Installiere deine wallabag"
+msgid "login failed: you have to fill all fields"
+msgstr "Anmeldung fehlgeschlagen: Du musst alle Felder ausfüllen"
 
-#~ msgid ""
-#~ "wallabag is still not installed. Please fill the below form to install "
-#~ "it. Don't hesitate to <a href='http://doc.wallabag.org/'>read the "
-#~ "documentation on wallabag website</a>."
-#~ msgstr ""
-#~ "wallabag ist noch nicht installiert. Bitte fülle die Felder unten aus, um "
-#~ "die Installation durchzuführen. Zögere nicht, <a href='http://doc."
-#~ "wallabag.org/'>die Dokumentation auf der Website von wallabag zu lesen, "
-#~ "falls du Probleme haben solltest."
+msgid "welcome to your wallabag"
+msgstr "Willkommen in deiner wallabag"
 
-#~ msgid "Repeat your password"
-#~ msgstr "Wiederhole dein Passwort"
+msgid "login failed: bad login or password"
+msgstr "Anmeldung fehlgeschlagen: Falscher Benutzername oder falsches Passwort"
 
-#~ msgid "Install"
-#~ msgstr "Installieren"
+msgid "import from instapaper completed"
+msgstr "Import aus Instapaper abgeschlossen"
 
-#~ msgid "No link available here!"
-#~ msgstr "Kein Link verfügbar!"
+msgid "import from pocket completed"
+msgstr "Import aus Pocket abgeschlossen"
 
-#~ msgid "toggle mark as read"
-#~ msgstr "Als gelesen markieren"
+msgid "import from Readability completed. "
+msgstr "Import aus Readability abgeschlossen."
 
-#~ msgid ""
-#~ "You can <a href='wallabag_compatibility_test.php'>check your "
-#~ "configuration here</a>."
-#~ msgstr ""
-#~ "Du kannst deine Konfiguration <a href='wallabag_compatibility_test."
-#~ "php'>hier testen</a>."
+msgid "import from Poche completed. "
+msgstr "Import aus wallabag abgeschlossen."
 
-#~ msgid "back to home"
-#~ msgstr "züruck zur Hauptseite"
+msgid "Unknown import provider."
+msgstr "Unbekannter Import-Provider."
 
-#~ msgid "tweet"
-#~ msgstr "Twittern"
+msgid "Incomplete inc/poche/define.inc.php file, please define \""
+msgstr "Die Datei /inc/poche/define.inc.php ist unvollständig, bitte definiere \""
 
-#~ msgid "email"
-#~ msgstr "senden per E-Mail"
+msgid "Could not find required \""
+msgstr "Nicht gefunden: \""
 
-#~ msgid "this article appears wrong?"
-#~ msgstr "dieser Artikel erscheint falsch?"
+msgid "Uh, there is a problem while generating feeds."
+msgstr "Oh, es gibt ein Problem bei dem Generieren der Feeds."
 
-#~ msgid "Poching a link"
-#~ msgstr "Poche einen Link"
+msgid "Cache deleted."
+msgstr "Cache geleert."
 
-#~ msgid "by filling this field"
-#~ msgstr "durch das ausfüllen dieses Feldes:"
+msgid "Oops, it seems you don't have PHP 5."
+msgstr "Ups, es sieht so aus, als ob du nicht PHP 5 hast."
 
-#~ msgid "bookmarklet: drag & drop this link to your bookmarks bar"
-#~ msgstr "Bookmarklet: Ziehe diesen Link in deine Lesezeichen-Leiste"
+msgid "Add user"
+msgstr "Benutzer hinzufügen"
 
-#~ msgid "your version"
-#~ msgstr "Deine Version"
+msgid "Add a new user :"
+msgstr "Neuen Benutzer hinzufügen:"
 
-#~ msgid "latest stable version"
-#~ msgstr "Neuste stabile Version"
+msgid "Login for new user"
+msgstr "Benutzername des neuen Benutzers"
 
-#~ msgid "a more recent stable version is available."
-#~ msgstr "Eine neuere stabile Version ist verfügbar."
+msgid "Password for new user"
+msgstr "Passwort des neuen Benutzers"
 
-#~ msgid "you are up to date."
-#~ msgstr "Du bist auf den neuesten Stand."
+msgid "Email for new user (not required)"
+msgstr "E-Mail-Adresse des neuen Benutzers (nicht erforderlich)"
 
-#~ msgid "latest dev version"
-#~ msgstr "Neuste Entwicklungsversion"
+msgid "Send"
+msgstr "Senden"
 
-#~ msgid "a more recent development version is available."
-#~ msgstr "Eine neuere Entwicklungsversion ist verfügbar."
+msgid "Delete account"
+msgstr "Account löschen"
 
-#~ msgid ""
-#~ "Please execute the import script locally, it can take a very long time."
-#~ msgstr ""
-#~ "Bitte führe das Import Script lokal aus, dies kann eine Weile dauern."
+msgid "You can delete your account by entering your password and validating."
+msgstr "Du kannst deinen Account löschen, indem du dein Kennwort eintippst und validierst."
 
-#~ msgid "More infos in the official doc:"
-#~ msgstr "Mehr Informationen in der offiziellen Dokumentation:"
+msgid "Be careful, data will be erased forever (that is a very long time)."
+msgstr "Pass auf, die Daten werden für immer gelöscht werden (eine sehr lange Zeit)."
 
-#~ msgid "import from Pocket"
-#~ msgstr "Import aus Pocket"
+msgid "Type here your password"
+msgstr "Kennwort hier eintippen"
 
-#~ msgid "(you must have a %s file on your server)"
-#~ msgstr "(du brauchst eine %s Datei auf deinem Server)"
+msgid "You are the only user, you cannot delete your own account."
+msgstr "Du kannst deinen Account nicht löschen, weil du der einzige Benutzer bist."
 
-#~ msgid "import from Readability"
-#~ msgstr "Import aus Readability"
+msgid "To completely remove wallabag, delete the wallabag folder on your web server (and eventual databases)."
+msgstr "Um wallabag komplett zu entfernen, lösche den wallabag-Ordner und die Datenbank(en) von deinem Webserver."
 
-#~ msgid "import from Instapaper"
-#~ msgstr "Import aus Instapaper"
+msgid "Enter your search here"
+msgstr "Suchbegriff hier eintippen"
 
-#~ msgid "You can also create a cron task:"
-#~ msgstr "Du kannst auch einen cronjob anlegen:"
+msgid "Tag these results as"
+msgstr "Diese Ergebnisse verschlagworten mit"
 
-#~ msgid ""
-#~ "Please execute the import script locally as it can take a very long time."
-#~ msgstr ""
-#~ "Bitte führe das Import Script lokal aus, da dies eine Weile dauern kann."
+# ebook
+msgid "Fancy an E-Book ?"
+msgstr "Willst du ein E-Book?"
 
-#~ msgid "More info in the official documentation:"
-#~ msgstr "Mehr Informationen in der offiziellen Dokumentation:"
+msgid "Click on <a href=\"./?epub&amp;method=all\" title=\"Generate ePub\">this link</a> to get all your articles in one ebook (ePub 3 format)."
+msgstr "Klicke auf <a href=\"./?epub&amp;method=all\" title=\"EPUB erstellen\">diesen Link</a>, um alle Artikel in ein E-Book (EPUB 3-Format) zu exportieren."
 
-#~ msgid "import from instapaper completed"
-#~ msgstr "Import aus Instapaper erfolgreich"
+msgid "This can <b>take a while</b> and can <b>even fail</b> if you have too many articles, depending on your server configuration."
+msgstr "Dies kann <b>eine Weile dauern</b> oder <b>sogar fehlschlagen</b>, wenn du zu viele Artikel hast, abhängig von deiner Server-Konfiguration."
 
-#~ msgid "import from pocket completed"
-#~ msgstr "Import aus Pocket erfolgreich"
+msgid "Download the articles from this tag in an epub"
+msgstr "Die Artikel von diesem Schlagwort als EPUB herunterladen"
 
-#~ msgid "import from Poche completed. "
-#~ msgstr "Import aus Poche erfolgreich"
+msgid "Download the articles from this search in an epub"
+msgstr "Alle Artikel aus dieser Suche als EPUB herunterladen"
 
-#~ msgid "Incomplete inc/poche/define.inc.php file, please define \""
-#~ msgstr "Unvollständige inc/poche/define.inc.php Datei, bitte setze \""
+msgid "Download the articles from this category in an epub"
+msgstr "Alle Artikel aus dieser Kategorie als EPUB herunterladen"
 
 #~ msgid "poche it!"
-#~ msgstr "Poche es!"
+#~ msgstr "poche it!"
 
 #~ msgid "Updating poche"
-#~ msgstr "Poche aktualisieren"
+#~ msgstr "Updating poche"
 
 #~ msgid "create an issue"
-#~ msgstr "ein Ticket erstellen"
+#~ msgstr "create an issue"
 
 #~ msgid "or"
-#~ msgstr "oder"
+#~ msgstr "or"
 
 #~ msgid "contact us by mail"
-#~ msgstr "kontaktieren Sie uns per E-Mail"
+#~ msgstr "contact us by mail"
 
 #~ msgid "your poche version:"
-#~ msgstr "Deine Poche Version"
+#~ msgstr "your poche version:"
diff --git a/locale/en_GB.utf8/LC_MESSAGES/en_GB.utf8.mo b/locale/en_GB.utf8/LC_MESSAGES/en_GB.utf8.mo
new file mode 100644 (file)
index 0000000..c667845
Binary files /dev/null and b/locale/en_GB.utf8/LC_MESSAGES/en_GB.utf8.mo differ
diff --git a/locale/en_GB.utf8/LC_MESSAGES/en_GB.utf8.po b/locale/en_GB.utf8/LC_MESSAGES/en_GB.utf8.po
new file mode 100644 (file)
index 0000000..e6c558d
--- /dev/null
@@ -0,0 +1,681 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: wallabag\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-02-25 15:17+0300\n"
+"PO-Revision-Date: \n"
+"Last-Translator: tcit <tcit@openmailbox.org>\n"
+"Language-Team: \n"
+"Language: en-GB\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.5.4\n"
+"X-Poedit-Basepath: .\n"
+
+msgid "wallabag, a read it later open source system"
+msgstr "wallabag, an open source \"Read It Later\" service"
+
+msgid "login failed: user doesn't exist"
+msgstr "Login failed: user doesn't exist"
+
+msgid "return home"
+msgstr "Return Home"
+
+msgid "config"
+msgstr "Config"
+
+msgid "Saving articles"
+msgstr "Saving articles"
+
+msgid "There are several ways to save an article:"
+msgstr "There are several ways to save an article:"
+
+msgid "read the documentation"
+msgstr "Read the documentation"
+
+msgid "download the extension"
+msgstr "Download the extension"
+
+msgid "Firefox Add-On"
+msgstr "Firefox Add-On"
+
+msgid "Chrome Extension"
+msgstr "Chrome Extension"
+
+msgid "via F-Droid"
+msgstr "via F-Droid"
+
+msgid " or "
+msgstr " or "
+
+msgid "via Google Play"
+msgstr "via Google Play"
+
+msgid "download the application"
+msgstr "Download the application"
+
+msgid "By filling this field"
+msgstr "By filling in this field"
+
+msgid "bag it!"
+msgstr "bag it!"
+
+msgid "Bookmarklet: drag & drop this link to your bookmarks bar"
+msgstr "Bookmarklet: Drag & drop this link to your bookmarks bar"
+
+msgid "Upgrading wallabag"
+msgstr "Upgrading wallabag"
+
+msgid "Installed version"
+msgstr "Installed version"
+
+msgid "Latest stable version"
+msgstr "Latest stable version"
+
+msgid "A more recent stable version is available."
+msgstr "A more recent stable version is available."
+
+msgid "You are up to date."
+msgstr "You are up to date."
+
+msgid "Latest dev version"
+msgstr "Latest dev version"
+
+msgid "A more recent development version is available."
+msgstr "A more recent development version is available."
+
+msgid "Feeds"
+msgstr "Feeds"
+
+msgid ""
+"Your feed token is currently empty and must first be generated to enable "
+"feeds. Click <a href='?feed&amp;action=generate'>here to generate it</a>."
+msgstr ""
+"Your feed token is currently empty. You must generated it to enable feeds. "
+"<a href='?feed&amp;action=generate'>Generate Feed Token</a>."
+
+msgid "Unread feed"
+msgstr "Unread feed"
+
+msgid "Favorites feed"
+msgstr "Favourites feed"
+
+msgid "Archive feed"
+msgstr "Archive feed"
+
+msgid "Your token:"
+msgstr "Your token:"
+
+msgid "Your user id:"
+msgstr "Your user ID:"
+
+msgid ""
+"You can regenerate your token: <a href='?feed&amp;action=generate'>generate!"
+"</a>."
+msgstr "<a href='?feed&amp;action=generate'>Regenerate Token</a>"
+
+msgid "Change your theme"
+msgstr "Change Your Theme"
+
+msgid "Theme:"
+msgstr "Theme:"
+
+msgid "Update"
+msgstr "Update"
+
+msgid "Change your language"
+msgstr "Change Your Language"
+
+msgid "Language:"
+msgstr "Language:"
+
+msgid "Change your password"
+msgstr "Change Your Password"
+
+msgid "New password:"
+msgstr "New password:"
+
+msgid "Password"
+msgstr "Password"
+
+msgid "Repeat your new password:"
+msgstr "Repeat your new password:"
+
+msgid "Import"
+msgstr "Import"
+
+msgid ""
+"You can import your Pocket, Readability, Instapaper, Wallabag or any data in "
+"appropriate json or html format."
+msgstr ""
+"You can import your Pocket, Readability, Instapaper, wallabag or any other "
+"data in JSON or HTML format."
+
+msgid ""
+"Please execute the import script locally as it can take a very long time."
+msgstr "Please run the import script locally as it can take a very long time."
+
+msgid ""
+"Please select export file on your computer and press \"Import\" button "
+"below. Wallabag will parse your file, insert all URLs and start fetching of "
+"articles if required."
+msgstr ""
+"Please select export file on your computer and press the &ldquo;"
+"Import&rdquo; button below. wallabag will parse your file, insert all URLs "
+"and start fetching articles if required. Please execute the import script "
+"locally as it can take a very long time."
+
+msgid "You can click here to fetch content for articles with no content."
+msgstr "Fetch content for articles with no content"
+
+msgid "More info in the official documentation:"
+msgstr "More info in the official documentation:"
+
+msgid ""
+"(<a href=\"http://doc.wallabag.org/en/User_documentation/"
+"Save_your_first_article\" target=\"_blank\" title=\"Documentation\">?</a>)"
+msgstr ""
+"(<a href=\"http://doc.wallabag.org/en/User_documentation/"
+"Save_your_first_article\" target=\"_blank\" title=\"Documentation\">?</a>)"
+
+msgid "Import from Pocket"
+msgstr "Import from Pocket"
+
+#, php-format
+msgid "(you must have a %s file on your server)"
+msgstr "(you must have a %s file on your server)"
+
+msgid "Import from Readability"
+msgstr "Import from Readability"
+
+msgid "Import from Instapaper"
+msgstr "Import from Instapaper"
+
+msgid "Import from wallabag"
+msgstr "Import from wallabag"
+
+msgid "Export your wallabag data"
+msgstr "Export your wallabag data"
+
+msgid "Click here"
+msgstr "Click here"
+
+msgid "to download your database."
+msgstr "to download your database."
+
+msgid "to export your wallabag data."
+msgstr "to export your wallabag data."
+
+msgid "Export JSON"
+msgstr "Export JSON"
+
+msgid "Cache"
+msgstr "Cache"
+
+msgid "to delete cache."
+msgstr "to delete cache."
+
+msgid "Delete Cache"
+msgstr "Delete Cache"
+
+msgid "You can enter multiple tags, separated by commas."
+msgstr "You can enter multiple tags, separated by commas."
+
+msgid "Add tags:"
+msgstr "Add tags:"
+
+msgid "no tags"
+msgstr "no tags"
+
+msgid "The tag has been applied successfully"
+msgstr "The tag has been applied successfully"
+
+msgid "interview"
+msgstr "interview"
+
+msgid "editorial"
+msgstr "editorial"
+
+msgid "video"
+msgstr "video"
+
+msgid "return to article"
+msgstr "Return to article"
+
+msgid "plop"
+msgstr "plop"
+
+msgid ""
+"You can <a href='wallabag_compatibility_test.php'>check your configuration "
+"here</a>."
+msgstr ""
+"You can <a href='wallabag_compatibility_test.php'>check your configuration "
+"here</a>."
+
+msgid "favoris"
+msgstr "Favourites"
+
+msgid "archive"
+msgstr "Archive"
+
+msgid "unread"
+msgstr "Unread"
+
+msgid "by date asc"
+msgstr "by date ascending"
+
+msgid "by date"
+msgstr "by date"
+
+msgid "by date desc"
+msgstr "by date descending"
+
+msgid "by title asc"
+msgstr "by title ascending"
+
+msgid "by title"
+msgstr "by title"
+
+msgid "by title desc"
+msgstr "by title descending"
+
+msgid "Tag"
+msgstr "Tag"
+
+msgid "No articles found."
+msgstr "No articles found."
+
+msgid "Toggle mark as read"
+msgstr "Toggle mark as read"
+
+msgid "toggle favorite"
+msgstr "Toggle favourite"
+
+msgid "delete"
+msgstr "Delete"
+
+msgid "original"
+msgstr "Original"
+
+msgid "estimated reading time:"
+msgstr "Estimated reading time:"
+
+msgid "mark all the entries as read"
+msgstr "Mark all the entries as read"
+
+msgid "results"
+msgstr "Results"
+
+msgid "installation"
+msgstr "Installation"
+
+msgid "install your wallabag"
+msgstr "Install your wallabag"
+
+msgid ""
+"wallabag is still not installed. Please fill the below form to install it. "
+"Don't hesitate to <a href='http://doc.wallabag.org/'>read the documentation "
+"on wallabag website</a>."
+msgstr ""
+"wallabag is still not installed. Please fill in the form to install it.  If "
+"you need help, please <a href='http://doc.wallabag.org/'>read the "
+"documentation on wallabag website</a>."
+
+msgid "Login"
+msgstr "Login"
+
+msgid "Repeat your password"
+msgstr "Repeat your password"
+
+msgid "Install"
+msgstr "Install"
+
+msgid "login to your wallabag"
+msgstr "Login to your wallabag"
+
+msgid "Login to wallabag"
+msgstr "Login to wallabag"
+
+msgid "you are in demo mode, some features may be disabled."
+msgstr "You are in demo mode; some features may be disabled."
+
+msgid "Username"
+msgstr "Username"
+
+msgid "Stay signed in"
+msgstr "Stay signed in"
+
+msgid "(Do not check on public computers)"
+msgstr "(Do not check on public computers)"
+
+msgid "Sign in"
+msgstr "Sign in"
+
+msgid "favorites"
+msgstr "Favourites"
+
+msgid "estimated reading time :"
+msgstr "Estimated reading time:"
+
+msgid "Mark all the entries as read"
+msgstr "Mark all the entries as read"
+
+msgid "Return home"
+msgstr "Return home"
+
+msgid "Back to top"
+msgstr "Back to top"
+
+msgid "Mark as read"
+msgstr "Mark as read"
+
+msgid "Favorite"
+msgstr "Favourite"
+
+msgid "Toggle favorite"
+msgstr "Toggle favourite"
+
+msgid "Delete"
+msgstr "Delete"
+
+msgid "Tweet"
+msgstr "Tweet"
+
+msgid "Email"
+msgstr "Email"
+
+msgid "shaarli"
+msgstr "shaarli"
+
+msgid "flattr"
+msgstr "flattr"
+
+msgid "Does this article appear wrong?"
+msgstr "Does this article display incorrectly?"
+
+msgid "tags:"
+msgstr "tags:"
+
+msgid "Edit tags"
+msgstr "Edit Tags"
+
+msgid "save link!"
+msgstr "Save Link"
+
+msgid "home"
+msgstr "Home"
+
+msgid "tags"
+msgstr "Tags"
+
+msgid "logout"
+msgstr "Logout"
+
+msgid "powered by"
+msgstr "Powered by"
+
+msgid "debug mode is on so cache is off."
+msgstr "Debug mode is on, so the cache is off."
+
+msgid "your wallabag version:"
+msgstr "Your wallabag version:"
+
+msgid "storage:"
+msgstr "Storage:"
+
+msgid "save a link"
+msgstr "Save a Link"
+
+msgid "back to home"
+msgstr "Back to Home"
+
+msgid "toggle mark as read"
+msgstr "Toggle mark as read"
+
+msgid "tweet"
+msgstr "Tweet"
+
+msgid "email"
+msgstr "Email"
+
+msgid "this article appears wrong?"
+msgstr "This article displays incorrectly?"
+
+msgid "No link available here!"
+msgstr "No link available here"
+
+msgid "Poching a link"
+msgstr "bagging a link"
+
+msgid "by filling this field"
+msgstr "by filling in this field"
+
+msgid "bookmarklet: drag & drop this link to your bookmarks bar"
+msgstr "Bookmarklet: Drag & drop this link to your bookmarks bar"
+
+msgid "Drag &amp; drop this link to your bookmarks bar:"
+msgstr "Drag &amp; drop this link to your bookmarks bar:"
+
+msgid "your version"
+msgstr "your version"
+
+msgid "latest stable version"
+msgstr "latest stable version"
+
+msgid "a more recent stable version is available."
+msgstr "A more recent stable version is available."
+
+msgid "you are up to date."
+msgstr "You are up to date."
+
+msgid "latest dev version"
+msgstr "latest development version"
+
+msgid "a more recent development version is available."
+msgstr "A more recent development version is available."
+
+msgid "You can clear cache to check the latest release."
+msgstr ""
+"You can <a href=\"#cache\">clear the cache</a> to check for the latest "
+"release."
+
+msgid "Please execute the import script locally, it can take a very long time."
+msgstr "Please run the import script locally as it can take a very long time."
+
+msgid "More infos in the official doc:"
+msgstr "More information in the official doc:"
+
+msgid "import from Pocket"
+msgstr "Import from Pocket"
+
+msgid "import from Readability"
+msgstr "Import from Readability"
+
+msgid "import from Instapaper"
+msgstr "Import from Instapaper"
+
+msgid "Tags"
+msgstr "Tags"
+
+msgid "Untitled"
+msgstr "Untitled"
+
+msgid "the link has been added successfully"
+msgstr "The link has been added successfully."
+
+msgid "error during insertion : the link wasn't added"
+msgstr "Error during insertion: the link wasn't added."
+
+msgid "the link has been deleted successfully"
+msgstr "The link has been deleted successfully."
+
+msgid "the link wasn't deleted"
+msgstr "The link wasn't deleted."
+
+msgid "Article not found!"
+msgstr "Article not found."
+
+msgid "previous"
+msgstr "Previous"
+
+msgid "next"
+msgstr "Next"
+
+msgid "in demo mode, you can't update your password"
+msgstr "In demo mode, you can't update your password."
+
+msgid "your password has been updated"
+msgstr "Your password has been updated."
+
+msgid ""
+"the two fields have to be filled & the password must be the same in the two "
+"fields"
+msgstr ""
+"The two fields must be filled in, and the password must be the same in both "
+"fields"
+
+msgid "still using the \""
+msgstr "Still using the \""
+
+msgid "that theme does not seem to be installed"
+msgstr "That theme is not installed."
+
+msgid "you have changed your theme preferences"
+msgstr "You have changed your theme preferences."
+
+msgid "that language does not seem to be installed"
+msgstr "That language is not installed."
+
+msgid "you have changed your language preferences"
+msgstr "You have changed your language preferences."
+
+msgid "login failed: you have to fill all fields"
+msgstr "Login failed: you have to fill in all the fields."
+
+msgid "welcome to your wallabag"
+msgstr "Welcome to your wallabag."
+
+msgid "login failed: bad login or password"
+msgstr "Login failed: bad login or password."
+
+msgid "import from instapaper completed"
+msgstr "Import from Instapaper completed."
+
+msgid "import from pocket completed"
+msgstr "Import from Pocket completed."
+
+msgid "import from Readability completed. "
+msgstr "Import from Readability completed."
+
+msgid "import from Poche completed. "
+msgstr "Import from Poche completed. "
+
+msgid "Unknown import provider."
+msgstr "Unknown import provider."
+
+msgid "Incomplete inc/poche/define.inc.php file, please define \""
+msgstr "Incomplete inc/poche/define.inc.php file, please define \""
+
+msgid "Could not find required \""
+msgstr "Could not find required \""
+
+msgid "Uh, there is a problem while generating feeds."
+msgstr "There is a problem generating feeds."
+
+msgid "Cache deleted."
+msgstr "Cache deleted."
+
+msgid "Oops, it seems you don't have PHP 5."
+msgstr "Oops, it seems you don't have PHP 5."
+
+msgid "Add user"
+msgstr "Add User"
+
+msgid "Add a new user :"
+msgstr "Add a new user:"
+
+msgid "Login for new user"
+msgstr "Login for new user:"
+
+msgid "Password for new user"
+msgstr "Password for new user:"
+
+msgid "Email for new user (not required)"
+msgstr "Email for new user (not required):"
+
+msgid "Send"
+msgstr "Send"
+
+msgid "Delete account"
+msgstr "Delete Account"
+
+msgid "You can delete your account by entering your password and validating."
+msgstr "You can delete your account by entering your password and confirming."
+
+msgid "Be careful, data will be erased forever (that is a very long time)."
+msgstr "Be careful, data will be erased forever (that is a very long time)."
+
+msgid "Type here your password"
+msgstr "Enter your password"
+
+msgid "You are the only user, you cannot delete your own account."
+msgstr "You are the only user; you cannot delete your own account."
+
+msgid ""
+"To completely remove wallabag, delete the wallabag folder on your web server "
+"(and eventual databases)."
+msgstr ""
+"To completely remove wallabag, delete the wallabag folder on your web "
+"server.  Then delete any any databases you have created for wallabag."
+
+msgid "Enter your search here"
+msgstr "Enter your search here"
+
+msgid "Tag these results as"
+msgstr "Tag these results as"
+
+# ebook
+msgid "Fancy an E-Book ?"
+msgstr "Fancy an E-Book?"
+
+msgid ""
+"Click on <a href=\"./?epub&amp;method=all\" title=\"Generate ePub\">this "
+"link</a> to get all your articles in one ebook (ePub 3 format)."
+msgstr ""
+"You can <a href=\"./?epub&amp;method=all\" title=\"Generate EPUB\">Generate "
+"an EPUB</a> to get all your articles in one ebook (EPUB 3 format)."
+
+msgid ""
+"This can <b>take a while</b> and can <b>even fail</b> if you have too many "
+"articles, depending on your server configuration."
+msgstr ""
+"This can <b>take a while</b> and can <b>even fail</b> if you have too many "
+"articles, depending on your server configuration."
+
+msgid "Download the articles from this tag in an epub"
+msgstr "Download the articles from this tag as an EPUB"
+
+msgid "Download the articles from this search in an epub"
+msgstr "Download the articles from this search as an EPUB"
+
+msgid "Download the articles from this category in an epub"
+msgstr "Download the articles from this category as an EPUB"
+
+#~ msgid "poche it!"
+#~ msgstr "poche it!"
+
+#~ msgid "Updating poche"
+#~ msgstr "Updating poche"
+
+#~ msgid "create an issue"
+#~ msgstr "create an issue"
+
+#~ msgid "or"
+#~ msgstr "or"
+
+#~ msgid "contact us by mail"
+#~ msgstr "contact us by mail"
+
+#~ msgid "your poche version:"
+#~ msgstr "your poche version:"
index 77dee0708e05000ddd0974f722d78e7aa7d22960..025231250ebaa376d2b3c3a7a067d9351810e2be 100644 (file)
Binary files a/locale/en_US.utf8/LC_MESSAGES/en_US.utf8.mo and b/locale/en_US.utf8/LC_MESSAGES/en_US.utf8.mo differ
index 579d1acad746094155e6faad03e9270431d84405..75dad661e762ec1a88d4a30aaf2591b63a8f629d 100644 (file)
@@ -663,6 +663,56 @@ msgstr "Download the articles from this search in an EPUB"
 msgid "Download the articles from this category in an epub"
 msgstr "Download the articles from this category in an EPUB"
 
+# registration
+msgid "Hi,"
+msgstr "Hi,"
+
+msgid "Hi, %1$s"
+msgstr "Hi, %1$s"
+
+msgid "Someone just created a wallabag account for you on %1$s."
+msgstr "Someone just created a wallabag account for you on %1$s."
+
+msgid "Your login is %1$s."
+msgstr "Your login is %1$s."
+
+msgid "Have fun with it !"
+msgstr "Have fun with it !"
+
+msgid ""
+"This is an automatically generated message, no one will answer if you "
+"respond to it."
+msgstr ""
+"This is an automatically generated message, no one will answer if you "
+"respond to it."
+
+msgid ""
+"Note : The password has been chosen by the person who created your account. "
+"Get in touch with that person to know your password and change it as soon as "
+"possible"
+msgstr ""
+"Note : The password has been chosen by the person who created your account. "
+"Get in touch with that person to know your password and change it as soon as "
+"possible"
+
+msgid ""
+"The new user %1$s has been sent an email at %2$s. You may have to check spam "
+"folder."
+msgstr ""
+"The new user %1$s has been sent an email at %2$s. You may have to check spam "
+"folder."
+
+msgid "A problem has been encountered while sending the confirmation email"
+msgstr "A problem has been encountered while sending an confirmation email"
+
+msgid "The server did not authorize sending a confirmation email"
+msgstr "The server did not authorize sending a confirmation email"
+
+msgid ""
+"The user was created, but no email was sent because email was not filled in"
+msgstr ""
+"The user was created, but no email was sent because email was not filled in"
+
 #~ msgid "poche it!"
 #~ msgstr "poche it!"
 
index 83f397a05d37afd64e4e148c7340b97ae3144b2e..b3b2f6fed9ebafeba0bb90d7c8216628720f3ec4 100644 (file)
Binary files a/locale/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.mo and b/locale/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.mo differ
index fef3120830babae6879352445f19b1dc2c775fb9..948a835643ddbe3bd9fa8ade5458a1cd2daa3960 100644 (file)
@@ -789,6 +789,58 @@ msgstr ""
 msgid "Produced by wallabag with PHPMobi"
 msgstr "Produit par wallabag avec PHPMobi"
 
+# registration
+msgid "Hi,"
+msgstr "Salut,"
+
+msgid "Hi, %1$s"
+msgstr "Salut, %1$s"
+
+msgid "Someone just created a wallabag account for you on %1$s."
+msgstr ""
+"Quelqu'un vient juste de créer un compte wallabag pour vous à l'adresse %1$s."
+
+msgid "Your login is %1$s."
+msgstr "Votre identifiant is %1$s."
+
+msgid "Have fun with it !"
+msgstr "Amusez-vous bien !"
+
+msgid ""
+"This is an automatically generated message, no one will answer if you "
+"respond to it."
+msgstr ""
+"Ceci est un message généré automatiquement, personne ne vous répondra si "
+"vous y répondez."
+
+msgid ""
+"Note : The password has been chosen by the person who created your account. "
+"Get in touch with that person to know your password and change it as soon as "
+"possible"
+msgstr ""
+"Note : Votre mot de passe a été défini par la personne ayant créé votre "
+"compte. Vous devriez entrer en contact avec cette personne pour connaître "
+"votre mot de passe et le changer dès que possible"
+
+msgid ""
+"The new user %1$s has been sent an email at %2$s. You may have to check spam "
+"folder."
+msgstr ""
+"Un email a été envoyé au nouvel utiliateur %1$s à l'adresse %2$s. Il peut "
+"être nécessaire de vérifier le dossier des spams."
+
+msgid "A problem has been encountered while sending the confirmation email"
+msgstr "Un problème a été rencontré lors de l'envoi de l'email de confirmation"
+
+msgid "The server did not authorize sending a confirmation email"
+msgstr "Le serveur n'autorise pas l'envoi d'un email de confirmation"
+
+msgid ""
+"The user was created, but no email was sent because email was not filled in"
+msgstr ""
+"L'utilisateur a été créé, mais aucun mail n'a été envoyé car l'email n'était "
+"pas renseigné"
+
 msgid "Mail function is disabled. You can't send emails from your server"
 msgstr ""
 "La fonction mail est désactivée. Vous ne pouvez pas envoyer d'E-mails depuis "
diff --git a/themes/_global/img/icons/evernote-icon--black.svg b/themes/_global/img/icons/evernote-icon--black.svg
new file mode 100644 (file)
index 0000000..1336648
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generated by IcoMoon.io -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="640" height="640" viewBox="0 0 640 640"><g id="icomoon-ignore">
+</g>
+<path d="M554.848 137.824c0-36.8-55.424-40.864-55.424-40.864l-130.208-8.192c0 0-2.784-35.424-29.088-47.744-26.304-12.256-55.232-8.512-76.032-8.32-20.8 0.224-25.696 26.72-25.696 51.744 0 24.992 0.448 53.888 0.448 72 0 32.576-14.304 46.368-50.112 46.368h-73.824c-20.64-1.312-36.704 2.048-36.704 18.752 0 16.736 24.288 159.136 57.632 192 19.36 19.072 137.76 32.448 162.688 32.448s16.608-73.632 23.552-73.632c6.944 0 14.528 41.568 53.824 51.296 39.232 9.824 91.648 8 94.432 35.936 3.616 36.864 6.944 84.544-17.312 87.936l-54.912 2.176c-37.632-2.688-27.52-43.808-10.912-43.808s24.928-0.608 24.928-0.608l2.080-44.992c0 0-86.176-10.176-89.824 47.936-3.36 53.12 5.76 78.176 12.448 83.616 6.688 5.504 18.272 16.128 123.808 16.128 148.704 0 94.208-433.376 94.208-470.176zM494.080 330.24c-5.824 6.272-26.944-10.24-47.104-10.24-20.192 0-41.952 10.688-47.072 3.616-5.12-7.008 4.672-63.68 42.688-63.68s57.376 64.128 51.488 70.304z" fill="rgb(68, 68, 68)"></path>
+<path d="M185.728 133.312c0-7.328 1.856-95.488 1.856-95.488l-112.16 110.080c0 0 77.504 0 92.736 0 15.232-0.032 17.568-7.328 17.568-14.592z" fill="rgb(68, 68, 68)"></path>
+</svg>
index a7acd84c3e808969cac189ca5cf57d267cdba8d6..b7dd7a34fea58c657991276458c34c583072079d 100755 (executable)
@@ -4,6 +4,8 @@ $.fn.ready(function() {
       $bagitForm = $('#bagit-form'),
       $bagitFormForm = $('#bagit-form-form');
 
+$("#tags2add").hide();
+
   /* ==========================================================================
    bag it link and close button
    ========================================================================== */
@@ -78,6 +80,14 @@ $.fn.ready(function() {
     event.preventDefault();
   });
 
+$('#showtaginput').click(function(){
+  $('#tags2add').toggle();
+  $('#plainurl').toggle();
+  $('#showtaginput').toggleClass('icon-tags');
+  $('#showtaginput').toggleClass('icon-check');
+});
+
+
   /* ==========================================================================
    Keyboard gestion
    ========================================================================== */
index bf2ae903769637405f2fadfecf03200d4a19e91f..85d33873318749f5a62ba0a8fea04c7afd084c9c 100755 (executable)
@@ -4,6 +4,10 @@
         <a href="javascript: void(null);" id="bagit-form-close" class="close-button--popup close-button">&times;</a>
         <input type="hidden" name="autoclose" value="1" />
         <input required placeholder="example.com/article" class="addurl" id="plainurl" name="plainurl" type="url" />
+        <div style="display:inline-block;cursor: pointer;" title="{% trans "Edit tags" %}" id="showtaginput" class="tool icon icon-tags">
+            <span>Add tags</span>
+        </div>
+        <input placeholder="tags, with commas" class="addurl" id="tags2add" name="tags" type="text"/>
         <span id="add-link-result"></span>
         <input type="submit" value="{% trans "save link!" %}" />
     </form>
index 110196a621fdbebd9e78ef4e6816368ff6497790..93c96df207f7a0333ddd4ac967b23459c55134dd 100755 (executable)
@@ -7,6 +7,8 @@
 {% block content %}
     <h2>{% trans "About wallabag" %}</h2>
 
+    <p>{% trans "wallabag is a read-it-later application: you can save a web page by keeping only content. Elements like ads or menus are deleted." %}</p>
+
     <dl>
         <dt>{% trans "Project website" %}</dt>
         <dd><a href="https://www.wallabag.org">https://www.wallabag.org</a></dd>
@@ -27,8 +29,6 @@
         <dd>{{ constant('POCHE') }}</dd>
     </dl>
 
-    <p>{% trans "wallabag is a read-it-later application: you can save a web page by keeping only content. Elements like ads or menus are deleted." %}</p>
-
     <h2>{% trans "Getting help" %}</h2>
     
     <dl>
index a5a615597ec3cefb0dfd4e1c7822748eaa41e704..95e0973484e2ba7dc5f46d63508914abcc09fdd6 100755 (executable)
@@ -27,7 +27,7 @@
             </ul>
                 <h3>{% trans "Bookmarklet" %}</h3>
                 <p>
-                {% trans "Drag &amp; drop this link to your bookmarks bar:" %} <a id="bookmarklet" ondragend="this.click();" href="javascript:if(top['bookmarklet-url@wallabag.org']){top['bookmarklet-url@wallabag.org'];}else{(function(){var%20url%20=%20location.href%20||%20url;window.open('{{ poche_url }}?action=add&url='%20+%20btoa(url),'_self');})();void(0);}">{% trans "bag it!" %}</a>
+                {% trans "Drag &amp; drop this link to your bookmarks bar:" %} <a id="bookmarklet" ondragend="this.click();" href="javascript:if(top['bookmarklet-url@wallabag.org']){top['bookmarklet-url@wallabag.org'];}else{(function(){var%20url%20=%20location.href%20||%20url;window.open('{{ poche_url }}?action=add&autoclose=true&url='%20+%20btoa(url),'_blank');})();void(0);}">{% trans "bag it!" %}</a>
                 </p>
 
             <h2>{% trans "Feeds" %}</h2>
index 1df82910164098c95b5542d14c3f5e2efbf5ea79..b93a78b82e074d7e4c8173188d6349f0371aefcc 100755 (executable)
@@ -736,6 +736,18 @@ a.add-to-wallabag-link-after:after {
 .icon-print:before {
   content: "\e80d";
 }
+.icon-random:before {
+  content: "\e915";
+}
+.icon-reload:before {
+  content: "\ea2e";
+}
+.icon-evernote:before {
+  content: "\e603";
+}
+.icon-tags:before {
+  content: "\e936";
+}
 
 
 /* .icon-image class, for image-based icons
index 563235166982e94bcbb1275d5f7fe0122b742aa8..3d4d14ae8a3c0b3f97cd8a3c0868a152944a0c3f 100644 (file)
Binary files a/themes/baggy/fonts/icomoon.eot and b/themes/baggy/fonts/icomoon.eot differ
index b458613639e3d09ec0c481c73c111b2c7d06f24b..19fcfa1f3479f2a4f46148a4a1116fe4b4e2f56c 100644 (file)
@@ -1,41 +1,39 @@
 <?xml version="1.0" standalone="no"?>
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
 <svg xmlns="http://www.w3.org/2000/svg">
-<metadata>
-<json>
-{
-       "fontFamily": "icomoon",
-       "majorVersion": 1,
-       "minorVersion": 0,
-       "version": "Version 1.0",
-       "fontId": "icomoon",
-       "psName": "icomoon",
-       "subFamily": "Regular",
-       "fullName": "icomoon",
-       "description": "Generated by IcoMoon"
-}
-</json>
-</metadata>
+<metadata>Generated by IcoMoon</metadata>
 <defs>
-<font id="icomoon" horiz-adv-x="512">
-<font-face units-per-em="512" ascent="480" descent="-32" />
-<missing-glyph horiz-adv-x="512" />
-<glyph unicode="&#x20;" d="" horiz-adv-x="256" />
-<glyph unicode="&#xe600;" d="M256 389.333c-94.272 0-170.667-76.416-170.667-170.666s76.394-170.667 170.667-170.667 170.667 76.416 170.667 170.667-76.394 170.666-170.667 170.666zM335.082 169.749c8.341-8.341 8.341-21.824 0-30.166-4.16-4.16-9.622-6.25-15.082-6.25s-10.923 2.091-15.082 6.25l-48.918 48.918-48.917-48.918c-4.16-4.16-9.621-6.25-15.083-6.25s-10.923 2.091-15.083 6.25c-8.341 8.341-8.341 21.824 0 30.166l48.917 48.918-48.917 48.917c-8.341 8.341-8.341 21.824 0 30.166s21.824 8.341 30.166 0l48.917-48.917 48.918 48.917c8.341 8.341 21.824 8.341 30.166 0s8.341-21.824 0-30.166l-48.918-48.917 48.918-48.918z" />
-<glyph unicode="&#xe601;" d="M245.333 73.109c-37.035 0-71.85 14.421-98.048 40.598-26.176 26.197-40.618 61.014-40.618 98.070s14.442 71.872 40.618 98.070c8.341 8.341 21.824 8.341 30.166 0s8.341-21.824 0-30.166c-18.133-18.154-28.118-42.261-28.118-67.904s9.984-49.771 28.118-67.904c18.133-18.134 42.219-28.096 67.882-28.096s49.749 9.984 67.883 28.096c18.154 18.134 28.118 42.24 28.118 67.904s-9.984 49.771-28.118 67.904c-8.341 8.341-8.341 21.824 0 30.166s21.824 8.341 30.166 0c26.176-26.219 40.618-61.035 40.618-98.070s-14.442-71.872-40.618-98.070c-26.197-26.176-61.014-40.597-98.048-40.597zM245.333 234.667c-11.797 0-21.333 9.558-21.333 21.333v106.667c0 11.776 9.536 21.333 21.334 21.333s21.334-9.558 21.334-21.333v-106.667c0-11.776-9.536-21.333-21.334-21.333z" />
-<glyph unicode="&#xe602;" d="M256 401.664l-136.832-136.832c-16.662-16.661-16.662-43.67 0-60.331s43.669-16.661 60.331 0l33.834 33.835v-154.496c0-23.552 19.094-42.666 42.667-42.666 23.552 0 42.666 19.115 42.666 42.666v154.496l33.834-33.835c8.341-8.341 19.243-12.502 30.166-12.502s21.824 4.16 30.166 12.502c16.661 16.661 16.661 43.67 0 60.331l-136.832 136.832z" />
-<glyph unicode="&#xe800;" d="M0 25.856v263.168q0 91.648 43.52 142.336t132.608 50.688h280.576q-2.56-2.56-26.624-27.136t-51.2-51.712-55.808-55.808-48.64-47.616-21.504-18.944q-7.68 0-7.68 8.192v79.872h-24.576q-30.208 0-48.128-3.072t-32.256-13.312-19.968-29.184-6.144-49.152v-134.144zM34.304-34.048q2.56 2.56 27.136 27.136t51.2 51.712 55.808 56.32 48.64 47.616 20.992 18.432q7.68 0 7.68-8.192v-79.872h24.576q59.392 0 82.944 18.432t23.040 76.288v134.144l114.688 114.176v-263.168q0-91.648-43.008-142.336t-133.12-50.688h-280.576z" horiz-adv-x="491" />
-<glyph unicode="&#xe801;" d="M150.528 104.192q7.168 7.168 17.408 7.168t18.432-7.168q16.384-17.408 0-35.84l-21.504-20.48q-28.672-28.672-67.584-28.672-39.936 0-68.608 28.672t-28.672 67.584q0 39.936 28.672 68.608l75.776 75.776q35.84 34.816 73.728 39.424t65.536-22.016q8.192-8.192 8.192-18.432t-8.192-18.432q-18.432-16.384-35.84 0-25.6 24.576-67.584-17.408l-75.776-74.752q-13.312-13.312-13.312-32.768t13.312-31.744q13.312-13.312 32.256-13.312t32.256 13.312zM380.928 398.080q28.672-28.672 28.672-67.584 0-39.936-28.672-68.608l-80.896-80.896q-37.888-36.864-76.8-36.864-31.744 0-57.344 25.6-7.168 7.168-7.168 17.408t7.168 18.432q7.168 7.168 17.92 7.168t17.92-7.168q25.6-24.576 62.464 12.288l80.896 79.872q14.336 14.336 14.336 32.768 0 19.456-14.336 31.744-12.288 13.312-28.672 15.872t-30.72-10.752l-25.6-25.6q-8.192-7.168-18.432-7.168t-17.408 7.168q-17.408 17.408 0 35.84l25.6 25.6q27.648 27.648 65.024 26.112t66.048-31.232z" horiz-adv-x="410" />
-<glyph unicode="&#xe802;" d="M438.784 96v-36.352q0-7.68-5.12-12.8t-13.312-5.632h-401.92q-7.68 0-12.8 5.632t-5.632 12.8v36.352q0 7.68 5.632 12.8t12.8 5.632h401.92q7.68 0 13.312-5.632t5.12-12.8zM438.784 242.432v-36.864q0-7.168-5.12-12.8t-13.312-5.12h-401.92q-7.68 0-12.8 5.12t-5.632 12.8v36.864q0 7.168 5.632 12.8t12.8 5.12h401.92q7.68 0 13.312-5.12t5.12-12.8zM438.784 388.352v-36.352q0-7.68-5.12-12.8t-13.312-5.632h-401.92q-7.68 0-12.8 5.632t-5.632 12.8v36.352q0 7.68 5.632 13.312t12.8 5.12h401.92q7.68 0 13.312-5.12t5.12-13.312z" horiz-adv-x="439" />
-<glyph unicode="&#xe803;" d="M235.52 459.52q97.28 0 166.4-69.12t69.12-166.4-69.12-166.4-166.4-69.12-166.4 69.12-69.12 166.4 69.12 166.4 166.4 69.12zM235.52 39.68q76.8 0 130.56 54.272t53.76 130.048q0 76.8-53.76 130.56t-130.56 53.76q-75.776 0-130.048-53.76t-54.272-130.56q0-75.776 54.272-130.048t130.048-54.272zM253.952 357.12v-124.928l76.8-76.8-25.6-25.6-87.040 87.040v140.288h35.84z" horiz-adv-x="471" />
-<glyph unicode="&#xe804;" d="M127.488 44.8q-17.408 0-28.672 14.336l-92.16 120.832q-8.192 12.288-6.144 26.624t13.312 23.552 26.112 7.168 24.064-14.336l60.416-78.848 151.552 242.688q8.192 12.288 22.016 15.36t27.136-4.096q12.288-8.192 15.36-22.016t-4.096-27.136l-179.2-286.72q-10.24-16.384-28.672-16.384z" horiz-adv-x="342" />
-<glyph unicode="&#xe805;" d="M225.28 449.28l61.44-172.032h163.84l-134.144-100.352 48.128-178.176-139.264 106.496-139.264-106.496 48.128 178.176-134.144 100.352h163.84z" horiz-adv-x="451" />
-<glyph unicode="&#xe806;" d="M460.8 49.92q-44.032 77.824-106.496 100.864t-168.96 23.040v-111.616l-185.344 171.008 185.344 164.864v-98.304q46.080 0 86.016-13.824t67.072-35.84 49.152-48.64 35.328-53.248 22.528-48.64 12.288-35.328z" horiz-adv-x="461" />
-<glyph unicode="&#xe807;" d="M471.040 370.432q-18.432-27.648-48.128-50.176v-12.288q0-66.56-30.72-128t-95.232-103.936-148.48-42.496q-81.92 0-148.48 43.008 7.168-1.024 23.552-1.024 67.584 0 119.808 40.96-31.744 1.024-56.32 19.456t-33.792 48.128q5.12-2.048 17.408-2.048 13.312 0 25.6 3.072-33.792 7.168-55.296 33.792t-21.504 61.44v1.024q18.432-10.24 43.008-12.288-43.008 29.696-43.008 80.896 0 24.576 13.312 48.128 78.848-96.256 199.68-100.352-3.072 9.216-3.072 21.504 0 39.936 28.16 68.096t69.12 28.16q41.984 0 69.632-29.696 30.72 6.144 61.44 22.528-10.24-33.792-41.984-53.248 28.672 4.096 55.296 15.36z" horiz-adv-x="471" />
-<glyph unicode="&#xe808;" d="M109.568 96q0-23.040-15.872-38.912t-38.912-15.872-38.912 15.872-15.872 38.912 15.872 38.912 38.912 15.872 38.912-15.872 15.872-38.912zM256 60.672q0.512-7.68-4.608-13.312-5.632-6.144-13.824-6.144h-38.4q-7.168 0-12.288 4.608t-5.632 11.776q-6.144 65.536-52.736 112.128t-112.128 52.736q-7.168 0.512-11.776 5.632t-4.608 12.288v38.4q0 8.192 6.144 13.312 4.608 5.12 12.288 5.12h1.536q45.568-3.584 87.040-23.040t74.24-51.712q32.256-32.256 51.712-74.24t23.040-87.552zM402.432 60.16q0.512-7.68-5.12-13.312-5.12-5.632-13.312-5.632h-40.96q-7.168 0-12.8 5.12t-5.632 11.776q-3.072 61.44-28.672 116.736t-66.048 96.256-96.256 66.048-116.224 29.184q-7.168 0-12.288 5.632t-5.12 12.288v40.96q0 7.68 5.632 13.312 5.12 5.12 12.8 5.12h0.512q75.264-4.096 143.36-34.304t121.856-83.968q53.248-53.248 83.968-121.856t34.304-143.36z" horiz-adv-x="402" />
-<glyph unicode="&#xe809;" d="M0 314.112l75.776 75.776 180.224-179.712 180.224 179.712 75.776-75.776-256-256-75.776 75.776z" />
-<glyph unicode="&#xe80a;" d="M475.648 50.432v219.136q-9.216-10.24-19.968-18.944-76.288-58.368-121.856-96.256-14.336-12.288-23.552-19.456t-24.576-13.824-29.184-6.656h-1.024q-13.312 0-29.184 6.656t-24.576 13.824-23.552 19.456q-45.056 37.888-121.856 96.256-10.752 8.704-19.968 18.944v-219.136q0-4.096 3.072-6.656t6.144-2.56h420.864q3.584 0 6.144 2.56t3.072 6.656zM475.648 350.464v7.168t-0.512 3.584-0.512 3.584-1.536 2.56-2.56 2.048-4.096 1.024h-420.864q-3.584 0-6.144-3.072t-3.072-6.144q0-48.128 41.984-81.408 55.296-43.52 114.688-90.624 2.048-1.024 10.24-8.192t12.8-10.752 12.8-9.216 14.336-7.68 12.288-2.56h1.024q5.632 0 12.288 2.56t14.336 7.68 12.8 9.216 12.8 10.752 10.24 8.192q59.392 47.104 114.688 90.624 15.36 12.288 28.672 33.28t13.312 37.376zM512 361.216v-310.784q0-18.944-13.312-32.256t-32.256-13.824h-420.864q-18.432 0-32.256 13.824t-13.312 32.256v310.784q0 18.944 13.312 32.256t32.256 13.312h420.864q18.944 0 32.256-13.312t13.312-32.256z" />
-<glyph unicode="&#xe80b;" d="M0 133.888l256 256 256-256-75.776-75.776-180.224 179.712-180.224-179.712z" />
-<glyph unicode="&#xe80c;" d="M25.6 279.296q62.464-35.84 168.96-35.84t168.96 35.84l-27.648-248.832q-1.024-7.168-17.92-18.432t-51.2-22.016-72.192-10.752-71.68 10.752-51.2 22.016-18.432 18.432zM275.456 432.896q48.128-9.216 80.896-28.16t32.768-36.352v-5.12q0-29.696-57.344-50.688t-137.216-20.992-137.216 20.992-57.344 50.688v5.12q0 17.408 32.768 36.352t80.896 28.16l21.504 24.576q11.264 13.312 35.84 13.312h47.104q26.624 0 35.84-13.312zM247.808 375.552h43.008q-47.104 56.32-53.248 64.512-7.168 8.192-16.384 8.192h-52.224q-11.264 0-16.384-8.192l-54.272-64.512h43.008l32.768 33.792h41.984z" horiz-adv-x="389" />
-<glyph unicode="&#xe80d;" d="M128 448h256v-64h-256zM480 352h-448c-17.6 0-32-14.4-32-32v-160c0-17.6 14.398-32 32-32h96v-128h256v128h96c17.6 0 32 14.4 32 32v160c0 17.6-14.4 32-32 32zM352 32h-192v160h192v-160zM487.2 304c0-12.813-10.387-23.2-23.199-23.2-12.813 0-23.201 10.387-23.201 23.2s10.388 23.2 23.201 23.2c12.813 0 23.199-10.387 23.199-23.2z" />
+<font id="icomoon" horiz-adv-x="1024">
+<font-face units-per-em="1024" ascent="960" descent="-64" />
+<missing-glyph horiz-adv-x="1024" />
+<glyph unicode="&#x20;" d="" horiz-adv-x="512" />
+<glyph unicode="&#xe600;" d="M512 778.666c-188.544 0-341.334-152.832-341.334-341.332s152.788-341.334 341.334-341.334 341.334 152.832 341.334 341.334-152.788 341.332-341.334 341.332zM670.164 339.498c16.682-16.682 16.682-43.648 0-60.332-8.32-8.32-19.244-12.5-30.164-12.5s-21.846 4.182-30.164 12.5l-97.836 97.836-97.834-97.836c-8.32-8.32-19.242-12.5-30.166-12.5s-21.846 4.182-30.166 12.5c-16.682 16.682-16.682 43.648 0 60.332l97.834 97.836-97.834 97.834c-16.682 16.682-16.682 43.648 0 60.332s43.648 16.682 60.332 0l97.834-97.834 97.836 97.834c16.682 16.682 43.648 16.682 60.332 0s16.682-43.648 0-60.332l-97.836-97.834 97.836-97.836z" />
+<glyph unicode="&#xe601;" d="M490.666 146.218c-74.070 0-143.7 28.842-196.096 81.196-52.352 52.394-81.236 122.028-81.236 196.14s28.884 143.744 81.236 196.14c16.682 16.682 43.648 16.682 60.332 0s16.682-43.648 0-60.332c-36.266-36.308-56.236-84.522-56.236-135.808s19.968-99.542 56.236-135.808c36.266-36.268 84.438-56.192 135.764-56.192s99.498 19.968 135.766 56.192c36.308 36.268 56.236 84.48 56.236 135.808s-19.968 99.542-56.236 135.808c-16.682 16.682-16.682 43.648 0 60.332s43.648 16.682 60.332 0c52.352-52.438 81.236-122.070 81.236-196.14s-28.884-143.744-81.236-196.14c-52.394-52.352-122.028-81.194-196.096-81.194zM490.666 469.334c-23.594 0-42.666 19.116-42.666 42.666v213.334c0 23.552 19.072 42.666 42.668 42.666s42.668-19.116 42.668-42.666v-213.334c0-23.552-19.072-42.666-42.668-42.666z" />
+<glyph unicode="&#xe602;" d="M512 803.328l-273.664-273.664c-33.324-33.322-33.324-87.34 0-120.662s87.338-33.322 120.662 0l67.668 67.67v-308.992c0-47.104 38.188-85.332 85.334-85.332 47.104 0 85.332 38.23 85.332 85.332v308.992l67.668-67.67c16.682-16.682 38.486-25.004 60.332-25.004s43.648 8.32 60.332 25.004c33.322 33.322 33.322 87.34 0 120.662l-273.664 273.664z" />
+<glyph unicode="&#xe603;" d="M887.757 752.282c0 58.88-88.678 65.382-88.678 65.382l-208.333 13.107c0 0-4.454 56.678-46.541 76.39-42.086 19.61-88.371 13.619-121.651 13.312-33.28-0.358-41.114-42.752-41.114-82.79 0-39.987 0.717-86.221 0.717-115.2 0-52.122-22.886-74.189-80.179-74.189h-118.118c-33.024 2.099-58.726-3.277-58.726-30.003 0-26.778 38.861-254.618 92.211-307.2 30.976-30.515 220.416-51.917 260.301-51.917s26.573 117.811 37.683 117.811c11.11 0 23.245-66.509 86.118-82.074 62.771-15.718 146.637-12.8 151.091-57.498 5.786-58.982 11.11-135.27-27.699-140.698l-87.859-3.482c-60.211 4.301-44.032 70.093-17.459 70.093s39.885 0.973 39.885 0.973l3.328 71.987c0 0-137.882 16.282-143.718-76.698-5.376-84.992 9.216-125.082 19.917-133.786 10.701-8.806 29.235-25.805 198.093-25.805 237.926 0 150.733 693.402 150.733 752.282zM790.528 444.416c-9.318-10.035-43.11 16.384-75.366 16.384-32.307 0-67.123-17.101-75.315-5.786-8.192 11.213 7.475 101.888 68.301 101.888s91.802-102.605 82.381-112.486zM297.165 759.501c0 11.725 2.97 152.781 2.97 152.781l-179.456-176.128c0 0 124.006 0 148.378 0 24.371 0.051 28.109 11.725 28.109 23.347z" />
+<glyph unicode="&#xe800;" d="M0 51.712v526.336q0 183.296 87.040 284.672t265.216 101.376h561.152q-5.12-5.12-53.248-54.272t-102.4-103.424-111.616-111.616-97.28-95.232-43.008-37.888q-15.36 0-15.36 16.384v159.744h-49.152q-60.416 0-96.256-6.144t-64.512-26.624-39.936-58.368-12.288-98.304v-268.288zM68.608-68.096q5.12 5.12 54.272 54.272t102.4 103.424 111.616 112.64 97.28 95.232 41.984 36.864q15.36 0 15.36-16.384v-159.744h49.152q118.784 0 165.888 36.864t46.080 152.576v268.288l229.376 228.352v-526.336q0-183.296-86.016-284.672t-266.24-101.376h-561.152z" horiz-adv-x="982" />
+<glyph unicode="&#xe801;" d="M301.056 208.384q14.336 14.336 34.816 14.336t36.864-14.336q32.768-34.816 0-71.68l-43.008-40.96q-57.344-57.344-135.168-57.344-79.872 0-137.216 57.344t-57.344 135.168q0 79.872 57.344 137.216l151.552 151.552q71.68 69.632 147.456 78.848t131.072-44.032q16.384-16.384 16.384-36.864t-16.384-36.864q-36.864-32.768-71.68 0-51.2 49.152-135.168-34.816l-151.552-149.504q-26.624-26.624-26.624-65.536t26.624-63.488q26.624-26.624 64.512-26.624t64.512 26.624zM761.856 796.16q57.344-57.344 57.344-135.168 0-79.872-57.344-137.216l-161.792-161.792q-75.776-73.728-153.6-73.728-63.488 0-114.688 51.2-14.336 14.336-14.336 34.816t14.336 36.864q14.336 14.336 35.84 14.336t35.84-14.336q51.2-49.152 124.928 24.576l161.792 159.744q28.672 28.672 28.672 65.536 0 38.912-28.672 63.488-24.576 26.624-57.344 31.744t-61.44-21.504l-51.2-51.2q-16.384-14.336-36.864-14.336t-34.816 14.336q-34.816 34.816 0 71.68l51.2 51.2q55.296 55.296 130.048 52.224t132.096-62.464z" horiz-adv-x="820" />
+<glyph unicode="&#xe802;" d="M877.568 192v-72.704q0-15.36-10.24-25.6t-26.624-11.264h-803.84q-15.36 0-25.6 11.264t-11.264 25.6v72.704q0 15.36 11.264 25.6t25.6 11.264h803.84q15.36 0 26.624-11.264t10.24-25.6zM877.568 484.864v-73.728q0-14.336-10.24-25.6t-26.624-10.24h-803.84q-15.36 0-25.6 10.24t-11.264 25.6v73.728q0 14.336 11.264 25.6t25.6 10.24h803.84q15.36 0 26.624-10.24t10.24-25.6zM877.568 776.704v-72.704q0-15.36-10.24-25.6t-26.624-11.264h-803.84q-15.36 0-25.6 11.264t-11.264 25.6v72.704q0 15.36 11.264 26.624t25.6 10.24h803.84q15.36 0 26.624-10.24t10.24-26.624z" horiz-adv-x="878" />
+<glyph unicode="&#xe803;" d="M471.040 919.040q194.56 0 332.8-138.24t138.24-332.8-138.24-332.8-332.8-138.24-332.8 138.24-138.24 332.8 138.24 332.8 332.8 138.24zM471.040 79.36q153.6 0 261.12 108.544t107.52 260.096q0 153.6-107.52 261.12t-261.12 107.52q-151.552 0-260.096-107.52t-108.544-261.12q0-151.552 108.544-260.096t260.096-108.544zM507.904 714.24v-249.856l153.6-153.6-51.2-51.2-174.080 174.080v280.576h71.68z" horiz-adv-x="942" />
+<glyph unicode="&#xe804;" d="M254.976 89.6q-34.816 0-57.344 28.672l-184.32 241.664q-16.384 24.576-12.288 53.248t26.624 47.104 52.224 14.336 48.128-28.672l120.832-157.696 303.104 485.376q16.384 24.576 44.032 30.72t54.272-8.192q24.576-16.384 30.72-44.032t-8.192-54.272l-358.4-573.44q-20.48-32.768-57.344-32.768z" horiz-adv-x="684" />
+<glyph unicode="&#xe805;" d="M450.56 898.56l122.88-344.064h327.68l-268.288-200.704 96.256-356.352-278.528 212.992-278.528-212.992 96.256 356.352-268.288 200.704h327.68z" horiz-adv-x="902" />
+<glyph unicode="&#xe806;" d="M921.6 99.84q-88.064 155.648-212.992 201.728t-337.92 46.080v-223.232l-370.688 342.016 370.688 329.728v-196.608q92.16 0 172.032-27.648t134.144-71.68 98.304-97.28 70.656-106.496 45.056-97.28 24.576-70.656z" horiz-adv-x="922" />
+<glyph unicode="&#xe807;" d="M942.080 740.864q-36.864-55.296-96.256-100.352v-24.576q0-133.12-61.44-256t-190.464-207.872-296.96-84.992q-163.84 0-296.96 86.016 14.336-2.048 47.104-2.048 135.168 0 239.616 81.92-63.488 2.048-112.64 38.912t-67.584 96.256q10.24-4.096 34.816-4.096 26.624 0 51.2 6.144-67.584 14.336-110.592 67.584t-43.008 122.88v2.048q36.864-20.48 86.016-24.576-86.016 59.392-86.016 161.792 0 49.152 26.624 96.256 157.696-192.512 399.36-200.704-6.144 18.432-6.144 43.008 0 79.872 56.32 136.192t138.24 56.32q83.968 0 139.264-59.392 61.44 12.288 122.88 45.056-20.48-67.584-83.968-106.496 57.344 8.192 110.592 30.72z" horiz-adv-x="942" />
+<glyph unicode="&#xe808;" d="M219.136 192q0-46.080-31.744-77.824t-77.824-31.744-77.824 31.744-31.744 77.824 31.744 77.824 77.824 31.744 77.824-31.744 31.744-77.824zM512 121.344q1.024-15.36-9.216-26.624-11.264-12.288-27.648-12.288h-76.8q-14.336 0-24.576 9.216t-11.264 23.552q-12.288 131.072-105.472 224.256t-224.256 105.472q-14.336 1.024-23.552 11.264t-9.216 24.576v76.8q0 16.384 12.288 26.624 9.216 10.24 24.576 10.24h3.072q91.136-7.168 174.080-46.080t148.48-103.424q64.512-64.512 103.424-148.48t46.080-175.104zM804.864 120.32q1.024-15.36-10.24-26.624-10.24-11.264-26.624-11.264h-81.92q-14.336 0-25.6 10.24t-11.264 23.552q-6.144 122.88-57.344 233.472t-132.096 192.512-192.512 132.096-232.448 58.368q-14.336 0-24.576 11.264t-10.24 24.576v81.92q0 15.36 11.264 26.624 10.24 10.24 25.6 10.24h1.024q150.528-8.192 286.72-68.608t243.712-167.936q106.496-106.496 167.936-243.712t68.608-286.72z" horiz-adv-x="804" />
+<glyph unicode="&#xe809;" d="M0 628.224l151.552 151.552 360.448-359.424 360.448 359.424 151.552-151.552-512-512-151.552 151.552z" />
+<glyph unicode="&#xe80a;" d="M951.296 100.864v438.272q-18.432-20.48-39.936-37.888-152.576-116.736-243.712-192.512-28.672-24.576-47.104-38.912t-49.152-27.648-58.368-13.312h-2.048q-26.624 0-58.368 13.312t-49.152 27.648-47.104 38.912q-90.112 75.776-243.712 192.512-21.504 17.408-39.936 37.888v-438.272q0-8.192 6.144-13.312t12.288-5.12h841.728q7.168 0 12.288 5.12t6.144 13.312zM951.296 700.928v14.336t-1.024 7.168-1.024 7.168-3.072 5.12-5.12 4.096-8.192 2.048h-841.728q-7.168 0-12.288-6.144t-6.144-12.288q0-96.256 83.968-162.816 110.592-87.040 229.376-181.248 4.096-2.048 20.48-16.384t25.6-21.504 25.6-18.432 28.672-15.36 24.576-5.12h2.048q11.264 0 24.576 5.12t28.672 15.36 25.6 18.432 25.6 21.504 20.48 16.384q118.784 94.208 229.376 181.248 30.72 24.576 57.344 66.56t26.624 74.752zM1024 722.432v-621.568q0-37.888-26.624-64.512t-64.512-27.648h-841.728q-36.864 0-64.512 27.648t-26.624 64.512v621.568q0 37.888 26.624 64.512t64.512 26.624h841.728q37.888 0 64.512-26.624t26.624-64.512z" />
+<glyph unicode="&#xe80b;" d="M0 267.776l512 512 512-512-151.552-151.552-360.448 359.424-360.448-359.424z" />
+<glyph unicode="&#xe80c;" d="M51.2 558.592q124.928-71.68 337.92-71.68t337.92 71.68l-55.296-497.664q-2.048-14.336-35.84-36.864t-102.4-44.032-144.384-21.504-143.36 21.504-102.4 44.032-36.864 36.864zM550.912 865.792q96.256-18.432 161.792-56.32t65.536-72.704v-10.24q0-59.392-114.688-101.376t-274.432-41.984-274.432 41.984-114.688 101.376v10.24q0 34.816 65.536 72.704t161.792 56.32l43.008 49.152q22.528 26.624 71.68 26.624h94.208q53.248 0 71.68-26.624zM495.616 751.104h86.016q-94.208 112.64-106.496 129.024-14.336 16.384-32.768 16.384h-104.448q-22.528 0-32.768-16.384l-108.544-129.024h86.016l65.536 67.584h83.968z" horiz-adv-x="778" />
+<glyph unicode="&#xe80d;" d="M256 896h512v-128h-512zM960 704h-896c-35.2 0-64-28.8-64-64v-320c0-35.2 28.796-64 64-64h192v-256h512v256h192c35.2 0 64 28.8 64 64v320c0 35.2-28.8 64-64 64zM704 64h-384v320h384v-320zM974.4 608c0-25.626-20.774-46.4-46.398-46.4-25.626 0-46.402 20.774-46.402 46.4s20.776 46.4 46.402 46.4c25.626 0 46.398-20.774 46.398-46.4z" />
+<glyph unicode="&#xe904;" d="M896 704v128h-896v-704c0-35.346 28.654-64 64-64h864c53.022 0 96 42.978 96 96v544h-128zM832 128h-768v640h768v-640zM128 640h640v-64h-640zM512 512h256v-64h-256zM512 384h256v-64h-256zM512 256h192v-64h-192zM128 512h320v-320h-320z" />
+<glyph unicode="&#xe90d;" d="M959.884 832c0.040-0.034 0.082-0.076 0.116-0.116v-767.77c-0.034-0.040-0.076-0.082-0.116-0.116h-895.77c-0.040 0.034-0.082 0.076-0.114 0.116v767.772c0.034 0.040 0.076 0.082 0.114 0.114h895.77zM960 896h-896c-35.2 0-64-28.8-64-64v-768c0-35.2 28.8-64 64-64h896c35.2 0 64 28.8 64 64v768c0 35.2-28.8 64-64 64v0zM832 672c0-53.020-42.98-96-96-96s-96 42.98-96 96 42.98 96 96 96 96-42.98 96-96zM896 128h-768v128l224 384 256-320h64l224 192z" />
+<glyph unicode="&#xe911;" d="M960 960h64v-736c0-88.366-100.29-160-224-160s-224 71.634-224 160c0 88.368 100.29 160 224 160 62.684 0 119.342-18.4 160-48.040v368.040l-512-113.778v-494.222c0-88.366-100.288-160-224-160s-224 71.634-224 160c0 88.368 100.288 160 224 160 62.684 0 119.342-18.4 160-48.040v624.040l576 128z" />
+<glyph unicode="&#xe913;" d="M0 832v-768h1024v768h-1024zM192 128h-128v128h128v-128zM192 384h-128v128h128v-128zM192 640h-128v128h128v-128zM768 128h-512v640h512v-640zM960 128h-128v128h128v-128zM960 384h-128v128h128v-128zM960 640h-128v128h128v-128zM384 640v-384l256 192z" />
+<glyph unicode="&#xe915;" d="M864 768h-512c-88 0-160-72-160-160v-512c0-88 72-160 160-160h512c88 0 160 72 160 160v512c0 88-72 160-160 160zM416 64c-53.020 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96-42.98-96-96-96zM416 448c-53.020 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96-42.98-96-96-96zM608 256c-53.020 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96-42.98-96-96-96zM800 64c-53.020 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96-42.98-96-96-96zM800 448c-53.020 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96-42.98-96-96-96zM828.76 832c-14.93 72.804-79.71 128-156.76 128h-512c-88 0-160-72-160-160v-512c0-77.046 55.196-141.83 128-156.76v636.76c0 35.2 28.8 64 64 64h636.76z" />
+<glyph unicode="&#xe936;" d="M1232 960h-384c-26.4 0-63.274-15.274-81.942-33.942l-476.116-476.116c-18.668-18.668-18.668-49.214 0-67.882l412.118-412.118c18.668-18.668 49.214-18.668 67.882 0l476.118 476.118c18.666 18.666 33.94 55.54 33.94 81.94v384c0 26.4-21.6 48-48 48zM992 576c-53.020 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96-42.98-96-96-96zM128 416l544 544h-80c-26.4 0-63.274-15.274-81.942-33.942l-476.116-476.116c-18.668-18.668-18.668-49.214 0-67.882l412.118-412.118c18.668-18.668 49.214-18.668 67.882 0l30.058 30.058-416 416z" horiz-adv-x="1280" />
+<glyph unicode="&#xe941;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM320 448c0 106.040 85.96 192 192 192s192-85.96 192-192-85.96-192-192-192-192 85.96-192 192zM925.98 276.524v0l-177.42 73.49c12.518 30.184 19.44 63.276 19.44 97.986s-6.922 67.802-19.44 97.986l177.42 73.49c21.908-52.822 34.020-110.73 34.020-171.476s-12.114-118.654-34.020-171.476v0zM683.478 861.98v0 0l-73.49-177.42c-30.184 12.518-63.276 19.44-97.988 19.44s-67.802-6.922-97.986-19.44l-73.49 177.422c52.822 21.904 110.732 34.018 171.476 34.018 60.746 0 118.654-12.114 171.478-34.020zM98.020 619.476l177.422-73.49c-12.518-30.184-19.442-63.276-19.442-97.986s6.922-67.802 19.44-97.986l-177.42-73.49c-21.906 52.822-34.020 110.73-34.020 171.476s12.114 118.654 34.020 171.476zM340.524 34.020l73.49 177.42c30.184-12.518 63.276-19.44 97.986-19.44s67.802 6.922 97.986 19.44l73.49-177.42c-52.822-21.904-110.73-34.020-171.476-34.020-60.744 0-118.654 12.114-171.476 34.020z" />
+<glyph unicode="&#xe96d;" d="M480 960v0c265.096 0 480-173.914 480-388.448s-214.904-388.448-480-388.448c-25.458 0-50.446 1.62-74.834 4.71-103.106-102.694-222.172-121.108-341.166-123.814v25.134c64.252 31.354 116 88.466 116 153.734 0 9.106-0.712 18.048-2.030 26.794-108.558 71.214-177.97 179.988-177.97 301.89 0 214.534 214.904 388.448 480 388.448zM996 89.314c0-55.942 36.314-104.898 92-131.772v-21.542c-103.126 2.318-197.786 18.102-287.142 106.126-21.14-2.65-42.794-4.040-64.858-4.040-95.47 0-183.408 25.758-253.614 69.040 144.674 0.506 281.26 46.854 384.834 130.672 52.208 42.252 93.394 91.826 122.414 147.348 30.766 58.866 46.366 121.582 46.366 186.406 0 10.448-0.45 20.836-1.258 31.168 72.57-59.934 117.258-141.622 117.258-231.676 0-104.488-60.158-197.722-154.24-258.764-1.142-7.496-1.76-15.16-1.76-22.966z" horiz-adv-x="1152" />
+<glyph unicode="&#xe994;" d="M933.79 349.75c-53.726 93.054-21.416 212.304 72.152 266.488l-100.626 174.292c-28.75-16.854-62.176-26.518-97.846-26.518-107.536 0-194.708 87.746-194.708 195.99h-201.258c0.266-33.41-8.074-67.282-25.958-98.252-53.724-93.056-173.156-124.702-266.862-70.758l-100.624-174.292c28.97-16.472 54.050-40.588 71.886-71.478 53.638-92.908 21.512-211.92-71.708-266.224l100.626-174.292c28.65 16.696 61.916 26.254 97.4 26.254 107.196 0 194.144-87.192 194.7-194.958h201.254c-0.086 33.074 8.272 66.57 25.966 97.218 53.636 92.906 172.776 124.594 266.414 71.012l100.626 174.29c-28.78 16.466-53.692 40.498-71.434 71.228zM512 240.668c-114.508 0-207.336 92.824-207.336 207.334 0 114.508 92.826 207.334 207.336 207.334 114.508 0 207.332-92.826 207.332-207.334-0.002-114.51-92.824-207.334-207.332-207.334z" />
+<glyph unicode="&#xe9ca;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512-0.002c-62.958 0-122.872 13.012-177.23 36.452l233.148 262.29c5.206 5.858 8.082 13.422 8.082 21.26v96c0 17.674-14.326 32-32 32-112.99 0-232.204 117.462-233.374 118.626-6 6.002-14.14 9.374-22.626 9.374h-128c-17.672 0-32-14.328-32-32v-192c0-12.122 6.848-23.202 17.69-28.622l110.31-55.156v-187.886c-116.052 80.956-192 215.432-192 367.664 0 68.714 15.49 133.806 43.138 192h116.862c8.488 0 16.626 3.372 22.628 9.372l128 128c6 6.002 9.372 14.14 9.372 22.628v77.412c40.562 12.074 83.518 18.588 128 18.588 70.406 0 137.004-16.26 196.282-45.2-4.144-3.502-8.176-7.164-12.046-11.036-36.266-36.264-56.236-84.478-56.236-135.764s19.97-99.5 56.236-135.764c36.434-36.432 85.218-56.264 135.634-56.26 3.166 0 6.342 0.080 9.518 0.236 13.814-51.802 38.752-186.656-8.404-372.334-0.444-1.744-0.696-3.488-0.842-5.224-81.324-83.080-194.7-134.656-320.142-134.656z" />
+<glyph unicode="&#xea2e;" d="M889.68 793.68c-93.608 102.216-228.154 166.32-377.68 166.32-282.77 0-512-229.23-512-512h96c0 229.75 186.25 416 416 416 123.020 0 233.542-53.418 309.696-138.306l-149.696-149.694h352v352l-134.32-134.32zM928 448c0-229.75-186.25-416-416-416-123.020 0-233.542 53.418-309.694 138.306l149.694 149.694h-352v-352l134.32 134.32c93.608-102.216 228.154-166.32 377.68-166.32 282.77 0 512 229.23 512 512h-96z" />
 </font></defs></svg>
\ No newline at end of file
index bb1f21f888d3786dd6db4bc0d75ab322b1eaac75..923f56d81c16584c4f1c6d79514e98c751761d56 100644 (file)
Binary files a/themes/baggy/fonts/icomoon.ttf and b/themes/baggy/fonts/icomoon.ttf differ
index bab137795473159c2c2c0c176cfea5d3dce56ec7..a2e86d3616c36afbe141308cda65ad8a388f60e7 100644 (file)
Binary files a/themes/baggy/fonts/icomoon.woff and b/themes/baggy/fonts/icomoon.woff differ
index 93515080d20f83ade7c672ed610357703f17e14c..93d2815b3eb473a0618795485e058ba06e06d269 100755 (executable)
@@ -25,7 +25,7 @@
                 {% block pager %}
                     {% if nb_results > 1 %}
                 <div class="results">
-                    <div class="nb-results">{{ nb_results }} {% trans "results" %}{% if search_term is defined %} {% trans %}found for « {{ search_term }} »{% endtrans %}{% endif %}</div>
+                    <div class="nb-results">{{ nb_results }} {% trans "results" %}{% if search_term is defined %} {% trans %}found for « {{ search_term }} »{% endtrans %}{% endif %} <a href="?action=random" class="icon icon-random"><span> {% trans "random" %}</span></a></div>
                         {{ page_links | raw }}
                 </div>
                     {% elseif nb_results == 1 %}
index 1afd9df6a46d53894efb9343d66099df0ae3e410..0d0a4438e8e51ba43483b8134c980e3abf9b7f19 100755 (executable)
                 {% if constant('SHARE_TWITTER') == 1 %}<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="{% trans "Tweet" %}"><span>{% trans "Tweet" %}</span></a></li>{% endif %}
                 {% if constant('SHARE_MAIL') == 1 %}<li><a href="mailto:?subject={{ entry.title|url_encode }}&amp;body={{ entry.url|url_encode }}%20via%20@wallabagapp" class="tool email icon icon-mail" title="{% trans "Email" %}"><span>{% trans "Email" %}</span></a></li>{% endif %}
                 {% if constant('SHARE_SHAARLI') == 1 %}<li><a href="{{ constant('SHAARLI_URL') }}/index.php?post={{ entry.url|url_encode }}&amp;title={{ entry.title|url_encode }}" target="_blank" class="tool shaarli" title="{% trans "shaarli" %}"><span>{% trans "shaarli" %}</span></a></li>{% endif %}
+                {% if constant('SHARE_EVERNOTE') == 1 %}<li><a href="https://www.evernote.com/clip.action?url={{ entry.url|url_encode }}&amp;title={{ entry.title|url_encode }}" target="_blank" class="tool evernote icon icon-evernote" title="{% trans "evernote" %}"><span>{% trans "evernote" %}</span></a></li>{% endif %}
                 {% if constant('SHARE_DIASPORA') == 1 %}<li><a href="{{ constant('DIASPORA_URL') }}/bookmarklet?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}&notes=&v=1&noui=1&jump=doclose" target="_blank" class="tool diaspora icon-image icon-image--diaspora" title="{% trans "diaspora" %}"><span>{% trans "diaspora" %}</span></a></li>{% endif %}
                 {% if constant('FLATTR') == 1 %}{% if flattr.status == constant('FLATTRABLE') %}<li><a href="http://flattr.com/submit/auto?url={{ entry.url }}" class="tool flattr icon icon-flattr" target="_blank" title="{% trans "flattr" %}"><span>{% trans "flattr" %}</span></a></li>{% elseif flattr.status == constant('FLATTRED') %}<li><a href="{{ flattr.flattrItemURL }}" class="tool flattr icon icon-flattr" target="_blank" title="{% trans "flattr" %}"><span>{% trans "flattr" %}</span> ({{ flattr.numFlattrs }})</a></li>{% endif %}{% endif %}
                 {% if constant('CARROT') == 1 %}<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="{% trans "carrot" %}"><span>Carrot</span></a></li>{% endif %}
                 {% if constant('SHOW_PRINTLINK') == 1 %}<li><a title="{% trans "Print" %}" class="tool icon icon-print" href="javascript: window.print();"><span>{% trans "Print" %}</span></a></li>{% endif %}
+                {% if constant('RELOAD_ARTICLE') == 1 %}<li><a class="tool reload icon icon-reload" href="./?action=reload_article&amp;id={{ entry.id|e }}" title="{% trans "Reload article" %}"><span>{% trans "Reload article" %}</span></a></li>{% endif %}
                 {% if constant('EPUB') == 1 %}<li><a href="./?epub&amp;method=id&amp;value={{ entry.id|e }}" title="Generate ePub file">EPUB</a></li>{% endif %}
                 {% if constant('MOBI') == 1 %}<li><a href="./?mobi&amp;method=id&amp;value={{ entry.id|e }}" title="Generate Mobi file">MOBI</a></li>{% endif %}
                 {% if constant('PDF') == 1 %}<li><a href="./?pdf&amp;method=id&amp;value={{ entry.id|e }}" title="Generate PDF file">PDF</a></li>{% endif %}
index 8c982db09dae6192287d65324f1e09b36bf7e496..71991341049a1800293674532c6a5fb4393bd4a1 100755 (executable)
@@ -2,6 +2,10 @@
     <a href="javascript: void(null);" id="bagit-form-close">&nbsp;</a>
     <form method="get" action="index.php" id="bagit-form-form">
       <input required placeholder="example.com/article" class="addurl" id="plainurl" name="plainurl" type="url" />
+      <div style="display:inline-block;cursor: pointer;" title="{% trans "Edit tags" %}" id="showtaginput" class="edit-tags">
+         <span id="showtaginput">Add tags</span>
+      </div>
+      <input placeholder="tags, with commas" class="addurl" id="tags2add" name="tags" type="text"/>
       <input type="submit" value="{% trans "save link!" %}" />
       <div id="add-link-result"></div>
     </form>
index 5ca3217c99dcd85d8dd4484d9bb797f52a0c8438..bab9b5ebfce92f4705438f8543db203faaa322aa 100755 (executable)
@@ -7,6 +7,8 @@
 {% block content %}
     <h2>{% trans "About wallabag" %}</h2>
 
+    <p>{% trans "wallabag is a read-it-later application: you can save a web page by keeping only content. Elements like ads or menus are deleted." %}</p>
+    
     <dl>
         <dt>{% trans "Project website" %}</dt>
         <dd><a href="http://www.wallabag.org">http://www.wallabag.org</a></dd>
@@ -27,8 +29,6 @@
         <dd>{{ constant('POCHE') }}</dd>
     </dl>
 
-    <p>{% trans "wallabag is a read-it-later application: you can save a web page by keeping only content. Elements like ads or menus are deleted." %}</p>
-
     <h2>{% trans "Helping wallabag" %}</h2>
 
     <p>{% trans "wallabag is free and opensource. You can help us:" %}</p>
index bac563cf2d31a1fbe64667f2324d9f871411c7f3..87f964c9597c1a3817755d1c6a4875de5e900bea 100755 (executable)
@@ -27,7 +27,7 @@
             </ul>
                 <h3>{% trans "Bookmarklet" %}</h3>
                 <p>
-                {% trans "Drag &amp; drop this link to your bookmarks bar:" %} <a id="bookmarklet" ondragend="this.click();" href="javascript:if(top['bookmarklet-url@wallabag.org']){top['bookmarklet-url@wallabag.org'];}else{(function(){var%20url%20=%20location.href%20||%20url;window.open('{{ poche_url }}?action=add&url='%20+%20btoa(url),'_self');})();void(0);}">{% trans "bag it!" %}</a>
+                {% trans "Drag &amp; drop this link to your bookmarks bar:" %} <a id="bookmarklet" ondragend="this.click();" href="javascript:if(top['bookmarklet-url@wallabag.org']){top['bookmarklet-url@wallabag.org'];}else{(function(){var%20url%20=%20location.href%20||%20url;window.open('{{ poche_url }}?action=add&autoclose=true&url='%20+%20btoa(url),'_blank');})();void(0);}">{% trans "bag it!" %}</a>
                 </p>
 
             <h2>{% trans "Feeds" %}</h2>
index 4406d48f4329e8bdcc8423abf234092e365fed0c..da8703f2b2efe5c4972af80441f9415b1a5436c9 100755 (executable)
@@ -43,6 +43,11 @@ a.carrot span {
     background-size: 16px 16px;
 }
 
+a.evernote span {
+    background-image: url('../../_global/img/icons/evernote-icon--black.svg');
+    background-size: 16px 16px;
+}
+
 a.diaspora span {
     background-image: url('../../_global/img/icons/diaspora-icon--black.png');
     background-size: 16px 16px;
@@ -67,3 +72,16 @@ a.bad-display span {
 a.print span {
                background-image: url('../img/default/print.png');
 }
+a.reload span {
+    background-image: url('../img/default/reload.png');
+}
+.edit-tags span {
+    background-image: url('../img/default/tags.png');
+    display: inline-block;
+    width: 16px;
+    height: 16px;
+    /* Hide textual content */
+    overflow: hidden;
+    text-align: left;
+    text-indent: -9999px;
+}
index b25373d6c98cef6da4e4c85ed9ac64b352d115a9..a122dc546b2d7f8e1fb80772cb750eb8901a704f 100755 (executable)
@@ -151,6 +151,16 @@ a:visited {
     text-indent: -9999px;
 }
 
+.random {
+    display: inline-block;
+    width: 16px;
+    height: 16px;
+    overflow: hidden;
+    text-align: left;
+    text-indent: -9999px;
+    background-image: url('../img/default/dice.png');
+}
+
 /*** ***/
 
 /*** ARTICLE PAGE ***/
index b90005598cbbb5ffa3e924fce530427720c09230..8fe563972b0a369dc52f0fa8715b479ad37768cf 100755 (executable)
@@ -31,7 +31,8 @@
                 {% block pager %}
                     {% if nb_results > 1 %}
                 <div class="results">
-                    <div class="nb-results">{{ nb_results }} {% trans "results" %}{% if searchterm is defined %}{% trans " found for « " %} {{ searchterm }} »{% endif %}</div>
+                    <div class="nb-results">{{ nb_results }} {% trans "results" %}{% if searchterm is defined %}{% trans " found for « " %} {{ searchterm }} »{% endif %}
+                    <a class="random" href="?action=random"><span>{% trans "random" %}</span></a></div>
                         {{ page_links | raw }}
                 </div>
                     {% elseif nb_results == 1 %}
diff --git a/themes/default/img/default/dice.png b/themes/default/img/default/dice.png
new file mode 100644 (file)
index 0000000..70af6d0
Binary files /dev/null and b/themes/default/img/default/dice.png differ
diff --git a/themes/default/img/default/reload.png b/themes/default/img/default/reload.png
new file mode 100644 (file)
index 0000000..4c0528e
Binary files /dev/null and b/themes/default/img/default/reload.png differ
diff --git a/themes/default/img/default/tags.png b/themes/default/img/default/tags.png
new file mode 100644 (file)
index 0000000..3714203
Binary files /dev/null and b/themes/default/img/default/tags.png differ
index 8f3a26c3d367597482cc3d152ae1c774daca6fb2..87371d1316db9407b2da3453037abee6dee4667e 100755 (executable)
                 {% if constant('SHARE_TWITTER') == 1 %}<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" title="{% trans "Tweet" %}"><span>{% trans "Tweet" %}</span></a></li>{% endif %}
                 {% if constant('SHARE_MAIL') == 1 %}<li><a href="mailto:?subject={{ entry.title|url_encode }}&amp;body={{ entry.url|url_encode }}%20via%20@wallabagapp" class="tool email" title="{% trans "Email" %}"><span>{% trans "Email" %}</span></a></li>{% endif %}
                 {% if constant('SHARE_SHAARLI') == 1 %}<li><a href="{{ constant('SHAARLI_URL') }}/index.php?post={{ entry.url|url_encode }}&amp;title={{ entry.title|url_encode }}" target="_blank" class="tool shaarli" title="{% trans "shaarli" %}"><span>{% trans "shaarli" %}</span></a></li>{% endif %}
+                {% if constant('SHARE_EVERNOTE') == 1 %}<li><a href="https://www.evernote.com/clip.action?url={{ entry.url|url_encode }}&amp;title={{ entry.title|url_encode }}" target="_blank" class="tool evernote" title="{% trans "evernote" %}"><span>{% trans "evernote" %}</span></a></li>{% endif %}
                 {% if constant('SHARE_DIASPORA') == 1 %}<li><a href="{{ constant('DIASPORA_URL') }}/bookmarklet?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}&notes=&v=1&noui=1&jump=doclose" target="_blank" class="tool diaspora" title="{% trans "diaspora" %}"><span>{% trans "diaspora" %}</span></a></li>{% endif %}
                 {% if constant('FLATTR') == 1 %}{% if flattr.status == constant('FLATTRABLE') %}<li><a href="http://flattr.com/submit/auto?url={{ entry.url }}" class="tool flattr" target="_blank" title="{% trans "flattr" %}"><span>{% trans "flattr" %}</span></a></li>{% elseif flattr.status == constant('FLATTRED') %}<li><a href="{{ flattr.flattrItemURL }}" class="tool flattr" target="_blank" title="{% trans "flattr" %}"><span>{% trans "flattr" %}</span>{{ flattr.numFlattrs }}</a></li>{% endif %}{% endif %}
                 {% if constant('CARROT') == 1 %}<li><a href="https://secure.carrot.org/GiveAndGetBack.do?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}" class="tool carrot icon" target="_blank" title="{% trans "carrot" %}"><span>{% trans "carrot" %}</span></a></li>{% endif %}
                 {% if constant('SHOW_PRINTLINK') == 1 %}<li><a title="{% trans "Print" %}" class="tool print" href="javascript: window.print();"><span>{% trans "Print" %}</span></a></li>{% endif %}
+                {% if constant('RELOAD_ARTICLE') == 1 %}<li><a class="tool reload" href="./?action=reload_article&amp;id={{ entry.id|e }}" title="{% trans "Reload article" %}"><span>{% trans "Reload article" %}</span></a></li>{% endif %}}
                 {% if constant('EPUB') == 1 %}<li><a href="./?epub&amp;method=id&amp;value={{ entry.id|e }}" title="Generate ePub file">EPUB</a></li>{% endif %}
                 {% if constant('MOBI') == 1 %}<li><a href="./?mobi&amp;method=id&amp;value={{ entry.id|e }}" title="Generate Mobi file">MOBI</a></li>{% endif %}
                 {% if constant('PDF') == 1 %}<li><a href="./?pdf&amp;method=id&amp;value={{ entry.id|e }}" title="Generate PDF file">PDF</a></li>{% endif %}